카테고리 보관물: What Is Code

[4] What is code: 2.2 From Hardware to Software

Businessweek-CODE-Cover-final-6.15.15

http://www.bloomberg.com/graphics/2015-paul-ford-what-is-code/

하드웨어라는건 참 교묘한 사업입니다. 컴퓨터를 합치고 제조하고 배송하는 일이 지난 수십년동안 돈을 버는 방법이었었죠. 하지만 수익이 줄어들었어요. 델 (Dell)은 사모펀드 손에 넘어갔고, 게이트웨이(Gateway, 역자 주: 주문형 PC 제조 회사)는 에이서 (Acer)에 인수당했죠. 전 세계를 대상으로 경쟁하던 델과 게이트웨이는 소프트웨어와는 거리가 멀었는데, 보통 마이크로소프트 윈도우가 설치되어있는 PC를 제조했고, 거기에 더해 수익을 높이기 위해 가입이 필요한 여러 가지 서비스들을 제공했었습니다.

이 때문에 1000달러 이상을 지불하며 컴퓨터를 구입했지만, 결제를 종용하는 바이러스 백신 소프트웨어를 어떻게 꺼야하는지 찾아봐야했던 소비자들로부터 저주를 받는데 이르렀죠.

몇 년 전 마이크로소프트의 수장이었던 스티브 발머가 땀에 흠뻑 젖은 하늘색 셔츠를 입고, 경기장을 가득 메운 사람들 앞에서 팔짝팔짝 뛰면서 외친 적이 있었습니다. “개발자들! 개발자들! 개발자들! 개발자들!”

그는 목소리가 쉴 때까지 외쳤죠. “전 이 회사를 사랑합니다!” 물론 그는 그랬어요. 소프트웨어를 판다는 건, 화면을 깨울 수 있다는 건, 무제한으로 복사 가능한 실체 없는 무엇인가를 파는 겁니다. 다른 사람들이 더 저렴한 실체가 없는 무엇인가를 팔거나, 그걸 공짜로 뿌리기 전까지는 높은 수익도 얻을 수 있고요. 리눅스 같은 무료 소프트웨어 기반의 시스템이 서버 시장을 갉아먹다가 끝내는 삼켜버렸고, 구글 앱스처럼 무료 사용이 가능한 웹 기반 어플리케이션들이 데스크탑 소프트웨어를 유의미하게 대체하고 있는 것처럼 이미 벌어지고 있는 일이기도 합니다.

시간이 지나면서 소프트웨어를 둘러싼 기대는 변해왔습니다. 1960년대 IBM은 하드웨어에서 소프트웨어를 분리하며 더 많은 금액을 요구했었고, 1998년 마이크로소프트는 인터넷 익스플로러를 윈도우에 포함시켰다가 소송 당했고, 2007년 아이폰이 처음 나왔을 때 아이폰 용 소프트웨어를 만들 수 있는 길을 열어주길 거부했던 애플은, 앱 스토어를 시작하면서 거대한 상업적인 영역을 확장했고, 곧 전 세계가 즐기는 앵그리 버드 같은 소프트웨어가 등장했죠. 오늘날은 상당수의 하드웨어들이 소프트웨어를 포함한 채 출시되는데요, 예를 들면 PC는 운영체제를 포함해서 나오고, 운영체제에는 이메일 프로그램부터 혼자 하는 게임 같은 수백 개의 보조프로그램이 들어있습니다. 그리고 당신은 더 많은 걸 다운로드 받거나 구입하죠.

일반적인 영어로 코딩하거나, 몇 가지 아이콘 세트를 조작하거나, 규칙들의 목록을 주욱 적어내려가면 되는 등 똑똑한 경영진들이나 보통의 어린 아이도 가능할 만큼 쉬운 소프트웨어 개발을 위해 소프트웨어 만드는 작업을 더 쉽게 하려는 시도 들은 셀 수 없이 있어왔습니다. 계산기를 사용하거나 이메일을 작성하는 것처럼 보통의 사람들이 코딩할 수 있도록 도와주는 여러 가지 노력들이 있었죠. 하지만 아직 그 어느 것도 “개발자들, 개발자들, 개발자들, 개발자들”을 죽이지는 못했어요. (역자 주: 아직도 코딩은 어렵다는 의미)

