SlideShare a Scribd company logo
1 of 25
Download to read offline
학생에서
현업 개발자로..
2013/04
하광성(kwangswei@gmail.com)
CTO SWP(연) webOS platform task
Web app manager / WebKit
AWARDS
2011 일등SW신입과정 사전테스트 전체 1등
2011 일등SW신입과정 6기(우수자과정) Project 최우수상
2012 Coding Expert 1기
2012 SW College 사내 우수 강사
Intensive C(Advanced) Programming
개발자가 모자라요
"취업난" VS "인력난”
2013년 SW전공 년 6,500명 배출
1) 소프트웨어 인력 양성 전략, 2013, 한국소프트웨어기술진흥협회
2) 학위 생산과 일자리의 비교(미국, 2002~2013, CACM 2008, August)
1)
2)
개발자는 모자라지 않습니다.
단지 당장 투입할 수 있는,
기본기를 갖춘 개발자
가 매우 부족할 뿐 입니다.
기업의 문제
학교의 문제
NHN "대학교육 못믿어… SW인재 직접 키운다"
‎국내 기업의 신입사원 SW 교육 VS 해외 기업의 1일 오리엔테이션.
Coursera “Algorithm Part I” – Princeton Univ.
학생의 문제
취업 준비 대학생 ‘8대 스펙 중 토익이 가장 중요’
총체적 난국!!!
But,
학교에서의 코딩과 현업에서의 코딩 간의 차이는?
학교에서 가르쳐주지 않지만 현업에서 중요한 지식들은?
※주의. 학교에서 배운 지식들이 중요하지 않다는 것은 결코 아님.
동작이 최우선!
과제 제출하면 땡!
다른 사람 코드 참조 X
아마도 학교에서는,
Clean code
동작’만’이 최우선이 아니다. (하지만, 현실에서는 최우선이다 아직.. ㅠ.ㅠ)
Readability
새로운 코드를 작성하는 시간 < 기존 코드를 수정 또는 추가하는 시간
Code Review
책을 많이 읽어야 좋은 글을 쓸 수 있듯이,
좋은 코드를 많이 읽어야 좋은 코드를 만들 수 있다.
Google 의 Code Review
Linux Community
Truck 지수
학습효과
지금부터는,
public static String testableHtml(
PageData pageData,
boolean includeSuiteSetup
) throws Exception {
WikiPage wikiPage = pageData.getWikiPage();
StringBuffer buffer = new StringBuffer();
if (pageData.hasAttribute("Test")) {
if (includeSuiteSetup) {
WikiPage suiteSetup =PageCrawlerImpl.getInheritedPage(SuiteResponder.SUITE_SETUP_NAME, wikiPage);
if (suiteSetup != null) {
WikiPagePath pagePath = suiteSetup.getPageCrawler().getFullPath(suiteSetup);
String pagePathName = PathParser.render(pagePath);
buffer.append("!include -setup .").append(pagePathName).append("n");
}
}
WikiPage setup = PageCrawlerImpl.getInheritedPage("SetUp", wikiPage);
if (setup != null) {
WikiPagePath setupPath = wikiPage.getPageCrawler().getFullPath(setup);
String setupPathName = PathParser.render(setupPath);
buffer.append("!include -setup .").append(setupPathName).append("n");
}
}
buffer.append(pageData.getContent());
if (pageData.hasAttribute("Test")) {
WikiPage teardown = PageCrawlerImpl.getInheritedPage("TearDown", wikiPage);
if (teardown != null) {
WikiPagePath tearDownPath = wikiPage.getPageCrawler().getFullPath(teardown);
String tearDownPathName = PathParser.render(tearDownPath);
buffer.append("n").append("!include -teardown .").append(tearDownPathName).append("n");
}
if (includeSuiteSetup) {
WikiPage suiteTeardown =PageCrawlerImpl.getInheritedPage(SuiteResponder.SUITE_TEARDOWN_NAME, wikiPage);
if (suiteTeardown != null) {
WikiPagePath pagePath = suiteTeardown.getPageCrawler().getFullPath (suiteTeardown);
String pagePathName = PathParser.render(pagePath);
buffer.append("!include -teardown .").append(pagePathName).append("n");
}
}
}
pageData.setContent(buffer.toString());
return pageData.getHtml();
}
Clean code
함수는 왜 분리하고, 또 언제 분리하는가?
그 밖에,
Coding style, 일관성, 주석, 관용구의 사용, 의미 있는 이름 부여하기 등등.
추천 도서
Clean code, The practice of programming, 읽기 좋은 코드가 좋은 코드다
함수(function)의 분리와 활용 – Abstraction levels of function
Clean code : Meaningful Names
public static String renderPageWithSetupsAndTeardowns(
PageData pageData, boolean isSuite) throws Exception
{
if (isTestPage(pageData))
includeSetupAndTeardownPages(pageData, isSuite);
return pageData.getHtml();
}
설계(Design)가 중요하다고 배운 당신!
엘레강스한 설계와 UML문서가 없이는 코딩 하지 않겠어!
아마도 학교에서는,
설계는 중요하다!
But, 개발 초기에 완벽한 설계는 불가능하다!
SW 설계는 경험의 산물.
Agile
십중팔구 여러분의 설계는 예상치 못한 이슈들로 계속 변한다.
그럼? 변화에 빠르게 적응하자!
점진적 개발방법론 (Scrum, TDD 등)
확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다
(open-closed principle)
지금부터는,
OPTIMIZATION!
여러분의 프로젝트에서 사용할 A라는 프로그램을 받았다고 합시다.
A의 수행시간은 30분이 걸리는데 코드를 보니 하루 정도 투자하면 수행 시간을
5분으로 단축할 수 있을 것 같습니다.
당신이라면 최적화를 하겠습니까?
최적화의 첫 번째 법칙은?
아마도 학교에서는,
글쎄요?
예/아니오 로 대답을 하기 이전에 여러분은 프로젝트 기간 동안
A를 몇 번이나 사용할 것인지 물으셔야 합니다.
First Rule of Optimization : Don’t
Optimization matters only when it matters.
Done is better than perfect - Facebook
프로그램이 어떤 환경에서 돌아갈지를 감안할 때 더 빨리 만들면 어떤 이익이 있는가?
최적화는 측정된 데이터를 기반으로!
지금부터는,
참고자료. Optimization - Your worst enemy
(http://www.flounder.com/optimization.htm)
최적화는 측정된 데이터를 기반으로!
LG SI 최적화 이슈 문의 사례
Assembly로 최적화를 했는데 Debug Mode 에서는 40% 나 성능 개선이 되는데,
Release Mode 에서는 오히려 나빠져요!
“스타트업은 데이터를 어떻게 바라봐야 하는가?”
(http://www.slideshare.net/yongho/ss-32267675)
청바지 브랜드 사례 – 우리는 우리 생각보다 세상을 모르고 있다.
사례,
백문이 불여일RUN
아마도 학교에서는,
각종 툴들은 분명 유용하다!
But, 어디까지나 ‘보조 도구’
IDE, Debugger 에 의존하여 일단 해보고 안되면 그 때가서 생각해보고 하는 방식은
개발자의 실력에는 도움이 안됨.
도구의 도움 없이 스스로 하는 ‘의도적 수련’이 필요.
“손코딩뇌컴파일눈디버깅”
손코딩뇌컴파일눈디버깅 – 매주 (수) 서초R&D센터 저녁 6시20분
당신이 제자리인 이유 - 지루하거나 불안하거나 (http://agile.egloos.com/5749946)
지금부터는,
손코딩뇌컴파일눈디버깅이 과연 효과적일까?
Interview Process
Google, Microsoft, Apple, Yahoo, Facebook, Amazon, Netflix
그들이 평가하는 것
문제를 잘 이해하는가? 필요한 조건 및 가정을 잘 도출하는 가?
어떤 과정을 통해 문제를 접근하고 풀어나가는가?
그 과정에서 의사소통을 잘 하는가?
깔끔하게 코딩을 잘 하는가?
자신의 풀이에서 버그나 예외 상황은 없는 지 검증하고 디버깅을 잘 하는가?
그들의 인터뷰 목표
“잘하는 사람을 놓치더라도 자질이 부족한 엔지니어를 채용하는 일은 없도록 하자”
홍보,
테스트??
돌아가는 코드 만들기도 바쁜데…
평가에도 반영 안되고…
아마도 학교에서는,
개발자 단계에서의 테스트는 중요하지만
현업에서도 아직까지 부족한 실정
개발자의 테스트 활동이 필요한 이유
초기 단계에서 발견된 결함은 수정이 용이, 수정 비용/시간 감소
버그를 찾는 시간 >>>>> 버그를 수정하는 시간.
수정에 대한 검증 : Side effect 방지
HW 자원으로 인한 개발 지연, 다른 모듈의 의존성 등으로 인한 개발 지연 방지
테스트를 추가하는 것이 SW를 더 나은 디자인 방향으로 유도한다.
지금부터는,
Light Scheduler 를 Design 해봅시다
예제,
class LightScheduler {
public:
LightScheduler();
void addTurnOn();
void wakeup();
private:
TimeService time;
LightController lights;
};
사용자는 32개의 전등(HW)을 켜고 끄는 작업을 light scheduler 에게 등록.
작업을 수행할 전등, 수행되는 시간, On 또는 Off 를 설정할 수 있음.
최대 128개의 작업을 Scheduling 할 수 있음.
지정된 시간이 되면 light controller 는 전등을 조작해야 함.
TimeService
시스템 타이머를 이용하여 LightScheduler를 깨워주고 시간을 받아오는 부분
LightController
전등을 직접적으로 제어하는 모듈.
초기 디자인
요구사항
Light Scheduler 를 Design 해봅시다
예제,
Light Scheduler를 개발&테스트 하려고 보니...
TimeService 는 OS 의존적인 모듈인데다가 시간은 계속해서 흐르므로 테스트가 어렵습니다.
LightController 는 HW를 직접적으로 제어하는 모듈로 자동화 테스트가 어렵습니다.
class LightScheduler {
public:
LightScheduler(TimeService&,
LightController&);
~LightScheduler();
void addTurnOn();
void wakeup();
private:
TimeService& time;
LightController& lights;
};
출처. 임베디드C를 위한 TDD
설령 Design Principle을 위반하더라도
테스트하기 좋은 코드
가 좋은 코드다!
참고자료
임베디드 C를 위한 TDD by James Grenning
TDD : 어떻게 테스트 할 지를 고민합시다.
지금부터는,
협업 및 의사소통
programming skill, communication skill, domain knowledge
Problem Solving
우리가 미적분을 배우는 이유
Problem Solving 을 통해 키워지는 역량
(남의 코드를 빨리 읽고 이해하는 능력. 예외 상황이나 오류를 찾아내는 능력.기본 코딩 스킬의 향상, 문제를 모델링 하는 능력)
TopCoder, Code jam, Hacker cup, ACM ICPC, code forces
추천 도서 : "알고리즘 문제 해결 전략", "코딩 인터뷰 완전분석”
Open Source Contribution
취미 = 일 = Global career
양질의 코드 + 전세계 뛰어난 개발자들의 Feedback
그 외에도 이런 것들을 준비했으면 좋겠습니다.
열심히'만' 하는 것보다는 '잘'해야 한다.
개발자에게 있어서 Code Quality 는 타협의 대상이 아닙니다.
기준을 높게 잡으세요.
주변의 실력자들을 보면 대부분 '이만하면 됐어...' 의 기준이 굉장히 높습니다.
함께 더불어 성장합시다.
지식은 공유되어야 하고, 여러분은 움직이셔야 합니다.
영어
......아 눈물이...ㅠ.ㅠ
오늘 이야기 한 내용에 정답은 없습니다.
Open mind~!
마지막으로,
강연 후기 및 피드백

More Related Content

What's hot

소프트웨어 중심 시대를 준비하자
소프트웨어 중심 시대를 준비하자소프트웨어 중심 시대를 준비하자
소프트웨어 중심 시대를 준비하자Deogtae Kim
 
임태현, 프로그래머 생존 가이드
임태현, 프로그래머 생존 가이드임태현, 프로그래머 생존 가이드
임태현, 프로그래머 생존 가이드태현 임
 
이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께지수 윤
 
해외에서 일하며 느낀 것들
해외에서 일하며 느낀 것들해외에서 일하며 느낀 것들
해외에서 일하며 느낀 것들Hakhyun Kim
 
Tdd retro agile_korea_게시용
Tdd retro agile_korea_게시용Tdd retro agile_korea_게시용
Tdd retro agile_korea_게시용Sangcheol Hwang
 
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로Sungwoo Park
 
좌충우돌 조지아텍 석사(Mooc) 준비 이야기
좌충우돌 조지아텍 석사(Mooc) 준비 이야기좌충우돌 조지아텍 석사(Mooc) 준비 이야기
좌충우돌 조지아텍 석사(Mooc) 준비 이야기Hakhyun Kim
 
일반 개발자가 딥러닝을 해도 괜찮은걸까?
일반 개발자가 딥러닝을 해도 괜찮은걸까?일반 개발자가 딥러닝을 해도 괜찮은걸까?
일반 개발자가 딥러닝을 해도 괜찮은걸까?Sunghwan Kwon
 
[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드
[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드
[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드NAVER Engineering
 
해외에서 일하며 Ver 2
해외에서 일하며 Ver 2해외에서 일하며 Ver 2
해외에서 일하며 Ver 2Hakhyun Kim
 
Fast campus 안드로이드 앱 개발 프로젝트 CAMP (Fastground)
Fast campus 안드로이드 앱 개발 프로젝트 CAMP (Fastground)Fast campus 안드로이드 앱 개발 프로젝트 CAMP (Fastground)
Fast campus 안드로이드 앱 개발 프로젝트 CAMP (Fastground)동욱 하
 
Java for android
Java for androidJava for android
Java for android동욱 하
 
TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기Ji Heon Kim
 
프로그래밍 대회 문제 제작하기
프로그래밍 대회 문제 제작하기프로그래밍 대회 문제 제작하기
프로그래밍 대회 문제 제작하기인서 박
 
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)NAVER Engineering
 
훌륭한 프로그래머 되는 법
훌륭한 프로그래머 되는 법훌륭한 프로그래머 되는 법
훌륭한 프로그래머 되는 법Kai [Kyung Seok] Song
 
Clean code chapter1
Clean code chapter1Clean code chapter1
Clean code chapter1ukjinkwoun
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기Ahreum Kim
 
개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님NAVER D2
 
Test driven development
Test driven developmentTest driven development
Test driven developmentJinho Song
 

What's hot (20)

소프트웨어 중심 시대를 준비하자
소프트웨어 중심 시대를 준비하자소프트웨어 중심 시대를 준비하자
소프트웨어 중심 시대를 준비하자
 
임태현, 프로그래머 생존 가이드
임태현, 프로그래머 생존 가이드임태현, 프로그래머 생존 가이드
임태현, 프로그래머 생존 가이드
 
이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께
 
해외에서 일하며 느낀 것들
해외에서 일하며 느낀 것들해외에서 일하며 느낀 것들
해외에서 일하며 느낀 것들
 
Tdd retro agile_korea_게시용
Tdd retro agile_korea_게시용Tdd retro agile_korea_게시용
Tdd retro agile_korea_게시용
 
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로
 
좌충우돌 조지아텍 석사(Mooc) 준비 이야기
좌충우돌 조지아텍 석사(Mooc) 준비 이야기좌충우돌 조지아텍 석사(Mooc) 준비 이야기
좌충우돌 조지아텍 석사(Mooc) 준비 이야기
 
일반 개발자가 딥러닝을 해도 괜찮은걸까?
일반 개발자가 딥러닝을 해도 괜찮은걸까?일반 개발자가 딥러닝을 해도 괜찮은걸까?
일반 개발자가 딥러닝을 해도 괜찮은걸까?
 
[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드
[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드
[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드
 
해외에서 일하며 Ver 2
해외에서 일하며 Ver 2해외에서 일하며 Ver 2
해외에서 일하며 Ver 2
 
Fast campus 안드로이드 앱 개발 프로젝트 CAMP (Fastground)
Fast campus 안드로이드 앱 개발 프로젝트 CAMP (Fastground)Fast campus 안드로이드 앱 개발 프로젝트 CAMP (Fastground)
Fast campus 안드로이드 앱 개발 프로젝트 CAMP (Fastground)
 
Java for android
Java for androidJava for android
Java for android
 
TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기
 
프로그래밍 대회 문제 제작하기
프로그래밍 대회 문제 제작하기프로그래밍 대회 문제 제작하기
프로그래밍 대회 문제 제작하기
 
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
 
훌륭한 프로그래머 되는 법
훌륭한 프로그래머 되는 법훌륭한 프로그래머 되는 법
훌륭한 프로그래머 되는 법
 
Clean code chapter1
Clean code chapter1Clean code chapter1
Clean code chapter1
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
 
개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님
 
Test driven development
Test driven developmentTest driven development
Test driven development
 

Viewers also liked

회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemy회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemyJc Kim
 
디자이너 해외취업 가이드북
디자이너 해외취업 가이드북디자이너 해외취업 가이드북
디자이너 해외취업 가이드북USABLE 윤
 
[1216 박민근] 게임회사취업및이직에관한조언
[1216 박민근] 게임회사취업및이직에관한조언[1216 박민근] 게임회사취업및이직에관한조언
[1216 박민근] 게임회사취업및이직에관한조언MinGeun Park
 
해외 취업 이야기
해외 취업 이야기해외 취업 이야기
해외 취업 이야기OnGameServer
 
내 질문에는 왜 답변이 달리지 않을까
내 질문에는 왜 답변이 달리지 않을까내 질문에는 왜 답변이 달리지 않을까
내 질문에는 왜 답변이 달리지 않을까Hoyoung Jung
 
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)MinGeun Park
 
Online course 이야기
Online course 이야기Online course 이야기
Online course 이야기Hakhyun Kim
 
Victoria's Secret Angels Campaign
Victoria's Secret Angels CampaignVictoria's Secret Angels Campaign
Victoria's Secret Angels CampaignJohn White
 

Viewers also liked (9)

Work at home
Work at homeWork at home
Work at home
 
회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemy회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemy
 
디자이너 해외취업 가이드북
디자이너 해외취업 가이드북디자이너 해외취업 가이드북
디자이너 해외취업 가이드북
 
[1216 박민근] 게임회사취업및이직에관한조언
[1216 박민근] 게임회사취업및이직에관한조언[1216 박민근] 게임회사취업및이직에관한조언
[1216 박민근] 게임회사취업및이직에관한조언
 
해외 취업 이야기
해외 취업 이야기해외 취업 이야기
해외 취업 이야기
 
내 질문에는 왜 답변이 달리지 않을까
내 질문에는 왜 답변이 달리지 않을까내 질문에는 왜 답변이 달리지 않을까
내 질문에는 왜 답변이 달리지 않을까
 
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
 
Online course 이야기
Online course 이야기Online course 이야기
Online course 이야기
 
Victoria's Secret Angels Campaign
Victoria's Secret Angels CampaignVictoria's Secret Angels Campaign
Victoria's Secret Angels Campaign
 

Similar to [강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여

예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기수보 김
 
퍼블리셔, 프론트엔드개발을 시작하다
퍼블리셔, 프론트엔드개발을 시작하다퍼블리셔, 프론트엔드개발을 시작하다
퍼블리셔, 프론트엔드개발을 시작하다정석 양
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Testbeom kyun choi
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기Chris Ohk
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)SangIn Choung
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스Hee Jae Lee
 
3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약Tae wook kang
 
데이터 과학자를 위한 신규 인공지능 서비스 - 김대근, 이유동, AWS AI/ML 스페셜리스트 솔루션즈 아키텍트 / 소성운, 카카오스타일 ...
데이터 과학자를 위한 신규 인공지능 서비스 - 김대근, 이유동, AWS AI/ML 스페셜리스트 솔루션즈 아키텍트 / 소성운, 카카오스타일 ...데이터 과학자를 위한 신규 인공지능 서비스 - 김대근, 이유동, AWS AI/ML 스페셜리스트 솔루션즈 아키텍트 / 소성운, 카카오스타일 ...
데이터 과학자를 위한 신규 인공지능 서비스 - 김대근, 이유동, AWS AI/ML 스페셜리스트 솔루션즈 아키텍트 / 소성운, 카카오스타일 ...Amazon Web Services Korea
 
OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)Jinwook On
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기Sunghyouk Bae
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Javajigi Jaesung
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010Ryan Park
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10Ryan Park
 
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220Seomgi Han
 
ecdevday3 효율적인 유지보수를 위한 개발 및 관리
ecdevday3 효율적인 유지보수를 위한 개발 및 관리ecdevday3 효율적인 유지보수를 위한 개발 및 관리
ecdevday3 효율적인 유지보수를 위한 개발 및 관리Kenu, GwangNam Heo
 
track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, ...
track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, ...track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, ...
track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, ...양 한빛
 
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Jaesup Kwak
 
개발자, 성장하는 '척' 말고, 진짜 성장하기
개발자, 성장하는 '척' 말고, 진짜 성장하기개발자, 성장하는 '척' 말고, 진짜 성장하기
개발자, 성장하는 '척' 말고, 진짜 성장하기Donghyun Cho
 

Similar to [강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여 (20)

예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기
 
퍼블리셔, 프론트엔드개발을 시작하다
퍼블리셔, 프론트엔드개발을 시작하다퍼블리셔, 프론트엔드개발을 시작하다
퍼블리셔, 프론트엔드개발을 시작하다
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
 
3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약
 
데이터 과학자를 위한 신규 인공지능 서비스 - 김대근, 이유동, AWS AI/ML 스페셜리스트 솔루션즈 아키텍트 / 소성운, 카카오스타일 ...
데이터 과학자를 위한 신규 인공지능 서비스 - 김대근, 이유동, AWS AI/ML 스페셜리스트 솔루션즈 아키텍트 / 소성운, 카카오스타일 ...데이터 과학자를 위한 신규 인공지능 서비스 - 김대근, 이유동, AWS AI/ML 스페셜리스트 솔루션즈 아키텍트 / 소성운, 카카오스타일 ...
데이터 과학자를 위한 신규 인공지능 서비스 - 김대근, 이유동, AWS AI/ML 스페셜리스트 솔루션즈 아키텍트 / 소성운, 카카오스타일 ...
 
OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
 
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
 
Work With Engineer
Work With EngineerWork With Engineer
Work With Engineer
 
ecdevday3 효율적인 유지보수를 위한 개발 및 관리
ecdevday3 효율적인 유지보수를 위한 개발 및 관리ecdevday3 효율적인 유지보수를 위한 개발 및 관리
ecdevday3 효율적인 유지보수를 위한 개발 및 관리
 
track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, ...
track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, ...track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, ...
track1 05. 스타트업 1인 개발 극복기’와 ‘javascript vs Scala, (함수형 언어 관점으로)방황기/ I/O Inc, ...
 
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)
 
개발자, 성장하는 '척' 말고, 진짜 성장하기
개발자, 성장하는 '척' 말고, 진짜 성장하기개발자, 성장하는 '척' 말고, 진짜 성장하기
개발자, 성장하는 '척' 말고, 진짜 성장하기
 

[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여

  • 2. CTO SWP(연) webOS platform task Web app manager / WebKit AWARDS 2011 일등SW신입과정 사전테스트 전체 1등 2011 일등SW신입과정 6기(우수자과정) Project 최우수상 2012 Coding Expert 1기 2012 SW College 사내 우수 강사 Intensive C(Advanced) Programming
  • 3. 개발자가 모자라요 "취업난" VS "인력난” 2013년 SW전공 년 6,500명 배출 1) 소프트웨어 인력 양성 전략, 2013, 한국소프트웨어기술진흥협회 2) 학위 생산과 일자리의 비교(미국, 2002~2013, CACM 2008, August) 1) 2)
  • 4. 개발자는 모자라지 않습니다. 단지 당장 투입할 수 있는, 기본기를 갖춘 개발자 가 매우 부족할 뿐 입니다.
  • 5. 기업의 문제 학교의 문제 NHN "대학교육 못믿어… SW인재 직접 키운다" ‎국내 기업의 신입사원 SW 교육 VS 해외 기업의 1일 오리엔테이션. Coursera “Algorithm Part I” – Princeton Univ. 학생의 문제 취업 준비 대학생 ‘8대 스펙 중 토익이 가장 중요’
  • 6. 총체적 난국!!! But, 학교에서의 코딩과 현업에서의 코딩 간의 차이는? 학교에서 가르쳐주지 않지만 현업에서 중요한 지식들은? ※주의. 학교에서 배운 지식들이 중요하지 않다는 것은 결코 아님.
  • 7. 동작이 최우선! 과제 제출하면 땡! 다른 사람 코드 참조 X 아마도 학교에서는,
  • 8. Clean code 동작’만’이 최우선이 아니다. (하지만, 현실에서는 최우선이다 아직.. ㅠ.ㅠ) Readability 새로운 코드를 작성하는 시간 < 기존 코드를 수정 또는 추가하는 시간 Code Review 책을 많이 읽어야 좋은 글을 쓸 수 있듯이, 좋은 코드를 많이 읽어야 좋은 코드를 만들 수 있다. Google 의 Code Review Linux Community Truck 지수 학습효과 지금부터는,
  • 9. public static String testableHtml( PageData pageData, boolean includeSuiteSetup ) throws Exception { WikiPage wikiPage = pageData.getWikiPage(); StringBuffer buffer = new StringBuffer(); if (pageData.hasAttribute("Test")) { if (includeSuiteSetup) { WikiPage suiteSetup =PageCrawlerImpl.getInheritedPage(SuiteResponder.SUITE_SETUP_NAME, wikiPage); if (suiteSetup != null) { WikiPagePath pagePath = suiteSetup.getPageCrawler().getFullPath(suiteSetup); String pagePathName = PathParser.render(pagePath); buffer.append("!include -setup .").append(pagePathName).append("n"); } } WikiPage setup = PageCrawlerImpl.getInheritedPage("SetUp", wikiPage); if (setup != null) { WikiPagePath setupPath = wikiPage.getPageCrawler().getFullPath(setup); String setupPathName = PathParser.render(setupPath); buffer.append("!include -setup .").append(setupPathName).append("n"); } } buffer.append(pageData.getContent()); if (pageData.hasAttribute("Test")) { WikiPage teardown = PageCrawlerImpl.getInheritedPage("TearDown", wikiPage); if (teardown != null) { WikiPagePath tearDownPath = wikiPage.getPageCrawler().getFullPath(teardown); String tearDownPathName = PathParser.render(tearDownPath); buffer.append("n").append("!include -teardown .").append(tearDownPathName).append("n"); } if (includeSuiteSetup) { WikiPage suiteTeardown =PageCrawlerImpl.getInheritedPage(SuiteResponder.SUITE_TEARDOWN_NAME, wikiPage); if (suiteTeardown != null) { WikiPagePath pagePath = suiteTeardown.getPageCrawler().getFullPath (suiteTeardown); String pagePathName = PathParser.render(pagePath); buffer.append("!include -teardown .").append(pagePathName).append("n"); } } } pageData.setContent(buffer.toString()); return pageData.getHtml(); } Clean code 함수는 왜 분리하고, 또 언제 분리하는가? 그 밖에, Coding style, 일관성, 주석, 관용구의 사용, 의미 있는 이름 부여하기 등등. 추천 도서 Clean code, The practice of programming, 읽기 좋은 코드가 좋은 코드다 함수(function)의 분리와 활용 – Abstraction levels of function Clean code : Meaningful Names public static String renderPageWithSetupsAndTeardowns( PageData pageData, boolean isSuite) throws Exception { if (isTestPage(pageData)) includeSetupAndTeardownPages(pageData, isSuite); return pageData.getHtml(); }
  • 10. 설계(Design)가 중요하다고 배운 당신! 엘레강스한 설계와 UML문서가 없이는 코딩 하지 않겠어! 아마도 학교에서는,
  • 11. 설계는 중요하다! But, 개발 초기에 완벽한 설계는 불가능하다! SW 설계는 경험의 산물. Agile 십중팔구 여러분의 설계는 예상치 못한 이슈들로 계속 변한다. 그럼? 변화에 빠르게 적응하자! 점진적 개발방법론 (Scrum, TDD 등) 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다 (open-closed principle) 지금부터는,
  • 12. OPTIMIZATION! 여러분의 프로젝트에서 사용할 A라는 프로그램을 받았다고 합시다. A의 수행시간은 30분이 걸리는데 코드를 보니 하루 정도 투자하면 수행 시간을 5분으로 단축할 수 있을 것 같습니다. 당신이라면 최적화를 하겠습니까? 최적화의 첫 번째 법칙은? 아마도 학교에서는,
  • 13. 글쎄요? 예/아니오 로 대답을 하기 이전에 여러분은 프로젝트 기간 동안 A를 몇 번이나 사용할 것인지 물으셔야 합니다. First Rule of Optimization : Don’t Optimization matters only when it matters. Done is better than perfect - Facebook 프로그램이 어떤 환경에서 돌아갈지를 감안할 때 더 빨리 만들면 어떤 이익이 있는가? 최적화는 측정된 데이터를 기반으로! 지금부터는, 참고자료. Optimization - Your worst enemy (http://www.flounder.com/optimization.htm)
  • 14. 최적화는 측정된 데이터를 기반으로! LG SI 최적화 이슈 문의 사례 Assembly로 최적화를 했는데 Debug Mode 에서는 40% 나 성능 개선이 되는데, Release Mode 에서는 오히려 나빠져요! “스타트업은 데이터를 어떻게 바라봐야 하는가?” (http://www.slideshare.net/yongho/ss-32267675) 청바지 브랜드 사례 – 우리는 우리 생각보다 세상을 모르고 있다. 사례,
  • 16. 각종 툴들은 분명 유용하다! But, 어디까지나 ‘보조 도구’ IDE, Debugger 에 의존하여 일단 해보고 안되면 그 때가서 생각해보고 하는 방식은 개발자의 실력에는 도움이 안됨. 도구의 도움 없이 스스로 하는 ‘의도적 수련’이 필요. “손코딩뇌컴파일눈디버깅” 손코딩뇌컴파일눈디버깅 – 매주 (수) 서초R&D센터 저녁 6시20분 당신이 제자리인 이유 - 지루하거나 불안하거나 (http://agile.egloos.com/5749946) 지금부터는,
  • 17. 손코딩뇌컴파일눈디버깅이 과연 효과적일까? Interview Process Google, Microsoft, Apple, Yahoo, Facebook, Amazon, Netflix 그들이 평가하는 것 문제를 잘 이해하는가? 필요한 조건 및 가정을 잘 도출하는 가? 어떤 과정을 통해 문제를 접근하고 풀어나가는가? 그 과정에서 의사소통을 잘 하는가? 깔끔하게 코딩을 잘 하는가? 자신의 풀이에서 버그나 예외 상황은 없는 지 검증하고 디버깅을 잘 하는가? 그들의 인터뷰 목표 “잘하는 사람을 놓치더라도 자질이 부족한 엔지니어를 채용하는 일은 없도록 하자” 홍보,
  • 18. 테스트?? 돌아가는 코드 만들기도 바쁜데… 평가에도 반영 안되고… 아마도 학교에서는,
  • 19. 개발자 단계에서의 테스트는 중요하지만 현업에서도 아직까지 부족한 실정 개발자의 테스트 활동이 필요한 이유 초기 단계에서 발견된 결함은 수정이 용이, 수정 비용/시간 감소 버그를 찾는 시간 >>>>> 버그를 수정하는 시간. 수정에 대한 검증 : Side effect 방지 HW 자원으로 인한 개발 지연, 다른 모듈의 의존성 등으로 인한 개발 지연 방지 테스트를 추가하는 것이 SW를 더 나은 디자인 방향으로 유도한다. 지금부터는,
  • 20. Light Scheduler 를 Design 해봅시다 예제, class LightScheduler { public: LightScheduler(); void addTurnOn(); void wakeup(); private: TimeService time; LightController lights; }; 사용자는 32개의 전등(HW)을 켜고 끄는 작업을 light scheduler 에게 등록. 작업을 수행할 전등, 수행되는 시간, On 또는 Off 를 설정할 수 있음. 최대 128개의 작업을 Scheduling 할 수 있음. 지정된 시간이 되면 light controller 는 전등을 조작해야 함. TimeService 시스템 타이머를 이용하여 LightScheduler를 깨워주고 시간을 받아오는 부분 LightController 전등을 직접적으로 제어하는 모듈. 초기 디자인 요구사항
  • 21. Light Scheduler 를 Design 해봅시다 예제, Light Scheduler를 개발&테스트 하려고 보니... TimeService 는 OS 의존적인 모듈인데다가 시간은 계속해서 흐르므로 테스트가 어렵습니다. LightController 는 HW를 직접적으로 제어하는 모듈로 자동화 테스트가 어렵습니다. class LightScheduler { public: LightScheduler(TimeService&, LightController&); ~LightScheduler(); void addTurnOn(); void wakeup(); private: TimeService& time; LightController& lights; }; 출처. 임베디드C를 위한 TDD
  • 22. 설령 Design Principle을 위반하더라도 테스트하기 좋은 코드 가 좋은 코드다! 참고자료 임베디드 C를 위한 TDD by James Grenning TDD : 어떻게 테스트 할 지를 고민합시다. 지금부터는,
  • 23. 협업 및 의사소통 programming skill, communication skill, domain knowledge Problem Solving 우리가 미적분을 배우는 이유 Problem Solving 을 통해 키워지는 역량 (남의 코드를 빨리 읽고 이해하는 능력. 예외 상황이나 오류를 찾아내는 능력.기본 코딩 스킬의 향상, 문제를 모델링 하는 능력) TopCoder, Code jam, Hacker cup, ACM ICPC, code forces 추천 도서 : "알고리즘 문제 해결 전략", "코딩 인터뷰 완전분석” Open Source Contribution 취미 = 일 = Global career 양질의 코드 + 전세계 뛰어난 개발자들의 Feedback 그 외에도 이런 것들을 준비했으면 좋겠습니다.
  • 24. 열심히'만' 하는 것보다는 '잘'해야 한다. 개발자에게 있어서 Code Quality 는 타협의 대상이 아닙니다. 기준을 높게 잡으세요. 주변의 실력자들을 보면 대부분 '이만하면 됐어...' 의 기준이 굉장히 높습니다. 함께 더불어 성장합시다. 지식은 공유되어야 하고, 여러분은 움직이셔야 합니다. 영어 ......아 눈물이...ㅠ.ㅠ 오늘 이야기 한 내용에 정답은 없습니다. Open mind~! 마지막으로,
  • 25. 강연 후기 및 피드백