더 나은 프로그래밍을 위한 제언

요즘 “대한민국 개발자 희망보고서”를 읽고 있다. 현장의 얘기가 체계적으로 정리된 느낌과 함께  평소에 알고 있으면서도 실천하지 못하는 부분에 대해 내 자신을 다시 한번 일깨워 주고 있다. 그 중 코딩에 관한 가장 기본적인 얘기가 있어서 인용한다.


더 나은 프로그래밍을 위한 제언


제발 줄 좀 맞추자
프로그래밍을 잘 하는 사람과 그렇지 못한 사람의 차이는 바로 줄 간격을 맞춰서 프로그램을 짜느냐에 달려 있다고 나는 과감히 주장한다. 왜냐하면 그 동안 수많은 개발자를 보아왔지만 줄을 제대로 맞추지 않고 프로그램을 제대로 짜는 사람은 본 적이 없기 때문이다. 보기 좋은 코드가 디버깅하기 좋다. 제발 기본에 먼저 충실하자. 알고리즘과 자료구조에 대한 이해는 기본이다. 그런 다음에 기교를 발휘해도 늦지 않는다.

백문이 불여일타
“프로그래머가 되는 가장 좋은 방법은 프로그램을 작성해보고, 다른 사람이 작성한 훌륭한 프로그램을 공부하는 것이다.”
훌륭한 작가 중에서 책을 많이 읽지 않은 사람을 보았는가? 마찬가지로 좋은 프로그램을 만들기 위해서는 좋은 프로그램을 많이 보아야 한다. 무에서 만들어지는 것은 아무것도 없다. 책에 있는 소스나 공개 소스를 스스로 분석해보자. 그러나 이보다 더 좋은 방법은 직접 짜보는 것이다. 직접 짜보는 것만큼 훌륭하게 배우는 방법은 없다.

선설계 후코딩
항상 프로그래밍을 하기 전에 선설계 후코딩하는 습관을 들여야 한다. 생각하고 계획하는 프로그래밍을 하라는 말이다. 프로그래밍을 하다가 막히는 부분에 가서야 생각하는 것은 좋지 않은 습관이다. 프로그래밍 시간이 배로들뿐더러 수정에 의해 또 다른 문제가 야기될 개연성이 크다. 계획을 하되 머리속으로만 하지 말고 문서로 작성하여 기억이 유실되지 않도록 해야 한다.

친절한 주석씨
주석은 습관이다. 주석은 타인에 대한 배려다. 친절한 프로그래머가 되는 지름길은 주석을 잘 다는 것이다. 시간이 날 때 주석을 다는 것이 아니다. 주석은 프로그래밍의 일부분이라는 인식을 갖고 실천해야 한다. 주석을 달지 않으면 본인도 시간이 지나면 잘 기억이 나지 않는다.

3종 언어 세트
나의 경험으로 볼 때 프로그래밍 언어는 최소한 3가지는 익혀야 한다. 가급적이면 소프트웨어 프레임워크에 맞는 언어를 각각 익히는 것이 좋다. Client/Server, .NET, J2EE 프레임워크에 맞는 Powerbuilder, Java, C#을 예로 들 수 있다. 그렇지만 이 세가지 중에서 반드시 자신의 전공부야는 있어야 한다. 하나의 언어를 배우더라도 다른 언어에서 금세 응용할 수 있도록 충분히 이해해야 한다.

나만의 테크노트
자신만의 노하우를 반드시 정리하라. 가장 큰 재산이 된다. 일전에 프로젝트를 하면서 나만의 테크노트를 한 권씩 만들어 정리한 적이 있었는데 매우 유용했다. 그렇게 습득한 지식은 책에도 잘 나와 있지 않는다. 기록을 하지 않고 다시 복기하려면 엄청한 시간과 노력이 또 다시 요구된다. 테크 노트를 정리하는 일은 시행착오를 줄일 수 있도록 해 줄 뿐만 아니라 전문가로 가는 노하우를 하나씩 쌓아가는 기쁨도 느끼게 된다. Taeyo ASP & .NET 웹사이트가 성장한 배경을 살펴보라. 내일 당장 그대만의  테크노트를 한 권 장만하라.

