(push swap 경험기에서 이어집니다)
push swap 과제를 진행하면서 느낀점이라면 이전 과제들에서도 공통적으로 느꼈지만
저의 과제 수행시간이 너무나 오래 걸린다는것이였습니다
물론 앞선 과제들은 보너스나 테스터기의 추가 도전모드에 시간을 할애해서이지만
이번에는 순수 mandatory 부분만 하는데도 시간이 꽤나 오래걸렸고
정작 코드 작성한 시간은 별로 차지하지 않았습니다
대신 프로그램을 작성하기전에 어떤식으로 설계할지에 대해서
너무나 많은 시간을 들였다는것을 깨닳았습니다.
물론 설계가 나쁜건 아니지만 뭐든지 과하면 나쁜법이죠
아직 과제를 통과한건 아니지만 이 과제가 끝나갈때쯤이면 이러한 사고방식에 대해서 글을 써보고싶었고
이렇게 한번 써보게되었습니다
구글링에서 좋아보이는 자료도 찾게되어서 참고해가면서 작성해봤습니다
1.
우선 하나의 작은 목표를 정확하게 정합니다 (동시에 너무 많은 목표를 수행해서는 안됩니다)
2.
그 목표를 무작정 구현합니다, 구조던 정리던 상관없이 '실행가능한 최소한의 프로그램'의 형태를 갖추도록 합니다
3.
원하는대로 동작하면 그때부터 정리에 들어갑니다
4.
반복합니다
우선 하나의 작은 목표를 정확하게 정합니다
이 과제의 목표는 push swap을 하는 프로그램을 만드는것이였습니다
그럼 저는 그 목표에 해당하는 함수들만 만들고 제출해도 상관없는 것이였지만
저는 최대한 모듈화 해서 조합하는식으로 짜보려고 했습니다
그렇다보니 그저 3단계정도로만 쪼개지는 작업인데도 불구하고 함수는 많이 만들어졌고
그마저도 실력이 부족해서 호환은 잘 되지 않는게 현실이였습니다...
이번에 만든 함수들을 libft에 넣어서 바로 쓸수있게 하려면 어떤식으로 함수를 만들어야 할까...?
어떻게 해야 다른 프로젝트에서도 호출해서 사용할수있을까...?
함수 포인터를 배우긴 했는데 어떻게 해야 잘 활용할수있을까...?
위와 같은 추가적으로 잡다한 목표들도 동시에 수행하려니
행동을 섣불리 하기 어려워지고 어떻게 하면 이 모든것을 한번에 할까...? 라는 말도 안되는 생각을 하며
공책만 끄적거리고 있을뿐이였습니다
'우선은 파싱하는 부분부터 만들고 생각해보자' 라는 작은 목표를 하나 세우기로 합니다
그 목표를 무작정 구현합니다
어느순간 내가 프로그램을 만들고있는건지 라이브러리를 만들고있는건지 알 수 없는 상태가 되었고
컴퓨터에 적어놓은 코드보다 공책에 필기해놓은 글자들이 더 많은 모습이 되어버렸습니다...
뭔가 수단과 목적이 뒤바뀐것 같다는것을 느끼자마자 그냥 공책 덮어버리고 구현에 들어갔습니다
그래도 어느정도 필기하던 시간들이 무용지물은 아니였는지 어떤식으로 만들지 계획하는건 어렵지 않았습니다
하지만 예외상황들이 자꾸만 생각나서 여기저기 기우고 있다보니 어느순간 또 시간을 물쓰듯 써버리고 있는 제 모습을 발견할수 있었고 이대로는 끝도없다는 생각이 들었습니다
디버깅을 하던 다른 부분이랑 합치던 할수있도록 우선은 '실행가능한 최소한의 프로그램 상태'로 만드는것으로 구현 정도를 굳혔습니다
원하는대로 동작하면 그때부터 정리에 들어갑니다
일단 동작하는 상태가 되면 그때부터는 정리하는게 쉬워집니다 구현을 위해서 기능이 추가되는것도 아니고
이미 기본적인 구현자체는 되어있기 때문에 정해져있는 것들끼리 묶어주고 나눠주고 정리해주면 그만입니다
그러다가 나중에 다 갈아엎어야 하면 어떡하나요? -> 다시 쓰면됩니다 처음부터 다시 쓰는걸 무서워해선 안된다고 생각합니다 여태까지 막무가내로 만들어온것 같지만 그 과정속에서도 어떤식으로 했더라면 더 좋았을텐데...와 같은 의식들이 쌓여있기 때문에 다음번에는 더 깔끔하게 만들어집니다
그림도 그려진 그림을 수정하는것보단 아에 지워버리고 새로 그리는게 더 잘그려지는경우도 있잖아요?
반복합니다
그 다음번 작은 목표를 하나 정하고, 무작정 구현하고, 실행가능해지면 다른 부분과 잘 연결되도록 정리합니다
물론 이렇게 글 써놓긴 했지만 성격때문에 하루아침만에 고쳐질것같진 않습니다
옆에서 채찍질해줄 팀원이 있으면 좋을지도 모르겠네요
참고한것들