본문 바로가기
Identity_Developer&Analyst/01_Developer

개발자..객체 지향 그리고 나

by 스타트업_디벨로퍼 2020. 12. 19.

아래의 내용은 한국말인데도 참 어려운 거 같다. 

개발자의 세계는 아는게 20퍼센트, 알아야한다고 생각하는게 80퍼센트라면,

80퍼센트를 다 채워넣으면 다시 알아야한다고 생각하는게 80펀세트가 되는 세상인 것 같다. 

객체 지향이 아주 신의 선물처럼 느꼈던 나였는데 C++을 만든 이가 이렇게 말을 하니,

더더욱 조심스럽게 생각하고 세심하고 신중하게 생각해보아야 겠다. 

그럼에도 불구하고 IBM 사태처럼 지금 개발자들이 말도 안되게 양성되고 있다. 

양성은 되는데 과연 그런 수요를 흡수할만한 국내 업체들이 얼마나 될지 모르겠다는 생각을 항상 했었다.

 

미국도 똑같구나...한국에서는 개발자 부족하다고 말하지만, 그게 맞는지도 모르겠고, 

신입 개발자(경력있는 개발자)를 얼마나 뽑을지 ,

 

나는 어느수준에 와있는가 참 모르겠다. 

정말 많은 글을 읽어봤지만(이동욱님, 체육과출신 개발자 분 등을 많이 봤는데) 

지금 시기에는 조급하지 말라고도 하시고, 경력있는 개발자가 되기 위해 포트폴리오도 잘 준비하고,

 

지금은 미약해보일지 몰라도 몇년 지나고 나면 다들 개발 능력은 비슷하다는 말도 들리지만,

 

과연 내가 잘해낼 수 있을지는 여전히 불확실하고,

 

부족한 나를 채우기 위해서, 
1) 코딩 + 알고리즘 + 과제 테스트 통과하는 능력 
2) 기술면접을 위한 컴퓨터공학 완주반 끝내기

3) 소통을 위한 의사결정론, 애자일 방법론, 디자인 감각, 문서 작성 능력 키우기

4) 소통을 위한 각종 광고/발표자료/연설문/책 참고하기

5) 포트폴리오로 각종 프로젝트와 대회 참여하고 자격증 틈틈히 준비하기

 

등의 단계별 수행사항을 계획하고 수행하고 있다. 

참 어렵고, 떄로는 두렵고, 하지만 

여전히 재밌고, 적성에도 맞다고 생각되는 이 업종의 전문가가 되기 위해 끝없이 정진해야 겠다.

--------------------------------------------------------------------------------

 

nanite.tistory.com/102?fbclid=IwAR23AUqwDek_Z1m2MIROmCFEMkEZbwB_GY74cZFn3qBFDr0e1Ny5gtrZ1FI

 

비야네 스트로스트룹이 폭로하는 C++의 충격적인 진실 (C++ 탄생 비화)

Bjarne Stroustrup: "I Did It For You All..." 때는 1998년 1월 1일, C++의 창시자인 비야네 스트로스트룹(Bjarne Stroustrup)이 IEEE의 "Computer"지와 인터뷰를 한 적이 있는데요. 당연히 편집자들은 비야네가..

nanite.tistory.com

때는 1998년 1월 1일, C++의 창시자인 비야네 스트로스트룹(Bjarne Stroustrup)이 IEEE의 "Computer"지와 인터뷰를 한 적이 있는데요.

 

당연히 편집자들은 비야네가 C++를 만든 당사자로서 지난 7년 간의 경험을 되돌아보면서 객체지향 설계에 대한 종합적인 견해를 공유해 주리라고 기대하고 있었습니다.

 

그러나 인터뷰가 끝날 무렵, 인터뷰 기자는 이 사람으로부터 예상을 훨씬 초월하는 충격적인 이야기를 듣고 말았죠. 편집자는 "업계의 이익을 위해서" 이 내용을 숨기기로 결정하였으나, 세상에 비밀이란 없기에, 결국은 유출되었습니다.

 

아래에 적힌 인터뷰 전문은 전혀 편집하거나 번복하지 않은 실제 인터뷰 내용을 그대로 적은 것입니다.

 

미리 각색된 인터뷰처럼 매끄러운 대화는 아니지만 한 번 읽어 보시면 꽤나 재미있을 겁니다.

 