코딩이 뭐길래
프로그래머는 절대 코딩만 하는 사람이 아니라고 누차 강조했다. 코딩 지상주의를 절대 경계하라. 어느 정도 코딩 실력이 올라가면 데이터베이스, 아키텍쳐 등의 유사분야의 영역에 대한 지식을 넓혀라. 때론 일반적인 지식도 필요하다. 큰 그림을 그릴 수 있어야 한다. 설상 프로그래머로 자신의 경력개발경로를 설계한다 하더라도 다른 분야에 대한 학습은 꼭 필요하다.

선택 – 스펜서 존슨

사용자 삽입 이미지스펜서 존슨의 선택이란 책을 읽었다. 선택의 연속인 인생에서 좋은 결정을 내리기 위한 방법론을 제시하고 있는 이 책은 내용이 어렵다기 보다는 이를 이해하고 실천하는데 관건이 있는것 같다. 책에서 제시하는 내용을 정리해 봤다.

 

더 나은 결정을 내리기 위해
나는 먼저
좋지 못한 결졍을 밀어붙이지 말아야 한다.

정말로 필요한 것만을 추구할 때,
더 나은 결정을 더 빨리 할 수 있다.


이것은 정말로 필요한 것인가?
처음부터 정말로 필요한 것만을 추구하면 나중에 더 좋은 결과를
얻을 수 있다.
이것은 필요한 것에 대한 그림을 아주 자세하게 그리면서 이미
그것을 달성한 나 자신의 모습을 떠올려 보고, 그런 후에 정말로
필요한 것만을 추구한다는 뜻이다.

원하는 것은 바라는 것이다. 필요한 것은 꼭 해야 하는 것이다.
필용한 것은 성공과 행복에 있어 필수적인 것이다.
단순히 원하는 것을 알려면 이렇게 묻는다.
‘나는 지금 무멋을 하고 싶은가?’
정말로 필요한 것을 알려먼 이렇게 묻는다.
‘나는 지금 무엇을 했으면 좋았을까?”

이 결정에서 나를 위해 그리고 다른 사람들을 위해 정말 필요한
것은 무엇인가? 내가 그리는 그림을 정말 필요한 것에 초점을 맞추고
있는가? 나는 정말 필요한 것에만 집중하면서 그 밖의 다른
것들을 버리고 있는가?

나는 스스로 다음과 같은 질문을 던져 대답해 본다.
‘내게 정말로 필요한 것이 무엇인지 알고, 정보를 모아 선택의
폭을 넓히며, 미리 충분히 생각하고 있는가?’

Yes or No

나에게는 여러가지 선택지가 있다.
정보를 더 많이 모을수록
그 선택의 폭은 더 넓어진다.

정보를 모아 선택의 폭을 넓히자
필요한 정보를 모을수록 더 많은 대안을 찾을 수 있다.
나는 정말로 필요한 것을 얻을 수 있는 대안을 선택한다.
정보는 사실과 느낌의 집합이다. 다시 말해 정말로 그런 것과
사람들이 그것에 대해 느끼는 감정의 집합체이다.

나는 필요한 정보를 모은다. 나는 그것을 잘 살펴보고, 다른 사람
에게서 정보를 얻을 때는 직접 확인한다.

내게 필요한 정보가 있는가? 그것이 누구에게 있는가?
그것이 어디에 있는가? 그것을 얻는 가장 좋은 방법은 무엇인가?
나는 그것을 직접 확인했는가?
필요한 정보를 모으면서 나는 어떤 대안들을 보는가?
나는 정보를 모아 선택의 폭을 넓히고 있는가?

나는 스스로 다음과 같은 질문을 던져 대답해 본다.
‘내게 정말로 필요한 것이 무엇인지 알고, 정보를 모아 선택의
폭을 넓히며, 미리 충분히 생각하고 있는가?’

Yes or No

더 나은 결정을 내리기 위해
나는 스스로 이렇게 묻는다.

‘그렇게 되면 어떤 일이 일어날까? 그리고 다음에는?
또 그 다음에는?’

