본문 바로가기

전체 글115

실력이 좋은 개발자가 높은 임금을 받는 이유. 실력이 좋은 개발자와 아닌 개발자의 차이는 도대체 어디서 생기는 것일까? 메타의 마크 저커버그는 실력이 좋은 개발자는 그렇지 않은 개발자에 비해 100배의 차이를 보인다고 말했다. 처음에는 도대체 저 100배라는 것의 근원이 무엇인지 궁금했다. 생각하면 정말 소름 끼치는 차이다. 나는 당연히 현재 공부하고 있는 취준생이기 때문에 실력이 좋지 않다. 그래도 열심히 하면 쓸만한 개발자가 될 수 있을 것이라 생각했다. 그런데 나보다 실력이 좋은 사람은 나보다 최소 100배, 1000배 이상의 실력을 갖추고 있다니... 아무리 생각해도 생산성이 어떻게 100배나 나올 수 있는지 궁금했다. 그리고 오늘 공부를 하면서 읽은 책의 아래의 내용에서 생산성 차이가 어떤 의미인지 알 것 같았다. 필자는 2008년 당시 구.. 2023. 11. 5.
메모리 계층 구조와 알고리즘의 공학적 한계 1. 개발에 있어서 컴퓨터 하드웨어 문제 컴퓨터 기계 장치의 하드웨어적인 본질은 무엇일까? 폰 노이만 아키텍처에 따르면, 컴퓨터의 기계적 본질은 프로세서인 CPU와, 데이터와 명령어가 저장된 스토리지인 RAM이다. RAM와 CPU 두 하드웨어만 있으면 그것이 곧 흠 잡을 데 없는 컴퓨터다. 튜링 기계와 등가다. 실제로 컴퓨터 장치를 공부할 때, NAND 게이트를 차곡차곡 조립해나가 8비트나 16비트 컴퓨터를 만들 때가 있는데, 이때도 간단한 CPU와 RAM만으로 컴퓨터를 완성할 수 있다. 이것만으로도 컴퓨터의 원리를 설명하는데 충분하기 때문이다. 그러나 컴퓨터는 기계 장치다. 물리적인 제약 조건에 강하게 결합되어 있다. 실제 컴퓨터는 구체적인 재료와 물리적인 비용을 바탕으로 설계된다. 즉, 그 속도와 명.. 2023. 11. 3.
수열에서 중간값 찾기 문제와 분할/정복 알고리즘의 정수 1. 중간값 찾기 문제 임의의 N개의 원소를 가진 수열이 주어졌을 때, 그 중간값을 찾는 문제다. 여기서 중간값이란 그 값을 기준으로 작은 모든 원소들과 그 값보다 큰 모든 원소들을 이등분하는 값을 말한다. 간단하게 생각하면 정말 정의 그대로, 그냥 주어진 배열을 정렬하고 중간에 있는 값을 선택하면 될 것 같다. 물론 그렇게 해도 풀리며, O(N logN) 정렬 알고리즘을 선택해 사용하면 될 것이다. 그러나 이렇게 푸는 것은 매우 아쉽다. 컴퓨팅 사고력에서 중요한 능력 중 하나는 쓸데없는 계산을 줄이는 것이라고 배웠다. 지금 문제는 중간값을 찾으면 되지, 굳이 정렬까지 할 필요는 없다. 위치만 알면 되기 때문이다. 나는 이 문제를 N/2 크기의 힙(Heap) 자료구조를 이용하는 식으로 생각했다. Min .. 2023. 11. 2.
코딩 주석 코딩을 할 때 주석을 달라는 말을 많이 듣는다. 주석이 있어야만 다른 사람이 코드를 이해할 수 있고, 미래의 나에게도 도움이 된다는 것이다. 물론 코드가 그 자체로서 요구사항을 충실히 반영하고 쉽게 읽혀진다면 주석이 필수는 아닐 것이다. 그러나 그렇다고 주석을 빼서는 안 된다고 한다. 즉, 주석은 처음부터 타인과의 소통과 협업을 위해 만들어진 도구다. 지금 혼자 독학하고 있는 나로서는 타인이 나의 코드를 바라보는 관점을 획득하기 힘든 환경이다. 마틴의 에서는 주석의 중요성을 강조한다. 그래서 한동안 주석 작성법을 열심히 배웠지만, 당연히 소용이 없었다. 왜냐하면 주석 다는 법은 술(術)의 영역이고, 주석의 도(道)는 타인이 코드를 어떻게 읽고 해석하는지 그 관점을 획득하는 것에 있기 때문이다. 당연히 술.. 2023. 11. 1.