퍼포마의 야근근절을 위한 코딩

퍼포먼스마케터가 코딩을 시작하기에 앞서 고려하면 좋을 4가지

인생은스트러글 2022. 4. 23. 22:59

[목차]

0. 여는 말

1. 내가 코딩으로 이루고자 하는 목표를 '측정 가능'하도록 '명확히' 하자

2. 내가 원하는 결과물과 그 형태, 그리고 그것에 필요한 입력자료들의 종류와 형태를 '구체적으로' 정의하자

3. 출발점과 도착점이 정해졌다면, 그 사이의 프로세스를 '최대한 구체적이고 상세하게' 정의하자

4. '투입시간 효율성'과 '확장성'을 고려하자

5. 맺는 말


0. 여는 말

 

코딩에 대해 본격적으로 글을 쓰기 전에, 코딩할 때 고려하면 좋을 4가지에 대해 먼저 다뤄보려 합니다.

당장은 이것들을 모르셔도 코딩을 시작하는 데 큰 불편함은 없으실 거에요. 하지만 코딩으로 만들고자 하는 결과물의 크기가 커지고 복잡해 질수록, 이것들을 모른 채 무작정 코딩부터 시작한다면 수많은 시행착오들을 겪게 되실 가능성이 높습니다. 여기서 다룰 4가지 내용들은 그러한 시행착오들을 사전에 방지하는 데 도움이 될 것이니, 당연해 보이고 지루할 수 있지만 끝까지 읽어 주시길 부탁드리고, 앞으로 코딩할 때마다 기억해 주시기를 바라며, 글 시작하겠습니다.
(바쁘시다면 각 항목 서두에 달아 놓은 문장들만 읽어 주셔도 좋습니다 ^_^)


 

1. 내가 코딩으로 이루고자 하는 목표를 '측정 가능'하도록 '명확히' 하자
목표가 명확하고 측정 가능할 때, 더 집중하여 높은 퀄리티를 낼 수 있고, 정확한 평가 및 개선이 가능하다.

사람은 막연한 목표보다 구체적인 목표를 향해 노력할 때 더 집중할 수 있다고 믿는 편입니다. '그냥 해보지 뭐' 같은 막연함보다는 '같은 양의 업무에 드는 소요시간을 단축하겠어' 또는 '같은 시간에 대한 업무 처리량을 늘려보겠어' 같은 명확한 목표가 더 좋다는 것입니다. 명확한 목표는 코드를 짜다가 중간에 길을 잃었을 때, 다시 길을 찾을 수 있는 좋은 이정표가 되어줄 것입니다.

.

또한 그 목표는 '측정 가능'해야 합니다. 제가 존경하는 인물들 중 하나인 '피터 드러커'가 했던 유명한 말이 있는데요, 여러분도 이 문장을 가슴 속에 품었으면 하는 바람으로 공유해 봅니다.

"측정할 수 없다면 관리할 수 없고, 관리할 수 없으면 개선시킬 수도 없다"

 

갓터 드러커 형님,,

여러분께서 짠 코드와 그 결과물이 '좋은지 아닌지'를 판단하고 개선하려면 '명확한 측정 기준'이 있어야 한다고 생각합니다. '흠... 나쁘지 않은 듯?' 정도로 여러분의 코드와 결과물을 판단해서는 부족하다는 것입니다. 이 글을 읽는 많은 분들의 목표는 아마도 '짜치는 업무의 자동화/효율화'일 것이기 때문에 '업무 소요시간 단축' 혹은 '업무 처리량 증가' 등이 상세 목표가 될 수 있을 것 같네요. 그렇다면 내가 만든 코드를 사용했을 때 그렇지 않았을 때보다 시간이 몇 분이나 단축되었는지, 또는 같은 시간에 쳐낼 수 있는 업무가 얼마나 더 늘었는지 등을 기준으로 결과를 측정하시면 좋을 것 같습니다. 


 

2. 내가 원하는 결과물과 그 형태, 그리고 그것에 필요한 입력자료들의 종류와 형태를 '구체적으로' 정의하자
출발점과 도착점은 최대한 구체적이어야 하며, 얼마나 가야 할지 알고 가는 것과 모르고 가는 것의 차이는 크다.

코딩할 때 원하는 결과물이 정확히 어떤 형태로 생겨야 할 지에 대한 고민 없이 일단 타이핑부터 하고 보는 사례들을 적지 않게 봐 왔습니다. '상상이 잘 안 되는데 일단 코드를 짜다 보면 뭔가 나오지 않을까'라는 생각으로 그렇게 하고는 하는데, 가끔 진짜 실마리가 나오는 경우도 있지만 대개는 중간에 길을 잃습니다. 한참 코딩하다가 '내가... 뭘 하려고... 했지...?'가 되는 것입니다.

 

내가... 뭘 하려고... 했지...?

그렇게 되지 않으려면 내가 원하는 결과물(output)은 무엇이고 어떤 형태여야 하는지 (=어떤 정보들, 어떤 열(column)들을 가지고 있어야 하는지 등)에 대해 명확히 인지하고 있어야 하며, 또한 그것을 위해 필요한 입력(input) 자료들은 어떤 것들이 있고 어떻게 생겼는지를 명확히 알고 있어야 합니다. 그렇게 되었을 때, 전체 프로젝트의 출발점과 도착점이 명확해지면서 내가 가야 하는 길의 길이가 대략 얼마나 되고 난이도는 얼마나 될지 가늠해 볼 수 있을 것입니다. 끝이 보이는 길을 가는 것과 보이지 않는 길을 가는 것의 차이는 꽤 클 것입니다.


 

