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

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

6593

Hello world в 140 символах

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

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

6590

Почти что PHP

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

В начале семестра блеснул лучик надежды: нам сообщили, что весь курс будет засчитан, если мы сдадим две программы повышенной сложности. По секрету добавили, что если программа будет на PHP, хватит и одной.

Обрадовавшись, я ударился в работу, не слишком обращая внимание на этот предмет. Но вот на горизонте замаячил зачёт, а не написано было ни байта кода. Поисковик показывал только одну наработку по этому, но она была родом из первой половины девяностых. Тут я наткнулся на библиотеку, позволявшую подключать модули, написанные на C++, к коду на PHP. Библиотека был в стадии разработки и отказывалась передавать или получать параметры функций, то есть вызывать можно лишь что-то вроде void draw(). Выяснилось это только в ночь перед последним днём сдачи.

В голову пришла гениальная идея: написать парсер, который переводил бы код, с виду похожий на PHP, в сишный, компилировал из него объектник, кидал в папку с модулями PHP и запускал бы ту самую void draw(). Код «почти что PHP» выглядел примерно так:

/*int*/ $variable = 0;

Под утро вариант заработал. Думаю, не стоит говорить о своих чувствах во время сдачи этого чуда природы… Но преподаватель остался доволен тем, что увидел (а то, что не должен был, так и не узрел).

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

6571

Include error

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

#include "mozg.h"

// 12 лабораторных, автоматы будут

#define ranshevseh 5

#define vovremya 4

#define poslednii 3

#define durak 2

// купил — пересдача

6547

Проверено Раздолбаем: индуизма нет

Жили были лет этак -надцать назад два студента. Учились они в одном вузе, на одном факультете и даже в одной группе.

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

Как-то раз случился между означенными студентами холивар: во сколько строчек кода можно реализовать сортировку пузырьком в самом простом варианте? Физматик утверждал, что меньше чем в полсотни не уложиться; Раздолбай общеобразовательный стоял на том, что 20 — это максимум.

Спор разрешил преподаватель (мировая тётушка, дай ей Бог здоровья), предложив противоборствующим сторонам реализовать свои планы на ближайшем семинаре, благо он и так будет посвящён сортировкам и их последствиям. Стороны согласились.

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

Итак, программы набиты, указательные пальцы замерли над клавишами F9… Старт! «Раздолбайская» программа молча скомпилировалась, скушала поданный массив, отсортировала его и ждала, когда милостивый хозяин нажмёт что-нибудь, дабы она могла удалиться на покой. «Физматская» никак не желала компилироваться: ошибки пёрли из всех щелей. Даже после того, как они были побеждены, борьба за результат продолжалась почти до конца пары.

В дальнейшем пути студентов разошлись: Физматик перевёлся в самый крутой вуз страны, Раздолбай отчислился из-за академической неуспеваемости (любите физкультуру — и будет вам счастье) и более никогда не пытался получить заветную корочку диплома (вру, нагло вру: на третьем курсе я).

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

6542

Наступить на горло песне

Разрабатываем авионику. Один из проектов предусматривал создание сложной системы, обрабатывающей навигационную информацию с самолётных датчиков. Ясное дело, любой датчик имеет погрешность — как систематическую, так и случайную. С систематической всё просто: корректируем со спутника. Со случайной хуже: датчики собирали с миру по нитке, и что будет в реальном полёте, неизвестно.

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

Момент истины — полёт! Вначале летим с выключенной коррекцией — весьма недурно. Включаем на борту наш хитрый алгоритм. Жуть… А всё просто: случайные ошибки изменялись по синусоиде, а пока имеющееся у нас железо считало поправку, ошибка меняла знак. Ошибка возрастала, и следующая поправка опять приходила в противофазе. Красота.

Что же делать? Умножить алгоритм на ноль нельзя: он наш кормилец. Решение была гениальным: результат коррекции сравнивался с исходным и теоретическим значениями, умножался на поправочный коэффициент, близкий к нулю, и складывался с исходными данными. При этом учитывалась задержка и рассчитывалось значение, которое будет, когда прокрутятся шестерёнки. А поскольку железо было тормознутое, угадать значение удавалось редко. В 95% случаев алгоритм выдавал поправку, равную нулю.

Сдаточные испытания прошли успешно.

6505

Истина на дне стакана энтропии

Экзамен по программированию. Студентка пытается объяснить принцип работы пузырьковой сортировки.

— Когда можно останавливать цикл и прекращать работу алгоритма?

На полном серьёзе девушка отвечает:

— Когда мы достигнем Истины.

6497

Пули нет

Сошлись быдлокодеры и строители велосипедов! Одни не могут отойти от клепания по шаблонам, другие постоянно озабочены фатальным недостатком. Когда же вы запомните, что в программировании нет серебряной пули?!

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

Как стать программистом? Сперва научитесь работать в команде. Программист-одиночка — это утопия.

Учите технической английский. Без него всё равно никуда. Переведите ман, описание пакета, любую другую документацию. Заодно научитесь сперва читать, а потом кодить.