- 인터뷰 진행자: 비야네 스트로스트룹씨가 소프트웨어 디자인의 세계를 완전히 뒤바꾼지 몇 년이 지났습니다. 그 지난 세월을 되돌아보면서 느낀 점이 있으신가요?

 

- 스트로스트룹: 당신이 도착하기 전까지 마침 그 생각을 하던 참이었어요. 기억하시죠? 다들 C를 쓰고 있었는데, 문제는 그 사람들이 C를 너무 잘 썼다는 거에요... 대학들도 C를 너무 잘 가르쳤어. 학부만 졸업해도 경쟁력이 있었단 거지. 그게 모든 문제의 시발점이었어요.

 

- 인터뷰 진행자: 문제요?

 

- 스트로스트룹: 응. 문제. 코볼이 한창 대세였던 때를 기억하시죠?

 

- 인터뷰 진행자: 물론이죠. 내가 코볼 프로그래머였으니까요.

 

- 스트로스트룹: 음, 초창기에 이 사람들은 말이야, 거의 반신(半神)과 같은 존재였지. 급여도 높고, 귀족처럼 대우 받았어요.

 

- 인터뷰 진행자: 하하, 그렇게 잘 나가던 시절이 있었죠.

 

- 스트로스트룹: 맞아요. 그런데 그 뒤에 어떤 일이 벌어졌죠? 여기에 신물이 난 IBM이 프로그래머 양성에 수백만 불을 투자하기 시작했어요. 개나 소나, 나 프로그래머요 하는 놈들이 길거리에 차고 넘칠 때까지...

 

- 인터뷰 진행자: 내가 그 일을 그만 둔 이유가 그거에요. 불과 1년 사이에 급여가 바닥으로 떨어져서, 제가 지금 하고 있는 기자가 더 돈을 많이 받을 정도에요.

 

- 스트로스트룹: 내 말이 그 말이에요. 그리고 있잖아, 'C' 프로그래머들에게도 그것은 마찬가지였단 말입니다.

 

- 인터뷰 진행자: 알고 있어요. 그래서, 어떤 말씀을 하시려는 건가요?

 

- 스트로스트룹: 그러니까, 어느날은 사무실에 멍하니 앉아 있다가, 내가 이 균형을 조금 바로잡기 위한 작은 음모를 꾸며 볼 수 있지 않을까 하는 생각이 들었어요. 만약에 이 세상에, 너무 복잡하고 너무 배우기 어려워서, 그 누구도 넘쳐나는 양산형 프로그래머로 이 시장을 바닥에 쳐박을 수 없을, 그런 프로그래밍 언어가 있다면, 어떤 일이 벌어질까? 사실, 이 아이디어의 일부는 X10에서 얻은 거에요. X윈도우 알죠? X윈도우는 정말 개 같은 그래픽 시스템이었단 말이에요. Sun 3/60 것들에서만 겨우 돌아갔지. 거기에 내가 원했던 모든 재료들이 준비되어 있었어요. 진창 기괴하고 복잡한 문법에, 불분명한 함수, 어설프게 흉내낸 객체지향 구조까지. 지금에 이르러서조차도, 순수한 X윈도우 코드를 작성하는 사람은 전혀 없습니다. 제정신을 유지하고 싶은 사람이라면, Motif만이 유일한 대안이에요.

 

- 인터뷰 진행자: 농담이시죠...?

 

- 스트로스트룹: 아뇨. 눈곱만큼도요. 그리고 사실은, 또다른 문제가 있었어요. 유닉스는 'C'로 쓰였어요. 그 때문에 'C' 프로그래머라면 누구라도 쉽게 시스템 프로그래머가 될 수 있었단 말입니다. 예전에 메인프레임 시스템 프로그래머가 돈을 얼마나 벌었는지 기억하시죠?

 

- 인터뷰 진행자: 당연하죠. 그게 내가 하던 일이었던 걸요.

 

- 스트로스트룹: 좋아요. 그래서 이 새로운 프로그래밍 언어는, 그 자신을 유닉스로부터 떨어뜨려 놓아야만 했어요. 그 둘을 너무나도 아름답게 이어 주는 시스템콜들을 전부 은닉시켜서 말이죠. 이거라면 고작 DOS 정도만 알고 있는 사람들까지도 꽤나 먹고 살 만큼은 벌 수 있게 해 줄 수 있을 거라고 생각했어요.

 

