////
Search
Duplicate
🪚

33. 개발자의 성격

소프트웨어 공학자에게 기본 재료는 인간의 두뇌이며 도구는 자신의 손이다.

1. 성격은 주제를 벗어난 것이 아닌가?

프로그래밍의 내적 탐구에 있어서 개인의 성격이 특히 중요하다.
지성은 어떻게 할 수가 없고 고전의 지혜도 마찬가지지만 개인의 성격에 대해서는 무언가를 할 수 있다. 그리고 성격은 훌륭한 개발자를 만드는 결정적인 요소다.

2. 지성과 겸손

뛰어난 지성은 필요 없다. 일반적인 프로그램을 완전하게 이해하려면 세부 사항을 받아들이는 무한한 포용력과 그것들을 파악할 수 있는 능력이 동시에 필요하다.
생각을 집중하는 방법이 지능보다 더 중요하다는 뜻이다.
다양한 좋은 프로그래밍 습관이 달성하고자 하는 목표는 뇌의 부담을 덜어주는 것이다. 다음은 몇 가지 예다.
시스템 분해의 핵심은 그것을 이해하기 쉽도록 더욱 간단하게 만드는 것이다.
재검토와 조사, 테스트 작업은 예상된 인간의 오류 가능성을 보완하는 한 가지 방법이다.
자신의 지적 능력을 스스로 올림에 한계가 있음을 인지하고 있기 때문에 다른 사람의 지적 능력을 이용해서 올리는 것이다.
메소드를 짧게 만들면 뇌의 부담이 줄어든다.
구현 세부 사항 수준의 관점 대신 문제 도메인 관점에서 프로그램을 작성하면 정신적 부담이 줄어든다.
경험적으로 자신의 오류 가능성을 보완하려 노력하는 겸손한 개발자는 자신뿐만 아니라 다른 사람도 이해하기 쉽고 오류가 적은 코드를 작성하는 것으로 밝혀졌다.

3. 호기심

뛰어난 개발자가 되는 과정에서 기술적인 문제에 대한 호기심은 매우 중요하다.
빠르게 변화하는 프로그래밍 세계에서 그러한 변화를 따라갈 호기심이 없다면 한물간 개발자가 될 것이다.
다음은 호기심을 훈련하고 배우는 것에 우선순위를 두기 위해 할 수 있는 몇 가지 구체적인 활동들이다.
개발 과정에 대한 자신의 인식을 구축하라.
책을 읽거나 소프트웨어 개발 과정을 직접 관찰하면서 개발 프로세스에 대해 더 많이 알게 될수록 변경 사항을 이해하고 좋은 방향으로 나아갈 수 있게 된다.
자신만의 가치관을 여러 경험들을 통해 쌓으라는 조언같다.
실험하라.
프로그래밍을 효과적으로 학습하는 방법 중 하나는 프로그래밍과 개발 프로세스를 작성해보는 것이다.
언어의 기능이 어떻게 작동하지 모른다면 해당 기능을 사용할 수 있는 프로그램을 작성한 다음 어떻게 동작하는 지 확인해본다.
문제 해결에 관한 책을 읽어라.
행동이 앞서기보다 분석하고 계획을 세워라.
성공적인 프로젝트를 학습하라.
문서를 읽어라.
설명서 좀 읽고 프로그래밍하자.
다른 전문가들과 관계를 맺어라.
컨퍼런스에 참여하거나 지역 사용자 그룹에 가입하거나 온라인 토론 그룹에 참여하라.
전문적인 개발자가 될 수 있도록 노력하라.
다음은 저자의 회사를 비롯한 몇몇 회사에서 사용하는 전문적인 개발 단계다.
1단계: 초보, 초보자란 한 가지 언어의 기본 기능을 사용할 수 있는 개발자를 말한다.
클래스와 메소드, 조건문을 작성할 수 있으며 해당 언어의 많은 기능을 사용할 수 있다.
2단계: 입문, 초보 단계를 넘어온 중급 수준의 개발자는 여러 언어의 기본 기능을 사용할 수 있으며 적어도 한 가지 언어를 능숙하게 다룬다.
3단계: 유능, 유능한 개발자는 한 가지 언어나 환경, 또는 둘 모두에 관한 전문적 기술을 갖고 있다.
4단계: 리더십, 리더는 3단계 개발자의 전문적인 지식을 갖고 있으며 프로그래밍이 컴퓨터와의 의사소통 15와 사람과의 의사소통 85%로 이뤄진다는 사실을 알고 있다.
가독성을 강조하지 않는 코더는 아마도 3단계에 머물러 있거나 아마 보통은 그 아래 단계에 있을 것이다.

4. 지적인 정직함

