outcoldman
outcoldman Denis Gladkikh

Рекомендации для начала карьерного роста

outcoldman, Ярославль, Interview, ЯрГУ, and Образование

По мотивам недавно прошедшей конференции в ЯрГУ 25 марта, на которую пришло уж очень не много народу, решил я написать небольшой мотивирующий пост для студентов и начинающих программистов/IT специалистов. Мою презентацию с доклада можно посмотреть на skydrive. Здесь же я постараюсь вкратце, на сколько это возможно, осветить этот доклад.

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

Ну и до нас не раз еще поднимали эту тему. Рекомендую читать и заряжаться всеми этими топиками.

Плохое образование

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

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

Итак, что же, по моему мнению, нужно преподавать в университете? Студентам понадобятся знания языков программирования, потому C#, Java, C++, ASM (а что, всякое возможно, может и такая работка попадется). Затем студентам нужно уметь создавать клиентские приложения, следовательно, WinForms, WPF, MFC. Веб-разработка: PHP, ASP.NET, ASP.NET MVC (ASPX/Razor). Данные нужно хранить: SQL-92, TSQL (MsSQL), PL-SQL(Oracle), MySQL, PostgreSQL. Ну не напрямую же от студентов будут просить связываться с БД, следовательно: ORM, Hibernate, NHibernate, Entity Framework, Linq-To-SQL, ADO.NET. Вокруг у нас еще технологии: Silverlight, WCF, WF, знания SOA. Еще нужно знать некоторые фреймворки разработки: Sharepoint, Microsoft CRM, SugarCRM. А стоп, мы же говорили о веб-программировании: XML, XHTML 1.1, HTML 4, HTML 5, CSS 2, CSS 3, XPath, XSLT, ну и куда же без JavaScript. Ну и основы, основы: Continuous Integration (CC.NET, nAnt, TeamCity, TFS); знакомство работы с репозиториями CVS, SVN, Git, Mercurial, TFS; паттерны: GoF, MVC, MVVM, MVP. Еще нужно знать разные оболочки разработки, инструментарии (Debuging, Profiling), и до кучи умные слова: TDD, IoC, Scrum, Agile и т.п. Знаете, я даже немного сомневаюсь, что я назвал 70% того, что мне пришлось узнать и использовать за свои 6 лет практики (ну забывается уже, что когда-то кому-то, будучи студентом, писал программы на Borland C++ или Delphi за копейки, хотя для меня тогда это были большие деньги). Я хочу обратить внимание на количество лет, всего 6 лет. И я больше чем уверен, что с годами мне придется (если я хочу развиваться) еще раз вернуться к тому, что я считаю уже прошедшим этапом, и что я уже считаю познанными материалом, а так же, что через пару лет я смогу этот список еще дополнить большим количеством технологий. А теперь, еще раз взгляните на мой список. Практически все эти технологии связаны между собой Microsoft (80%), ну так сложилась моя карьера. Это всего лишь Microsoft. Ruby разработчик напишет другой список, а разработчик Embedded устройств напишет свой (они будут, конечно, как-то пересекаться с моим). Более того, я тут, практически, еще не писал версии платформ. Когда текущие первокурсники окончат университет, этот список так же можно будет подправлять и изменять. Так что же в действительно нужно рассказывать в университетах? Именно то, что сейчас и рассказывают. Не больше, не меньше. Какая разница, какое подмножество вам расскажут из множества IT, и сколько. 100% покрыть не получится – это точно, даже 10%, а разница, что один университет рассказывает 0,0005%, а другой 0,0006%, небольшая. Есть основы, их рассказывают во всех университетах, их и должно хватать. Зависит, конечно же, от преподавателей, как они подаются.

“В школе нас учили, а в университете мы должны учиться”. Глупое выражение, но если вдуматься, в нем много смысла. От этого и нужно отталкиваться.

Самообучение

Где же брать знания? В интернете. Даже у меня (в мои 26 лет) не было возможности в университете серфить интернет. Помню, мы с моим другом одногруппником выбирали как-то ночь на выходных, покупали пива, интернет карточку и шли лазить по интернету (ночью дешевле). По историям моих более взрослых товарищей – нам тоже очень сильно повезло, у нас хоть компьютеры были дома, а кому-то приходилось еще пробиваться к компьютеру, чтобы что-то попробовать и посмотреть. Попробовать работает ли тот код, что написал на бумажке. Сейчас же все проще. Компьютеры есть у всех, интернет тоже доступен. А известные IT ресурсы вы знаете без меня.

Очень хороший вариант – сидеть на специализированных IT форумах. Сначала просто читать. Потом вчитываться в нерешенные проблемы, искать решения в гугле, и решать чужие проблемы. Потом научитесь видеть проблемы на поверхности. Или сможете без проблем решать их сами. Так делал я, когда изучал ASP.NET. Залез на форумы GotDotNet, и там очень хорошо прокачался по этой теме. Учитесь на чужих ошибках.