그러므로 기술들을 살아있게 만드는 기술에 대한 전문적인 강좌들이 생겨났습니다. 시작은 1950년대였지만 1980년대에야 불이 지펴지기 시작했는데, 기계를 조작함으로써 인간의 기본 욕구들을(시간 확인하기, 항공권 예약하기, 편지 보내기, 좀비 죽이기) 충족시키는 방법들을 균형 잡힌 소수의 사람들이 숙련된 솜씨로 만들어냈습니다. 프로그래머들은(coders) “키보드에서 오는 신호 받기” “기억장치의 숫자들” 같은 개념에서 출발해서, 우리가 소프트웨어라고 부르는 무제한으로 복사 가능한 단위들의 디지털 결과물들을 창조해내면서 시장의 욕구를 충족시켜주길 바랬습니다. 이봐요, 당신네들이 해냈다고요. 그들이 만들어낸 시스템은 글로벌 경제 기반구조를 관리하는데 사용됩니다. 프로그래머들이 세상을 돌아가게 하는게 아니라고 한다면, 그들은 세상을 돌아가게 하는 것을 돌아가게 한다고 할 수 있겠네요.

대부분의 프로그래머들이 마이크로소프트 워드처럼 널리 알려진 애플리케이션을 만드는 작업을 하는 건 아닙니다. 소프트웨어는 여기저기 도처에 깔려있습니다. 깨지기 쉬운 물건을 만드는 공방, 계란으로 바위치기 격인 맞춤형 프로젝트, 프로그래머들이 잘 참고 견디는 사람들의 노동력을(심지어 그 사람이 한 뼘 떨어져있더라도) 흡수하고 향상시키는 표준화된 부품을 만드는 산업까지 퍼져있습니다. (It’s gone from a craft of fragile, built-from-scratch custom projects to an industry of standardized parts, where coders absorb and improve upon the labors of their forebears (even if those forebears are one cubicle over). ) TV 채널을 바꾸거나 케이블 TV 셋톱박스가 지금 하고 있는 TV 프로그램을 보여줄 때 소프트웨어가 필요합니다. ATM에서 돈을 인출하는 것도 소프트웨어입니다. 5층으로 데려다주는 엘레베이터 역시도 마찬가지죠. 페이스북은 매일 십억 여명의 사람들에게 소프트웨어를 출시하는데, 그 소프트웨어는 웹 브라우져 안이나 모바일 애플리케이션으로서 동작합니다. 엄마의 사프란 꽃 사진이나 아들이 학교에서 노는 사진들이 페이스북 같아 보이지만, 그건 소프트웨어입니다.

hoarse: 쉰 목소리의

give away: 거져주다

nibble: 갉아먹다

solitaire: 혼자서 하는 게임

do away with: 죽이다, 제거하다

proportionally: 균형잡힌

adept: 숙련된

built-from-scratch: 손톱으로 땅 파는 것처럼 어려운

forebear: 억제하다

[3] What is code: 2.1 How Do You Type an “A”?

Businessweek-CODE-Cover-final-6.15.15

http://www.bloomberg.com/graphics/2015-paul-ford-what-is-code/

키보드의 자판을 두들길 때 어떤 일이 일어나는지 한번 살펴봅시다. 소문자 “a”의 경우를 보죠. 키보드는 당신이 키를 누르길, 손을 떼기를 기다리는 중입니다. 어떤 키가 눌렸는지 지속적으로 확인하죠. 키를 누르면 스캔코드를 보내게 됩니다.

키가 눌리길 기다리는 키보드처럼, 컴퓨터는 키보드로부터 신호가 오기를 기다립니다. 뭔가가 나타나면, 컴퓨터가 그것을 해석하고 내부로 전달합니다. “이게 키보드가 방금 전달한 거야. 이거 가지고 하려던걸 해봐”