전문적인 개발자가 되기 위해서는 지적인 정직함과 타협하지 않는 능력을 개발해야 한다.
지적인 정직함은 보통 다음 같은 방법들로 명백하게 드러난다.
전문가가 아님에도 전문가처럼 행동하지 않는 것
실수를 기꺼이 인정하는 것
오류 메시지를 막기보다는 컴파일러 경고를 이해하려고 노력하는 것
컴파일해서 프로그램 작동 여부를 확인하기보다는 먼저 프로그램을 명백하게 이해하려고 노력하는 것
현실적인 상황에 맞춰 해결안을 제시하는 것
현실적인 일정표를 제공하고 관리자가 일정을 조절할 수 있는지 물었을 때 자기 뜻을 지키는 것

5. 의사소통과 협동

프로그래밍은 다른 개발자와의 의사소통이 우선이며 그 다음이 컴퓨터와의 의사소통이다.

6. 창의성과 훈련

창의성을 발휘하기 위해선 적절한 제약 조건이 필요하다.
코드를 작성하기 전에 요구사항을 분석하고 설계하는 제약 조건이 없다면 프로젝트에 대한 상당 부분을 구현 중에 알게 될 것이며 작업한 결과는 좋지 않을 것이다.

7. 게으름

게으름은 다음과 같은 방법으로 표출된다.
재미없는 작업을 미루는 것
재미없는 작업을 신경 쓰이지 않도록 빨리 처리하는 것
재미없는 작업을 다시 수행할 필요가 없도록 툴을 작성하는 것
첫 번째는 유익한 게으름이라고 말하기 어렵다.
두 번째는 재미없는 무언가에 최소한 시간을 투자함으로써 문제를 해결하려 노력하고 있다. 다만 이때 게으름이 앞서 꼼꼼함을 놓치지 않도록 하라.
세 번재는 재미없는 일을 처리하기 위해서 툴을 작성하는 것이다. 이는 장기적인 게으름이며 가장 생산적인 게으름이다.
무리하게 하거나 노력하는 것은 더 이상 효과적이지 않다. 무리함은 부가적이고 불필요한 노력이다.
효과적인 프로그래밍은 생각하는 것인데, 생각하지 않는 프로그래밍은 그 어느것에도 도움이 되질 않는다.

8. 덜 중요한 특성

인내심

포기할 때를 알기란 어렵지만 그 시기를 꾸준히 확인하는 것은 중요하다. 좌절하고 있다는 것을 알아차릴 때가 그러한 질문을 하기 좋은 시기다.
이 접근 방법을 사용하여 30분 안에 해결할 수 없다면 10분 동안 다른 접근 방법을 생각해 본 후 최적의 해결책을 한 시간 동안 시도해볼 것이다.

경험

소프트웨어 분야에서 책에서 얻는 학습과 비교한 직접 경험의 가치는 여러 이유로 다른 분야이 비해서 작다.
진정한 경험을 쌓으려면 행동해야 한다. 지속적으로 학습한다면 경험을 얻게 될 것이다. 그렇지 않으면 아무리 많은 시간이 지나도 경험을 얻지 못할 것이다.

별난 프로그래밍

프로그래밍에 몰입해야 한다. 밤을 새워 뭔가를 했다는 것은 자랑할 것이 되지 못한다.
내가 무엇에 흥분하고 있는지를 기억하자.

9. 습관

프로그래밍에서는 도움이 되는 습관을 개발하도록 노력해야 한다.
코드를 작성하기 전에 의사코드에 클래스를 작성하는 습관을 들인다.
컴파일하기 전에 코드를 주의 깊게 읽어보는 습관을 들인다.
나쁜 습관을 버리는 것은 새로운 습관이 자리를 차지하게 되면 자연스럽게 떨어져 나간다.

요점 정리

성격은 컴퓨터 프로그램을 작성하는 능력에 직접 영향을 미친다.
가장 중요한 성격을 겸손과 호기심, 지적인 정직함, 창의성과 훈련, 생산적인 게으름이다.
뛰어난 개발자의 성격은 대부분 재능과는 아무런 상관이 없으며 개인적인 발전을 위한 꾸준한 노력과 연관이 있다.
놀랍게도 지력과 경험, 인내심, 지구력은 이로운만큼 해롭기도 하다.
많은 개발자가 능동적으로 새로운 정보와 기술을 찾지 않는다. 대신 그들은 우연히 일을 통해 새로운 정보를 얻는다.
프로그래밍에 관한 책을 읽고 배우는 데 약간의 시간을 투자한다면 몇 달 혹은 몇 년이 지난 후 다른 일반 개발자과 확연히 차별화될 것이다.
훌륭한 성격은 주로 올바른 습관 형성의 문제다. 뛰어난 개발자가 되려면 올바른 습관을 개발하여 나쁜 습관을 대체하도록 하자.