6주간의 인턴 끝.

기간 : 1월 16일 - 2월 28일 (순수 6주)
회사 : http://www.sualab.com

Deep learning based industrial image analysis toolkit의 알파버전을 개발했다.
(시장에서의 선점 기업은 https://www.vidi-systems.com/ 이다.)
구체적으로 내가 무엇을 했는 지는 https://www.linkedin.com/in/taeguk/ 에 적어놓았다.

회사는 되게 좋다. 우리나라에 이 만한 회사 몇 없을 것이다.
회사가 궁금한 사람은 아래 방송을 보는 것도 좋을 것이다.
http://sbscnbc.sbs.co.kr/read.jsp?pmArticleId=10000849000

그리고,, 인턴하면서 느낌점 -> 도메인에 대한 지식과 요구사항 분석은 매우 중요하다.

  아무리 C++을 잘하고 소프트웨어 설계를 잘하는 사람이더라도 만약 비지니스 도메인을 파악하지 못한채로 개발을 시작하면, 아무 쓸데없는 결과물이 나올 것이다. 설계를 잘한다는 것은, 고급적인 디자인 패턴이나 어려운 언어 스킬들을 많이 쓴다고 되는 것이 아니다. 기술은 2순위이고, 1순위는 '요구사항'을 정확하게 분석하는 것이다. 요구사항이 정확하게 분석되고나서 기술은 그 뒤를 받쳐주는 것이다. 이번에 가장 뼈져리게 느낀 것이다. 고객들이 어떠한 것들을 요구하는지, 무엇이 중요하고 우선순위인 것인지 파악하고 구체화하는 게 가장 먼저 그리고 충분한 시간을 들여서 해야할 일이다. 요구사항과 도메인에 대한 분석이 충분히 선행되고 나서 소프트웨어적인 설계, 즉 클래스를 어떻게 설계할 것이고 어떤 기술들을 사용할 것이고 하는 것들이 고려되야 한다.
아무도 필요로 하지 않는 기능을 아무리 잘 만들어봐야 전혀 쓸모가 없다.
  그리고 소프트웨어를 설계할 때 크게 3가지 점에서 trade-off할 일이 많다. 개발시간 / 유지보수 / 성능 이다. 빨리 개발하고, 유지보수하기 좋은 코드를 짜고, 성능을 최적화하는 것, 각각은 개발자의 중요한 역량이다. 하지만 자신의 한정된 개발 역량안에서 이 3가지 점들을 효율적으로 trade-off하는 것은 더 중요하다. 상황에 따라서 각 요소들의 가중치가 크게 달라지기 때문에 정확한 trade-off를 위해서는 반드시 충분한 요구사항 분석이 선행되어야 한다. 데이터의 개수(N)이 작다면 데이터들을 굳이 효율적으로 다루기 위해 노력할 필요가 없을 가능성이 크다. 10min정도 걸리는 어떤 task의 전처리가 1sec 걸릴 때, 전처리과정을 굳이 최적화하는 것은 의미가 없을 가능성이 크다. 동시접속자가 20~30명 밖에 안될 서버를 위해 IOCP같은 기술을 쓸 필요는 없을 것이다. 항상 2080법칙을 염두해둬야하고, 2080법칙을 고려하며 설계를 진행하기 위해서는 요구사항과 user flow를 잘 파악해야만 한다. (여기서 2080법칙은 큰 범위에서의 2080법칙이다. 특정 함수/모듈 내에서의 성능 프로파일링같은 것을 의미하는 것이 아니라 user가 필요로 하는 기능에 대한 것이다. 예를 들어 전체 기능이 10가지 인데 이중에 2가지 기능이 전체 기능 사용량의 80%를 차지한다면, 개발 시 이 2가지 기능을 중점적으로 개발해야 할 것이다.)

  어쨌든 인턴 6주동안 재밌게 잘 했다. 뻘짓도 많이 한 것 같고 좀 아쉬운 점들도 많지만 그만큼 성장하고 위에 쓴 내용과 같은 매우 중요한 교훈도 얻었다. 그러고보니 Full-Time으로 코딩을 6주동안 한건 태어나서 처음이네~

댓글