Java 챔피언 프로그래머가 되려면 어떻게 해야 하나요?
몇 달 전 저는 비즈니스 파트너인 Carl과 프랑스어 코스 강사 Xavier와 함께 파리의 한 레스토랑에서 식사를 하고 있었습니다. 대화하는 동안 칼과 나는 우리가 어렸을 때 사용했던 모든 멋진 기술에 대해 웃고 농담을 했습니다. 동시에 나는 자비에르가 오랫동안 침묵을 지키고 있다는 것을 알아차렸고, 그래서 나는 그에게 그의 나이를 물어보기로 했다. 그 아이의 나이는 정확히 기억나지 않지만, 나와 나이가 꽤 달랐고, 내 둘째 아이와도 거의 같은 나이였던 것으로 기억한다. 이는 Carl과 내가 수년에 걸쳐 동시에 가졌던 모든 프로그래밍 경험이 그에게는 가치가 없다는 것을 의미합니다.
소프트웨어 엔지니어라는 직업에서 지식의 반감기는 3년입니다. 이는 3년 후에는 당신이 가지고 있는 지식의 절반이 쓸모 없게 된다는 것을 의미합니다. 예를 들면, 나이가 들수록 TSR(Terminate-Stay-Resident)을 이해하는 사람을 보기가 어렵고, TSR을 작성한 적이 있는 사람을 찾는 것은 건초 더미에서 바늘을 찾는 것과 같습니다. DOS 시스템에서는 여러 프로그램을 동시에 실행할 수 없습니다. 따라서 달력이나 계산기와 같은 백그라운드 기능이 필요할 때 메모리 상주 프로그램( Terminate-Stay-Resident 프로그램)을 작성한 다음 특정 키 조합을 통해 다른 프로그램에서 이를 활성화합니다.
이 업계에서는 지식의 3년 반감기가 사실 놀라운 일이라 절대 가라앉는 나무가 되지는 않습니다. 10대 때 사람들은 내가 계속해서 새로운 것을 배워야 한다고 생각하면서 프로그래머가 되지 말라고 경고했지만, 나는 그것이 우리의 일에 도움이 될 것이라고 생각했습니다. 첫째, 마음이 신선하고 활동적이어야 합니다. 제가 마지막으로 할머니를 만났을 때 할머니는 98세이셨고 걷기가 불편하셨지만 여전히 정신은 맑았습니다. 그녀는 내 Macbook Pro를 보고 "야, 그거 멋지다. 나도 하나 사고 싶다"고 말했습니다. 왜냐하면 그녀는 머리를 맑게 유지하기 위해 끊임없이 새로운 것을 배우고 있기 때문입니다. 둘째, 별로 관심이 없는 기술은 곧 대체될 것이기 때문에 무시하십시오. Subversion의 예를 들어보겠습니다. 예전에는 필요해서 사용했지만 특별하게 여기지 않았고 Subversion 전문가가 되지도 않았습니다. 몇 년 후 git이 등장했고 저는 Subversion에 작별 인사를 할 수 밖에 없었습니다. 안타깝게도 내 고객 중 한 명이 실제로 올해 CVS에서 Subversion으로 마이그레이션했습니다! 올해는 2015년입니다!
자, 주제로 돌아가서 챔피언 프로그래머가 되는 방법은 무엇일까요? 다음 사항이 매우 도움이 된다고 생각합니다.
1. 기억력이 강합니다.
내가 8학년 때 내 기억력이 형편없다고 확신시켜 준 그 생명 없는 역사 선생님 덕분이었다. 그런데 놀랍게도 수년간 프로그래머로 일한 후, 이전에 보았던 Java 소스 코드를 즉시 재현할 수 있다는 사실에 놀랐습니다. JDK의 메소드를 읽어보면 이전 버전과 메소드가 달라졌는지 알 수 있는 경우가 많다. 누군가의 얼굴과 이름을 명확하게 기억하지 못할 수도 있지만 Java 코드는 기억할 수 있습니다. 해당 사람의 이름도 for 루프라면 말이죠. 다행스럽게도 기억력이 부족하다고 해서 챔피언 프로그래머가 되는 데 방해가 되는 것은 아니지만, 기억력이 좋다는 것은 여전히 분명한 이점입니다.
2. 수학능력.
훌륭한 Java 프로그래머가 되기 위해 수학 마스터가 될 필요는 없지만, 수학적 능력은 훌륭한 프로그래머가 되기 위한 자격을 갖추는 데 분명히 도움이 됩니다. 올해 1월에는 시간이 좀 있어서 프로젝트 오일러(Project Euler)를 시도해 보기로 했습니다. 퍼즐 중 하나는 해결책을 찾는 데 9시간 30분의 실행 시간이 필요합니다. 실행하는 동안 문제를 살펴보고 솔루션을 최적화하는 데 사용할 수 있는 숫자 간의 약간의 관계를 발견했습니다. 다시 실행했는데 이번에는 6분밖에 걸리지 않았습니다. 그러는 동안 내 첫 번째 알고리즘은 계속 실행되어 답을 찾으려고 노력합니다. 다시 숫자로 돌아가서 이전에 보지 못했던 또 다른 패턴을 발견했는데, 이제는 완성하는데 6초밖에 걸리지 않습니다. 또한 영리한 프로그래밍 기술과 병렬성을 사용하여 코드를 무차별 대입으로 최적화하려고 시도했는데 속도가 약간 빨라졌을 수도 있지만 여전히 6초 미만으로 완료할 수는 없었습니다.
약 10년 전, Sun은 Java Champion 프로그램을 시작했습니다. Java 개선을 돕기 위해 적극적으로 활동하고 있는 세계 최고의 Java 전문가 1,000명을 찾아보자는 아이디어입니다. 지금은 아마 160위일 겁니다. Oracle은 이 프로그램을 계속하고 있으며 지난 몇 년 동안 우리는 이 인정 시스템의 추가적인 이점을 확인했습니다. 스스로 선택한 그룹입니다. 새로운 챔피언은 기존 챔피언의 추천과 투표로 선정됩니다. 일반적으로 챔피언이 선택되기까지는 12표 이상이 필요하며, 1표가 제안을 거부합니다. 자체 추천이 고려되지만 일반적으로 충분한 지원을 받지 못합니다.
프로그래머 친구들이 어떻게 Java 챔피언 프로그래머가 되었는지 묻곤 합니다. “아주 간단합니다. 그냥 나처럼 Java 관련 기사를 200개만 게시하세요. ; Hibernate, Spring, Jacoco 등에 대해 글을 쓰거나 StackOverFlow에 대한 수천 가지 질문에 답하고 12개의 좋은 기사를 게시하거나 유럽에서 가장 큰 Java 개발자 컨퍼런스를 조직하세요."
뭔가 놀라운 일을 해야 하며 그러기 위해서는 시간과 노력이 필요합니다. 카리스마와 외모 때문에 Java 챔피언 프로그래머가 되는 사람은 없습니다. 열심히 일하는 것이 전부이기 때문에 이름 뒤에 머그샷이 없는 것일 수도 있습니다. 더욱이, 챔피언 프로그래머가 되기 위해 챔피언 프로그래머가 되지 마십시오. 이기적인 태도를 멈추고 다른 사람들의 칭찬을 기다리면 기분이 좋아질 것입니다. 모든 챔피언 프로그래머가 공식적으로 "Oracle Java Champion"이라는 칭호를 받는 것은 아닙니다.
어떤 길을 선택하든 챔피언 프로그래머가 된다는 것은 헌신을 의미합니다. 9시부터 5시까지 일하는 것과는 완전히 다릅니다. 일하는 동안 필요한 모든 것을 배울 수는 없습니다. 챔피언 프로그래머가 되려면 시간에 맞춰 저녁과 주말에 공부해야 합니다. 가장 과장된 농담은 프로그래머가 40세에 도달하자마자 제거 기간에 들어간다는 것입니다. 어쩌면 그들은 Java 프로그래밍에서 잘 하고 있을 수도 있습니다. 책이나 기사를 읽거나 개발자 컨퍼런스 및 도전적인 과정에 참석하여 지식을 새롭게 하지 않는 한, 졸업장에만 의존하는 것은 결국 쓸모가 없게 될 것이며 업계에서는 그것을 중고 냅킨처럼 버릴 것입니다. 절대 그런 사람이 되지 마세요! 공부하고, 공부하고, 또 공부하세요! 그리고 가장 좋은 학습 방법은 의심할 여지 없이 동료들과 지식을 공유하는 것입니다.
어떻게 지식을 공유할 수 있나요? 요즘에는 많은 옵션이 있습니다. StackOverflow나 기타 유사한 사이트에서 질문에 답변할 수 있고, 테이크아웃을 주문하여 점심 시간에 기술적인 문제에 대해 논의할 수도 있습니다. 몇 년 전 제가 일했던 회사에서 그랬던 것처럼 방법은 "디자인 패턴"을 거쳤습니다. 이를 위해서는 약간의 희생이 필요합니다. 점심을 포기하고 연설 준비를 위해 저녁 시간을 보내야 할 수도 있습니다. 그러나 단순히 정보 소비자가 되는 것보다 배워야 할 것이 훨씬 더 많습니다.
"Java™ Specialists' Newsletter"는 현재 130개 이상의 국가에서 70,000명 이상의 프로그래머가 읽고 있지만 아주 작은 규모로 시작하여 80명의 나에게 보냈습니다. 친구와 가족(형, 부모님 포함)과 함께 친구와 동료들에게 전달해 달라고 간청했습니다. 시간이 지남에 따라 천천히 발전합니다. 주위를 둘러보면 80개의 이메일 주소를 찾을 수 있을 거라 생각하고 그렇게 시작된 거죠. 모든 것은 작게 시작됩니다. 천천히 발전하지만 성장은 꾸준합니다. 70,000이라는 숫자를 보면 놀라실 수도 있겠지만 이는 소수의 Java 프로그래머에 불과합니다.
마지막으로 매우 유용한 포인트인 열정으로 이번 포스팅을 마무리하고 싶습니다. 대부분의 사람들은 지루한 컴퓨터 작업을 해야 하지만 그것을 즐기는 사람은 거의 없습니다. 내 직업 중 하나에서는 전기 엔지니어에게 소스 코드 저장소를 구성하는 작업을 맡겼습니다. 그는 모든 것을 잘못했습니다. 소스 제어를 수행할 때 디렉터리 간에 소스 트리를 복사해 보겠습니다. 빌드하는 동안 매주 같은 시간에 이 작업을 수행해야 하는데 서버가 크롤러만큼 느립니다. 기계가 멈춰서 모두가 기다리게 되면 몇 시간이 걸릴 수 있는데, 이는 고통스럽고 좌절스러운 일입니다. 저는 VSS(Visual Source Safe: 소프트웨어 개발 시 다양한 버전의 소스 코드 및 문서를 관리하는 데 사용됨)에 대한 열정이 없습니다. 당신이 열정을 갖고 있는 일을 찾으십시오. 그것은 퇴근 후에 매우 기꺼이 할 수 있는 일이어야 합니다. 나에게는 Java 생태계의 구석구석을 연구하는 것입니다. 멈춰야 할 이유가 셀 수 없이 많을 때 열정은 우리를 앞으로 나아가게 하는 원동력입니다.