본문 바로가기
IT 공부/이런 저런 생각들..

개발 공부를 하면서 느낀 개발 공부의 특징

by exdus3156 2023. 11. 21.

개발 공부가 왜 이렇게 어려울까?

남들에 비해 느린 학습 속도 때문에 나는 이런 질문을 자주 나에게 던지곤 했다.

물론 내 성격이 모르는 것이 있으면 해소하지 않는 이상 다음 단계로 나아가지 못하는 성격 때문도 있을 것이다.

이건 장점이자 단점이다.

하지만 이런 성격과는 별개로 개발 공부가 쉽지 않다는 것을 자주 느낀다.

최근에 객체지향 설계와 관련해 예전에 구매한 책 두 권을 다시 읽기 시작하며 개발 공부 자체의 특징에 대해 조금 실마리를 얻기 시작했다.

책 하나는 조영호 님의 <객체지향의 사실과 오해>라는 책이고, 다른 하나는 스티브 맥코넬의 <코드 컴플리트>라는 책이다.

나는 자바의 문법은 이해했지만 그걸 왜 쓰는지 전혀 모르는 괴로움으로 인해 꽤 오래 전에 이 책을 구매했었다. 1~2년 되었을 것이다.

그런데 그때는 정말 아무리 읽어도 너무 추상적으로 느껴졌다.

그래서 읽다가 포기하기를 십몇 번은 넘은 것 같다.

그런데 이제 와서 갑자기 이런 책들이 말하고자 하는 내용이 가슴에 와닿기 시작했다.

"아 이게 이런 말이구나!" 

이런 식으로 유레카를 외친 것이 한 두번이 아니다.

객체지향이 너무 매력적으로 다가오고, 또 코드 컴플리트에서 조언하는 클린 코드가 이런 말이구나! 감탄을 연발 했다.

<코드 컴플리트>의 클린코드는 단순히 코드를 클린하게 쓰라는 말을 넘어서서 객체지향의 본질을 이해하지 못하면 절대 깨달을 수 없는 내용이었던 것이다.

그런데 나는 왜 예전에는 이해 못했던 것이 지금에 와서야 이해가 되는 것인지 궁금했다.

어쩌면 개발의 다양한 기술과 이론이 고등학교 수학처럼 깔끔하게 단계로 나눠지지 않기 때문이 아닐까 싶다.

개발 공부의 각 내용들은 초보에서 전문가로 깔끔하게 이어지는 경로가 아니다.

온갖 레벨의 내용들이 뒤섞여 있다.

객체지향도 마찬가지 아니었을까?

<객체지향의 사실과 오해>를 읽고 처음에 전혀 이해하지 못했던 이유는 이 책을 이해하기 위해 넘어야 할 산들이 뒤죽박죽 얽혀 있었기 때문이었던 것 같다.

객체지향을 이해하려면 자바와 같은 문법을 알아야 하고, 또 그 문법으로 알고리즘이나 자료구조를 설계하며 문제를 풀어봐야 하고, 스프링과 같은 프레임워크를 통해 간단하게나마 개발을 해봐야 하고, 거대하고 생소한 시스템에 대한 고민하는 과정을 겪어봐야 한다.

그런데 문제는 위 과정들을 거치려면 이상하게도 또 객체지향 개념을 알고 있어야 한다. 스프링은 그 자체로 객체지향의 베스트 프랙티스다. 스프링을 이해하려면 객체지향을 알고 있어야 한다. 자료구조에서 말하는 ADT는 데이터 구현부를 무시하고 연산에 집중하게 하는데, 이 추상화는 결국 객체지향 개념과 이어진다. 그리고 또 자바 표준 라이브러리는 객체지향 설계로 구성된 것들이다.

이렇게 얼기고 섥혀 있는 것이다.

개념들이 뒤죽박죽이다. 서로 순환하는 의존 구조를 그리고 있다.

그래서 힘든 것 같다.

여기서 찔끔, 저기서 찔끔, .... 이런 식으로 헤딩해가며 각 과목을 쬐끔씩 깨우치는 방법이 최선이었던 것이다.

수학고 달리 선명하게 개념들이 단계적으로 구분되지 않고, 서로 얽혀 있다. 그래서 힘든 것이 아닐까...!!