은밀한 설계자들
in Book on 개발자,, 클라이브, 톰슨
누구나 개발자가 될 수 있다. 어떤 개발자가 되어 어떤 프로젝트로 어떤 사람들에게 어떤 영향을 만들어낼지 끊임없이 고민하자
내 삶에 적용하기
커뮤니케이션
개발자는 개발 실력도 중요하지만 커뮤니케이션 능력도 필요하다. 프로젝트의 규모가 크면 개인의 능력이 아무리 뛰어나도 혼자서 모든 것을 해낼 수 는 없다. 똑똑하지만 아무도 같이 일하고 싶어하지 않아 결국 빛을 보지 못하고 실패한 프로그래머들이 많다.(페이팔은 능력만으로 사람을 뽑지 않았다. 오히려 정반대였다. 초기 조직을 성격적으로 자신들과 비슷하게 만들기 위해 비슷한 사람을 뽑았다.) 타고난 듯 보이는 프로그래밍 재능은 대부분 1만 시간의 법칙에 해당하는 노력의 산물이다. 즉, 프로그래머는 프로그래밍하고, 프로그래밍하고, 또 프로그래밍하면서 점차 실력이 향상되고 몇년 후 전문가가 된다. 하지만 중요한 사실은 진짜 유용한 프로그래밍 작업은 혼자서 활약하는 것이 아닌 함께 협력해 만들어야하는 팀 작업이다.
끊임없는 실패를 견딜 수 있는 능력*
프로그래머는 재빨리 반복 실행하며 문제를 해결해야한다. 실수해도 상관없다. 프로그래밍에서 실수는 당연한것이다. 나는 실패한게 아니고 코드가 작동안되는 이치를 발견한 것이다. 나는 앞으로 만든 모든 프로그램의 에러를 찾아 해결하는데 최선을 다할것이다. 컴퓨터 과학을 전공하지 않아도 똑똑하고 책임감 있는 사람이라면, 누구든 장사 기술 처럼 직업에 필요한 프로그래밍을 배울수 있다. 프로그래밍은 정신적으로 힘든일이다. 하지만 처음 해보는 일도 서서히 익숙해진다.
책임감과 철학
구글 사용자 수는 셀 수 없이 많지만 구글 개발자는 불과 몇천명이다. 세상에 엄청난 영향력을 가진 회사에서 일하는 사람이라면, 반드시 가진 힘의 크기와 그힘을 가지고 무엇을 할지 생각할 의무가 있다. 프로그래밍 같이 많은 사람들에게 동시에 영향을 끼칠 수 있는 방법이 역사적으로 존재 하지 않았던 것 같다. 반대로 적은 수의 사람이, 수많은 사람들의 경험을 정희할 수 있는 분야가 있었는지도 모르겠다. 기존 기술이나 산업을 크게 바꿔야 한다는 강박관념에서 벗어나야하며 단순히 큰 변화에 집착하지 말고 어떤 변화를 만들어내는지가 중요하다. 기술은 도구이 대부분의 도구는 사이드 이펙트를 가지고 있다. 타인에게 끼치는 영향력의 크기가 클 수록 책임감을 가져야한다. 소프트웨어 회사들에게 가장 중요한 일은 프로그래밍이 아니다. 오히려 어떤 시스템을 만들려는지 결정하는 것이다. 소프트웨어 회사는 결국 코드, 즉 프로그램을 판다. 전통적인 기존 제품과는 달리 추가 비용을 거의 들이지 않고도 제품 생산과 판매를 전세계적으로 증가시킬 수 있다. 빅테크가 돈을 벌 수 있는 방법은 최대한 규모를 키운 후에 사용자에게 광고를 파는 것이다. 광고를 판매하는 기술회사는 예외 없이 사용자가 서비스 앱에서 눈을 떼지 못하게 만들어야 한다는 사실을 깨달았다. (그래서 서비스는 우리 뇌에 점점 더 자극적으로 변하고 있다.) 사용자 수 혹은 사용자의 서비스 이용 시간 등과 같은 규모에 집착하는 프로그래머에게는 ‘무엇을 만들어야 할까?’라는 윤리적인 질문이 ‘시스템 규모를 키워 더 높은 생산성을 가지기 위해서는 무서을 만들어야 할까?’라는 질문으로 바뀐다. 엔지니어들은 페이스북에서 어떤 것이 인기를 얻거나 입소문이 나면 회사가 그렇게 만든 것이 아니라, 대부분 사용자들이 원해서 그런 것이라고 생각한다. 이렇게 함으로써 매우 이성적인 엔지니어 조차 책임감에서 벗어나려한다. 결론적으로 회사를 위해 일하는 프로그래머와 서비스 설계자의 목적은 서비스 사용자의 목적과는 근본적으로 반대 일 수 밖에 없다. 더욱 심각한 문제는, 광고를 통해 수익을 올리는 회사들이 디지털 광고의 효과를 높이기 위해 사용자가 인터넷을 사용하는 동안 어떤 일을 하는지 끊임없이 추적한다는 것이다. +또한 딥러닝 기술이 도래하면서 개인정보에 대한 욕구는 더욱 커지고 있다.프로그래밍은 수단 일 뿐이다. 배우기전에 먼저 문제가 무엇인지 정확히 알아야 하지 않을까? 풀어야 할 문제가 있기는 한가? 다른 사람들도 문제를 정확히 이해할 수 있도록 설명할 수 있나? 문제를 깊게 연구하며 답을 찾아 본적은 있나? 프로그래밍을 사용하면 그 문제를 풀 수 있다고 확신하나?
예술과 창조를 즐길 수 있는 능력
나 자신을 예술가로 프로그래밍 하자. 프로그래밍은 단순한 일이 아닌 즐거운 놀이 또는 예술 작업이다. 프로그래밍은 내가 생각한 모든 것을 컴퓨터로 만들수 있게 해준다. 글을 쓰는것, 그림을 그리는 것의 즐거움은 프로그래밍이 주는 즐거움과 비슷하다. 무에서 무언가 새로이 만들어내는 창조의 즐거움. 단순한 프로그래머가 아닌 예술가가 되기 위해서 중요한 것은 과감하고 미친 듯 보이기도 하는 새로운 아이디어를 생각해낼 수 있는 능력, 즉 세상을 남들과 다르게 보는 능력이다. 코드는 훌륭한 아이디어를 가져야한다. 만약 만들고 싶은 제품이 기발하고, 새롭고, 흥미로운 것이라면, 가장 뛰어난 프로그래머인지 아닌지는 중요하지 않다. 아이디어가 훌륭하면 뛰어난 프로그래머들을 채용해 만들면 된다.
오픈 소스 정신
MIT 해커 그룹은 권위, 서열, 관료조직, 행정 당국 등을 전혀 신뢰하지 않았다. 또한 그들은 돈을 벌려 하지 않고, 누구에게라도 프로그램을 보여주고 사용할 수 있도록 허락해야한다고 믿었다. 그래야 사람들이 배울 수 있고, 자신들이 만든 훌륭한 프로그램이 세상에 널리 퍼질 수 있다고 생각한다. 프로그램은 인류 공동의 지식이다. + 오픈소스는 서로 상반되는 2가지 사상, 애덤 스미스의 시장경쟁 사상과 마르크스의 공산주의 사상이 서로 뗄 수 없는 형태로 미묘하게 혼합되어있다.
도전 정신
망설이지 말고, 신속히 문제와 부딪혀라. 조금 부족한 것이 늦는 것보다 낫다. 불완전한 버그가 많더라도 빨리 개발해 사람들에게 새로운 기능을 제공하는 편이, 버그 없는 완벽한 소프트웨어를 만들기 위해 많은 시간을 소비하느라 몇 년씩 제품출시를 늦추거나 심한 경우 제품 출시를 못하는 것보다 낫다는 뜻이다. 그리고 가끔은 과감하고 새로운 시도를 해야한다. 늘 그렇다면 나쁘지만 한번도 하지 않는 것도 나쁜일이다.
간결함
코드의 간결함을 생각하면 프로그램은 마치 시와 같다. 시의 가치는 함축된 표현에서 나온다. 훌륭한 시에는 버릴 것이 없다. 각 단어 하나하나에 의미와 목적이 있다. 시는 전체가 꼼꼼하게 만들어져 있고 시인은 가장 적합한 단어 하나를 찾기 위해 몇 시간씩 혼자 끙끙대며 고민하기 일쑤이다. 시가 잘 써지지 않으면 기분전환을 위해 며칠씩 떠나 있기도 한다. 특히 초기 모더니즘 시는 함축된 표현을 매우 중요시했다.
코드
위대한 프로그래머가 되는 길은 위대한 프로그램을 만드는 것 뿐이다. 다른 길은 없다. 능력 있는 프로그래머라면 새 아이디어가 가능한지 혹은 무언가 새로운 것을 만들기 위한 가장 좋은 방법이 무엇인지 며칠 씩 토론하며 논쟁하기 보다는 직접 시제품 프로그램을 작성해 결과를 확인해야한다. 오직 코드로 말해라.프로그래머들은 윗사람들에게 아첨하거나 혹은 주변 사람들을 잘 관리하는 사람이 경쟁에서 이긴다고 생각하지 않으며, 오히려 최고의 아이디어를 도출해 이를 구현한 프로그래머가 경쟁에서 이긴다고 굳게 믿는다.
자신감
공부를 그만두거나 혹은 계속하는 학생들의 결정은 타고난 프로그래밍 재능과는 상관 없다. 프로그래밍의 선행학습 효과는 크지 않다. 자신감이 중요하다. 초보 신입생들이 2년만 떠나지 않고 버틸 수 있다면, 프로그래밍 경험을 가지고 입학한 동기들을 따라 잡을 수 있다. 실전을 통해 프로그래밍을 배워라. 무료 온라인 강의나 해커톤 대회 등에서 배운것에 비하면 학교 수업은 아무것도 아니다. 두려움도 잠깐, 경험이 쌓이면 쌓일 수록 자신감은 커진다.
사이버 펑크
세상의 주류를 벗어나 자기만의 방식으로 사는 사람들로, 시민의 자유를 지키기 위해 컴퓨터 기술을 사용한다. 디지털 방식으로 일어나는 사회 변화를 고려할 때, 암호화를 시민 자율권 보장의 핵심적인 기술로 생각한다. 프로그래밍 능력과 중앙 권력에 대한 불신, 2가지 조합으로 사이버 펑크 탄생했다. 무정부 주의와 자유 지상 주의. 중앙 권력을 가진 사람들이 권력을 남용할 수 있다고 생각. 작은 정부기반의 사회 주의. 정부의 감시에서 자유로울 수 있다는 생각에 매료된 자유의지론자. 무정부 자본주의자.
인문학
SNS 서비스 S발자들은 SNS의 문제점을 공학 중심의 사고방식에서 비록된 일종의 부작용이라고 주장한다. 프로그래머와 설계자는 소프트웨어, 논리, 시스템, 효율, 각개 격파 식 문제 해결 능력 등에서는 분명히 뛰어났다. 그러나 그들 대부분은 대학을 갓 졸업한 백인 엔지니어들로 세상이 얼마나 북잡한지, 정치가 무엇인지, 다른 사람들은 어떻게 사는지 등에 관해서는 거의 아는 것이 없었다. 매우 한정된 분야에서 똑똑한 사람들이다. 그들은 인간의 여러가지 속성과는 관련이 없는 분야에서만 똑똑했다. 인간 본성에 대한 통찰력은 전혀 없었으며 사람들을 이해하는데 도움이 될만한 지적인 능력도 없었다. 경제 학자들과 마찬가지로 모델을 사용해 거대한 시스템을 만든 엔지니어들은 세상을 ‘전체’로만 볼 뿐, 그속에 있는 특정한 것들에 대해서는 관심을 기울이지 않는다. 기술 사회의 위험 중 하나는 기술을 개발한 사람들이 데이터 모델 전체에만 집착할 뿐, 데이터 모델에 기반을 둔 인간의 특성을 보지 않는다. 비프로그램 분야에서 프로그래머를 채용한다면 그들의 폭넓은 경험과 시각을 얻을 수 있다. 회사의 가장 뛰어난 엔지니어들은 모두 철학이나 정치학 같은 인문학을 공부했다. 소프트웨어 회사는 폭넓게 공부하고, 프로그램은 독학으로 공부했거나 혹은 두번째 전공으로 배운 사람을 채용해야한다는 주장도 있다. 인문학이 매우 중요한 이유는 모호하면서도 복잡도가 매우 높은 인간의 행동을 이해하는데 여전히 도움이 되기 때문이다. 인문학을 통해 사회와 인간의 정신에 대한 미래상을 정의하는 데 큰 도움을 얻을 수 있으며 미래상을 정의하는 일은 프로그래밍, 배관, 도시 계획 등의 수단을 가지고 여러문제를 다루기전에 선행되어야하는 중요한 일이다.
동기
동기와 동기를 이루려는 굳은 의지만 있다면 누구라도 회사에 들어갈 수 있을만큼 충분한 프로그래밍 실력을 갖출 수 있다.
비판적 사고
비판적 사고에 익숙한 사람은 단순하거나 순응적으로 생각하는 사람들에 비해 훨씬 동적인 방식으로 새로운 언어를 받아들인다.
공감 & 감성
인스타그램의 성공 이유는 프로그래밍을 잘해서가 아니라 감성적인 삶을 담아서이다. 프로그램에 담아야 할 심리에 대한 정확한 이해가 필요하다. 인스타그램은 정말 간단한 기능만 제공했다. 사용자의 의도를 이해하는 일 역시 소프트웨어 개발자의 몫이다.
논리적 사고
논리와 구조가 다스리는 세상에서 충분한 시간을 보내보자. 기계처럼 생각하는 습관을 가질 수 있다. 컴퓨터가 이상하다고 투덜거리지마라. 틀림없이 프로그램에 문제가 있을테니 말이다.프로그램은 사람을 가리지 않는다.
디테일
사소한 부분이라 생각해 대충 작성한 프로그램 때문에 전체 프로그램에 문제가 생기곤한다.(프로그래밍의 깨진 유리창 법칙)
게으름과 효율
프로그래머가 갖춰야할 주요 덕목 가운데 하나는 게으름이다. 게으름 덕분에 프로그래머는 반복 되는 일을 자동화. 역사적인 비효율성을 최적화를 통해 해결하는 비지니스가 확장성이 있다.
펀치 라인
‘소프트웨어’가 세상을 서서히 먹어치우고 있다. 프로그래머 컴퓨터가 새로운 일을 할 수 있도록 만든다. 현재는 머신러닝 기술까지 적용된 매우 복잡한 알고리즘을 사용하지만 엄밀히 말하면 여전히 규칙의 집합일 뿐이다. 그리고 그 규칙을 정하는 사람들, 즉 프로그래머가 결정권을 가진다. 프로그래머는 오늘날 지구상에서 잘 드러나지 않으면서도 가장 영향력 있는 사람들이다. 우리 인류가 소프트웨어로 이루어진 세상에 살고 있는 만큼, 프로그래머는 세상을 만든 건축가라 할 수 있다. 그래서 프로그래머의 결정에 따라 사람들의 삶도 달라진다. 프로그래머 덕분에 어떤 일이 쉬워지면, 사람들은 그 일을 많이 하게되고 반대로 어려워지면 그 일을 잘 하지 않게 된다.
오늘 날에는 소프트웨어를 만드는 일이 점점 사회성을 요구한다. 즉, 팀워크가 중요하며, 직접 프로그래밍 하는 시간보다 어떻게 프로그래밍 할지 동료들과 회의하는 시간이 더 길 수도 있다.
프로그래밍 한다는 것은 지구상에서 가장 까다로운 문법학자와 이야기하는 것과 비슷하다. 하지만 프로그래머에게 혼자서 차분히 프로그래밍하거나 논리적으로 생각할 수 있는 능력보다 더 중요한 능력은, 끊임없는 실패를 견딜 수 있는 능력이다. 프로그래머는 하루 일과 중 가장 중요한 일이 끊임없이 실패하고 좌절하는 일인 사람이다. 프로그래밍을 처음 배운 사람이 처음부터 올바르게 작동하는 프로그램을 완성하기란 사실상 불가능하다.하루의 일과처럼 된 고통 혹은 성가심을 견딜 수 있는 사람은 프로그래머로 성공한다.
컴퓨터는 사용자를 위해 반복적이고 지루한 일을 대신한다. 따라서 규모를 확장하는데 적합하다. 프로그래머가 한가지 문제를 해결했다면, 프로그래머 자신만이 아니라 모두를 위해 그 문제를 해결한 셈이다. 규모가 줄 수 있는 기쁨이 있다. 효율 또한 중요하다. 효율을 높이기 위해 자동화를 해야한다면 프로그래머는 기꺼이 앞장서 수고를 감수한다. 하지만 최적화에 대한 광적인 집착이 생기면 연속성을 중요하게 생각하는 사람이나 정부 혹은 커뮤니티가 피해를 볼 수 있다. 프로그래밍을 통해 ‘효율’과 ‘규모’를 좀 더 손쉽게 달성할 수 있는 만큼 ‘효율’과 ‘규모’ 필수 불가결하다. 이 두가지 특징 덕분에 손쉽게 사업을 만들어내거나, 일부이기는 해도 빈번히 자유의지론 사상에 빠져든다. 또한 ‘어떤 일이든 이전에 비해 더 효율적으로 실행해, 이익을 얻자’라는 자본주의 핵심 기술과도 잘맞는다. 그러나 다른 한편으로는 프로그래밍에서는 자본주의의 많은 가정들이 영향을 받는다.
프로그래머는 사람들의 정신적인 약점을 이용해 자신들의 앱을 쉬지않고 사용하도록 한다. 수십 명 규모의 백인 엔지니어가 10억명의 사람들이 아침에 일어나 생각하고 행동하는 것을 조종했던 일은 역사상 단 한번도 없었다.
소프트웨어 분야는 독학으로 공부한 프로그래머가 박사학위를 받은 사람들과 함께 일할 수 있을 만큼 접근성 측면에서 다른 분야보다 훨씬 민주적이긴 하지만 프로그래밍 세계에서 가장 중요한 것이 능력이라는 것은 착각이다.
소프트웨어는 규모가 확장되는 순간 시스템이라기 보단 일종의 생명체가 된다.
속해 있는 사회를 바꾸고 싶다면 프로그래밍을 해라! 프로그래머는 일반 사람은 꿈도 꾸지 못할 강력한 힘을 휘두를 수 있는 슈퍼히어로들이다.
프로그래머는 논리적이고 쳬게적으로 생각하는데 익숙하다.(철학과 학생들이 뛰어난 프로그래머가 되는 경우가 있다.) 하지만 가장 핵심적인 특징을 하나 고른다면, 잔인할 만큼 가차 없고 견디기 힘든 실패를 오히려 한없이 재미있어 하는 능력이라고 할 수 있다. 또한 아주 작은 성곡에도 큰 기쁨을 느낄 수 있는 사람들이 적합하다.
개발자가 실제로 프로그래밍 하는 시간이 매우 적다. 작업 시간 대부분은 버그를 찾아 해결하는데 사용한다. 프로그래밍은 프로그램을 작성하는 일이라기보단 오히려 프로그램을 고치는 일이다. (새로운 프로그램을 읽고 이해하는데 필요한 시간이 프로그램을 작성할 때 걸리는 시간보다 10배 정도 많다는 분석 결과가 있다.)
처음부터 올바르게 작동하는 프로그램은 없다. 모든 프로그램에는 문제가 있다. 문제 해결 과정의 고통을 견딜 수 있는 사람들이 스스로 선택한 직업이 프로그래머다. 약간 미쳐야 하는 일일 수도 있다. 버그를 해결해야 할 때, 프로그래머는 철저히 혼자다. 개발자가 작성한 코드에 버그가 있다면, 컴퓨터는 버그가 있는 프로그램을 정확히 있는 그대로 실행한다. 개발자의 자유방임주의적인 혹은 능력주의적인 태도는 컴퓨터에서 비롯되었다.
애자일 개발 방식 : 소프트웨어 개발 팀이 재빨리 개발 방향을 바꿀 수 있으며, 예상 못했던 고객의 요구사항을 반영하기 위해서라면 소프트웨어를 수정할 수 있다는 마음을 가져야한다.
전문가가 넘쳐나는 요즘 같은 시절, 자신의 가치는 자신의 능력을 얼마나 많은 사람들이 알게 하느냐에 달려있다.
인간은 지속적으로 작은 승리를 거두며 꾸준히 가시적인 성과를 경험 할 때 행복해한다. 자신의 성과에 대해 애매모호한 느낌만 가진다면 매우 힘들어하며 담당 업무를 싫어하게 되는 반면, 작게나마 끊임없이 구체적인 성공을 경험하면 담당 업무를 매우 좋아하게 된다. 프로그래밍은 지속적인 성취감을 분명하게 느낄 수 있게 해준다. 다른 활동에서는 거의 경험해보지 못한 일이다. 글쓰기에서는 거의 경험해보지 못한 일이었다. 글을 쓸때는 배를 타고 노를 저으며 안개 낀 호수를 건너는 느낌이었다. 시간이 지나면 결국 목적지에 다다를 것이라 생각하지만 배를 타고 가는 동안 방향이 맞는지 몰라서 조마조마하다.
백엔드 개발자 : 세상과 좀 더 동떨어져 사는 컴퓨터 전문가. 백엔드는 프론트엔드에 비해 변화 속도가 느린 편. 안정성, 데이터 이동 속도 등을 신경써야한다.
프론트엔드 개발자 : 혼자 독학해 프로그그래머가 되었던 사람도 있고, 컴퓨터가 아닌 문화라는 문을 통해 프로그래머가 된 사람들도 있다. 프론트엔드 개발자들은 컴퓨터를 자기 마음대로 다룰 수 있다는 사실이 좋아 프로그래밍을 시작한 것이 아니라, 다른 사람들이 보기도 좋고 사용하기도 쉬운 무언가를 만들고 싶어서 프로그래밍을 시작하는 경우가 많다. 프론트엔드 분야는 급격한 변화가 언제라도 일어날 수 있기 때문에 작업 속도와 더불어 새로운 기술을 끊임없이 배우는 일도 중요했다. 프론트 엔드 개발자는 사용자의 심리학적인 관심(사용자의 시선, 마우스 움직임 등)을 고려해야한다. 시각 예술가와 심리학적으로 비슷한 부분이 많다. 양쪽 모두 정확성이 중요했고, 지나칠 만큼 세부적인 것까지 신경써야 한다.
프로그래머는 밤하늘 높은 곳에서 반짝이는 도시 전체를 내려다 보듯 프로그램 전체를 볼 수 있어야한다. 프로그램 전체를 머릿속에 넣고 프로그램 일부를 수정했을때 어떤 일이 생기는지 이해할 수 있게 되면 문제를 해결 할 수 있다. 머릿속에 전체 프로그램이 들어있다면 프로그래밍은 매우 즐거운 일이된다. 몰입. 일 자체가 좋아 완전히 몰두한 상태다. ‘몰입’ 상태에서는 자기를 잊어버린다. 시간은 혼자 흘러가며 모든 행동, 움직임, 생각은 마치 쟂를 연주하듯 끊이지 않고 자연스럽게 이어진다. 프로그래머는 온전히 일에 빠져 자신의 능력을 최고 수준까지 끌어올리기 위해 몰입 상태를 위한 필사적인 노력을 한다. 프로그래밍 작업 중인 프로그래머에게 자신 이외의 사람은 단지 주의를 산만하게 만드는 방해물일 뿐이다.
수 많은 소프트웨어 회사들은 젊고 똑똑한 엔지니어를 뽑아 마치 기계처럼 일을 시키고, 분명 몸에 해로울 만큼 과한 작업 속도를 강요해 그들을 망가 뜨린다.
컴퓨터를 사용해 반복적인 작업을 없애는 것. 거의 대부분의 프로그래머는 공통적으로 무언가 비효율적인 것을 찾아내 그것을 효율적으로 개선하는데서 커다란 기쁨을 느낀다.
컴퓨터가 만능인양 행동하는 사람들은 자신도 모르게 성격이 변할 수 있다. 컴퓨터가 사람처럼 발전할 위험성 보다 사람이 컴퓨터처럼 기계화 될 위험이 더크다.
코드는 간결 하면 간결할 수록 좋다. 반복하지말라! 유능한 개발자면 코드를 간결하게 만들고, 중복된 부분은 없애며, 불필요한 기능은 날려버릴 수 있어야한다.
소셜미디어 알림서비스는 가짜 행복을 담는다. 거래처럼 주고 받는 좋아요. 감성 잡일. 자제력 없이는 진정한 자유도 불가능하다! 집중을 방해하는 소셜 미디어 서비스에서 자신을 분리시킬 필요가 있다.
프로그래밍 분야는 소수의 스타 프로그래머들이 활약하는 분야이다. 프로그래밍은 통찰력이 필요한 일로 농사보다는 시를 쓰는 일에 가깝다. 다시 말해 프로그래밍 과제의 해결책은 많은 사람들의 땀방울에서 나오기보다, 통찰력과 영감을 갖춘 한 사람의 순간적인 깨달음에서 나오기 쉽다. 결론적으로 프로그래밍은 단순한 노동과는 정반대다. 하지만 10x 프로그래머들의 소질 혹은 재능이 완전히 선천적인 것만은 아니라고 생각했다. 프로그래밍에 1만 시간 이상의 노력을 쏟아 넣었고, 온갖 에러를 경험했으며, 뒤죽박죽 꼬인 문제를 해결하기 위해 밤늦도록 프로그래밍 기술을 갈고 닦았다. 연습을 통해 능력을 키운 것이다. 타고난 재능을 뛰어넘는 실력을 갖추는 것이 가능하다. 물론 열정,집중력,기술에 대한 애정이 필요하다.
독학으로 공부한 프로그래머를 학력과 상관없이 능력만으로 인정하는 문화는 또 다른 장점이다. 프로그래밍은 공평하고 목적 지향적이다.
다른 사람이 작성한 프로그램을 살펴보고 어떻게 만들었는지 분석하면서 많은 것을 배울 수도 있다.
프로그래머는 실력이 좋아지면 좋아질수록 전체 대형 프로젝트의 전체 구조를 시각화하고 만드는 계획을 세운 뒤, 적절한 크기로 일을 나누어 팀원들에게 나누어주고, 그들이 잘할 수 있도록 만드는데 뛰어난 실력을 발휘한다. 프로그래머가 이런 일들을 잘할수록 직접 프로그래밍 할 부분이 줄어든다. 정말로 뛰어난 프로그래머라면, 결국 다른 사람이 프로그램을 잘 할 수 있도록 계획을 세우고 도와주는 관리자가 된다.
바둑의 경우의 수는 우주에 있는 모든 원자 수를 합친 것보다 많다. 딥 러닝을 활용한 알파고가 바둑을 정복했다. 딥러닝은 매우 복잡하고 난해해서 제작자가 스스로도 작동원리나 방법을 설명할 수 없다. 딥러닝은 일반 프로그래머도 손 쉽게 해볼 수 있을 만큼 프로그래밍 난이도도 점점 낮아지고 있다. 텐서플로(TensorFlow) : 무료 딥러닝 소프트웨어 프로그래머들은 오랜 세월 반복적인 ‘행동’을 효율적으로 하기 위해 컴퓨터 프로그래밍을 해왔지만, 이제는 딥러닝을 통해 판단과 같은 반복적인 ‘생각’도 컴퓨터 프로그래밍으로 자동화하려한다. 하지만 뚜렷하고 정확하게 정의된 규칙에 따라 작동하는 일에는 컴퓨터가 매우 적합하지만, 사람의 생각하는 방식은 규칙화 하기에 지나치게 복잡하다.
신경망 기술을 사용해 누릴 수 있는 가장 큰 장점 중 하나는 무수히 많은 ‘if-then’ 구문을 사용하는 기존 프로그래밍 방법을 더 이상 사용하지 않앋 된다는 것이다. 대신 수학기술이 패턴매칭 능력을 결정한다. 신경망을 만드는 일은 프로그래밍한대로 정확히 작동하는 기존 프로그래밍과는 다르다. 기존 프로그래밍은 선형성을 갖는다. 반면 신경망 기술은 농부와 농사의 관계와 비슷하다. 전문가가 되기 위해 수많은 시행착오를 겪으며 힘들게 경험을 쌓아야하는 분야이다. 지혜와 직감을 축적해야한다. 논리가 아닌 실험적 접근 탓에 전통적인 프로그래밍 방법에 익숙한 일반 프로그래머들은 신경망 프로그래밍에 대해 불안해 한다. 일반 프로그래머들은 선형적이고 예측가능한 프로그램을 선호한다. 현재 프로그래머라면 결정론적으로, 생각할 수 있는, 즉 입력과 출력을 뚜렷하게 연결 지을 수 있는 사람이어야했고 버그 하나 없이 잘 작동하도록 만들어야한다. 강박장애에 빠지지 않으면 절대 좋은 프로그래머가 될 수 없었다. 그러나 머신 러닝은 정반대다. 머신 러닝은 불확실성, 초자연적인 기이함 등을 다룰 수 있어야한디. 결과를 알 수 없다. 성공 할 수도 실패 할 수도있다. 데이터 과학 과제는 시작하는 시점에 과제의 성공 여부를 전혀 예측 할 수 없는 반면, 소프트웨어 공학과제는 싲가하는 시점에 과제의 성공여부를 알 수 있다. 일반적인 프로그래밍은 수학인 거의 필요없는 반면, 제대로 된 딥러닝 전문가는 선형대수와 통계에 능숙해야한다. 물론 일반 프로그래머들도 텐서플로를 다운 받아 신경망 모델을 학습시킬수있지만 딥러닝 기술을 근본적으로 발전시킬 수 없다. 머신 러닝 프로그래머들은 세상에서 학습하며, 학습한 지식을 토대로 의사결정을 할 수 있는 기계들을 만들고 있다. 이는 인공지는 시스템들이 단순히 사실만 배우는 것이 아님을 의미한다. 즉, 잘못된 학습의 결과로 심한 편견을 배울 수도 있다. 학습 데이터가 나쁘면 추론 결과도 나쁜 것이 딥러닝 기술의 특성이다.
인공지능 연구는 점점 연금술 처럼 변하고 있다.인공지는 시스템을 설계하는 일에는 도덕적인 선택이 따라온다. 중요한 것은 성과와 책임감이다. 책임감을 가진다는 의미는 중요하고 위험성이 높은 일에는 당분간 딥러닝 기술 사용을 자제하자는 뜻이다. 딥러닝 인공지능 기술을 작동시키는 일에 집중하기 보다 딥러닝 인공지능 기술이 어떻게 작동하는지 설명하는 일에 집중해야 한다.딥러닝은 분명 패턴 인식을 굉장히 잘한다. 그러나 생각하는 방식은 단순히 패턴 매칭이 아니며 그렇게 보이지도 않는다.
기술 기업들이 만든 프로그램은 프로그램 제작자가 미래를 예측 하기 위해 노력했던 여러 방식들을 포함해 사회가 작동하는 방식을 거침없이 변화시킨다. 앞서 했던 이야기들은 기술 기업들이 시민의 삶에 던지는 막대한 도전 혹은 변화 방향 가운데 일부일 뿐이었다. 소프트웨어가 이 세상을 먹어치웠고 이제는 소화시키고 있다.
규모가 증가하면서 무엇보다 알고리즘이 중요해졌다. 규모를 고려하기 시작하면 사람의 판단력은 더 이상 의미가 없다. 유튜브의 동영상 추천 알고리즘은 사용자 선호도를 지나치게 과장해 사용자들을 주제와 상관없이 극단적인 영상으로 내몰고 있다.
모두 소수의 민간 기업들이 관리하는 인터넷을 무턱대고 받아들이기 전에 주의 깊게 생각해야한다. 권력을 가진 사람들은 반드시 악용하려한다.
근본부터 구조적으로 바꿔야만 거대 기술 기업을 변화 시킬 수 있다. 주요 기술 기업들은 언제나 같은 종류의 권력을 누렸고 같은 문제를 일으켰다. 문제를 일으키는 소프트웨어를 바꿀 수 있는 유일한 방법은 그것을 없애는 것이다.
개발자의 다양화(인종, 성별 등) 및 VC들의 우선순위 변경: VC들은 사람들을 연결하는 것 이상의 것을 요구해야한다. 즉 사람들이 서로의 경험과 가치 차이를 뛰어넘을 수 있도록 도와주는 도구를 만들 차례다. 또한 규모의 덫을 우회해야한다. 규모에 집착하면 윤리적 위험성을 무시하며 성장도 확실하지 않다. 광고를 포기해야한다. 회사의 주 수입원이 광고라면 회사는 사용자의 이익에 반하여 일해야한다. 광고 수입에 의존하지 않는다면 사용자의 요구를 만족시키는 일에 전념할 수 있다. 유료 고객을 대상으로 사업하면 고객과 아주 멋진 관계를 유지할 수 있다. 프로그래머들은 고객의 실제 문제를 해결하기 위해 일할 수 있다. 이는 오랜 세월 지속 가능한 회사를 만들기 위한 방법 중 하나이다. + 기술 산업 분야의 변화를 만들어 낼 힘은 외부가 아니라 투자자와 경영자가 감히 무시할 수 없는 능력을 갖춘 내부(개발자 등)에서 나온다.
부트캠프 : 절대적으로 많은 양의 벼락치기 학습. 다른 분야의 공부가 개발에도 도움이된다. 부트캠프만으로 엘리트 프로그래머가 될 수 는 없다. 부트캠프 졸업생 대부분은 구글에서 소프트웨어 개발 업무를 담당하기에는 부족하다. 부트캠프 학생들은 프로그래머들이 일상적인 업무에서 수행하는 공통적인 업무 중 일부를 집중적으로 배운다. 그런데 대학을 졸업하지 않고도, 이런 빠르고 간단한 방법으로 제대로 된 프로그래머가 될 수 있을까? 도대체 몇명이나 이런 방식으로 프로그래머가 되었을까? 부트캠프를 졸업한 학생들 가운데 약 2/3이 프로그래밍 분야에서 일을 찾았다. 모든 사람이 성공하는 것은 아니다. 고용주들은 이미 수많은 프로그램을 개발해 깃허브를 자신의 프로그램 과제로 꽉 채운 그런 프로그래머를 찾고 있었다. 2~3개의 데모 소프트웨어 밖에 없었던 이력은 고용주들의 기대 수준에 턱없이 부족하다. 본질적으로 회사는 직업 교육을 받아 적당한 실력을 갖춘 사람이 아니라 프로그래밍 자체를 좋아해 열정적으로 일할 사람을 좋아한다. 돈을 벌겠다는 생각으로 부트캠프에 다니지마라.(미국 영리 추구 대학은 4년 동안 대학에 다닐 수 없는 학생들을 입학시켜 학비 등으로 큰 빚을 지게 만들고는 졸업과 취업에 아무런 도움도 주지않는다.)
특징 중 한가지는 독학이 가능하다는 것이다. 대학은 고사하고 부트캠프조차 다녀본적 없는 사람이 작성한 소프트웨어를 사용하는 일은 흔하다. 사람들은 재미 삼아 간단한 프로그램을 만들어보면서 프로그래밍을 배운다. 프로그래밍 분야는 아마추어도 전문가가 사용하는 도구를 손쉽게 구해 사용할 수 있는 특이한 기술 분야다. 소프트웨어는 기본적인 노트북만 있으면 충분하다. 69% 독학 경험, 56% 컴퓨터 과학 전공 아님, 25%는 완전히 독학으로만 프로그래머가 되었다. 하지만 독학은 공부 범위의 확장성이 높지 않을 수 있다.