간단하죠? 그러면 컴퓨터는 표를 확인해 신호가 문자 “a”를 의미한다는걸 밝혀내고, 화면에 표시합니다. 물론 쉬운 작업만은 아니에요. 컴퓨터는 기계입니다. 화면이 무엇인지, “a”가 무엇인지 알지 못합니다. “a”를 화면에 표시하기 위해, 컴퓨터는 선과 원으로 이뤄진 “a”를 저장한 글자체에서 “a”의 형상을 뽑아냅니다. 선과 원들을 가지고 형체를 만들고, 화면에 표시되는 자그마한 픽셀들에 표시합니다. 결국 글자 하나를 표시하는데 적어도 3개의 표현이 필요한대요, 키보드로부터 받는 신호, 미리 저장되어있던 글자, 그리고 화면에 그려진 선과 원들의 조합 이렇게 3개가 필요합니다. 이걸 어떻게 저장하는지, 혹은 문장 중간에 a를 삽입하면 근처에 있는 글자들이 어떻게 되는지는 아직 고려하지도 않았죠. 2진법 정보로 쪼갰을때, “선과 원”이 어떤 걸 의미하는지도 말이죠. 단순하게 “a”를 표현하는 방법은 놀라울 정도로 많습니다. 모두 아주 잘 작동한다는게 놀라울 따름이죠.

키를 누르는 시점으로 거꾸로 올라가는 작업을 하는 사람들이 바로 프로그래머(coder)입니다. 이런 일을 하려면 “데이터 필드는 최하위비트(LSB: least significant bit)를 먼저 전송한다” 같이 당신이 입 벌리고 물음표 지을만한 개념에 대해 이해하려고 관련 문서나 메뉴얼을 페이지 넘겨가며 보는 특정한 기질을 필요로 하죠. (Coders are people who are willing to work backward to that key press. It takes a certain temperament to page through standards documents, manuals, and documentation and read things like “data fields are transmitted least significant bit first” in the interest of understanding why, when you expected “ü,” you keep getting “�.”)

come down the pike: 나타나다

temperament: 기질

[2] What is code: 2. Let’s Begin

Businessweek-CODE-Cover-final-6.15.15

http://www.bloomberg.com/graphics/2015-paul-ford-what-is-code/

컴퓨터는 이점이 많은 시계입니다. (A computer is a clock with benefits.) 간단한 산수를 한번에 하나씩 수행하는 동일한 방식으로 동작합니다. 째깍, 숫자 하나를 골라 1번 상자에 넣습니다. 째깍, 다른 숫자를 골라 2번 상자에 넣습니다. 째깍, 두 숫자를 (더하거나 빼는) 연산해 결과값을 1번 상자에 집어넣습니다. 째깍, 결과값이 0인지 확인하고, 다른 상자로 이동해 새로운 명령을 따릅니다.

컴퓨터가 하는 모든걸 당신도 펜과 종이를 갖고 할 수 있습니다. 다만 초당 수십억 번 하는게 어려울 뿐이죠. 그리고 이런 수십억 번의 자잘한 연산들은 새로운 결과를 만들어냅니다. 휴대폰을 울리고, 엘리베이터를 올라가게하며, 미사일 방향을 바꿀 수 있습니다. 이 엄청난 속도 덕분에 컴퓨터가 한개가 아닌 여러 개의 마법같은 손으로 최고 수준의 카드 마술을 보여줍니다.(That raw speed makes it possible to pull off not one but multiple sleights of hand, card tricks on top of card tricks.) 광학 디스크에 반사된 빛의 파동을 가로로 늘려주는 연산을 하고, 확대된 덩어리를 복사해 저장 칸에 넣고나서, 저장 칸의 내용을 화면에 빛으로 뿌립니다. (Take a bunch of pulses of light reflected from an optical disc, apply some math to unsqueeze them, and copy the resulting pile of expanded impulses into some memory cells—then read from those cells to paint light on the screen.) 수백만 개의 파동이 1초에 60번 발생합니다. 이것이 풋내기가 영상이라는 걸 보게 되는 과정입니다.

