Истории с тегом: программизмы

Всего историй: 900

8020

Об отсутствии пустоты

Да, товарищи, заработались мы, привыкли к умным компиляторам и IDE.

Помнится, на первом курсе университета я проходил факультативный курс программирования микроконтроллеров. Два дня дебажил задание, не понимая, почему стандартный «хеллоу-ворлд» на Си не компилится. В исступлении на третьи сутки обратился к гуру. Посмотрел он код мой, пожурил и отправил мануалы читать.

Сначала я вспылил: «Как так! Я к нему с простейшей просьбой, а он мне какие-то бумажки суёт!» Поостыв, принялся за чтение спецификации компилятора.

Оказалось, что в коде моём действительно имелся досадный баг. Я-то по наивности писал int main(), а вот в спецификации было указано, что все функции без параметров объявляются как [type] [name](void), и это обязательное требование. В обычном Cи компилятор сам подставлял «пустоту», а этому нужно было указывать явно.

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

8015

Костылед эдишн

Говорят, что сисадмины подсознательно завидуют девелоперам, поскольку те могут производить на свет разные продукты, а сисадмины ничего, кроме как протянуть сетку, не умеют.

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

Есть у меня друг-программист. Пишет хорошо, знает назубок несколько языков, создаёт весьма внушительные продукты. Но при этом он совершенно не разбирается в сетях, системах, службах и других околоадминских приблудах. Я — совсем наоборот. Это нормально. Вместе с другом мы пьём пиво и собираем высоконагруженные системы. Каждый делает свою работу, причём очень хорошо. Мы очень любим наблюдать за очередной волной холиваров высокомерных кодеров с высокомерными админами.

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

8009

Дебаг карандашом

Работа у нас странная: вроде программисты, но компьютером не пользуемся. Мы составляем алгоритмы распознавания различных сигналов — например, лиц на фотографии. Только работаем в другой сфере и в основном с военными: скорость, точность, безглючность. Основные инструменты — карандаш, бумага, математика и «морской бой» с коллегой, то есть тестирование алгоритмов в разных ситуациях. Со стороны выглядит дико: большой кабинет, два мужика полдня пьют чай. Из языков программирования знаем только ассемблер. С начальством хорошие и доверительные отношения: знают, что работаем мы хорошо и максимально быстро, а брака не было уже лет пять.

К нашим алгоритмам нужен дружественный интерфейс. Для этого к нам присоединяют обычного программиста: менюшки, ввод/вывод базы данных, туда-сюда. Реакция на нас всегда одна: «Сидят, ничего не делают».

Первый разрыв шаблона у человека случается, когда он видит в ведомости суммы нашей зарплаты: раза в три выше, чем у него. Втрой разрыв происходит, когда он видит наш свободный график. Ему не знакомы наши двух-трёхсуточные авралы в поиске «мерцающих» дефектов. Третий разрыв шаблона: мы не родственники директора. Четвёртый: почему его увольняют с испытательного срока, ведь он тоже решил «работать, как эти», а мы продолжаем сидеть и пить чай?

Уже третий программист за пять месяцев.

8006

За все элементы, начиная с нулевого

Ходил сегодня на пьянку по случаю свадьбы друга, тоже программиста. Все пытались быть просто людьми, а не программистами, веб-дизайнерами и прочими продюсерами. И всё равно где-то посредине действа родилась идея абстрактного тоста «За!» с возможностью разных реализаций для разных тостов. Несмотря ни на что, был обсуждён и PureVirtualCallException. Решили, что тост всё-таки «псевдоабстрактный», то есть имеет в себе реализацию метода, который возвращает пустую строчку, а не чисто виртуального.

Всё-таки тяжело быть программистом в обычной жизни. Интересно, нас ещё можно вылечить?

7995

Чёрная метка (она же жёлтая)

Я обычный молодой компьютерщик. Ну, или айтишник — кому как нравится. Ищу работу.

