[Из песочницы] Немного о частном случае реализации алгоритмов поиска открытых дверей

?v=1

Привет, Хабр!

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

Все эти посты объединяет одно: история о том, как прекрасная, но такая хрупкая мечта разбилась о суровую реальность. Наверно, подобные ощущения могут возникнуть абсолютно в любом возрасте, мне встречался «разочарованный максимализм» и среди двадцатилетних, и среди людей, которым за 40. Мне бы хотелось приободрить авторов этих постов и людей, испытывающих подобные эмоции, но я не буду рассказывать о том, что на самом деле реальность не так сурова. Зачастую реальность бывает намного хуже. Можно выгореть на своей первой работе. Бывает. Жизнь не всегда преподносит приятные сюрпризы. Так бывает намного чаще. Каждая мечта, как и каждая жизнь отдельно взятого человека — уникальны, и каждый принимает решения, которые в конечном итоге определяют нас, как личность, исходя из обстоятельств. Я не буду рассказывать о том, что и как вам следует делать. Я всего лишь хочу рассказать о своей мечте стать программистом и о том, как я шел к ней.


Начало

Пожалуй, стоит начать с самого первого момента. Мне было 5 с половиной лет, и я, как и многие мои ровесники (а зачастую и их родители) в те годы, не подозревал о существовании персональных компьютеров. Но я уже знал термин «программирование» и примерно представлял, что это такое. Я понятия не имею, когда и откуда я его взял, возможно где-то услышал или прочитал — мама занималась со мной с очень раннего возраста и ее настойчивость дала свои плоды: я научился читать лишь немногим позже, чем начал произносить осмысленные звуки, и до того, как у меня сформировалась четкая членораздельная речь, на тренировку которой у меня ушли годы, но об этом как-нибудь в другой раз. Мне очень нравилась различная техника, нравилось разбираться, как она устроена, и во многом меня вдохновляли книги, оставшиеся от одного из моих дедушек — толстые фолианты, насыщенные технической информацией, испещренные загадочными формулами и потрясающими чертежами и эскизами фантастических устройств. Термин «формула» я, кстати, тоже почерпнул из этих книг: многие магические начертания, пока еще не понятные детскому разуму, были подписаны этим словом. На других страницах вместо букв в этих заклинаниях подставлялись числа и получался результат, который определял, к примеру, сколько витков медной проволоки нужно намотать на катушку трансформатора. По аналогии, если я где-то видел что-то, что выглядело как формула и туда можно было подставить числа — значит это была формула. Пожалуй, это один из первых случаев применения утиной типизации в моей практике. Огорчало меня только одно: я еще не умел производить вычисления, которые эти формулы предполагали.

В один из прекрасных летних дней мы с мамой зашли в какой-то магазин, где я впервые увидел своими глазами программируемый микрокалькулятор Электроника МК-61. Я просто загорелся и просил маму купить мне его. Калькулятор стоил как вся ее зарплата, и мы не могли себе его позволить, но она спросила: «Зачем он тебе?». Я ответил: «В него можно ввести формулу, в эту формулу ввести числа — и все само сосчитается! Мне этого очень не хватает, чтобы разобраться в дедушкиных книгах». Она удивилась и сказала: «Мы не можем купить его сейчас, но давай поговорим с папой, может он что-нибудь придумает?». В тот вечер я ждал папу с работы с особенным нетерпением…

Когда пришел отец, мама рассказала ему об этом событии, а я показывал на страницах книг, что я хочу сделать и что именно мне нужно посчитать. Папа внимательно меня выслушал и объяснил мне, что эти вычисления я смогу сделать и сам, нужно только изучать математику. Но этим разговор не закончился, он уловил суть того, что мне было интересно, чтобы что-то «делалось само». Он рассказал, что есть такие штуки, которые называются компьютеры, которые намного полезнее, так как могут заставить «делаться» не только формулы, но и много всего другого, гораздо более интересного, например рисовать чертежи, по которым умные роботы, управляемые таким же компьютером, создадут готовую деталь. Он немного огорчил меня тем, что сообщил, что эти компьютеры сейчас очень дорогие, и их пока ни у кого дома нет, только на заводах, вроде того, где он работал, но когда я подрасту, они должны стать дешевле и возможно когда-нибудь они будут у многих, как холодильник у нас на кухне. -«Ты возможно не поверишь, но у моего дедушки холодильника никогда не было, а у нас он есть. И я постараюсь, чтобы компьютер у тебя был у одного из первых. Но пока его нет, это не значит, что нужно забыть о нем. Для начала мы с тобой просто разберемся, что это, что с ним можно делать и каждую неделю будем узнавать что-то новое. Для этого у тебя есть все необходимое». Так для меня открылся новый фантастический мир, мой «Затерянный остров», моя «Нарния», и я твердо решил стать программистом. Я еще не знал, как круто изменится моя жизнь всего лишь чуть более чем через полгода…