이런 식으로 미리 충분히 생각해
더 나은 결정을 내리고 더 나은 결과를 얻는다.

미리 충분히 생각하기
나를 가르치는 가장 좋은 스승은 과거에 내가 했던 결정이다. 그것을
돌아보면 착각에서 벗어나 현실을 보는 데 큰 도움을 받을수 있다.
하지만 과거에 내가 내린 결정을 되돌아볼 떄 스스로에게 너무 엄격할
필요는 없다. 지난 일은 이미 지나간 일일뿐이다. 그때는 나름대로
최선을 다한 것이다. 그러니 그저 그것을 통해 배우면 된다.

이제 나는 내게 정말로 필요한 것이 무엇인지 알고, 정보를 모아
선택의 폭을 넓히며, 미리 충분히 생각하기 때문에 더 좋은
결정을 내릴 수 있다. 내 결정의 결과는 내게 정말로 필요한 것을
기준으로 평가된다.

내게 정말로 필요한 것을 충족시키는 결과는 어떤 것인가? 내가
어떤 결정을 하고 그에 따라 행동하면 어떤 일이 일어날까? 그리고
다음에느? 그리고 또 그 다음에는? 내가 염려하는 최악의 결과는
무엇인가? 내가 기대하는 최선의 결과는 무엇인가?
나는 가장 가능성 높은 결과를 얼마나 분명히 예측하는가?
나를 위해? 남들을 위해? 나는 그것을 미리 충분히 생각했는가?

나는 스스로 다음과 같은 질문을 던져 대답해 본다.
‘내게 정말로 필요한 것이 무엇인지 알고, 정보를 모아 선택의
폭을 넓히며, 미리 충분히 생각하고 있는가?’

Yes or No

내 결정을 가로막는 장애물은
대개 나 자신이다.
내가 내리는 결정은 내 믿음을 드러낸다.

진실을 외면하면 두려움이 커진다.
그러나 자기 자신에게 진실하면
남들에게도 솔직해지기 쉽다.

나를 진심으로 아끼느 사람들에게
내가 착각하고 있는 것이 무엇인지 물어본다.

너무 강한 자아는
스스로를 착각 속에 빠져 있게 만든다.

진실을 빨리 볼수록
더 빨리 더 나은 결정을 내릴 수 있다.

정직성
내가 잘못 내린 결정은 그 당시의 내 착각에서 비롯되었다. 내가
더 나은 결정을 하는 것은 내가 깨닫는 진실에서 비롯된다.

진실을 알려면, 내가 진실이라고 믿으려 하지만 사실은 진실이
아닌 것, 즉 허구를 보아야 한다.
내 실수는 다른 사람이 더 잘 보기 때문에, 나는 자존심을 버리고
다른 사람들에게 내가 정말로 진실이라고 느끼는 것데 대해
의견을 구해 확인한다.

나는 과거의 결정들을 세심하게 돌아보고 배울 자세가 되어
있는가? 나는 내 주위와 내 안에서 실제로 일어나는 것들을
관찰하면서 현실을 확인하고 있는가? 나는 시간이 지나면
명백해지는 진실을 보고 있는가?
 나는 자신에게 진실을 얘기하고 있는가?

나는 개인적인 질문을 던져 내 마음에 묻는다.
‘나는 나 자신에게 정직하고, 내 직관을 믿으며, 내가 더 좋은
것을 받을 자격이 있다고 믿으며 결정을 내리는가?’

Yes or No

진실을 알아내는 가장 빠른 방법은
내가 진실이라고 믿는 허구를 찾는 것이다.

자신이 느끼는 기분이 자신의 길잡이다.

나의 느낌은 결정의 결과를 예고한다.

직관
내가 결정을 내릴 떄 어떤 느낌이 드는지 직관을 이용해 파악해야
한다. 그런 방식이 익숙해질수록 나는 값비싼 대가를 치러야 할지도
모를 실수를 미연에 막을 수 있다.
내가 결정을 내리는 방식에 대해 내가 느끼는 기분은 종종 결정의
결과를 예고하기도 한다.

