My software is shit.

image

Нам не дано с тобой понять,
Чему так радуется кодер,
И что за чёртов алгоритм,
Что сам себя забанил модер.
И что? коммент не написать?-
Чтобы смогли мы разобраться.
Так много разных «ну зачем»,
Что в пору просто увольняться.


Около 15 лет назад я начал знакомиться с компьютерами. DOS, Turbo Pascal, Windows, Asm, Perl, Linux, основы сетей — ночи без сна пролетали незаметно, и детская мечта стать юристом, разбираться в законодательстве и помогать людям, освободила место для желания стать программистом.

Поступление в ВУЗ на IT-специальность и первые небольшие разочарования: в универе не учат как стать хорошим специалистом, мало рассказывают про современные технологии и дают попробовать всего понемногу. Да, для тех, кто пришёл не определившись с профессией и не представляя что это такое — самый лучший вариант определиться в первые годы учёбы. Чтобы к старшим курсам знать к чему стремиться и получать специализацию в выбранном направлении, либо уйти в другую профессиональную область.

Первые околопрограммистские подработки: «учёт сотрудников», «каталог товаров для сайта», «ежедневник с расписанием»… Разбор чужого кода и непонимание как можно писать настолько отвратительно. Ну что же, это в основном разовые поделки начинающих программистов и надо идти в компанию, где занимаются разработкой. Первая проба и начавшаяся с собеседования симпатия к компании: их интересовало не на чём я пишу, а как я это делаю, ибо язык — всего-лишь инструмент. Однако, после прохождения собеседования и изучения того над чем предстоит работать, сразу вспомнились кустарные поделки с попыток фриланса. Тот же запутанный, лишённый намёков на документацию и полный грязных решений код, изменение которого приводило к проблемам в самых неожиданных местах.

Посмотрев какие вопросы появляются на форумах по программированию, пообщавшись с другими программистами, стало понятно: так почти везде. Хороший код интересен только тебе. Работодателя/заказчика интересует лишь результат, а не то каким путём он достигнут. Не удивительно что при таком подходе пользуются более быстрыми решениями вместо максимально подходящих. Мало какому заказчику интересно что его программа может использовать не все 512МБ ОЗУ, не тормозить и не падать при запуске офиса от небезызвестной компании — она уже работает и приносит деньги, а то что клиент из-за этого сидит перед менеджером 15 минут вместо десяти, так и чёрт с ним, он же уже сидит, а тот кто за ним и может не успеть до конца рабочего дня — так он может ещё и не заключит договор, зато сидящий увидит что тут всё «серьёзно, как у взрослых дядек».
О, да! И чем больше денег приносит дело, тем меньше вероятность каких-либо изменений в лучшую сторону. До одурения. На сайт по продаже девочек выкладывали их фотосессии. Галерея каждого товара была простая как прямая и ура: десяток-полтора небольших фотографий, по клику — в новом окне открывается полноразмерная фотография. Сидя в конторе, где сервер находился в той же сети, всё работало замечательно. Смущал один момент — в миниатюре было то же изображение, что и в полноразмерном варианте. Те же два-три мегабайта. «А за окошком месяц май, месяц май, месяц май, А в сером граде диалап и ты сиди и ожидай». На предложение сделать в миниатюрах изображения меньшего размера был получен отказ без объяснения причин. До обсуждения суммы за разовый вызов convert и добавления постфикса имени файла в скрипт отображения галереи дело не дошло.

В результате: работа программистом — не для меня. Жизнь на этом не кончается,- как минимум есть железо и администрирование.
Мда, с железом не сложилось из-за аллергии на пыль, начинаем изучать администрирование. Самое простое — установка/восстановление винды, работа с основным набором утилит уже есть в багаже знаний, идём получать опыт работая мальчиком по вызову в контору имени Васи Пупкина и катаясь по городу, починяя компьютерусы людям и организациям у которых либо нет знакомых компьютерщиков, либо у которых такие гении уже побывали (большое спасибо таким дарованиям — эти заказы приносили больше денег).

Заниматься виндой желания нет. И в ближайшее время не появится. Неуютно работать виндовым админом в конторе, где софт не совсем лицензионный. А где он лицензионный — там админы уже есть и им никто не нужен. Куда бы сунуться с начальными знаниями линуксов, программирования и веб-серверов? Смотрим, ага: интернет. Хочу я Заниматься сетями? Определённо нет. Кушать хочется и идём работать программистом. Не нравится, зато 800уе в месяц. Через две недели в жизни повяляется веб-хостинг с вакансией тех.поддержки.

