|
1. 폴리글랏 프로그래밍에 대해 강조하셨는데요, 새로운 언어에 대해서 공부하는 노하우가 있으신지요?
우리가 새로운 언어를 배운다고 했을 때 그것이 의미하는 바는 여러 개의 층위를 갖습니다. 매일 사용하는 언어를 완전히 대체할 정도로 깊게 나가는 경우도 있고 그냥 책으로 개념만 익히는 피상적인 수준도 있습니다. 그래서 누가 어떤 언어를 '안다'고 말할 때 우리는 그것이 어느 정도의 수준을 의미하는지 확인할 필요가 있습니다. 학습의 수준이라는 측면에 보았을 때 언어의 문법은 깊이가 얕습니다. 언어가 가진 원리와 철학은 깊습니다. 새로운 언어가 사용하는 낯선 문법은 그 자체로는 내가 현재 사용하는 언어를 이용해서 사고하는 방식에 영향을 주지 않습니다. 하지만 새로운 언어가 가진 원리와 철학은 영향을 줍니다. 폴리글랏 프로그래밍이라는 표현은 이렇게 다양한 층위를 모두 포함합니다. 하지만 핵심은 새 언어가 "기존의 사고방식에 주는 영향"에 있습니다. 그 영향이 극명하게 드러나는 순간은 언어의 문법이 아니라 패러다임이 새로운 경우입니다.
저는 새로운 언어의 패러다임을 주로 해당 언어의 창시자가 쓴 책이나 아니면 해당 분야에서 바이블로 통하는 책을 읽는 방식으로 접근합니다. 문법에 얽매이지 않고 언어가 가진 독특한 개념, 철학, 원리에, 즉 패러다임 전체에 익숙해지려고 노력합니다. 많은 언어에 대한 학습이 책을 읽는 수준에서 끝나지만 어떤 언어는 다음 단계로 넘어갑니다. 다음 단계는 회사에서 간단한 코딩이 필요할 때 새로 익힌 언어를 실제로 사용하는 것입니다. 즉, 위험부담이 거의 없는 프로젝트에서 언어를 적용해 보는 것입니다. 대부분의 언어에 대한 학습은 이 정도 수준에서 끝납니다.하지만 이 단계를 넘어 원래 사용하던 언어를 전면적으로 대체하는 단계로 나아가는 언어가 드물게 존재합니다. 제 경우에는 C#과 스칼라가 그랬습니다.
간단한 코딩을 넘어 전면적인 활용을 의미하는 다음 단계는 주변 사람들에게 해당 언어를 권하고, 같이 공부하고, 커다란 프로젝트에 적용하는 것을 의미합니다. 매일 사용하던 언어도 새로운 언어로 바뀝니다. 새로운 언어에 대해서 공부하는 노하우는 새로운 언어를 자주 공부하는 것입니다. 새로운 언어를 공부하는 경험을 몇 차례 반복하면 새로운 언어를 공부하는 방법 자체가 점점 효율적으로 발전합니다. 새로운 언어를 점점 더 많이 공부할수록, 처음보는 언어조차 친숙하게 느껴집니다.
|
2. 책을 집필하실 때 가장 중요하게 생각하시는 점이 무엇인지요?
나 자신이 독자라면 이 책을 재밌게 읽을 것인가, 라는 질문에 대한 답입니다. 문학에서 작가적 진정성이라는 표현을 쓰는데요, 내가 이 글을 너무너무 쓰고 싶어서 쓰고 있는가 아니면 다른 동기나 상황에 떠밀려서 쓰고 있는가에 대한 구분도 중요합니다. 글을 많이 쓰다보면 요령이 생겨서 글을 쉽게 쓰고자 하는 유혹에 빠질 때도 많은데요, 마음 속에서 진심이 일어나서 쓰는 글이 아니면 책으로 만들기도 어렵지만, 책으로 만들어도 안됩니다. 글을 쉽게 쓰는 방법은 하나마나한 이야기 늘어놓기, 다른 곳에서 보고들은 것을 그대로 옮겨적기, 내가 한 고민이 아닌데 내가 한 척 이야기하기 등 많습니다.
|
3. 프로그래머가 되려는 비전공자가 지녀야 할 가장 중요한 덕목은 무엇일지요?
전공자 앞에서 기죽지 않기. 이게 제일 중요합니다. 전공을 한 사람은 비전공자에 비해서 컴퓨터 공학과 관련해서 아는 것이 많겠지만 회사에서 수행하는 실전 프로그래밍에서 더 나을 거라는 보장은 없습니다. 실전 프로그래밍은 자동차 운전과 비슷합니다. 도로 위 상황에서 적절한 임기응변을 누가 더 잘하는지, 자동차 패달과 운전대를 누가 더 능숙하게 조작하는지, 이런 것들이 운전사의 역량을 규정합니다. 기계공학과를 졸업해서 내연기관의 원리와 바퀴에 힘이 전달되는 물리적 원리를 잘 아는 것은 실제 운전을 잘 하는 것은 별개의 문제입니다. 단, 비전공자는 전공자보다 더 많은 노력을 해야합니다. 더 많이 코드를 작성하고, 더 많이 책을 읽고, 더 많이 커뮤니티 활동을 해야 합니다. 끊임없이 동기부여를 하고, 친구를 사귀고, 발표를 해야합니다.
|
4. 큰 프로젝트에 참여를 해본 경험이 별로 없어요. 그래서 프로젝트 설계 능력이 많이 부족한데요. 그런 능력을 어떻게 학습할 수 있을까요?
큰 프로젝트의 정의가 무엇인지 궁금하지만, 아무튼 본인이 큰 프로젝트라고 생각하는 그런 일이 진행되고 있는 곳으로 직접 들어가야 합니다. 회사 내에 기회가 있으면 적극적으로 어필을 해서 자리를 옮기고 아니면 회사를 옮길 필요가 있겠습니다. 일단 큰 프로젝트에 합류하면 그곳에서 가장 실력이 높거나 리더 역할을 하고 있는 개발자의 신뢰를 얻기 위해서 노력해야 합니다. 그 노력의 중심엔 본인이 작성한 코드가 있습니다. 개발자는 코드로 말한다는 표현이 있는 만큼, 제일 중요한 것은 코드입니다. 그렇게 신뢰를 얻은 다음 아주 가까운 곳에서 그의 일을 돕거나 보조하면서 그가 일하는 방식, 그의 코드가 구성되는 방식, 그가 시스템을 설계하는 방식을 보고 배워야 합니다. 이게 최선입니다. 이런 와중에 물론 관련된 책이나 자료를 읽고 학습하는 것이 병행되어야 하겠지만, 함께 일하면서 배우는 것보다 좋은 방법은 없습니다.
|
5. 해외 이직을 생각하고 있는데 현재 기술 스택과 해외 트렌드가 달라 준비가 어렵네요. 어떤 부분을 준비해야 할까요?
해외 트랜드 일반을 생각하고 그에 대한 준비를 하는 것은 무리입니다. 그건 너무 범위가 넓고 추상적입니다. 내가 어떤 지역, 어떤 회사, 어떤 분야, 어떤 기술에 관심이 있는지 초점을 맞춰서 그에 대한 구체적인 준비를 하는 것이 현실적이고 효과적입니다. 예를 들어서 미국에 취업이민을 하고싶다고 생각하는 것이 아니라, 샌프란시스코에 있는 트위터 회사의 데이터분석팀에 입사하고 싶다고 생각하는 겁니다. 호주 시드니에 있는 금융회사에서 스칼라로 개발하고 싶다, 이런 구체적인 목표가 있어야 준비를 더 잘, 쉽게 할 수 있습니다.
|
6. 후배 프로그래머들에게 한 마디 부탁드립니다.
프로그래밍은 세상에서 제일 재밌고 행복한 직업입니다. 대신 평생 손에서 공부를 내려놓을 수 없는 직업입니다.그래서 공부 자체가 즐겁고 행복해야 일도 덩달아 잘 풀립니다. 공부를 어쩔 수 없이 해야하는 의무라고 생각하지말고 웃으며 즐기시기를 당부합니다. 여기에서 이야기하는 공부는 고시원에서 시험준비하는 사람들이 하는 그런 공부가 아닙니다. 그래서 반드시 혼자 해야하는 공부가 아닙니다. 더구나 친구나 지인들과 함께 공부하면 지치지 않고 오래 할 수 있습니다.
|
|
|
· 멀티프로세서 프로그래밍이 중요한 시대
· 다양한 방법으로 문제를 해결한다
· 동시성 문제를 주제로 선택한 점도 주목
· 번역이 어색하지 않고 내용도 충실
더 읽어보기
|
|
· 개발자의 삶과, 나아가야 할 방향을 알려준다
· 개발자의 현실을 말하고 알려 줄 수 있다
· 전반적은 프로그래머에 대한 생활을 알 수 있다
더 읽어보기
|
|
|
· 쉽게 접근하는 알고리즘
· 알고리즘 기본을 즐겁게 접할 수 있는 방법
· 비전공자도 쉽게 읽혀지는 책, 쉽고 재미있다
· 누워서 읽을 수 있을 정도로 쉽다!
더 읽어보기
|
|
· 한국 개발자 문화의 미래 지표를 열어준 책
· 개발자 문화의 올바른 방향성을 제시한다
더 읽어보기
|
|
|
· 해커적 기질을 예술로서 표현
· 비전공자들도 프로그래밍을 이해할 수 있다
· 개발자는 창조자일 수 있다는 자부심을 준다
· 개발자를 화가에 비유해서 재밌게 풀어낸 책
· 개발자는 아티스트!
더 읽어보기
|
|
· 개발자로서 한번쯤 읽어봐야 할 이야기
· 프로그래밍을 잘하고 싶은 마음이 들게 한다
· 프로그래밍의 즐거움을 간접체험!
더 읽어보기
|
|
|
· 요즘 언어의 패러다임은 항상 변하고 있다
· 한 언어에만 안주 할수 없는 개발자를 위한 책
· 모든 프로그래머의 필독서
더 읽어보기
|
|
· 7가지 대표 언어의 패러다임을 알수 있다
· 동시성 프로그래밍에 도전장을!
더 읽어보기
|