Почему программирование это тяжелая работа

0
1467
views

Перевод статьи «Programming is Hard».

Программирование это сложно

Чем программирование не является

Программирование это не стук по клавиатуре и не скоростная машинопись. Оно не предполагает обязательного заучивания сочетаний клавиш и непременного отказа от пользования мышью. Быть программистом не означает выучить все возможные языки программирования (даже если бы это было возможно).

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

Кроме того, понятие программирования выходит за пределы запоминания синтаксиса и встроенного функционала языка программирования. Логика, условия, if-предложения и алгоритмы не дают полной картины того, чем на самом деле является программирование. Справедливости ради, математика, информатика и шаблоны проектирования тоже с этим не справляются. И хотя все это имеет большое значение в программировании, это лишь часть головоломки.

Проектирование и планирование

Чтобы обеспечить (или хотя бы увеличить вероятность) плавное течение цикла разработки, дизайн и архитектура проекта должны быть тщательно спланированы еще до того как будет написана первая строчка кода. Здесь вступает в игру дизайн программного обеспечения. На этой стадии разработки планируются такие вещи как цепочки инструментов, конвейеры, уровни абстракции для публичных и внутренних APIs, модуляризация, создание структуры базы данных.

Мы – живые инструменты отладки

Искусство программирования требует от нас нестандартного мышления и решения проблем наиболее прагматичными, эффективными и подходящими способами. Вероятно, именно поэтому мы и дома выступаем в роли «айтишников» и «поддержки пользователей». Это ж практически наша работа – исправлять то, что сломано. Можно сказать, что «программирование» – красивое слово для определения «решения проблем».

Другими словами, мы – живые, дышащие отладчики (как сидя за компьютером, так и в частной жизни). Именно поэтому нам так важно уметь читать и писать документацию.

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

Программирование это не только написание кода

Умение учитывать все возможные сценарии

Отладка сложна уже сама по себе. Но чтобы жизнь сахаром не казалась, выполнение кода обычно нелинейно. Крупные проекты имеют много «ответвлений» возможных путей выполнения в соответствии с программной логикой с if-предложениями.

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

Пользовательский опыт

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

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

Производительность и оптимизация

Производительность это очень важный аспект в программировании. Разработчики (особенно изучавшие информатику), стремятся использовать и писать самые эффективные алгоритмы. Мы зацикливаемся на временной шкале микросекунд, чтобы выжать максимум из доступной памяти, CPU и GPU.

Что касается веб-разработки, нужно хорошо разбираться в концепции сетевой оптимизации. Мы изо всех сил стараемся минимизировать и сжать наши HTML, CSS и JavaScript, ведь это позволит минимизировать полезную нагрузку ответа от сервера. Изображения и прочие ресурсы также сжимаются для снижения количества данных, которые пользователю придется загрузить, прежде чем страница станет доступной и пригодной к использованию.

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

Безопасность

Программирование и проблемы безопасности

Кроме UI и программной логики, мы также ответственны за безопасность наших пользователей. Это особенно важно в наше время, когда данные для многих людей представляют большую ценность и в связи с этим монетизируются.

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

Когда речь идет о безопасности, никакие меры предосторожности не будут лишними. Общее правило гласит: «Никогда не доверяй данным, которые вводит пользователь». Если не проявить осторожность, мы можем поставить под удар не только нашу программу и инфраструктуру, но и важные для пользователя данные (те самые, которые мы как программисты должны защищать).

Но безопасность не ограничивается пользовательскими данными. Вирусы, черви, трояны, рекламное ПО, клавиатурные шпионы, вымогатели и другие виды компьютерного вредоносного ПО продолжают распространяться и поражать миллионы компьютеров и устройств по всему миру.

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

Поэтому при создании программ одним из наших приоритетов является безопасность. Мы стараемся защитить пользователей нашего ПО от вышеупомянутых угроз, которые могут привести к потере данных, повреждению файлов и сбоям системы.

Работа мечты это командная работа

Даже если речь не идет конкретно о программировании, командная работа играет невероятно большую роль в разработке программ. Крупные проекты слишком сложны и «подвижны», чтобы с ними мог хорошо справиться один человек, при этом работая в быстром темпе регулярных итераций или под давлением строгих дедлайнов.

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

Одна команда может отвечать за дизайн и доступность пользовательского интерфейса, а другая работать над функционалом. Путем комбинации умений всех команд создается программное обеспечение с наилучшим функционалом, UI, производительностью и безопасностью, – и все это в рамках бюджета и с учетом других ограничений.

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

Важно уметь работать в команде

Умение сотрудничать

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

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

Кстати о людях, читающих наш код. Ревью кода это прекрасная возможность познакомиться поближе с лучшими подходами к программированию. Это также еще один способ изучить кодовую базу, ее дизайн и архитектуру. Но поскольку критика (даже конструктивная) неприятна, очень важно важно научиться воспринимать ее как разумные советы, помогающие нам совершенствоваться.

Программирование это сложно

Программирование охватывает множество вещей помимо создания функционала программ. К ним относятся пользовательский опыт, производительность, безопасность, командная работа. Нельзя сфокусироваться на чем-то одном и не обращать внимания на все остальное.

Значительные (в том числе и по размеру) проекты это не просто пара строк кода. Чтобы быть успешными, им требуются тщательное планирование, проектирование, обдумывание и сотрудничество команд. На самом деле обдумывание всех необходимых деталей занимает больше времени, чем написание кода, особенно в длительных сессиях отладки.

Наконец, программирование это постоянная, непрерывная учеба. Умение адаптироваться и постоянно развиваться это ключевые навыки для выживания в этой индустрии. Мы должны поспевать за быстрым темпом развития технологий, если не хотим остаться глотать пыль на обочине.

Я написал этот пост, чтобы отметить тяжелую работу всех программистов мира и поблагодарить их. Где бы мы были, если бы не они?

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here