Medium - The Myth of the Genius Programmer

원문 - Oz Lopez

Trend 파악을 Medium 기고문 요약 포스팅 - 천재 프로그래머에 관한 신화

500x400

우리 회사의 인턴들은 몇 달간 토론, 교육, 그리고 일부 선임 개발자의 수작업으로 진행되는 커리큘럼을 교육받았습니다.

저는 그들이 우리 개발자들을 보고 코드를 생성하는 흑마법을 쓰는 초인적인 지식을 가진 종족이라고 얘기하는 것을 우연히 들었습니다. 그 얘기의 결론은 나는 절대 “진짜” 개발자가 될 수 없다는 것이었습니다.

그들이 인턴이 되기위해 해왔던 것에 대한 기쁨도 있지만 앞으로 얼마나 더 해나가야 할지 보이지 않는 것에 낙담을 하는 것이었죠.

그것은 흔하긴 하지만 모순되는 생각입니다:

여기 모인 사람들은 모두 대단한 사람들인데 나는 형편없는 사람이 아니라 그들이 내가 대단한 사람이라고 생각하도록 그들을 속였다.

이것은 모르는 것에 대한 두려움과 자신의 중요성으로 이루어진 생각입니다. 공포는 우리가 생각할 수 있는 것보다 훨씬 더 큰 영역을 마주했을 때 생깁니다. 자존감은 우리가 우리의 역할이 너무나도 중요해서 실패를 하면 지구가 부숴지는 것처럼 생각하는 것이죠.

저는 그들에게 훌륭한 담화를 들려주고 싶네요. 부끄럽게도 제가 타이틀에 차용한 것이죠. 이 기사들과 함께 저는 제 생각과 제 성향을 의식의 흐름대로 쓴 에세이를 통해 다시 전해드리고 싶습니다.

The Myth

천재 프로그래머는 소프트웨어를 쓰기 시작했다.

그들은 그들이 작업을 처리하기 위한 모든 것을 알고 있다. 그들은 동굴에서 몇 달간 그들의 손가락으로 흠잡을 데 없는 코드를 만들어낸다. 그들이 작업을 끝내고 그들의 코드를 실행시키면 한번에 모든 것이 동작한다. 그들은 눈부신 무언가를 가지고 나타나서 세상을 변화시킨다. 그들의 코드는 버그가 없고 튼튼하며 시적인 아름다움을 가지고 있다.

세상은 영원히 바뀌었다; 더욱 나아졌다. 그 코드는 영원히 기억되고 변하지 않을 것이다.

멍청하게 들리시죠? 그렇지만 “진짜” 개발자를 저렇게 묘사하는걸 제가 봤다니까요?

Geniuses Are “Fake News”

천재 프로그래머는 소프트웨어를 쓰기 시작했다.

천재는 없습니다.

그리고 그들은 너무 희소하기 때문에 통계적으로 사소한 일입니다. IQ가 140이 넘는 사람은 0.25%에 불과합니다. 70억명중 고작 200만명이 여기에 해당할 뿐이죠.

천재에 관한 얘기는 그들이 성취한 것에 대해서 과장되게 얘기 됩니다. 우리는 그들의 무수한 실패와 좌절을 무시하고 하룻밤에 이뤄낸 성과로 생각하죠.

인상적인 성취를 얻은 사람에게 가서 물어보세요. 당신은 그들이 매우, 아주, 엄청, 굉장히 실패했다는 것을 알 수 있습니다.

You Don’t Know Jack

그들은 그들이 수행해야 할 작업에 필요한 모든 것을 알고 있다.

이것은 많은 사람들이 잘못알고 있는 것입니다. 그들은 익숙하지 않은 단어나 개념을 접하고 난 이걸 읽기엔 머리가 너무 나쁜 것 같아 라며 읽는 것을 포기하죠.

만약 당신의 의견대로 당신의 현재 지식이 이미 완성된 것이라면 읽는 것은 아무 의미가 없습니다. 새로운 것에 대해서 읽을 필요가 없는 것이죠.

반면에 당신의 현재 지식이 불완전 하다면 새로운 개념이 잘 이해되리라고 기대할 이유가 없습니다.

겸손한 사람이 배움의 길을 길게 갈 수 있는 것이죠

You Don’t Know Jack… Yet

그들은 그들이 수행해야 할 작업에 필요한 모든 것을 알고 있다.

당신이 익숙하지 않은 것을 볼 때 즉시 그것을 찾아보세요. 당신이 그게 뭔지 알만할 때 까지 계속 읽으세요.

당신은 그 주제에 관련된 모든것에 대해 배울 필요는 없습니다. 그것의 역할과 장점, 단점이면 충분합니다. 만약 그게 중요하다면 더 배우러 가는거죠

구글링 합시다. 위키피디아를 읽어요. 그것이 뭔지 대충 파악하는 겁니다.

사람은 모르는 것이 있는게 당연합니다. 그러니까 당신은 모르는 걸 알려고 해야죠. 배우는 것에 편안해 지세요