- 인터뷰 진행자: 지금 당신이 하는 말을 도저히 믿을 수가 없네요.

 

- 스트로스트룹: 뭐, 나는 시간을 충분히 줬어요. 이 즈음 되면 거진 사람들도 C++가 완전히 시간 버리는 짓이라는 것쯤은 스스로 깨달았을 텐데 말이야. 하지만, 나로서도 이것만큼은 인정하지 않을 수가 없군요. 그 사람들이 진실을 깨닫는 데까지 걸린 시간은, 내가 예상한 것에 비해 너무 길었어요.

 

- 인터뷰 진행자: 그래서 정확히 어떻게 그 일을 해 내신 거죠?

 

- 스트로스트룹: 전부 농담이었어요. 처음에는 그냥 장난치려던 거였는데, 저는 사람들이 그 책을 정말로 진지하게 받아들일 줄은 전혀 몰랐거든요. 그야말로 뇌가 반쪽만 남아 있는 사람이라도, 객체지향 프로그래밍이 허구이며, 반직관적, 비논리적이고, 비효율적이라는 것 정도는 눈치챌 수가 있을 텐데요.

 

- 인터뷰 진행자: ...?!?!

 

- 스트로스트룹: 그리고 '재사용성 있는 코드'에 대해서 말인데, 자기들 코드를 실제로 '재사용'하고 있는 회사가 있나요? 그런 소식을 도대체 언제 들어 보셨나요?

 

- 인터뷰 진행자: 글쎄요... 없는, 것 같기는 하지만, 그게...

 

- 스트로스트룹: 그것 봐. 일찍이 실제 사례가 몇 번 있었어요. 오레곤에 있는 그 회사, 멘토 그래픽스(Mentor Graphics)였던가요. 내 생각엔 그 사람들이 90년도인가 91년도 즈음에 자기들이 개발한 것을 전부 C++로 다시 쓰려다가 제대로 한 방 먹었다고 소문이 난 것 같은데요. 그 분들에게는 정말이지 미안하지만 사람들이 그 실수로부터 배운 것도 있었을 거라고 생각해요.

 

- 인터뷰 진행자: 전혀 그렇지 않은 것 같은데요?

 

- 스트로스트룹: 그냥 겉으로 보기에는 그렇지 않지. 문제는, 대부분의 회사들이 자기들의 주요한 골칫거리들은 쉬쉬해 버린다는 것이고, 3000만 달러의 손실을 주주들에게 설명하는 것은 꽤나 애먹는 일일 수도 있었다는 점이지. 그럼에도 불구하고 그 사람들, 결국에는 어떻게든 돌아가게 만들었지요.

 

- 인터뷰 진행자: 그랬다고요? 그것 봐요. 객체지향이 결국에는 먹힌다는 증거가 아니겠어요.

 

- 스트로스트룹: 뭐, 완전히는 아니고, 거의 그랬지. 그 실행파일은 너무 커서, HP 워크스테이션에 128MB 짜리 램 끼고도, 로드하는 데만 5분은 걸렸어요. 그러고는 경운기처럼 탈탈탈 돌아갔지. 사실, 나는 이 사건이 나에게 큰 걸림돌이 될 거라고 생각했는데, 이제 일주일이면 전부 들통나겠지 했지만, 아무도 신경을 안 쓰더군요. 썬이랑 HP는 그 보잘 것 없는 프로그램을 구동시키기 위해서 필요한 어마어마한 리소스와 함께 과대포장된 상자들을 팔아 제끼느라고 마냥 기쁜 모양이더군요. 그, 우리가 최초의 C++ 컴파일러를 만들었을 때 있잖아요. 우리 회사 AT&T에서 말이야. 내가 'Hello World' 컴파일했다가 실행파일 크기 보고 정말 내 눈을 의심했다. 2.1MB. 메가. 바이트.

 

- 인터뷰 진행자: 뭐라고요? 하지만, 컴파일러도 그 사이 많이 발전해 왔는 걸요.

 

