Каждый знает, что компьютеры думают единицами и нулями. Некоторые даже считают, что программисты только и заняты тем, что выстраивают единицы и нули в правильные последовательности.
Но когда непосредственно пишешь код, легко забыть о невероятной простоте итогового результата работы.
Реализуя очередную фичу на любимом веб-фреймворке, программист может начать думать, что пишет код на веб-фреймворке, а не на языке программирования, на котором веб-фреймворк реализован.
В процессе написания простой программы на любимом языке программирования редко держишь в уме, что сам язык программирования — это просто ещё одна программа, написанная на другом, более простом и низкоуровневом языке программирования.
И даже этот низкоуровневый язык написан на третьем языке, и так далее, в самый низ, к машинным инструкциям, к единицам и нулям, к физическим сигналам и простому электричеству на железках.
Хороший программист понимает, через сколько слоёв абстракции проходит его код, прежде чем превратиться в физические процессы на железе компьютера.
Вооружившись этим пониманием, программист, подобно героям Ночного дозора, способен прыгать между самыми разными уровнями, чтобы докопаться до сути любой проблемы.
Мнения менторов
Умение выбирать компромисс между простым и сложным приходит с опытом. Появляется возможность достаточно элегантно реализовывать сложные вещи, опираясь на уже существующие проверенные временем абстракции. Конечно, придется и собственные велосипеды изобретать — главное при этом извлечь максимум понимания того, как устроены существующие.
Стоит следовать старому принципу философии UNIX — “делай одну вещь и делай ее хорошо”. В конечном счете все, каким бы магическим оно не казалось, представляет из себя комбинацию более простого и доступного для понимания. Частая ошибка — либо лень строить цельное и многоуровневое представление о том, что те или иные абстракции скрывают, либо же наоборот — не использовать их силу.
В начале пути большинство программистов проходят с мыслью, что чем сложнее, больше и многограннее творение, тем оно круче. Большинство из них сохраняют это мнение и дальше.
Программисты с таким поверьем начинают выдумывать и проектировать систему на миллионы пользователей, когда всего лишь-то нужно было запустить новую фичу или проверить идею сервиса, а не делать новый модуль для запуска ракеты. Кому в самом начале нужна система на миллион пользователей?
Коммерческое программирование — это не искусство, это умение придумать очень простое и работающее решение под текущую задачу. Делать сложное простым, а затем упрощать дальше, вот что реально круто.