Найти в Дзене
Войти в IT

Семь грехов программиста

Как известно, программисты – это люди с особым менталитетом и характером. Их работа требует не только разнообразных технических знаний, но так же терпения, усидчивости и внимательности. Ещё можно добавить к этому то, что при длительной сидячей технической работе банально едет крыша. А как известно, от уехавшей крыши до грехопадения - одна лапка микросхемы, а иногда и того меньше. Не претендую на то, что на других сидячих работах что-то обстоит кардинально иным образом, и крыша не едет. Но поскольку я сам программист (пока надеюсь не поехавший), и друзья мои тоже программисты, то имею полное право описывать личный опыт и угол обзора на окружающую меня реальность. Так сказать, повествовать за вопросы жизни по ту сторону красивых интерфейсов. Так вот, в один момент я обнаружил, что общеизвестная концепция семи смертных грехов отлично ложится на плоскость информационных технологий! И если в бытовом понимании смертные грехи можно соотнести с деструктивными проявлениями в моральных и физичес
Оглавление

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

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

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

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

Гордыня 👑

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

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

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

Вместо логически чистых конструкций в коде все чаще проскакивает всякая дичь. "Мне можно" - думает Senior и вот уже эталонный код превращается в спагетти. Время идёт, и одурманенный своим величием гордец топит инфраструктуру проекта, будучи убеждённым в своём всесилии.

На мой взгляд, гордость это самая большая проблема, поглощающая многих талантливых людей в IT. Программистам иногда свойственен "синдром вахтёра". Он же - синдром владельца лодочной станции.

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

Жадность 💰

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

Жадный программист собирает в свою копилку всё что найдет - материальные и нематериальные ресурсы, полезные и бесполезные библиотеки. Чем больше - тем лучше!
Жадный программист собирает в свою копилку всё что найдет - материальные и нематериальные ресурсы, полезные и бесполезные библиотеки. Чем больше - тем лучше!

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

С другой стороны баррикад, с удовольствием отношу к грешникам этой категории стартаперов-экстремистов из секты "тотально-минимального прототипирования", граничащего с созданием приложений "как попало" за 3 часа, а оплатой за 1 час или лучше не вообще.

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

Похоть 💃

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

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

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

Чужой программный код это не только преимущества, но и ответственность за этот код. Старайся уважать вопросы авторства, и будете тебе благо!
Чужой программный код это не только преимущества, но и ответственность за этот код. Старайся уважать вопросы авторства, и будете тебе благо!

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

Сколько раз я встречал проекты, неадекватно напичканные совершенно избыточными библиотеками. Нужна одна иконка? Подключаем FontAwesome! Нужно сделать простую форму ввода? Давайте прикрутим bootstrap! Заказчик возжелал удобную таблицу? Ни слова больше - тащим в проект библиотеку DevExtreme целиком! // Один из крайних проектов с которыми я столкнулся, содержал в себе около 30 различных фронтэнд-библиотек. "Святые угодники!" подумал я, и пошёл разгребать всё вот это вот. В результате рефакторинга, из 30 библиотек выжило только 6.

"Давайте используем Symfony, прикрутим Doctrine, используем авто-тесты, развернём все это на nginx и сразу сделаем API!!" - говорит вдохновлённый программист, и как вариант слышит в ответ что-то вроде - "Какая прекрасная идея для лендинга по продаже гаечных ключей".

Зависть 💎

"Труднее всего человеку дается то, что дается не ему" - Жванецкий.

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

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

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

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

Зависть является заведомо деструктивным процессом. Корень зависти - в обесценивании своих талантов и умений.

Завидуя другому субъекту или его достижениям, человек зачастую пренебрегает информацией о том пути, который прошёл более успешный человек / проект / продукт. И зачастую многие успешные люди совсем не гордятся тернистостью своего движения к текущим результатам. Поэтому, совет для борьбы с завистью. "Восхищаясь" чужими результатами, старайся смотреть не только на "фасад", но и на "бэкграунд".

Гнев 😡

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

Программисты, страдающие гневом, не могут принимать тот факт, что их код не работает, или работает так, как они хотят. Они начинают кричать на свой компьютер, бросать мышку, бить клавиатуру, и вот это вот всё. То есть - в этой ситуации становится виноват кто-то другой (компьютер, авторы языка программирования, компания Microsoft), но никак не сам программист и его профподготовка.