Хостинг… Хостингу отдал больше четырёх лет. Самые положительные впечатления о работе как о процессе. Особенно во время развития данной отрасли. Изучение новых технологий, необходимость разнообразных знаний, возможность сначала всё продумать и сделать один раз хорошо. Интерес руководства к тому чтобы старое работало стабильно, а новое — улучшало старое (и, конечно, приносило деньги). Из минусов — на тот момент зар.плата достаточная чтобы спокойно жить одному.

Переезд на край географии и свои знания программирования и администрирования я начинаю разминать, сворачивать в комок и медленно+печально засовывать себе в тектонический разлом нижнеспинных полушарий. Вакансии есть, их немало, но… 12-15к. Аренда жилья 9-10. Тысяча на проезд, остаток на еду, подработки — на всё остальное. 18-20 получают 1С-специалисты — уже можно жить без подработок и нормально ходить в отпуск, но со знаниями 1С на уровне «поставить эску, поправить разделитель дробной части» и без знаний бухгалтерии нигде не берут. Надо учиться и хоть какую-нибудь работу. Попадается вакансия тех.поддержки в интернет-провайдере, собеседование, странный вопрос про Oracle и внезапное предложение работать админом.

Столько странно работающего софта собранного в одном месте я ещё не видел. Обновления до новых версий решают проблемы в одном месте, но создают в другом. Части исходных кодов нет. Другую часть нельзя самостоятельно изменять, третья вроде есть, но не собирается. Аналогичное ПО от других разработчиков аналогично и по сопровождению. Всё стоимостью как крыло от самолёта, легко как чугунный мост, падает стремительным домкратом, божественно документировано и способствует ускоренному постижению дзен.
Из хорошего — грамотный коллектив, возможность делать хорошо, востребованность всех навыков, начиная от написания батников и заканчивая миграциями СУБД.
Из грустного: иногда остро недостаёт штатных специалистов по некоторым областям IT,- всему приходится учиться самим. Из-за этого же тяжело определять приоритетность задач — надо и то и другое и это мы уже год назад сделали, но для продолжения этого направления нужно вот это вот. Ещё тяжело без бюрократиии. Практически невозможно и, похоже, придётся пытаться её разводить. Можно попросить коллег описать их требования/пожелания и обсудить всё написанное. Но вот залезть в голову и понять как на самом деле всё должно быть — не получается.

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

Только уходить особо некуда. Программистом я, насколько могу сам судить, перестал быть. Сис.админом — практически тоже самое. Огорчаться этому — глупо. Рано или поздно всё-равно нужно освобождать место молодым.

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

