플러닝 Flearning

도널드 커누스의 <컴퓨터 프로그래밍의 예술> 본문

프로그래밍과 진로

도널드 커누스의 <컴퓨터 프로그래밍의 예술>

플러닝 2016.08.19 20:42

도널드 커누스의 <컴퓨터 프로그래밍의 예술>





이 글은 "'The Art of Programming' by Donald Knuth" 포스트를 번역, 의역한 것입니다.


(출처: https://medium.freecodecamp.com/the-art-of-computer-programming-by-donald-knuth-82e275c8764f)













어떤 책들은 책장에 꽂혀 있을 때 빛나 보입니다.


단순히 겉모습 때문이 아니라 표지에 적혀있는 제목과 작가의 이름 때문이기도 하죠.


네 권의 하드커버로 출판된 도널드 커누스의 <컴퓨터 프로그래밍의 예술>도 이러한 책들 중 하나입니다.


마치 "이 책에는 컴퓨터 과학의 전문가가 있으니 물러나세요"라는 메세지를 전달하는 것 같습니다.



개인적으로, 저는 이 책을 위해서 책장 한켠을 비워놓았을 정도로,


저에게는 이 책을 구입하는 것이 마치 하나의 큰 성취로 느껴졌습니다.


빌게이츠는 이 책에 대해서 이렇게 말했습니다.


"만약 자신이 정말 실력이 좋은 프로그래머라고 생각한다면, <컴퓨터 프로그래밍의 예술>을 읽어보세요. 


이 책의 전부를 이해할 수 있는 사람이라면, 제 회사에 이력서를 제출해도 좋습니다"







(valbonne-consulting.com)







이 책은 장편 서사인데요, 작가인 도널드 커누스는


컴퓨터 과학의 핵심, 수학의 기원, 그리고 그 두가지 영역의 교차점에 대한 진정한 전문가입니다.



저는 책 1권의 서문을 서너번 읽어보았고, 전체 시리즈를 완독하면 어떨까 상상해보았습니다.


몇 달동안 인터넷이 단절된 와이오밍 산 꼭대기의 오두막에서


이 책과, 연필, 종이, 그리고 수학책 몇 권만을 갖고 혼자 지낼 것입니다.


오랫동안 그 산에서 하이킹을 하면서 핵심적인 알고리즘에 대해서 깊게 생각해보고 싶습니다.


노트북, 와이파이, 전기 등 방해되는 것은 아무것도 없습니다.


해가 지고 나면 촛불을 밝히고, 조화수(Harmonic Number), 이항 계수, 비선형 데이터 구조에 대한 문제를 풀어볼 것입니다.


이러한 상상을 뒤로하고, 어제 다시 책의 서문을 읽어보면서 


잠시 멈춰서 지금까지의 여정을 되돌아보기로 했습니다.













커누스는 컴퓨터에 대한 애정이 강해서


책 전권이 1950년대에 인기있었던 IBM 650 메인프레임에 관한 내용으로 이루어져있습니다.


IBM 650는 처음으로 대량 생산된 컴퓨터이며, 오늘날의 가치로 몇 만 달러입니다.


이 기계를 통해 커누스가 경험을 쌓을 수 있었습니다.







(en.wikipedia.org)







1950년 대에 컴퓨터는 응용 수학과 관련이 있는데요,


초기 IBM 650 메인프레임은 기본적인 수학 연산과 제어 구조를 가지고 있었고,


이진법이 아닌 십진법으로 만들어졌으며, 디스플레이나 명령행(command line)도 없었습니다.


모든 운영 체제는 오직 사람이 맡았는데요,


제어 콘솔을 통해 책임자가 프로그램을 시작하고 중단하는 일을 담당했습니다.



피보나치 수열을 만들어내는 프로그램을 만들고 싶다고 예를 들어보겠습니다.


FORTRAN은 그 당시에 아직 존재하지 않았고, IBM 650이 나온지 4년 후에나 나왔는데요,


그래서 초기에는 원하는 것을 기계 수준의 작동 코드를 직접 작성한 후에


수동으로 어셈블(hand-assemble)하고 키펀치 기계(key punch machine)를 이용해서 만들 수 있었습니다.







(www.computerhistory.org)







프로그램을 최적화하는 몇 가지 방법이 있습니다.


더 빠른 알고리즘을 디자인하거나, 적합한 데이터구조를 배치하는 것입니다.



또한, 프로그램을 최적화해서 로딩하고 실행할 수 있습니다--기계의 조그마한 부분을 이용하는 것입니다.


현대의 하드드라이브의 기원인 자기 드럼 기억 장치(magnetic drum memory)는 650의 주요한 메모리였는데요,


그 속도가 굉장히 느렸습니다.


그래서 프로그래머들은 12,500 RPM 드럼 장치(drum machine)의 


회전 대기시간(rotational latency)을 최소화하려고 했습니다.


이로 인해 코드와 데이터가 실행될 때 쉽게 CPU에 전달될 수 있습니다.


또한 메인프레임의 CPU 사이클과 드럼 기억 드럼 기억장치(drum memory rotations)를 완벽하게 동기화할 수 있습니다.







컴퓨터 과학은 수학과 기계 공학 사이에서 나왔는데요,


옛날에는 머리가 굉장히 좋은 사람이라면 완벽하게 이해할 수 있었습니다.


도널드 커누스와 그 시대의 프로그래머들은 IBM 650보다 더 똑똑했었고.


각각의 진공관(vacuum tube)과 제어 스위치(control switch)에 대한 모든 것을 알고 있었습니다.


하지만 이제 사람은 더 이상 컴퓨터보다 똑똑할 수는 없습니다.







(www-cs-faculty.stanford.edu)







책 서문의 첫 번째 문단에서 커누스는 "시를 짓거나 그림을 그리는 것과 같이 프로그래밍도 미적 경험이다"라고 말합니다.


이러한 미적 아름다움이 장차 프로그래머가 되려는 사람들을 사로잡는 것입니다.


1950년대 이후 기하급수적으로 그 숫자가 늘어난 것을 보면, 프로그래밍의 아름다움은 여전히 존재한다는 사실에 안심이 됩니다.


우리는 소프트웨어를 만들 때 더 이상 뜨겁고 소음을 내는 계산 기계를 이용하지는 않지만,


프로그래밍의 아름다움은 여전히 곳곳에 스며들어 있습니다.








(www.foxnews.com)







커누스 시대에 코딩하는 것은 설렘과 동시에 위험이 따랐습니다.


조그마한 실수도 큰 영향을 미쳤습니다.


그렇기 때문에 오늘날 개발 된 짧은 피드백 회로(feedback loop)와 


소프트웨어의 유연성(malleability of software)에는 대가가 따릅니다.


소프트웨어 개발이 점점 더 가벼워지면서, 해킹이 더욱 쉬워졌고, 그 외에 많은 문제들을 불러일으키고 있습니다.


그래서 여전히 좋은 소프트웨어를 만드는 것은 많이 생각할 필요가 있습니다.


편리함만 추구한다면, 엄격함을 잃게됩니다.





IBM 650의 제약은 어려웠고 그 시간도 짧았던 반면에,


오늘날의 제약은 조금 더 관대하며 자율적입니다. 


작은 화면의 휴대폰이 나온 것은 앞으로 실속있는 소프트웨어와 인터페이스 디자인의 기술혁신을 예고하는 것 같습니다.


목표 개발 환경의 제약을 극복하는 것이 미래의 혁신을 위한 일이 아닐까 생각해봅니다.

저작자 표시
신고
0 Comments
댓글쓰기 폼