본문 바로가기

전체 글115

구현하는 것은 원래 어려운 것입니다. 나 또한 아무것도 없는 상태에서 무엇인가를 구현하라고 하면 경험이 없는 상태에서는 두려움이 앞서 시도조차 하지 않는 경우가 많았다. 의 서문에 나오는 말인데, 제로 베이스에서는 원래 시작할 수 없으니 충분히 다른 사람이 만든 코드를 참조하는 것이 나쁘지 않다는 뜻인 것 같다. 나도 모르게 개발자는 아무것도 없는 상태에서 모든 것을 혼자서 뚝딱 만들 수 있다고 착각해왔던 것 같다. 2023. 12. 2.
문제를 정확히 정의할 줄 아는 능력... 1. 디스크 파일 정렬 문제 존 벤틀리의 의 첫 칼럼에서는 아래와 같은 사례가 있다. 그 프로그래머의 질문은 간단했다. "디스크 파일을 어떻게 정렬하지?" 내가 처음에 어떤 실수를 했는지 말하기 전에, 여러분에게 내가 했던 대답보다 더 잘 할 수 있는 기회를 주겠다. 여러분이라면 어떻게 대답했을까? 처음에 저자는 아무 생각없이 "merge sort를 써" 라고 대답했다. 그러나 이내 자신이 엉뚱한 대답을 했다는 것을 깨달았다. 프로그래머가 처한 문제 상황은 정확히 다음과 같았기 때문이다. 이 기능은 큰 시스템의 일부이기 때문에 메모리를 많이 사용할 수 없다. 기껏해야 1MB 정도다. 파일은 최대 10,000,000(1천만)개의 레코드를 가진다. 각 레코드는 7자리 양의 정수이며, 모든 정수는 서로 중복되.. 2023. 11. 29.
공부 불안 코드 구현에서 잠시 멈추고 지금은 와 같은 책들을 유심히 보고 있다. 왜냐하면 온갖 기술들이 너무나 난무하다보니, 각 기술들이 소프트웨어 개발 프로세스에서 차지하는 어떤 위상이나 위치, 개념을 알고 싶었기 때문이었다. 지금까지 계속 어떤 기술(프로그래밍 언어, 프레임워크, 데이터베이스, ...)이 있고, 이런 문법을 사용하면 ~~한 기능을 사용할 수 있다는 식의 공부만 해왔다. 하지만 어느 순간부터 무언가 전진하고 있지 못하고 있다는 느낌이 들었다. 온갖 기술들을 개별적으로 이해하기에 앞서 애초에 개발 프로세스에 대한 전체적인 청사진을 그리고 싶었던 것이다. 기술을 숙달하는 것보다 그저 프로그래밍이란 무엇이며, 개발이란 무엇인지 알고 싶었다. 디버깅, 테스팅, 요구사항 분석, 설계, 버전 관리 도구, 협.. 2023. 11. 28.
배열에 대해.. 자료 구조와 알고리즘 구조가 같아야 할까? 배열(Array)은 대부분의 프로그래밍 언어가 지원하는 기본 데이터 타입으로, 같은 형식의 데이터를 인덱스를 통해 임의 접근(random access) 할 수 있는 자료구조다. 프로그래밍 언어를 배우는 초창기에 배열에 대해 학습하기 때문에 개발자에게 너무나 친숙한 자료구조이고, 조금만 훈련하면 누구나 쉽게 배열을 사용할 수 있다. 하지만 약간은 생각해볼 거리가 있다. 왜냐하면 자료구조와 알고리즘 구조가 같아야 한다는 코딩 원칙을 지켜야 한다면, 배열이 어떻게 사용될 것인지 고려해 볼 법한 요소가 있기 때문이다. for (int i = 0; i < arr.length; i++) { //... } 위 예제에서 arr을 도대체 어떻게 선언해야 하는 것이 좋을까? 너무나 습관적으로 배열을 선언할 수도 있고, 전.. 2023. 11. 27.