Карьерный путь программиста: от стажера до ИТ-директора. Где найти работу

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

Программист или IT-техник – это человек, который занимается разработкой скриптов для разных видов компьютеров, начиная от простых персональных, заканчивая промышленными. Если обобщить, то программист занимается программированием различных устройств, работая в команде или поодиночке.

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

Особенности обучения

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

Главный плюс IT-техника в том, что данную профессию можно получить не только в специализированных центрах, но и освоить самостоятельно дома. Для этого в помощь жаждущим цифровых знаний будут учебные пособия, где ясно описаны программы, также подойдут обучающие сайты в интернете или книги. Но всё же, как показывает практика, лучше всего информация усваивается на примерах. Хорошо, если найдется человек (друг или коллега), который сможет наглядно все рассказать и обучить.

Работа IT-техника может иметь несколько направлений:

  1. Прикладной техник. Специалист занимается программным обеспечением, его разработкой и усовершенствованием для удобства работы в организациях. Обычно это специалисты программы 1C, техники занимаются настройками, описаниями функций и доработкой под требования конкретной фирмы.
  2. Системное направление. Работники занимаются разработкой и описанием баз данных, интерфейсов. Также они являются администраторами социальных сетей.
  3. Специалист ТП (технической поддержки). Незаменимые работники, помогают устранить неполадки и ошибки в сжатые сроки.
  4. Тестировщик. Они, в частности, занимаются доработкой и тестированием уже готовых программ.

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

Каким должен быть программист?

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

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

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

Положительные стороны и недостатки профессии

Как и любая профессия, специализация в программировании имеет свои положительные стороны и недостатки. Главный плюс профессии – востребованность, а также высокий доход. IT-техник являются очень популярной должностью, разнообразие рабочих мест дает возможность будущему работнику выбрать свое направление, а также место работы (на Родине или за рубежом).

Но все же существуют следующие минусы профессии программист:

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

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

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

Где найти работу?

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

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

Если выбор пал на компанию, то первым делом необходимо написать резюме. В нем следует указать:

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

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

Если был выбрано «свободное плавание», то тут нужно также постараться. Главным преимуществом фрилансеров является то, что в большинстве случаев работодатели не требуют документов, а также свобода в выборе работы. Самостоятельно можно искать проекты, ТЗ и выполнять в любое для себя удобное место. Но все же есть и минус – такая работа нестабильна и не даёт гарантий. Какой путь выбрать – решает каждый.

Зарплата программистов

Как уже говорилось, программист – весьма прибыльная профессия. Однако всё же многих интересует вопрос, сколько зарабатывают программисты? Заработная плата зависит от уровня специалиста, а также от того, где он работает. В больших городах специалисты работают в хороших фирмах, и для каждого находится своё место. Что касается более маленьких городов, тут зарплаты меньше, но соответствуют уровню жизни.

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

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

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

Существует два типа карьеры — вертикальная и горизонтальная.

Подробнее об этом, а также о третьем пути

  • Горизонтальной мы называем карьеру «Эксперта» — глубокого специалиста в своей отрасли.
  • Вертикальная — это карьера менеджера, руководителя с людьми в подчинении.
  • Третий путь — это стартап, собственный проект.

Про горизонтальную карьеру

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

В рамках горизонтальной карьеры цель — стать лучшим специалистом в деле, которым ты занимаешься, например, в java-разработке или в базах данных. В IT нельзя быть широким специалистом во всем, можно быть либо хорошим архитектором, который умеет проектировать системы, либо можно быть выдающимся специалистом по базам данных, который знает досконально DB2 или Oracle и умеет настраивать эти базы данных так, как никто другой. Зачастую производительность систем зависит от тонкой настройки, от создания индексов, от оптимизации SQL-запросов, от многих вещей, которые приходят только с опытом и наработкой навыков.

Точно так же для java-специалиста можно быть экспертом в каких-то средах приложений, например, WebSphere, WebLogic, Tomcat, когда знаешь, как правильно писать код, применять и наследовать классы. И более широкое понятие, как объектно-ориентированное программирование. Оно применимо как к java, так и к C++. Но если хочешь стать экспертом, нельзя стать шикарным экспертом и в С++, и в java, — на определенном этапе они расходятся. Имея базовые навыки объектно-ориентированного программирования, потом все равно надо выбирать направление и специализироваться либо в java, либо в C++.

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

