우선 JAVA C 같다고 보자. 그러면 C++, C# 같은 언어가 된다. JAVA에는 포인터가 없다고 한다. 그래서 포인터 예외는 자바 8에서 레퍼런스 예외로 명칭을 바꾸려나 보다. JAVA에는 포인터가 있다. Object Void 포인터이며, 인스턴스 변수라고 불리는 것이 포인터다. 멤버 변수는 일반 변수나 struct 대응되며, 자바에서 메소드라고 하는 것은 C function 같다. 리누스 토발즈는 자신이 객체지향 프로그래밍을 하고 있다고 말했는지 모르겠지만 이미 리눅스 커널은 C 만들어진 객체 지향 소스이다. wrapping 되는 class 들은 wrapping 하며 쓰이는 함수 포인터와 같다. 앞서 말했던 new malloc, calloc이다. 메모리 확보 추가 키워드는 static이다.


최근 일주일 동안 C 배웠지만 JAVA 모르는 학생들과 기술 면담을 하면서 라이브 코딩으로 가르쳐 주는 내용들이며 분량은 1시간 30분짜리다. - 아마 글로 옮기면 얼마나 길어질지 모르겠다. - "중도 탈락"이라는 말을 쓰는 학업 성적은 우수했던 학생들이 다시 공부를 있게끔 해준 기술적 내용 강의 학생들은 바로 알고리즘 공부나 디자인 패턴, 그리고 수학의 정석을 다시 편다. 기본 앱들을 만들 있고 공모전에서 수상했던 친구들이다. 대부분 맥을 쓰는데 맥과 리눅스도 같다고 설파한다.(모든 프레임웍 같다고 설파하는데 조금 자중해야 - 초반부 학생들이 자신감을 가지기 위해 하는 것이지만 철학부터 다른 프레임웍을 같다고 하는 것은 어폐가 있음. 이에, 전면 수정 예정)


UNIX LINUX 같지 않지만 같다고 말하는 이유는 수많은 파일 시스템을 지원하고 완전히 다른 메커니즘으로 구현되었지만 정책은 같기에 그렇다. 간단히 말하면 배시 셸을 쓴다. 맥도 배시 셸을 쓴다. 이제 윈도도 배시 셸을 것이다.



사족 - 사족은 언젠가는 지워진다10 만에 지워질 때도 있다. 구독자를 위한 얼리어 답터 글들이다.

우선, 책은 그냥 나오는 것이 아니다. 이야기한 적이 있지만 나도 쓰는데 기여를 경험이 있었다. 소스 검증하다 보면 새로운 것이 나와서 또다시 검증해야 했고, 프로그래밍 언어가 대규모 업데이트가 되면 업데이트를 해야 했다. 어떤 내용은 쓰려면 회사에서 중요한 내용들이라 적기도 그렇다. 매거진에도 그런 분이 계시지만 학생들의 포트폴리오를 만들어 주려고 자신이 했던 부분들을 공개하지 않고 감추는 스토리도 있다. 우수한 실력으로 책을 썼지만 보다 진솔한 이야기들을 주려고 기존의 강한 이미지를 던지는 분들도 계신다. 그러나 안타까운 것은 그런 정보를 얻고 정보를 부재시키는 신입 개발자가 억대 연봉을 받고 기업에 들어갔다는 이야기이다.(국내 이야기다) 배가 아픈 아니라. 똑똑한 머리로 선배들이 닦아놓은 길들을 교묘하게 이용하는 행위들이 싫다. 그래서 귀를 쫑긋 세우고 있는 애독자들을 위해서 업계 험담들을 올리고 지우고 했는 했었다.


