프로그래머가 자신이 경험한 것을 배움으로 발전시키려면, 학습하는 방법을 배워야 한다.
뭔가를 학습하는 방법을 배우는 첫 단계는 자신이 무엇을 알고 있고 무엇을 모르는지를 배우는 것이다. ("너 자신을 알라.").
독학하는 사람이 수업을 듣는 학생보다 유리한 점은 학습 내용을 자신의 필요에 꽃 맞도록 조절할 수 있다는 것이다. 앞 절에서 예로 든 수업에서 학생들이 배움에 실패한 이유는 두 가지다.
사실 이 두 가지 이유는 서로 보완적이다. 그 강사가 한 쪽을 돕기 위해 수업의 수준을 좀 더 높였다면, 안 그래도 어려워하는 다른 한 쪽은 완전히 이탈했을 것이다. 어느 한 방향으로 치우쳐도 문제가 생기는 형국이라, 그 강사는 진퇴양난에 빠져 있었던 셈이다.
이런 역설적인 상황을 해결할 방법은 학생 개개인의 상황에 맞춰 별도로 지도하는 방법 뿐이다.
.. 중략 ..
대부분의 사람들은 자신이 어느 유형에 속하는지 알고 있지만, 학습 계획을 세울 때 이를 활용하지 않는다.
학습은 능동적인 추구다. 프로그래밍을 학습할 때 능동적으로 배움을 추구해야 하는 경우가 두 가지 있다. 프로그램이 정확하게 동작할 때와 그렇지 않을 때다. 프로그램이 정확하게 동작할 때에는 3보 정도 뒤로 물러서서 달성한 성과를 전체적으로 관조해야 한다. 다른 비슷한 프로그램에서는 좀 더 문제가 많았는데 이 프로그램은 왜 성공했을까? 왜 전에는 그렇게 문제가 많았을까? 처음부터 다시 시작한다면 이 프로그램을 좀 더 쉽게 혹은 좀 더 효율적으로 작성하거나 더 나은 문서를 도출활 수 있을까? 만약 그렇다면, 지금 당장 실행할 수 있는 일은 무엇일까? 프로그램이 동작하는 것이 업무가 끝났음을 의미하지는 않음에도, 빨리 결과를 내라는 관리자의 압력 때문에 그런 식으로 잘못이 자주 일어난다. 그러나 프로그램으로부터 뭔가를 배우려는 프로그래머라면 그런 압력에 굴복하지 말고 자신의 성과를 되돌아볼 시간을 접해야 한다. 관리자도 프로젝트가 끝났을 때 프로그래머에게 하루쯤 휴가를 주는 것이 좋다. 그리고 이것은 보상의 의미가 아니라 프로그래머에게 프로젝트의 결과를 평가할 기회를 주는 것이다.
프로그램이 정확하게 동작하지 않으면, 더 많은 것을 배울 기회가 생긴다. 그러나 결과를 내는 게 급선무라는 압박감 때문에 프로그래머는 그저 동작만 하도록 봉합하는 선에서 문제를 마무리하고 싶은 유혹을 받는다. 결국 새로 배워야 하는 기술은 사용하지 않게 된다. 예를 들어, 어떤 프로그래머가 PL/1의 배열 표현을 배운 지 얼마 안 됐는데, 실제 업무에서는 배열과 관련된 문제가 발생했다고 하자. 그가 PL/1의 배열 표현이 너무 복잡하기 때문에 FORTRAN 시절에 많이 사용했던 DO 반복문으로 대체하기로 결정했다면, 제대로 배울 수 있는 황금 같은 기회를 놓치는 것이다. 뭔가가 필요한 시기만큼 배움에 적합한 시기는 없다.
그러나 현실적으로는 문제가 있다. 필요한 모든 기술을 익힌 후에만 프로젝트가 시작되는 것도 아니고, 관리자는 새로운 기술을 적용했을 때 아무리 좋은 결과가 예상될지라도 눈앞의 일정이 지연되는 것을 용납하지 못한다. 이렇게 모순적인 상황에서 프로그래머는 어떻게 해야 할까? 사실, 답은 간단하다. 새로운 기술을 적용해 보고 실패하면 그 이유를 조사하는 데 어느 정도의 시간을 쓰고, 만약 성과가 없다면 기존의 기술로 대체하여 문제를 일단 무마한다. 대신에 나중에라도 다시 시도할 수 있도록 테스트 테이스를 만들어 놓는다.
- 프로그래밍 심릭학 중 -
'프로그래밍' 카테고리의 다른 글
OCP, 추이 종속성(transitive dependency) (0) | 2020.11.03 |
---|---|
퍼사드 패턴(Facade Pattern) (0) | 2020.11.03 |
주석문 (0) | 2020.10.14 |
클래스의 구분. (0) | 2020.07.09 |
TDD(Test Driven Development) (0) | 2020.03.10 |