티스토리 뷰

Opinions

개발입문자 코드읽기 제안

Voyager Woo 2018. 7. 4. 21:34
반응형

컴퓨터관련 학과를 나와서 프로그래밍 과제를 풀고 개발자로 일도 하고 있는 나는 코드를 자연스럽게 읽게 되었던것 같다. 아니면 처음 코드를 보았을 때의 어려움을 잊었거나. 오랫동안 비전공에 프로그래밍 경험이 전무했던 신입 개발자를 가깝게 멘토링하면서 그것이 당연햐지 않음을 알게 되었다. 내가 깨달았던 많은 깨달음들을 전수했지만 그 친구는 더 어려워했다.

내가 했던 조언은 다음과 같다.

우선 막 따라 쳐봐라. 그러면 언젠가 이해가 간다.

코드는 한줄 한줄 실행된다. 한줄 한줄 다 이해할줄 알아야 한다.

코드는 규칙이다. 외우고 지켜야한다.

그 친구는 내 조언을 듣고 이렇게 생각했다.

'막 따라치라며. 근데 어떻게 한줄 한줄 다 이해할줄 알아야함? 그리고 그냥 외우면 한줄 한줄 어떻게 이해함?'

그런 이야기를 듣고 나도 고민에 빠졌다. 내 조언들이 뭔가 상충하는 느낌이 들었다. 고민 끝에 의도규칙을 구분하게 되었다.

코드의 의도규칙

나는 고민 끝에 의도규칙을 구분해서 생각할 수 있다는 것을 깨닫게 되었다. 그리고 내가 코드를 볼때 무의식적으로 그 두가지를 정보를 동시에 해석하고 있다는 것을 알게 되었다.

의도는 말그대로 코드를 작성한 사람이 하고자 하는 바를 나타낸다. 그리고 규칙은 그 의도를 컴퓨터(시스템)가 이해할 수 있게 작성하는 것을 나타낸다. 주로 프로그래밍 언어에서 문법, 함수 혹은 메서드의 시그니처 등이 될 수 있을 것이다.

(내가 깨닫기로 클린코드는 결국 그 의도를 명확히 하는 것이라고 여겨진다.)

이 두가지를 분리하고 그 개념을 추가해서 위의 조언을 명확하게 수정해보겠다.

(코드의 규칙을 익힐 때) 우선 막 따라 쳐봐라. 그러면 언젠가 (규칙이 익숙해지고 의도가) 이해가 간다.

코드는 한줄 한줄 실행된다. 한줄 한줄 (코드의 의도는) 다 이해할 줄 알아야한다.

코드는 규칙이다. 외우고 지켜야한다.

나의 제안

코드를 보는게 어렵다면 이 두가지를 분리해서 해석하는 것을 추천한다. 개인적으로는 의도를 먼저 파악하는 것을 추천한다. 이건 마치 공부할 때 개념을 익히는 것과 비슷하다. 그리고 그 의도에 해당하는 규칙을 파악하고 숙달해야한다.

만약 run2(run1()).run3()이런식으로 코드 한줄에 무언가 많은 일을 하는데 의도를 이해하기 어렵다면, 이건 남(선배 개발자)들도 어려울 가능성이 높다. 그러니까 좌절하지 말고 실행단위를 끊어서 변수로 할당해서 보면 좀더 쉽게 이해할 수 있을 것이다.

r1 = run1()
r2 = run2(r1)
r2.run3()

코드를 작성할 때도 마찬가지이다. 처음엔 길더라도 차근차근 단계별로 코드를 짜보는 것을 추천한다.

연습문제

let a = 10
let b = 23

let min = Math.min(10, 23)
print(`최소값 : ${min}`)
import urllib.request
from io import BytesIO
from PIL import Image


def save_http_url_image_file(img_url, save_path):
    with urllib.request.urlopen(img_url) as url:
        f = BytesIO(url.read())
        img = Image.open(f)
        img.save(save_path, 'png')
        return save_path


if __name__ == '__main__':
    _save_path = '/tmp/save_img.png'
    _img_url = "https://example.com/images/cat.png"
    
    save_http_url_image_file(_img_url, _save_path)
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

결론

사실 코드를 읽는건 시간이 흘러도 어렵다. 지금은 내가 너무 신입이라 어려운건가 하겠지만 아니다. 세상에 이해하기 쉽게 잘짠 코드보다 아닌 코드가 많기 때문이다. 그래서 언젠가 코드를 읽고 작성하는 것이 할만하다 싶으면 로버트 마틴의 '클린 코드'라는 책을 꼭 읽어보는 것을 제안한다.

반응형

'Opinions' 카테고리의 다른 글

서비스 분리시 고민할 점 - 이름 정하기  (0) 2019.12.21
좋은 개발자의 덕목 V2  (1) 2019.12.16
리팩토링을 하는 이유  (0) 2018.11.27
TDD 참관 후기  (0) 2018.10.24
좋은 개발자의 덕목 세가지  (0) 2018.07.18
개발입문자 코드읽기 제안  (0) 2018.07.04
댓글
댓글쓰기 폼