- 스트로스트룹: 그런가요? g++ 최신 버전으로 다시 한 번 컴파일해 보시죠. 반 메가바이트 만큼도 차이가 없을 텐데요. 게다가 최근에도 그런 사례는 전세계적으로 즐비하게 벌어지고 있어요. 영국의 통신사(British Telecom)는 한 번 일을 벌렸다가, 다행스럽게도 그 재앙이 어떻게 더 커지기 전에 금방 접고 새출발을 할 수 있었죠. 그 사람들은 오스트레일리아 통신사(Australian Telecom)에 비하면 운이 좋았어요. 이제는 지멘스(Siemens)가 그 공룡을 만들고 있다고 들었는데요. 그 프로그램을 구동시키는 하드웨어의 크기가 점차 커질 수록 그들의 근심 걱정도 계속해서 늘어만 간다죠. 다중 상속이야말로 우리가 진정한 기쁨이라고 부를 수 있는 것이 아닌가요?

 

- 인터뷰 진행자: 그렇다 칩시다. 하지만 C++ 자체는 기본적으로 다재다능하고 쓸 만한 언어에요.

 

- 스트로스트룹: 그걸 정말로 믿고 있어요? 혹시 앉아서 C++ 프로젝트를 해 본 적은 있습니까? 무슨 일이 벌어지는지 알려 드릴 게요. 우선, 나는, 초창기 작은 프로젝트 정도는 잘 돌릴 수 있을 만큼으로 해서, 이미 충분한 함정을 깔아 두었습니다. 연산자 오버로딩을 씁시다. 프로젝트가 끝날 무렵에는 거의 모든 모듈이 오버로딩된 연산자를 쓰고 있는 것이 보통인데, 그건 걔네들이, 자기들이 교육 과정에서 배운대로 정말 그렇게 해야 한다고 느끼고 있기 때문이죠. 그렇게 해서 똑같은 연산자가 각각의 모듈에서 서로 전혀 다른 것을 의미하게 됩니다. 이제 이것들을 한 데 모으면, 한 100개 정도 되는 모듈이 되겠죠. 그리고 정보 은닉 말이야. 세상에, 나는 회사들이 자기들이 개발한 모듈들을 서로 상호작용하게 하느라고 이런저런 고민을 하고 있다는 이야기를 들을 때면 말이야, 때때로 웃음을, 멈출 수가. 없다. ㅋㅋㅋㅋ 내가 생각하기에, 협력을 통한 시너지라던가, 상승작용이라는 용어는, 누군가가 프로젝트 매니저들의 갈빗대를 칼로 쑤시기 위해서 만든 말이 아닐까 하는데.

 

- 인터뷰 진행자: 말씀 드리고 싶은 것이 있는데, 저는 그런 이야기를 듣고 있으려니 전부 질려 버릴 것만 같아요. 정말로 프로그래머들의 봉급을 올려 주기 위해서 그 일을 하셨다는 거에요? 엄탕하기 짝이 없군요...

 

- 스트로스트룹: 아뇨. 별로. 모든 사람에게는 선택권이 있어요. 나는 이 일이 이렇게 걷잡을 수 없이 커질 줄은 몰랐거든요. 어찌되었든, 나는 일단은 성공한 거에요. C++는 이제 죽어가고 있지만, 프로그래머들은 여전히 높은 봉급을 받고 있어요. 이미 C++로 만들어 버린 그 쓰레기들을 계속해서 유지보수해 나가야 하는 그 불쌍한 희생양들이 특히 그렇죠. 알고 계시잖아요. 커다란 C++ 소프트웨어 모듈은 그것을 직접 작성한 본인 이외는 유지보수를 한다는 것이 전혀 불가능합니다.

 

- 인터뷰 진행자: 어째서요?

 

- 스트로스트룹: 그걸 아직도 몰라요? typedef 알죠?

 

- 인터뷰 진행자: 당연하죠.

 

- 스트로스트룹: 예컨대 'RoofRaised'가 배정도 실수(double)라는 작은 사실을 알기 위해서만 해도, 헤더 파일을 뒤져 보느라 얼마나 시간이 걸리는지, 기억하십니까? 그렇다면, 주요 프로젝트의 모든 클래스에서 모든 암시적 typedef들을 찾는 데에 걸릴 시간은 어느 정도일지, 상상해 보시죠.

 