Комментарии (23)


  1. MaximChistov
    14.07.2015 17:14
    +3

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

    Вот не надо обобщать. То что вы не смогли попасть в такую компанию, не значит, что их нет. Я вот например работаю в одной из них)


    1. Chmyaf Автор
      14.07.2015 18:27

      Согласен и поправлю текст.
      Правда до сих пор не могу назвать такой компании, которая такой была в 2005:(


    1. KvanTTT
      14.07.2015 23:48

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


  1. Just_Wah
    14.07.2015 17:28

    чем крупнее компания, тем она более неповоротлива. На это есть как объективные, так и субъективные причины. Понятно, что крупной компании объективно сложнее сохранять гибкость в силу определенных условий организации труда. Но, на мой взгляд, куда большую проблему несут люди на хороших должностях, с хорошими окладами и не участвующие в получении процента от прибыли компании. Они заинтересованы в том, чтобы их положение сохранялось бесконечно долго. И в вашем примере про картинки все достаточно просто — есть отлаженная технология и какая бы кривизна у нее не была, она устраивает, например, учредителей. А тут вы со своей оптимизацией. Вы даете 146% гарантии, что в процессе оптимизации-перехода чего-нибудь не случится? Ведь ваше предложение не санкционировано «сверху», а это порождает две проблемы:
    1. если что, великие боссы заметят и могут надавать по голове
    2. если все ок, великие боссы заметят и… надают по голове «какого хрена до было все криво?»

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


    1. Chmyaf Автор
      14.07.2015 18:40

      Получается что субъективно удобно ничего не менять и не вносить предложений по развитию/оптимизации?


      1. ouiz
        15.07.2015 06:59

        Конечно. В бизнесе оптимизация — не самоцель.


        1. Chmyaf Автор
          15.07.2015 08:51

          Благодарю. С этой стороны на производство я ещё не смотрел.


  1. edogs
    14.07.2015 18:51
    +4

    Можно сменить профессию. Пойти учиться, начать всё с нуля.
    Можно реализовать для начала какую-нибудь из старых идей и открыть своё дело.
    Размеры финансовых подушек, покрывающие риски для обоих вариантов примерно одинаковы.
    Осталось решить чем стоит заниматься, перестать АйТи и начать жить.
    Не поможет. Проблема не внешняя, она внутренняя.
    Откроете Вы свое дело — и перфекционизм сыграет против Вас, будете писать оптимальный сайт вечно, делать оптимальный ремонт в офисе вечно, подбирать идеальных работников вечно.
    Найметесь грузчиком — вместо таскания грузов будете вносить рац.предложения по ускорению переноски грузов на 10%.

    Чем бы Вы не занимались — первое что Вам надо сделать до того как чем-то заниматься — осознать несовершенство мира. Совершенный мир несовершенен. На дороге безопаснее всего ехать со скоростью потока, а не со скоростью пдд. Нейросети с нечернобелыми ответами решают задачи недоступные обычным алгоритмам.
    Premature optimization is the root of all evil — и это, на минуточку, Дональд Кнут сказал.


    1. Chmyaf Автор
      14.07.2015 20:46
      +3

      Именно так. К сожалению. Подрабатывая грузчиком сделал тележку с верёвкой для более быстрого спуска ящиков из вагона.


      1. rubyrabbit
        19.07.2015 22:56

        Контролируемый перфекционизм — это залог успеха в жизни.
        Оба слова важны.


    1. KvanTTT
      14.07.2015 23:52

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


      1. engine9
        15.07.2015 11:50
        +1

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


  1. slamon
    14.07.2015 20:04
    +1

    >Хороший код интересен только тебе.

    А чем интересен интересный код сам по себе?
    Интересным должна быть функциональность продукта, его производительность, его расширяемость, и т.д., и т.п. И себестоимость продукта также входит в понятие «интересности».


    1. Chmyaf Автор
      14.07.2015 20:41

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


  1. Ad_Astra
    14.07.2015 22:21
    +2

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

    Если вкратце: автор, не знаю, может, это тебя разочарует, может, нет — но _программистом_ ты пока ещё не был. Судя по приведённым тобой расценкам за труд и за жильё — речь идёт о каком-то достаточно небольшом городке, где IT как такового мало. Вообще, есть огромная разница между “IT обслуживающим”, когда основной бизнес организации далёк от высоких технологий, а IT-отдел там разве что поддерживает необходимую для деятельности инфраструктуру, и “IT производительным”, когда компания производит некоторый высокотехнологичный программный продукт силами своих ударников интеллектуального труда. Это совершенно разные мировосприятия и, до кучи, совершенно разное отношение к работнику. Но что в провинции преобладает первое, и что за этим можно просто не знать, что есть второе — понимаю прекрасно, сама такая была.

    И, да, я понимаю, что «критикуя — предлагай». Рецепт, вытащивший из подобной задницы меня лично:
    1) сначала удалёнка, а потом переезд в те места, где есть проекты более высокого уровня, чем фотогалерея продажных женщин, и где (ох, я порой сама этому не рада!) ой как смотрят на каждую строчку в code review, внутреннему перфекционисту будет где развернуться
    2) на Курсере сидеть. Без шуток. Прочищает мозги, расширяет кругозор и, главное — даёт мотивацию вникнуть в интересные предметные области, в которых оплата труда на порядок (и это не фигуральное выражение) отличается от приведённых тобой сумм.

    Ну и в качестве совсем уж живительного, смешного, но местами болезненного — вот этот былинный тред рекомендую, простите за возможный оффтоп: www.sql.ru/forum/actualthread.aspx?bid=16&tid=466654. Опять же, можно смеяться — но меня сильно отрезвило в своё время. Совершать ошибки — это ОК. Но не видеть ничего другого — это зря.


    1. artemgapchenko
      15.07.2015 10:20
      +1

      О да, именно после прочтения этого треда курсе так на втором университета, я начал периодически посматривать по сторонам — то Haskell потрогаю, то на Kotlin взгляну, то курс по ФП от Одерски на Курсере пройду и все задачки прорешаю. Сейчас вот подписался на курс по дискретной математике, упоминавшийся как-то на Хабре.
      Серьёзно, тред очень стоящий, и его стоит просмотреть хотя бы до середины.


      1. Ad_Astra
        15.07.2015 10:55
        +1

        Да, курс по Scala и следующий за ним Reactive Programming — очень хороши. Но что куда ближе к былинному треду на Sql.ru и прочищает мозг вообще на отличненько (я бы сказала, что это нужно знать каждому, называющему себя программистом) — так это Programming Languages от University of Washington. Вот там как раз можно и DSLчики на одном из диалектов Лиспа поколбасить, и в строго-функциональной среде попрограммировать, и с ООП всё это научиться увязывать. После этого становится понятно, почему X. в том треде столь эмоционально реагировал :)


  1. gonzazoid
    15.07.2015 00:57

    >Несколько лет назад я начал знакомиться с компьютерами. DOS,…
    >Мало какому заказчику интересно что его программа может использовать не все 512МБ ОЗУ
    >Хостинг… Хостингу отдал больше четырёх лет

    Чета как то рассинхрон что ли…


    1. Chmyaf Автор
      15.07.2015 08:48

      Несколько, в данном случае, это больше 10, но меньше 20. Стоит уточнить в тексте?


      1. toxicdream
        15.07.2015 12:08

        Да.
        Имхо, несколько = [3..6]


  1. engine9
    15.07.2015 13:21

    Жак Фреско на эту тему хорошо высказался. Цитата не точная: «если вы ждете от мира каким ему нужно быть, то переживете много разочарований». Когда все клиенты, все работодатели или покупатели «не такие», стоит внимательно присмотреться к себе:
    1) Возможно вы требуете от мира нереальные вещи.
    2) Возможно ваша способность находить нормальных людей не сильно развита и раз за разом вы попадаете в мутные конторы.


  1. andyN
    15.07.2015 16:00
    +1

    «Хороший код интересен только тебе. Работодателя/заказчика интересует лишь результат, а не то каким путём он достигнут. Не удивительно что при таком подходе пользуются более быстрыми решениями вместо максимально подходящих.»

    Я конечно огорчу многих, но… Лучший специалист — это тот, который приносит компании больше всего денег. Программист — это не человек, который пишет код. Код — это всего лишь способ решения задачи. А задачи бизнеса, в конечном итоге, сводятся к увеличению чистой прибыли. А ваша, как работника — к увеличению собственной зарплаты. В результате — вполне логичная синергия: помоги компании зарабатывать больше, и компания поможет зарабатывать больше тебе. Твои действия должны приносить кому-то пользу, вполне реальную и ощутимую, иметь ценность для людей, а не просто экономить лишние пару мегабайт в памяти.

    Те программисты, которые внутренне целиком и полностью согласны с предыдущим абзацем — зарабатывают 150-200 килорублей, или давно уже «доросли» до тимлидов и руководителей (если конечно хотели), живут припеваючи и в целом вполне довольны своей профессией и жизнью.

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

    Вывод: причина не в профессии, а в голове у самого человека.


    1. Archon
      15.07.2015 16:31

      И в реальном бизнесе всегда можно заняться оптимизацией, но искать проблему надо не изнутри, а снаружи. Т.е. если гулять от проблемы «вот этот метод написан неоптимально и жрёт много памяти», далеко не уйдёшь (и, скорее всего, тебя рано или поздно уволят), а вот если пойти по пути «очень тормозит функция, которой все пользуются 15 раз в день», то вполне можно подвести обоснование под оптимизацию даже при самом тупоголовом начальстве. Проще говоря, надо стремиться улучшать не путь, которым достигнут результат, а сам результат. Это очень тяжело, поскольку внутренний перфекционист не любит вылезать в настоящий мир и смотреть на реальность, а предпочитает докапываться до строчек. Но если удастся его переключить от делания по выдуманному феншую на делание по реальным потребностям, это преобразит жизнь к лучшему.

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