9521
Как надоели истории про то, что пользователи тупят при надписи «Press any key»! Разработчики, а вы не пробовали сами немножко подумать?
«Нажмите любую клавишу». Окей, любую клавишу на клавиатуре? Замечательно, я люблю боковые кнопки. Буду тыкать в Ctrl, Alt, Shift, Caps Lock. Как — не те? А что, это не любые? Или не клавиши? Или не на клавиатуре?
«А что же делать? Не перечислять же все кнопки, на которые можно нажать!» — скажете вы. Почитайте умные книги, ребятки. Алана Купера почитайте. Неужели вам так трудно написать: «Press Space»?
9505
Классе в седьмом у нас в школе начали вести предмет «Программирование». Почти год серьёзный препод гонял нас в Паскале, приговаривая: «Если вы не будете знать основы, никогда не сможете решать задачи прикладного уровня». Правда, на первом курсе нам рассказали всё то, что он преподавал до самого выпуска, за три месяца.
К чему это я? В начале восьмого класса отправил он нас с другом на олимпиаду по предмету, заодно и сам поехал. И я, пожалуй, до конца своих дней буду помнить его вопрос после просмотра заданий: «А что такое массивы?»
9499
Делал по молодости простую двадэшную игрушку, вид сверху. Бегает по подобию города толпа подобий зомби и подобий людей, одним из последних управляет игрок. Цель — выжить в течение какого-то времени.
Допустил багу, что зомби было пофигу, за кем гоняться, и жрали они как людей, так и друг друга. По крайней мере, пытались — смерть зомби не была предусмотрена. А из-за бага карты я и сам завис в каком-то переулке. Персонаж нервно рыпался, и, казалось, дико ржал над происходящим вокруг сумасшествием.
9468
Я хоронил процесс потомка,
Слезами капал на ядро…
Свободна память, нет и гонки.
Он генерировал добро…
Сигнал пришёл — и он охрип.
И всё. Не помню, онемев, я,
Как унаследованный тип
Сажал бинарные деревья.
9453
Обычный компилятор gcc для какой-то ARM-платформы, обычная функция, внутрь которой передается двухбайтовое целое число. Внутрь функции попадает цена на дрова, которая ну никак не коррелирует с передаваемым снаружи числом. Молодой программист вторые сутки долбится лбом о клавиатуру и просит помочь, а я, едва взглянув, вспоминаю похожие симптомы про передачу word’а из микрософтовской библиотеки в борландовую и наоборот.
Ради шутки говорю: «Сделай так, чтоб функция принимала обычное четырёхбайтовое целое, жалко тебе, что ли?» Программер правит код — всё работает как часы. На меня смотрят большие круглые глаза — великий шаман, блин!
А дело в чём? Прараметры в стеке выравниваются на четыре байта. А разработчики компилятора просто не договорились, какие два байта из четырех считать нужными. Тот, кто писал генерацию кода для вызова функции, считал, что это два верхних байта в стеке, а тот, кто писал доступ к параметрам из тела функции — что нижние. Между микрософтовскими и борландовыми stdcall-функциями подобная шняга была, что и помогло быстро решить проблему. Плохо, когда компилятор сам с собой не дружит…
9452
Да, история странная, но может помочь в осознании проблем проггерства.
Я был на втором курсе, девочка моя тоже. Готовила она слабо. На моё замечание, что макароны просто сварены, спросила: а как можно ещё? Я и ответил, что их обжаривают.
Она и обжарила в следующий раз. Перед варкой.
Задавая алгоритм, обязательно перепроверяйте порядок действий. Не раз это мне помогало отлавливать глупые ошибки в коде.
А на третьем курсе института я узнал, что «быструю» лапшу на самом деле сначала обжаривают, а потом варят. Но это была уже совсем другая история.
9450
Универ, конец семестра. С большим трудом сдаю всё вовремя, в отличие от многочисленных друзей, которым требуется моя помощь: кому что-то написать на С++ или ассемблере, кому объяснить, как работает, а кому и отдать свою лабу, причём не только исходники, но и распечатанные отчёты.
Сбросил самым близким друзьям все свои лабы, соседу по комнате вручил пак отчётов (поменяй титульный лист — и можно сдавать) и уехал на две недели домой. Через несколько дней в семь утра звонит мне этот самый сосед:
— Твоя лаба на асме не работает, я её уже три дня сдать не могу.
— Что выводит?
— Ничего!
— Введи строку на английской раскладке, чтоб было несколько пробелов.
— Ввёл.
— Жми энтер.
— Ничего!
— Запусти батник, который пересоздаёт EXE-файл программы. Повтори последние действия.
— Ничего!
— В смысле, программа вылетает?
— Нет, не вылетает.
— Что-то выводит?
— Ничего не выводит. Точнее, ноль выводит.
— Виталик! Ноль — тоже результат!
9430
Что может быть лучше, чем утром ранним,
Когда мир росою и солнцем пропах,
Раскинувшись вольно у окна на диване,
С довольною рожей препарировать баг?
Он подло в мой новенький модуль закрался,
Он мне, жучара, хотел навредить.
Но в сети отладчика быстро попался,
Теперь интересно ему будет жить...
Я буду кормить его строчками кода
И медленно лапки ему отрывать,
Чтоб его изучить досконально природу,
Чтоб новых ошибок не допускать.
А то я их знаю: бывает, прихлопнешь,
Не думая, лишь бы убить, одного —
И тысячи, тысячи их, будь я проклят,
Сбегутся кормиться на трупе его!
Что ж, гостю незваному — долгие пытки.
Вы не подумайте, я не садист!
Губить беспощадно любые ошибки —
Моя работа. Я программист.
9394
Услугу за услугой
Заказываю ловко,
Порадуем коллег мы
Облачной обновкой.
Данные, хватит в локальной машине околачиваться!
Облако и престижнее, и выше оплачивается!
Довольно деньги тратить понапрасну —
Переходи на сервис безопасный!
Облако, сервис, безопасные данные,
Ресурсы надёжные и виртуальные —
Вот то, что поможет для вашей компании
Успех обрести, доход, процветание!
Злой сисадмин мечет и рвёт,
Главный бухгалтер жить не даёт:
«Офис поставь», «настрой 1С»…
Пора ему в облако — всё это там есть.
Разработка облачных приложений, как видите, стимулирует творчество.
9382
Работаю проджектом на довольно сложном проекте с довольно запущенной кодовой базой. Выделил шесть стадий работы с типовым багом:
1. Такое не случается.
2. Такое не случается на моей машине.
3. Такое не должно случаться.
4. Почему оно случилось?
5. А-а-а, понял!
6. А как это вообще работало?
Бонус:
7. В SVN коммиты неудачно наложились.
8. Теперь мы будем писать тесты.