한빛출판네트워크

IT/모바일

창의적인 프로그래머가 되는 법: 입력이 없으면 결과물도 없다

한빛미디어

|

2023-12-11

by 바우테르 흐루네벨트

독일의 한 학자가 무거운 약국 캐비닛의 작은 서랍에서 서류를 뒤적거립니다. 손에 작은 종이를 들고 특정 서랍의 내용물을 빠르게 훑어보던 학자는 “아, 여기 있네!”라고 중얼거립니다. 그가 찾고 있던 서랍이라는 것을 알 수 있습니다. 종이쪽지를 캐비닛 속에 던져 놓고 다시 사무실 의자에 앉아서 채점이 시급한 서류 더미로 시선을 돌립니다.

 

니콜라스 루만_크리에이티브 프로그래머.jpg

그림. 홈 오피스에서 노트를 검토하는 니콜라스 루만 

(출처: © Michael Wiegert-Wegener / 빌레펠트 대학 기록 보관소)

 

이 사람은 20세기 가장 생산적이고 저명한 사회과학자 중 한 명인 니클라스 루만입니다. 그는 학계에서 50권의 책과 600편이 넘는 논문을 발표했습니다. 어떻게 그런 업적을 이룰 수 있었느냐는 질문에 그는 자신의 생산성은 노트와의 ‘대화’에서 비롯되었다고 겸손하게 답했습니다. 커뮤니케이션, 사회, 진화 이론을 통합한 그의 유명한 시스템 이론은 제텔카스텐Zettelkasten(슬립 박스)과의 대화에서 나온 결과물입니다.

 

루만은 독창적인 지식 저장 및 생성 시스템 덕분에 서로 관련이 없어 보이는 영역을 연결하여 새로운 통찰을 끌어낼 수 있었습니다. 이러한 새로운 통찰은 다시 제텔카스텐에 저장되었고 그의 외부 지식은 꾸준히 증가했습니다. 지적 작업을 정리하기 위해 상호 연결된 인덱스카드 시스템을 최초로 사용한 사람이 루만은 아니지만, 그의 제켈카스텐 저장소는 더 많은 통찰력을 제공했고, 오늘날의 수많은 노트 필기와 디지털 노트 필기 앱에 영감을 불어넣었습니다.

 

그리고 또 한 세기가 지나서 2010년, 러시아의 소프트웨어 엔지니어인 안드레이 브레슬라프와 젯브레인 R&D 팀은 대규모 백엔드 코드베이스의 개발 및 프로덕션 문제를 논의하고 있었습니다. 화이트보드 위에 스케치한 내용은 나중에 코틀린Kotlin이라는 새로운 프로그래밍 언어의 토대가 되었습니다. 

 

코틀린 웹사이트에 의하면 브레슬라프와 그가 이끄는 언어 디자인 팀은 ‘실용적이고, 간결하며, 안전하고, 상호 운용이 가능하도록’ 코틀린을 설계했다고 합니다. 이 말인즉슨, 가지고 놀 만한 장난감 같은 것을 만들려는 의도가 전혀 없었다는 의미입니다. 개발자들은 반짝반짝 빛나는 새로운 무언가를 가지고 놀기 좋아하기 마련이니까요.

 

실용, 간결, 안전, 상호 운용이라는 네 가지 초석을 바탕으로 팀은 기존 프로그래밍 언어를 철저히 조사하고 효과가 있는 아이디어를 차용했습니다. 더 중요한 것은, 좋아 보이지만 별로 사용하지 않는 겉치레 기능은 빼버리는 것이었습니다. 브레슬라프가 GeekOUT 2018의 ‘Languages Kotlin learned from’이라는 제목의 강연에서 말했듯이, 기존 아이디어의 사용을 주저하는 것은 비생산적인 일입니다. 

 

오히려 자바(클래스, 오토박싱, 런타임 안전 보장 등), 스칼라Scala (기본 생성자, val 키워드 등), C#(get/set 속성 및 확장 관련 아이디어, 내부 가시성, 쉬운 문자열 보간 등), 그루비Groovy (괄호 없이 람다 전달, it 속기 등)로부터 실제로 필요하고 효과가 있는 기능만 구현했습니다. ‘그루비의 많은 저자분께 감사드리며, 여러분이 만들어 놓은 기능을 빌려다 쓸 수 있어서 즐거웠습니다’라는 말로 브레슬라프는 자신의 강연을 마쳤습니다.

 

그들의 디자인 철학은 분명한 성과를 거두었습니다. 코틀린은 이제 자바 가상 머신에서 사용되는 언어 중 자바 다음으로 인기 있는 언어가 되었으며, 연례 스택 오버플로 인사이트에 의하면 전반적으로 인기가 꾸준히 늘어나 루비Ruby를 능가하고 고Go의 뒤를 바짝 쫓고 있습니다.

 

 

입력이 없으면 창의적인 결과물도 없다

 

인덱스 카드를 담고 있는 니클라스 루만의 제텔카스텐 약국 캐비닛, 코틀린 프로그래밍 언어의 탄생, 함께 살펴본 사례들은 모두 창의성이 창의성을 낳는다는 것을 보여줍니다. 모든 의도는 이전의 의도를 기반으로 합니다. 루만은 메모를 통해 자칫 잊어버릴 수 있는 정보를 연결하여 새로운 것을 만들어 냈습니다. 안드레이 브레슬라프는 먼저 다른 프로그래밍 언어로 눈을 돌려 효과가 있는 기능들을 조사함으로써, 독창적이지만 조금 지나면 쓰이지 않는 언어를 만드는 일을 피할 수 있었습니다.

 

 

