많은 사람들이 어떻게 소프트웨어를 배워요? 어떤 기술을 어떻게 배워요? 라는 질문을 한다.

먼저, 제목이 좀 비관적이기는 하지만 다음 글을 보면 우리가 소프트웨어 배운다는 것이 결국 뭘 배우는 것인가 하는 이야기가 나온다. 바쁘면 꼭 읽어볼 필요는 없다.

"소프트웨어 개발자 되기는 왜 어려운가?"


한 줄짜리 정답은 .. 소프트웨어를 배울 때 가장 빠른 길은, 작은 성취를 이루어가는 것이다. 다음 감동적인 동영상을 보라. 왜 아침마다 침대를 깔끔하게 정리해야하는지를 명쾌하게 설명했다.
(자동생성 자막이 지원되며, 자동번역을 선택하면 한글로도 그럴듯한 자막이 나온다.)

많은 학생들은 책을 사서 진도를 다 나간 뒤에 (즉, 공부를 한 뒤에) 뭔가를 만들겠다고 결심한다. 통하지 않는다. 책걸이를 하고나면 책만 남을 뿐, 뭔가를 할 수 있다는 자신감이라곤 생기지 않는다.

그래서 정리한  소프트웨어를 배우는 방법  :
(내가 늘 사용하는 방법이며, 아마 대부분 사람에게 통할 것으로 생각되어 권하는 방법)

1. 책을 사기 전에 배우고 싶은 것으로 무엇을 만들까를 먼저 생각한다. (새로운 언어를 배울 때, 난 항상 Snake Bite 라는 게임을 만든다.)

2. Hello World를 해본다. (이는 최소한의 Tool 사용법을 익히는 과정이다) - 이 과정은 동영상 따라하기가 도움이 된다. 우리가 배워야하는 것의 대부분은 남들이 나보다 먼저 배운 것이다. 그들도 어렵게 배웠다. 그래서 고마운 분들이 따라하기 동영상을 만들었고, Youtube에 보면 Hello World 따라하기 동영상이 거의 100% 있다. - Youtube에서 "배우고싶은것이름 hello world" 를 검색하자. 이 'Hello World!' 따라하기 과정에서 작은 성취를 얻자. "아! 진짜 되는 구나", "나도 이걸 써서 간단한 메시지를 찍을 수 있게 되었구나." - 여기까지 해보니 완전 재미가 없으면.. 정말 하고 싶은 것인지 다시 생각해보자.

다음은

3. 책을 산다. 요즘엔 물리적인 책이 없거나, 인터넷의 무료 EBook도 많다. 책이 없으면 (예를 들어 무슨 API 만 잔뜩있는 그런 프레임워크를 배워야 한다면) 그 소프트웨어의 man page (모든 API가 설명되어 있는 문서 - API reference)를 찾는다.

4. 아주 빠른 속도로 책의 각 섹션 (각 API, man page, ..)의 제목과 앞의 몇 문장만을 정독한다. (젊은이들은 아재들과 달라서, 그 제목과 앞의 조금을 꽤 오래 기억한다). 웬만한 책은 오며가며 읽어도 하루, 이틀이면 읽을 수 있다.

5. 위 1번에서 만들려고 했던 것의 최소한부터 만들어본다. 1번에서 예를 들어 '페이스북 같은 것'을 만들기로 결심했다면, 아래 그림과 같이 

실제 검색은 안된다 해도, 그림만이라도, 이쁘지는 않더라도 이 부분을 비슷하게 만드는 거다. 그러면서 조그만 성취감을 느끼는 것이 중요하다.

6. 최소한을 만드는 과정에서 배워야 할 것이 있다는 것을 알게 되면, 다시 책 (man page, 홈페이지, eBook...)으로 돌아가서 그 배워야 할 항목 전체를 정독한다. - 선수 개발자들도 대개 뭔가를 사용하게 될 때 그 때 정독을 한다.

7. 6번의 과정에서 뭘 배워야할지를 알게되는 것이 중요한데.. 그래서 '최소한'을 진짜, 정말, Really, 누가 뭐래도 '최소한'으로 정해야 한다. 그랬는데도 뭘 배워야 하는지 모르겠다면. 이 장면에서 멘토가 필요하다. 롤모델이 아니라 멘토다. 롤모델은 액자에 걸려있는 사람이고, 멘토는 전화해서, 메일보내서, 만나서 질문하면 같이 답을 찾아주는 사람이다. 나보다 아주 조금만 더 잘하면 된다. 어느날 그 멘토와 내가 비슷한 수준이 되면, 멘토와 함께 우리보다 조금 더 잘하는 멘토를 찾으면 된다. 내 옆의 사람이 멘토다. 커뮤니티가 중요하다.

8. 그 "최소한"을 조금씩 늘려간다. 조그만 성취를 계속해나가는 것이다. 그러면서 배운다.

9. 여기가 제일 중요한데.. 그 조그만 성취를 자랑한다. 두려워하지말자. 누구나 다 첫번째 발걸음이 있다. 애인에게. 친구에게, 멘토에게, 부모님에게, 지나가는 사람에게, 페이스북에서, 트위터에서, 인스타그램에 공개하고 자랑하자. 누구 하나라도 '좋아요'를 눌러주면 그 '조그만' 성취를 더 크게 만들려는 의욕이 하늘을 찌르게 된다. 어느 포인트에 공개해야 하나? 그 조그만 성취를 자랑(공개)할까 말까 고민이 된다면.. 바로 그때가 자랑할 때다.

http://image.ajunews.com/content/image/2016/03/03/20160303155107141989.jpg


10. 그리고 뭔가 할 수 있게 되었다고 느끼면, 어떤 계단을 하나 올라섰다고 느끼면, 위 3번에서 언급한 뭔가를 만들어보기 위한 (무슨 언어, 프레임워크) 책이 아닌 (~~ 론으로 끝나는 책, 프로그래밍, 자료구조, 알고리즘, 운영체제, 데이터베이스, 네트워크, 그리고 확률통계, 선현대수 같은 수학책 등의) 이론 책을 관심에 따라 읽어본다. 당연히 전공자들에게 필수적인 유명한 주제들이기 때문에 유튜브 또는 MOOC에 엄청나게 쉽고 잘 가르쳐주는 동영상이 있다. 훌륭한 분들이 정리한 것을 차근히 배워 나도 알게되는 시간은 소프트웨어 개발자로서의 성장에 반드시 필요하다. 이런 책은 여유를 가지고 꼼꼼히 공부한다. 가능하다면 연습문제도 풀어보면서.

11. 더 시간이 지나, 여러 요소가 포함된 비교적 큰 프로그램을 만들어본 경험이 좀 생기면, 큰 그림에 관한 책들을 본다. 성능과 관련된 책, 디자인 패턴에 관련된 책, 데이터분석에 관한 책, 소프트웨어 공학에 관한 책, 오픈소스 소프트웨어에 관한 책 들을 찾아 본다. 필요한 부분을 발췌해서 읽어도 좋다.

12. 위 모든 과정에서 혼자하기 힘들다. 커뮤니티로 가자. 다음 사이트가 도움이 좀 될 것이다.

https://github.com/innovationacademy-kr/software-resources

*

한 줄 요약: 조그만 성취 반복하면서 배우고, 성과를 자랑하자.

*



나는 LINE 개발자입니다
반응형
Posted by hl1itj
,