You CAN Know Jack

그들은 그들이 수행해야 할 작업에 필요한 모든 것을 알고 있다.

당신은 어떤 것이든 배울 수 있습니다.

기술 습득의 장벽은 지식적인 문제가 아니라 감정에 관련된 것입니다. 처리해야 할 문제의 영역을 잘못측정 하는 것에서 발생하는 것이죠.

저는 저에게 잘 맞는 주문을 가지고 있습니다.

  • 내가 설명할 수 있는 것은 어떤 문제든 해결할 수 있다.

당신이 문제를 말로 할 수 없다면 그것을 해결할 확률은 어둠 속에서 총을 쏘면서 제발 맞길 바라는 정도 입니다.

당신이 문제를 이해하는 능력을 키울 수록 문제를 해결하는 능력을 키우는 것입니다. 이해력이 튼튼할 수록 해결력이 증가할 것입니다.

But, You Still Don’t Know Jack

그들은 그들이 수행해야 할 작업에 필요한 모든 것을 알고 있다.

자 그럼 당신은 이제 새로운 것을 배우는데 무슨 문제가 있더라도 달려들 수 있는 사람이 되었습니다. 일단 축하합니다. 먼길 오셨네요.

그러나 당신이 충분히 알고 있다고 자만하지 마세요. 당신은 지식을 습득하는 것을 평생 해야 합니다. 그리고 당신의 경험을 갈고 닦아야 하죠.

항상 당신의 능력을 의구심을 가지세요. 당신이 더욱 나은 방법을 찾았다면 현재 구현한 것을 바꾸는 것을 두려워 하지 마세요.

당신이 완벽한 지식을 갖고 있다고 자만하지 마세요. 당신은 뭔가를 잘못 알고 있을 수도 있습니다. 그러니까 당신이 놓친 점이 있는지 찾아보세요.

만약 당신이 더 나은 방법이 있다고 생각하면 그게 맞습니다. 찾아 보세요!

Programming is a Collaborative Activity

그들은 동굴에서 시작했다…

당신과 일하는 동료 중 토픽에 관해 더욱 많이 알고 있는 사람을 찾아보세요. 지식은 선형적으로 성장하지 않고 변곡점과 계곡들이 있죠. 당신의 지식을 보충해 줄 수 있는 사람을 찾아보세요. 경력은 여기서 중요한 사항이 아닙니다.

당신의 지식을 남과 공유하고 귿르이 하는 말을 들어보세요. 당신의 의견을 소리내어 표현하세요. 당신은 아마 당신이 생각하고 있던 것을 정확하게 설명할 수 없는 것을 느끼고 많이 놀라게 될겁니다.

생각은 평가되어야 하고 최고의 생각이 이기는 것입니다. 그저 가지고만 있으면 생각으 ㅣ가치는 아무것도 없습니다ㅣ

당신의 생각을 다른 사람들에게 표현하세요. 지식은 자유롭고 싶어한답니다.

Code Reviews

그들은 동굴에서 홀로 시작했다…

다른 사람들 앞에서 바보가 되는 걸 두려워 하지마세요.

다시한번 말하지만 사람은 모르는게 있는게 당연합니다. 아는 척하는 것이 더욱 안좋습니다. 코드 리뷰를 받는 것과 그렇게 함으로써 당신은 많은 것을 배울 수 있습니다. 다른사람의 코드를 리뷰하는데 자격같은 것은 필요없습니다. 가장 뛰어난 개발자라도 마감일에 압박받으면 실수하기 마련이죠.

코드의 복잡도나 혼란스러운 것을 지적하세요. 만약 뭔가 혼란스럽게 한다면 그것은 너무 복잡한 것입니다.

코드 리뷰는 전체 시스템 속에서 작업에 대한 해석입니다. 그들의 지능이나 개인적인 평가를 하는 것이 아닙니다.

Ask for Help

그들은 동굴에서 홀로 시작했다…

지침을 요청하기 전에 얼마나 찾아보나요? 당신이 스스로 무엇을 하는지 이해하지 못한다면 모든 의미를 다시 읽어보고 스스로 해결하려고 해보세요. 그러나 당신이 언제 배워야 할지와 언제 바퀴를 굴려야 하는지를 배우세요.

당신의 팀은 당신과 똑같은 목표를 위해 있습니다. 누군가에게 당신에게 설명할 수 있는 기회를 주고 그들의 이해도를 스스로 확인할 수 있도록 해보세요 #팀워크

Writing Code is Hard

그들의 손에서 흠잡을데 없는 코드가…

당신은 처음 시도에서 정답을 얻을 수 없을 수도 있습니다. 당신이 실패했을 때 다른 것을 시도하고 또 실패하고 그리고 또 반복하겠죠. 당신은 새로운 것을 매번 배우는 것입니다.

산문을 쓰는 것과 마찬가지로 당신은 완벽한 초안을 쓸 수 없습니다. 당신이 글을 쓴다면 수정을 하고 퇴고를 하는 것입니다.

