소프트웨어 교육의 필요성1(벌레잡기)


소프트웨어을 이용한 벌레(버그)잡기.
내가 말하는 소프트웨어는 간단한 소프트웨어를 의미하지 않는다.
코드라인이 적어도 5만라인 이상을 의미한다.
그만큼 복잡도가 있는 소프트웨어라는 전제하에 얘기한다.
그런 프로그램을 작성하기 위해서는 당연히 기초 프로그램을 익혀야 한다.
코딩을 하면 머리가 좋아지니 어쩌니 하는데 반만 동의한다.
기초를 익히는 것만으로 머리가 좋아진다는 것은 구라다.
if문 for문 또는 어셈블리와 변수등을 기본 재료를 배운다고 머리가 좋아져??
아니다. 단언컨대 아니다.
경험상으로는 디버깅하면서 사고가 논리적으로 많이 변한다.
간단한 프로그램도 디버깅은 필요하다. 하지만 그렇게 논리적인 사고가 없어도 가능하다.
코드가 워낙 간단하므로.
물론 처음에는 이것조차도 어렵다. 점하나 잘못찍어서 에러가 발생하는데 도통 알 수가 없다.
툴을 다루는데 서툰 것이지 논리적인 사고와는 별로 관련이 없다.
하지만, 복잡한 프로그램에서 버그가 발생한 경우에는 무턱대고 이것저것 고쳐 보아라.
벌레 잡기가 만만치 않다.
나도 생각하기 싫어하고 논리적인 사람은 아니다.
그렇다고 바보도 아니다.
계속해서 삽질을 하다 보면 이게 아닌데... 라는 생각이 든다.
그렇게 삽질하면서 근육을 키우다 보면 벌레를 잡기 위한 시나리오를 작성한다.
내가 하는 벌레 잡기 놀이는 아래와 같은 과정을 거친다.
1) 문제점에 대한 현상을 기록한다.
  -> 수사관이 증거를 수집하듯 증거가 될만한 현상은 캡처를 하든지 기록한다.
2) 수집된 현상(증거)를 가지고 예상 문제점1을 적어 본다.
3) 사고실험을 하여 논리적으로 맞지 않으면 예상 문제점2로 넘어간다.
4) 예상문제점2을 가지고 문제를 추적해 간다.
5) 다시 수정하여 수정 예상문제점2을 적고 다시 상세 추적하여
6) 문제점에 대한 원인을 정리
7) 원인에 대한 대책방법 수립

이런 과정을 거치면서 재현이 잘 되지 않는 문제점에 대해서 추적해 나간다.
회사라면 어려운 문제에 봉착했을때에는 집단지성을 이용하면 꽤 도움이 된다.
회의를 수집하여 자신만의 시나리오을 가지고 발표하고 사고실험을 하면서
아가리 파이터를 하다보면 조금 더 문제의 핵심에 다가갈 것이다.

소프트웨어 교육은 바로 이런 점에서 필요하다.
다른 어떤 교육보다도 논리적인 사고를 요구하고 훈련시키기 때문이다.
수사관들만 사건을 추적하는 것이 아니다. 소프트웨어 엔지니어라면 수사관들과 동일하게 문제점을 발견하고 실험해보고 추적해 가는 과정을 거치면서 논리적인 사고를 할 수 밖에 없다.


인지편항대도감1

 NEWTON 24년 3월호에 나온 특집기사를 요약해 본다. 인지편향은 마음의 안정과 신속한 판단을 가지는 장점과 함께 잘못된 판단 및 편견으로 이끄는  요인이기도 하다.  한번쯤은 이런 편향에 빠지지 않았는지를 자신을 돌아볼 필요가 있다. 1) 부정...