들어가며
꽤나 자극적인 재목이다. 하지만 내 심정을 표현하기에는 이것보다 적절한 제목은 없다고 생각했다. 최근에 개발과 관련된 잘못된 지식이 얼마나 잘 퍼지는 것인지 그리고 이런일이 왜 일어나는 것인지에 대한 경험과 생각을 적어보려 한다.
무슨 일인데?
2022년 3월, 면접 공부에 도움이 되는 깃헙 레포지토리를 추천받아서 읽어봤다. 바로 아래의 블로그인데 Star를 12.6k나 받고 레포지토리의 목적과 콘텐츠가 잘 정리되어있어서 면접 공부하기에 좋은 자료처럼 보였다. 초반을 읽어본 결과 너무 깊지도 않으면서 어떤 부분을 공부해야하는지 넓고 얇게 지식들이 정리되어 있었다.
그런데 자료구조 부분을 읽다가 눈을 의심하게 만드는 한 문장이 있었다.
Java Collection 에서 ArrayList 도 내부적으로 RBT 로 이루어져 있고, HashMap 에서의 `Separate Chaining`에서도 사용된다. 그만큼 효율이 좋고 중요한 자료구조이다.
순간 머리 속이 복잡해지기 시작했다. ArrayList가 RBT(Red - Black Tree)로 이루어져있다고? 아니 그럴리가 없는데? 그런데 12.6K나 star를 받은 레포지토리인데 이게 맞지 않을까?
그래서 내가 잘못 알고있는지 확인해보고자 아래와 같이 구글에 검색했다.
그런데 관련 내용을 찾을 수 없었다. 나는 더 혼란스러웠다. 혹시 최신 Java Collection의 ArrayList 코드 내부에 내가 모르는 RBT관련 로직이 있는 건가? 그럼 답은 하나다, 찾아보자. Github에서 어렵지 않게 OpenJDK의 코드를 찾을 수 있었고, 거기서 ArrayList 컬렉션 코드를 볼 수 있었다. 생각한 대로 RBT와 관련된 내용은 찾을 수 없었다.
https://github.com/openjdk/jdk17/blob/master/src/java.base/share/classes/java/util/ArrayList.java
GitHub - openjdk/jdk17: JDK 17 development
JDK 17 development. Contribute to openjdk/jdk17 development by creating an account on GitHub.
github.com
그럼 어디서부터 잘못되었을까? 출처가 궁금해서 해당 문장을 그대로 구글에 검색해보았다.
그랬더니 몇 개의 블로그에서 똑같은 문장이 그대로 적혀있었다. 여기서 나는 적잖은 충격을 받았다. 내가 생각하는 블로그는 자신이 경험한 일들을 공유하기 위한 활동이라고 생각했다. 요즘 개발자 취업시장에서 블로그가 중요시되는 만큼, 많은 사람들이 공부한 것을 블로그에 적는다는 것도 알고 있었다. 하지만 잘못된 내용이 이렇게 쉽게 전파되는 것을 보고 너무 충격을 받았다. 나도 지금까지 다른 분들의 블로그를 참고하여 개발을 진행하거나 공부를 한 적이 많았는데, 그 중에 잘못된 내용이 있을 것이라는 두려움 때문이었다.
그래서?
이번 일을 겪고 다짐한 것이 있다. 앞으로 공부나 개발을 할 때는 공식문서 또는 그에 준하는 명성을 가진 개발자의 포스트나 책을 참고해서 개발해야겠다는 것을. 인터넷이 나날이 발전하는 만큼 세상엔 지식이 빠르게 퍼지고 있다. 하지만 그 지식들이 모두 정답이라고 할 수는 없다. 특히 기초 공부를 하는 과정에서 오개념을 학습하게되면 나중에 고치기 어렵고 러닝커브가 길어지며 "아 이게 맞는데 왜 이렇지?"를 개발과정에서 자주 외치게 되리라.
정보의 홍수 속에서 찾기 쉬운 정보보단 접근하기 어렵더라도 순수하고 검증된 정보를 찾도록 노력하는 것 또한 개발자의 의무라고 생각한다.