학부 시절
스타트업을 시작하고 싶으신가요? Y Combinator에서 자금을 지원받으세요.
2005년 3월
(이 에세이의 일부는 제게 질문을 보낸 학생들에게 답장하면서 시작되었습니다.)
최근 컴퓨터 과학 학부생들로부터 대학에서 무엇을 해야 할지 묻는 이메일을 여러 통 받았습니다. 제가 대학에서 철학을 전공했기 때문에 최고의 조언자가 아닐 수도 있습니다. 하지만 저는 컴퓨터 과학 수업을 너무 많이 들어서 대부분의 컴퓨터 과학 전공자들이 저를 컴퓨터 과학 전공자로 착각했습니다. 적어도 저는 분명 해커였습니다.
해킹
훌륭한 해커가 되기 위해 대학에서 무엇을 해야 할까요? 두 가지 주요한 일을 할 수 있습니다: 프로그래밍을 매우 잘하게 되는 것, 그리고 특정하고 멋진 문제들에 대해 많이 배우는 것입니다. 이 두 가지는 서로를 이끌어내기 때문에 결국 같은 것이 됩니다.
프로그래밍을 잘하는 방법은 (a) 많이 (b) 어려운 문제에 대해 작업하는 것입니다. 그리고 어려운 문제에 대해 스스로 작업하게 만드는 방법은 매우 몰입할 수 있는 프로젝트에 참여하는 것입니다.
아마도 이 프로젝트는 수업 과제가 아닐 것입니다. 제 친구 로버트는 학부생 시절 네트워크 소프트웨어를 작성하면서 많은 것을 배웠습니다. 그의 프로젝트 중 하나는 하버드를 아르파넷에 연결하는 것이었습니다. 하버드는 원래 노드 중 하나였지만, 1984년에는 연결이 끊어졌습니다. [1] 이 작업은 수업을 위한 것이 아니었을 뿐만 아니라, 그는 이 일에 모든 시간을 보내고 학업을 소홀히 하여 1년 동안 학교에서 쫓겨났습니다. [2] 결국에는 다 잘 풀렸고, 지금 그는 MIT의 교수입니다. 하지만 그 정도 극단까지 가지 않는다면 아마 더 행복할 것입니다. 당시 그는 많은 걱정을 했습니다.
프로그래밍을 잘하는 또 다른 방법은 프로그래밍을 잘하는 다른 사람들을 찾아 그들이 아는 것을 배우는 것입니다. 프로그래머들은 자신이 하는 작업 유형과 사용하는 도구에 따라 부족으로 나뉘는 경향이 있으며, 일부 부족은 다른 부족보다 더 똑똑합니다. 주변을 둘러보고 똑똑한 사람들이 무엇을 하는지 살펴보세요. 보통 그럴 만한 이유가 있습니다.
주변에서 가장 똑똑한 사람들 중 일부는 교수님들입니다. 따라서 흥미로운 일을 찾는 한 가지 방법은 연구 조교로 자원하는 것입니다. 교수님들은 특히 자신들을 위해 지루한 시스템 관리 유형의 문제를 해결해 줄 수 있는 사람들에게 관심이 많으므로, 그것이 발을 들여놓을 수 있는 방법입니다. 그들이 두려워하는 것은 무책임한 사람들과 이력서 부풀리기 선수들입니다. 조교가 순 작업량을 증가시키는 결과를 초래하는 경우가 너무나 흔합니다. 따라서 당신이 순 작업량을 감소시킬 것이라는 점을 분명히 해야 합니다.
그들이 거절한다고 해서 낙담하지 마세요. 거절은 거의 항상 거절당하는 사람이 상상하는 것보다 덜 개인적입니다. 그냥 다음으로 넘어가세요. (이것은 데이트에도 적용됩니다.)
조심하세요. 대부분의 교수님들은 똑똑하지만, 모든 교수님들이 흥미로운 연구를 하는 것은 아닙니다. 교수님들은 경력을 발전시키기 위해 새로운 연구 결과를 발표해야 하지만, 더 흥미로운 연구 분야에서는 경쟁이 더 치열합니다. 그래서 덜 야심찬 교수님들이 하는 일은 아무도 신경 쓰지 않기 때문에 결론이 새로운 일련의 논문을 내놓는 것입니다. 이런 것들은 피하는 것이 좋습니다.
저는 연구 조교로 일해본 적이 없어서 그 경로를 추천하는 것이 약간 부정직하게 느껴집니다. 저는 저만의 것을 작성하면서, 특히 위노그라드의 SHRDLU를 역설계하려고 시도하면서 프로그래밍을 배웠습니다. 저는 새 아기를 가진 엄마처럼 그 프로그램에 집착했습니다.
혼자 작업하는 것의 단점이 무엇이든, 장점은 프로젝트가 온전히 당신의 것이라는 점입니다. 타협하거나 누구의 허락도 구할 필요가 없으며, 새로운 아이디어가 떠오르면 그냥 앉아서 구현을 시작할 수 있습니다.
자신만의 프로젝트에서는 (교수님들처럼) 새로움이나 (기업들처럼) 수익성에 대해 걱정할 필요가 없습니다. 중요한 것은 프로젝트가 기술적으로 얼마나 어려운지이며, 이는 애플리케이션의 본질과는 상관이 없습니다. 데이터베이스와 같은