Гнев сжигает и опустошает. Но стоит ли гневаться программисту на бездушную машину? Или лучше стоит обратить свои эмоции в конструктивное созидание?
Гнев сжигает и опустошает. Но стоит ли гневаться программисту на бездушную машину? Или лучше стоит обратить свои эмоции в конструктивное созидание?

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

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

Лень 😴

Лень – это грех программиста, который проявляется в отсутствии желания работать и учиться.

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

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

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

Пусть профессионального программиста - это путь постоянного дообучения. Задача хорошего специалиста не в том, чтобы "киркой и лопатами" долбить в скалу, просто потому что когда-то его так научили. Задача в том, чтобы делать продукты максимально полезными, за максимально короткий срок, лучшими из доступных инструментов.

Расточительство 💸

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

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

Рассеян и непоследователен расточительный программист. Программы работают "как-то", но недостаточно для того чтобы быть качественными.
Рассеян и непоследователен расточительный программист. Программы работают "как-то", но недостаточно для того чтобы быть качественными.

Сюда же можно отнести принципиальное неумение или нежелание работать с памятью, написание кода в стиле "за меня всё сделает сборщик мусора", и прочие подобные истории.

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

С моей точки зрения, хороший программист должен внимательно смотреть на вопросы использования ресурсов. И так же, хороший программист должен уметь применять "подходящие" технологии, а не то, "что привычней". Таков путь.

[Доп.грех] Использование goto 🔗

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

Как писал один из подписчиков канала "Дмитрий Д" - "Признаю. Я грешник и воплощение зла порожденный тьмой веков))) и кол осиновый мне сердце)))" (с). Так что, эти люди среди нас! Бойтесь и остерегайтесь представителей тёмной стороны // Дмитрию отдельное спасибо за прекрасный комментарий!

Велик соблазн написания неоптимального кода с переходами goto. Манит юных программистов тёмная сторона.
Велик соблазн написания неоптимального кода с переходами goto. Манит юных программистов тёмная сторона.

Использование goto сильно усложняет программный код. Когда-то этот оператор действительно был актуален и нужен. Но друзья, привет! Мы живём в 2023 году, в эпоху искусственного интеллекта, кросс-платформенных приложений, облаков и высокоуровневого программирования. Пора оставить прошлое в прошлом.

[Доп.грех-2] Legacy или спагетти-код, равно как и отсутствие документации 🍜

Прекрасные и неповторимые эмоции испытывают программисты, которым по наследству достаётся legacy-код.

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

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

Многие годы я стараюсь придерживаться двух простых правил. "Надо писать код так, чтобы он был понятен даже идиоту". Это же правило можно применить к документированию кода в немного другом виде: "Надо писать документацию к коду так, чтобы её поняли даже дураки".

Эти принципы выручали меня многократно! Оба правила работают максимально линейно - код должен быть прост и предсказуем. Документация должна быть исчерпывающей. Программный продукт должен разворачиваться на любых машинах за минимальное время. Всё остальное относится к греху "Лень" или "Гордыня".

Неоднократно я встречал на жизненном пути сторонников "самодокументируемого кода". Ну да, те самые методы без описания, вроде open_connection_and_send_xml_file_to_the_server. Где-то рядом с ними параллельной веткой идут ортодоксальные идеологи MVC-паттерна с бесконечным разбиением простейших задач на десятки частей - но тоже без какой-либо документации. И так далее, и тому подобное.

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

Безгреховная жизнь как метрика качества

Ну и что ещё можно добавить. Как писал Уильям Шекспир, "Грехи других судить вы так усердно рвётесь, начните со своих и до чужих не доберётесь". Каждый специалист прошёл какой-то путь. И пожалуй каждый в той или иной степени был замечен за не слишком оптимальным, или не слишком хорошим программным кодом.

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

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

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

Теология прочит грешникам ад и страшные муки. Но в более обывательском виде это можно трактовать как более сложную жизнь, и менее успешные результаты в сравнении с "праведниками". Не надо быть гением, чтобы понять - "Если долго и много писать плохой код, то вероятно денег за это много не заплатят", или "Если увести чужую жену, то можно за это схлопотать от её мужа". Ну и так далее.

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

🔥 Понравилось? Подпишись! Победим восстание роботов вместе! 🔥

-11

🚀 P.S. Ты можешь круто поддержать меня и проект "Войти в IT" на boosty! Я публикую там более эксклюзивный и профессиональный, иногда немного личный контент. Хочешь посмотреть как я выгляжу в реальной жизни? Тогда жми: Ссылка 🚀

P.S.2 У меня ещё есть Telegram-канал. Там посты чуть попроще, и чуть повеселей. Ссылка