2~3 멘토링을 받았던 친구들은 모두 리눅스 마스터 자격증을 땄다. 레드헷 자격증 같이 외국 자격증을 따도 되겠지만 덤프의 위력이 너무도 크고, 외국 자격증들은 바우처도 비싸고 유효기간이 짜증 나고, 그냥 배시 셸만 학습하면 된다는 생각에서였다. 그리고 학생들이 공부를 나가면서 실무적인 마일스톤을 가질 있으니 얼마나 좋은가?(실제로 회사에서 인턴으로 학생들을 보면 확실히 차이가 났다) 자격증을 친구들과 아닌 친구들 모두 내가 팀장인 회사에서 인턴을 시켰는데 실력 차이가 확실했다. 자격증은 그저 이거 이거 알아요 말할 있는 것을 그냥 기본은 아요로 대신 말해주는 같다.  개발에서는 자격증은 아무 소용도 없게 느껴진다. 그래도 사람을 뽑는 입장에서 오라클 자격증이 있는 친구는 SQL 기본 문법은 알겠구나 하는 정도로 생각한다. 기술사가 아닌데, 기술사 진로를 물어보는 학생에게는 경험을 이야기해 준다. 이음 멘토링 멘토 네트워크에서 만난 나의 멘토 한분은 기술사도 따고 감리사도 따고 박사도 따고 교수님도 하시고 기업 CTO 였다. 놀라운 것은 박사가 있는데 디자인 박사 학위를 밟고 계셨다. 앞으로는 디자인이 중요하다고 생각해서 하고 계셨다고 했다. 단기간 멘토링 때문에 이야기를 종종 하지만 이렇게 배움의 열정 앞에서는 돈도 사실 무의미하다.


학위나 일했던 경력이나 자격증이 증명하는 것은 이런 형식이라고 보인다. 작은 자격증이라 할지라도 무시하는 더러운 개발 문화 그런 풍조를 없애고 싶다. 자기 능력에서 열심히 공부해서 땄는데 한마디 꺼내는 문화. 강사 시절이 있었기에 나도 여려 땄지만 워드 자격증도 나는 당당하게 말한다. 물론, 워드 자격증 없이 잘하는 사람이 있다는 것을 알고 있다. 단순히 워드를 조금은 봤고, 이러이러하 기능들을 봤어요 하는 말을 줄여서 자격증이 있다고 하는 것이다괜히 내가 어쭙잖게 통합해서 정리했던 것으로 공부한 친구들이 이상한 문화를 만들까 노파심에 미리 적고 준비를 본다.겸손부터 적었지만 나도 인성을 바꾸기가 쉽지 않았다. 그게 쉬운가...  년도 이야기이긴 하지만, 대학교 나와도 아무 쓸모없다는 기조가 있었다. 그러나 시간이 지나면 분명 다르다는 것을 우리는 있다. 슈퍼 코더들이 학교에서 시간을 낭비할 필요는 없겠지만 내가 하는 멘토링의 최종 목적은 학교가 그런 요람이 되도록 모든 지식들을 학교로 돌려주는 있었다. 정작 자신은 학교를 무시하고 그것들의 존재에 대해서 많은 부정들을 했었지만 말이다. 앞서 말했듯이 시간 개념을 놓고 봐야 한다.


애플리케이션만 만드는 프로그래머는 의아해하겠지만 점점 칩단(LOW LEVEL) 내려가면서 프로그래밍을 하다 보면 for (int i = 0; i < 7; i++) dosomething();  보다.

dosomething();

dosomething();

dosomething();

dosomething();

dosomething();

dosomething();

dosomething();

빠를 때가 온다는 것이다. 결국 컴파일러 최적화 옵션만 맹신하지 말고 하부 구현까지도 의심해봐야 하는 레벨도 있다. 내려가면 해당 분야 박사님과 아무리 디버깅을 해도 원인을 찾지 못해서 결국, CPU fetch cycle 때문에 리셋이 난다는 식의 보고서를 적도 있었다. 내가 정도면 전기기사나 전기공사 기사 자격증을 공부하고 설계를 공부하는 것은 기본. HOMEBREW CPU 만든 사람과 같이 CPU 하나는 만들어 봐야 원인을 찾을 있을 같다. 물론, 그렇게 보내는 시간 동안 세상은 어떻게 변해 있을지 모르기에 실천으로 옮기지는 않을 것이다.