А ещё я проклят, потому что имею два года опыта работы бухгалтером. Теперь эта чёрная метка отпугивает работодателей. От меня открещиваются, как от прокажённого.

Поиск работы в сфере IT каждый божий день оборачивается расстройством в связи с отказами и намёками на маленький опыт. Откуда же я возьму, господа хорошие, большой опыт, если и так на джуниора прошусь? Но глупее всего смотрятся намёки на мои два года работы бухгалтером. Да, работал. Да, немного в теме. И что теперь? Бухгалтер не может быть программистом? Или сисадмином? Что за костыли в сознании, ребята? Неужели поэтому для меня теперь закрыт доступ в мир IT? Нет, я, конечно, пробьюсь и найду своего работодателя, но невольно встаёт вопрос о шорах и штампах.

Айтишники бывают бухгалтерами, а бухгалтера бывают айтишниками. Это не религия и не мировоззрение. Это просто профессия.

7990

Ты помнишь, как всё начиналось?

Недавно я наткнулся на свой инженерный калькулятор, с которым связаны мои самые яркие (как ни грустно это звучит) воспоминания о школе. Когда я учился в шестом, кажется, классе, родители решили подарить мне на день рождения его — инженерный калькулятор Casio CFX-9950GB аж с трёхцветным и невероятно большим на те времена (127×63 пикселя) дисплеем. Я особо не понимал, зачем он вообще нужен, но было достаточно забавно строить какие-то хитрые графики и вообще щёлкать по кнопкам. Ах да, забыл сказать, что к нему прилагалась толстенная инструкция, которую по понятным причинам я читать не стал и убрал куда-то в стол. Да и зачем читать, если и так всё понятно было в меню:

RUN — калькулятор;

GRAPH — рисовать графики;

DYNA — рисовать динамические графики;

PRGM — типа, программы;

MEM — показывает память;

CONT — меняет контрастность экрана;

STAT, MAT, LIST, TABLE, RECUR, CONICS, EQUA, TVM, LINK — неинтересно.

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

Страшнее было то, что встроенный язык программирования не имел ни намёка на логи или дебаггер. Программа работала до строчки, в которой была ошибка, и завершалась. Даже не показывала, на какой строке запнулась — крутись, как хочешь, старичок!

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

Я решил не останавливаться на достигнутом и написал свою первую игру «однорукий бандит». Идея была проста: отображается твой текущий баланс, ты вводишь сумму, на которую хочешь сыграть, далее заполняются случайным образом три поля, в каждом из которых может быть любой из трёх символов. Если поля совпадают, ты получаешь приз: ставку, умноженную на какой-то коэффициент. И начал я в эту игруху рубиться! Правда, играл недолго: быстро надоела, да и рассчитал я, останусь ли я в выигрыше в итоге или нет. Это, пожалуй, был первый раз, когда я занимался теорией вероятности, хоть и не знал, что это так называется.

В общем, моя светлая голова решила, что пора играть в что-то более интересное (и уж точно не текстовое, а с таким-то 2D-графоном). Нужно написать арканоид — ну, или хотя бы то, что хоть немного может за него сойти.

Из документации — только инструкция, интернета нет нигде и ни у кого, и ни одного человека, который бы понимал, что я делаю, тоже нет. Зато есть среда разработки в инженерном калькуляторе, в которой, чтобы ввести символ, нужно нажать комбинацию из двух, трёх, а иногда четырёх клавиш, без копипаста, без дебаггера, без способа найти проблемную строку в коде, на экране 20×6 символов. Вдобавок половина школы откровенно смеётся над чудиком, который выходит в обед на улицу, но вместо прогулок и игры в футбол сидит на шине и смотрит в калькулятор. Но я справился.

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

Хэппи-энд есть, только немного запоздалый. Я уже почти год на работе, которую безумно люблю: я разработчик на Java/Groovy.

7989

Пересортица

