Как вы относитесь к своим прошлым злодеяниям в программировании?

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

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

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

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

Ответ 1

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

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

Jeff Atwood написал замечательный пост в блоге об этом некоторое время назад (здесь).

Ответ 2

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

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

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

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

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

Ответ 3

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

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


На самом деле, есть одно злодеяние, которое продолжает грызть меня. Я создал видеорежим для Amiga под названием " Sliced ​​HAM, который был популярен некоторое время. Он изменил базовые цвета на линию, чтобы обеспечить более фотореалистичное изображение с меньшей окантовкой.

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

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

По-прежнему преследует меня.

Ответ 4

Это отличный вопрос.

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

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

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

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

Я публично извиняюсь. Я хотел бы воспользоваться этой возможностью, чтобы извиниться за INewWindowManager. К сожалению.

Ответ 8

Если он не сломался, не исправляйте его.

Я знаю ощущение, что что-то можно сделать намного проще и элегантно, может быть, потому, что вы уже поняли рамки, или потому, что вы изучили некоторые новые методы. Но это действительно актуально только тогда, когда вы хотите расширить или изменить какой-либо код, иначе просто запустите его, если он будет работать. Если он не работает (т.е. Если он глючит, слишком медленный, ест ресурсы и т.д.), Вы все равно должны его исправить, чтобы начать, и, следовательно, пока еще мало сожаления. В противном случае, о чем вы беспокоитесь? Красота в коде настолько мимолетная...; o)

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

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

Ответ 9

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

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

Ответ 10

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

Ответ 11

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

Ответ 12

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

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

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

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

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

-Tom Bushell

Ответ 13

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

Ответ 14

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