설계의 시작은 모든 가능성을 의심하는 것이고, 디버깅의 시작은 자신이 만든 부분만 의심하면 된다. 너무 넓은 범위를 잡으면 된다. 우선, 자전거로 안전한 동네 바퀴만 돌면 된다는 것이다. 당장에는 외국인과 대화할 언어를 배우지는 못했지만 집에서 서투르게 외국어를 말해보면 된다. 외국어를 어떻게 말할지 고민하지 말고 당장 코드 타이핑부터 시작하라.


- 툴은 C Visual studio 2015, JAVA oracle JDK8 + Eclipse mar2, Beyond compare

( 10년은 협업을 책임질 툴이라 선택, beyond compare 돈이 들어가기에 차선책 툴을 찾는게 좋아 보이긴 )





프로그래머랑 대화할 우선 헬로우 월드는 찍어 봤다고 하자. 연봉 5000 넘는 자바 개발자가 세미나를 하는데 public static void main (String args[]) (*자바에서 기초중에 기초) 못쳐서 인터넷 검색을 하는 것을 보았다.


gcc -E  --> Preprocessor, but don't compile

gcc -S  --> Compile but don't assemble

gcc -c  --> asseble but don't link

gcc with no switch will link your object files and generate the executable



https://www.gitbook.com/book/tra38/essential-copying-and-pasting-from-stack-overflow/details

https://www.youtube.com/watch?v=Cs1rn3KHgTA

창시자의 책을 보시면 헬로우 월드 예제가 틀렸다는 것부터 아실 겁니다. 대소문자 구분에 ! 아닌 같아요.

Nothing and Everything 입니다. 아무것도 아닌 같지만 전부일수도 있습니다.


여기까지 굳이 말할 필요 없지만 제가 말하고 싶은 것은


천재라면 혼자 칩만들고 굳이 모듈 나눌 필요도 없이 원코딩으로 하드웨어 제어 코드, 운영체제, 프레임웍, 사용자들이 어플까지 만들면 되고 서버 역시 필요한 모듈들을 코딩할 필요도 없이 기계어로 짜서 넣어버리면 되겠지요. 그게 안되기 때문에 모듈을 나누는 것이구요. 디자인패턴 역시 자주 쓰는 코드들을 정의해 두고 서로 소통하기 위해 정도는 알고 서로 이야기 하자고 만든 것으로 생각됩니다. 겸손하게 소통하고 치킨게임이 되어 가고 있지만, 모두를 이끌어 주는 것이 필요하다고 생각됩니다. 그리고 개발자 하청은 더러운 경영자, 발주자들의 목록을 만들어서 우리들이 사람들과는 아무리 돈을 줘도 일을 안하거나, 일을 해도 대충 일해주고 소스를 경쟁업체에 넘겨준다던가 하는 방법으로 가면 좋을 같습니다. 물론, 좋은 분들은 돈을 적게 주시더라도 되었을 분명 이익을 쉐어링 것이기 때문에 목록 공유하고 성심 성의껏 일하구요. IT 협동 조합이 최근 만들어져서 많은 기대를 하고 있지만 그런 목록 만들기는 온갖 이해 관계가 얽혀서 쉬운 일은 아닐겁니다. 그러나 필요하지요.

그리고 물타기는 아닙니다. 역시 Ctrl+C, V에다가 어차피 Ctrl+C,V라고 말하며 어느 정도 지식은 있는 영약한 학생들이 유명 학교 빽그라운드만 믿고 나이가 13 차이나는데 살살 긁으며 빡돌게 하는 후임들이 많아서 어떤 요지인지는 100% 알고 있습니다. 옥시 사태처럼 진짜 중요한 정보 하나 정도는 알려줘야 하나 말아야 하는 기로에 고민을 합니다. 그럴 기준점이 되는 것은 제품 사용자들은 가족이 수도 있기에 사용자에게 무엇을 것인가가 기준점이 됩니다. 정치를 못하는 것도 아니라서 불이익을 주거나 잘라버리는 것은 사실 어렵지 않습니다만, 어린 노무 ㅅㄲ들을 상대로 이런 고민을 해야 하는 제가 너무 우스울 때가 있지요.

그리고 댓글이 많이 달리는 주제를 이끌어 주신데 감사드립니다.

+ Recent posts