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

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

9903

Машина — дура, админ — молодец

Когда в 1979 году я начала учиться в универе на факультете ВМК основам программирования (кстати, в те времена чисто женская специальность была), у нас ходила присказка: «Машина — дура: ей что скажешь, то она и делает».

Судя по большинству постов, теперь народу об этом не говорят.

9897

All systems go

Простудился. Вечером писал софт с юнит-тестами, потом ворочался от бессонницы. Наутро, не открывая глаз, получаю первые мысли:

Нос не заложен — тест пройден.

Голова не болит — тест пройден.

Не холодно — тест пройден.

Температуры нет — тест пройден.

Суставы не болят — тест пройден.

Активация…

9894

Ноль по наследству

Технический вуз. Первое знакомство с ассемблером. Задание на лабораторную работу: написать прогу, которая демонстрирует работу конструкции if-then-else. Собственно, с клавиатуры вводится число, и если оно не равно 10, то преобразуется по одной формуле, а если да — то по другой: x = 5x − 45.

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

Ввожу «10». Программа быстренько прыгает по регистрам, по флажкам и в конце бодро выдаёт мне результат: «50». Я, конечно, почти ничего против не имею, но ответ должен быть ровно в десять раз меньше. Следующие несколько минут проходят в подробном изучении синтаксиса ассемблера: лекцию ведь я бессовестно проспал. Однако даже после этого программа непреклонна — «50», и всё.

Люди понемногу начинают сдавать свои программы. Некоторые собираются возле меня, и мы вместе начинаем искать ошибки. Проверяется свыше десятка альтернативных вариантов, но ответ при этом не меняется. Самое обидное, что в аккумуляторном регистре, содержание которого в итоге и выводится на экран, хранится заветное «05», но увидеть пятёрку на экране почему-то не судьба.

Только когда пара уже почти заканчивалась, я, как это обычно бывает, внезапно понял, в чём дело. Проверяя условие, которое работало нормально, я вводил, например, «3», и получал ответ, скажем, «49». А здесь я вводил «10» в начале первой строки консоли, программа мне выводила «5» там же. Соответственно, нолик от введённой мной десятки благополучно переезжал в новое число — об очистке экрана или переносе на новую строку никто ведь не подумал…

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

9872

TCP/VK

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

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

Есть два отдельных приложения, которые взаимодействуют с социальной сетью: одно играет роль клиента, другое представляет собой сервер. Клиент работает на мобильном устройстве, сервер — на домашнем ПК. Пользователь вводит в мобильное приложение URL, приложение в свою очередь устанавливает статус пользователя вида url: example.com/path?param=val… Естественно, оператор не учитывает этот трафик. Приложение на домашнем ПК, в свою очередь, постоянно мониторит статус пользователя на предмет подходящей строки, достаёт из нее запрос, выполняет его, результат полностью сохраняет, хитрым образом кодирует и постит куда-нибудь на страницу «Вконтакте». Приложение на мобильном устройстве дожидается ответа, опять делает запрос на сайт, получает данные, расшифровывает их и отображает пользователю полноценную веб-страницу.

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

9853

Трудно быть богом

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

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

Открою вам великую тайну. Технические навыки — лишь один из критериев оценки. Ваши вопли из серии «зачем мне общаться с HR (или агентством) и терять время» приведут только к скорому попаданию в чёрный список.

Ты годик-два программировал? Ты знаешь базы данных? Ты очкастый задрот, от которого плохо пахнет? Да-да, на собеседования часто приходят именно такие, с запахом и знанием C# .NET. Мы все сейчас упадём перед тобой на колени и предложим тебе 100 000 рублей на руки. Угу. Вот только сильнее разбежимся.

Задротики до 25 лет, считающие себя царями вселенной, вас много. Правда много. И это нам есть из чего выбирать, а не вам. Гонор, пафос и амбиции оставьте при себе. Вы стоите не больше 40 000. Можете сколько угодно претендовать на другие суммы и сидеть у мамы на шее, пока ищете работу.

Вот мне интересно: почему финансовый директор, которому мы с радостью готовы предложить не менее 200 000 рублей, подробно объясняет тонкости своей работы, вежливо общается, ведёт себя уважительно? Почему директор юридического департамента (500 000 рублей в месяц) отвечает на все вопросы, улыбается, уточняет малейшие детали? И почему ты, с твоим ничтожным опытом и неумением связать слова, смотришь на рекрутёра как на ничтожество из-за того, что он задал тебе уточняющий вопрос по C#? А я знаю почему. Потому что ты не понимаешь бизнес-процессов, не видишь разницы между рекрутёром и техническим специалистом. У тебя в голове только мониторы и код. И знаешь, судя по твоей внешности и зажатости, тебе не дают девушки.