И еще про горизонтальную карьеру — выбрав этот путь, человек становится очень востребованным, он дорого стоит, его уважают.

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

Любой эксперт проходит два этапа:

  1. Первый этап: «Я эксперт и все знаю, и мне все равно, что обо мне думают, и обращаются ко мне или нет, но когда ставят задачу, я ее выполню быстрее и лучше всех».
  2. Второй этап — эксперт желает признания и хочет учить других людей, передавать свои знания. Многие на определенном этапе готовы это делать, но не понимают, что и как. Если им такие знания дать, то они становятся еще более ценными экспертами.

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

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

Экспертную карьеру нельзя отнять.

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

Про вертикальную карьеру

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

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

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

Про стартап

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

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

Книга “Карьера программиста” основана на опыте практического участия автора во множестве собеседований, проводимых лучшими компаниями. Это квинтэссенция сотен интервью со множеством кандидатов, результат ответов на тысячи вопросов, задаваемых кандидатами и интервьюерами в ведущих мировых корпорациях. Из тысяч возможных задач и вопросов в книгу были отобраны 189 наиболее интересных и значимых.
Шестое издание этого мирового бестселлера поможет вам наилучшим образом подготовиться к собеседованию при приеме на работу программистом или руководителем в крупную IT-организацию или перспективный стартап. Основную часть книги составляют ответы на технические вопросы и задания, которые обычно получают соискатели на собеседовании в таких компаниях, как Google, Microsoft, Apple, Amazon и других. Рассмотрены типичные ошибки, которые допускают кандидаты, а также эффективные методики поготовки к собеседованию. Используя материал этой книги, вы с легкостью подготовитесь к устройству на работу в Google, Microsoft или любую другую

Понравилась статья или книга? Поделись с друзями:

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

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

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

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

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

Этап 1: Junior Developer

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

  • Знание основ как минимум одного востребованного языка программирования.
  • (студент или обладатель диплома о высшем образовании). Как альтернатива – курсы программирования + неплохое портфолио.

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

Этап 2: Developer

Основные требования:

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

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

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

Этап 3: Senior Developer

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

  • Участие в серьезных проектах коммерческого характера.
  • Опыт профессиональной работы не менее 2 лет.

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

Этап 4: Team Leader

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

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

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

Этап 5: Project Manager

Идеальный специалист на данной должности должен сочетать в себе отличные организаторские навыки с большим объемом собственных знаний в области программирования. Нередко назначают далекого от самого процесса разработки человека. Например, менеджерами проектов часто становятся руководители отделов продаж или опытные «управленцы» из других подразделений, изучившие особенности работы в IT. Поэтому на пути к должности менеджера проекта каждый разработчик может столкнуться с серьезной конкуренцией от людей «со стороны».

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

Дальнейший путь возможен в нескольких направлениях и выбор зависит в первую очередь от личных предпочтений и интересов. Можно стать IT-директором, можно перейти в более масштабный или интересный проект, можно основать собственный.

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

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

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

Направления, связанные с обучением и кураторством, могут принимать самые разные формы, например:

  • Курирование небольшого коллектива из 2-3 программистов при сотрудничестве в рамках проекта, когда куратор совмещает управленческую работу с проектной и решает, исходя из своего опыта, определенные проблемы. При этом можно быть частью команды разработчиков в одном проекте, а во втором – курировать других.
  • Управление командой в проекте, где исполнители территориально отделены друг от друга. Здесь может пригодиться знание иностранных языков и хорошая коммуникабельность. В арсенале задач такого сотрудника введение новых членов команды в рабочий процесс, координация удаленных работников между собой и в целом ответственность за результат. Это удобный вариант развития для тех, кто хочет, не меняя локации и возможно даже должности, участвовать в масштабных международных проектах.
  • Исполнение обязанностей тренера-куратора для клиентов, которым нужна какая-либо поддержка.
  • Участие в работе учебного центра, специально созданного в рамках крупного или среднего предприятия для обучения новых и действующих сотрудников.

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

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

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

Мне почти 40, и я из поколения программистов-кустарей и программистов-самоучек, получивших высшее техническое образование в советском ВУЗе в начале-середине 90-х, когда обучение было иным и даже такое понятие как computer science в наших ВУЗах еще отсутствовало. Оно было только за рубежом, и о таком термине и о соответствующей дисциплине я ничего не знал вплоть до 2007 года, когда начал активно ходить на собеседования и позиционировать себя на рынке труда.
Может быть, этот рассказ будет полезен молодым специалистам, нащупывающим себя в IT-отрасли, дабы избежать каких-то ошибок и построить свою карьеру по-иному.

