Основные показатели хорошего программиста

John Carmack

На ресурсе Hacker School привели интересные примеры хорошего программиста. Hacker School - школа в Нью Йорке для тех, кто хочет стать лучшим программистом. Создатели ресурса решили поделиться с миром их наблюдениями и видением хорошего программиста.

Хорошо знать один язык программирования

Язык программирования - это просто инструмент для того, чтобы сказать компьютеру что делать. И лучше хорошо владеть одним, чем плохо многими. Хороший программист знает по крайней мере один язык, с которым он знаком вдоль и поперек и с его помощью может справиться с любой поставленной задачей.

Быть систематическим дебаггером

Быть систематическим дебаггером означает, что у вас есть хорошее представление модели вашего кода и когда всплывает баг, или программа работает не так, как задумано - вы быстро генерируете гипотезу о том, что пошло не так, вместо слепого изменения всего пока программа не заработает.

Иметь хорошее представление модели вашей среды программирования

Многие программы взаимодействуют с внешним миром, так что понимание вашей среды очень важно. Это включает в себя знание I/O (ввод/вывод) и параллелизм примитивов, которые предоставляет ваш язык, то, как ваш язык находит, загружает, компилирует и выполняет код, то, как ваша программа получает информацию из внешнего мира (например, переменные и аргументы командной строки), и то, как ваша операционная система обрабатывает доступ к файлам, к устройствам, путям поиска и т.д.

Иметь хорошее представление об используемом аппаратном обеспечении

Благодаря знаниям того, как работает аппаратура (hardware) вы сможете с легкостью писать более эффективные программы. Даже если вы пишете программы на языке высокого уровня, понимание таких вещей, как стек вызов, MMU, цена переключения контекста, иерархии памяти и характеристики сети, к которой подключены - это информация, которая может быть вашим программным решением.

Хорошее алгоритмическое мышление

Многие люди путают алгоритмическое мышление со знанием большого количества алгоритмов сортировки или бинарного поиска.

Алгоритм - это набор инструкции, описывающих порядок действий для вычислений. Большая часть программирования - это просто описание алгоритма для компьютера. Быть знакомым с алгоритмическим мышлением означает иметь хорошую интуицию как хранить и обрабатывать данные, будучи способным думать как итеративно, так и рекурсивно, а также будучи способным рассуждать причины характеристик производительности написанного вами кода.

Хорошее математическое мышление

Программирование не так уж зависит от математики, как многие не программисты думают, но как только начнете сталкиваться с более сложными задачами, вы обнаружите, что знание математики пришлось-бы кстати. Многие интересные области программирование такие как компьютерная графика, обработка сигналов и криптография, требуют глубокого понимания математики. Даже просто замер производительности вашего кода может потребовать некоторого статистического мышления.

Уметь написать программу с нуля

Очень трудно представить хорошего программиста, который не может написать программу с нуля.

Уметь работать над маленьким куском большой программы

Большую часть времени вы не пишете программы с нуля. Вместо этого вы работаете с другими программистами над большим проектом.

Знать как структурировать ваш код

Хорошо-структурированный код позволит вам с легкостью перемещаться вверх и вниз через слои абстракции. В хорошо-структурированной программе вы можете игнорировать детали реализации, когда они не имеют огромного значения и изменять реализация без внесения изменения во всех местах, где используется код.

Иметь большой радиус кода

Радиус кода - это термин придуманный Аланом. Ваш радиус кода - это размер самой большой программы, который вы сможете написать с нуля. Увеличение вашего радиуса кода требует некоторой практики. Структуры, которые хорошо работают в программе с 500-ми строк кода, не обязательно сработают там где 5 000 строк кода или 50 000 строк кода.

Уметь быстро кодить

Часто намного быстрее попробовать несколько разных решений и решить который из них более элегантнее, чем выяснять который правильнее просто продумывая все в голове. Очень трудно представить медленного хорошего программиста.

Будьте продуктивными с вашими инструментами

Хорошие программисты используют свои инструменты эффективно. Это не означает, что вы должны пользоваться всеми доступными вам инструментами, чтобы стать хорошим программистом - не всем нравятся IDE и многие хорошие программисты предпочитают printf для дебаггинга - хорош тот программист, продуктивно использующий инструменты, которые он выбрал для себя.