Форумы — вот уж где айтишники поливают нас грязью! Мы, видите ли, не разбираемся ни в чём, мы пишем их высочествам письма и звоним (странно, резюме же размещено два дня назад), лезем со своими ненужными вопросами. «У меня же в резюме всё написано!» Ну да: «SQL Server 2005». А нам важно узнать, сколько было записей в базе, с которой ты работал, что ты конкретно делал, какие писал запросы. Может, это был лишь вспомогательный инструмент. Этого в твоём резюме не написано.

Айтишники, запомните: вы не боги. Вы обычные специалисты. И то, что ваша область довольно сложна для понимания, не значит, что нужно хамить, строить из себя всезнаек и выпендриваться. Сколько существует типов интервью? Какие есть в психологии метапрограммы? Что такое локус контроля? Что такое интервью по компетенциям? Какие есть источники поиска? Что такое executive search и чем он отличается от headhunting? Вы это знаете? Не знаете. Но мы же не смотрим на вас из-за этого как на дерьмо.

Оглянитесь вокруг, задроты с опытом в пару лет. Вас на hh.ru как грязи. И если ты хамишь, ты просто не получишь работу. Всё просто: если ты хамишь на собеседовании мне, ты будешь хамить своим будущим коллегам, и твоё знание программирования уже не сыграет никакой роли. Удачи в поиске работы!

9849

Семь раз отмерь, один скомпилируй

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

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

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

Сначала подумайте. Потом подумайте ещё раза три. Потом нарисуйте то, что вы придумали, потом на недельку положите это в стол — и уже потом пишите. А еще читайте Макконнелла. Даже если вы знаете его наизусть, всё равно читайте.

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

9836

Разборки со сборкой

Пришлось однажды дописывать приложение на Visual Studio 2005, которое использовало DLL. Пришло время дебага. Жму Attach Process, а Вижла посылает меня ко всем чертям: говорит, что не может запустить дебаггер. Перелазил во всех настройках — не пашет. Переустановил — не пашет. В 2003-й аттач-дебаг пашет, в 2005-й нет.

Гуглю долго и интенсивно, уже думаю бросать. Но тут нахожу, что дело может быть в остановленной службе Terminal Service. Глядь — а нету у меня такой службы. Попытки восстановить её успехом не увенчались ни с помощью сайта microsoft.com, ни с помощью диска с дистрибутивом.

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

Устанавливаю винду, ввожу по привычке имя компьютера, содержащее нижнее подчёркивание, и вдруг на него установщик сборки ругается: мол, так и так, подчёркивания нельзя. Записываю имя через дефис, доустанавливаю ОС, IDE. Не знаю, то ли это вставший Terminal Service, то ли правильное имя компьютера, но дебаг заработал! Всё-таки есть иногда польза от левых сборок…

9801

Приколовнедрительница

Тружусь в международной конторке, которая себя именует «компанией», но на самом деле — шарашка ещё та.

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

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

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

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

9795

Индусом можешь ты не быть, но копипастить ты обязан

Правильно говорят: создавайте, творите, думайте!

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

А если чуть серьёзнее, то кодер может не быть программистом, но программист всегда обязан уметь кодить. Чтобы придумать хорошее и годное новое решение, вы должны знать старые. Иначе ваш глючный и рассыпающийся «велосипед» огорчит коллегу, которому придётся его переписывать. А вдруг этот коллега, по словам Макконнелла, склонный к насилию психопат, который знает, где вы живёте?

9782

Коммит, сломавший спину верблюда

Было это давным-давно, когда ещё была жива фирма Sun Microsystems, а я работал у них удалённо. Писали довольно большую систему на С++ (кажется, это был компилятор SunPro 2.0). После очередной незначительной правки одного-единственного исходного файла (было добавлено буквально две-три строки) я запустил сборку. К моему огромному удивлению, она упала с огромным количеством ошибок в добром десятке файлов, причём все они не имели к правкам никакого отношения.

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

После двух часов танцев с бубнами выяснилось, что в течении этих пяти минут IT-отдел успел тихой сапой, никому ничего не сказав, обновить версию компиляторов с 2.0 до 2.1. Ситуацию усугубило то, что и сам Sun умудрился в этой обновлённой версии полностью сменить реализацию фронтэнда С++, причём, как оказалось, не в лучшую сторону.