나는 두려워하며 결정을 내리지 않을 것이다. 두려움은 내게 좋은
결과를 가져다주지 않기 떄문이다.
나는 나 자신이 아니라 더 좋은 길잡이의 안내를 받을 떄 훨씬 더
좋은 결정을 내릴 수 있다.

내가 느끼는 것은 압박감인가 평안함인가? 두려움인가 열정인가?
내가 두려워하지 않는다면 어떤 결정을 내리게 될까?
이 결정은 정말로 내 기분에 맞는 것인가? 그것은 내가 좋아하는
색깔을 볼 때, 친한 친구를 만날 때, 또는 편하게 산책할 떄
느끼는 것과 같은 기분인가?
내 기분에 맞는 게 아니라면 그 결정은 맞는 것이 아니다. 그럴 때는
다른 결정을 해야 한다. 나는 내 직관을 믿고 있는가?

나는 개인적인 질문을 던져 내 마음에 묻는다.
‘나는 나 자신에게 정직하고, 내 직관을 믿으며, 내가 더 좋은
것을 받을 자격이 있다고 믿으며 결정을 내리는가?’

Yes or No

우리는 무의식적으로 얼마만큼 받을 수 있다고
믿는 만큼의 결과만 얻게 된다.

성찰
내 결정은 내 믿음, 특히 내가 더 좋은 것을 받을 자격이 있다고
믿는 것에 영향을 받는다.
내가 정말로 믿고 있는 것을 알아내려면 내가 자주 하는 것을
세심하게 관찰해 보아야 한다.
나는 내가 더 좋은 것을 받을 자격이 있다고 생각할지 모르지만
내 행동은 종종 내가 그렇게 믿고 있지 않음을 보여 준다.

지속적으로 더 나은 결정을 하려면 나는 더 좋은 것을 받을 자격이
있다고 믿으면서 그런 믿음을 바탕으로 행동해야 한다.

나는 과거의 내 결정과 행동을 세심하게 돌아보면서
내가 정말로 무엇을 받을 자격이 있다고 믿는지 확인하는가?
나는 내 결정이 내가 믿고 있는 것을 어떻게 드러내는지 아는가?
나는 곧 실천할 수 있을 만큼 내 결정을 충분히 믿는가?
내가 더 좋은 것을 받을 자격이 있다고 정말로 믿는다면 나는
지금 어떤 결정을 내릴 것인가?

나는 개인적인 질문을 던져 내 마음에 묻는다.
‘나는 나 자신에게 정직하고, 내 직관을 믿으며, 내가 더 좋은
것을 받을 자격이 있다고 믿으며 결정을 내리는가?’

Yes or No

나는 우유부단하지 않으며, 중요한 부분이 빠진
어중간한 결정을 하지 않는다.

나는 이 시스템의 두 가지 요소,
차가운 머리와 따뜻한 가슴으로
지속적으로 더 나은 결정을 내린다.

나는 스스로 실제적인 질문을 던져
머리를 써 이성적으로 생각한다.
그리고 나는 스스로 개인적인 질문을 던져
내 마음에 묻느다.

그런 후에 나는 나 자신과 다른 사람들에게
귀 기울이고
더 나은 결정을 내려 그것을 실천한다.

내개 정말로 필요한 것이 무엇인지 알고,
정보를 모아 선택의 폭을 넓히고,
미리 충분히 생각하고 있는가?
Yes No

그것은 단순히 내가 원하는 것인가?
아니면 정말로 필요한 것인가?
내게 필요한 정보는 무엇인가?
나는 선택의 폭을 넓히고 있는가?
내가 ‘NO’라고 했을 때 어떤 일이 일어날까?
그리고 다음에는?

나는 나 자신에게 정직하고, 내 직관을 믿으며,
내가 더 좋은 것을 받을 작격이 있다고
믿으면 결정을 내리는가?
Yes No

나는 자신에게 진실을 말하고 있는가?
이것은 나에게 맞는 느낌인가?
내게 두려움이 없을 때 어떤 결정을 할 것인가?
내가 더 좋은 것을 받을 자격이 있다고 느낄 때
어떻게 할 것인가?
‘Yes’라면 결정을 내린다.
‘No’라면 다시 생각한다.

더 나은 결정은 무엇인가?