레이블이 [기타] 생각인 게시물을 표시합니다. 모든 게시물 표시
레이블이 [기타] 생각인 게시물을 표시합니다. 모든 게시물 표시

2015년 5월 27일 수요일

훌륭한 프로그래머가 더 훌륭해지기 위한 방법 - 4단계

전문적인 개발자가 될수 있도록 노력한다.

훌륭한 프로그래머는 더 훌륭해지기 위한 방법을 지속적으로 찾는다. 우리 회사와 다른 회사에서는 다음과 같은 전문적인 개발 단계들을 고려한다.


1단계 초보자란 한가지 언어의 기본적인 기능들을 사용할 수 있는 프로그래머를 말한다. 초보자는 클래스와 루틴, 루프, 조건문을 작성할 수 있으며 해당 언어의 많은 기능들을 사용할 수 있다.

2단계 입문 초보 단계를 넘어온 중급 수준의 프로그래머는 여러 언어의 기본적인 기능들을 사용할 수 있으며 적어도 한 가지 언어를 능숙하게 다룬다.

3단계 유능한 프로그래머는 한 가지 언어나 환경 또는 둘 다에 전문적 기술을 갖고 있다. 이 단계에 있는 프로그래머는 J2EE의 모든 복잡한 부분들을 알고 있거나 Annotated C++ Reference Manual을 암기하고 있을 것이다. 이 단계에 있는 프로그래머들은 회사에서 중요한 위치에 있게 되는데, 많은 개발자들이 이 단계를 넘어서질 못한다.

4단계 리더는 3단계 프로그래머에 대한 전문적인 지식을 갖고 있다. 그리고 프로그램에서 컴퓨터와의 의사 소통은 오직 15%뿐이며 85%가 사람과의 의사 소통임을 알고 있다. 일반적인 프로그래머는 30% 정도만 혼자서 일한다(McCue 1978). 심지어는 그보다 더 적은 시간을 컴퓨터와 작업하는 데 보낸다. 전문가는 기계보다는 사람을 위해서 코드를 작성한다. 진정한 전문가 수준의 프로그래머는 보석처럼 명확한 코드를 작성하며 문서화한다. 그들은 한 줄의 주석으로 표현하여 이해할 수 있는 코드의 로직을 재작성하느라 머리를 쓰고 싶어하지 않는다.


"어떤 바보라도 자신의 실수에 대해서 정당성을 주장할 수 있으며 
대부분의 바보들이 그렇게 한다."   
- Dale Carnegie -


"전체 개발시간의 10%가 코드 작성의 90%를 차지하며, 
나머지 10%가 개발시간의 90%를 차지한다"  
- Tom Cargill -



출처: CODE COMPLETE SECONDE EDITION, Part7 소프트웨어 장인정신 p1126    - 스티브 맥코넬 저 -

2015년 5월 7일 목요일

구글 엔지니어에 필요한 11가지 기술에 대한 칼럼을 읽고

구글 엔지니어에 필요한 11가지 기술에 대한 칼럼을 읽었는데, 유용한 정보인것 같아서 블로그에 남겨놓는다.

  1. 컴퓨터 과학 기초분야 습득
  2. 하나 이상의 객체지향 프로그래밍 언어: C++, 자바, 파이썬
  3. 다른 프로그래밍 언어: 자바스크립트, CSS, 루비, HTML
  4. 자신의 코드를 테스트
  5. 이론수학
  6. 자료구조 및 알고리즘 이해: 큐, 스택, 그래프정렬, 퀵정렬, 머지정렬, 힙정렬 등
  7. 운영체제에 대한 이해
  8. AI 에 대한 이해
  9. 컴파일러에 대한 이해
  10. 암호화
  11. 병렬 프로그래밍

이중에서 단 몇가지라도 갖춰놓아야 하겠지만 항상 생각 만으로 끝나는 것 같다. 

그리고, 이렇게 나열해보니 내자신이 개발자라고 하기엔 너무나도 많이 부족하다는 생각이 든다. 또한, 지금 개발자로서의 기본적인 소양도 갖춰지지 않은 상태에서 기획까지 손대고 있다. 그러면서 필연적으로 찾아오는 개발/기획에 대한 정체성도 흔들리면서 무엇 하나 제대로 못한다는 자괴감마저 들고 장기적인 슬럼프에 빠져있다.

어제 임백준님의 칼럼에서 본 내용중에 폴리그랏 프로그래머에 대한 내용이 나왔는데, 본인이 잘하는 그리고 사용하는 한가지 언어만 깊게 파고드는게 아니라 여러가지 언어를 골고루 사용할줄 아는게 요즘 프로그래머 트렌드라고 한다. 

“앞으로 프로그래머는 어느 하나의 언어에 안주할 수 없다. 패러다임을 달리 하는 여러 개의 언어를 자유롭게 구사하지 않으면 살아남을 수 없는 폴리글랏 프로그래밍의 시대가 되었기 때문이다. 자신의 포트폴리오를 어떤 언어로 구성하는지는 각자의 몫이다. 하지만 앞으로는 프로그래머가 어떤 언어에 대해서 얼마나 많이 알고 있는가 하는 것이 아니라 어떤 언어를 얼마나 빠르게 학습할 수 있는가 하는 것이 더 중요하다는 점을 기억하기 바란다.” 

또한 요즘 통섭형 인재(인간중심의 기술이 중요해지는 트렌드에 맞춰 인문학적 소양과 기술에 대한 이해를 동시에 갖춘 인재)라는 말이 많이 나오는데 개발자에게 있어서 통섭의 다른 이름은 폴리그랏이다. 서로 다른것들이 합쳐지면서 새로운 활로를 개척하는 것이 통섭이다.

