А сложно ли работать программистом? / Инфопульс Украина corporate blog / Habr
Этот вопрос мне часто задают вокруг. Задают родственники, друзья, дети друзей и вообще незнакомые люди. У всех своих цели — кто-то хочет сменить род деятельности, кто-то только выбирает куда пойти учиться, а кто-то желает в первую очередь убедить себя в том, что «вот еще и этим бездельникам ни за что деньги платят». Что же ответить на этот вопрос? Честно говоря, первым делом, конечно, хочется выпятить грудь колесом и двинуть речь о том, что, дескать, окромя нечеловеческого ума и 10 лет глубокой математической подготовки нужно еще иметь природный талант и пахать круглосуточно… Но где-то на третьей минуте этого увлекательного текста включаются мозги и здоровый скептицизм, требующий на время замолчать и немного подумать.
А и правда — сложно ли?
Кодеры vs программисты
Как-то так исторически сложилось, что в самом IT-мире принято отделять «кодеров» от «программистов». Дескать, первые тупо клепают что-то по шаблонам и указаниям сверху, а вот вторые — ТВОРЯТ. Мне это разделение никогда не нравилось. Любому порой может попасться глупая и нудная работа. Писать простой код можно не потому, что ты глуп или ленив, а потому, например, что ты молод и только учишься или хочешь сменить вид деятельности. Более того, сама по себе надпись «программист» на бейджике даже вместе с тем фактом, что ты вроде бы должен как раз «творить», а не «кодить», тоже ничего не значит. Бывает, что «программисты» такого напишут, что кажется, будто они мозги вообще не включали по ходу работы, а бывает и наоборот — рядовой трудяга что-то эдакое заавтоматизирует — и вот уже все смотрят на результат с восторгом. Вывод: формальное название должности не определяет степень сложности работы.
Узкая специализация vs широкая
Есть программисты узкого профиля, а есть программисты широкого профиля. Первые знают, каким именно должен быть параметр Х в методе Y класса Z, для того, чтобы код работал оптимально при выполнении задачи W. Вторые могут не догадываться не только о параметре X, методе Y и классе Z, но даже о существовании задачи W. Первые потратили очень много времени и сил на совершенствовании в своей области, им было тяжело в учении, но зато теперь легко в бою. Вторые тоже учились прилежно и усердно, но больше — общим принципам, универсальным языкам и распространённым задачам. Им было легче в учёбе, но каждый новый день бросает им новые вызовы. Некоторые из них можно перекинуть на узкоспециализированных коллег, но большинство придётся решать самим. Что лучше — поработать в молодости «на будущее» и почивать на лаврах своих знаний, или каждый день вступать в новый бой, «размазывая» сложность во времени? Не знаю. В молодости легче учиться, но предметная область может перестать быть актуальной. С другой стороны, каждый день тратить кучу мозговых усилий на то, что спец в этой сфере сделал бы за минуту — слегка унизительно. Каждый решает сам.
Хочу думать или не хочу
На каждом шагу есть соблазн увильнуть. Слабый духом программист будет это делать. Многие люди не хотят лишний раз думать и (вот парадокс!) будут постоянно думать, как этого достичь. Есть выбор: усложнять свою жизнь, или не делать этого. Каждый решает сам.
Ограниченность возможностей ума
А должно ли вообще быть сложно хорошему программисту?
Много лет назад «быть хорошим программистом» означало уметь писать эффективные алгоритмы, выжать лишний процессорный такт, сэкономить десяток байтов памяти. Сегодня это не так. Все базовые алгоритмы имеют прекрасные реализации на всех возможных языках, масса разнообразных полезных вещей собрана в хороших, проверенных библиотеках. На сегодняшний день основное свойство «хорошего программиста» — уметь построить из готовых кубиков программу, минимизировав её сложность (тем самым и надежность повысится, и скорость работы, и стоимость сопровождения уменьшится). Именно уменьшение сложности сегодня является самым важным. Если вдуматься, всё, что было придумано в программной индустрии за последние пару десятилетий, служит именно этой цели. Для чего нужно ООП? Чтобы стало проще и понятней. Зачем нужен UML? Уменьшить хаос. Интерфейсы? Управляемые языки? MVC? MVVM? Всё на тот же алтарь. Получается, что умело применяя современные инструменты, программист должен писать только простой, компактный и понятный код? Получается, что хорошему программисту не должно быть сложно, ведь если ему сложно — значит он просто еще не освоил инструменты, которые сделают его работу простой и понятной? Так? А вот и нет. Применение всего вышеуказанного инструментария сделало возможным построить такие системы, которые невозможно было создать раньше. Windows 8 и iOS 6 были созданы в 2012 году не потому, что 20 лет назад не могли нарисовать их дизайн или не было подходящего железа. Всё дело в том, что те способы создания программ, те методологии управления программистами и те подходы к написанию кода просто не могли дать на выходе систему столь высокой сложности, как нынешние ОС. Люди работали на пределе сил, но в итоге сделали намного более простые системы. Сегодняшние программисты тоже работают на пределе сил. И абсолютно точно, что через 20 лет люди будут посмеиваться и над Win8 и над iOS 6, указывая на то, какими примитивными и несовершенными они были. Будем верить, что они тоже поймут, что современные программисты старались, как могли.
Как я не стал программистом в 35 лет / Habr
И в каждой статье звучит знакомая песня: главное, что советуют авторы — «стараться», «не сдаваться», «не бояться» и «идти к своей мечте»; а в комментариях очень часто можно встретить мнение, что ежели ты с самого детства любил компьютеры, то работа с ними в итоге неудивительна. Я хотел бы на примере своей биографии подвести читателей к мысли о том, что начальные условия могут быть важнее, чем приложенные усилия. Вера в справедливый мир способствует психологическому комфорту, но не очень-то корректно отражает реальность.
Не положено: начало
Энциклопедия профессора Фортрана для старшего школьного возраста
Моя история начинается в раннем детстве с компьютера «Корвет» из кабинета информатики. Но это было случайным лучом света в тёмном царстве постсоветского образования — в те времена официальное изучение информатики должно было начинаться в 11 классе. Я просто записался на случайно стартовавший для младших классов факультатив по компьютерному обучению. Один раз в неделю для нас открывали тяжёлую железную дверь тёмного кабинета с решётками на окнах и показывали, как вывести на экран «Hello» с помощью корвет-бейсика. Это было шикарно, но продлилось недолго.
Видимо это был какой-то образовательный эксперимент, завершившийся буквально через полгода. Я мало что успел узнать, успел только заинтересоваться. Но когда факультатив закончился, мне популярно объяснили: компьютеры на самом деле — не для детей, раньше одиннадцатого класса люди до изучения информатики не дорастают.
Здесь стоит заметить, что вокруг царили лихие девяностые, когда разные технические кружки при дворцах пионеров уже в массе своей закрылись, а домашние компьютеры ещё не стали обыденностью. Так что нельзя было получить доступ к технике — или к компьютерам — просто потому что ты хочешь их изучать. В выигрыше оказались дети либо тех людей, кто встроился в новую рыночную экономику, либо тех, кто имел доступ к компьютерам в рабочем порядке — инженеры, учителя информатики, «технические специалисты» при различных ведомствах.
Например, много лет спустя я узнал, что примерно в том же году моему (будущему) однокласснику родители подарили ZX Spectrum. Для игр, конечно.
Скорее всего, я так и остался бы за бортом нового цифрового мира. Я учился и рос в полной уверенности, что теперь доберусь до компьютера не раньше, чем в одиннадцатом классе. Забавно, что в итоге всё так и произошло. Но примерно за пару лет до этого случилось самое настоящее чудо — я получил компьютер в рамках местной благотворительной акции.
Казалось бы, вот тут-то мне бы и наверстать упущенное — но жизнь снова внесла свои коррективы.
Существует хорошо известная присказка, что если нищему дать миллион долларов, он не будет знать, что с ним делать. Конечно, если это умный нищий, он потратит часть миллиона на обучение, в том числе обучится обращаться с деньгами. Но всё равно это не сравнить с тем, что может сделать человек, среди денег выросший. Такая беда возникает всякий раз, когда человек вываливается за границы своего социального слоя.
Поскольку в обычных обстоятельствах я никогда не смог бы иметь компьютер, то денег на какие-нибудь курсы и сопутствующие товары у меня тоже не было. По той же причине я не имел связей среди людей, способных что-то подсказать мне, просто не входил в этот круг. Компьютер был буквально кусочком другого мира. Не обыденная бытовая техника, как сейчас, а что-то вроде эльфийского артефакта. Поэтому я не мог экспериментировать и изучать что-то на собственном опыте — «сломаешь дорогую вещь». Поэтому я не мог говорить сверстникам о том, что у меня дома есть компьютер — лихие девяностые вокруг, вы помните? Соответственно, резко урезались возможности для обмена информацией — я ни у кого не мог спросить совета, не мог задавать вопросы и делиться опытом. Интернет? Что? Какой интернет? Может фидо? Да у нас и телефона-то не было.
Можно было идти в библиотеку, бесплатно искать книжки или справочники, и тут возникала вторая проблема. Это был слишком прогрессивный для тех условий компьютер. На нём был установлен Windows 95.
Я взял главную (единственную) книгу про компьютеры, которая была в библиотеке — знаменитый учебник Гейна / Житомирского «Основы информатики и вычислительной техники» с красной обложкой. Можете сейчас найти её в интернете и ощутить контраст между её содержимым и содержимым полноценного компьютера с Windows 95 на борту. Ситуация усугублялась ещё и тем, что сложно было добыть даже пиратский софт — до расцвета магазинов DVD с броскими названиями «Весь офисный софт — 2000» оставалась ещё пара лет. А впрочем, когда они появились, у меня всё равно не было денег на диски.
Кстати, где-то здесь настало время «официальной» информатики в 11 классе — нам выдали уже упомянутый мной учебник 91 года издания, а реальные задачи заключались в том, чтобы рисовать несложные деревья алгоритмов (карандашом на бумаге) и использовать текстовый редактор «Лексикон».
Формошлёпство
Настоящие программисты и я
В итоге моё компьютерное развитие эту пару лет уныло пробуксовывало. Я читал справку Windows, правдами и неправдами добывал для компьютера разные программы на дискетках и учился быть «продвинутым пользователем», редактируя файл autoexec.bat. «Лексикон» принёс из школы, а как же. В общем, к тому времени, когда я смог наконец вернуться в детство и начать программировать в qBasic, вокруг уже безраздельно царили визуальные интерфейсы.
Этот контраст во многом уничтожил мою мотивацию к глубокому изучению обычного текстового программирования. Причина была в гнетущем несоответствии между графикой Windows 95, с которой я начал настоящее погружение в компьютерный мир, и унылым текстовым экраном известных мне тогда языков. Предыдущее поколение программистов радовалось просто тому, что при написании POINT(10,15) на экране возникала точка. Для них программированием было «нарисовать на экране то, чего на нём не было». Для меня экран был уже заполнен формами и кнопками. Для меня программированием было «заставить кнопку делать что-то после нажатия» — а делать саму кнопку было просто скучно.
В качестве лирического отступления хочу отметить, что сейчас развитие языков программирования по спирали вернулось к такой же ситуации. Теперь все «настоящие программисты» опять верстают интерфейсы в блокноте, и каждый программист теперь как бы снова обязан быть дизайнером. Снова нужно исключительно с помощью кода располагать на экране кнопки, окошки ввода и прочие элементы управления. В результате классическое правило 80 / 20 выглядит в данном случае так: «80% времени мы тратим на создание интерфейса методом ручного набора кода и 20% времени задаём поведение элементам интерфейса». Почему это было во времена DOS и Паскаля — я понимаю; не было альтернатив. Почему это существует сейчас, когда все уже видели и трогали VB, Delphi и C# — я не знаю; подозреваю, что проблема в платности или бесплатности среды разработки. Удобное всегда дорого, а бесплатные версии упомянутых сред появились не так уж и давно.
Это же было одной из причин того, почему мимо меня прошло интернет-программирование. Хотя там, как выяснилось значительно позже, было бы легче всего создать портфолио и стать программистом. Я попытался пощупать и PHP, и JS, но не хотел «писать код в блокноте». Ну а другая причина в том, что Интернет появился у меня то ли в 2005, то ли в 2006 году — до того он находился где-то на периферии картины мира. Вместе с сотовыми телефонами — «то, чем пользуются богатые люди».
Так что я забросил всё это dos-программирование и с головой погрузился в учебную базу данных «Борей» от Access, которая подарила мне формы, кнопки, макросы и вершину прикладного программирования — VBA. Наверное где-то в тот момент я окончательно решил, что в будущем я хочу работать программистом. Я добыл диск с Visual Studio, купил бумажную книгу(!) по VB и начал клепать калькуляторы и крестики-нолики, радуясь тому, что весь дизайн создаётся на форме за несколько минут, а не прописывается руками. Поскольку компьютер переставал быть редкостью, я наконец-то смог выйти в люди и обсуждать программирование со своими единомышленниками.
В этих обсуждениях мне открылось, что VB — это прошлый век, умирающий язык, который придуман для секретарш, а все реальные пацаны пишут на C++ или на Delphi. Поскольку я ещё помнил паскаль — я выбрал Дельфи. Возможно, это была моя очередная ошибка в длинной череде препятствий на пути становления программистом. Но я шёл по пути наименьшего сопротивления, потому что хотел скорее увидеть результаты своего труда. И я их видел! Я купил книжку ещё и по Delphi, я сцепил его с Excel и Access, которые уже знал, и в итоге сделал в первом приближении то, что сейчас называлось бы «BI-система». Печально то, что теперь я весь паскаль благополучно забыл, потому что уже лет десять к нему не притрагивался.
И, разумеется, я дважды пытался поступить в институт на программиста. В нашем маленьком городе для этого было не слишком много возможностей. В первый раз я сдуру пошёл поступать на специальность «Прикладная математика», откуда людей выпускали именно с такой специальностью — программист, однако требовали от них сурового знания математики далеко за пределами школьного курса. Так что на экзамене я не получил проходного балла. Пришлось пересидеть в колледже, получая среднее образование. Второй раз я немного снизил для себя требования и отправился на инженерную специальность — работа инженером не слишком меня привлекала, но всё-таки оттуда было ближе к работе с компьютерами. Только было уже поздно — люди распробовали выгоду технических специальностей и рвались туда толпами. На бюджетные места прошли только медалисты.
Поэтому теперь у меня гуманитарный диплом. Он красный, но не технический. И именно здесь грустная история взросления начинает пересекаться с грустной историей поиска работы.
Скрипач не нужен
...но не обязательно выживу...
Существует очень широко распространённый миф о том, что «у программиста диплом не спрашивают». У этого мифа есть несколько причин, я попробую перечислить основные.
Во-первых, в ранних девяностых — и немного в девяностых поздних — знание компьютерных технологий в принципе было редкостью. Если человек знал, где включается компьютер и мог запустить программу — он делал то, что требовалось бизнесу. А общий бардак на рынке труда заставлял работодателя быстро находить любого человека, который способен делать нужную работу — неважно, чему он там когда-то учился, важно что он сейчас умеет делать. Поэтому значительное число самоучек спокойно показывали на собеседовании навыки и получали работу.
Во-вторых, в те же самые года очень бурно развивался бизнес, но всё ещё не было такого современного понятия, как HR. Кадровики оставались советскими кадровиками, оформляющими трудовые книжки и трудовые договора, а собеседования проводили специалисты или руководители лично. Поскольку большинство из них было заинтересовано в результате, то формальные критерии вроде образования действительно рассматривались в последнюю очередь.
Это привело к чудовищному перекосу в массовом сознании. Люди, получившие работу в тех условиях, могут совершенно искренне рассказывать, что программисту диплом не нужен, и приводить в пример себя. Вы узнаёте этот типаж, конечно же. Если человек говорит вам «достаточно показать, что умеешь, и тебя возьмут» — это как раз такой программист, из тех времён, его так и взяли, а он поверил в незыблемость мира. Примерно таким же образом советские старики говорят что-то вроде «да ты же на компьютере работаешь и на английском можешь читать, я бы с такими навыками ух!». Они уже не понимают, что с такими навыками «ух» было только в советские времена, а сейчас такое каждый второй умеет.
Потом ровно то же самое произошло в ранних нулевых, когда нефть начала расти, экономика развиваться, и толпы новоявленных бизнесменов ринулись на рынок труда в поисках любого, кто умеет хотя бы включать компьютер.
Но заодно поток нефтяных денег породил непроизводительные кадры — HR-департаменты. Там оказались те же старые советские кадровики, но на них совершенно неожиданно возложили задачу по определению качества любого работника. Они, конечно, не могли принимать решения такого уровня. Поэтому выработали собственные критерии оценки, довольно далёкие от реальности, основанные на переводных книгах с благословенного запада и формальных критериях вроде образования. Так свершился великий поворот: от реальных навыков — к формальным критериям.
Миф остался жить, только чуть-чуть видоизменился.
Экономика всё ещё росла, людей хватали отовсюду, переманивали из других компаний, но кадровики уже наложили свои цепкие лапки на процесс отбора. И самым важным стало не «покажи, что умеешь» — всё равно кадровик не поймёт, что ему показывают — а «опыт работы». Так люди, которых когда-то взяли куда-то без образования программиста за умение нажимать кнопки — переманивались в другую компанию уже просто потому, что они ранее работали на должности «инженер-программист». И снова никто не спрашивал диплома, потому что было не до того — есть «опыт»? Ну скорее садись и работай!
Наконец, последняя, третья причина — бурное развитие интернета и частных проектов. Люди создавали пет-проекты, эти проекты можно было показать кому угодно и тем самым доказать свои навыки. Отправляешь письмо, прикладываешь ссылку на свой сайт — и вот ты уже как бы доказал свои умения.
Что сейчас?
Нефтяные цены, как мы знаем, рухнули, но миф всё ещё живёт. Ведь на должностях «инженеров-программистов» сидит немало людей, которые на эти должности действительно попали без профильного образования. Однако сейчас уже ни одна из этих причин не работает в полной мере, и сейчас мало кто из них смог бы повторить этот трюк с трудоустройством.
- Знание компьютерных технологий стало повсеместным. Работа с компьютером просто уже не указывается в резюме, как не указывается там умение читать и писать (это, кстати, не повредило бы — я начал часто встречать грамматические ошибки даже в официальных СМИ, а уж в статьях на хабре они появляются с завидной регулярностью).
- Появились HR-департаменты и HR-специалисты, которые не несут никакой ответственности за свои решения и могут использовать любые критерии выбора. Естественно, предпочтение отдаётся формальным — смотрят на возраст, образование, пол и время на предыдущем месте работы. Навыки и умения идут по остаточному принципу.
- Нехватки программистов давно уже нет. Есть нехватка хороших программистов, но это верно вообще для любой специальности. А обычным программистом работает каждый школьник в интернете, на фрилансерских сайтах люди буквально сражаются за право бесплатно сделать что-нибудь для портфолио.
- Пет-проекты тоже стали обыденностью. Интернет завален персональными сайтами и клонами тетриса, да и этот проект уже становится едва ли не обязательным, то есть пройдя сито кадрового отбора ты попадаешь в сито отбора специалистов, а они говорят «покажите-ка ваш гитхаб».
Люди, у которых образование есть — или люди, у которых есть опыт, заменяющий образование в глазах HR-департаментов — видят только вторую часть. Они говорят обычно примерно так: «для работы диплом программисту не нужен, а вот проекты на гитхабе были бы полезны».
Но поскольку HR-департаменты никуда не делись, то совсем уж правдиво это формулируется так: «для работы программисту нужен диплом (чтобы пройти HR), но ещё и проекты на гитхабе (чтобы пройти техническое собеседование)». И я, с моим гуманитарным образованием, в полной мере это ощущаю — потому что о гитхабе я знаю только из жалоб программистов с техническим образованием, меня же строгое кадровое сито отсеивает на первом этапе.
Люди не видят воздух, рыбы не видят воду, а люди с техническим образованием или опытом работы в «ООО КОДТЕХНОСОФТ» не видят, что у них не спрашивают диплом, потому что он уже и так подразумевается. Особенно смешно звучат оправдания людей типа «я сколько лет работаю, ни разу диплом не показывал». Спрашиваешь — а в резюме-то ты его указывал? Ну да, конечно указывал. Так ты мне предлагаешь указать в резюме ненастоящее образование что ли, раз всё равно не попросят подтверждения? Молчат, ничего не отвечают.
Кстати говоря, на той специальности, где все бюджетные места были заняты медалистами, бюджетной была только половина группы. А другой половиной были студенты платного обучения — ну вы знаете, покупка корочки в рассрочку за деньги родителей. Мой друг поступил туда, получил диплом. В результате стал полноправным «инженером-программистом» и никаких проблем с работой программистом с тех пор вообще не испытывал. Потому что в дипломе не пишут, платно ты учился или бесплатно. А вот специальность, «техническую» — пишут.
Из зоны комфорта
Это я уверенно поднимаюсь по карьерной лестнице
Когда я приехал в Москву и начал искать работу, я всего этого не знал. Я ещё верил в миф про то, будто программисту достаточно показать результат труда. Я реально возил с собой на флешке образцы своих программ — забегая вперёд скажу, что никто ни единого раза на них не взглянул. Впрочем, приглашений вообще было крайне мало.
Тогда я ещё помнил Delphi и пытался попасть в какую-нибудь техническую компанию хотя бы на стажерскую должность. Рассылал по десятку писем в день, объяснял, что я с детства интересуюсь компьютерами и хочу учиться дальше. Мне несколько раз вполне честно отвечали, что у меня должна быть техническая специальность — HR-менеджеры именно для того и обороняют рубежи крупных компаний, чтобы отсеивать всяких там гуманитарных недобитков. Но по большей части просто приходили стандартизированные отказы. В конечном счёте я не смог больше продолжать поиски и вышел на обыкновенную офисную работу, где нужно было просто использовать Excel.
Через пару лет к Excel добавились Access и SQL, потому что я вспомнил молодость и начал активно писать VBA-скрипты. Но это всё равно не было «настоящим программированием». Я предпринял ещё одну попытку, скачав современный Visual Studio и погрузившись в изучение C#. Я изучил его в первом приближении, написал небольшую программку и попытался ещё раз попасть куда-нибудь — не пренебрегая ни полноценными вакансиями, ни предложениями о стажировке.
На этот раз на сотню своих писем я не получил вообще ни одного ответа. Ни одного. Потому что, как я теперь понимаю, мой возраст приближался к тридцати — и вместе с гуманитарной специальностью в резюме это становилось чёрной меткой для любых HR-отделов. Это сильно подкосило и мою веру в себя, и мою веру в мифы программистов о рынке труда. Я полностью забросил «настоящее программирование» и сосредоточился на обычной офисной работе. Время от времени я ещё откликался на разные вакансии, но в ответ по-прежнему получал молчание.
Где-то на этом этапе я начал понимать, насколько ценным является для человека то, что он не замечает, или то, что он считает по умолчанию имеющимся у всех. Люди, к которым обращаешься за советом или просто жалуешься на жизнь, в такие тонкости не вникают. Они начитались популярных книжек по психологии и рассказывают тебе о том, что нужно выходить из зоны комфорта. Хотя давно уже существует известная шутка о том, что в зону комфорта сначала нужно войти. С возрастом цена этого входа или выхода растёт — например сейчас я уже просто не могу позволить себе уволиться и пойти работать на стажёрскую должность. Можно только осторожно менять деятельность, параллельно оставаясь на текущей работе, пока не сравняются доходы.
Встречаются советчики разумные, и они дают рекомендации, которые дал бы и я сам. Это самостоятельное обучение и удалённая работа или создание собственного проекта. Но здесь есть свои подводные камни.
Дело в том, что удалённая работа — это привилегия исключительно имеющих «опыт работы». На неё попасть новичку, которому нужна помощь и обучение, совершенно нереально. С тобой и так-то никто возиться не хочет, а тут ещё и удалённо нужно.
Самостоятельное обучение жутко неэффективно. То, чему тебя научат, например, за полгода, ты будешь самостоятельно разбирать года два. Соотношение примерно такое. Всякие мелочи, типовые приёмы и известные подводные камни ты вынужден будешь находить самостоятельно, постоянно изобретать велосипед. Конечно, это в какой-то мере может сделать тебя более знающим, ведь ты сам всё это нашёл и преодолел. Но это заберёт у тебя в четыре раза больше времени, а реального опыта на реальных производственных проектах у тебя по-прежнему не будет.
При этом я хорошо знаю, что реальный, полезный опыт возникает только при решении реальных производственных задач. В этом смысле действия вроде «написать крестики-нолики» помогут тебе на начальном этапе просто разобраться в языке. Но написав даже крестики-нолики, морской бой и змейку ты всё равно не сможешь делать то, что требуется бизнесу на практике.
Тут самые нетерпеливые снова захотят дать совет — бери, мол, реальное ТЗ с каких-нибудь фриланс-сайтов и пиши по нему, так и научишься, и самостоятельно, и даже портфолио будет.
Что ж, рассмотрим наконец метод «пет-проект». Нужно написать полезную людям программу, после чего с этой программой идти на работу куда-то, где делают схожие программы. В теории звучит прекрасно, на самом деле это ловушка. Вместо того, чтобы изначально работать над реальным проектом — ты тратишь время на заведомо бессмысленные задачи, чтобы потом выполнять точно такие же задачи, но уже осмысленные.
Стой! — крикнут мне читатели. — Подожди! Это же тренировка! Она везде и всегда так выглядит! И я бы согласился, если бы эта тренировка давала бы шанс на результат. Но нет. Мы возвращаемся к тому, что у меня уже есть опыт подобных попыток, подобных тренировок.
Есть ли в мире хоть одна компания, которая говорит — вот наша компания делает мессенджеры, давайте вот вы нам напишете мессенджер на таком-то языке, с такими-то и такими-то параметрами и мы тогда вас возьмём на работу? Нет. Это всегда вероятность, причём для человека с неподходящим возрастом и образованием — вероятность очень низкая. Жизнь мне всё это очень хорошо объяснила. Вот например, в разные периоды своей жизни я знал и использовал VB и VBA, Pascal и Delphi, SQL, R, JS, C# и даже (сам удивляюсь!) Genesis32. Реально — находил и проходил курсы, делал пресловутые проекты, мог показать на собеседовании и отвечать на вопросы по ним. И что?
Во-первых, никто просто не заинтересовался и не попросил ничего показать, я тупо не попадал на эти собеседования. Во-вторых, из всего этого я реально сейчас помню только VBA+SQL, потому что постоянно ими пользуюсь — остальное не пригодилось и забыто. Причём ситуация выглядела реально жёстко: не то чтобы мои проекты смотрели и говорили «слушай, да тут всё плохо, ты ж не умеешь код писать, вот здесь и здесь не работает». Нет, меня просто игнорировали. Гуманитарное образование, понимаете? «Это потому что я чёрный».
Итоги
Когда даже под гнётом обстоятельств ты сохраняешь внутренний покой
Несмотря на пессимистичный характер текста, я не оставляю попыток. Просто теперь пространство возможностей для меня резко сузилось, я вижу только один реалистичный путь — это упомянутый выше «пет-проект», но нацеленный не столько на «поиск работы», сколько на «попытку создать бизнес». Нужно найти нерешенную задачу, решить её и найти хотя бы несколько десятков человек, которые будут пользоваться твоим решением. Другой вопрос, что звучит это просто, а по факту трудно найти задачу, которая ещё не была решена кем-то из миллионов программистов и стремящихся — и притом достаточно проста для начинающего.
Сейчас я добрался до Питона, по примеру многих предшественников пропарсил Хабр и готовлю статью о результатах. Я надеялся опубликовать именно её в качестве моей первой хабрастатьи, но там ещё нужно дописать немного текста. А тут прямо подряд посыпались публикации на тему «Как я стал программистом, просто приложив немного усилий», почти каждый день, а то и по две в день.
Так что я не удержался и рассказал, почему я приложил много усилий, но программистом так и не стал.
Если кратко подводить итоги, то я хотел сказать следующее:
- Желания и усилия действительно могут многое, но решающее значение всё-таки имеет материальная база. У кого она есть — тем желания и усилия помогают добиться большего. У кого её нет — тем желания и усилия не помогут добиться и обычного результата. Увлечение компьютером с детства может помочь стать программистом, но это не такая уж и большая помощь. Намного больше шансов стать программистом у того, кто даже компьютером никогда не интересовался, но кого обеспеченные родители отправили учиться на модную техническую специальность. Но и самого увлечения мало, если — как в одной из недавних публикаций — тебе не покупают в детстве программируемые калькуляторы
- Пора уже наконец расстаться с мифом о том, что для работы программистом достаточно уметь программировать. В лучшем случае достаточно уметь хорошо программировать, например «писать код на доске» — таких да, оторвут с руками. Разговоры о том, что джунов берут с улицы, лишь бы знали, с какой стороны у компьютера клавиатура — это очень сильное преувеличение, в таких разговорах мы наблюдаем типичную ошибку выжившего. Вокруг каждой вакансии программиста стоит «стеклянная стена» HR-департамента — люди с техническим образованием её просто не видят, а остальные могут только бессмысленно биться об неё головой. Или — как в ещё одной из недавних публикаций — устраиваться «по знакомству».
- Чтобы «стать» программистом в зрелом возрасте нужно иметь тот же удачный набор обстоятельств, что и для юного возраста. Конечно, взрослый человек многое может делать лучше (он видит цель к которой идёт, имеет опыт обучения и развития, знает реальные потребности рынка), но многого он и лишён (он должен сам себя содержать, тратить время на быт, да и здоровье уже не то). И если — как в очередной недавней публикации — есть материальная поддержка со стороны семьи и стабильность жизни в виде собственного жилья, то сменить деятельность действительно намного проще
Заканчивая 4 год обучения на программиста, я понимаю, что до программиста мне далеко
Статья в первую очередь направлена на молодых людей, которые еще только думают выбрать профессию.Предисловие
В уже, как нам кажется, далеком 2015 я окончил школу и начал раздумывать о том, кем же я хочу стать в этой жизни. (хороший вопрос, я все еще ищу на него ответ) Жил я в маленьком городишке, обычные школы, пару ПТУ и филиал простенького университета. Окончил музыкальную школу, играл на протяжении всей школьной жизни в театре, но после 11 класса дернуло встать на техническую тропу. Стать программистом я не хотел, хотя и отучился в классе с упором на информатику, смотрел специальности связанные с проектированием или робототехникой. Подал заявления куда смог, съездил в военное училище, понял, что не мое. Остался на выбор 2 университета, была не была, поеду в Питер.
В Питере выбор огромен, но что-то убедило меня пойти учиться на пилота — это престижно, денежно, статус в обществе. При поступлении предлагалось выбрать 3 направления, не долго думая, указал пилота (2 направления: специалист и бакалавр). Но ребята в приемной комиссии убедили все же выбрать и третье, сказал, что мне в целом без разницы, если что-то есть с программированием, то можно туда (не зря же в школе отучился дистанционно основам IT-специалиста (еще и за денежку)). Август близится к концу, мониторя каждый день списки, понимаю, что на пилота явно не прохожу из-за количества баллов, потихоньку собирался в армейку, деревья пересаживать, снежок чистить, но вдруг, звонок от родителей: «Сынок, поздравляем ты поступил!» Изумленно жду продолжения. «Ты поступил на ОрАСУВД, мы не знаем что это, но на бюджет! Мы очень рады!» «Да», — думаю я, — «главное же бюджет!» Почесывая голову, думал о том, что же значит это загадочное ОрАСУВД, но как бы там ни было, я еду в Питер, и это уже огромный повод радоваться.
Начало учебы
Расшифровка звучит так: организация автоматизированных систем управления воздушным движением. Букв много, как и смысла. Для заметки, первый курс я учился не в Питере, нас отправили в Выборг, не от хороший жизни конечно же, но в целом это было даже лучше, чем можно было ожидать.
Группа наша была очень маленькой, всего 11 человек (на данный момент нас уже 5), и все, абсолютно все не понимали, что они тут делают.
Первый курс был прост, как и у любой специальности ничего необычного, начерталка, математика и еще пару гуманитарных предметов. Прошло полгода, я все также не понимаю, что значит ОрАСУВД, а уж тем более чем они занимаются. В конце первого семестра к нам приезжает из Питера преподаватель и читает нам дисциплину «Введение в профессию».
«Ну все, наконец-то я услышу ответы на мои вечные вопросы», — подумал я, но не так все просто.
Специальность эта оказалась весьма востребованной и не такой далекой от программирования. Нас даже больше удивил тот факт, что это вообще единственная специальность в России не имеющих аналогов.
Суть профессии заключается в том, чтобы понимать все процессы происходящие в небе, собирать информацию со всех видов локаторов и в цифре передавать на монитор диспетчера. Проще говоря, мы делаем то, благодаря чему диспетчер может работать (ПО для авиации). Вдохновляет, не так ли? Нам говорили, что даже уголовная ответственность предусматривается, если вдруг твой код станет причиной катастрофы.
Отстранимся от кучи мелочей и тонкостей и поговорим о теме программирования.
Крупинка за крупинкой
После того, как мы успешно прошли первый курс и приехали обучаться дальше в Питер, стало немного интереснее, и с каждым семестром все понятнее чего от нас хотят. Мы наконец-то принялись кодить, изучать азы C++. С каждым семестром наши знания наращивались, было много предметов, связанных с авиацией и радиотехникой.
К началу 4 курса я уже знал пару библиотек, научился пользоваться vector’ом и его сородичами. Немножко попрактиковал ООП, наследование, классы, в общем все то, без чего программирование на C++ вообще сложно представить. Появилось очень много предметов связанных с радиотехникой, физикой, появился Linux, который казался очень сложным, но в целом интересным.
Из нас не пытались сделать хороших программистов, из нас хотели сделать людей, понимающих все процессы, наверное, именно в этом и проблема. Мы должны были быть гибридами, что-то между программистом, эксплуатантом и руководителем одновременно (не зря наверное говорят, что двух зайцев не убить). Мы знали очень много разных вещей, но всего понемножку. С каждым годом я все больше увлекался кодить, но из-за нехватки предметов направленных на это, желание узнавать больше оставалось не исполненным. Да, возможно, я мог бы заниматься сам, дома, но в студенческие годы мало когда тебя волнуют вещи, которых не будет на сессии. Именно поэтому, будучи на пороге 5 курса, я понимаю, что все знания накопленные мною за 4 года, это маленькая горстка, с которой меня никто нигде не ждет. Нет, я не говорю, что нас плохо учили, что знания не те или не нужные. Думаю все дело в том, что осознание того, что мне нравится программирование ко мне пришло только в конце 4 курса. Только сейчас я понимаю насколько огромен выбор в направлениях кодирования, сколько всего можно сделать, если выбрать один путь из тысячи и начать изучать все, что касается этой темы. Просмотрев множество вакансий, прихожу к выводу, что и податься некуда, опыта нет, знания минимальны. Руки опускаются и кажется, что все старания в учебе сыпятся на глазах. Я же сдавал все на 5, я так много старался в написании программ, а потом оказывается, что то, чем я занимаюсь в стенах университета, настоящие программисты щелкают, как семечки на перерывах.
«ИТМО, ГУАП, Политех… Я ведь реально мог поступить туда, баллов хватило бы, а даже если не туда куда хотел бы, наверно все же лучше, чем тут!», — подумал я, кусая локоть. Но выбор сделан, время забрало свое и мне остается только брать себя в руки, и делать все, что в моих силах.
Выводы и небольшое напутствие для тех кто еще не начал свой путь
Уже этим летом мне предстоит пройти практику в весьма солидной фирме, и заняться делом напрямую связанным с моей специальностью. Очень страшно, ведь я могу не оправдать не только свои надежды, но и надежды руководителя. Однако если делать что-то в этой жизни, то делать нужно с умом и качественно. Пусть я пока и не создал ничего сверхсложного или заурядного, но я ведь только начал, до меня только-только стало доходить что нужно делать, и весь вкус программирования мне еще предстоит узнать. Возможно я начал не там, и не в той сфере и вообще делаю не то, о чем мечтал. Но я уже с чего-то начал и точно понял, что хочу связать жизнь с программированием, правда пока что так и не выбрал ту самую дорогу, по которой пойду, возможно это будет БД, или же промышленное программирование, может я стану писать мобильные приложения, а может ПО для систем установленных на самолетах. Одно я точно знаю, пора начать, и как можно скорее понять, что из всего программного изобилия я бы хотел вкусить.
Юный читатель, если ты все еще не знаешь кем хочешь стать, не волнуйся, большинство взрослых тоже этого не знают. Главное — это пробовать. Именно путем проб и ошибок можно наконец понять, чего ты хочешь. Если хочешь стать программистом, то начать всегда важнее, чем точно знать в какой области быть. Все языки похожи друг на друга, и программирование не исключение.
P.S. Знал бы, что буду плыть, взял бы плавки. Я бы очень хотел начать разбираться во всем этом раньше, но в силу незаинтересованности, рутинности обучения и не понимания, что будет дальше, упустил время. Но свято верю, что никогда не поздно.
Как я стал программистом. Путь от питерского бездомного до Senior Developer-а за 6 лет
Всем привет! Меня зовут Андрей, я работаю в отделе разработки продуктов Veeam Software.В этом году исполняется 6 лет с того дня, как я «пришел» в программирование. К слову, случилось это стихийно, и на момент написания своего первого кода, у меня за плечами не было ни профильного образования, ни малейшего опыта. Сегодня же, я создаю продукт, признанный и уважаемый во всем мире.
Сегодня я хочу рассказать свою историю.
Итак, начну с момента, когда мне исполнился 21 год, я уволился из рядов доблестной российской армии и оказался на серых и холодных улицах Санкт-Петербурга. Осень, отсутствие жилья и денег активировали все клетки головного мозга для ответа на вопрос: «Что делать?».
Я человек, не лишенный амбиций и, будучи по факту бомжом, я планировал стать программистом. Я был уверен, что у меня все получится: тонкая грань между уверенностью и самоуверенностью. План был до боли прост: найти такое место работы, где будет крыша над головой, еда и книги как источник знаний для будущей профессии, и, соответственно, время, чтобы эти книги читать.
Охранник книжного склада (я же в культурной столице) — это та самая профессия, которая могла обеспечить все эти пункты. Через череду невероятных событий, совпадений и неудач я устраиваюсь на работу в офис одной очень известной в городе розничной сети по продаже книг, где находился и склад хранения.
Я стал там жить и работать: душ, компьютер секретаря, целый склад книг и три стула для сна. Так пролетели 5-6 месяцев. Я уже хорошо освоил на тот момент Visual Basic for Application и T-SQL и начал писать различные макросы автоматизации работы с Excel для секретаря. Я познакомился с ребятами из IT отдела, они мне выделили изолированную «песочницу» на виртуальной машине, куда я поставил Visual Studio и начал изучать уже более взрослые языки: C++ и C#. Не забывал я и о художественной литературе: за это время я успел существенно расширить свой кругозор в этой области. Благодаря этому, девушки из отдела персонала предложили мне устроиться продавцом-консультантом. Я согласился и стал работать днем продавцом на пл. Восстания, а ночью — охранником офиса. В таком режиме я проработал еще полгода, у меня появилась возможность снять жилье. В то же время, управляющая магазином предложила мне стать старшим продавцом. Я уволился из охранников и стал работать ночью в магазине. Должность ночного старшего продавца предполагает очень много рутинной работы по заполнению всяких файлов, отчетов, составления графиков рабочего времени.
Вот тут я в полной мере применил все полученные знания по программированию на практике и автоматизировал все, что было возможно автоматизировать. К слову, в книжном магазине на пл. Восстания до сих пор используют мои программы.
С коллегой на работе в том самом книжном магазине (я слева).
В магазине были некоторые отделы, где я откровенно не знал ассортимент и не мог найти нужную покупателю книгу. Поисковый терминал честно говорил, что книга есть в магазине, но на каком стеллаже и полке — было неизвестно. Я взялся за решение этой проблемы. В моем распоряжении были несколько древних, уже списанных ТСД (терминал сбора данных) и компьютер, который я стал использовать как сервер. Так я начал писать свое первое клиент-серверное приложение. Уже через месяц я смог продемонстрировать работу программы на одном из отделов магазина, чем вызвал интерес у руководства. Мне предложили продолжить развивать свое приложение уже по-взрослому: составить план проекта с целями, сроками и бюджетом. Так я стал руководителем проекта «Адресное хранение». За все это время я набил миллион шишек и изобрел множество велосипедов, но это был бесценный опыт и я смог запустить свой проект в крупных магазинах сети.
Проект только-только был запущен, а я начал думать, куда мне двигаться дальше. Возникло острое ощущение, что я начинаю топтаться на месте. Я не стал тянуть и написал заявление на увольнение, еще даже не составив резюме на новую работу. Я боялся, что сейчас насижу себе уютное место и станет страшно что-то менять, поэтому отрезал себе путь к отступлению.
Начал искать новую работу. Был на многих собеседованиях, где-то не нравился я, где-то не нравилось мне, но однажды на HH.ru наткнулся на вакансию в компании Veeam: требованиям я соответствовал. Я начал читать о компании, чем занимается и т.п. И понял, что совершенно не понимаю, о чем идет речь. Фраза «резервное копирование виртуальных машин и мониторинг виртуальных сред» повергла меня в шок. Но я отлично помнил выражение: «Программист — это человек, который решает совершенно непонятным вам способом проблемы, о существовании которых вы даже не подозревали». Значит, пора стать настоящим программистом. Я решил, во что бы то ни стало, работать в Veeam. В последствии выяснилось, что компания Veeam предоставляет решения, без которых просто не мыслима работа крупных компаний, гос. учреждений, банков и т.п.
Меня пригласили на интервью. От огромного желания получить работу, я заикался и делал глупые ошибки, но в меня поверили и взяли в команду UI. Видимо, меня спасли те самые «горящие глаза», о которых было написано в требованиях к вакансии.
Первые две недели работы я сидел с широко открытыми глазами: такого огромного и непонятного количества кода я не видел никогда. Своих коллег я воспринимал магами: они говорили и делали непонятные слова и вещи.
Это я в процессе работы.
«Сейчас я тебе все объясню», — сказал мне мой Team Lead, его рассказ был очень интересным и совершенно непонятным. Постепенно, день за днем, слова моих коллег стали приобретать смысл, я уже заканчивал свой первый «визард». На первых порах весь свой код я писал, используя широко известную практику «копипаста», Ctrl+C — Ctrl+V – 1я стадия программиста. Затем — «прозрение»: начинаешь использовать везде, где нужно, а чаще, где совершенно ненужно — «Software design patterns» — это очень опасная 2я стадия программиста: наступает, так называемый «паттерн головного мозга». Если остаться на второй стадии, то твой код будет понятен только тебе и только на момент написания, а коллегами ты будешь проклят. Как раз из второй стадии выдернула меня моя команда, вот тут я понял по-настоящему, что значит командная разработка. «Так писать не нужно» — это не аргумент, поэтому через шутки и примеры мне буквально на пальцах объяснили, где правильно, а где нет использовать сложные конструкции и шаблоны. Итак, через «грабли», «велосипеды» и помощь коллег наступает 3-я стадия: «код нужно писать так, чтобы он был понятен более одного дня не только автору, но и людям, которые работают с тобой».
Но, внезапно, оказывается, что код, который ты пишешь, должен делать ровно то, что от него ожидают пользователи. Наступает время знакомства с отделом «QA», т.е. с тестировщиками. Эти ребята просто «профи»: продукт знают «от и до», по логам могут найти самые неочевидные баги и дать им полное и понятное описание, но и не пропустят смещение на пиксель кнопки. Мы любим QA так, как могут любить разработчики тестировщиков :).
А если серьезно, то за три года работы в компании я еще ни разу не видел, чтобы разработчик и тестировщик не нашли общий язык. Спорим часто, но ведь только так рождается истина. В описании компании обещали дружный коллектив, есть подозрение, что не соврали.
Так, постепенно, я стал частью большой команды. Прошло еще немного времени. Продукт становился сложнее, росла и численность команды, над ним работающей.
В ноябре прошлого года мы выпускали очередную версию программы. Для меня это стало важным моментом, во многом определившим дальнейшую мою судьбу. Все начиналось так:
— Андрюх, прикрути в трей иконку для Endpoint (наш новый продукт для ноутбуков и настольных ПК).
— А, ОК, сегодня сделаю.
Закончилось полноценным Modern UI приложением с анимацией, графиком, автоматическим обновлением, уведомлениями и многим другим, через несколько месяцев.
Пришлось, конечно, попотеть, но все получилось. Меня отметили, и вот, я уже Senior Developer. И теперь уже ко мне на собеседования приходят разработчики, и теперь я сам ищу среди них те самые «горящие глаза», которые несколько лет назад увидели во мне самом.
В общем, мораль моей истории в том, что нужно ставить себе цель и уверенно к ней идти. И, что немаловажно, нужно правильно выбирать окружение, которое будет помогать достижению твоей цели (компанию для работы, людей вокруг себя). И, конечно, будут шишки (куда без них), заново изобретенные велосипеды, но будут и прозрения, и развитие, и новые горизонты.
Наш продукт растет и завоевывает признание все большего количества пользователей (что безмерно тешит мое самолюбие). На фоне этого развивается и компания в целом. Скоро планируется открытие нового офиса Veeam в Праге. Мне предложили переехать, я подумал (да-да, я не сразу стал паковать чемоданы) и согласился. Теперь вместе с другими девелоперами команды (и матерыми программерами, и новичками) планируем переезд, освоение новой локации, познание чешского пива, ну и, самое главное, новых интересных задач!
Как эффективно работать с программистом? — Хабр Q&A
Система управления нужна, даже если сам и менеджер и программист в одном лице.Но хватит простейшей. Успешно использовали Trac (http://trac.edgewall.org/) в команде в 5 человек.
Можно заняться самостоятельной установкой и обслуживанием (не сложнее апача настроить), а можно использовать готовые Trac-хостинги.
Удобство — интеграция системы управления с системой контроля версий.
В последнее время используем bitbucket.org — вполне достаточно для нужд небольшой команды.
Приятная мелочь — возможность хостинга приватных проектов с командой до 5 человек.
Но все это — лишь инструменты, чтобы ими пользоваться надо наладить процесс управления. Определенно нужны правила, хотя бы на листке А4, как сказано выше ежедневный коммит — хороший кандидат для этих правил.
В своих удаленных проектах я использовал элементы скрама — планирование, митинги, демонстрации. Полнота реализации зависит от ваших возможностей и потребностей.
Например:
1. Собираемся в 20 февраля на планирование, я определяю дату сдачи спринта, давайте возьмем неделю в качестве тренировки, потом сможете увеличить продолжительность, по мере роста доверия к оценкам. Определяем количество сторипоинтов в спринте исходя из ваших договоренностей с исполнителем о том, какое время он будет уделять работе. Возьмите поправку для себя, аналог фокус-фактора (мое личное предпочтение — не обсуждать фф с удаленными исполнителями, потому и аналог), поправка для профессионала в слаженной команде — 0,7 — 0,8, для профи в новой предметной области — около 0,5. В процессе работы уточните. К примеру насчитываем 20 часов, с учетом фф 0.5 = 10 ч/ч. Устанавливаем дату сдачи спринта 27 февраля (заметьте, еще до того как определили, что именно делать).
2. Исполнитель оценивает задачи в часах, в реальных в отличие от скрам. Исходя из приоритетов и учитывая целостность результата по окончании вы набираете задачи на спринт, можете зафиксировать их в версии или milestone в trac.
3. Ежедневно (или с другой периодичностью, но лучше ежедневно) в установленное время собираетесь на митинг 5-15 минут, исполнитель проговариает три вещи: что сделал вчера, что делает сегодня, с какими затруднениями столкнулся. Это самое важное мероприятие из всех, стимулирует к работе, позволяет заранее вскрыть проблемы. На этом мероприятии обычно задачи передаются в тестирование, но если тестировщика нет, вероятно замените его вы, в таком случае вы принимаете выполненные задачи и на следующий день на митинге отчитываетесь об успешной их проверке или возвращаете их исполнителю.
4. 27 февраля собираемся на демонстрацию, позвольте самому исполнителю отчитаться о проделанной работе (показать реализованный функционал по пунктам), вероятно он расскажет о недоработках, идеях, проблемах, где-то вскроется неправильно реализованная логика. (В случае, когда вы сам тестировщик — пункт спорный, но некоторое мероприятие на сдаче, хоть и короткое я рекомендовал бы проводить).
Важно, что система управления (методика+интсрументы) должна помогать решать ваши задачи, если нечто мешает кому-нибудь из участников, при этом никому не помогая — устраняйте или модифицируйте это нечто.