Хогвардс

В какой-то момент отец перестал появляться дома. Мне ничего не говорили о том, где он и что с ним, но я терпеливо ждал его возвращения. Моим ожиданиям не суждено было сбыться: лишь годы спустя я узнал, что папа на самом деле не ухал по работе, а попал в автокатастрофу. Помимо этого странного и неожиданного события, в стране, в которой я жил, произошел переворот, а мою бабушку разбил паралич. У нее не было других близких родственников, чтобы ухаживать за ней, кроме моей прабабушки, которая в силу своего возраста просто не могла это делать физически. Мама все бросила и мы с ней поехали в село. Насчет квартиры мы не волновались, за ней было кому присмотреть. Мы не подозревали, что на самом деле будут означать »90-е», как и того, что кто-то пойдет на то, чтобы вышвырнуть на улицу женщину с ребенком, и что скоро мы лишимся этой квартиры и окажемся бессильны что-нибудь изменить. Рубикон был пройден, пути назад — отрезаны. Однако все мы остались живы и это не может не радовать. С этого момента я понял, что если хочу что-то изменить, то могу надеяться только на себя.

Тем не менее судьба, как будто компенсируя все произошедшее, преподнесла щедрый дар: в нашем селе появилась новая Школа, которая была достроена к тому моменту, когда я пошел во второй класс. Именно так: Школа, с заглавной буквы, так как это была самая новая и передовая школа во всем районе, включавшая в себя огромный спортзал, большую мастерскую с самыми разнообразными станками для дерево- и металлообработки и, о чудо!, с кабинетом информатики, в котором стоял десяток компьютеров Электроника МС 1502. Целых 128 КБ ОЗУ! 16-битный процессор! И некоторая доля совместимости с машинами IBM на процессоре i8088! Я буквально истекал слюной.

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

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

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

Мои преподаватели тоже были потрясающими. Они всегда уделяли нам внимание. Но больше всего времени с нами проводил наш учитель физкультуры. Помимо школьной программы, он организовал баскетбольную секцию, установил в холлах столы для настольного тенниса и учил нас игре в шахматы. Я всегда переживал из-за того, что был маленьким и слабым ребенком по сравнению со своими сверстниками. Он помог мне справиться с этой проблемой. Я думал, что без тренажеров и инвентаря ничего невозможно добиться, но он показал мне, какие упражнения будут мне полезны, что я могу делать, используя в качестве нагрузки то, что было доступно мне, и как правильно питаться, чтобы результат был оптимальным. «Занимайся каждый день, и у тебя все получится.» Теперь у меня было все необходимое. Начался период ежедневных тренировок. На следующий год оказалось, что я значительно подрос, и переместился с последних мест в строю в начало. Результаты были потрясающими, но я не остановился на этом и сохранял положительную динамику в следующие годы.

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

В общем, жизнь налаживалась, все шло своим чередом. К сожалению у нас была только девятилетка, поэтому вставал вопрос: куда дальше?… Какую школу выбрать, чтобы закончить 11 классов и поступить в ВУЗ? И снова меня ждал облом: здоровье моих близких оставляло желать лучшего, мама теряла зрение и уже не могла работать, бабушке становилось хуже с каждым днем. Она ушла в апреле, когда я учился в девятом классе. Мы с мамой вновь остались одни без средств к существованию.

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


Путешествие туда и обратно

Следующие несколько лет я работал и учился, регулярно отправлял часть заработка маме, потому что ее пенсия по инвалидности оставляла желать лучшего, достиг определенных успехов в работе, сменил одно место работы на другое, но с профессиональным программированием меня все еще ничего не связывало. Денег было мало, но компьютер очень хотелось и для начала я приобрел Spectrum. Я быстро уперся в ограничения бейсика и перешел на ассемблер. Если не ошибаюсь, первой моей законченной программой был музыкальный синтезатор.

На тот момент уже существовали сотовые телефоны с монохромным дисплеем и первым моим телефоном стал Nokia 3310. Потрясающий аппарат, надежный и неубиваемый. Но хотелось большего, и следующим аппаратом стал Siemens с Java ME, поддержкой GPRS и цветным дисплеем. Я также присоединился к программе раннего тестирования GPRS одного из сотовых операторов. Этого оказалось достаточно для разработки моего первого сайта. Двенадцатикнопочная клавиатура телефона не особо заточена под программирование. Благодаря этому факту шорткаты и сниппеты сразу стали моими лучшими друзьями. У меня было все необходимое.

