Не могу больше. Это не моё. Я не тяну. Всю ночь не спал, ворочался, вставал, курил, читал, пытался смотреть телевизор, снова ложился… Ненавижу.

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

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

Я один в темноте.

Утро

А начиналось всё так радужно! Мне 35 лет, и всю жизнь я работал менеджером по продажам… Не имеет значения, чего именно. Да, это работа, на которую я случайно устроился сразу после института, чтобы были хоть какие-то деньги. Начало получаться – ну так, средненько, без экстремумов.

Зарплата потихоньку росла. Сильно потихоньку. Люди приходили, уходили, а я сидел. Жена, дети, ипотека. Получал свою трицаху, а то и сорокет, в хорошие месяцы – полтос, как-то справлялись.

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

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

Купил курсы – как раз акция была, перед НГ. Мне там прям всё нравилось. И график удобный – после работы, вечером, вебинары, общение с преподавателями, решение задач. Я начал программировать!

И чем дальше, тем больше. Я программировал всё, что дают на курсах. Забрал у ребёнка учебник по информатике, порешал задачи оттуда. Нашёл в интернете всякие задачки для обучения – всё прорешал!

Я никогда столько не программировал! Это так классно. Я чувствовал своё, не знаю… Всемогущество! Реально было время, пусть и не очень много, когда я верил в себя, в то, что изменю свою жизнь!

Было, конечно, сожаление – но радостное, до дрожи. И лишь о том, что не допёр до программирования раньше. Я могу. Умею. Получается. Получается!

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

Пошёл искать работу.

День

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

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

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

Меня вполне устроило. Я согласился. На работе, конечно, не обрадовались, но… И не расстроились. Чем порадовали меня. Написал заявление, отработал две недели, торжественно явился в офис программистов.

И пошло-поехало! Не работа, а просто мечта! Мне выдали пачку задач, с полными, чёткими, понятными инструкциями по всему, что с ними связано – и как среду разработки развернуть, и где что скачать, и в каких модулях, функциях писать код. Задания чёткие, понятные и, сразу видно, не из пальца высосанные.

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

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

А главное – ничто не давит. Ни сроки, ни клиенты. Я делаю, опытные программисты смотрят, дают советы, показывают неоптимальности, я исправляю. Блестяще.

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

Вечер

Во втором месяце испытательного срока мне начали давать реальные задачи по проектам. Конечно, не самые критичные, срочные или важные. Но – реальные!

Главное их отличие от учебных – я был первопроходцем! Учебные-то прорешали все, кому не лень – и опытные программисты, и такие же зелёные, как я. В реальных, пусть и несложных задачах, первой звездой, альфой, был я.

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

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

Перетерпев первые трудности, я влился. Я снова программировал. Много, интересно. Особенно мне нравилось, как бы это назвать… Равноправие, наверное. Меня стали звать на совещания, спрашивать сроки, проблемы по задачам, знакомить с ходом проекта. Ну, не прям меня лично, но я тоже слушал, наравне со всеми остальными программистами.

Мне всё было понятно, хоть и с некоторыми трудностями и оговорками. Я не всегда знал или понимал, что было до моего кода, и что будет после него. Моё задание было изолированным, объяснённым, понятным. Я просто программировал.

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

А потом наступила ночь.

Ночь

На третий месяц всё изменилось. В первый же день руководитель торжественно объявил: «Теперь началась настоящая работа». И загадочно улыбнулся.

Мне дали задачу. Она оказалась совсем непохожей на предыдущие. Не было имён модулей, бизнес-задачи, входа и выхода. Задача примерно звучала, как «тут где-то проблема, надо найти и устранить».

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

На второй день мне стало немного страшно. Особенно под вечер. Я перестал понимать, или просто забыл, что я вообще ищу. Только собрался пойти и ещё раз спросить, как… Мне дали ещё одну задачу. «Распараллелить вот чё там под этой кнопкой на 2-3 потока, если получится». Если получится!

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

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

Позвал его, всё подготовил, открыл, дождался, он подошёл… И я ляпнул «смотрю и ничего не понимаю». Что именно не понимаешь, спросил он. Ну, говорю, куда код написать, который распараллелит. Он – найди корневой вызов, подходящий для изоляции, и сделай обёртку. И ушёл.

Я погуглил, конечно, но понятнее не стало. Прошло ещё два дня. Ни строчки код так и не написал. Я собрался с духом и снова подозвал руководителя.

Сказал, что не могу понять, куда писать код. Он ответил, что это нормально, не надо переживать. Но и бросать не надо. Надо искать. И опять ушёл. Снова день без строчки кода.

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

Оказалось, что надо понимать чужой код. Это не опция, а обязаловка. Этот код писал не я. И не мой руководитель. Зачастую – вообще кто-то не из нашей команды. Иногда даже не из нашей страны. И понимать чужой код надо больше и чаще, чем писать свой. Потому что «вообще-то, весь нужный код уже написан».

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

Если я каким-то чудом найду, где написать свой код, то надо выдерживать стиль… Стоп, нет. Надо писать код в объединённом стиле – «наш плюс ихний». Как на футболках Студии Артемия Лебедева, где мат написал английскими буквами. Да, кстати, я так и не нашёл, куда написать свой код.

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

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

Блин, а я откуда должен уметь его понимать-то?! Я нигде не учился понимать код! На курсах меня натаскивали только программировать, разрабатывать, кодировать! В первый и второй месяц работы – аналогично! Я программист, в конце-то концов, пусть и начинающий! Я хочу писать код!

Знаете, что мне ответили? Опытный программист не может мне помочь. Он не найдёт, куда мне писать код. Ему некогда. Он ищет, где написать свой код. И добавили, что это нормально. Так и должно быть.

Этот дикий, нарастающий с каждым днём стресс, продлился в течение всего третьего месяца. Я не написал ни одной строки кода. Ни одной! Я так и не понял, куда мне писать код. Пока я копался, задачи у меня забирали. Выдадут, подождут несколько дней, заберут. Говорят, потому что проект ждать не будет.

У меня очень быстро развился полный букет комплексов, от неполноценности до самозванца. Я вообще перестал понимать, кто я, чем занимаюсь, куда иду, зачем всё это. И главное – я уже не знал, программист ли я. И что такое программирование.

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

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

Самое непонятное и возмутительное: всем окружающим нормально! Я понаблюдал – реально, полдня читают! Чтобы потом написать три строки! И это они называют программированием! Ну или ладно, не они… И это называется программированием?! Разработкой?

Так и должно быть? У всех? Везде? И у вас? Вот вы честно мне скажите – я один такой? Все прям читают код и понимают его? И понимают, зачем понимают?

Не могу больше. Это не моё. Я не тяну. Всю ночь не спал, ворочался, вставал, курил, читал, пытался смотреть телевизор, снова ложился… Ненавижу.

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

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

