В процессе работы полез в исходники одного пакета (очень удобного и полезного, кстати). Код красивый, прозрачный, понятный, неплохо откомментированный. И вдруг натыкаюсь на такой кусок:
// check if any component is linked to OnRxChar event procedure CheckLinks; {$WARNINGS OFF} var I: Integer; FuckMeAndMyDogToo: Pointer; //TCPortBytes;{Pointer} ComLink: TComLink; ReadFromBuffer: Boolean; begin FuckMeAndMyDogToo := nil;
Это ж до чего человек дошёл в процессе разработки, что так переменную обозвал?
Когда я учился на первом курсе, старшие, уже мнившие себя великими программерами, всячески издевались над новичками. Стоило в компьютерном классе оставить открытым свой исходник и отойти, как он тут же подвергался небольшой правке: в каком-нибудь идентификаторе английская буква «o» менялась на идентичную, только русскую. Бедняга-первокурсник по возвращении не мог откомпилить только что работавший код, долго рвал на себе волосы и не мог понять, за что компилятор называет его инвалидом.
Вечером притопал к другу в гости. У него подъезд на кодовом замке — такой, знаете, с десятью кнопками. Нужно зажать комбинацию, чтобы открылся.
Код замка я знаю. На улице ни зги не видно. Считаю на ощупь, нажимаю — не открывается. Считаю ещё раз — без толку. Звоню товарищу, спрашиваю код замка. Называет те же цифры. Пробую ещё раз, чтобы наверняка. Отчаявшись, прошу его выйти и впустить меня.
Открывает, рассказывает, какой я криворукий идиот. Требую показать мне, как этот замок открывается. Друг хмыкает, но показывает: «Смотри, считаем с краю: один, два, три…»
Кто же знал, что у этих обычных людей нумерация идёт с единицы!
Учусь на первом курсе технического университета. При написании программ в школе мне приходилось сталкиваться лишь со статическим выделением памяти, поэтому динамику я изучала с нуля.
Сидела полночи над лабораторной по динамическим структурам. Поспать удалось пару часов. Звенит будильник, я открываю глаза, и в моей голове происходит мыслительный процесс:
— Сейчас у нас что? Лекция по истории. Препод даст новую информацию. Но я же не выделила для этой информации память!
Последующие полчаса я лежала и думала, как же мне выделить в своей голове кусочек памяти для того, чтобы усвоить лекцию. Не придумала и с чистой совестью заснула обратно.
Перезанималась я, в общем, в ту ночь. Боюсь, что в следующий раз не смогу подключить к себе библиотеку, чтобы выполнить функцию вставания с кровати по утрам.
На Маке я не программировал давно, а тут потребовалось посмотреть работу программы под iOS 4.1 — чисто для себя. Откомпилировать, посмотреть и забыть. Естественно, помимо прочего, надо иметь iOS SDK и сертификаты. Последние я одолжил у подчинённого (в фирме он теперь Маками занимается), принёс исходники домой, подключил айфон и приступил.
Требуемого SDK не оказалось. Хакинтош старенький — давно не включал. Полез в сетку искать, где скачать. Рапидшары и прочие торренты наперебой предлагали либо скачать за деньги, либо установить трояна, либо рассказать пароль от своей почты. Найденные торрент-закачки отказывались стартовать. Сайт Apple требовал Developer ID.
Заскучал. Переключился на виндовый комп, почитал анекдоты, на автомате переформулировал запрос и ещё раз послал в Гугл, оттуда вывалился на яблочный сайт. В окошке, куда надо было вводить Developer ID, красовался неизвестно из каких кук достанный мой ID пятилетней давности. Пароль набрался сразу — руки не забыли.
Оказывается, я зарегистрированный разработчик под OS X и iOS. И какого хрена убивал время, копаясь в пиратских сайтах? Cила привычки, блин…
Программирую микроконтроллер. Один и тот же код, откомпилированный на двух различных компиляторах, выполняется в одном случае гораздо медленнее. Охреневаю. Смотрю на размеры файлов — у более быстрого больший размер. Не очень сильно, но есть.
Лезу внутрь. Код откомпилился один в один. Но в более медленном варианте все переменные идут друг за другом, без перерыва, а в более быстром выровнены по 32 бита. Основной счётчик — как раз 32 бита, но в медленном варианте он смещён на один байт, поэтому читается-пишется за два обращения к оперативке.з
Да, товарищи, заработались мы, привыкли к умным компиляторам и IDE.
Помнится, на первом курсе университета я проходил факультативный курс программирования микроконтроллеров. Два дня дебажил задание, не понимая, почему стандартный «хеллоу-ворлд» на Си не компилится. В исступлении на третьи сутки обратился к гуру. Посмотрел он код мой, пожурил и отправил мануалы читать.
Сначала я вспылил: «Как так! Я к нему с простейшей просьбой, а он мне какие-то бумажки суёт!» Поостыв, принялся за чтение спецификации компилятора.
Оказалось, что в коде моём действительно имелся досадный баг. Я-то по наивности писал int main(), а вот в спецификации было указано, что все функции без параметров объявляются как [type] [name](void), и это обязательное требование. В обычном Cи компилятор сам подставлял «пустоту», а этому нужно было указывать явно.
С тех пор я научился читать документацию и лог вывода компилятора, включаю во время дебага все ворнинги и не успокаиваюсь, пока каждый не исправлю.
Говорят, что сисадмины подсознательно завидуют девелоперам, поскольку те могут производить на свет разные продукты, а сисадмины ничего, кроме как протянуть сетку, не умеют.
К сожалению, высокомерный сорт кодеров забывает о том факте, что они очень любят писать софт «костылед эдишн», прикрутить который в продакшне бывает большим квестом для нехилых скиллов. Ребят, если всё-таки считаете себя великими, то пишите хоть софт вменяемо, чтобы «тупые админы» потом не прикручивали это всё через жопу, попутно исправляя куски кривого кода.
Есть у меня друг-программист. Пишет хорошо, знает назубок несколько языков, создаёт весьма внушительные продукты. Но при этом он совершенно не разбирается в сетях, системах, службах и других околоадминских приблудах. Я — совсем наоборот. Это нормально. Вместе с другом мы пьём пиво и собираем высоконагруженные системы. Каждый делает свою работу, причём очень хорошо. Мы очень любим наблюдать за очередной волной холиваров высокомерных кодеров с высокомерными админами.
Ребят, лучше совершенствуйте свои навыки, кем бы вы ни являлись, вместо пустых споров, кто лучше. Реально полезнее будет.
Работа у нас странная: вроде программисты, но компьютером не пользуемся. Мы составляем алгоритмы распознавания различных сигналов — например, лиц на фотографии. Только работаем в другой сфере и в основном с военными: скорость, точность, безглючность. Основные инструменты — карандаш, бумага, математика и «морской бой» с коллегой, то есть тестирование алгоритмов в разных ситуациях. Со стороны выглядит дико: большой кабинет, два мужика полдня пьют чай. Из языков программирования знаем только ассемблер. С начальством хорошие и доверительные отношения: знают, что работаем мы хорошо и максимально быстро, а брака не было уже лет пять.
К нашим алгоритмам нужен дружественный интерфейс. Для этого к нам присоединяют обычного программиста: менюшки, ввод/вывод базы данных, туда-сюда. Реакция на нас всегда одна: «Сидят, ничего не делают».
Первый разрыв шаблона у человека случается, когда он видит в ведомости суммы нашей зарплаты: раза в три выше, чем у него. Втрой разрыв происходит, когда он видит наш свободный график. Ему не знакомы наши двух-трёхсуточные авралы в поиске «мерцающих» дефектов. Третий разрыв шаблона: мы не родственники директора. Четвёртый: почему его увольняют с испытательного срока, ведь он тоже решил «работать, как эти», а мы продолжаем сидеть и пить чай?