라벨이 Coding인 게시물 표시

첫번째 코딩 과제

이미지
신입 사원들이 들어오면 가장 먼저 하는 것 중 하나가 아주 간단한 프로그램을 작성해보도록 숙제를 내주는 것인데 코딩을 해본 경험이 적은 이들에게 목표를 주고 그 목표에 따라 소프트웨어 코드를 작성하는 것은 매우 중요한 일이다. 물론 회사 뿐만아니라 학생의 경우에도 처음은 있다. 경험적으로 첫번째 아주 짧은 코딩 과제는 Tic-tac-toe나 사다리 게임을 주는 편이다. 보통 학생에게 가이드한다면 다음과 같이 접근을 한다.

코딩 잘하는 법에 대한 단상

글쓰는 법에 대한 가이드는 있어도 코딩하는 법에 대한 가이드는 보지 못한 것 같다. 글을 쓸 때에도 탑다운으로 (워드의 개요 모드outline mode 활용할 때처럼) 쓸 때와 글 가는 데로 붓 가는 데로 쓸 때가 다르듯이 코딩도 유사함을 가지고 있다. 논리적 설계와 아키텍처의 중요성을 강조하다가 막상 아키텍처 설계가 일단락되어 실제 코딩 단계로 넘어가면 어쩔줄 몰라하는 친구들이 있다. 물론 코딩 못하는데 설계만 아주 잘하는 건 일반적으로 가능한 이야기는 아니고 이런 이들의 설계는 구멍들이 있거나 현실성이 부족한 경향이 있다. 코딩을 설계를 기반으로 topdown 방향으로 진행하려면 인터페이스나 메소드 시그너처 혹은 커멘트 등을 통해 계속 논리 진행을 코드화해나가야 한다. 아주 디테일한 구현을 하나씩 해나가면서 그야말로 코드 가는 데로 하는 방식은 코드 몰입이 좋을 때 별다른 문제없이 잘 된다. 하지만 디테일 코딩을 하기에 논리적 분량이 많고 여러 가지 고려할 경우의 수가 많은 경우는 메소드 시그너처를 먼저 작성하고 (여의치 않은 경우 소스코드에 커멘트로 디테일 계획을 적어둔다) 디테일은 하나씩 채워나가는 형태가 더 효율적이다. 한마디로 코딩할 땐 구현해야할 모든 걸 코드에 반영하는데 한꺼번에 다 상세 구현으로 반영할 수없는 부분은 윤곽만 코딩하는 것이다. 이것은 그림을 그리는 과정과도 유사하다. 기본 스케치를 먼저 하는 것은 설계 후 주요 인터페이스 시그너처를 정의하는 것이라 볼 수 있고 실제 상세 터치는 어떤 부분은 아주 세밀하게 한번에 그리고 어떤 부분은 윤곽부터 조금씩 구체화하는 방식을 사용한다. 대부분 두 가지 방식이 모두 사용되어야 효율적인데 한번에 상세로 그리는 집중력이 필요한 부분은 그렇게 하고 생각이 끊어지는 여러 부분들은 그 포인트만 먼저 윤곽을 잡는 식인 것이다. 스스로 코딩도 하지만 멤버들의 교육과 성장을 함께 고민하면서 스스로에게 여러 가지 실험을 하게 된다. 논리적 사고의 방법, 창의 도출의 방법, 설계의...

코딩에 대한 단상

벌써 4월 하순이다. 열흘만에 제품 하나 프로토타이핑을 하겠다고 했는데 곧 한달이 다 되어간다. 다행히 due date이 한달 정도 연기되어서 여유(?)가 생긴 것도 있고 현실적으로 주중에는 일정이 너무 빠듯하여 코딩을 하긴 어려워 주말 중심으로 코딩을 하다보니.. (주중엔 정말 혼절하는 일이 잦고.. ㅠ_ㅠ) 그래도 그와중에 진전이 되고 다시 코더로서의 흐름이 되살아나고 있다. 역시 믿을 건 내가 짠 기존 코드들.. ㅠ_ㅠ 설계를 상당히 상세한 수준으로 진행하고 난 다음에 top-down으로 코딩을 스크래치부터 시작하는데.. 코딩을 하면서 느끼는 안타까움은 설계를 열심히 하는 연구원들 중에 코딩을 못하는 친구들이 종종 있다는 것.. 물론 설계도 팀 회의 수준에서 편하게 발표할 때와 세미나 형식으로 앞에 나와서 할 때는 차이가 많이 나고.. 세미나 형식에서는 역시나 논리적 발표를 못하는 문제가 보통 보이지만... 문제가 뭘까 많이 생각해보고 어떻게 개선할 수 있을까 고민 중인데 현재까지 판단은 1. 앉아서 하는 팀 발표는 개별 사안을 산발적으로 편하게 얘기해도 다 이해하고 보통은 공통된 지식 기반이 많아서 일부 이슈만 가볍게 터치하면 되지만, 서서 하는 세미나는 좀더 큰 주제를 깊이있게 얘기할 것을 요구하기 때문에 훨씬 큰 논리성을 요구한다. 부담도 크고, 논리적으로 생각을 정리하기 위해서도 bottom-up과 top-down을 통해 개념 모델을 여러 번 다음어야 하는데 이런 일을 부담스러워하고 실제로 잘 극복하지 못하는 것이다. 논리가 산발적이고 나열적인 수준이라고 할까. 2. 그런 데로 작은 이슈들을 모아서 어느 정도 설계가 된 후에도 코딩을 전혀 시작하지 못하는 경우가 있는데 이건 왜 이럴까 생각을 해보면.. 설계는 큰 개념 모델을 통해 논리를 전개하지만 코딩은 철저하게 bottom 수준에서 시작해야 한다. task를 가능한 한 쪼개서 해야 하고 여러 개의 task를 동시에 머리에서 전개하면 진행하기 어렵다. ...