멋진 소프트웨어 개발자의 길을 가고 싶은 분들을 위한 과정을 특별히 기획하였습니다.
현실에서 학습자들이 만나는 교육은 내일 당장 취업하여 회사가 원하는 일을 하는 역량에 맞춰져 있기 때문입니다. 안타깝게도 대학 교육조차도 기반을 다루기 보다는 취업에 필요한 현실 교육으로 초점을 옮기고 있습니다. 비즈니스 공간에서 발생한 문제를 해결함으로써 모두에게 만족감을 선사하는 그런 엔지니어의 삶을 누릴 수 있기를 소망합니다. 그 소망의 시작이 나무소리 코칭 프로그램이 되길 바랍니다.
가장 오래된 엔지니어링 훈련 방법은 도제제도입니다. 스승이 제자를 옆에 두고 하나의 가르침, 수십 수 백 번의 실천을 반복하면서 뛰어난 제자를 키워내는 훈련 시스템입니다. 소프트웨어 개발은 엔지니어링 분야로 일반 교육도 필요하겠지만, 전문 코치의 안내와 도움 속에 충분한 훈련이 필요합니다. 현대의 소프트웨어 교육은 지식전수에 집중하면서 훈련은 소홀히 하는 경향이 있습니다. 여러 가지 이유가 있겠지만, 가르치는 분들이 개발자가 아닌 이유도 있고 스피드를 추구하는 사회 분위기 탓도 있습니다. 전공 학생들이 졸업할 때까지 프로그래밍 1만 라인을 넘기지 못하는 경우가 대부분입니다. 훈련이 부족합니다. 그 결과 지식은 위태롭고 실천은 느리고 불확실합니다.
기업이 원하는 소프트웨어 개발자 기준과 학교나 교육 기관이 지향하는 기준은 “회사 입사”라는 기준에서만 어느 정도 일치합니다. 그 결과 5년, 10년, 20년, 30년 동안 엔지니어로 기운차게 활동할 역량의 근본을 갖추지 않은 상태로 성급하게 사회로 진출하고 있습니다. 나무소리는 평생 동안 길어 올릴 우물과 같은 근본 역량에 집중합니다. 스스로 동기를 부여하며 진행하는 20만 라인에 가까운 코딩, 때로는 같은 코딩을 수십 번을 반복하는 인내, 클린 코드 기반 클린 코딩훈련, 개인별 역량 파악과 그에 어울리는 안내와 도움 등 나무소리만의 훈련방법을 제시합니다. 특히 열네 번의 Gate는 이해와 숙련도를 체크하는 일련의 과정입니다. Gate를 통과하지 못하면 코치가 재시험 기회를 부여할 수 있지만, 한 Gate에서 세 번 실패하면 처음부터 다시 시작해야 합니다. 쉽지 않은 서른 주(week)가 지나면 어디를 가든 개발자로서 맡은 미션을 넉넉하게 수행할 수 있는 그런 개발자가 됩니다.
코치는 전문 강사 출신의 “교육전담 코치”와 훌륭한 현장 개발자로 구성한 “훈련전담 코치”로 나눕니다. 상황에 맞춰 특정 전담 코치가 참여합니다. 한 코치가 모든 Period를 안내하는 경우도 있고, Period 별 전담 코치가 안내하는 경우도 있습니다. 어떤 경우든, 개인의 학습과 훈련에 최적화된 방식으로 안내합니다. 코치는 학습자와 소통하며 안내하고 도와주는 활동에 그치지 않고, 학습자의 재능을 찾고 적합한 개발 분야를 소개하기도 합니다.
Java 기반으로 구성한 나무소리과정의 7개 Period를 소개합니다.
1. A Period : 2주
- 주제 : 프로그래밍 언어(Java) 처음 만나기
- 목표 : LoC 2만 라인
- A1 강의와 교재 : youtube 나무소리 채널의 Java 과목
- 프로그래밍 이해(syntax, elements, control flow, 등)
- 자기주도 학습 절차와 코칭 개념 이해 - A1 강의와 교재 : youtube namoosori 채널의 Java 플레이리스트(예정)
- 학습방법 : namoosori.io 등록 + 자기주도 학습 + 학습로그 + Q&A
- Gate A1 : 학습로그 자동 심사 후 B period로 초대
- 관련서비스 : 대시보드, learning log, Q&A, 학습가이드, git 서버, youtube
2. B Period : 4주
- 주제 : 애플리케이션 개념과 구조 이해
- 목표 : LoC 4만라인
- B1 강의와 교재 : Travel club (2주)
- 오리엔테이션(동영상 + 온라인 워크샵)
- 소스코드 : Travel club (stage 1,2 3회, stage 3 3회)
- UML 이해와 활용 - B2 강의와 교재 : Timestable (2주)
- 오리엔테이션(동영상 + 온라인 워크샵)
- 소스코드 : Timestable (legacy, domain, view, menu)
- UML 이해와 활용 - Gate B1, B2
3. C Period : 4주
- 주제 : 유연한 애플리케이션 구조(아키텍처)와 확장 이해
- 목표 : LoC 4만라인
- C1 강의와 교재 : Travel club stage3 store 확장(2주)
- 메모리에서 파일 쓰기로 확장
- 소스코드 : Travel club(stage4)
- 자원 접근 레이어와 매핑 개념 이해 - C2 강의와 교재 : Travel club stage 3 cli 확장(2주)
- CLI에서 GUI(JavaFX)로 UI 확장
- 소스코드 : Travel club(stage5)
- 서비스 퍼블리싱 레이어 개념 이해 - Gate C1, C2
4. D Period : 4주
- 주제 : 실용주의 자료구조
- 목표 : LoC 2만 라인
- D1 강의와 교재 : 자료구조 (2주)
- Java Collection 직접 구현
- 소스코드 : Namoo data structure
- 표현과 발표 - D2 강의와 교재 : 우편번호 검색(2주)
- 메모리 기반 우편번호 검색 서버
- 소스코드 : Namoo post in momory
- 구현 중심 - Gate D1, D2
5. E Period : 4주
- 주제 : 연결 기초 다지기
- 목표 : LoC 2만 라인
- E1 강의와 교재 : 파일 전송 (2주)
- 네트워크 프로그램과 대용량 파일 전송 구현
- 소스코드 : Namoo file sender - E2 강의와 교재 : 파일 서버 (2주)
- 파일 저장/검색 가능한 스레드 기반 파일 서버 구현
- 소스코드 : Namoo file server - Gate E1, E2
6. G Period : 4주
- 주제 : 객체지향 프로그래밍
- 목표 : LoC 2만 라인
- G1 강의와 교재 : Crosswalk 4 steps (2주)
- 객체 모델링(UML) : 역할과 책임, 그리고 관계 이해
- 소스코드 : Crosswalk step1 ~ 4 - G2 강의와 교재 : Crosswalk 6 steps (2주)
- 객체 모델링 확장과 상태머신
- 소스코드 : Crosswalk step5 ~ 10 - Gate G1, G2
7. H Period : 4주
- 주제 : Namoogram : Java 만으로 Telegram 클론 만들기
- 목표 : LoC 1만 라인, UML 모델
- H1 강의와 교재 : 프로젝트
- Namoogram 서버
- Namoogram GUI 클라이언트
- 소스코드 : Namoogram - Gate H1
참여하신 모든 분들이 과정을 수료할 수 있는 것은 아닙니다. 수료를 한다면, 그 개발자는 객체 모델링, 자료구조, 알고리즘, 네트워크, 스레드, UI 이벤트 등을 잘 이해할 뿐만 아니라, 코딩에서 편하게 사용할 수 있어야 합니다. 수료한 엔지니어에게 가장 중요한 역량은 자기주도학습 역량입니다. 이후에 만나는 어떤 기술이라도 스스로 빠른 속도로 습득하여 개발에 활용할 수 있습니다.
30주 동안 7 개의 Period에서 열네 번의 Gate 심사를 치르고 20만 라인에 가까운 Java 코드를 작성합니다. 평생 엔지니어로 일을 하려는 학습자들에게 먼 길을 가는데 필요한 기반 기술을 알려드리고 훈련시켜 드립니다. 모든 과정은 자기주도 학습으로 이루어지며 코치와 서비스 시스템(namoosori.io)은 학습자들이 안내하고 도와주는 역할을 합니다. 현실의 업무에 필요한 기술인 데이터베이스, 웹, 프레임워크 관련 기술은 다루지 않습니다. 기업에서 함께 오래 일할 엔지니어를 채용할 때는 기반 기술이 탄탄한 엔지니어를 더 선호하기 때문입니다.
오프라인에서 5년째 파일럿 코칭을 진행하고 있습니다. 고객사 신입사원 교육에 적용하거나, 넥스트리 신입 채용에도 적용하였습니다. 수준을 높이기 위해 과거 수십 차례 진행했던 과목을 과정에 추가하고(Crosswalk, Timestable), 대기업 신입사원 교육에서 좋은 피드백을 얻었던 내용도 추가하였으며(텔레그램 복제), 실무 코딩 기반 자료구조와 알고리즘 역시 추가하였습니다. 코칭 과정에 대한 검증을 마치고 서비스와 컨텐츠 개발을 진행하고 있습니다.
namoosori.io
송태국(tsong@nextree.io)