Я один в темноте.

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


  1. kenoma
    18.05.2022 23:44
    +45

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

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


    1. VadimChin
      19.05.2022 00:14
      +22

      это ж художественное чтиво ? не? )


      1. vassabi
        19.05.2022 00:37
        +35

        вы сейчас как будто

        из мема

        Но, если серьезно, то "Распараллелить вот чё там под этой кнопкой на 2-3 потока, если получится" - это реальная задача, у меня самого такая была была полгода тому назад кстати.

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


        1. SadOcean
          19.05.2022 11:22
          +1

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


        1. Sun-ami
          19.05.2022 12:50
          +7

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


        1. DMGarikk
          19.05.2022 22:35
          +2

          Теперь бедняга сидит, фигачит кластер с балансировщиком, бгггг)

          Хах… я мечтаю о таких задачах, а дают какую-то ерунду с поиском плавающих багов как у автора, только размазанных на десяток либ и сервисов…


      1. Sly_tom_cat
        19.05.2022 01:19
        +5

        Даже если художественное чтиво, то оно очень близко к тому, что есть.


        1. Faxfox
          19.05.2022 09:01
          +17

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


          1. Sly_tom_cat
            19.05.2022 11:18
            +11

            Тут все слишком 'it depends'...
            Иногда и сам работник виноват в том, что не налаживает контакты с коллегами и руководством. Ведь нужно репортить "нифига не понял" не через день два, а через несколько часов безрезультатного тупления. И главное - важно не боятся признавать что ты не догоняешь.
            Я вообще считаю, что придя в сложный проект даже и через год работы можно смело признаваться что чего-то не понимаешь - это естественно.


            1. Faxfox
              19.05.2022 11:39
              +2

              Возможно еще основная канва истории в том, что человек писал и рефакторил изначально собственный код, а потом ему дали чужой )))

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


          1. RVZ
            19.05.2022 11:51

            Нет тут никакой


    1. DavidGalamyan
      19.05.2022 13:58

      Не согласен, все зависит от курса, не стоит говорить за всех, странная позиция.

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


      1. Bars13
        20.05.2022 17:16

        Что за курс проходили, если не секрет?


    1. MegaMANGO
      19.05.2022 22:27

      Умению писать код так, чтобы его было просто читать на курсах не научат

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


  1. vagon333
    19.05.2022 00:29
    +21

    Самое непонятное и возмутительное: всем окружающим нормально!

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

    Иван, не переживайте.
    Максимум что может произойти - вас уволят. :)
    Пока это не случилось, наберитесь терпения и каждый день по кусочку постарайтесь вникнуть в чужой проект.

    Поверьте, читать чужой код и не плеваться - это верх профессионализма.
    Обычно, новички приходят в контору, смотрят на проект, говорят что это 'legacy shit' (устаревшее дерьмо) и они напишут с нуля лучше.
    Это новички.

    У вас сейчас курс профессионала - работа с чужим кодом.
    Примите как новый бесплатный курс, за который платит контора.


    1. boogiedimik
      19.05.2022 10:21
      +6

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


      1. DvoiNic
        19.05.2022 13:37

        Это следствие. Видимо, причиной является переход в 1с ERP (ну и дочерних продуктов типа УТ и КА) с 2.4 на 2.5


        1. SilverHorse
          19.05.2022 18:13
          +7

          Пожалуйста, не теребите мой PTSD, мы сейчас делаем этот переход на второй центральной базе холдинга - ERP АПК, в которой проще сказать, что НЕ переписано за прошлые годы, и если мы не закончим этот длящийся уже восемь месяцев ад с очень медленно кипящими котлами, я скоро начну путать окно с дверью (и этому не сильно помогает то, что одно из окон у нас в кабинете это действительно дверь, ведущая на крышу)... Спасает одно - у меня отпуск через две недели. Но мне уже охота выйти если не в окно, то из айти точно, у меня скоро панические атаки от бесконечного копипаста и адаптации плохого кода будут...

          2.5 - это самая лютая шиза, которую я видел в 1С за всю карьеру... хотя вру, в недрах ЗуПа в том аде функционального программирования встречаются все еще вещи похуже. Но реально, зачем в регистре, хранящем значения для RLS, просто брать и на ровном месте приписывать ресурсам "Право..." к существующему имени? Этому нет никакого обоснования, просто взяли и по желанию левой пятки в изолированном механизме, не менявшемся годами, переименовали ресурсы, поломав всем все самописные шаблоны RLS. Зачем брать и заменять в отдельных документах перечисление ставок НДС на определяемый тип, состоящий... из одного этого перечисления? У меня почти случилась истерика, когда я увидел эту причину упавшего обмена НСИ через редко используемый веб-сервис. Зачем менять перечисление способов расчета в договорах контрагентов, переименовав старое значение ПоЗаказамНакладным в ПоЗаказам с тем же смыслом... и добавив в него же новое значение ПоЗаказамНакладным с другим смыслом и синонимом?!

          Кто-нибудь, внедрите уже директиву &ИменемНуралиеваВыполнитьГдеУгодноИСделатьЗашибись, у меня желание видеть код 1С уже принимает комплексные значения...


          1. DvoiNic
            20.05.2022 09:32

            "мы не знаем, что такое <s>горжетка</s>PTSD, но если это то, что мы думаем... "

            Да, вопросы именно такие же. Плюс вопрос - "что же они все-таки курят??"


  1. siarheiblr
    19.05.2022 00:48
    +35

    Всего за месяц ни одной строчки? Эх, салага…

    Знаешь, как выглядит ночь? Это когда ты весь такой выходишь на работу, а там царство велосипедов. Хороших таких, матёрых велосипедов, целые сонмы демонов, порождённые даже слишком уж бодрствующими мозгами которым нужно промо. И ты понимаешь, что из твоего предыдущего опыта подходят разве что самые базовые знания и умение докапываться до сути самой заковыристой дичи. Вот тебе документация (неполная и часто устаревшая), вот тебе learning path (запутанный), вот тебе полгода времени - разбирайся. Собес ты прошёл, мы в тебя верим. Что-то работающее ты выдашь хорошо если через полгода. Что-то действительно полезное… ну, если повезёт то тогда же.

    Если что это будни новичка одного из FAANG’ов :)


    1. euroUK
      19.05.2022 10:56
      +13

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


    1. ReadOnlySadUser
      19.05.2022 11:55
      +10

      Выглядит как обычный рабочий день в С++ проекте :D


    1. event1
      19.05.2022 17:12
      +5

      У меня первой настоящей задачей было перевести код эквалайзера с ассемблера устаревшего DSP на С. Из документации, только комментарии на немецком. Излишне упоминать, что в цифровой обработке сигналов я мало что понимаю


      1. AVX
        19.05.2022 21:25

        Вот почему я не стал именно программистом. Нужно достаточно глубоко вникать в каждую задачу, будь то СУБД, или обработка сигналов. В Вашем случае придëтся изучить в какой-то степени и цифровую обработку сигналов, и даташиты на тот DSP, и даже физику и высшую математику вспомнить (Фурье там и прочие комплексные числа).


        1. event1
          19.05.2022 21:33

          Да, всё так и было примерно. Разве что физику и математику я помнил, лучше ибо то ли писал диплом, то ли только защитился


        1. ReadOnlySadUser
          21.05.2022 03:38

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

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


    1. zuek
      19.05.2022 17:40

      У меня был кратковременный опыт работы "программистом 1С", вернее, даже не программистом 1С, а просто разработчиком web-портала для клиентов с подключением к 1С в качестве "базы данных"... на тот момент у меня был кое-какой опыт написания внутренних web-порталов на php с БД mysql/mariadb и pgsql, был опыт администрирования 1С в среде Linux (там немало времени приходилось проводить в конфигураторе для отлова платформо-зависимых багов)... в общем, к концу первого года я запил, но к середине второго года клиенты уже вовсю работали в "личных кабинетах" и нахваливали за удобство... ах, да, помимо клиентов ещё пришлось делать "интерфейс оператора" и "мобильное приложение курьера" (нет, само приложение писал не я, но транспорт и протоколы взаимодействия - с меня)... в общем, без чтения чужого кода, а порой и без реверс-инжинеринга в более-менее крупном/старом проекте - не бывает.


    1. Diamon33
      20.05.2022 01:39

      Знакомый в около-FAANG первый MR/PR создал через 3 месяца. Настолько все долго. Ему не терпелось уже на второй день "фичи пилить", а ему отвечали "ну ты сначала разберись в проекте".


  1. 16tomatotonns
    19.05.2022 01:07
    +11

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

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

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


    1. v2ray
      19.05.2022 05:01
      -22

      nifiga - na tebya v pervyi mesyac programista-soprovozhdeniya sbrasyvayut vsyo na chyom nelzya bystro zarabotat da vsyo chto ne dodelali (ne smogli) no davno poluchili oplatu poetomu ty dazhe sdelav rabotu ne mozhesh zarabotat a eschyo na tebe tak gonyayut predreliznoe chtoby kogda ty prizhmesh razrabotchika tebe vydali grablyu vstavit ram zakomentiv problemu na buduschee ... a oplata kak u operators - eschyo povezlo chto u tebya est svoya tehnika a esli net zhdyosh kogda vse v otpusk uidut da (podkopiv problem) svalivaesh iz organization chtoby oni oschutili vsyo na sebe


      1. tlv
        19.05.2022 08:44
        +22

        Пожалуйста, воспользуйтесь в следующий раз конвертерами транслита вроде translit.ru - это же невозможно читать


        1. p07a1330
          19.05.2022 19:17
          +3

          Sc4;!T3 Spa5180 chT() NaP!Zan0 h0Ty@8! n3 v0t tak...        
          //sarcazm


      1. 16tomatotonns
        19.05.2022 19:42

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


  1. Sly_tom_cat
    19.05.2022 01:12
    +31

    Нормальная работа. Просто автору не хватает веры в себя и здорового упорства.

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

    Мне не так давно свалилась задача с формулировкой "там у нас непонятно почему упало - надо разобраться почему и пофиксить".
    В логах - куча всякой мути и ничего толком не понять.
    Глянул в код и вообще фигово стало - такого навороченного на голом месте и просто монструозного кода у нас проекте еще поискать...
    Три дня я врубался как там все закручено, голова "слегка распухла" и спать плохо стал. Но после этого я понял на сколько там все плохо и как сделать проще. В результате коммит был примерно такой -1200 +320 (строчек удалено и строчек добавлено). Но убил я на это почти две недели. Логи стали "белыми и пушистыми", а главное там еще были проблемы с постоянным разрывом связи и пере-подсоединение (которые собственно и вызывали совершенно непредсказуемое поведение этой навороченной супер-хрени и ее падение). Потрейсил и разобрался - коннекшены стали сутками держаться.

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

    И вот не считаю такие задачи неинтересными или скучными.

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


    1. Nehc
      19.05.2022 13:53
      +1

      Ну… Я согласен, что вы молодец и так и надо! Но есть одно небольшое «но»: если код еще не в продакшене, и тестеры его не гоняли, а по факту у вас -1200 и +320 — есть риск, что вы что-то таки упустили. :)


      1. Sly_tom_cat
        19.05.2022 23:05

        Да есть импакт - по метрикам там меньше запросов к поставщику.
        Внезапно порядка 1500 объектов переподсоединялись (посылая запрос поставщику) примерно через 2 минуты после прошлого соединения. А в новой версии это переподсоединение не требуется днями и неделями. С-но сообщений забикс кажет гораздо меньше.

        И таки да я там много чего в первой версии упустил. Но потому я потом еще почти неделю все это сам гонял.

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


    1. eee
      19.05.2022 14:04
      +4

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

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


      1. Sly_tom_cat
        19.05.2022 23:08

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


    1. Vasiliy_S
      19.05.2022 16:33
      +6

      Пройдет пару лет, в ваш код полезет кто-то другой и напишет статью на Хабре, как он разгребал ваш монстроузный код. /sarcasm

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


      1. Sly_tom_cat
        19.05.2022 23:13
        +1

        Я даже в своем коде, написанном когда-то, все это нахожу :)


        1. tempick
          21.05.2022 03:56

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


  1. amazed
    19.05.2022 01:32
    +20

    Глас из другого мира... Продуктовая компания с продуктом на N миллионов строк кода не ахти какая продвинутая.

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

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

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

    4. Нет никакого смотрения по пол дня в непонятный код. Каждый постоянно работает с одними и теми же модулями, которые хорошо знает. В день дописывает по 30-150 строк кода в среднем. Если код надо переделывать точечно по 3 строки вместо того чтобы писать новые функции, не очень непонятно как и зачем это разрабатывали.

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

    Почему у автора статьи все так плохо есть 3 версии:

    1. Это просто контора, которая берет людей по приколу а потом мучает их, пытаясь от них избавиться. Типа бросим всех в воду может кто-то да не утонет. При этом новичков заставляют учиться на самой сложной из мыслимых задач: поди туда не знаю куда, сделай то незнаю что в чужом коде. А простую и ясную задачу (писать новый код под юзер стори) дают тем кто заслужил. Безнадежно, в общем.

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

    3. Есть два разных мира - простой и ясный мир создания новых продуктов и сложный и мутный мир сопровождения долго существующих монстров. Автору не повезло попасть прежде всего во второй.

    Вот интересно, у кого какой опыт.


    1. da-nie
      19.05.2022 06:45
      -9

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

      Есть два разных мира — простой и ясный мир создания новых продуктов и сложный и мутный мир сопровождения долго существующих монстров. Автору не повезло попасть прежде всего во второй.


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

      Что такое красивое оформление в моём понимании
      #ifndef C_IMAGE_STORAGE_H
      #define C_IMAGE_STORAGE_H
      
      //****************************************************************************************************
      //класс хранения изображений
      //****************************************************************************************************
      
      //****************************************************************************************************
      //подключаемые библиотеки
      //****************************************************************************************************
      #include <QtWidgets>
      #include <stdint.h>
      #include <memory>
      
      //****************************************************************************************************
      //макроопределения
      //****************************************************************************************************
      
      //****************************************************************************************************
      //константы
      //****************************************************************************************************
      
      //****************************************************************************************************
      //предварительные объявления
      //****************************************************************************************************
      
      //****************************************************************************************************
      //класс хранения изображений
      //****************************************************************************************************
      class CImageStorage
      {
       public:
        //-перечисления---------------------------------------------------------------------------------------
        //-структуры------------------------------------------------------------------------------------------
        //-константы------------------------------------------------------------------------------------------
        static const int32_t TILE_WIDTH=16;//ширина тайла
        static const int32_t TILE_HEIGHT=16;//высота тайла
        static const int32_t TILE_BORDER_WIDTH=1;//ширина рамки
        static const int32_t TILE_BORDER_HEIGHT=1;//высота рамки
        static const int32_t TILE_WITH_BORDER_WIDTH=TILE_WIDTH+TILE_BORDER_WIDTH+TILE_BORDER_WIDTH;//ширина тайла с рамкой
        static const int32_t TILE_WITH_BORDER_HEIGHT=TILE_HEIGHT+TILE_BORDER_HEIGHT+TILE_BORDER_HEIGHT;//высота тайла с рамкой
       private:
        //-переменные-----------------------------------------------------------------------------------------
        QPixmap qPixmap_Tiles;//набор тайлов
        static std::shared_ptr<CImageStorage> cImageStorage_Ptr;//указатель на класс CImageStorage
       public:
        //-конструктор----------------------------------------------------------------------------------------
        CImageStorage(void);
        //-деструктор-----------------------------------------------------------------------------------------
        ~CImageStorage();
       public:
        //-открытые функции-----------------------------------------------------------------------------------
        static std::shared_ptr<CImageStorage> GetPtr(void);//получить указатель на класс CImageStorage
        QPixmap& GetTiles(void);//получить набор тайлов
       private:
        //-закрытые функции-----------------------------------------------------------------------------------
      };
      
      #endif
      


      1. vagon333
        19.05.2022 07:55
        +5

        В вашем perfect примере секция "класс хранения изображений " дублируется, или кажется?

        И, кстати, насчет perfect формат - на вкус и цвет.
        Лично у меня есть что поправить в вашем примере. :)


        1. da-nie
          19.05.2022 12:45

          Потому что это обёртка.

          Что именно?


          1. Narical
            21.05.2022 16:08
            +1

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

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

            2. Комментарии на русском... Я ни разу не участвовал в каком-то серьезном проекте, поэтому не уверен как тут обстоят дела "у взрослых". Для меня кажется естественным писать комментарии на английском (и я всегда делаю только так), потому что всегда есть вероятность что код после меня будет читать человек, незнакомый с русским. Но подчеркну, что это субъективно всё таки.

            3. TILE_WITH_BORDER_WITDTH я бы заменил на TILE_TOTAL_WIDTH, etc

            4. Названия членов-функций/данных в lower camel case

            5. Названия членов-данных начинаются с m_ или другого идентификатора

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

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

            #ifndef C_IMAGE_STORAGE_H
            #define C_IMAGE_STORAGE_H
            
            #include <QtWidgets>
            #include <stdint.h>
            #include <memory>
            
            class CImageStorage
            {
             public:
              
              static const int32_t TILE_WIDTH = 16;
              static const int32_t TILE_HEIGHT = 16;
              static const int32_t TILE_BORDER_WIDTH = 1;
              static const int32_t TILE_BORDER_HEIGHT = 1;
              static const int32_t TILE_TOTAL_WIDTH = TILE_WIDTH + 2*TILE_BORDER_WIDTH;
              static const int32_t TILE_TOTAL_HEIGHT = TILE_HEIGHT + 2*TILE_BORDER_HEIGHT;
             
              CImageStorage(void);
              ~CImageStorage();
              
              static std::shared_ptr<CImageStorage> getPtr(void); //FIXME: rename to something meaningful
              QPixmap& getTiles(void);
              
             private:
            
              QPixmap m_tiles;
              static std::shared_ptr<CImageStorage> m_ptr;
            
            };
            
            #endif

            upd: чуть ниже указали на много других моментов, таких как включение QtWidgets в заголовочник небольшого класса, когда достаточно было бы включить QPixmap


      1. mutantsan
        19.05.2022 08:06
        +18

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


        1. Hrodvitnir
          19.05.2022 08:47
          +12

          return 1; // returns 1

          Но особенно круто -- комментарий "конструктор"


        1. da-nie
          19.05.2022 12:45
          -5

          Это не визуальный мусор. Это разграничение зон внимания.


          1. Narical
            21.05.2022 16:15

            Затея понятна, только читать незнакомый код становится наоборот сложнее. Т.е. затея не работает на практике.


      1. 0xd34df00d
        19.05.2022 08:13
        +29

        Красиво…


        #include <QtWidgets>

        Времени компиляции это не помогает.


        CImageStorage

        Какую функцию несёт C?


        static const int32_t TILE_WIDTH=16;//ширина тайла

        Какую функцию несёт комментарий? Разве не очевидно, что терм с именем TILE_WIDTH означает, ну, ширину тайла?


        TILE_HEIGHT

        У вас код точно поддерживает неквадратные тайлы? Точно-точно?


        константы в классе

        Теперь, чтобы использовать TILE_WIDTH, надо делать #include "ImageStorage.h", или как он у вас там называется. Использовать эти константы из более лёгкого для включения файла, не подтягивающего весь QtWidgets (или даже просто QPixmap) теперь нельзя. Время компиляции — оно важно, чай на плюсах пишем, не на го каком-нибудь.


        QPixmap qPixmap_Tiles;

        Какую функцию здесь выполняет qPixmap в имени?


        static std::shared_ptr<CImageStorage> GetPtr(void);

        Это синглтон? Какую функцию здесь выполняет shared_ptr, кроме, судя по типам, предложения читающему код освежить свои знания о порядке инициализации глобальных статических переменных, чтобы убедиться, что здесь нет static initialization order fiasco? Почему бы просто не написать


        static CImageStorage& GetStorage()
        {
          static CImageStorage storage;
          return storage;
        }

        ?
        shared_ptr здесь — это ложь, потому что владение всегда будет держаться статической переменной, оно никогда не может быть передано кому-то ещё. Здесь не нужен shared_ptr.


        QPixmap& GetTiles(void);

        Прикольно. Судя по типам, этот геттер не может сделать особо ничего отличного от return qPixmap_Tiles;. Возможно, лениво инициализировать (но это в данном случае не имеет смысла) и залогировать обращение.


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


        1. da-nie
          19.05.2022 13:02
          -1

          Какую функцию несёт C?


          Указывает, что это класс. Собственно, как и в MFC.

          Какую функцию несёт комментарий? Разве не очевидно, что терм с именем TILE_WIDTH означает, ну, ширину тайла?


          Как я уже сказал выше, всё написанное на русском является разграничением зон внимания. Я, например, английский не воспринимаю быстро (я вообще немецкий учил). В отличие от русского.

          У вас код точно поддерживает неквадратные тайлы? Точно-точно?


          Абсолютно точно поддерживает.

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


          Не надо сказок. Время компиляции очень незначительно вырастает. Вот когда метапрограммирование суют, это считают круто и зашибись и пофиг на время. А тут вот прям фу-фу. ;) Константы должны быть инкапсулированы. Мне так нравится. Точка. Можете оценить время компиляции проекта.

          Какую функцию здесь выполняет qPixmap в имени?


          Указывает от чего произведено. Далеко не все IDE показывают типы классов и делают подсказки. Отсюда и такая привычка.

          Это синглтон?


          Да. Хотя я и забыл закрыть явный вызов конструктора. Это да.

          Почему бы просто не написать


          Потому что это оторванная от сущности функция. И потмоу что мне нравится сделать именно так.

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


          МОжет быть, чтобы потом было что расширять?


          1. 0xd34df00d
            19.05.2022 16:39
            +16

            Указывает, что это класс. Собственно, как и в MFC.

            Это понятно, но зачем указывать на то, что это класс?


            MFC — так себе образец для стиля кода. Я не припомню ни одной другой достаточно распространённой и современной библиотеки, где использовался бы один префикс для типов. Кроме кутей, пожалуй, где Q выполняет роль неймспейса, потому что во времена Qt 1.x не все компиляторы поддерживали неймспейсы, а с тех пор так повелось.


            Как я уже сказал выше, всё написанное на русском является разграничением зон внимания.

            И это внимание в итоге распыляется.


            Я, например, английский не воспринимаю быстро (я вообще немецкий учил). В отличие от русского.

            То есть, для вас быстрее, увидев константу TILE_WIDTH в коде, перейти к определению, чем воспринять непосредственно с английского?


            Не надо сказок. Время компиляции очень незначительно вырастает

            Я создал файл из одной строчки #include <QtWidgets> — он компилируется почти четыре секунды:


            8:23:31 d34df00d@deadaven ~/Programming/tmp/test % cat foo.cpp
            #include <QtWidgets>
            8:23:35 d34df00d@deadaven ~/Programming/tmp/test % time g++ -c -pipe -Wall -Wextra -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -I. -I/usr/include/qt5 -I/usr/include/qt5/QtWidgets -I/usr/include/qt5/QtGui -I/usr/include/qt5/QtCore -I. -I/usr/include/libdrm -I/usr/lib64/qt5/mkspecs/linux-g++ -o /dev/null foo.cpp 
            g++ -c -pipe -Wall -Wextra -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_WIDGETS_LIB   3,62s user 0,13s system 100% cpu 3,744 total

            (и нет, это не первый прогон, кэши ФС горячие)


            Если включать только QPixmap, он компилируется за 1.2 секунды:


            8:25:00 d34df00d@deadaven ~/Programming/tmp/test % cat foo.cpp
            #include <QPixmap>
            8:25:02 d34df00d@deadaven ~/Programming/tmp/test % time g++ -c -pipe -Wall -Wextra -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -I. -I/usr/include/qt5 -I/usr/include/qt5/QtWidgets -I/usr/include/qt5/QtGui -I/usr/include/qt5/QtCore -I. -I/usr/include/libdrm -I/usr/lib64/qt5/mkspecs/linux-g++ -o /dev/null foo.cpp
            g++ -c -pipe -Wall -Wextra -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_WIDGETS_LIB   1,20s user 0,05s system 100% cpu 1,247 total

            То есть, это в худшем случае лишние 2.5 секунды на каждый файл, включающий этот хедер.


            Вот когда метапрограммирование суют, это считают круто и зашибись и пофиг на время.

            метапрограммирование — это хотя бы прикольная разминка для ума.


            Константы должны быть инкапсулированы. Мне так нравится.

            Ну так инкапсулируйте их в каком-нибудь


            namespace Constants
            {
              const int32_t TILE_WIDTH=16;
            }

            Можете оценить время компиляции проекта.

            Извините, я прошёл по ссылке и увидел закомиченные артефакты сборки в build-DizzyEditor-Desktop_Qt_5_7_0_MinGW_32bit-Release, и даже не знаю, что сказать. Зачем это коммитить?


            Указывает от чего произведено. Далеко не все IDE показывают типы классов и делают подсказки. Отсюда и такая привычка.

            По личному опыту — код, в котором нужно знать прям конкретный тип переменной в каждой точке её использования, обычно не очень, ну да ладно.


            В кутях есть такой забавный класс, как, например, QWebEngineUrlRequestInterceptor. Будете ли вы называть поле этого типа как


            QWebEngineUrlRequestInterceptor qWebEngineUrlRequestInterceptor_interceptor;

            ?


            Потому что это оторванная от сущности функция.

            Почему обязательно оторванная?


            struct ImageStorage
            {
              QPixmap tiles;
            
              static ImageStorage& getStorage();
            };
            
            // где-то в .cpp
            ImageStorage& ImageStorage::getStorage()
            {
              static ImageStorage storage { QPixmap { "path/to/tiles" } };
              // или, если создание тайлов более нетривиальное
              static ImageStorage storage = []
              {
                // код, который раньше был в конструкторе
              } ();
              return storage;
            }

            Кстати, этот вариант кода и изолированнее, и для тестирования приятнее (не то чтобы я был фанатом тестирования…).


            И потмоу что мне нравится сделать именно так.

            Как? Писать кучу ненужного кода?


            МОжет быть, чтобы потом было что расширять?

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


            1. da-nie
              19.05.2022 19:14
              -4

              Это понятно, но зачем указывать на то, что это класс?


              Потому что мне это удобно. Я вижу, с чем работаю. С классом, со структорой, с чем-то ещё.

              MFC — так себе образец для стиля кода.


              Ну откройте исходники линукса. Там образец? ;)

              И это внимание в итоге распыляется.


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

              То есть, для вас быстрее, увидев константу TILE_WIDTH в коде, перейти к определению, чем воспринять непосредственно с английского?


              Разумеется. К тому же у меня есть правило, требующее описывать что это. И будет странно оставить часть переменных/констант/функций без описания только потому, что «это и так понятно что». Это нарушит эстетику восприятия. Я же сказал, я перфекционист.

              Я создал файл из одной строчки — он компилируется почти четыре секунды:


              И? А весь проект? Десять секунд? ;) Что вы делаете с осободившимся временем? ;) Самый большой мой проект (в репрозитории его нет, он по работе) с 100 000 строк компилируется в Qt за 3 минуты на Core 2 Duo. Но там около 1000 модулей.

              И не спрашивайте, почему подключён QtWidgets вместо конкретного — это сделано, например, чтобы в будущих версия Qt, где решат поменять имя файла заголовка в очередной раз не пришлось гадать, как именно оно теперь называется.

              метапрограммирование — это хотя бы прикольная разминка для ума.


              Вы программы пишете чтобы какие-то задачи решать или «для разминки ума»? Так вот, я практик.

              Ну так инкапсулируйте их в каком-нибудь


              Так делают только с константами, которые ни к кому конкретному (имеющему с ними однозначную логическую связь) не относятся и используются в разных частях по-разному. В данном случае константа чётко привязана к классу — она его смысловая часть.

              Зачем это коммитить?


              Чтобы желающий просто запустить и посмотреть, как работает, не гадал, как ему ЭТО собрать и запустить.

              По личному опыту — код, в котором нужно знать прям конкретный тип переменной в каждой точке её использования, обычно не очень, ну да ладно.


              Когда вы будете вспоминать что такое Image ( это свой класс? Класс QImage? Или ещё что-то?), а IDE будет показывать вам фигу, вы будете лазить по коду отыскивая, от кого это образовано и какие там вообще есть внутри функции. Оно мне надо? А вот так я чётко вижу что это за класс и от кого он взят, а значит, знаю уже сразу что он может и для чего он.

              Будете ли вы называть поле этого типа как


              Да, буду. В Qt не постеснялись же так назвать класс? Ну так и я не постесняюсь.

              Почему обязательно оторванная?


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

              Как? Писать кучу ненужного кода?


              А это кому как. Я так полагаю, что очень даже нужный. Тайлы убраны в отдельный класс. Класс нельзя создать дважды (как только конструктор private сделать не забуду).

              Одна вещь, которую я понял за всё время разработки — что я (и никто, кого я встречал) не способен прогнозировать, в каком месте и куда будет расширяться код.


              А поскольку это мой проект, я отлично знаю, куда я его поверну и что мне может потребоваться. ;)


              1. 0xd34df00d
                21.05.2022 06:39
                +6

                Потому что мне это удобно. Я вижу, с чем работаю. С классом, со структорой, с чем-то ещё.

                Ну а дальше что вы делаете с этой информацией? Вот видите вы CSomeClass и SSomeStruct — в чём разница? Куда интереснее, какое API у сущности, копируема ли она, и так далее.


                Ну откройте исходники линукса. Там образец? ;)

                Исходники линукса, написанного на C, вряд ли являются образцом кода на плюсах.


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

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


                К тому же у меня есть правило, требующее описывать что это.

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


                Это нарушит эстетику восприятия. Я же сказал, я перфекционист.

                Следование правилам без осознания их смысла и применимости, кажется, называется как-то иначе.


                И? А весь проект? Десять секунд? ;) Что вы делаете с осободившимся временем? ;)

                Когда в результате изменения файла я получаю фидбек через 0.5-1 секунду — это совсем другое, чем если я получаю фидбек через 5-10 секунд. Меньше выбивает из потока, меньше потери концентрации, меньше бессмысленных комментариев на хабре.


                Самый большой мой проект (в репрозитории его нет, он по работе) с 100 000 строк компилируется в Qt за 3 минуты на Core 2 Duo. Но там около 1000 модулей.

                Мой самый большой проект в примерно 700 тыщ строк компилируется на 12-ядерном i7 минут за 10-15. И это больно.


                Олсо, если вы так весь код пишете, то смысловых строк после удаления препроцессором комментариев там тыщ 40.


                И не спрашивайте, почему подключён QtWidgets вместо конкретного — это сделано, например, чтобы в будущих версия Qt, где решат поменять имя файла заголовка в очередной раз не пришлось гадать, как именно оно теперь называется.

                QPixmap всегда будет доступен через <QPixmap>, это их API-гарантия начиная примерно с Qt 4. У вас скорее API QPixmap поменяется, чем имя инклюда.


                Вы программы пишете чтобы какие-то задачи решать или «для разминки ума»? Так вот, я практик.

                Когда как. Вы неявно спросили, зачем люди метапрограммируют и почему они этим довольны, а я явно ответил.


                Так делают только с константами, которые ни к кому конкретному (имеющему с ними однозначную логическую связь) не относятся и используются в разных частях по-разному. В данном случае константа чётко привязана к классу — она его смысловая часть.

                Но она в нём даже не используется!


                Почему размер тайла — свойство хранилища тайлов? Каким образом смысл хранилища тайлов зависит от размера тайла? Тайлы у вас сводятся к одной картинке — хранилище тайлов их не выделяет, не нарезает, ничего с ними не делает. Хранилиещ тайлов — это сто двадцать четыре строки кода, который является тоненькой обёрткой над QPixmap'ом.


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


                Чтобы желающий просто запустить и посмотреть, как работает, не гадал, как ему ЭТО собрать и запустить.

                Для этого обычно пишут инструкции для сборки в README. Которого у вас, кстати, при всём вашем перфекционизме нет.


                Если очень хочется, могли бы настроить github actions (или другую из доступных бесплатно для опенесорса CI), чтобы оно собирало новую версию вашего кода при каждом пуше. Сейчас же вы по-хорошему должны обновлять закомиченный экзешник с каждым изменением кода, что неудобно, ведёт к раздуванию репы, и вообще является работой, которую может выполнять машина (тот же CI). Зачем?


                Когда вы будете вспоминать что такое Image ( это свой класс? Класс QImage? Или ещё что-то?)

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


                а IDE будет показывать вам фигу

                IDE мне уже очень давно не показывает фигу.


                Да, буду. В Qt не постеснялись же так назвать класс? Ну так и я не постесняюсь.

                Очень хорошо. Два вопроса:


                1. Почему у вас поле с типом std::shared_ptr<CImageStorage> называется cImageStorage_Ptr, а не std_shared_ptr_cImageStorage_Ptr или как-то так? Ведь у вас в типе теперь не указано, что это именно shared_ptr и именно из std::. Есть же ещё boost::shared_ptr, например, есть std::unique_ptr — непонятно, надо обязательно указать конкретику в имени.
                2. Как вы назовёте поле с именем [человека] типа std::string? std::string string_name;//имя? std::string std_string_name;//имя?

                А у вас я легко создам сколько угодно этих классов вне этих функций. Вот забуду и создам.

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


                struct ImageStorage
                {
                  QPixmap tiles = loadTiles();
                
                  static ImageStorage& getStorage();
                
                  ImageStorage(const ImageStorage&) = delete;
                  ImageStorage(ImageStorage&&) = delete;
                  ImageStorage& operator=(const ImageStorage&) = delete;
                  ImageStorage& operator=(ImageStorage&&) = delete;
                private:
                  ImageStorage() = default;
                  static QPixmap loadTiles();
                };

                Тайлы убраны в отдельный класс.

                Ну вон они и выше убраны в отдельный класс.


                А поскольку это мой проект, я отлично знаю, куда я его поверну и что мне может потребоваться. ;)

                Ох, знал бы я это про свои личные проекты…


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


              1. Ritan
                21.05.2022 10:19
                +2

                Самый большой мой проект (в репрозитории его нет, он по работе) с 100 000 строк компилируется в Qt за 3 минуты на Core 2 Duo. Но там около 1000 модулей.

                Везёт. Самый большой мой проект компилируется 42 минуты на 11900x с 64Гб памяти(32 недостаточно). И да, там тоже думали "что вы делаете со всем освободившимся временем", когда начинали его писать 10 лет назад. А распутать этот клубок сейчас сил и времени ни у кого не хватает.

                Это, конечно, не хром с 6 часами на сборку, но фидбек после изменений требует минут 5 на компиляцию и линковку


                1. yerbabuena
                  21.05.2022 14:17
                  +1

                  "Это неописуемо - сказал песик, подбежав к баобабу". А какая тематика бизнеса у этого монстра? И на каких языках сделан?


                  1. 0xd34df00d
                    21.05.2022 19:38

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


            1. Heniker
              20.05.2022 01:03

              Мысленно аплодирую вашему подходу к написанию кода.


      1. gscdlr
        19.05.2022 08:37
        +12

        Фу, пробелов нет между // и комментом.

        Фу, длина строки больше 110 символов.

        Фу, табы не наглядные, в стиле кланг-формат.

        Фу, комменты на русском.

        /* Что это? Душность в ответ на душность, наверное. */


        1. Sly_tom_cat
          19.05.2022 11:24
          +8

          Прямо как вывод какой-нибудь утилиты проверки code-style :)


          1. ReadOnlySadUser
            19.05.2022 11:57
            +13

            Хочу себе плагин к GCC, который будет на меня так ругаться :D

            Ты чё, дебил? У тебя тут unused variable

            Даже дебил бы понял, что я cannot instantiate template...

            Undefined reference. По ходу кто-то что-то забыл, да?


        1. da-nie
          19.05.2022 19:31
          -5

          Фу, пробелов нет между // и комментом.


          Эстетически коробит от пробелов в данном месте.

          Фу, длина строки больше 110 символов.


          Мешает клиповое мышление воспринимать больше 100? ;)

          Фу, табы не наглядные, в стиле кланг-формат.


          Пробелы, а не табы. Большие отступы так же вызывают ощущение брезгливости и неряшливости.

          Фу, комменты на русском.


          Я плохо знаком с английским. Да и свой язык я всё же уважаю и люблю. С чего бы вдруг, а?

          /* Что это? Душность в ответ на душность, наверное. */


          Это просто какой-то комплекс. ;) Надейтесь, что пройдёт. :)


      1. SergeyMax
        19.05.2022 11:10
        +11

        static const int32_t TILE_WIDTH=16;//ширина тайла

        И чему же равна ширина тайла? Почему не пишете об этом в комменте?


        1. da-nie
          19.05.2022 13:05

          Да, вы правы. Нужно как у вас. ;)

          void lcd_printd( int32_t n, uint32_t l ) // ultimately simplified sprintf
          {
            uint32_t k = 0;
          
            if( n < 0 )
            {
              digits[0] = '-';
              k++;
              n = -n;
            }
            
            uint32_t i = l;
            while( i > k )
            {
              digits[--i] = n % 10 + 0x30;
              n = n / 10;
            }
              
            digits[l] = 0;
            lcd_prints( digits );
          }
          


          Эдакая игра в угадайку. ;)


          1. SergeyMax
            19.05.2022 13:11

            А я и не программист)


            1. da-nie
              19.05.2022 13:14

              Тогда, если не секрет, зачем берётесь иронизировать? ;)
              Вас так взять, так все не программисты. ;)

              P.S. Я тоже не программист по образованию.


              1. SergeyMax
                19.05.2022 13:15
                +6

                Потому что хочу и могу.


          1. 1fid
            19.05.2022 14:43
            +1

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

            // n = 987
            // i=2: digits[2] = 987 % 10 = 7
            // i=1: digits[1] = 98 % 10 = 8
            // i=0: digits[0] = 9 % 10 = 9


          1. blueboar2
            19.05.2022 15:58
            +8

            Вообще - назначение сего кода мне стало очевидно через секунд 5. Из которых через две я понял - что он делает из названия - а еще три - проверял - действительно ли все так - или чего-то я не учел. А что вас смутило? Проверяем число на отрицательность, ставим минус если надо, ну а если нет - делим на десять, беря остатки. Так обычно число на цифры и делят.


            1. da-nie
              19.05.2022 19:19
              -4

              Да ну? ;) И что такое 0x30? ;) Сразу догадались? Ну так вот, нифига такого в коде быть не должно.

              через секунд 5


              А если там написать, что происходит, то это будет ясно через 1 секунду. ;)


              1. vassabi
                20.05.2022 09:46

                ... кто в ASCII кодах что-то писал - тот уже ни 0х10 ни 0х30 (и многих других) не забудет :)


                1. DvoiNic
                  20.05.2022 10:05
                  +1

                  много ли таких осталось?


                  1. vassabi
                    21.05.2022 16:22

                    ну, есть же еще кузнецы?

                    А много их и не нужно, кмк


              1. Ritan
                21.05.2022 10:32
                +1

                https://github.com/da-nie/Dizzy-game-

                clexicalanalyzer.cpp

                Кстати, хранение всех файлов в корне проекта вместе с мусором от IDE, как я понимаю, тоже помогает разделению зон внимания?

                cAutomath_PrimaryLevel.AddRule("begin","comma end",',',',',true);

                //cAutomath_PrimaryLevel.AddRule("begin","plus end",'+','+',true);

                //cAutomath_PrimaryLevel.AddRule("begin","minus end",'-','-',true);

                cAutomath_PrimaryLevel.AddRule("begin","quote",'\"','\"',false);

                cAutomath_PrimaryLevel.AddRule("begin","terminal",0,0,true);

                cAutomath_PrimaryLevel.AddRule("begin","terminal",10,10,true);

                cAutomath_PrimaryLevel.AddRule("begin","terminal",13,13,true);

                Что такое в этом коде 0, 10 и 13, совершенно очевидно каждому


                1. da-nie
                  21.05.2022 10:48
                  -2

                  Кстати, хранение всех файлов в корне проекта вместе с мусором от IDE, как я понимаю, тоже помогает разделению зон внимания?


                  Просто проект ещё не разросся до того уровня, когда я такое разделение делаю. Да и в Visual Studio 2010 довольно неудобно делать папки. Но, обычно, такое разделение у меня присутствует после преодоления некоторой планки сложности.

                  Что такое в этом коде 0, 10 и 13, совершенно очевидно каждому


                  Это, конечно, требует рефакторинга. Но ещё не дошёл, значит. Начиналось-то с прототипа «на попробовать». И забыл. Много, много где надо константы заменять.


          1. 0xd34df00d
            19.05.2022 16:43
            +6

            Этот код можно улучшить (написать '0' вместо 0x30, использовать std::div для вычисления частного и остатка в одну операцию, ибо не факт, что компилятор это соптимизирует, ну и никогда не использовать l в качестве имени переменной, потому что уж больно похоже на 1, и вообще зачем там i, когда уже есть l, плюс есть ещё пара мелочей), но здесь улучшения локальны.


            1. SergeyMax
              19.05.2022 20:28

              Вообще говоря, на момент написания этого кода для меня было неочевидно, что кодировка LCD-экрана совпадает с кодировкой ASCII, поэтому я глянул в табличку, посмотрел, где начинаются цифры, и вписал эту константу в код. А буква <code>l</code> символизирует length, и отличается от единицы не написанием, а цветом.


              1. 0xd34df00d
                19.05.2022 22:02

                Почему бы не написать хотя бы len?


                А лучше — передавать std::array вместо отдельно digits и отдельно len. Кстати, почему l(en) — параметр, а digits ­— нет?


                1. SergeyMax
                  19.05.2022 22:16

                  А лучше — передавать std::array

                  это C, а не C++, и l(en) здесь не длина массива, а количество отображаемых символов, или что-то вроде того


          1. askharitonov
            19.05.2022 20:41
            +1

            n = -n;

            При n равном -2147483648 код ведь будет работать неправильно?


            1. SergeyMax
              19.05.2022 22:26
              +3

              Код будет работать неправильно гораздо раньше: число больше 9999 просто не поместится на экран.


      1. Dolios
        19.05.2022 12:16
        +11

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


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


        static const int32_t TILE_WIDTH=16;//ширина тайла

        Я ваш коллега, я открыл ваш код. 16 чего? cm, mm, in, px, pt?


        1. da-nie
          19.05.2022 13:07
          -5

          Такие комментарии в коде визуально разделяют зоны внимания. А мусор — это вот такое оформление кода, как у вышеприведённого критика.

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


          Я работал только в маленьких командах. И вот там как раз писали как я выше показал по ссылке.

          Я ваш коллега, я открыл ваш код. 16 чего? cm, mm, in, px, pt?


          Логично, конечно. Но мне в голову не пришло, что размер тайла может быть отличен от пикселей. Уж извините.


          1. Dolios
            19.05.2022 14:06
            +7

            Такие комментарии в коде визуально разделяют зоны внимания

            Нет, они отвлекают. Я сам вижу, где тут конструктор, а где приватные свойства.


            А мусор — это вот такое оформление кода, как у вышеприведённого критика.

            А что конкретно тут не так с оформлением, по-вашему?


            И вот там как раз писали как я выше показал по ссылке.

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


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

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


            1. da-nie
              19.05.2022 19:25
              -5

              Нет, они отвлекают. Я сам вижу, где тут конструктор, а где приватные свойства.


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

              А что конкретно тут не так с оформлением, по-вашему?


              Куча магических констант. Неудачное имя переменной l. Нулевое объяснение, что происходит и зачем всё это. Не отделены глобальные и локальные переменные ( dgits — глобальный массив. У меня есть правило такие переменные писать с большой буквы, чтобы не путать их с локальными).

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


              Никакой вероятности. Просто у вас привычка смотреть на голую портянку. А у меня от таких портянок идиосинкразия.

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


              О! Какой тонкий троллинг! ;)


              1. andyblaster
                20.05.2022 12:34
                +4

                VS Code с расширением C/C++ Ext Pack
                VS Code с расширением C/C++ Ext Pack

                Я конечно, не сишник и не разбираюсь в IDE, но даже VS Code может показать структуру модуля и класс со всеми конструкторами и прочим.

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

                Такое оформление характерно и происходит от незрелых IDE, как у меня конфигуратор в 1Ске, где в принципе отсутствует понятие карты модуля и структуры модуля. В той же EDT на базе Eclipse, опять же, насколько бы она не устарела на текущий момент, уже зачатки этого есть, потому что это реально необходимо и нужно людям. Также преимущество инструментов по сравнению с комментариями, что структура строится автоматически средой, а текст пишется вами. Настоящий программист, и тем более перфекционист, стремится избавиться от лишнего труда, потому что человек изначально ненадежен по сравнению с компьютером в тупых механических операциях.

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

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

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


                1. da-nie
                  20.05.2022 16:38
                  -3

                  Я конечно, не сишник и не разбираюсь в IDE, но даже VS Code может показать структуру модуля и класс со всеми конструкторами и прочим.


                  А IDEMomentics, например, не может.

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


                  Вы уж извините, но эстетику миллионов мух я уже видел. И их код мне решительно не нравится. Более интересно, с какого перепугу вы вдруг решили, что можете говорить от имени всех и полагать, что это комментаторы подобные вам являются настоящими программистами? Что вы там такое программируете, что вдруг себя возомнили мерилом практик оформления? Вы, господа, просто, видно, очень молодые (хоть по возрасту, хоть прсихологически — сейчас поздно взрослеют), и, как все молодые, борзые и полагающие, что все, кто делает иначе чем вы, это отстой. Вот и не нашли ничего лучше, чем просто напасть на всё, что вам кажется непонятным. И у вас, извините, опломба столько, что на десять человек хватит. А разница тут как между классической музыкой, где всё гармонично и по-полочкам и всей этой современной дребеденью. Вы просто не зрелые, господа.


                  1. F0iL
                    20.05.2022 17:18
                    +2

                    А IDEMomentics, например, не может.

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

                    полагающие, что все, кто делает иначе чем вы, это отстой

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

                    Вы, господа, просто, видно, очень молодые 

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


                    1. da-nie
                      20.05.2022 17:39

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


                      Да ну? ;) Это просто ваша вкусовщина и не более того. Какие негативнеы последствия вы углядели? Я написал самостоятельно несколько тысяч разных программ за все годы. От систем управления персоналом и игр до систем управления технологическим оборудованием и военной техникой. Я могу мгновенно вспомнить, что и как в этих проектах работает просто глянув на свой код. В любом. Потому что в этом именовании есть система и ряд правил. И именно они позволяют в нём легко и просто ориентироваться.

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


                      А это ответ в стиле «сам дурак», да? ;) Ну и кто тут остался в детстве?
                      И с чего это вы взяли, что можете вообще кого-то учить? Такая твёрдая уверенность как раз и выдаёт излишне самоуверенное существо с опломбом до небес. Я вот себе такое не позволяю и допускаю разные подходы, со своими плюсами и минусами, однако, предупрежу, что вот это и это у меня вызывают практически физический дискомфорт при просмотре. А вы допускаете, даже не узнав, почему сделано именно так и какие задачи решаются таким подходом.


                      1. F0iL
                        20.05.2022 18:18
                        +5

                        :)

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

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

                        А теперь про "негативные последствия" - эта фраза была не про стандарт оформления, а про конкретный код на C++, который вы привели выше. Коллеги-хабравчане весьма здраво и по делу поревьюили его тут и тут, например - и это действительно забавно, потому что вы утверждаете про 20 лет опыта и тысячи (странно, что не миллионы) написанных программ, но при этом делаете банальные ошибки, которые больше ожидаешь увидеть в коде студента, чем опытного разработчика.

                        А это ответ в стиле «сам дурак», да? ;) 

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

                        А вы допускаете, даже не узнав, почему сделано именно так и какие задачи решаются таким подходом.

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

                        И с чего это вы взяли, что можете вообще кого-то учить?

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


                      1. da-nie
                        20.05.2022 20:20

                        Вы же на все что не вписывается в ваши привычки автоматически вешаете ярлык «смотреть тяжко», сами делая именно то, в чем обвиняете других — нападаете на то, что вам кажется непонятным и что вы не способны понять.


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

                        Коллеги-хабравчане весьма здраво и по делу поревьюили его тут и тут,


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

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


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

                        Так именно об этом вас тут в комментариях несколько раз уже подробно расспрашивали


                        Вы, наверное, какие-то другие комментарии читаете? Именно об этом меня тут не расспрашивали. Сразу начали хаять, минусовать и прикалываться («а чего размер в комментарий не вписали?»). Так что не надо сказок.

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


                        А с чего это вы опять решили, что ваш подход правильный? ;) Вот это и есть раздутое ЧСВ.

                        и тысячи (странно, что не миллионы) написанных программ


                        У меня одних только драйверов под QNX написано штук 40. И нет, я не соврал и не приукрасил (конечно, не все они масштабные проекты, но тем не менее). В моём репозитории лежит около 50 программ. Так это каждая сотая туда попала (и не попала, естественно, ни одна с работы). Я этих программ писал на каждый чих знаете сколько? У меня одних версий 3D-движков в 2005 было штук 10 написано. Та же участь постигла и свёрточную нейросеть — были версии с CUDA, без CUDA, с распараллеливанием на CPU, без распараллеливания, с ошибочно понятой концепцией обучения, на шаблонах и без. Дофига всего было написано. А теперь приходит Вася клепальщик-сайтов и начинает рассказывать, как он там «экономит время, как настоящий программист» и как ему не нравится визуальное оформление и отступы и вообще имена непривычные. Вася уверен, что он знает и умеет всё. Когда в реальности такому Васе даёшь задание сделать на 4 микроконтроллерах объединённых ДОЗУ отказоустойчивую систему, Вася мычит и теряется, а потом пишет вот такой вот код (который, кстати, всем нравится). А этот код, на самом деле, ну не очень и сильно не очень (но 7 плюсов, замечу!). И вот такой вот Вася с апломбом начинает рассказывать, как он постиг дзен, а у меня всё не по дзену. Так что ещё раз повторюсь, не надо сказок по поводу ваших оценок. Я же не виноват, что чувство прекрасного редкая штука и посещает не часто.


                      1. F0iL
                        20.05.2022 21:20
                        +2

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

                        Опять вернулись к тому же. Для вас код, не соответствующий вашим представлениям о "прекрасном" автоматически считается "физически неприятным" и сразу же отвергается, но когда другие (имея на то причины) говорят то же самое про ваш код, у вас тут же пригорает и вы переходите на личности ^_^

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

                        Опять же - это начали делать вы, я лишь стал копировать ваше поведение, и вот вы уже снова недовольны когда к вам обращаются ровно так же, как и вы к другим :)

                        А с чего это вы опять решили, что ваш подход правильный? Вот это и есть раздутое ЧСВ.

                        А где я писал, что мой подход правильный? Более того, я нигде здесь вообще не излагал каких-либо своих подходов. У вас, кажется, начался следующий этап классического "неаргументированного спора" - выдумать что-то, что оппонент не говорил и наехать на него по этому поводу :)

                        А теперь приходит Вася клепальщик-сайтов

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

                        Я же не виноват, что чувство прекрасного редкая штука и посещает не часто.

                        К счастью, меня бог миловал иметь такое же "чувство прекрасного" как у вас.


                      1. da-nie
                        20.05.2022 21:45
                        -2

                        и сразу же отвергается, но когда другие (имея на то причины) говорят то же самое про ваш код, у вас тут же пригорает и вы переходите на личности ^_^


                        Я кому-то сказал такое? Я вам лишь сообщил о моём восприятии. Не путайте. Это не одно и то же.

                        Опять же — это начали делать вы, я лишь стал копировать ваше поведение, и вот вы уже снова недовольны когда к вам обращаются ровно так же, как и вы к другим :)


                        Что начал делать я? Вот это?
                        Фу, пробелов нет между // и комментом.

                        Фу, длина строки больше 110 символов.

                        Фу, табы не наглядные, в стиле кланг-формат.

                        Фу, комменты на русском.

                        /* Что это? Душность в ответ на душность, наверное. */


                        Так это я, стало быть, виноват в том, что мне с нифига такое пишут? ;)

                        А где я писал, что мой подход правильный?


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


                        К счастью, меня бог миловал иметь такое же «чувство прекрасного» как у вас.


                        А вы не находите, что сейчас вы сделали то же самое, что сами же и критиковали? А про абстрактного Васю я вряд ли промахиваюсь — я этих «Вась»насмотрелся тьму. Все как под копирку с апломбом и таким раздутым ЧСВ, что аж солнце заслонит. И, что характерно, это общая болезнь этого сайта.
                        С другой стороны, чувство прекрасного не выбирают. Но если вам нравится тот код, что получил +7, то тут уж ничего не поделать. Каждому своё.


                      1. F0iL
                        20.05.2022 22:00

                        Я кому-то сказал такое? 

                        Ну вот например:

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

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

                        Что начал делать я? Вот это?

                        Разговаривать с оппонентами свысока. См. предыдущий абзац.

                        Если что-то утверждают, значит, считают единственно правильным. В противном случае только советуют в стиле «я бы сделал бы так...».

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

                        А вы не находите, что сейчас вы сделали то же самое, что сами же и критиковали? 

                        Опять же, действую вашими же методами. См. первый абзац.

                        и таким раздутым ЧСВ, что аж солнце заслонит.

                        Так вы своими высказываниями на протяжении уже десятка комментариев именно это и демонстрируете. Вы Вася?

                        Но если вам нравится тот код, что получил +7, то тут уж ничего не поделать

                        Мне не нравится. А еще мне не нравится, что вы скатываетесь в ложную дихотомию.


                      1. da-nie
                        20.05.2022 22:03
                        -2

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


                      1. F0iL
                        20.05.2022 22:36
                        +1

                        Напомню, началось все с вашего "Когда я встречаю проект, написанный кем-то другим, мне там не нравится практически всё" :)

                        Что какбэ намекает, что ваша проблема кроется вовсе не в отсутствии "чувства прекрасного" в чужом коде.


                      1. da-nie
                        20.05.2022 22:50

                        То есть, безадресное указание на то, что мне не нравится код каких-то других проектов (кстати, слово «встречаю» означает ограниченное множество проектов из числа тех, которые я встречал, а не все проекты вообще), потому что… (с указанием того, что именно мне нравится) является основанием для адресного оскорбления? Да вы, господа, сами-то себя слышите?

                        И вырвал бороду седую
                        Костлявый высохший старик,
                        И так воскликнул, негодуя:
                        — Казнить его — он еретик!


                      1. F0iL
                        20.05.2022 22:57
                        +1

                        А где были оскорбления в ваш адрес, покажите? "Ваш код невозможно читать", "вижу ошибки" и "не хочу иметь такое же 'чувство прекрасного' как у вас" - либо констатация фактов, либо оценочные суждения, но уж никак не оскорбления. Приколы про размер в комментариях и про телепатов в отпуске тоже на оскорбления ну никак не тянут.
                        У меня уже возникает впечатление по вашим комментариям, что вы из "поколения снежинок", хотя по возрасту, вроде бы, совсем не подходите.


                      1. da-nie
                        20.05.2022 23:09

                        Это всё тянет на хамство, а хамство — это у нас что? Сходите и гопнику в лицо скажите «фу, какая у тебя кепка стрёмная!» Будет интересно, что он вам ответит. Расскажете потом.
                        Так вот, иначе как хамством всё нижеперечисленное не является:

                        «И чему же равна ширина тайла? Почему не пишете об этом в комменте?»

                        Про «фу» я уже показывал.

                        «Но особенно круто — комментарий „конструктор“»

                        «Это пример или у тебя столько визуального мусора в коде? Зачем ты дублируешь всё, где и так понятно из названий переменных, типов и методов? Про русские комменты вообще молчу. „

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

                        За сим откланиваюсь, ибо есть ещё чем заняться в выходные.


                      1. F0iL
                        20.05.2022 23:47
                        +1

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

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

                        А что до английского языка - так он просто является языком профессионального общения программистов со всего мира. На крупнейших ресурсах (с аудиторией многократно больше Хабра) публикации и обсуждения идут на английском. Самые крутые конференции для программистов со всего мира проходят на английском, и даже на исконно российских конференциях до недавнего времени нередко выступали спикеры с докладами на английском. Профессиональная литература, серии книг, научные статьи, и т.д. публикуются в первую очередь английском (переводы на русский выходят далеко не всегда, а если и выходят, то с отставанием и ошибками), документация на библиотеки, компиляторы, опенсорс-проекты, и т.д. публикуется на английском. Поэтому и комментарии в коде принято писать на английском: если вы пишете код в коммерческом проекте, пусть даже чисто российском, его потом могут выкупить или лицензировать иностранцы, или у компании появятся подразделения в других странах. Если вы выкладываете код в опенсорс - то читать, использовать и делать вклад в проект смогут люди откуда угодно - хоть из России, Франции, Швеции, Китая, Кореи, США, Индии, Аргентины и всего остального мира, а не только русскоговорящие. Для программиста английский это как латынь для врача.


                      1. da-nie
                        21.05.2022 08:09

                        Для программиста английский это как латынь для врача.


                        Дело в том, что родители не догадались, что с распадом Союза потребуется английский. Вот и отдали на немецкий (который все в семье и учили). Так что в английском я самоучка и он мне не родной ни разу.

                        То, что вы процитировали выше, называется «сарказм» и «ирония».


                        А я-то думаю, чего это часто ругают весь этот IT-контингент за неспособность хоть к элементарной вежливости (токсичность, по-вашему). Я прям вижу, как придёте вы, например, к врачу, а он спросит вас анамнез и сразу сарказм и иронию в ваш адрес выскажет. Скажем, увидев вас сообщит «мда, не Аполлон...». Это будет так забавно смотреться! Только вы почему-то больше к этому врачу не пойдёте.

                        а на научно-техническом ресурсе с более образованной публикой, да?


                        Обученной, обученной. Образование — это несколько иная, более тонкая материя. К примеру, образованный человек такое бы не написал. Тактичность бы не позволила. Сами смотрите:
                        Давайте откроем /vk.com/habr.
                        На Хабре думающие люди делятся своим уникальным опытом, общаются, учатся,…

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

                        Ладно, думаю, все всё давно поняли и продолжать мне отвечать смысла не имеет. Чтобы эти упомянутые тысячи программ написать нужно их писать, а не на форумах сидеть с утра до вечера. :)


                      1. F0iL
                        21.05.2022 09:45

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

                        Когда я прихожу к врачу - это взаимодействие типа "клиент <-> исполнитель услуги", и понятное дело, что протокол общения там будет очень "клиенториентированный". А вот когда к врачу придет проконсультироваться его коллега из соседнего крыла больницы, там и не такие шуточки можно будет услышать. Фольклор про врачебный черный юмор не из ниоткуда взялся (а ещё у жены половина родственников - врачи). А уж если один врач даст почитать другому черновик своей научно-исследовательной работы.... :)


                      1. da-nie
                        21.05.2022 09:53

                        Вы не путайте дружеское (или кто там коллеги — в общем, со знакомыми людьми) общение-то. И, к слову сказать, когда вы придёте в «бесплатную» поликлинику, вот там врач вам всё и может сказать. Я ведь не из пальца высосал пример — мне такое в 2000 сказали в Областной больнице. Просто с нифига, я только пришёл впервые и вот.


                      1. 0xd34df00d
                        21.05.2022 06:11
                        +2

                        Я написал самостоятельно несколько тысяч разных программ за все годы.

                        Предположим, что вы работаете лет 30, и используете слово «несколько» в бытовом, а не математическом смысле, и, соответственно, это тыщи 2-3 минимум. То есть, вы пишете по сто программ в год, или по одной программе в три с половиной дня, если работаете без выходных, или по одной программе в два с небольшим дня, если с выходными. Извините, но что вы называете программой?


                        Я за 15 лет более-менее активного кодинга самостоятельно написал меньше сотни программ, которые меня хоть чему-то научили,


                      1. da-nie
                        21.05.2022 07:32

                        Извините, но что вы называете программой?


                        Я называю программой законченное приложение для решения конкретной задачи. Как я уже выше указал, далеко не все из них являются масштабными проектами. И да, те же драйвера для QNX я могу написать несколько штук за день (и я писал — они логически внутри могут быть сложные (с очередями, прерываниями, режимами и так далее), но писанины там не так уж и много вне обёртки драйвера). Потому что у меня, разумеется, есть моя кодовая база (она довольно приличного размера в части чистого текста программ), позволяющая переиспользовать компоненты и архитектуру. На драйвер под Windows для Flir One я потратил буквально пару дней (с нуля), но перед этим было потрачено с месяц на выяснение принципов работы протокола обмена и в фоновом режиме я выясням, как вообще пишется драйвер (попутно родились программы работы с устройством для QNX без libusb и Linux с libusb). А просмотрщик снимков с этого тепловизора я написал дня за два (на MFC). Так получается потому, что технология построения таких приложений отработана и обкатана. Так же для микроконтроллеров программы под разное оборудование с одинаковым назначением пишутся путём модификаций и получаются разные программы (одна, грубо говоря, для одного типа дисплея, а другая для другого). Но это небольшие проекты. Большие могут писаться годами в фоновом режиме. Вот и выходит в среднем нет ни недели, когда бы хоть что-то не было бы написано. Кстати, выщеприведённое оформление тоже не набирается ручками — у меня сделан генератор шаблонов, где я просто указываю, что я хочу создать (класс, интерфейс (у них, кстати, префикс I будет, а не C), класс MFC с документ-вид, без документ-вид и так далее) и получаю готовую болванку, которую просто надо заполнить. Тем не менее, даже при частичной похожести, программы могут кардинально в чём-то различаться. Например, вот есть модель устройства, прикидывающаяся устройством в /dev. Меняем идеологию. Пусть работает через разделяемую память. Уже выходит две программы. Они работают по-разному. Но сделать второй вариант можно за день из первого (если уже отработана работа с разделяемой памятью, конечно).


                  1. andyblaster
                    20.05.2022 19:10
                    +1

                    Раз уж перешли к примерам конкретных IDE, я тоже упомяну свой инструментарий. По мере развития 1С от семерки к такси и от конфигуратора к edt, в модулях последовательно были применены практики:

                    1. Визуальное деление кода большими блоками комментариев, как у вас. Точный формат и состав этих блоков доступен в платной документации и в примерах типовых конфигураций. Соответственно, верстали модули кто как мог и считал логичным.

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

                    3. В edt уже появилась карта модуля, вроде расширением можно поставить, плюс схема модуля, с иерархией вложенности областей с быстрым переходом к куску коду.

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

                    Замечаете, как происходит эволюция оглавления? Начиная от пространных описаний к главам в "Путешествиях Гулливера", - через цветные срезы страниц и ярлычков на полях домашних докторов и книг по садоводству, - до настольных игр, целиком состоящих из указателей и справочников, например, "Шерлок Холмс, детектив-консультант". Оглавление сначала встраивается в текст, потом выделяется в отдельную сущность, а потом снова привязывается к сырому тексту для интерактива.

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

                    И их [миллионов мух] код мне решительно не нравится.

                    И как все молодые, борзые и полагающие, что все, кто делает иначе чем вы, это отстой.

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


                    1. da-nie
                      20.05.2022 20:22
                      -2

                      Это даже комментировать не буду. Настолько другая вселенная.


                  1. 0xd34df00d
                    21.05.2022 06:08
                    +2

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

                    Чё-т смешно. Даже не знаю, порекомендовать вам Frontierer или Behold… The Arctopus.


        1. vesper-bot
          19.05.2022 17:54
          +2

          Я ваш коллега, я открыл ваш код. 16 чего? cm, mm, in, px, pt?

          Имхо если это не код фронта, тем более на сях фронт не пишут, то вариант для единицы измерения только px (пиксели).


          1. Dolios
            19.05.2022 18:09
            +3

            А если это что-то для печати/pdf?


          1. 0xd34df00d
            19.05.2022 18:56
            +1

            Имхо если это не код фронта, тем более на сях фронт не пишут, то вариант для единицы измерения только px (пиксели).

            wt


      1. F0iL
        19.05.2022 15:16
        +3

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


        1. da-nie
          20.05.2022 06:15
          -4

          Сдётся мне, вы не очень понимаете зачем так сделано и для чего. Сей подход вырабатывался около 20 лет и не просто так. С помощью таких вот, как вам кажется, «плохих практик» я успешно держу в голове (и легко оперирую им) в одиночку свой проектик в 100 000 строчек с 400 классами и не самой простой архитектурой. И повторюсь ещё раз, это не комментарии (за исключением реального комментария к размеру тайлов и описания функции), а визуальное разграничение зон внимания. Чтобы взгляд при анализе цеплялся за них и позволял быстро найти что и где лежит. Например, вот тут.
          Кстати, никогда doxygen не использовали? Не видели, сколько там оформления (которое по-вашему, визуальный мусор) пишется?
          А принцип именования как раз очень ясный и простой и позволяет не запутаться в сотнях объектов в большом проекте. И лучше венгерской нотации.


          1. F0iL
            20.05.2022 17:12

            Сей подход вырабатывался около 20 лет

            Да хоть 120. Это вообще ни о чем не говорит.

            я успешно держу в голове (и легко оперирую им) в одиночку свой проектик в 100 000 строчек с 400 классами и не самой простой архитектурой

            О, а вот и писькомерство подъехало.

            Кстати, никогда doxygen не использовали? Не

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


            1. da-nie
              20.05.2022 17:14
              -2

              «Вы не понимаете, это другое!» ;)


              1. F0iL
                20.05.2022 17:28

                Ирония мема «Это другое!» в том, что в 90% случаев, когда он употребляется, это действительно другое.

                А тот, кто над этим хихикает, действительно этого не понимает в силу своих ограничений.


                1. da-nie
                  20.05.2022 17:41
                  -2

                  Ну-ну. ;)


          1. dpetrucii
            20.05.2022 17:39
            +2

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

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


            1. da-nie
              20.05.2022 17:41
              -2

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


              Видел, видел. Смотреть тяжко.

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


              Как я уже сказал, это дело привычки.

              Я бы порекомендовал почитать «Совершенный код» Макконелла.


              Всё это давно было прочитано.


      1. Cheater
        21.05.2022 15:28
        +1

        Ужас.

        • Очевидные комментарии ("конструктор", "деструктор" итд).

        • Нет отбивки пробелами для знака равенства и комментариев

        • Перед секциями public, private итд неплохо бы ставить пустую строку, иначе весь класс читается одним куском

        • Геттер неплохо бы иметь константный и неконстантный

        • "Указатель на класс" - расстрелять

        • (void) - привет из C. В плюсах (void) и () в определении это одно и то же

        • Несколько подряд секций public, решение очень на любителя

        • Заполнять дефисами комментарий - ооооочень на любителя

        • GetPtr - куча проблем, см. коммент 0xd34df00d. Зачем shared_ptr синглтону??? Вы написали сто комментов вида "конструктор это конструктор", но не потрудились закомментить единственное неочевидное место в коде.

        • Именование - куча проблем, выше всё сказали

        • "Переменные" в приличном обществе называются полями класса

        • Русский язык в комментариях

        Вот поверхностные косметические изменения

        (комменты на англ - заполнители, в реальном коде надо более подробные)

        #ifndef C_IMAGE_STORAGE_H
        #define C_IMAGE_STORAGE_H
        
        #include <QtWidgets>
        #include <stdint.h>
        #include <memory>
        
        class CImageStorage {
        public:
          CImageStorage();
          ~CImageStorage();
        
          // constants
          static const int32_t TILE_WIDTH = 16;
          static const int32_t TILE_HEIGHT = 16;
          static const int32_t TILE_BORDER_WIDTH = 1;
          static const int32_t TILE_BORDER_HEIGHT = 1;
          static const int32_t TILE_WITH_BORDER_WIDTH = TILE_WIDTH + 2 * TILE_BORDER_WIDTH;
          static const int32_t TILE_WITH_BORDER_HEIGHT = TILE_HEIGHT + 2 * TILE_BORDER_HEIGHT;
        
        private:
          // data getters/setters
          const QPixmap&                        getTiles() const;
          QPixmap&                              getTiles();
          static std::shared_ptr<CImageStorage> getPtr();           // wtf
        
          // data members
          QPixmap                               qPixmap_Tiles;      // tileset
          static std::shared_ptr<CImageStorage> cImageStorage_Ptr;  // wtf
        };
        
        


    1. zloddey
      19.05.2022 08:08
      +2

      Есть два разных мира - простой и ясный мир создания новых продуктов и сложный и мутный мир сопровождения долго существующих монстров.

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


      1. SlimShaggy
        19.05.2022 10:34

        Смотря как это оплачивается, если по результатам многомесячных трудов я квартиру купил - пусть сливают их куда хотят)


        1. selkwind
          19.05.2022 13:06

          Так купил (в ипотеку) или выкупил всю за чемоданчик нала?


    1. auddu_k
      19.05.2022 08:57
      +3

      Это все реклама :-) пропущено самое интересное

      Есть ясный описанный набор требований на спринт

      Есть кто-то, кто делает их ясными и понятными? Кто эти люди и сколько их?

      Каждый постоянно работает с одними и теми же модулями, которые хорошо знает

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


      1. amazed
        19.05.2022 10:50

        Это все реклама :-) пропущено самое интересное

        Ну нет же. Не реклама. Компания простая и люди простые. Не из таких про которые вы подумали.

        Есть кто-то, кто делает их ясными и понятными? Кто эти люди и сколько их?

        Из тех команд что знаю, в одной команде это тимлид и ему помогает QA, в другой это тимлид и UX, в третьей это аналитик, и дальше тимлид с разработчиками. В остальных не знаю. Но вообще работают разные схемы.

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

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

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


        1. auddu_k
          19.05.2022 12:58
          +2

          Так плюс-минус все так и работают, пока есть люди, которые знают как под капотом.

          Но такие кардинальные перемены бывают один раз за год, грубо говоря

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

          Ну, а джуну действительно кажется, что везде темный лес и беспросветность, такая у него, у джуна тяжелая жизнь :-)


          1. amazed
            20.05.2022 09:15

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

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


    1. tmaxx
      19.05.2022 10:19
      +1

      К комментарию @auddu_kя бы ещё добавил

      Программисты не решают задач "там какая-то проблема".

      А кто в команде решает задачи «в коде какая-то проблема»?


      1. amazed
        19.05.2022 10:58
        -1

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

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


        1. tmaxx
          19.05.2022 11:18
          +2

          Пример задачи: «юзеры жалуются что система тормозит». Без уточнений. Таких задач не бывает?

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


          1. amazed
            19.05.2022 11:30
            +1

            Пример задачи: «юзеры жалуются что система тормозит». Без уточнений. Таких задач не бывает?

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

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

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

            Иногда так и есть. Во всяком случае если проблема сильно неопределенная, это не задача для программиста. Это задача для тимлида и тестировщика для начала. Если прямо совсем не ограждать программистов от правды жизни, это будет не сильно эффективно.


            1. tmaxx
              20.05.2022 10:08

              Что-то я переборщил с наводящими вопросами, напишу развёрнуто.

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

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

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

              В результате задачи которые по жёстким процессам решала команда (или компания) из 100 человек и 20 менеджеров (передающих между ними задачи) можно с успехом решать плоской командой из 20 человек плюс менеджер, где «это не моя проблема» считается дурным тоном. Это не теория, это пара примеров из жизни. И это не отменяет специализацию конкретного человека в конкретной области (разработка на языке Х, тестирование, дизайн, поддержка).

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

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


              1. amazed
                20.05.2022 16:50

                Плоская команда которая достаточно хороша чтобы сама все делать, это команда мечты тимлида, это да. Если проект делает 20-30 команд, добиться подобного уровня вовлеченности и найти таких людей наверно сложно. Я уговариваю свою команду на гибридный вариант: когда тимлид (это я) не открещивается от микроменеджмента, но при этом каждый программист понимает все что только в состоянии понять про общие цели, предметную область и код, а дальше он настолько помогает в проработке требований, насколько может. Т.е. каждый "берет столько суверенитета сколько может".

                Если все трудно и неопределенно, скатываемся к жесткой иерархии, если все всем понятно, работаем параллельно.


              1. yerbabuena
                20.05.2022 18:21

                Первые пару лет крутить гайки на конвейере может быть комфортно и интересно, но потом обычно надоедает.

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


          1. iig
            19.05.2022 13:32

            Пример задачи: «юзеры жалуются что система тормозит». Без уточнений.

            https://live4fun.ru/joke/122420


          1. Dolios
            19.05.2022 14:11
            +1

            Пример задачи: «юзеры жалуются что система тормозит». Без уточнений. Таких задач не бывает?

            Это не задача, это жалоба пользователя. Задачу поставит QA специалист, когда разберется, что именно и как тормозит.


    1. rstepanov
      19.05.2022 11:49
      +3

      Готов отправить в вашу контору резюме вот прямо сейчас, если у вас действительно так все прекрасно.

      У меня сейчас так - легаси-проект, которому 30+ лет, работала над ним не одна тысяча человек, включая далекие солнечные страны, да, есть аналитики и чаще всего расписано что и как делать, но бывает, что решение предложено изначально не очень рабочее и конечный результат с ним совпадает ну примерно никак. Плюс работа каждый раз с новым куском кода, а объем такой, что за полтора года полная картина сложилась ну очень приблизительно. Ну и работать в связи с "известными событиями" осталось примерно недель 5, потом Добби выдадут его носок...


      1. auddu_k
        19.05.2022 13:01
        +1

        Вот вот, я и говорю - реклама :-)

        (@amazed, я шучу, это все зависть)


  1. Bobos
    19.05.2022 02:00
    +44

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

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

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

    И все это удивительный мир айти.

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


    1. peacemakerv
      19.05.2022 09:26
      +2

      Вот это самый лучший комментарий, на мой взгляд.


    1. MadeByFather
      20.05.2022 07:05

      А еще бывает вариант, когда ты разработчик, но тебе говорят куда и как писать менеджеры


    1. voodookiidoo
      20.05.2022 07:05

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


  1. nmrulin
    19.05.2022 02:21
    +1

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


  1. staticmain
    19.05.2022 02:42
    +9

    Только что пережил 5 месяцев разгребания perl-лапши, отсутствие малейшей документации, разные показания разных людей о том как работает система, археология наслоения многовековых костылей и велосипедов. И всё ради того чтобы отрубить 7 взаимосвязанных скриптов, которые все вместе пожирали 500+ MB RAM на узлах где зачастую < 2ГБ памяти и втиснуть это в сишный демон, делающий то же самое, но в 100 раз быстрее при потреблении в 5 MB.

    В конце чувствовались позывы закончить всё досрочно вместе с собой. Вовремя одумался, сходил в отпуск, нашел новое хобби в виде программирования NES-картриджей. В итоге запустили конечный демон in the wild. Сейчас чиним мелкие огрехи, но чувство того, что ты наконец это всё закончил незабываемо.

    До следующего ныряния в очередные дебри.

    Весь процесс в принципе неизбежен в современном мире разработки - сначала всё делают грязно и на коленке. Скорей, скорей, конкуренты захватывают рынок, мы должны их обогнать, количество > качество. Затем, если у компании появляется достаточно средств на то чтобы перестать захватывать рынок новыми фичами и появляется грамотный менеджмент, появляется время и ресурсы рефакторить старый код, оптимизировать систему, снижать косты на поддержку тысяч клиентов. Если компания в эту стадию не входит за 2-3-4 года разработки - начинается производственный ад в попытке что-то поменять, потому что "отцы основатели" либо уволились либо были уволены, как работает система никто точно не знает, документации либо нет либо она писалась когда версия имела несколько нулей впереди.

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


  1. Radisto
    19.05.2022 03:42
    +4

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


  1. edogs
    19.05.2022 04:21
    -3

    Так и должно быть? У всех? Везде? И у вас? Вот вы честно мне скажите – я один такой? Все прям читают код и понимают его? И понимают, зачем понимают?
    Некоторые не читают чужой код и не понимают его.
    Нередко именно от таких людей звучат фразы «тут все из г-на и палок, ничего не сделаешь, надо переписывать с нуля». Хотя бывает реально из ГиП, но даже в этих случаях не всегда рационально всё переделывать.
    И ведь переписывают. Потому что писать код приятнее и проще. Иногда даже лучше делают чем было. Иногда делают легкий рерайт и называют это красивым словом рефакторинг. Но в любом случае на это, как правило, уходит больше времени, чем ушло бы если бы прогер разобрался в коде.
    А потом приходит новый программер и говорит ту же самую фразу. Или возвращается старый и задается вопросом куда дели его идеальный код и откуда здесь эта поделка.
    Вообще, по правильному, разбираться в чужом коде должны отдельные люди. Это не то что бы очень сложный скилл, но это качественно другой скилл. Даже на иностранных языках можно пример привести — навыки аудирования и речи — очень сильно разные навыки, хотя казалось бы язык один и тот же.


    1. Hrodvitnir
      19.05.2022 04:55
      +3

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

      Ну надеюсь, что мы к такому не придём. А то как же мне страшно будет жить в мире, где половина может только слушать, а половина только говорить:)

      У нас в компании это требование есть на определённом грейде. Типа, раз новенький побегай пока, а потом это и тебя коснется


      1. edogs
        19.05.2022 13:35
        +1

        Ну надеюсь, что мы к такому не придём. А то как же мне страшно будет жить в мире, где половина может только слушать, а половина только говорить:)
        Помните анекдот про авторемонтника который взял 1р за то что стукнул и 99р за то что знал где стукнуть? Диагност авто и слесарь это разные профессии и разные навыки. Строитель и инженер по приемке тоже.
        Задача «слушателя» — разобраться в чужом коде, понять что и как в нем работает, написать по нему ту самую документацию которой нет.
        Если Вы приехали во францию с группой программистов — Вы же не будете требовать от них всех вникать во французский язык, Вы возьмете переводчика которые вникнет в суть и переведет Вам то что надо сделать. А потом сделаете, на своем языке. Чужой код — считай тот же другой язык в какой-то мере.


  1. Hrodvitnir
    19.05.2022 04:51
    +5

    Программист пишет код. Не читает, не анализирует, не тестирует, не оптимизирует.

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


  1. hard2018
    19.05.2022 05:02
    +1

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

    А кто вас уважать должен с вашим нытьём? Радуйтесь, что не мешки таскаете.

    От того что вы прочитаете чужой код вы не умрёте.


  1. Iannamen
    19.05.2022 05:02
    +1

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


  1. Cdracm
    19.05.2022 05:02
    +2

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


    1. KirovA
      19.05.2022 05:36
      +8

      Возможно, не "даром, что", а "потому, что". Насмотрится за целый день на конструкции, типа:

      Если Нет = СервераОтвет()

      вот и тянет потом писать прекрасное с использованием того же языка))

      С оценкой "лучше всех" - пожалуй, соглашусь.

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


  1. hellamps
    19.05.2022 06:15
    +1

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


    1. Constanine
      19.05.2022 08:57

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


    1. mayorovp
      19.05.2022 10:04
      +2

      Он и так одинэсник


  1. PunkMachine
    19.05.2022 06:31
    +4

    Я за 3 дня написал строчек 40 кода +-. Остальное сидел и просто пытался понять, почему эта хрень не работает.


    1. lea
      19.05.2022 09:24
      +1

      Бывает, всю неделю малюешь в UML редакторе, и ни одной строчки кода не пишешь))


    1. InChaos
      19.05.2022 11:32
      +6

      За 2 дня удалил 54 строки (-60+6), остальное время разгребал кто ****************** и какого *************, зачем это *********************. В итоге уменьшилось кол-во чтений в 10 раз, скорость выполнения в 5.
      MS SQL, хранимая процедура, код чужой, он давно был в проде, но пришлось заняться когда при увеличившийся нагрузке вылез как виновник. Сами разработчики отказались заниматься, типа тут уже нечего оптимизировать, надо наращивать железо, вот пришлось заняться. В итоге железо вздохнуло свободнее.


  1. Geograph
    19.05.2022 06:47

    Похоже настало время пройти курсы по Reverse Engineering


  1. Butterfly_M
    19.05.2022 08:06
    +1

    ха-ха-ха. А чего ждать после курсов? Что такое понимать чужой код- ну вот стоит прочесть покойного Касперского "отладка программ без исходного кода".


    1. DvoiNic
      19.05.2022 13:46
      +5

  1. Daniil_Palii
    19.05.2022 08:18
    +2

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


  1. hssergey
    19.05.2022 08:25
    +1

    Добро пожаловать в реальный мир)


  1. Pab10
    19.05.2022 08:32
    +2

    Все прям читают код и понимают его? И понимают, зачем понимают?

    Да, это 80% рабочего времени. И это умение отличает джуна от всех остальных. Опытный программист ставит и описывает задачу зная контекст. А контекст он берет не из воздуха, а читая код.

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

    Вот тут вы собственно неявно просите опытного программиста нырнуть в код, почитать его пару часов и выдать вам выжимку в тикете.

    И это не ночь, а серые будни. Привыкайте :)


  1. SpiderEkb
    19.05.2022 08:56
    +5

    Программист пишет код. Не читает, не анализирует, не тестирует, не оптимизирует.

    Это изначальная ошибка в понимании что такое "программист". Тут уже писали про разницу между кодером, программистом и разработчиком - все правильно написали.

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

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

    • дефект - когда функция в каких-то условиях работает не так как надо

    • изменение функционала - когда функция работает, но требования к ней поменялись и нужно изменить алгоритм

    • новый функционал - когда нужно создать что-то новое

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

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

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

    Ну и в любом случае очень помогает актуальная документация где будет расписано что именно делает тот или иной модуль.

    И да. Приходится и чужой код изучать и блок-схемы на бумажке рисовать. Добро пожаловать в мир коммерческой разработки.

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


    1. tsurugi-no_ken
      19.05.2022 09:53
      +1

      разработчик - он не "пишет код"

      Ещё он может удалять лишний код во время рефакторинга. :)


      1. Bronx
        19.05.2022 12:57
        +1

        Мне как раз намного приятнее удалять код, а не писать :)

        "Совершенство достигается не тогда, когда нечего добавить, но когда уже нечего отнять." (с) Экзюпери


    1. SergeyUstinov
      19.05.2022 11:16
      +1

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

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


      1. SpiderEkb
        20.05.2022 14:43

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

        Согласен. У нас, правда, всегда есть аналитики, консультанты направлений с которыми можно обсудить подобные вопросы.

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


  1. Vitaly83vvp
    19.05.2022 09:14
    +2

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

    В больших проектах, в частности, всё уже бывает написано. Для каждой ситуации, есть свой готовый код. Нужно только правильно вставить те самые 2-3 строчки, чтобы всё заработало как нужно. И, да, для этого нужно прочитать много написанного кода, чтобы понять какие именно строчки добавить. Временами, у меня тоже возникает чувство полностью переписать какой-то модуль, компонент или, даже, проект (конечно, если это не что-то глобальное). Но, с опытом приходит понимание, что не для каждой задачи нужно писать код - иногда, нужно его и удалять. Это как кубики конструктора - для создания крепкой и красивой конструкции, каждый кубик должен быть в определённом месте.

    Кстати, про стиль разработки - это, нечто, вроде этикета - нужно придерживаться выбранного стиля, чтобы код (проекта) выглядел единообразно. Иначе, читать его будет всё сложнее и сложнее, если каждый разработчик будет писать его по-своему.


  1. saipr
    19.05.2022 09:51

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

    Но без этого никак. В любом эксплуатируемом коде рано или поздно что-то находится не то. А разработчиков давно нет и кто-то должен разобраться. К этому программисту надо быть готовым. Это как сантехник! Где-то что-то лопнуло, протекло и т.п. И что бы мы делали без них. Афоня знал, что нез него и нитуды и ни сюды.


  1. ehots
    19.05.2022 09:51
    +1

    Жаль конечно что такое происходит, но таков путь. Легаси и гавноконтор много, попасть туда очень легко, понять куда попал без опыта чертовски сложно, да и с опытом бывает. Это про оплату еще ни слова не сказали, а там тоже свои трюки бывают.
    Если унифицировать, то в таких конторах новичков кидают в жернова, кто сможет, тот вылезет, остальные сами уйдут или их выжмут.
    Что не убивает, то закаляет) Выше нос, это только первая компания, смотрите как на хороший опыт, возьмите перерыв и поищите другую, может удаленно, если у вас в городе всего 2.


  1. KudryashovDA
    19.05.2022 09:54

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


  1. Femistoklov
    19.05.2022 09:56

    Неплохо. Только на абзаце

    Я погряз в непонятно чём. Чтении чужого кода, понимании контекста, попытках воспроизвести ошибку, анализе производительности, понимании диалектов, режимах отладки. Так не должно быть. Не должно!
    понял, что это графоманство.


  1. iiwabor
    19.05.2022 09:56
    +1

    Чувак, держись! Если тебя не увольняют и платят ЗП - значит все идет нормально. Просто держись, со временем все наладится.

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

    Все сеньоры проходили эту стадию "джун непонимающий". У меня это заняло 3 года, у кого-то быстрее, у кого-то медленнее.

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


  1. s1im
    19.05.2022 10:04
    +1

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


  1. HellWalk
    19.05.2022 10:08

    Знаете, что мне ответили? Опытный программист не может мне помочь. Он не найдёт, куда мне писать код. Ему некогда.

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

    Хотя, часто это не ошибка а стратегия - нанять милда за цену джуна. Вдруг кто-то не знает себе цену.

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

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


  1. AlexanderS
    19.05.2022 10:20
    +1

    А знаете… очень жизненно!
    Только полноценно поймёт тот, что в этом по уши хотя раз вывозился этак с месяцок)


  1. SergeyUstinov
    19.05.2022 10:57

    Если это сарказм - то написано хорошо.)))

    Если не сарказм...
    Прямо сейчас у меня похожая ситуация. Перехожу в другую область - из MS SQL SSAS / SSRS -> spark and Airflow
    И нормально. Разбираешься, читаешь доки, многое не понимаешь... Так это нормально! Это и есть работа.

    Наверно, на курсах надо первым делом объяснять, на что уходит большая часть усилий.
    Вот хорошая статья, например.
    https://habr.com/ru/company/dcmiran/blog/663950/
    Там в начале очень полезная диаграмма приведена. Из книжки, которой больше лет, чем герою статьи. )))


  1. qyix7z
    19.05.2022 11:21
    +3

    Чукча – не читатель, чукча – писатель
    Однажды чукча принес в редакцию свой роман. Издатель прочитал его и говорит:
    — Прочитал я Ваш роман, слабовато… А кого из классиков Вы читали? Достоевского, Толстого, Тургенева читали?
    Чукча подумал и, почесав затылок, отвечает:
    — Однако, нет. Чукча – не читатель, чукча – писатель.


  1. Sly_tom_cat
    19.05.2022 11:28
    +3

    Ха, а вот самое интересное разбираться не в чужом, а в своем коде, написанном несколько лет тому назад.

    Иногда влезаешь в это и по привычке начинаешь крыть матом того придурка криворукого, который это говнокод написал....


  1. foxmaster58
    19.05.2022 11:35

    Похоже вам не повезло с первой работой. Я бы не отчаивался на вашем месте. У вас отбили желание работать плохим менеджментом и некомпетентными ожиданиями. Reverse engineering это определенный набор навыков и он не всем дается хорошо и не всем это интересно. Этому стоит поучиться (а главное с опытом это придет), но то, что вы пока этого не умеете не означает, что вы не можете зарабатывать разработкой. Дайте себе время.


  1. aelaa
    19.05.2022 11:55

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

    Я в айти по энтузиазму, и все чаще замечаю разницу между собой и людей "с курсов" - я начинал с пет-проектов. Не было ни заказчика, ни дедлайнов, ни курсов, был только ты и Github (а в более давние времена ты и листинги из журналов). И чтение кода на нем стало в какой-то момент основной деятельностью.

    Может в процессе обучения на этих ваших "курсах" этот этап как раз и пропущен?


    1. zeolant
      19.05.2022 14:23
      +2

      Кстати, тоже стало интересно что чувствуют люди, которые приходят в ИТ не по энтузиазму, а после курсов. Я помню мое первое задание на первой после вуза работе - что то в духе: "Хочу чтобы логировался текст со всех текстовых полей со всех программ после закрытия. В том числе Word, Excel, IE а не только калькулятор и блокнот". Это были времена Win98-Win2000. В команде было два человека вместе со мной. Мне тогда очень помогло многолетнее ковыряние в спектруме и знание ассемблера Z80 и, в последствии ковыряния в х86, так как пришлось лезть в глубь WinApi и в отладчике смотреть как и где можно перехватывать вызов функций. Второй сотрудник полез еще дальше в ядро и там смотрел как скрывать процесс логирования и как внедрять мой кусок для перехвата в другие процессы. Не представляю, как с таким справится после курсов С++ :)


    1. Fodin
      21.05.2022 07:34

      Профессиональные музыканты слышат партитуру. Читают ее, а в голове музыка.


      1. aelaa
        21.05.2022 12:37

        Ну и программисты тоже какую-то картину в голове строят


  1. terrapod
    19.05.2022 12:28
    +6

    Хехе, на одном проекте я был единственным, кто ОЧЕНЬ умел в чтение чужого кода. Те, кто его написал, уже давно ушли.

    Я не писал код. Я рисовал презентации, схемы, диаграммы, создавал странички со стрелочками, кубиками, схемами. Я прослыл тем, который знает все, потому что мог открыть SQL на 20 тысяч строк, сгенерированный системой, и ловко обнаружить строку #17895, в которой поле XYZ умножались на 2.5, если значение было меньше 7. Почему, зачем? Никому не интересно. Но сам факт того, что я это мог найти, указать, где поправить, чтобы стало умножать на 3.5 вместо 2.5 приводил в трепет даже ГЛАВНОГО.


    1. IntActment
      20.05.2022 04:29
      +2

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


      1. terrapod
        20.05.2022 10:40

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


  1. ReaderReader
    19.05.2022 12:48
    +4

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

    Программист пишет код. Не читает, не анализирует, не тестирует, не оптимизирует. Пишет код! Для остального есть другие профессии! 

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


  1. fido_max
    19.05.2022 12:53
    +3

    Программист пишет код. А очень хороший программист - читает и удаляет.


  1. Andruh
    19.05.2022 12:54

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

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

    Понимаю, что сложно думать о переезде, но в некрупном городе (любом, начиная с 3-го в России) ожидать другого сложно. Я в период становления работал в московских компаниях, где к росту относятся бережно (кстати, к Яндексу и mail.ru это не относится - я про ABBYY и Лабораторию Касперского, например). Иногда может повезти и в небольшом городе, если человек специально заморачивается вопросом передачи знаний и бережно относится к инициации падаванов.

    В ABBYY аккуратная система рангов и даже есть обучение (по крайней мере было, когда я там работал), в ЛК - есть чистые кодеры, там очень развесистый процесс, что можно себе это позволить (чтобы позволить быть чистым кодерам, должны быть архитекторы, техписы, аналитики, тестеры, дизайнеры интерфейса, performance-инженеры, release-инженеры и т.д, причём в нетривиальных пропорциях, что возможно в командах от 100 человек, думаю).

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

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


    1. sshmakov
      19.05.2022 13:02
      +1

      Однако, это челлендж - что бы ответил персонаж, описанный Иваном @nmivan?

      Тэги: Читальный зал


      1. nmivan Автор
        19.05.2022 14:11
        +1

        Он бы ответил "Спасибо большое на добром слове, вы Человек! Но второго раза я не выдержу. Я уже устроился обратно менеджером по продажам..."


  1. IvanSTV
    19.05.2022 13:24
    +2

    Вот поэтому я и не хочу входить в IT.

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

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

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


  1. SIMPLicity
    19.05.2022 13:53
    +4

    Зато теперь ты готов пополнить отряд инфоцыган...

    PS Добро пожаловать в ад, капитан! Мы тут живём тридцать лет,- и с зарплатами, втрое меньшими того, что указано на Хабре как "в среднем по IT".


  1. acordell
    19.05.2022 13:58

    Правильно пишут, что умение читать код — это отдельный скил. Плюс, еще разобраться как все хоть примерно работает, чтобы понять где, вообще, нужно искать этот код, чтобы не начинать читать прямо с токи входа. Плюс терпимость к тому, что найденный код, мягко говоря, будет написан в другой стилистике, или вообще без таковой. Без коментов, без обработки ошибок, с именами переменных производных от имен домашних питомцев или героев Игры престолов. И человек явно куда-то очень торопился, когда это писал… А что такое кодревью тогда проект еще не знал, или ревьющий не сильно отличался от писавшего.
    А еще после правки надо будет найти все аналогичные места в проекте, которые писали третьи люди в третье время копипастом, коряво адаптируя под места вставки. Или, что еще веселее, писали совсем по-другому, не особо разобравшись в том, что такое уже где-то есть, и неплохо бы хоть как-то хоть что-то оптимизировать и унифицировать… Нет, конечно, они оставили это тебе. Ну, а что, кто-то говорил, что будет легко?


  1. tlekhatkova
    19.05.2022 13:59
    +3

    Так это ж самое классное: смотришь две недели в чужой код, потом напишешь одно слово и все заработало)


  1. karambaso
    19.05.2022 14:15

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

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


  1. ryzhehvost
    19.05.2022 14:44
    +3

    У меня вот ситуация обратная. Я умею и могу разбираться в чужом коде. Но на собеседовании обычно просят написать код, а не разобраться в чужом. А я не то что не могу, но у меня это медленно и не очень эстетично выходит. И меня не берут. И вот ситуация выглядит так - я сижу на низкооплачиваемой работе, берут каких-то амбициозных студентов, они пишут код, поднатаскиваются, переходят в другую фирму на более высокую зарплату, через месяц-два оказывается что их код НИХРЕНА НЕ РАБОТАЕТ, и кто вы думаете его исправляет? Да, это я, которого на более высокую зарплату не берут. Всем нужны говнокодеры, никому не нужны программисты.


    1. cheevauva
      19.05.2022 21:56
      +1

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


  1. MVN63
    19.05.2022 14:44

    Напомнило:
    "Если бы архитекторы проектировали дома так, как программисты пишут свои программы — первый случайный дятел разрушил бы цивилизацию..."

    Признаюсь, ранье считал это на 90% шуткой и верил в силу разума )))


  1. Savevur
    19.05.2022 14:52
    +3

    История вымышленная и философская провокация.
    Здесь описано много несвязанных знакомых мне тем.
    Я бы назвал статью: А не му_ак ли я часом?
    Самая большая проблема - это когда нет рядом человека, который бы сказал тебе, что ты му_ак.
    https://mislitel.info/quote-694332

    "Потом кризис среднего возраста, всё как положено. Пить начал. На детей орать..."
    "Когда немного успокоился, начал думать, искать."

    Искать что?
    В 35 возникает тяга расти духовно, искать чего-то большего чем мимолетная жизнь. Самый минимум хотя бы выйти из системы рабства. Это первый вариант.
    Или уже ничего такого не искать, а развлекаться хобби. Это второй вариант.
    Цифра (кодинг) - мертвечина, поэтому совместить два вариант наверное не получиться. Может какой социальный проект, но в одиночку такое ведь не сделаешь?

    "я верил в себя, в то, что изменю свою жизнь!"

    У героя было всё, что положено рабу для нормальной рабской жизни. Но он как водится на определенном этапе решил исковеркать свою жизнь. Назвал он это "изменением".
    Опять исковеркать ради чего? Цели герой не обозначил. Из системы рабства даже не помышлял выйти.

    "Я хочу писать код!"

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

    "Блин, а я откуда должен уметь его понимать-то?!"
    "Все прям читают код и понимают его? И понимают, зачем понимают?"


    Это самый главный и жуткий момент рассказа. Быть или не быть? Во всем рассказе только этот момент герой спрашивает у читателя: "А не му_ак ли я часом?". Манипуляция, в надежде перекинуть му_ачество на кого-то еще руками читателя. Весь остальной рассказ вообще без вопросов, как обычно у му_ков с сформировавшимся железобетонным каркасом в голове по любой теме. Герой жил в определенной инфраструктуре и до 35 лет не знал, что он му_ак. Не понимает, что пишут другие. И наверное еще лишен эмпатии.
    https://ru.wikipedia.org/wiki/Эмпатия
    Некоторые защищают героя, обвиняя руководство или еще кого. А ведь стоит вспомнить, что программировать может всего пара % населения.

    "Всю ночь не спал, ворочался, вставал, курил, читал, пытался смотреть телевизор, снова ложился… Ненавижу."


    Железобетонный каркас. Ригидность мозга.

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


    Герой и до этого этого не понимал. А ведь с этого нужно было начинать. И курсы программирования тогда может и не нужны бы стали.
    Пример, кто понимает - "Луна и грош"
    https://ru.wikipedia.org/wiki/Луна_и_грош

    "Тех, кому я заплатил за курсы по программированию. «Друзей» и «советчиков», которые сказали: смело бросай свою старую, нелюбимую работу, и иди в программисты. Если бы вы только знали, о чём говорите…"


    Тут пару тем. Есть кто ведет и те кого ведут. Те кто ведет прекрасно всё знают. У меня знакомых развели, даже плитку керамическую дома делали. Форекс, продажа Гербалайф, Амвей, курсы программирования, открытие бизнеса, выращивание шампиньонов. Этих разводов легион.
    А друзья:
    https://www.youtube.com/watch?v=z-nj2fA8HGg

    "Сегодня я уволюсь."


    Фраер на трамплинах. Один раз уже исковеркал жизнь, давай дальше коверкать.


  1. Lee_Fun
    19.05.2022 15:06

    Только покрытие тестами и рефакторинг спасут отца русской демократии.))

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


  1. Ogoun
    19.05.2022 15:12
    +2

    Вот так выглядела моя первая работа, десятки тысяч легаси кода на делфи (знал только паскаль немного к выходу на работу, плюсы и немного шарп). Никакого менторства, или документации. Есть задачи, и вперед. Печатали листинги чтобы как-то понять взаимосвязи. Было очень тяжело первый год. Стало проще после начала переезда на C#. Но вхождение в любую профессию требует усилий. Как говорят 10000 часов практики чтобы приподняться над джуном, и я согласен с такой оценкой.


  1. andi123
    19.05.2022 16:09
    +1

    Все решения саммых ценних задач выглядили примерно так:

    1. "расскомментировать" функцию (которая по ifdef собиралась для другого случая), прописать ее вызов в место функции по умолчанию - 1 человеко/месяц

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

    2. добавить в одно в одном месте инициализацию не нулем (инициализации вообще небыло, только объявление) - недели чел/мес.


  1. burdin
    19.05.2022 17:02
    +1

    Работа программиста это, в основном, созерцание (ранее написанного кода), и размышления (в том числе, и о том, как поправить то что созерцал) :)))


  1. Xuxicheta
    19.05.2022 18:17
    +1

    Ну не твоё и не твоё. Уходи.


  1. avvolkova
    19.05.2022 18:26

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


  1. mozg3000tm
    19.05.2022 18:26
    +1

    Вот прикол.
    А тут на собеседовании предлагают читать чужой код :)

    https://habr.com/ru/post/664678/


  1. alartus
    19.05.2022 18:40

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

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


    1. F0iL
      19.05.2022 23:34

      Я тоже много лет работал в АСУТП (по образованию вообще инженер-электроник). Когда я приходил в профессию, я немного наивно размышлял, что будет круто писать программы для чего-то, что ты можешь пощупать руками и увидеть результат работы своими глазами в объектах реального мира.

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

      А графические и текстовые МЭКовские языки по сравнению с нормальными сями/плюсами/шарпом/растом теперь кажутся набором детских кубиков против Lego Technic :)


  1. MyraJKee
    19.05.2022 19:08

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


  1. AlexunKo
    19.05.2022 19:18
    +1

    Вот эта штука "я беспомощен и мне помогут" - это убеждение-баг. Из него нельзя исходить. Вернее, можно, но это большой риск.


  1. Epsiloncool
    19.05.2022 22:04

    А я уже могу писать, могу писать!
    Могу тетрадку показать, и даже полистать.

    Ого, да ты учёным стал, скажи, о чём ты написал?

    А мне откуда это знать? Я сам хотел бы знать.

    Ведь я сказал - могу писать! Писать, а не читать!

    (c) Владимир Орлов


  1. AndreySSS
    19.05.2022 22:07
    -1

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

    ЗЫ. ненавижу ООП


    1. F0iL
      19.05.2022 23:27
      +1

      Не соглашусь. Наоборот же. Смысл ООП именно в группировке методов и данных по их принадлежности к сущностям и/или функционалу вместо россыпи раскиданных процедур и структур с непонятными связями между ними (хорошо ещё если без глобальных состояний!), поэтому ООП-код гораздо понятнее и приятнее читать. В процедурном стиле говнокод соорудить гораздо легче и встретить его можно гораздо чаще, особенно когда сложность и объем функционала модуля/проекта растет (вспоминается история про ад в коде Oracle DB - хотя я своими глазами наблюдал процедурное спагетти даже в небольших проектах).

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


      1. yerbabuena
        20.05.2022 01:27

        и с очень понятным кодом

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


        1. F0iL
          20.05.2022 17:24

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


          1. JBird
            20.05.2022 17:47

            Кстати, а есть какой-то коммерческий продукт на публичном рынке (т.е. не заказное), сделаный на ФП? А то говорить про зашло/не зашло - это легко, а вот что там money talks?


            1. F0iL
              21.05.2022 00:25

              Соседняя команда пишет систему облачного мониторинга для чего-то связанного с automotive, начинали на C#, сейчас часть компонентов пилят на F#, и вроде как очень довольны. Но у них B2B, да.

              Вот тут занимательный списочек ещё есть.

              А так, уже давно разные функциональные штуки активно проникают даже в классические ООП-языки.


      1. Heniker
        20.05.2022 01:41

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


      1. Alex_ME
        21.05.2022 11:45
        +2

        Как-то я пытался раскурить какой-то графический компонент с гитхаба (то ли под Qt, то ли под Avalonia) для рисования графов. Хотел узнать, как это они трансформацию делают (зум и все такое).

        Пришлось продираться через длинные цепочки наследования и композиции всяких Painter'ов и прочих подобного, в которой каждый очередной класс содержал строк 100 всякого бойлерплейта (прокидывания конструкторов, методов) и задавать себе раз за разом вопрос: "так, блин, логика где?". И это довольно распространенный случай.

        ИМХО, все хорошо в меру.


        1. yerbabuena
          21.05.2022 13:57

          и задавать себе раз за разом вопрос: "так, блин, логика где?".

          Зато все по SOLID и паттернам, обзервер на фабрике и фасадом погоняет билдер через 3 визитера


  1. Diamon33
    20.05.2022 01:46
    +1

    Как говорится

    прошу прощения за мемы


  1. Alexey_Volchanskiy
    20.05.2022 01:49
    +1

    Мне во второй половине нулевых посчастливилось работать в американском проекте по созданию первого процессора для одночипового цифрового ТВ. Вот там было реально весело! Дизайн чипа делали наши ребята в Питере, мы с коллегой программировали звуковой тракт, всякие ресемплеры, эквалайзеры, эффекты типа Soni Clear Audio (полная обманка для слуха :)))). И вот приходит из Тайваня инженерный образец проца на инженерной же плате. Что в нем работает нормально, а что нет, никто не знает, невозможно при проектировании дизайна на 64-модульном серваке все смоделировать. Поэтому многие блоки на проце дублировались в нескольких вариантах, что-нибудь да заработает, как нужно )).

    Доков нет в принципе, есть несколько корявых тестов на Си, которые работают на эмуляторе. Есть некий эмулятор на FPGA, который должен для имитации проца в РВ работать на частоте 40 ГГц! Короче, полная терра ингогнита. Двигаешься методом проб и ошибок, потом плата улетает ФИДЕКСом в Кремниевую долину, там аккуратные девушки из ЮВА золотыми проводочками отключают дохлые блоки и подключают замену. Через 2 дня плата уже у нас. Вот так и работали.

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


  1. iamkisly
    20.05.2022 08:41
    +1

    Ты привыкаешь к этому. Скоро твой мозг сам делает перевод. Я уже даже не вижу код. Я вижу блондинкубрюнетку и рыжую.

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


  1. vadim100
    20.05.2022 17:34

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


    1. vassabi
      21.05.2022 16:28

      где почти весь код был прописан в самой базе данных

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

      А версионирование там у них было? Или хотя бы бекапы ?


  1. ArtemiyDmtrvch
    20.05.2022 17:36
    +1

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


  1. Dime_n_u
    21.05.2022 01:04

    Понимаю) у нас расп* стиль работы можно сказать - тимлид мой товарищ, я - джун девопс и 3 разработчика. Курсы я закончить не успел, но рвался на эту должность, а в прошлом электрик, шахтёр, пи**р вообщем всё что угодно не связаное с ИТ. У меня часто бывают депресняки на тему надо научиться kafka, а я вообще не соображаю что да как, потом ещё задачи, но меня не терроризируют по срокам вообще, если это не что-то срочное. Программисты наши делают децентрализованный мессенгер и тоже читают сутками. И я как девопс не начал работать, а читаю, пробую кучу всякого мало понятного ада, сейчас надо делат бекапы кластера, репозитория, а там нет мануалов - только документация, а я с английским даже не очень дружу. На моём скудном опыте я понял, что основная работа в ИТ это читать и гуглить, если ты не уникум и не родился с матринской картой в заднице конечно. Так что либо так либо вали в свою канаву. Я всё таки после помоек за 30-50к решил остаться тут - в этой сфере хотя бы человеком себя чувствуешь, а не рабом. Так что тащи, отец!


  1. vitiok78
    21.05.2022 02:23

    Проблемы есть и у организации и у вас:

    Вы запаниковали. У вас стандартный для каждого программиста "синдром самозванца". Этого делать нельзя. Что должен делать джун?

    1. Обгуглить всё, что только возможно. Даже свершить немыслимое: посмотреть, что на второй странице поисковой выдачи. Совет: не искать в Гугле, лучше на duckduckgo. Гугл стал слишком "умным" для программистов и выдаёт больше мусора, чем нужных результатов.

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

    3. Зарубить себе на носу, что "синдром самозванца" - это нормальное состояние программиста, и если его проанализировать и употреблять, как мотиватор к развитию, то он станет помощником.

    Где ошибки организации?

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

    2. Возможно у организации проблемы с организацией))) Вполне возможно, что вы не можете читать код, потому что это гoвнoкoд. В большой организации нужен style guide для кода, чтобы все писали в едином стиле, тогда программисты не будут три часа читать код, чтобы написать три строчки. Есть такие конторы, где только вот тот странный Вася у окна в толстенных очках, который не поднимает голову от монитора, толком знает, как всё работает, и если его собьет автобус, то тупо всё рухнет.

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

    Совет могу дать только следующий:

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

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

    P.S. Я тут подумал... Вам 35 лет, и может быть люди, которые могут быть моложе вас просто стесняются вас учить так же, как учат молодёжь? Или не стесняются, а просто на автомате, подсознательно, выдают вам советы в таком же кратком виде, как другим программистам своего уровня? Тут уж ваша задача "влиться в коллектив" и постоянно напоминать о своём небольшом опыте


  1. shilova_tatya
    21.05.2022 08:13
    +1

    Помню свою первую рабочую неделю. До этого за плечами только институт и 3 месячный курс по 1с. Устроилась в ГРЭС куда брали программеров способных понять чужой код ещё на динозавровских платформах и обслуживать мамонтовские датчики. На словах мой куратор все объяснил. Поняла? И ушёл в отпуск на месяц. Ночные звонки. Пару рухнувших систем. Бессонные ночи. Но выплыла. Работаю до сих пор. Но помогло по большей части упорство. Если нет желание решить задачу через не могу и не умею, дальше будет только сложнее


  1. SergeyProtector
    21.05.2022 08:14
    -1

    Да. Опять путаница понятий. Программист и кодер - это не одно и то же. Кодеру никогда не дадут задачу разрабатывать алгоритмы. Программист легко поймет как все работат после прочтения кода. Кодер зашорен на языке программирования, а программисту всеравно на чём написана программа. На мудрено, что автор в депрессии - он ведь не программист. Программист, в отличии от кодера, имеет солидный теоретический багаж и знает как им распорядиться. Кстати, 100% уверен, что автор Кнута не читал.


  1. Flahaerty
    21.05.2022 08:14

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

    Методом тыка наткнулся на учебник "Django 2 в примерах". И как же у меня горело, т.к. код оттуда не всегда работал как надо, потому что сам я писал в 3 версии. Столько нервов потратил, ненавидеть стал просто каждый файл.

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

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

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

    Нравилось постепенно редактировать уже давно созданную схему БД, дополнять, изменять ее, заполнять данными.

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

    Отдельно от этого стояла моя курсовая, по которой я ещё только делал саму БД в MySQL и писал для нее запросы. Опять же, все круто, все классно. Пока препод не давала заковыристые запросы, где надо было вложить один select во второй. Я понимал, что запрос должен быть вложенным, но не понимал, почему он не работал, в итоге забросил это дело на месяц, пока не придумал обходной путь.

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

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

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


  1. paamayim
    21.05.2022 08:14

    Энтерпрайз это ад адовый. Незнаю я как то нашел свою нишу на средних и небольших проектах и норм себя чувствую тут. Помнится было что то такое когда в штатах работал в стартапе. Типо фреймворк для мобильной разработки был написан индусами свой под разные платформы и надо было в нем копаться модули под него писать. Это еще до react native было вернее писать они его начали когда оный еще не вышел. На самом деле копание в кишках занятие не сильно творческое, я вот восхищаюсь иногда алгоритмами придуманные математиками которые использовал в своих проектах. Вот это реально свет, столпы. Как например Дийкстра полвека назад придумал то что сейчас используется для навигации когда еще компутеров не было. Вообщем мой посыл в том что знание - это свет а 1с и прочее legacy это тьма и тут уже каждый для себя выбирает с чем ему работать)


  1. duke_alba
    21.05.2022 09:57

    Очень художественно и проникновенно! Вот только по моим понятиям тот, кто просто пишет код, это кодер. А программист умеет также кое-что ещё. А именно, декомпозировать задачу, встраивать новое, своё в легаси код, писать детальную постановку, ... И получается, что кодирование как таковое занимает не более 50% всего времени.


  1. Dartflame
    21.05.2022 10:16
    +1

    Писать код можно любую обезьяну научить, написание кода для программиста это примерно то же самое как для юриста, например, умение печатать или читать)

    Но не эти навыки делают юриста юристом, а программиста программистом)

    И даже чтение чужого кода и понимание не самая большая проблема. Часто в огромном сложном проекте вообще непонятно где искать даже тот код который нужно читать))

    В принципе в реальности все примерно так и есть как написано в тексте) но мне, например, старшие коллеги помогают в таких вещах. Но у нас там своя специфика проекта, если сложности, которые вообще к программированию не имеют отношения)


  1. Dumatell
    21.05.2022 10:16

    Эхх помню свою программистскую молодость.

    Дали нам исходники, чтото около 10 мб голого текста написанного на си под ось о которой никто никогда не слышал. И сказали вот там есть проблемы. Вот такие. Надо решить.

    Красота... код на си даже не си++ писан в 80е... немцами, комментарии на немецком, сокращения имен от немецкого...

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

    А когда доходило до проверки то запускаешь сборку и идешь курить. Потом в туалет, потом поболтать потом на обед потом еще покурить... и еще... о сборка окончена. Даже без ошибок (нечасто такое бывало)! Ну выдохнули! пробуем!

    Нет. Это не то... ну чтож, откатываемся и по домам. Будем искать дальше...

    После пары лет работы на этом проекте я не выдержал и сбежал из разработки. Так что автора я понимаю, но как то он быстро сдался.

    P.S. проблемы мы таки тогда пофиксили.

    P.P.S. А сейчас я хочу вернутся назад в разработку.