애플이 예전부터 컴퓨터를 제조한 반면, 마이크로소프트는 소프트웨어만 만들곤 했지만 (마우스와 키보드 같이 특별한 용도의 악세사리를 포함), 이제는 마이크로소프트도 엑스박스 게임기와 서피스 태블릿, 루미아 폰을 만드는 하드웨어 사업을 합니다. 페이스북은 거대한 데이터 센터에서 사용하는 컴퓨터를 직접 조립하고요.

결국 많은 것들이 컴퓨터이고, 앞으로 더 그렇게 될 것입니다. 시계, 카메라, 에어컨, 캐셔 기계 (cash register), 화장실, 장난감, 비행기 그리고 프로젝터기 까지도요. 삼성은 TV처럼 생긴 컴퓨터를, 테슬라는 바퀴와 엔진이 달린 컴퓨터를 만듭니다. 치실이나 손전등처럼 아직 컴퓨터가 아닌 것들은 언젠가는 사라질 것입니다.

포토샵에서 수천장의 이미지를 처리하는 작업 혹은 엑셀에서 숫자를 합산하는 작업을 한다면, 어떤 의미에서 당신은 프로그래밍을 하고 있다고 할 수 있습니다. 컴퓨터를 보통을 넘어서 너무 많이 사용한다면 컴퓨터는 당신을 바꿉니다. 나는 포토샵, 비지오(Visio), 스프레드시트, 웹브라우져에 대한 꿈을 꾸곤 합니다. 꿈 속에서의 장면은 유동적이고, 정렬되고, 재조직됩니다. 나는 문자를 화면 근처로 옮기는 프로그래밍 관련된 꿈도 꿨었지요.

컴퓨터가 굉장한 일을 하도록 만들 수 있지만, 한계점에 대해서도 이해가 필요합니다. 컴퓨터는 전지전능하거나 의식을 갖추지 않았습니다. 빠르긴 하지만, 프로세서와 램 같은 일부분이 하드 드라이브나 네트워크 연결보다 더 빠릅니다. 컴퓨터가 매우 위대하게 보이는 데에는 수많은 프로그래머와 마케터들의 공로가 크지요. (Making them seem infinite takes a great deal of work from a lot of programmers and a lot of marketers.)

새로운 세기적인 예술가인 영국의 윌리엄 모리스는 언젠가 예술이라는건 재료에 대한 저항 없이는 이룰 수 없다고 이야기했었습니다.(The turn-of-last-century British artist William Morris once said you can’t have art without resistance in the materials.) 컴퓨터와 다양한 종류의 주변기기들이 재료입니다. 코드가 예술이고요.

subtraction: 공제

add up: 이치에 맞다. 결과가 도출되다

raw speed: 엄청난 속도

sleights of hand: 전광석화 같은 손

rube: 풋내기

turn of last century: 새로운 세기의 시작

multifarious: 다방면에

peripheral: 주변장치

[1] What is code: 1.1 Why Are We Here?

Businessweek-CODE-Cover-final-6.15.15

http://www.bloomberg.com/graphics/2015-paul-ford-what-is-code/

“코드 라는게 무엇인지 설명해줄 수 있나요?” 잡지 편집자의 요청으로 이 글을 쓰고 있습니다.

“아니오” 제가 대답했죠. “먼저, 나는 수학을 잘 못해요. 프로그래머이긴 하지만, 동부에서 일하는 프로그래머죠.(East Coast Programmer) 베이 에어리어(역자 주: Bay Area는 유명 IT 기업들이 위치한 샌프란시스코 근처 서쪽 해안)에서 플랫폼 업무를 하는 진지한 사람이 아니란 말이에요”