폴리그랏, 통섭형 인재, 그리고 위에서 언급한 11가지 필요기술

현재 내가 추구해야 할 커리어패스에 가장 부합해 보인다.
그리고 그중에서 가장 중요하고 필요한 실행력

출처: http://techholic.co.kr/archives/30399?utm_source=twitterfeed&utm_medium=facebook

2015년 5월 1일 금요일

성공을 막는 13가지 작은 습관

  1. 맞춤법 실수
  2. 행동보단 말
  3. 성급한 결정
  4. 불평불만
  5. 허풍떨기
  6. 남 탓하기
  7. 요령찾기
  8. 열정있는 척
  9. 목적없이 살기
  10. 부탁 다 들어주기
  11. 인생을 쉽게 생각
  12. 생각없이 행동
  13. 현실부정


2015년 4월 13일 월요일

하루 24시간 2배 활용법

01. 그날의 기분을 중요시 한다.
02. 아침 일찍 일어난다.
03. 자는 시간에 관계없이 일어나는 시간을 일정하게 맞춘다.
04. 아침 일찍 일어나기 힘들다면 차 한잔 마시는 습관으로 시작한다.
05. 일어나서 맨 처음 할 일은 찬물로 세수하는 일이다.
06. 허둥대는 아침이 아닌, 5분의 명상으로 아침을 시작한다.
07. 다음날의 계획은 전날 밤에 세운다.
08. 다음날 입을 옷은 미리 챙겨둔다.
09. 자정 전에 무조건 잘 수 있도록 노력한다.
10. 머리를 베개에 묻는 순간 모든 것을 잊어라.
11. 잠 안 오는 밤에 취할 수 있는 가장 좋은 방법은 독서다.
12. 일에 있어서나 사람에 있어서나 범위를 좁혀 선별하되 정해진 것에 집중 투자한다.
13. 10분의 낮잠은 밤잠 한시간의 차이가 있다.
14. 필요한 일과 필요치 않는 일을 구분한다.
15. 통근시간이 매우 생산적인 시간이 될 수 있음을 명심한다.
16. 여유있는 계획을 세운다.
17. 모든 일에는 데드라인이 있다.
18. 모든 일에는 때가 있다.
19. 모든 계획은 시작시간과 끝시간을 명시한다.
20. 항상 최상의 선택으로 시간을 낭비하지 않는다.

아놀드 베네트의 "아침의 차 한잔이 인생을 결정한다." 中

2015년 3월 27일 금요일

풀스택 개발자가 되어야 하는가?

요즘 풀스택 개발자라는 말이 심심찮게 들리고 있다. 서버 개발뿐만 아니라 프론드엔드 개발과 DB 설계 심지어는 인프라구축까지 할수 있는 개발자를 말한다. 예전에도 거의 소규모의 기업이나 벤처(요즘은 '스타트업' 이라고 하는)기업에서의 개발자는 거의 이러한 형태였다. 

그러나, 요즘의 웹개발을 보면 그래픽 디자인, 퍼블리싱, HTML/CSS 코딩, 프론트엔드 개발, 백엔드 개발, DB 설계 등 개발자별로 각각 맡은 부분만을 작업하게 되는 형태가 많다. 지금 내가 다니고 있는 회사만 보아도 프론트엔드 개발자, 백엔드 개발자가 나뉘어져 있고, 그래픽 디자이너의 업무참여를 줄이기 위해 유료 부트스트랩 템플릿을 구매해서 사용하고 있다.

그런데, 각각의 개발자들이 자기가 맡은 부분만 개발을 완료하고는 개발이 끝났다고 한다. 더 엄밀히 말하면 백엔드 개발자는 도저히 소비자에게 내놓기 부끄러울 정도의 UI 를 만들고도 기능 개발이 끝났다며 자기 할 일은 다 한듯한 태도를 보인다. 사실 이말이 틀린것도 아닌게 백엔드 개발이 끝나면 프론트 UI 를 예쁘게 만드는 것은 그래픽 디자이너와 프론트엔드 개발자의 몫이다.

그렇지만, 왜 이러한 문제가 발생하는 것일까? 내가 해당 백엔드 개발자가 아니기 때문에 정확한 답변은 못하겠지만 미루어 짐작하건데, 백엔드 개발용 PHP 는 자신있지만, 화면구성을 위한 HTML, CSS, JavaScript 는 내 업무도 아닐뿐더러 잘 다루지도 못하기 때문이 아닐까? 그러면 언제까지 PHP 만 잡고 있을것인가? 그리고 다른회사로 이직하고서도 PHP 만 할 줄 안다고 그것만 할것인가?

얼마전에 보았던 '구글엔지니어에게 필요한 11가지 기술'이라는 칼럼에서도 얘기하는 것처럼 구글에서조차 꼭 자기가 개발하는 한가지만 파는것 보다는 여러가지 기술을 익히는 것을 권장한다고 했다.

풀스택 개발자라는 개념을 폴리글랏 개발자와 비슷한 개념으로 가져가면 어떨까? 임백준님은 자신의 칼럼에서 이렇게 얘기했다. "어떤 언어를 얼마나 알고 있는가 하는것 보다, 어떤 언어를 얼마나 빨리 배울수 있는가 하는 것이 중요한 시대이다"

그렇다면, 풀스택 개발자가 되어야 하는가?
처음부터 모든 언어를 알고 유창하게 사용하는 개발자는 없을 것이다. 그렇지만, 자기가 모르고 사용하지 않는 언어 및 기술들을 얼마나 빠르게 습득해서 자기화하느냐 하는 것은 비단 풀스택 개발자가 아니더라도 개발자라면 꼭 한번은 고려해보아야 할 개발자의 기본적인 소양이라고 생각해본다.