ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 코딩
    Technician 2017. 6. 5. 05:09

    코드를 짜는건 (코딩은 사실 바느질 하듯이 짠다고 하는게 더 어감에 맞는듯하다) 공을 공중에 여러개 돌리면서

    저글링하는 것과 비슷하다.

    단순해 보이는 코드도 사실 생각하거나 고려해야 할 사항이 많이 있고, 이런 사항이 많을 수록 공중에 떠있는 공의 갯수는 늘어난다.


    예를 들면 대략 함수  3-4개 불리는 코드를 짠다면 관련된 함수들의 사용법을 숙지해야 하고, 관련된 내부 외부 변수들을 확인해야 하고. multi thread코드라면 shared 변수의 충돌이 없는지도.

    에러가 발생했을때 어떻게 처리할지도 생각해야 하고.

    다른 팀원과 업무가 나누어진 상태로 일이 진행되고 있다면 다른 팀원이 하는 일과 충돌하지 않는지 중간 중간 확인해야 하고. 전반적인 구조가 내 코드때문에 망가지지 않는지 확인해야 하고.

    이왕이면 새로운 코드가 유려하고(코드를 읽을 줄 아는 사람은 대략 코드를 통해서 아름다움을 느낄수 있다. 아름다운 코드는 존재한다) 읽기 편해야 하고... 등등등.


    대략 이런 고려사항들이 일을 진행하면서 머리속에 계속 돌아가고 있다. 느낌은 대략 3-4개 공중에 띄우고 돌리는 느낌이 난다.

    그래서 이런 공을 머리속으로 제대로 돌리려면 처음 일을 하기 전에 내가 작업할 기존 코드를 reading하고 관련 사항들을 모두 머리로 옮기는 작업을 한다. 코드를 reading하고 잘 이해가 안되면 아는 사람에게 물어보고, 관련 도큐먼트를 읽는다.

    머리속에 이런 잡다한 관련사항이 입력되 있지 않으면 공을 떨어뜨리는 실수를 한다. 이렇게 머리에 관련된 사항들을 copy하는 작업은 실제 코딩보다 시간이 더 오래 걸리고 고통스럽다. 그래서 일부 프로그래머는 다른 사람 코드의 관련사항을 머리에 옮기느니 새 코드를 처음부터 짜는걸 선호하기도 하지만, 그렇게 내 코드를 처음부터 시작하는 경우는 직업 프로그래머로 무척 드문 경우다.


    이런 관련 사항들이 머리에 숙지되면 대략 작업할 코드와 Wired되서 머리로 여러개 사항들을 동시에 고려하면서 코드를 짤수 있게 된다.

    그래도 언제나 내가 보지 못하는 부분이 있고, 그런 부분때문에  code review가 필요하다.


    이런 복잡한 일을 좀더 단순하게 만들기 위해서, 패턴이니 object oriented니 하는 여러 소프트웨어 관련된 컨셉들이 만들어졌고, 전형적인 것들은 될수 있으면 몸에 익혀서 거의 반사적으로 적용할 수 있게 만들는게 중요하다. 

    예를 들면 컨디션 문에 if(0 == ret) 을 쓸꺼냐 if(ret == 0)를 쓸꺼냐? variable naming을 myName으로 할거냐 my_name으로 할꺼냐? editor shorcut들은 다 외우고 있느냐? language 문법들은 다 숙지하고 있느냐? 사용 합수들에는 익숙해 있는냐? 주어진 문제에 적용할 software patter들은 다 숙지하고 있느냐? 이런 사항들에 시간을 들이고 생각을 하고 있으면 (물론 왜 그렇게 하는지 처음에 생각은 해야 한다. 하지만 결정이 되면 거의 반사적으로 쓸수 있어야 한다) 던지던 공 중 하나는 이런 단순한 일들을 생각하고 있는 와중에 떨어진다.


    단순 코더라는 애기를 하지만 사실 단순한 코딩은 없다. 코딩 자체도 굉장히 복잡하고 생각할게 많은 일이다.

    다만 코더에서 아키텍트로 되면 역시 higer level의 다른 종류의 공을 저글링해야 하기때문에 코더가 돌리는 공과는 다른 공을 가지고 일을 하게된다.


    세계신기록은 14개 볼을 저글링 한거라고...

    https://en.wikipedia.org/wiki/Juggling_world_records

    https://youtu.be/WK6AlhTjUbY




    반응형

    'Technician' 카테고리의 다른 글

    코딩 문제1: 큰 숫자 계산 (arithmatic operation with very big number)  (0) 2018.03.25
    나의 프로그래밍 수준  (0) 2017.08.20
    Code review  (0) 2016.11.20
    Agile  (0) 2016.07.24
    새직장  (0) 2016.01.16

    댓글

Designed by Tistory.