거의 20여년 전 펄 (Perl) 언어를 오라클 데이터베이스에 맞게 수정한 오레퍼1 (Oraper1)을 배우며 프로그래밍을 시작했습니다. 업무를 시작한지 1달 정도 되었을 때, 판타지 농구 선수들의 계정 3만개를 망가뜨렸죠. (역자 주: 실존하는 농구 선수들을 활용해 가상의 경기를 벌이는 게임) 몇몇 사용자들은 보낸 분노의 이메일을 보냈어요. 그 일을 겪은 후, 나는 실력을 키워야겠다고 다짐했습니다.

제가 선천적으로 프로그래밍을 잘하는 사람이 아니라는걸 말하는겁니다. 컴퓨터를 사랑하지만, 컴퓨터가 나에게 재능을 주지는 않았죠.(they never made any sense to me). 코드를 거부하는 뇌에(code-resistant) 정보를 쑤셔넣은지 20년이 지나면서, 컴퓨터에 대한  충분한 지식을 축적해왔습니다. 마술 같은 컴퓨터의 속살이 드러났죠.(It’s magic has been stripped away) 아마존이나 마이크로소프트에서 근무한 누구와라도 어떤 일을 했었는지 부끄럼 없이 이야기 나눌 수 있어요. 구글과 애플에서 일하는 사람과도 기쁘게 말할 수 있으나, 그들은 보통 모임에 거의 나오지 않는군요.(they so rarely reenter the general population)

(자바, 자바스크립트, 파이톤(Python), 펄, PHP, 클로져(Closure), XSLT로 코딩하며 돈을 벌었기에) 월드와이드웹에 빠삭하지만, 소프트웨어 개발이라는 거대한 세상에서 웹은 하나의 작은 부분일 뿐이에요. 조사기관 IDC에 따르면, 지구상에는 1100만명의 전문 소프트웨어 개발자가 있습니다. (취미로 개발하는 사람은 700만명) 대략 LA와 근교 인구만큼의 숫자네요. LA 인구가 프로그래머라면, 동 할리우드는(East Hollywood) 맥(MAC) 프로그래머, 서 LA는 모바일, 비버리힐즈는 재무 관련 프로그래머, 오렌지 카운티는 윈도우 프로그래머이고요.

다른 이웃들도 많이 있어요. 엄지 손가락보다 작은 임베디드 컴퓨터에 사용되는 코드를 작업하는 사람들이 있습니다. 당신의 TV가 동작하게 만드는 코드를 작업하는 사람도 있고요. 세상 모든 것에 프로그래머가 붙어있는 것이죠. 이들은 서로 다른 문화와 서로 다른 집단적인 특질로 인해 업무를 하는 방식이 다릅니다. 시스템 운영자가(system administrator) 저글링 수업을 듣는 거라고 표현한다면, 나는 충분히 납득하며, 프로덕트 매니저는 공중그네 수업을 듣는게 아닐까 생각합니다. 내제가 아는 정보 설계사 중에는(information architect) 친구관계를 주욱 나래비 세워서 스프레드시트에 적어둔 사람도 있어요. 보안 연구 전문가(security research Specialist)는 파티에 가는걸 좋아하고요.

저는 그저 1800만명 중 한명이라는걸 말하고 싶습니다. 그리고 수백여만명 중 하나의 개인으로서 소프트웨어 개발에 대한 저의 관점을 전달하려고 합니다. 제 삶은 코드와 함께 했고, 당신 역시도 마찬가지였죠. 이제 이것들이 어떻게 돌아가는지 이해해야합니다.

새로운 종류의 혼란과 질서를 찾는 작업은 이전과 비교할 수 없을 정도로 점점 쉬워지고 있습니다. 수학 실력이 전혀 늘지 않더라도 저는 그 작업이 좋고요. 코드는 점차 세상을 재미있고, 멋지고, 파괴적인 방식으로 바꾸고 있습니다.

strip away: 조금씩 없애다

folklore: 민간 전승

trapeze: 공중그네