Учитесь пользоваться системами управления версиями, отдавая свои переводы сообществу. Git вполне подойдёт для старта.

Научитесь чётко описывать, что хотите и что этому мешает. Для этого пишите багрепорты. Бессловесное создание никому не интересно, как и программа без документации.

Сидите на форумах в разделах типа «ищу программу» или «помощь новичкам». Это расширит ваш кругозор и прокачает скилл поиска готовых решений.

Только теперь имеет смысл выучить какой-либо язык программирования. Классическая тройка: С, Perl, Lisp. Впрочем, сейчас можно два последних заменить на Python и Haskell соотвественно. Каждый язык хорош только для своей области, поэтому знать надо всю тройку. Заодно прочувствуете на своей шкуре истину про серебряные пули.

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

А необходимость писать программу с нуля возникнет сама, но вы уже будете готовы к этому.

Впрочем, вышеописанное относится только к свободному софту. Проприетарщикам в любом случае придётся писать свои велосипеды или работать штамповочной машиной, потому что другого выбора у вас нет.

6491

Всепроникающее омикрософчивание

Была программа. Cамая обычная программа — на С++ с GUI. Из-за попыток сделать её кроссплатформенной внутренний интерфейс был настолько сложен, что запрограммировать новое действие означало исполнить балетную сюиту с бубном. Все ругались, но терпели.

Начальству потребовалось прикрутить к программе скриптовый язык, чтобы проигрывать пользовательские сценарии. Поручили мне. Я не стал изобретать велосипед — присобачил к программе OLE-хост, вывел все ручки в COM-интерфейс, а вместо скриптового языка (который, по мнению начальства, должен был придумать сам) прикрутил VBScript, благо он на любой виндузной машине есть.

Эффект проявился через два месяца. Сначала все отказались от громоздкого внутреннего протокола и стали активно использовать сделанный для скрипта СОМ-интерфейс. Вторым шагом стало повсеместное использование в коде мини-скриптов, создаваемых на лету, — и это избавило от необходимости знать методы СОМ-интерфейса. Создаёшь в строковой переменной скрипт и отравляешь одним движением на исполнение. Потом вместо диалогов повились окна с HTML-браузером, в котором Javascript коннектился с моим OLE-хостом, и в ответ на нажатие кнопки на HTML-странице в кишках программы что-то проворачивалось. Количество людей, которые продолжали программировать на С++, упало ниже плинтуса. Когда я увольнялся, всерьёз обсуждался вопрос об интеграции в приложение сервлетов и элементов протокола HTTP.

Вот и думаю: саботажник я или нет?

6475

Самое время думать

«Не думайте, вам рано»? Чёрта с два. По такому руководству вы можете стать только кодером. Не обязательно с приставкой быдло- — возможно, очень хорошим кодером. Но претендовать на высокое звание программиста вы не сможете никогда.

Как стать программистом? Думайте! Знать типовые решения, конечно, полезно. Но если и не знаете — ничего страшного. Вспоминайте всё, чему вас учили, включайте мозг и используйте его по прямому назначению: думайте! Пусть поначалу над вами будут посмеиваться более опытные товарищи, пусть ваши решения будут напоминать велосипед с квадратными колёсами или паровой молот, построенный для забивания единственного гвоздя. Ничего страшного — все через это проходили. Не ошибается только тот, кто ничего не делает. Вам подскажут более оптимальное решение, а вы приобретёте опыт и в следующий раз сделаете лучше.

Не забывайте, что жизнь — сложная штука, и типовых решений вашей задачи может и не оказаться. Мне попадались настолько нестандартные задачи, что ничего даже отдалённо похожего найти не удавалось. Я писал свой алгоритм, тормозной и глючный, потом долго его оттачивал. В конце концов придумывал другой — и сам поражался, насколько просто и изящно вышло. Однако, не ковыряйся я полгода с первым алгоритмом, второго бы просто не было.

Типовые решения не записаны богами на каменных скрижалях. Их создают такие же программисты, как и вы. Отказываясь от собственного творчества, вы заведомо ставите себя ниже их. Не стесняйтесь улучшать стандартное решение — не стоит загонять свою программу в прокрустово ложе. Поначалу может оказаться, что ваше улучшение только добавляет глюков, ничего толком не улучшая. Ничего страшного, потом научитесь.

Говорите, математический аппарат вам не пригодился? Тут два варианта: либо предметная область и впрямь настолько примитивна, что программист тут просто не нужен, либо, нагородив стандартных решений, вы создали очередной шедевр быдлокодинга. Видал я такие программы, тормозящие на простейших операциях на топовом железе.

Создавайте, творите, думайте! Только так вы станете программистом. Бездумно собирать кубики типовых решений — удел кодеров.

6471

А если несколько раз?

На защите дипломной работы:

— В целом работа выполнена неплохо, но что вы хотели сказать фразой «цикл if»?

Половина аудитории прикрывает лицо ладонью.