Я первокурсник мехмата МГУ. В числе прочего у нас, разумеется, есть предмет «работа на ЭВМ» — фактически, программирование на C.

Решаем задачу сортировки. Я, как один из наиболее врубающихся, всё сдал и бегаю по аудитории, подсказывая другим, где они ошиблись. Подзывает один из одногруппников: программа запускается и сразу же улетает в бесконечный цикл, спасает только Ctrl+C.

Сразу оговорюсь: никакой толковой отладки мы не изучали (хотя надо бы, наверное). Ладно, смотрю в код, предлагаю вбить отладочную печать. Не выводится ничего — даже то, что поставлено в самое начало процедуры сортировки. Всё, что до этого, вне подозрения: там зациклиться вообще негде. Чешу репу.

Тут меня подзывает другой одногруппник — иду разбираться. Вскоре снова оказываюсь рядом с тем «зациклившимся», и он спрашивает:

— А как можно программу запустить — там, точка, палочка, что-то подобное?…

Понимаю, что речь идёт о запуске с указанием текущей папки — работали мы в Федоре из-под терминала и запускали соответствующе. Говорю:

— Точка, слэш, название. Попробуй — может, сработает…

Через пару секунд:

— Есть!

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

Вот так-то, дорогие коллеги! Иногда ошибка не в коде — просто вы с системой друг друга не поняли.

7979

Краткий гид по подводным камням

Помнится, использовал я язык FoxPro. Всё достаточно ровно было, а что неровно — обходил, находил решения. Нет идеальных программистов, а среду разработки тоже программисты творили. А вот у моего знакомого периодически возникали проблемы.

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

Мануалы пишут люди, которым свойственно забывать, не брать во внимание какие-то факторы, и, что самое печальное, частенько не знать предметной области. И всё же читать документацию нужно.

7967

Удел глупцов

Уважаемый как бы программист и автор истории «Как жаль»! К сожалению, я не работаю над сверхкрутыми проектами. Я вообще ещё учусь. Однако за три курса я очень хорошо усвоил, что идеальных программистов не бывает и никогда не будет. Но бывают идеальные коллективы программистов. Такие коллективы могут выполнить любую задачу, потому что каждый спокойно помогает своему коллеге.

Объяснять простые вещи нудно и глупо. Я полсеместра объяснял своему однокурснику, чем отличается UpdateData(TRUE) от UpdateData(FALSE). Глупо? Глупо. Однако теперь он так же спокойно объясняет мне элементарные вещи из электродинамики, ибо её я понять не могу.

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

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

Мне жалко не того «тоже программиста», а вас. Вы стали программистом случайно. Настоящий программист может посмотреть на себя со стороны и не кичиться своими знаниями.

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

Хочу закончить вашими же словами: «Все совпадения с реальными людьми прошу считать неслучайными».

7955

Ядро ранено, урок убит

Изучали в колледже Дельфи, хотя к тому времени почти все уже знали ассемблер. Молодой, но грамотный препод набирает программку, демонстрирующую работу с сетью, попутно объясняя всё и выводя картинку через проектор на стену класса. Звонит телефон, и препод выходит из кабинета. За это время наш гений вносит изменения в исходник, добавив пару ошибок, несколько десятков табов и код:

asm

xor eсx,eсx

push 7C8xxxxxh

push eсx

ret

end;

Когда препод вернулся и попытался запустить программу, посыпались ошибки. Минуты две было потрачено на поиск и исправление багов. Удачно скомпилив программку, препод уже надеялся показать её работу, но при запуске сразу открывался отладчик.

Препод тщательно проверил ещё раз исходник программы и стал изучать вывод отладчика. Как знаток ассемблера, препод проверил вершину стека, чтобы увидеть адрес, откуда вызывается код. Но наш гений не зря поставил push 7C8xxxxxh, нарочно введя в заблуждение адресами из kernel32.dll и слегка запутав код.

Вот так и прошла пара: мы играли в «морской бой», а преподаватель ковырялся в отладчике.