책을 읽으며 기록합니다.
유수의 대학에서 컴퓨터를 전공하고도 코드 한 줄 못 짜는 사람들은 넘쳐남. 프로그래밍은 참 어려움.
이 현상의 근본적인 이유는 대부분 컴퓨터 교육 과정이 프로그래밍의 기술과 지식을 가르칠 뿐, 그것을 스스로 응용할 수 있는 능력을 주지는 못하기 때문임.
이는 컴퓨터 과학 교육이 실제 학문이 발전하는 방향의 반대 순서로 이루어져 있기 때문!
실제 학문이 발전하는 방향: 학자들의 직관 -> 시행착오 & 경험으로 학문의 기초가 됨 -> 공리와 법칙을 만들고 학문의 체계를 정리해 나감
컴퓨터 과학 교육: 최종 결과물인 복잡한 개념과 도구 제시 -> 개념의 이론 설명 -> 연습 문제 풀기 (해당 과정에서 이론을 만들기 위한 직관과 경험적 요소는 배제됨)
직관과 경험적 요소를 얻는 가장 좋은 방법 = 프로그래밍 대회 문제 풀기! (PS)
프로그래밍은 문제 해결임. 따라서 많은 제약 조건과 요구사항을 이해하고 최선의 방법을 찾아내는 능력은 분야를 막론하고 좋은 개발자가 되기 위해 필수적임.
많은 제약 조건과 요구사항을 이해하고 최선의 방법을 찾아내는 능력 = 문제 해결 능력
문제 해결 능력을 훈련하는 방법은?
바로 프로그래밍 대회에 참가하는 것! 프로그래밍 대회란, 짧은 요구사항을 제시하고, 이에 맞는 프로그램을 시간 안에 빠르게 작성하는 능력을 겨루는 대회를 말함.
7부 = 1~2부 (필요한 기본 지식) + 3~7부 (문제 해결에 필요한 기술)
이책의 연습 문제들은 모두 알고스팟에서 채점 받을 수 있음.
컴퓨터 과학을 전공하는 학부생을 주 독자층으로 가정. 고등학교 수학 과정을 이수했으며 C++과 STL을 사용할 수 있다면 충분함.
2, 3, 4, 6, 7, 8, 18, 19, 21, 22, 23, 27, 28, 29, 30 순서로 가장 중요하고 기초적인 주제만을 우선 소화한 후, 다시 읽으며 빈 곳을 메꿔가기.
대회에 필요한 주제들은 엄청 많음. 따라서 막 이것 저것 푸는 경우가 많음. 하지만 복잡한 알고리즘을 하나 더 아는 것보다 실제로 자신이 아는 것을 이용해 문제를 풀 수 있는 능력이 훨씬 중요함. 따라서 제대로, 많이 풀며 경험을 쌓는 것이 중요함.
채점 사이트 이용해서 자신이 제대로 풀고 있는지를 확인하기.
혼자서 문제를 푸는 것보다 훨씬 많은 도움과 자극이 됨.