Другой вариант – это OpenSource. Его же огромное количество. Ищите интересные проекты для вас. Начинайте изучать код, следите за изменениями, ищите ошибки, читайте рекомендации к проекту, реализуйте их, присылайте основным разработчикам проекта свои патчи – со временем и вам дадут права на проект. Не просите сразу же дать вам доступ только потому, что это интересно, сначала себя нужно зарекомендовать. Честно, вы не найдете никогда супер OpenSource проект, в котором код будет 100% идеальным, такого просто не бывает, поэтому просто ищите интересный вам проект, но не идеальный. И более того чаще всего приходится копаться со старым (legacy) кодом, привыкайте с пеленок.

Ходить нужно на все бесплатное (конференции, занятия, курсы), что только имеется, и не важно какой вы религии. Читать нужно все, что только попадается под руку, и на что есть время. Вы же знаете, что есть такая профессия, как специалист по юзабилити? Этот тот человек, который прочитал очень нудный документ о том, какие должны быть формочки в Windows7, а так же обладающий небольшими познаниями в психологии.

Нет лишних знаний

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

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

image

А вот, например, два:

image

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

Что начинать делать завтра?

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

image

Займите себя чем-нибудь. До сих пор нет ни одного нормального Twitter клиента, все отстой. Ну, напишите и вы свой отстойный клиент. Есть всего один нормальный бесплатный движок для форумов phpBB, и то на php. На amazon kindle до сих пор нет notebook (идея уже забита). Крадите идеи, переделывайте их, реализуйте двойников. Посмотрите на телевидение, да там 99% программ украдено с запада. В IT воровать тоже можно, честно. Пускай даже вашей программой будете пользоваться только вы и пара ваших знакомых – роль будет играть то, что вы довели какой-то (хоть даже очень маленький) проект до конца.

Если вы делаете одну и ту же задачу дважды – вот она работа для настоящего программиста. Автоматизируйте все. Таскаете wallpapers с atata ветки? Напишите программу, которая будет делать это за вас и выставлять вам новые wallpapers по параметрам с этого RSS. Напишите сначала простую нерабочую программку, следите за ней, развивайте, дайте попользоваться друзьям. Сделайте нормальный GUI, выложите в интернет. И не забудьте поделиться со мной.

Будьте программистом

Самое основное – это пройти тот этап, когда человек превращается в программиста (благо математики достаточно близки). Эти шутки про алгоритм “вскипятим чайник” (все же ее знают, ведь так?), или про то, что программист, переходя дорогу с односторонним движением, смотрит в обе стороны – они не просто так. Это способ мышления. Нельзя никому верить, нужно проверять внешние параметры. Нужно уметь видеть ошибки. Нельзя никогда полагаться на умного пользователя. Это, кстати, одна из ошибок нашего преподавания, что преподаватели позволяют делать изначально плохие программы студентам. Студенты не валидируют данные, делают ужасные интерфейсы. Моим студентам сейчас не повезло, я за них взялся.

Чтобы размяться начините с чтения вот этой книги

image

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

Устройтесь на работу

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

Когда я устраивался работать на стройку после 3го курса (тогда я уже подрабатывал программистом, но работы было не много, а хотелось подзаработать денег на отпуск), то устраивался я очень просто – через знакомых узнал, где есть ближайшая стройка и как связаться с главным бригадиром. Пришел к нему в 8 утра (уже с одеждой для переодевания) и спросил чем могу быть полезен. Очевидно, что через 15 минут я уже работал в поте лица. За месяц насобирал денег, думал, поработаю и больше, но нашлась еще работка для программиста.

Собственно, а что мешает так же сделать и с IT компаниями? Придите к ним на 2-4 курсах, выберите одну из вам интересных (благо у всех есть сайты), подготовьтесь хорошенько – узнайте, чем занимается компания. Найдите главного менеджера или директора или еще кого-нибудь и объясните ситуацию, что хотите по окончанию выпуска или даже раньше (в ЯрГУ, например, на 5м курсе нет учебы) начать работать у них, что для этого нужно сделать. Cкажите, что готовы год просто за бесплатно разбирать задачи, пытаться решать и т.п. Я думаю, что работодатель (умный работодатель) будет рад заинтересованному студенту.

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

Have feedback or questions? Looking for consultation?

My expertise: MongoDB, ElasticSearch, Splunk, and other databases. Docker, Kubernetes. Logging, Metrics. Performance, memory leaks.

Send me an email to public@denis.gladkikh.email.

The content on this site represents my own personal opinions and thoughts at the time of posting.

Content licensed under the Creative Commons CC BY 4.0.