Какой унаследованный код впечатлил или вдохновил вас? - PullRequest
8 голосов
/ 27 января 2009

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

Но кто-нибудь из вас на самом деле получил код, который заставил вас сказать: "Черт возьми, это хорошо продумано!" или «Ух ты, я никогда не думал об этом!»

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

Ответы [ 11 ]

8 голосов
/ 27 января 2009

Давным-давно я отвечал за библиотеку времени выполнения Turbo C / C ++. Tanj Bennett написал оригинальный эмулятор с плавающей точкой 80x87 в 16-битном ассемблере. Я не присматривался к коду Танджа, так как он работал хорошо и не требовал внимания. Но мы перешли на 32-разрядную версию, и передо мной встала задача растянуть эмулятор.

Если можно сказать, что программирование имеет что-то общее с искусством, то это оно и есть.

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

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

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

3 голосов
/ 27 января 2009

В моей первой работе я был поражен, обнаружив класс «безопасного идентификатора» в кодовой базе (c ++), который заключал в себе числовые идентификаторы в классе с шаблоном пустого тега, который гарантировал, что компилятор будет жаловаться, если вы попытался, например, сравнить или назначить идентификатор пользователя в OrderId.

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

3 голосов
/ 27 января 2009

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

чертовски сложно писать такой код. : -)

2 голосов
/ 27 января 2009

У меня есть забавная история, чтобы рассказать здесь.

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

Я не мог понять, кто из команды мог написать такой код. Я хотел умереть, чтобы обсудить с ним и поделиться мыслями. К счастью, мы перешли на Subversion (из cvs) несколькими месяцами ранее, и я быстро запустил «svn blame». Я повалился повсюду, увидев свое имя рядом с реализацией.

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

1 голос
/ 27 января 2009

Я унаследовал большую кучу кода, который был НАСТОЛЬКО хорошо написан, я фактически потратил 40 долларов онлайн, чтобы найти парня, я пошел к нему домой и поблагодарил его.

1 голос
/ 27 января 2009

Я знаю, что это принесет много ответов, как,

«Я никогда не найду хороший код, прежде чем вступить» и варианты.

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

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

В настоящее время проект, который произвел на меня наибольшее впечатление, был очень мощным, Dynamic Workflow Engine, не только по простоте, но и по способу его кодирования. Я могу вспомнить некоторые очень умные фрагменты здесь и там, а также прекрасную библиотеку метапрограммирования, основанную на полном IDL, разработанном некоторыми моими друзьями ( Aspl.es )

1 голос
/ 27 января 2009

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

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

0 голосов
/ 27 января 2009

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

0 голосов
/ 27 января 2009

Я помню, когда я писал свою дипломную работу по выводу типов, мой «компилятор» из Паскаля в Паскаль был расширением Parser, запрограммированного моим супервизором (на Java). Насколько я помню, у него была довольно хорошая структура, и для меня, кто никогда не занимался серьезным объектно-ориентированным программированием, это было настоящим открытием.

0 голосов
/ 27 января 2009

Symbian OS - в любом случае, старый ядро, бит, который восходит к временам Psion или тем, кто даже сегодня поддерживает этот дух.

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

...