배움에 있어 가장 중요한 것은 당신이 얼마나 잘하는 지가 아니라 그냥 가서 하는 것입니다.

Fail faster

그들의 손에서 흠잡을데 없는 코드가…

당신이 실패하고 다시 할 때마다 오류는 줄어들고 성공은 점점 커져갈 겁니다.

빠르게 실패할 수록 당신은 빠르게 탄력을 받고 개선할 수 있습니다.

버전 컨트롤은 당신의 친구입니다. 그것은 코드를 롤백할 수 있게 해주고 배포할 수 있게 해줍니다. 실수하는 것에 너무 겁먹지 마세요.

Make Small Incremental Changes

…몇 달만에

코드를 한번에 많이 바꾸지 마세요. 저는 종종 그들의 코드가 아직 완벽하지 않아서 보여주기를 두려워 하는 사람들을 봤습니다.

그것은 변경사항이 클 경우 미치는 영향에 대해 좋은 이유가 아닙니다. 그것은 코드를 리뷰하는 사람도 이해하기 쉽지 않죠.

당신의 코드가 갑자기 진공상태에서 진화하도록 하지 마세요. 당신의 분기점은 다른 전체 시스템과 호환되지 않을 문제가 있습니다.

처음에는 가벼운 마음으로 코드를 작성해 버리세요. 많은 문제와 해결을 통해 배우고 그것을 개선하세요.

What if You’re Building the Wrong Thing?

그들은 빛나는 것을 들고와 세상을 변화시켰다.

당신은 잘못된 것보다 더 최악이 뭔지 아시나요? 잘못된 것을 맞다고 하는 것입니다.

그것은 가능합니다. 당신이 정확한 문제와 정확한 해결법을 모른다면 말이죠. 그러니까 당신의 재능과 시간을 투자해서 만들기 전에 확실히 조사해야 합니다.

이것을 검증하기 위한 최고의 방법은 테스트 입니다. 작은 버전을 만들어서 작은 문제를 해결하는 작은 해법인지 테스트 해보세요.

All Code Sucks

그들의 코드는 버그가 없으며…

푸하하..

You Are Not Your Code

시적인 아름다움이 있었다.

당신이 만든 것에 대해 감정적이 되지마세요. 프로그래밍은 본질적으로 창조적인 활동적이지만 당신의 코드는 당신 정체성의 일부가 아닙니다.

이유 없이 괜히 몽상에 젖지 마세요. 세로운 기술이나 기법을 사용하는 건 재미있겠지만 그런게 많을 수록 오류가 날 확률이 많아 집니다.

Premature Optimization

그 코드는 영원히 기억되고 변경되지 않았다.

당신이 가장 많은 시간을 쏟는 것은 유지보수와 업데이트 입니다.

의심스러울 때는 코드 최적화를 하세요. 컴퓨터가 인간 친화적인 당신의 코드를 최적화 하는 방법을 찾으세요. 당신을 아낀다면 미래를 생각하며 코딩을 하세요.

코드 입력의 편의성을 위해 최적화를 하지마세요. 처음엔 편해도 나중에 변경을 할 때마다 스트레스를 받을 겁니다.

Abstraction

그 코드는 영원히 기억되고 변경되지 않았다.

문제를 충분히 이해할 때 까지 추상화 하는 것을 미루세요. 종종 이 깨달음은 몇몇 오류와 해결을 시도하면서 얻어지죠.

나쁜 추상화는 추상화를 전혀 하지 않은 것보다 안좋습니다.

추상화의 질은 그것이 미래에 당신이 얼마나 쉽게 변경할 수 있느냐 하는 것입니다. 저는 복잡한 추상화들이 나중에 얼마나 수정을 어렵게 만드는지 봤습니다.

How To Be Considered A Genius

  • 변화에 적응하라
  • 다른 사람의 생각에 대한 당신의 생각을 바꿔라
  • 실수를 인정해라
  • 빠르게 실패해라
  • 당신의 지식을 남과 공유하라
  • 비판을 수용하라 종종 사람들은 그들이 해결하지 못하는 문제를 해결해 달라고 당신에게 요청할 것이다. 당신의 직업은 우리가 앞으로 나아갈 수 있도록 해당 분야의 전문가가 되는 것이다. 망설임을 뚫고 일하는 당신의 능력은 당신의 경력보다 더욱 가치있는 것이다.

이렇게 한다면 사람들은 당신을 천재라고 생각할 것이다.

Additional Inspiration

“Ever Tried. Ever Failed. No Matter. Try Again. Fail Again. Fail Better” - Samuel Beckett

Summary

  • 천재 개발자 소리를 듣는 방법에 대하여,
  • 배움에 두려움을 갖지 말고, 실수를 인정하고 남과 지식을 공유하고 비판을 수용하는 것.
  • 좋은 개발자가 되기 위한 마음가짐.

© 2019. All rights reserved.

Powered by Hydejack v8.1.1