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

Я программист-самоучка. Никто меня целенаправленно не учил. Программирование мне просто нравилось, поэтому я писал как умел. Какие-то отрывочные сведения о паттернах[1], стилях, best practices я узнавал, когда искал решение той или иной проблемы на просторах интернета. С содроганием вспоминаю, что первые мои программы обязательно содержали Самый Главный Класс, в котором была вся логика (это один из вреднейших антипаттернов[2]). Ну, зато я сам прошел кусок пути от “ааа, мои глаза, как развидеть это!” через “неужели я так плохо писал?!” к самостоятельному интуитивному формулированию идеи MVC[3]. А вчера тестировщик из одной довольно крупной международной IT-компании назвал мой код “хорошим”. Не знаю, насколько это мнение было искренним, но если это правда, то мне приятно.

Вообще, по понятным причинам я видел начинку только open-source программ, и всегда считал, что open-source почти всегда начинается как проект “для души”, где можно писать код как тебе нравится. Но вот что интересно: в 95% случаев “как тебе нравится” выглядит похожим на “как правильно”. Наверное, это связано с тем, что хоть сколько-нибудь успешные проекты пишутся людьми, знающими что они делают, а не “хеллоуворлдщиками”[4]. В общем, читая код открытых программ - а тем более создавая патчи для него - многому учишься. Рекомендую.

Подхожу к сути поста. В данный момент я прохожу стажировку в компании, где программисты нужны для обеспечения услуги доработки сайта клиента в рамках услуги маркетинга. Т.е. программирование - не основной бизнес компании, они вообще могут все это php/js/sql отдать на аутсорс (и, подозреваю, так и было некоторое время назад). Тимлид “обрадовал”, сообщив, что не любит ООП[5]. “Нууу, окееееей…”, - подумал я, хотя сразу понял, что шаблон мой очень скоро начнет рваться с мерзким звуком. И вот на днях я мельком взглянул на “оптимизированный код”, в котором ковырялся возможный коллега. Фраза “без комментариев” тут подходит как нельзя лучше, хотя, возможно, и не в том смысле, о котором вы подумали. Код действительно без комментариев, и представляет из себя огромные, на несколько страниц простыни текста без каких-либо попыток разделить его на меньшие функции или хотя бы на блоки. В мозгу эхом отозвались слова тимлида: “если функция объявлена, то она должна быть вызвана минимум два раза; если нет, то функция не нужна!”. Ага… ну да… согласен… стоп, что за черт?!

Нет, я осознаю, что я ничего не смыслю в коммерческой разработке. Да, наверное, при таком подходе можно сэкономить несколько тактов процессора веб-сервера. Но дьявол! Как этот код поддерживать? Разработчик, что сейчас пишет это все, через месяц вполне может вообще не узнать свое творение, и разбирать, что оно делает, ему придется буквально по строчке. А ведь поддерживать придется, услуги компании это подразумевают. Я еще удивился, что, когда мне дали простенькое задание над одним сайтом, сидящий рядом разработчик сказал: “О, сайт на Laravel! Повезло тебе, он хорошо документирован”. Эээ… Простите, что? С каких пор “хорошо документирован” - это “о, повезло”? Если то, что я увидел - это норма ©, то, скорее, это вам - хорошим парням - не повезло. Вам прямо после выпуска из университета вливают в голову не слишком правильные вещи. ООП - не идеал, и не панацея от проблем разработки, но писать такие простыни - это так себе альтернатива.

Резюмируя: мне кажется, что веб-разработка - это не для меня. После той строгости, к которой приучает C++/C#, вся эта HTML/CSS декларативщина воспринимается как вялые попытки упорядочить хаос. Биться несколько часов в бесчисленных css-файлах, пытаясь изменить кнопку, которая с чего-то на 5 пикселей больше, чем нужно - это такое себе развлечение, когда в своих программах ты просто делал ультимативное, написанное тобой же SetHeight/SetWidth. На этом все, спасибо за внимание.


  1. 1.Общепринятый прием программирования.
  2. 2.Это распространённый подход к решению класса часто встречающихся проблем, являющийся неэффективным, рискованным или непродуктивным.
  3. 3.Model-View-Controller - это, упрощенно говоря, схема разделения логики программы на модель, представление и контроллер. Модель отвечает за выдачу и сохранение данных, представление отвечает за вывод информации пользователю, а контроллер реагирует на действия пользователя.
  4. 4.Программист, в своем образовании не сильно продвинувшийся от написания примитивных программ типа 'Hello, world!'
  5. 5.Очень-очень просто выражаясь, это такая парадигма программирования, когда все - объекты. Функция - объект. Строка - объект. Число - объект.