니콜라스 루만의 노트 필기 시스템 일부_크리에이티브 프로그래머.jpg

그림. 니콜라스 루만의 노트 필기 시스템 일부

손으로 쓴 인덱스카드로 가득 찬 큰 파일 캐비닛 (출처: 빌레펠트 대학교)

 

모든 창의적인 작업은 입력에서 시작됩니다. 입력이 없으면 출력도 없습니다. 소프트웨어 엔지니어링에서 창의성의 역할을 더 잘 이해하기 위해 많은 개발자에게 창의성을 발하는데 필요한 요건이 무엇인지 물어보았습니다. 개발자들은 일관되게 기술 지식을 첫 번째로 꼽았습니다.

 

악기나 기존의 연주 스타일 또는 다양한 보컬 테크닉에 대한 지식이 없는 음악가에게 진정으로 창의적인 음반을 기대할 수는 없을 것입니다. 화가도 마찬가지입니다. 그림 기법에 대한 폭 넓은 지식 없이는 창의적인 작품을 만들 수 없습니다. 현대 미술 작품이 구현하는 단순함 때문에 우리는 어떤 그림을 보고 창의적이라고 잘못 생각할 수 있지만, 일반적으로 색상과 구성을 본질에 맞게 해체하려면 기술적 지식과 수년간의 경험이 필요합니다. 물론 예외는 항상 존재합니다.

 

프로그래머도 마찬가지입니다. 자바 가상 머신과 그 생태계에 대한 폭넓은 지식 없이는 자바 코드로 창의력을 발휘할 수 없습니다. 브레슬라프는 GeekOUT 강연에서 스위프트Swift의 잠재적 영향력을 간과했음을 인정했습니다. 당시에는 매우 새로운 기술이었기 때문에 팀원 누구도 이에 대해 알지 못했습니다. 한편 그루비의 영향력이 없었다면 코틀린에 with와 it 키워드가 존재하지 않았을 것입니다.

 

하지만 폭넓은 지식이란 정확히 무엇일까요? 새로운 지식을 얻고, 유지하고, 창출하는 가장 좋은 방법은 무엇일까요? 그리고 창의성에 관해 논의할 때 정말 기술적인 지식만을 말하는 것일까요? 인지 심리학의 놀라운 세계에서 이 질문들에 대한 답을 찾을 수 있습니다.

 

미래 지향적인 기술 기업들은 지속적인 학습을 중요하게 생각합니다. 

 

그래서 학습의 날, 해커톤, 수많은 책과 강좌를 제공합니다. 심지어는 구글에서 영감을 얻은 ‘20%의 시간’과 같은 혜택도 제공하는데 이를 통해 일주일에 하루는 자신만의 개인 프로젝트를 수행할 수 있습니다. 지메일과 같은 위대한 제품으로 성장할 수 있기를 기대하면서 말이지요 (구글은 점차 창의적 자유 시간을 축소하고 있습니다). 지속적인 학습이든, 평생 학습이든, 자기 계발이든 전제는 동일합니다. 우리는 배우기 위해 여기에 있습니다.

 

인터뷰 참여자 중 한 명이 다음과 같이 말했는데 이 장의 주제를 잘 표현해 줍니다.

결국 창의성은 다양한 입력이 결합된 결과물이며, 저는 보통 이러한 입력들을 적극적으로 찾아보는 편입니다. [...] 입력들을 구조화해 머릿속에 무언가를 형성하거나, 고려해야 할 피드백을 요청할 때 그렇게 하는 경우가 많습니다.

 

하지만 여기서 입력이란 어디에서 오는 것일까요? 어떤 개발자는 자신이 선호하는 기술 뉴스 사이트나 좋아하는 엔지니어 블로그로부터 정보를 얻는다고 답할지도 모르겠습니다. 이런 방법은 모두 유효하지만 매우 편협한 정보원일 수 있습니다.

 

지식 수집 문제는 90년대보다 오늘날 훨씬 더 심각합니다. 인터넷으로 통하는 유일한 방법이었던 넷스케이프 네비게이터Netscape Navigator에서 간단한 북마크를 사용하던 시대는 이미 오래 전에 지나갔습니다. 그렇다면 관심 있는 정보를 어떻게 추적해야 할까요?

 


 

이 글은 『크리에이티브 프로그래머』에서 일부를 발췌하여 정리하였습니다. 

 

창의적인 프로그래머로 가기 위해선 ‘기술 지식’을 수집하고, 관리하고, 행동으로 옮기는 것이 필요합니다. 우리는 이제 막 지식 수집의 필요성을 깨달은 상태입니다. 이제 무엇을 해야할까요? 다양한 항목에서 적절한 지식을 수집하고, 그 지식을 나만의 상황에 맞게 해석해 내면화하는 것이 필요합니다. 온전한 내 자산으로 만드는 거죠. 이렇게 모인 지식은 새롭고 실행 가능한 통찰을 창출하기 위해 활용될 예정입니다.

 

프로그래밍은 작곡이나 비즈니스 창업 또는 마케팅 캠페인 기획과 마찬가지로 창의적인 행위입니다. 여러 기술이나 능력이 그렇듯 창의성도 연습을 통해 익히고 개선할 수 있습니다. 창의성을 활용해 더 효과적인 문제 해결, 더 높은 생산성, 더 좋은 소프트웨어로 전환하는 실용적인 방법을 안내하는 『크리에이티브 프로그래머』에서 확인해 보세요.

 

크리에이티브 프로그래머_도서.jpg

크리에이티브 프로그래머

 

댓글 입력