- 인터뷰 진행자: 그래서 본인의 성공을 어떻게 가감하시는 건지요?

 

- 스트로스트룹: 평균적인 C 프로젝트의 개발 기간을 기억하고 계십니까? 대략 6개월 정도. 와이프와 자식들까지 먹여 살려야 하는 남자가 충분한 돈을 받기에는 충분히 길지가 않은 기간이지. 같은 프로젝트를 가져와서 C++로 디자인하면 어떻게 되나요? 내가 알려 줄 게요. 1년에서 2년. 멋지지 않아? 단 한 번의 판단 실수로 그 안정된 직업이 보장된다니. 그리고 또 하나. 대학들은 오랫동안 'C'를 잘 가르치지 않고 있으며, 이제는 괜찮은 'C' 프로그래머가 부족합니다. 특히 유닉스 시스템 프로그래밍에 대해 눈곱만큼이라도 뭔가 아는 사람들. 최근에야 시작해서 'new'만 쓰던 아이들 중에서 'malloc'으로 뭘 해야 하는지 아는 사람이 몇이나 되겠어요. 이 아이들은 반환 코드조차도 신경 쓰지 않죠. 사실, 대부분의 C++ 프로그래머들은 반환 코드를 그냥 던져 버린다고요. 우리 정겨운 '-1'은 어디로 가 버렸나요? 최소한 그 시절의 우리는 'throw' 'catch' 'try' 따위 없이도 발생한 오류쯤은 바로 알 수가 있었는데요.

 

- 인터뷰 진행자: 하지만, 상속이란 개념이 시간을 많이 절약시켜 주는 걸요?

 

- 스트로스트룹: 그래요? C의 프로젝트 플랜과 C++의 프로젝트 플랜의 차이에 대해 생각해 본 적 있나요? C++ 프로젝트의 계획 기간이 3배는 더 깁니다. 상속되고 상속되지 않는 것들을 확실하게 정해 놓아야만 해요. 그러고 나서는 자기들이 잘못 구상했다는 걸 뒤늦게 알아채고 또 그걸 반복하는 거죠. 'C' 프로그램의 메모리 누수에 대해서 들어 본 사람이 있기는 한가요? 이제는 그것을 찾는 일이 산업의 중심이 되었습니다. 대부분의 회사들은 그냥 포기하고, 메모리가 질질 샌다는 걸 안 채로 그냥 그 제품을 출시해 버리죠. 메모리 누수를 찾는 데에 들어가는 비용을 아끼기 위해서요.

 

- 인터뷰 진행자: 그것을 위한 툴들이 있는데요...

 

- 스트로스트룹: 그 툴들조차 대부분 C++로 작성된 것입니다.

 

- 인터뷰 진행자: 우리가 이 대화록을 대중에게 공개하면, 당신은 엄청나게 공격 받을 텐데요. 이해하고 계신가요?

 

- 스트로스트룹: 회의적입니다. 말했듯이, C++는 이미 그 절정기를 지나 버린지가 오래입니다. 정신줄을 놓지 않는 이상, 그 어떤 회사도 파일럿 테스트 없이는 C++ 프로젝트를 시작하지 않으려 할 거에요. 그 파일럿 테스트는 C++ 프로젝트가 바로 사지로 향하는 길이라는 걸 충분히 설득해야만 합니다. 그렇지 않는다면, 그 결과로 얻는 것은 전부 그들의 책임이에요. 알다시피, 나는 데니스 리치를 설득해서 유닉스를 C++로 다시 쓰게 하려고 한 적도 있어요.

 

- 인터뷰 진행자: 말도 안 돼. 세상에... 데니스 리치가 뭐라고 하던가요?

 

- 스트로스트룹: 리치는 다행히도 유머 감각이 좋은 사람이더군요. 내 생각에 데니스랑 브라이언 이 두 사람은 내색은 안 했지만 초창기에 내가 뭘 꾸미고 있었는지를 눈치채고 있었던 것 같아요. 데니스는 나만 원한다면 C++ 버전의 DOS를 작성하는 것은 도와 주겠다고 하더군요.

 

- 인터뷰 진행자: 그래서 그렇게 하신 건가요?

 

