[꼰대개발자가 살아온 이야기 #5] 개발자 교육
#꼰대개발자가살아온이야기 #05
전제) 개인적인 사견일 뿐이고, 제 경험을 공유하는 것일 뿐입니다.
교육
개발자 교육이란게 대체 무엇일까요? 전 교육 전문가는 아니라서 정의하기가 좀 뭐하지만... 그래도 제 경험을 바탕으로 정의를 내려보자면
”스스로 찾아서 공부할 수 있도록 서포트해주고 가이드 해주는 것”
물론 흔히들 말하는 주입식 교육도 분명 필요합니다. 기본(?)적인 사항은 외워야 하거든요~ 최소한 무언가를 할 때 어딘가를 찾아야한다더라, 이 분야는 누가 우리 회사에서 제일 잘한다드라, 이건 개발자라면 꼭 알아야 하는 최소한의 지식이라드라... 같은거 말이죠 ^^
모두가 알고 있는 사실 하나.
컴퓨터가 이해하는 것은 0과 1뿐이다. 라고 다들 알고 있죠. (양자컴퓨터는 제외를 흑흑).
전산관련 전공 컴퓨터 구조 시간에 배우는 내용입니다. (ref. https://www.quora.com/Why-do-computers-understand-only-0-1-logic)
왜 32비트 os는 메모리를 4gb밖에(정확히 따져들자면 다르지만) 인식을 못할까요? 그럼 여기서 말하는 32비트란건 어떤 의미일까요? 근데 왜 32비트 OS는 x86이라고 부를까요? 64비트, x64 OS, pointer size, data/address/control bus, ALU, ...
이런 내용들은 개발자의 기본 지식이다/아니다”라고 나누기엔 모호할 수도 있습니다. 단, 이 내용이 본인의 업에 필요한 순간이 언제 올지는 알 수 없겠죠?? 바로 그때... 찾아서 확인할 수 있도록 키워드 정도는 알고 있으면 좋다는게 제 개인적인 견해일 뿐입니다.
예전에(2009년쯤) C++ 응용프로그램을 x86 -> x64로 포팅할 때 정말 힘들었었죠~ 아마 64비트가 나올꺼라곤 생각을 안했었겠죠~ 포인터를 int에 담아 너무 많은 곳에 퍼져 쓰여있는... 물론 그냥 빌드만 되게 해서 실행해도 당시에는 64비트 OS지만 메모리는 아래부터 잡는건지 사용 메모리가 (os, 모든 응용프로그램의 메모리 총합) 4gb를 넘기전에는 문제가 없었습니다. 하지만 저희가 포팅한 이유는 응용프로그램 하나가 4기가를 넘기는걸 목표로 했기에 프로그램 진입점에 메모리를 4기가 더미로 잡아두고 프로그램이 실행되어 돌아가는걸 계속 고치고 빌드하고 실행하고를 반복했었죠~ 대충 500만 라인 정도 되는 소스였으니까요;; 작설하고, 이때 컴퓨터구조 수업을 들었던데 크게 도움이 되었습니다. 어떤 문제가 있을까를 전부는 아니어도 예상은 했었으니까요.
그럼 컴퓨터 구조를 안배웠으면 이 업무를 못했었을까요? 그럼 처음부터 검색을 했겠죠~ “How to migrate 32 to 64”와 비슷하게 시작해서 파고 또 파고 들면서요 단, 알고 있어서 시간을 많이 세이브한 것 뿐이져~^^*
전 개발자 교육을 통해 실무에서 벌어지는 다양한 상황에 대한 실마리를 떠오를 수 있게 하려고 노력하는 편입니다. 그래서 언어의 문법을 교육하는 것 보다는 왜 이 언어는 이렇게 설계되었을까에 초점을 맞추는 편입니다. 그래서 언어 창시자의 생각을 들여다보려고 노력을 하구요. (저 또한 엄청 공부가 되는)
예전에 회사를 다닐 때 제가 조직을 회사를 넘나들어 옮겨야해서(결국 같은 회사이지만...) 누군가에게 제가 하던 전부를 인계 한적이 있습니다. 그 누군가는 제 리더분과 가능성 있는 친구들 중에 면담을 통해 선택을 하였구요. 그리고 전 리더분께 두달의 시간을 달라고 하였고 교육 일정표를 만들어서 가져갔습니다. 이 친구에게 두달동안 실무를 맡기지 마시고 그 일은 제가 하겠다고... 그래야 제대로 넘길 수 있다고... 그렇게 교육이 시작되었고, 제가 한 교육이란건 별거 없습니다. 이 일정표에 있는 내용들 너가 코드 상에서 문서 상에서 확인해보고 궁금한거 있으면 물어보라고... 물론 주입식 교육도 한두차례 있었습니다. 특히 4세대 인메모리디비를 교육할 때는 왜 만들었는지 3세대에서 불편하거나 부족했던 기능이 무엇이었는지 그걸 어떻게 4세대에 담았는지... 지금 보니 이 내용은 완전 학교식이었네요
암튼 이런 저런 인계를 하고 두달 뒤에 전 떠났고 그 이후로 이 친구는 아주 가끔(셩격이 특이하죠 ㅎ) “저... 이건 왜?” 정도의 질문에 대한 답을 해주었을 뿐이죠. 지금은 그 회사를 나와 아주 좋은 회사에서 아주 즐겁게 일하고 있습니다~.~
다른 얘기인데 스터디를 준비하는 사람만큼 참가하는 사람의 준비도 중요합니다. 아무런 준비없이 와서 알려주세요. 하면 어디부터 어떻게 얼마나 가르쳐야 하는건지...
웹쪽 세상으로 넘어가고 나서 자바 교육을 했었는데, 저는 책을 선정한 이후에 이렇게 진행했습니다.
”다음주부터 할껀데 다음주는 이장부터 저장까지 보고 궁금한거 질문하는 시간을 가질꺼야”라고
이 스터디는 끝까지 이런 식이었고, 누군가는 질문한만큼 가져갔을꺼고, 누군가는 그 질의응답으로 배웠을테고, 누군가는 뭔소리야 했겠죠??
저는 배우려는 의지가 없는 사람에게 길을 주지는 못합니다. 하지만 배우려는 의지가 큰 사람에겐 어떻게 하면 되는지 나는 왜 이렇게 해왔는지, 최선을 다해 그 사람에게 맞는 방식을 추천하는 편입니다. 나처럼 해라보다는 나는 이런 놈이라, 나는 이래서 이렇게 해왔다. 라고
코딩 컨벤션 교육을 하는 것을 듣거나 보곤 합니다. 그런데 저는 잘 이해가 안되는 부분이... 특정한 전제 없이 "이게 답이야"라고 하는 교육입니다. 저라면 교육을 들으러 온 분들에게 각자의 상황에 맞는 컨벤션(표기법 포함)을 만들어보라고 합니다. 혹은 한명으로 개발할 때와 5명 이내의 소수, 10명 이상의 큰 팀에서 일할 때는 어떻게 하면 좋을가를 스스로가 고민해보길 원합니다. 그리고 왜 그렇게 생각하는지를 통해서 부족한 부분이 혹시라도 있다면 제 경험을 바탕으로 의견을 드릴 뿐이죠. 코딩 컨벤션에 답이 있나요? 한 때 c++, wind32 api, mfc를 할 때는 헝가리안 표기법이 최선(?)이라기보단 모두가 같이 쓰기로 한 프로토콜이었을 뿐이죠. 지금 헝가리안 표기법을 검색해보면 이런 문구가 위키에 있죠.
"찰스 시모니(Charles Simonyi) 가 마이크로소프트의 개발 책임자로 있을 때 제안했으며, 80년대 당시에는 IDE라는게 다들 부실했기 때문에 물론 볼랜드의 Turbo C 같은 예외도 있었지만 이 규칙이 엄청난 센세이션을 불러 일으켰다. 하지만 지금은 MS도 공식 가이드라인에서 사용하지 말 것을 권고[1]하고 있다. 헝가리안 표기법이라는 명칭은 제안자인 찰스 시모니가 헝가리인이라서 붙은 것이다."
그 당시에는 의미가 있었을지 모르지만 지금은 MS에서도 공식으로 사용하지 말 것을 권고하는 것이구요. 물론 그 당시의 최선의 답이었을 수 있지만 전제가 없이 답은 아니죠. 지금도 마찬가지입니다. 하루하루 변해가는 아이티 세상에서 답은 존재하지 않다고 생각합니다. 단지 항상 최선의 답을 찾기 위해 노력할 뿐...
암튼 교육해주시는 많은 분들에게 조금이나마 보답하는 길은 열심히 뿐만 아니라 잘 따라가는 것이고, 준비한만큼 질문해보는 것입니다. 많이 물어보세요~ 답은 아니더라도 경험은 공유해 드릴 순 있습니다.
ps) 오늘도 서서버스에서, 다행이 이층버스 계단에 앉아 쓰느라... 퇴고는 출근 완료해서. 월요일 출근길 죽겠...