А еще я влюбился. Мы долго встречались, все было непросто, но в итоге мы остались вместе и узнали, что у нас должен был появиться ребенок. Моей зарплаты, выдаваемой к тому же порой с задержкой в пару месяцев, не хватило бы даже на подгузники. Но я любил свою жену и нашего будущего первенца. И я пошел ва-банк. Закинул удочки всюду, куда только мог дотянуться. Нашел крупную промышленную компанию с самой высокой оплатой в среднем по рынку и решил попробовать туда устроиться. На одно место — более 50 кандидатов, каждый из которых — отличный специалист в чем-то. На мое счастье, я уже собрал на тот момент в себе уникальный комплекс скилов, который мог закрыть сразу пару позиций. А еще на собеседовании я нашел ошибку в одном из чертежей, которые мне предложили на собеседовании. Меня высоко оценили и взяли на работу со ставкой, даже чуть большей, чем предлагали изначально для позиции. Скоро у нас появился ребенок, времени стало еще меньше. Зато мы купили все, что было нужно. Дополнительный заработок позволил наскрести на свой первый PC. Я вложил в него достаточно, чтобы его конфигурация оставалась актульной достаточно продолжительное время, но в то же время ни одной лишней копейки, благодаря оптимальному подбору комплектующих и экономии на сборке. Очное образование мне не светило, заочное — нужное образование не предлагало, и казалось, что мое поступление в ВУЗ откладывается на неопределенный срок. Однако наличие компьютера позволяло мне подкреплять теоретические знания практикой и в перспективе позволяло найти работу без профильного образования. У меня было все необходимое. В эти годы я изучил в том числе серверный JavaScript, жаль только, что Node.js еще не придумали, он появится позже, в 2009-м. Но за потенциальные теоретические знания не платят, никто меня не знал и не хотел со мной работать, и я начал нарабатывать портфолио. Большинство моих работ и проектов в этот период либо не приносили дохода вообще, либо приносили копейки. Редкие случаи действительно прибыльных работ компенсировались моими провалами и банальным кидаловом. Но для меня важнее было получить практический опыт.

Нужно было обеспечивать семью, я сосредоточился на своих доходах, и за год увеличил среднемесячный доход в 2 раза. Я переживал, что мне не удасться поступить в ВУЗ ни на одну из интересующих меня специальностей, и что оплата за высшее образование окажется слишком велика для нас. Единственное доступное направление, которое для меня было актуально — это экономика, с ней у меня всегда были проблемы. Жена поддержала меня, она сказала, чтобы я не волновался из-за денег и поступал. Следующие пять с половиной лет я потратил на диплом экономиста-менеджера, параллельно работая, изучая программирование (PHP, Java, C++, JavaScript). В универе я пересел на Linux. Закончив обучение, я взял таймаут на то, чтобы прокачать практические скиллы работы в командной строке и разработки под популярные тогда CMS и фреймворки. Я перешел в отдел контроля качества, зарплата была чуть меньше, но времени для обучения стало чуть больше. В основном это был LAMP. Через год я уже более-менее мог решать прикладные задачи. И тогда я решился.

Первая моя работа непосредственно в IT оплачивалась примерно в 6 раз дешевле, чем я получал обычно. Это было неважно в пределах полугодового периода. Кое-что у нас еще оставалось, я вновь заручился поддержкой моей второй половинки и не переживал. Спустя полгода заход в отрасль был обеспечен. Я снова закинул удочки везде, где хоть что-то меня интересовало. Но «Цукерберг не звонил», а я устроился в другой город внезапно грузчиком. Это не шутка, я реально разгружал вагоны и фуры. Все, кто меня знал, да и кто не особо знал, были в шоке. На самом деле все просто: оплата такая же, как и в предыдущей «конторе», зато более удобный график в городе, который мне был нужен для развития карьеры. Строгий и удобный график на этой работе позволял мне проходить до 3-х собеседований в день. В какой-то момент я набрал достаточно предложений, которые мог рассматривать, как «нейтральные» — возвращение уровня дохода до моих «заводских» параметров. Поэтому я ушел с работы и следующие 2 недели посвятил более активному поиску работы. «Более активному» означает собеседования нон-стоп с 9 до 19. А после — дорога домой и выполнение тестовых заданий. Подходила к концу вторая неделя из запланированных, когда мне позвонили. Бинго! Мне предложили оффер от одной международной компании, я хотел к ним, и их предложение было лучшим. Все сошлось.


Вместо заключения

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

Возможно, я просто очень настойчивый. Я считаю, что за мечтой нужно следовать несмотря ни на что. Иначе это не мечта. Вы не готовы следовать за мечтой? Возможно, стоит сменить мечту? Подумайте. У меня много знакомых, которые сменили IT на что-то другое (например, на деревообработку). Если на последний вопрос ваш ответ: «Нет», то возможно просто следует взять перерыв, чтобы с новыми силами двигаться дальше. Не все, чего мы хотим, дается сразу. Главное — не останавливаться на пути к своей мечте. У вас для этого есть все необходимое — это вы.

© Habrahabr.ru