3. 출발점과 도착점이 정해졌다면, 그 사이의 프로세스를 '최대한 구체적이고 상세하게' 정의하자
가장 지난(至難)한 작업이겠지만, 여기서 고생한 만큼 이후 작업들이 훨씬 편하고 수월해질 것이다.

나중에 코딩 작업이 익숙해지면, 오히려 코딩보다 이 과정이 더 어려우실 수 있을 정도로 이 작업은 지난(至難)하고 까다로운 작업입니다. 이 구체적인 프로세스를 디자인하다 보면 머리가 아프고, '아 일단 코드부터 짜 보자. 짜다 보면 길이 보이고 어떻게든 되겠지' 하면서 시작하시는 경우가 적지 않을 것입니다. 그게 실제로 먹히는 경우도 간혹 있기는 하나, 경험상 대개는 어느 정도 코딩을 진행한 중간 지점에서 '이제 어떻게 해야 하지? 이제는 내가 뭐가 필요한지도, 뭐를 하고 있는지도 잘 모르겠어'의 카오스 상태가 되며, 오도가도 못하는 상황에 처했던 것 같습니다.

 

길을 잃었다~ 어딜 가야 할까~

어떤 데이터들을, 어떤 열(column)들을 기준으로, 어떤 순서로 결합할 것인지, 그리고 어떤 데이터들은 지우고 무엇을 남겨야 할지 등 고려해야 할 요소들이 너무나도 많고 머리가 아픈 지난한 작업입니다. 하지만 여기서 쏟은 시간 만큼 이후 과정에서 겪게 될 고통들을 피할 수 있게 될 것이라고 생각해 주시고, 이 단계에서 시간을 충분히 투자해 주시길 바랍니다.


 

4. '투입시간 효율성'과 '확장성'을 고려하자
멋진 코드보다는 '잘 돌아가는 코드'를, 취약(fragile)하기보다는 '강인(robust)한 코드'를 짜도록 해 보자

효율성과 확장성 둘 다 중요하지만, 초보 분들은 '투입시간 효율성'을, 조금 코딩 실력이 쌓이신 분들은 '확장성'에 조금 더 중점을 두고 봐 주시면 좋겠습니다.

초보 분들께서 종종 하시는 생각 중 하나가 '군더더기 없고 깔끔한, 세련된 코드를 짜겠다'입니다. 그러나 처음부터 그런 코드를 짠다는 것은 상당히 어려운 일입니다. 코딩 작업에 주어진 시간은 대개 한정되어 있기 때문에, 세련됨에 지나치게 신경을 쓰다 보면 정해진 시간 내에 원하는 기능을 구현하지 못하게 될 수도 있습니다. 그렇기 때문에 초보 분들은 '일단 잘 작동하고 원하는 결과물이 나오는 코드'를 짜는 것에 더 집중하시기를 추천드립니다. 저희의 1차 목표는 '아름다운 코드를 짜는 것'이 아니라 '내 업무를 효율화하는 것'임을 기억해 주세요.

한편, 조금 코딩 실력이 쌓이신 분들은 코드의 '확장성'에 대해 고민을 시작하시면 좋을 것 같습니다. 코드를 한 번 쓰고 끝낼 것이 아니라 반복하여 사용할 것이라면, 나중에 데이터 크기가 지금보다 커졌을 때에도 문제가 없을 것인지ㅡ예컨대 API 요청 횟수 제한에 막혀버리거나 너무 빠른 크롤링 속도 때문에 서버 측으로부터 차단을 당하는 등ㅡ경우의 수들을 최대한 고려하여, 다양한 변수 발생에도 정상 작동하는 튼튼하고 강인한(robust) 코드를 고민해 보는 것도 좋은 훈련이 될 것입니다.


 

5. 맺는 말

앞서 말씀드린 사항들이 많고 복잡해 '코딩 시작하기도 전에 기를 죽이는 것이냐!'라고 생각하실지도 모르겠습니다.

 

왜 우리 애 기를 죽이고 그래욧!

그러나 위에서 언급한 시행착오들은 사실 모두 제가 겪었던 일들입니다. 물론 지금도 배울 것들이 많고 갈 길이 먼 저이지만, 실력이 더 낮았던 초반에는 위 내용들의 중요성을 간과하고 '대충 이렇게 하면 될 것 같은데?'라는 생각이 들면 일단 코드부터 치고 봤습니다. 그 결과, 중간에 내가 뭘 하고 있던 것인지 까먹어 길을 잃기도 했고, 삼천포로 빠져서 결국 프로젝트를 엎고 처음부터 다시 시작해야 하기도 했고, 프로젝트가 커지면서 기존 코드가 너무 느려 개선해야 하는 상황들도 있었습니다.

비록 시작이 조금 느려질지라도 (사실 그래봤자 며칠 차이라 길게 보면 별 차이도 없을 겁니다 ㅎㅎ), 위와 같은 내용들을 생각하면서 코딩을 시작하신다면, 여러분들은 제가 그랬던 것보다 더 빠른 속도로 성장하실 수 있을 것이라 믿어 의심치 않습니다.

.

오늘도 긴 글 끝까지 읽어주시느라 정말 고생 많으셨습니다.

다음부터는 본격적으로 어떤 언어로 코딩을 해 볼 것인지, 어떤 도구를 사용할 것인지 등에 대해 하나씩 다뤄보도록 하겠습니다.

궁금하신 부분이나 글 써 줬으면 좋겠다는 부분이 있으시다면 말씀 주세요. 언제나 환영입니다 (_ _)

우리들의 스트러글(struggle)하는 현생, 화이팅입니다!
반응형