Reading «The Practice of Programming» by Kernighan and Pike. (russian)

На дворе 2008 год. Я прихожу в библиотеку института и прошу дать мне «Капитал», тот самый, за авторством Карла Маркса и Фридриха Энгельса. Библиотекарши смотрят на меня недоумённо, и осторожно спрашивают: «а вам зачем?». Бывает у меня в жизни такое, что уже заготовил заранее простой, понятный, разумный, скучный ответ, чтобы побыстрее отстали, а ровно в тот момент, когда этот самый вопрос задают, в мозгу молнией проскакивает какая-нибудь шальная мысль, и я ляпаю что-нибудь, с одной стороны правдоподобное, с другой невероятное. «Как», отвечаю я им – «по Истории Партии коллоквиум, надо подготовиться». Глаза у библиотекарш становятся как блюдца, они все замирают, даже те, кто заняты своим делом, поворачиваются ко мне, и на несколько секунд повисает пауза, а потом работающая со мной библиотекарша осторожно интересуется, «что, опять?». Ну, уже шалость сделана, надо теперь поддержать марку, и я немедленно нахожусь, что ответить: «ну это же курс по выбору, видимо, мало, кто посещает». Библиотекарша немного приходит в себя, и говорит, что ей нужно пойти в запасник, потому что таких книг у неё давно никто не просил, но запасник находится всего-навсего этажом ниже, поэтому мне нужно подождать всего-навсего минут десять, и затем удаляется.
Эти десять минут я стою и смотрю, что берут в библиотеке другие студенты. Рядом со мной стоит парнишка, видимо, тоже или с первого, или со второго курса, и просит у библиотекарши «Дайте, пожалуйста, Керниган, и этот, второй, как там его, книжку по программированию». Библиотекарша всё немедленно понимает, но на всякий случай уточняет: «Керниган и Ритчи?» «Нет», говорит парень, «точно не Ритчи. А, во, вспомнил, Керниган и Пайк.» «Керниган и Пайк?» - недоверчиво интересуется библиотекарша - «точно не Ритчи?». Но парень уверен в своём выборе, и она тоже уходит в запасник искать неведомую книжку.
В общем, прошло чертовски много времени, и на этом блоге я публикую мой обзор на книгу «Практика программирования», за авторством Кернигана и Пайка.
1. Обзор
1.1. Что это за книга а зачем я за неё взялся?
Не, ну конечно, я взялся за менее известного Кернигана не потому, что мне было интересно, что же там такого хотел найти мой собрат по библиотеке.
Я взялся читать «Практику Программирования», потому что слышал про неё много хороших отзывов в деле обучения программированию как профессии, без фокуса на конкретных языках, и потому что её часто упоминают вместе с уже рассмотренной на моём сайте ранее книгой «Программист-прагматик».
Вообще, когда я только вышел на свою первую работу, я первым делом прочитал книгу «The Rules of Work», которая рассказывала про много какие аспекты достижения успеха на рабочем месте, а затем «Программист-прагматик» стал для меня продолжением этой книги, но уже адаптированным под конкретную специализацию.
«Практика программирования» в каком-то смысле ещё более специализирована, и даже, я бы сказал, в заметной степени устарела. Конечно, многие вещи, которые в ней описаны, пригодятся и сегодня, но та манера писать на языке Си, которая используется в примерах, в наши дни вызывает оторопь. Справедливости ради, в книге используется не только Си, а ещё С++, Java, AWK, Perl, и даже язык ассемблера, то есть, в общем-то, все заслуживающие внимания языки программирования. Но видно, что авторы ещё не имеют тех шишек, которые программисты сегодняшнего дня набили за многие годы использования Си.
Тем не менее, многие темы, которые в «Программисте-прагматике» описаны поверхностно, в «Практике программирования» разобраны в намного больших подробностях, и, если бы я большую часть из них не знал довольно давно, многие темы показались бы мне любопытными.
1.2. Какие темы описаны в книге?
Давайте вкратце я перечислю темы, которые должен знать каждый программист, и которые стоило бы изучать на первом курсе, одновременно с изучением архитектуры ЭВМ и первыми языками программирования:
- Стилистика, эстетика, комментарии и уважение к коду
- Базовые структуры данных: список, массив, дерево, словарь, сортировка, поиск,
- Проектирование систем: модули, разделение ответственности, ресурсы
- Инструменты программиста: компиляторы, интерпретаторы, служебные языки высокого уровня
- Тестирование
- Отладка
- Профилирование
- Портирование
- Работа с текстом и текстовые редакторы
«Практика программирования» покрывает каждую из этих тем по чуть-чуть, кроме последней, даёт достаточно знаний, чтобы начать копать в нужную сторону, но не слишком погружает в дебри. С другой стороны, многое из того, что в ней сказано, в наши дни звучит слегка наивно.
Можно увидеть, что в книге мало затрагиваются темы работы в команде, ну, кроме вопроса разделения ответственности при проектировании системы.
1.3. Что мне понравилось и что не понравилось?
Пара тем, которые в ней затронуты, а именно компиляторы и интерпретаторы, описаны совершенно недостаточно подробно, и, мне кажется, скорее смутят читателя-новичка, чем просветят. Тем не менее, остальные рассмотрены достаточно хорошо.
Очень жалко, что не затронута тема редакторов кода, мне кажется, с их помощью можно сильно повысить производительность.
Особенно мне понравилась глава, в которой одна и та же задача решается на разных языках программирования с последующей сверкой результатов и скорости работы. Она мне настолько понравилась, что я сделал из неё задания не просто «в уме», а тщательно, на отдельном языке программирования.
В целом, стиль изложения напоминает в какой-то степени «Язык Си», то есть в коде есть опечатки, сложные темы представлены как излишне простые, многие интересные детали пропущены, но зато книга получилась недлинная, а каждая глава содержит объём информации, которые можно проглотить за один раз и понять. Язык живой и понятный, не вызывает желания немедленно закрыть книжку и заснуть.
Очень хорошо, что к каждой главе прилагаются упражнения, и я рекомендовал бы любопытным второкурсникам сделать их все, потому что они наводят на правильные мысли.
Могу ли я рекомендовать эту книгу всем? Ну, опытным программистам она, скорее всего, не нужна, они и так всё знают, «Программист-прагматик» будет полезнее。 Людям, не знающим про программирование ничего, она будет непонятна, но в качестве практического и понятного введения в профессию где-то на втором курсе она очень пригодится.