- 스트로스트룹: 사실은, 나는 C++로 DOS를 만든 적이 있어요. 있다가 끝나고 시연 드릴 게요. 컴퓨터실에서 Sparc 20으로 구동중인 게 하나 있어요. 4개의 CPU를 기반으로 로켓처럼 기동하며 고작 70메가의 디스크만 차지한답니다.

 

- 인터뷰 진행자: PC에서는 어떤가요?

 

- 스트로스트룹: 농담 마세요. 윈도우 95를 본 적이 없습니까? 내 인생 최대의 성공작이죠. 내가 준비도 채 되기 전에 거의 게임이 터질 뻔했지만 말이에요.

 

- 인터뷰 진행자: 아시겠지만, Unix++에 대한 아이디어는 정말 저를 다시 한 번 생각하게 만드네요. 어딘가에서 이것을 시도하고 있는 사람이 있을 것만 같아요.

 

- 스트로스트룹: 그 사람은 적어도 이 인터뷰를 접한 이후는 아니죠.

 

- 인터뷰 진행자: 죄송하지만, 우리가 나눈 대화중 그 어떤 것도 공식적으로 출판하기는 어려울 것 같습니다.

 

- 스트로스트룹: 하지만 세기의 이야기입니다. 나는 내 동료 프로그래머들을 위해 한 일을 통해서 그 사람들에게 내가 기억되기를 바랄 뿐입니다. C++ 하는 사람들이 요즘 얼마나 받는지 알고 있나요?

 

- 인터뷰 진행자: 마지막으로 들었던 게... 아마 제일 잘 나가는 프로그래머는 시간당 70불에서 80불 정도 받는 걸로 알아요.

 

- 스트로스트룹: 그것 봐요. 그리고 그럴 줄 알았어요. 내가 C++에 넣은 잡다한 것들을 전부 쫓아가는 것은 쉬운 일이 아니에요. 그리고 전에 말했듯이, 모든 C++ 프로그래머들은, 마치 어떤 주문에 걸린 듯이, 모든 프로젝트에서 그 언어의 그 모든 빌어먹을 요소를 하나하나 전부 사용해야만 한다는 강박적인 기분을 느낀다고요. 사실 그 점이 때때로 나를 정말 짜증나게 해요. 시간이 지나면서는, 나도 이 언어를 조금은 좋아하게 되었지만요.

 

- 인터뷰 진행자: 그 전에는 좋아하지 않으셨다는 말씀이신가요?

 

- 스트로스트룹: 학을 뗐죠. 그냥 보기에도 지저분하기 짝이 없게 생겼잖아요. 안 그런가요? 하지만 내가 쓴 책의 인세가 들어오기 시작하면서는... 뭐 말 안 해도 아시겠죠.

 

- 인터뷰 진행자: 잠깐만요. 레퍼런스라면 어떤가요? 이건 인정하셔야 해요. C 포인터를 확실히 개선시키셨잖아요.

 

- 스트로스트룹: 흐음... 나는 그 점에 대해서 항상 의문이었어요. 처음엔 나도 그걸 개선으로 여겼습니다. 그러다가 하루는 C++를 시작부터 지금까지 계속 써 왔다는 친구와 이 주제로 논할 기회가 한 번 있었어요. 그 친구는 말하기를 자기가 만든 변수가 레퍼런스(reference)된 건지 디레퍼런스(dereference)가 된 건지를 도통 기억할 수가 없어서 여태껏 항상 포인터만 써 왔다는군요. 그 작은 별표(*) 덕분에 쉽게 알 수 있다고요.

 

- 인터뷰 진행자: 글쎄요. 보통 이 때쯤이면 '인터뷰에 응해 주셔서 대단히 감사 드립니다'라고 말하지만, 이 자리에서는 어쩐지 그 말이 어울리지 않는 것 같네요.

 

- 스트로스트룹: 이걸 출판해 주시겠다고 꼭 약속해 주세요. 요새 제 양심이 많이 좋아지고 있습니다.

 

- 인터뷰 진행자: 나중에 말씀 드리겠습니다. 하지만 편집장이 이걸 보고 뭐라고 할지 예상이 가는군요.

 

- 스트로스트룹: 어쨌든 누가 믿겠습니까? 그나저나, 저에게도 그 테이프 사본을 하나 보내 주시겠어요?

 

- 인터뷰 진행자: 그럼요.

반응형