Оверинжиниринг — вот мировое зло, вот дьявол всеохватный. Надо же обязательно показать всему миру длину своей пиписьки, свою «современность» и владение всякими супер-пупер-технологиями. Как? Ты до сих пор ищешь четыре максимальных элемента в массиве при помощи цикла? Так ведь в последней версии надстройки для последнего Visual C++, которая продаётся всего за $1600, давно реализован готовый класс для этого! Или можно взять готовую функцию qsort, которая всего-то отсортирует зря остальные 4 миллиона элементов, зато ты потом просто сможешь взять e[0], e[1], e[2], e[3] — и всё!
Головоломщик пишет красиво, компактно, оптимально. Задача легко охватывается одним взглядом, блоки отделены один от другого логично и изящно, пусть и с нестандартным форматированием. Отличается от хорошего программиста тем, что не комментирует свой код и даёт всему сущему идиотские названия. Иногда доходит то такой изощрённой пытки, как некомментированная ассемблерная оптимизация, идеальная с точки зрения кода, но с читаемостью на уровне клинописи:
for (b=a=0, a<c, a++) if (b<d[a]) b=d[e=a];
Возможно, после пары тумаков он станет нормальным программистом и начнёт писать так:
for (MaxVal=i=0, i<ARRAY_SIZE, i++)
if (MaxVal<DataArray[i]) MaxVal=DataArray[MaxIndex=i];
// Ищем максимальный элемент и его номер. Массив полностью нулевым не бывает (проверено выше), поэтому MaxIndex всегда определён.
Только не переборщите с тумаками, а то он начнёт писать всё это в десять строк со скобками, что затрудит чтение громоздкостью — это вечный бич опенсорса.
#5332: Уберите руки от моего аптайма
15:45 31.01.2011, IT happens
Есть у меня на работе одна женщина, несколько неадекватная. У неё бзик на почве того, что её все стараются уволить. Как-то подняла шум из-за того, что один из «программистов» что-то ей испортил. Когда она выключает компьютер, тот её спрашивает: «Завершить работу?»
— Мне завершить? Совсем — и с вещами на выход? Я ещё вас тут всех пересижу, вы меня не уволите!
#5333: Тонкий беспроводной троллинг
15:45 31.01.2011, IT happens
Потребовался мне наконец вайфай дома. Домашняя сетка грамотно разведена по кабелю, так что раньше необходимости не было. Воткнул в коммутатор точку доступа, быстренько настроил WPA2.
А теперь нюанс, которым хочу поделиться. В качестве пароля, особо не заморачиваясь, я выбрал словосочетание на русском языке в английской раскладке. Запоминается легко — но попробуйте ввести его на экранной клавиатуре КПК, планшетника или смартфона! Не получается? А гости, основные пользователи моего домашнего беспроводного интернета, приходят именно с такими устройствами. Пароль пришлось менять.
#5334: Много-много миллионов новых наноэлектронов
15:45 31.01.2011, IT happens
Конец 2010 года. Интернет-провайдер в подмосковном Долгопрудном гордо заявляет: новые тарифы «работают только по новой технологии IPoE (IP over Ethernet)». Вот это инновация! А раньше мы IP через Ethernet передавать и не догадывались!
#5335: Гладко было на бумаге
19:45 31.01.2011, IT happens
Все говорят, что писать надо быстро, качественно и так, чтобы работало. С этим все согласны, но когда начинаешь выяснять, что такое «чтобы работало», обнаруживаются такие нюансы, что только диву даёшься.
Я не программист, я математик. И 25-летнего стажа у меня нет — мне всего 27. Тем не менее, на моём счету нахождение ошибки в вычислительной программе по телефону (неправильное соотношение шагов в сеточном методе для уравнения теплопроводности — в итоге деталь охлаждалась до ?3000 градусов) и ещё пара подвигов в этом духе, но рассказ не об этом.
Недавно меня попросили реализовать один алгоритм (если кому интересно, Savitzky-Golay smoothing). Ерунда вопрос. Два дня, чтобы прочитать, что же это за зверь, два дня, чтобы вспомнить синтаксис C, два дня, чтобы не торопясь написать и протестировать консольную программу (напоминаю, я не программист). И вот в процессе тестирования вылезает глюк: в результате сглаживания у положительной функции появляются отрицательные участки. Понятно, что на такой функции и с такими параметрами метод не работает, но как понять, где его можно применять, а где нет? И вот я погружаюсь в глубины интернета в поисках оценок погрешности метода, но их нигде нет. Самому оценки вывести не получается — метод сформулирован в таких терминах, что непонятно, с какой стороны к нему подходить. Алгоритм опубликован в 1964 году, но за сорок лет никто не удосужился его протестировать и обосновать?! Невероятно, но факт. В принципе, после этого можно было бы сдать работу и сказать, что оно сорок лет у всех работало и у нас поработает, но совесть не позволила. На реализацию ушла неделя, на поиск альтернативных решений или обоснований — два месяца. Вот такое вот «чтобы работало». Решайте сами, как бы вы поступили в такой ситуации.