IT в моей жизни.

Вот основные вехи моей «славной» IT-биографии. Самое интересное в ней, пожалуй, было в период 1990-1995 и 2000-2010 гг.
  • 1973-1985. Периодически находил в журналах и книгах картинки и фотографии компьютеров и внимательно их рассматривал.
  • 1981. Увидел микрокалькулятор и был поражён его «фичами». Хотел сделать такой же самостоятельно, но, естественно, ничего из этой затеи не вышло.
  • 1985. Мечтал о программируемом микрокалькуляторе БЗ-34. Выписывал журнал «Наука и Жизнь», где публиковались программы для него (раздел «Человек с микрокалькулятором», позже сменившийся на «Человек и компьютер»). Позже, в 1990(?) году, мне купили калькулятор МК-52, с ППЗУ и расширенным набором команд. Я вводил в него программы. Ни о каких других компьютерах я не имел понятия. Знал только, что есть ЕС ЭВМ, но что это такое – толком не ведал. Кажется, была такая у нас в школе, и я ее видел в 4-м классе.
  • 1987. В журнале «Моделист-конструктор» появилась схема персонального компьютера «Специалист». Начал готовить плату для него, но не было микросхем. Увидел у приятеля «Микрошу», загружаемую с кассетного магнитофона. Это улучшенный вариант «Специалиста». Очень понравилось. Игры, «Тетрис», «Змея», Бейсик. Взял напрокат «Микрошу» сам. Ввел в него все программы, которые были. Пытался написать сам что-то на «Бейсике». Ездил к знакомым, у них был компьютер «Спектрум», загружался с магнитофона. Я играл в игры.
  • 1988-1989. Средняя школа. 9-й класс. Информатика. «Агаты». Писал программы на «Бейсике» по школьному курсу (геометрия - лежат ли точки на одной прямой, все школы - «Шашки», «Дурак» (карточная игра). Физматшкола при «МИЭМ». КУВТ «Ямаха». 1 год - «Бейсик». 2 год - «Паскаль» и инструментальные среды (DOS, Norton Commander). Писали лабораторные работы и курсовые («MSX Basic» - программа для определения по 4-м точкам, является ли фигура, образованная ими, выпуклым четырехугольником, программа «Крестики-нолики», Turbo-Pascal - программы работы с файлами).
  • 1988. Дворец пионеров, кружок по пакетной радиосвязи. Впервые увидел IBM PC AT.
  • 1990. Поступил в Московский Государственный институт Электроники и Математики.
  • 1990-1992 MSX Yamaha. Basic. Pascal. Лабораторные работы.
  • 1991. Наконец с большим трудом купил «Микрошу». Пытался ввести туда программу для игры в шахматы (из журнала «Моделист-конструктор»). Очень долго разбирался с ней, несколько дней рисовал блок-схему и разбирал алгоритм работы. После ввода программа не заработала. Вероятно, где-то ошибся в наборе. Комп завис и его пришлось перезагружать Reset-ом. Все результаты многочасовой «набивки» пропали. Надо было записать введенное на магнитофон, но я не догадался. Впредь был умнее. Записывал с помощью командочки Save.
  • 1992. Видел 286-ю и Windows 1.0 или 2.0 в зале для лабораторных работ в институте. Очень понравилось.
  • 1993. «Персоналки» с 3-го курса. IBM PC XT. IBM PC AT. Среда Turbo C 2.0. Лекции и курсовая работа. Программа «Композитор» под DOS. «Сочиняет» фугу на нужное число голосов, в нужной тональности и в нужном ладу. Писал несколько месяцев на работе у отца на IBM PC AT. Большие ЭВМ. Unix. Простейшие программы на С (нахождение символа в строке, замена и т.д.)
    Конечно же, изучали Prolog, Turbo Basic, программировали на Pascal и с 3-его курса на C. Еще ранее, в 1988-1989 г, программировали на MSX Basic, и это было действительно замечательно! Был также интенсивный курс ассемблера и архитектуры микропроцессоров (тогда еще 80286). Были какие-то дисциплины по параллельным вычислениям и суперкомпьютерам, которые мне никогда потом не понадобились на практике.
  • 1994. IBM PC AT. Turbo Basic. Turbo Pascal. Turbo C. Лабораторные работы (программа «Решение уравнения Коши»). Курс «Компьютерная графика». Лабораборные. Программа для вывода слоной трехмерной фигуры. Программирование адаптеров EGA/VGA. Курс «Банки данных». Dbase 3, 4. Clipper. Лабораторные работы. Писал базы данных в институте и у отца на Clipper. Видел Windows 3.1 и MS Access 2.0 у друга на работе, был шокирован и очень понравилось (ничего там не понял и удивлялся, как он в этом шарит). Друг программировал базы данных на Access для туристической фирмы.
  • 1995. Unix. ООП. Borland С++. Prolog. Turbo Prolog и ARITY-Prolog. Искусственный интеллект. Лабораторные работы. Переделка программы «Композитор» на C++, добавление классов, операторов.
    По окончании ВУЗ-а все мои сокурсники разошлись: кто уехал за границу, а кто устроился программистом писать на «С++ под базы данных». Кто-то наиболее «продвинутый» даже стал писать софт под видеокарты на ассемблере (тогда это было еще какое-то убожество наподобие S3 Trio и Trident с 256 кбайтами RAM на борту). Только я пошел на преддипломную практику и диплом в некую госорганизацию, где получил свой первоначальный опыт работы, изучил Unix и MS Access, ознакомился с принципами работы компьютерных сетей. Это была середина 90-х.
  • 1995 - 1997. Решил стать программистом или, на худой конец, сисадмином. Работа в проектном НИИ кем-то вроде сисадмина-программиста. Операционная система VAX/VMS. DECNet. Толстый EtherNet. «Большие компьютеры», VAXCluster-ы, терминалы VT-220, VT-330, DECServer-ы, DECPrintServer. Выполнял резервное копирование, установку нового ПО, администрирование (права пользователей, права на диски, файлы). Sun SparcStation, 32 Мб оперативки (это какое-то нереальное, сумасшедшее количество), винчестер 2 Гб, Silicon Graphics, Alpha DecServer (DecWindows). Впервые как следует поработал с Windows, изучил его (на 386DX, затем Pentium). OS Solaris, Irix, DecWindows.
  • 1996. Защитил диплом по теме «Проектирование межплатформной компьютерной сети». Семиуровневая модель OSI. Сопряжение разных типов сетей по общим протоколам (TCP/IP). Выбор «железа» (маршрутизаторов, концентраторов, репитеров), оценка их стоимости, расчет всевозможных характеристик (длины сегмента, расстояния между репитерами и т.д.).
  • 1996-1997. На работе прослушал курсы «SQL for end users», «The XGL graphic library», «Motif programming», «OpenGL programming», «Xlib programming», «XView programming».
    Все курсы, какие были, и для графиков (там много CAD-овцев, под которых покупались Silicon Graphics) и для пользователей баз данных (там был Oracle).
    Администрировал Novell Netware 3.11 и 4.0 (в другом здании). Большая сеть на ~100 персоналок, 2 сервера Novell Netware, тонкий Ethernet.
    Подключился к разработке «Каталожной базы данных оборудования промышленного применения», которую впоследствии разрабатывал самостоятельно (когда уже все стоящие специалисты свалили с той работы:). Так началось мое собственное знакомство с Access.
    Выход Windows 95, знакомство с ней.
  • 1996. Подключение фирмы к интернету (dialup в компании Элвис-Телеком).
  • 1996 (?) Покупка компьютера домой (486DX2-66). Усовершенствовал программу «Композитор» возможностью распечатки на принтере нот. Пробовал программировать под Windows 3.1 (Borland C++ 3.0, Win 3.1 SDK). Сложно и запутанно, но смог написать простейшую программу, выводящую окно (с основными понятиями программирования в мультизадачных средах я был знаком - очередь событий, ресурсы, окна, контролы, обработчики событий - частично по институту, частично по курсам по Motif и OpenGL, но в Windows все это по-другому). Пробовал переделать программу «Композитор» под Windows с использованием multimedia-библиотек. Очень сложно, не смог.
  • 1996. Появился модем, ФИДО, интернет. Начал искать новую работу. Пытался устроиться на работу в компанию, где был UNIX, Informix, NT и т.д. У меня спросили, что такое «template», «group by» и какие UNIX-shell-ы я знаю. Я ничего из этого списка не знал, и меня не взяли.
  • 1997, январь-февраль. Пытался написать складскую программу на Access 2.0, изучать Excel. Помню, как раз вышел Office 97, и я пытался с ним освоиться.
  • февраль 1997 – декабрь 2000. На мою вторую по счету работу меня взял совершенно незнакомый мне человек и без всякого собеседования просто по объявлению в mo.job (наверное, он все же как-то неявно проверил мою адекватность, но этот тест был успешно мной пройден). Зарплата была неправдоподобно высокая для молодого специалиста на начало 1997 года. На вопрос, зачем он меня взял и почему без собеседования, он сказал: «Мне просто был нужен Access-ист. Вы ведь Access-ист?». Я сказал: «Да, конечно, я - Access-ист». Больше никогда таких глупых вопросов я не задавал. Программировал на Access 2.0. Сразу дали сложные задачи. Было сначала тяжело, потом освоился. Освоил Access 2.0 и Excel 5.0 досконально. Затем Access"97 и Excel"97. ERWin. Вышла «1С-торговля». Очень не понравилась. Чуть-чуть посмотрел Access"2000 и Powerbuilder 6.0. Powerbuilder очень понравился, перевел на него часть библиотек. Перевел программу с MSA 2.0 на MSA 97. Занимался также anykey, администрированием Windows NT Server, внедрением почтовой системы на MS Exchange 5.5, внедрением Office"97, WINS, DHCP, MS Proxy 2.0, RRas и (главное достижение в этой фирме, как я считаю) переводом системы на MS SQL 7.0/MSA"97 с репликацией данных в удаленный офис. Собственноручно проинсталлировал 3 новых сервера Windows NT (SQL, Exchange, WINS, IIS, MS Proxy, RRas), внедрил Faxmaker для Exchange Server. Писал скрипты под MS Exchange Server на VBScript. Замечательно поработав в этой компании несколько лет и написав много софта, я стал задумываться о новой работе.
  • Времена менялись. Шел 2000-й год. Дабы избежать застоя в верхнем отделе головного мозга и засилья 1С, я пошёл в один стартап, где мы прозанимались интереснейшими вещами вплоть до 2010-го года. Туда меня взяли тоже совершенно без всякого собеседования после выполнения несложного тестового задания. За 10 лет было написано много десятков мегабайт исходников на всевозможных языках программирования (С++, Python, Assembler), сделана куча замечательных проектов. Я великолепно изучил Linux, C++, Python.
  • На дворе 2007-й год. Впервые я стал беспокоиться, потому что работа перестала меня удовлетворять. Мне стало казаться, что моя работа – это подготовка к чему-то «настоящему», это всего лишь репетиция, отработка навыков перед чем-то важным. Но время шло, а «настоящей работы» так и не начиналось. Настоящей, на которой я смогу реализоваться полностью. Стало казаться, что её просто не существует. Я думал, что моя зарплата и интересность работы будет расти сама прямо пропорционально времени, но этого не происходило. Зарплатный капкан начал меня напрягать. Выйдя на свободный рынок в 2007 году я, пожалуй, впервые ощутил свою косность, неконкурентоспособность и безнадежную отсталость от технологий. Завязнув в стартапе, я порядком закостенел. Я начал заниматься поисками новой работы. Моя out-of-the-markedness беспокоила меня всё больше и больше. Посетил множество фирм, в числе которых были и очень крупные игроки софтверного бизнеса (Rambler, Yandex, Kaspersky и др). Но везде результат один – полный и несомненный отказ. В это время я впервые задался вопросом: «Почему?», на который до сих пор не получил внятного ответа. Я наконец-то узнал, что существует computer science, которую все спрашивают и про которую я впервые слышал. Неужели это потому, что я не знаю computer science? Но я же написал огромное количество высококачественного рабочего софта, знаю множество технологий и промышленную разработку! Я начал кидаться туда-сюда, хвататься за новые бесчисленные технологии, срочно изучать эту самую computer science, ничего не успевал изучать и был расстроен тем, что у меня ничего не получается. В конце концов, так и не найдя новой работы, я смирился со своей грустной участью. Я всё время был «не в струе»: когда все использовали stl и boost, я их практически не использовал, потому что не нужно было по работе; когда питонисты поголовно перешли на django году в 2008-м, я его упорно игнорировал, поскольку пользовался лучшим с моей точки зрения фреймворком, файлы редактировал упорно в FAR-е, хотя кругом было полным-полно замечательных удобных редакторов, и моя производительность не страдала от этого. В конце концов, я начал использовать все эти технологии, но только для того, чтобы быть адекватным рынку.
  • Но вот – о чудо! – меня пригласили в один стартап опять же совершенно без всякого собеседования. И опять, прилежная работа в течение нескольких лет, проектирование, планирование и эджайл, горы исходников, тестирование и багфиксы, надежды на лучшее, ощущение, что это репетиция чего-то важного и нового, разочарования и безуспешные поиски новой работы, которые проходили ровно так же, как в 2007-м году, но в условиях более жесткой конкуренции, которую я ощущал буквально за своими плечами.
  • И вот времена опять поменялись. На дворе уже 2013-й год. Я все ещё молодой, но возраст уже начинает брать своё. Мне казалось, что за это время у меня накопился гигантский опыт, что я могу заниматься чем угодно, что я нахожусь в конкурентном поле и у меня достаточно высокий уровень компетенции, что я могу работать, что я – «программист». «Теперь-то», думал я, «уж точно настало время для самой ценной и важной моей работы, для работы всей моей жизни».

На самом деле не всё так просто. Я не знаю, какую именно работу я ищу. Не имею понятия, какая работа будет ценной и важной для меня. Надо попробовать всё. Высока конкуренция. Много молодёжи. Вчерашние выпускники отлично знают computer science и знают все эти загадочные слова, магические пассы и умеют внятно говорить. Поменялись правила игры, хотя Unix, C++, ООП остался. Появились длинные, содержательные, многоэтапные собеседования, grueling interviews. Ужесточаются требования к соискателям. Теперь уже никто не берет «студента без опыта» даже за смешную зарплату. «Странно» - думал я. «В начале 90-х же была демографическая яма, в которую должны были угодить мои потенциальные конкуренты». Но это не так. Выявляются мои пробелы и изъяны в знаниях, последствия многолетней «кустарной практики» и отсутствие системы в знаниях. Оказалось, что я не знаю детально, как работает ни один алгоритм сортировки (все 20 лет сортировал обычным «sort»-ом во всевозможных вариантах и на всевозможных языках программирования, который, по моему мнению, сортирует очень хорошо, но как именно – это меня никогда не волновало, ведь он сортирует наилучшим образом!), не знаю принципов ООП (использовал его еще со времен ВУЗ-а, но, видимо, неправильно, раз я не знаю верных принципов), формата пакетов TCP/IP (а зачем его мне знать? знал, когда писал диплом в ВУЗе, а потом забыл!), алгоритмов на графах и многого другого… Но я же как-то работал эти 20 лет и писал отличный рабочий софт, который используется до сих пор и будет ещё долго использоваться! Как это может быть? Сам удивляюсь.
И второй виток выхода в «свободный рынок» прошел всё в такой же «теплой и дружественной обстановке», как и первый.
«Касперский» снова предложил мне с ним «забрэйнбенчиться», как в старые добрые времена («Thank you, chap, but I don"t play that games anymore, have already brainbenched all over»), «Яндекс» прореджектил все мои аппликейшны на все вакансии, на этот раз молча, даже без приглашения на интервью (в 2007-м году проинтервьюировал и «забраковал»), и похоже, включил меня в пожизненный бан, ибо я уже порядочно надоел их HR, поскольку откликаюсь почти на все их вакансии; mail.ru поступил аналогично, а Parallels, Mirantis и другие «акулы» софтверного рынка меня «забраковали» уже на собеседовании. Неприятно чувствовать себя «забракованным», но приятнее понимать, что мы обоюдно не подошли друг другу и не подходим вот уже много лет  Мы слишком разные. Я например, люблю поэзию, литературу, музыку и английский язык. А вот любит ли это Яндекс? Не уверен.
Со стороны работодателей: их можно понять. Их задача – за минимально возможное время выяснить знания кандидата по максимально широкому набору тем. Я сам набирал программистов и по себе знаю, как это нетривиально. На готовые вопросы подразумеваются готовые шаблонные ответы. Как у Жванецкого: «…вот список ваших вопросов, вот список моих ответов». Излюбленные приёмы, используемые на собеседовании, которые я собрал за многолетние походы по интервью и которые повергают меня в недоумение, вводят в ступор (ответы на некоторые из них я не знаю и посейчас), и, как мне кажется, некоторые из них имеют мало отношения к программированию и их просто задают, потому что это «проверенный способ» и «все их спрашивают». Мои ответы, не устраивающие работодателей, в скобках:

  1. Представьте, что Вы читаете лекцию перед студентами. Как бы Вы объяснили студентам термин «X»? (X == «тупик», «контекстно-свободная грамматика», «конечный автомат», «оптимистические и пессимистические блокировки», «парадигмы программирования», «шина данных»). (Из этого списка внятно могу объяснить только «тупик», он же deadlock, потому что часто имею с ним дело. С остальными терминами дела не имею, и, соответственно, объяснить их не могу).
  2. Опишите максимально подробно, что происходит при вводе адреса в адресную строку браузера (вариант: при клике на ссылку). (Какая именно степень детализации имеется в виду? Мой рассказ может растянуться на целый день, а время у нас ограничено. Сначала, если мы находимся под Windows, посылается Windows-сообщение WM_CHAR при вводе текста в контрол… нет, точнее, сначала WM_NCHITTEST,… но если начать с самого начала, тогда keystroke поступает в клавиатурный буфер...).
  3. Опишите, какой обмен TCP/IP-пакетами производится при установлении HTTP-соединения. (К сожалению, многократно смотрел TCP/IP трафик с помощью ethereal, но не помню формат пакетов даже приблизительно).
  4. Опишите, какой обмен TCP/IP-пакетами производится при установлении HTTPS-соединения. (К сожалению, TCP/IP-трафик при HTTPS-соединении не смотрел). Верно ли, что HTTPS работает поверх HTTP или верно обратное? (Не знаю, но думаю, что HTTPS поверх HTTP. Или HTTPS поверх TCP? Кто ж его знает..).
  5. Опишите, как производится доставка пакетов транспортным протоколом TCP. Откуда мы знаем, на какой именно физический компьютер доставлять пакет? За счет чего обеспечивается гарантированная доставка? (Адрес доставки определяется MAC-адресом физического компьютера, доставка пакетов производится через gateway, прописанный в настройках системы, если это внешний хост. Внешний или не внешний – это вычисляется из ip-адреса и маски).
  6. Какова алгоритмическая сложность наилучшего и наихудшего возможного алгоритма сортировки массива из N элементов? (Наихудшая сложность – O(N^2), потому что нужно сравнить каждый с каждым, наилучшая – O(N * ln(N)). Почему такая наилучшая? Не помню. Читал в книжке. В какой - не помню).
  7. Рисуются прямоугольнички со стрелочками, говорится, что прямоугольники – это модули, а стрелочки – это зависимости между ними и задаётся вопрос: «Как загрузить все эти модули? И вообще, как это называется?» (Берем и загружаем рекурсивно сначала зависимости модуля, затем сам модуль. Как это называется – не знаю и не имею ни малейшего понятия. Это называется «прямоугольнички со стрелочками»).
  8. Опишите отличия демона от обычного процесса (такой вопрос мне задавали в 2007 году, и я до сих пор не знаю исчерпывающего ответа на него – тема поистине неисчерпаема, и я в ней досконально не разбираюсь, хотя написал за свою рабочую практику огромное количество демонов, при этом до конца не понимая, общая ли у них память или нет, общий ли стэк или нет и общие ли файл-дескрипторы или нет. Кажется, нет, не общие. Или общие. Забыл уже, в общем. Давно это было, в 2004-м году.).
  9. Назовите пять принципов объектно-ориентированного программирования. (Не знаю, к сожалению, хотя использую ООП с 1993 года).
  10. Как с помощью двух стеков сделать очередь? (Не знаю, но можно посмотреть в интернете).
  11. Какие способы синхронизации процессов Вы знаете (вариант: какие примитивы синхронизации Вы знаете) (mutex-ы, семафоры, эвенты)?
  12. Какие шаблоны проектирования Вы знаете (вариант: какие шаблоны программирования Вы знаете) (синглтон, фабрика объектов)?
  13. Как сделать оптимизацию SQL-запроса (вариант: какие приёмы оптимизации SQL-запросов Вы знаете) (посмотреть план запроса, убрать подзапросы по возможности, проставить недостающие индексы)?

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

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