Что должен знать каждый программист, чтобы переехать в Австрию
В Австрии не очень развита сфера IT. Поэтому устроиться здесь на работу программистом не очень сложно. Прежде всего, нужно знать основы, в том числе того языка программирования, на котором собираетесь работать.
Приветствую всех, друзья! С вами снова Максим! Давненько я не записывал никаких видео. Вы уж извините, но в Вене и во всей Австрии стояла такая ужасная жара, что не то что видео записывать, вообще ничего не хотелось. Было и 36 и 38. Вот наконец-то, первый день, когда более или менее стала нормальная температура 20 градусов.
Сегодня я хочу с вами поговорить вот на какую тему. Со мной чаще всего контактируют люди, каким-то образом связанные с IT – программисты, тестеры, дизайнеры. Это понятно, потому что я сам в одном из своих первых видео сказал, что я программист, и рассказал, как я приехал в Австрию. Поэтому люди задают вопросы на эту тему. И вот один из вопросов, который мне уже несколько раз задавали, и последний раз задал мой подписчик под ником «Скорпион»: «Какие же навыки нужны программисту, для того чтобы найти работу в Австрии?»
Давайте я сразу расскажу пару слов о себе для тех, кто впервые видит мое видео. У меня 9 лет опыта в программировании. Но, несмотря на это, я не причисляю себя к каким-то крутым программистам, нет у меня чувства, что я какой-то выдающийся специалист в этом деле. Я никогда за всю свою жизнь не работал в крупных крутых конторах, типа Google или Microsoft. Я все время работал в довольно скромных компаниях, поэтому все, что я буду говорить сегодня – это исключительно мое личное мнение. Если вы действительно хотите знать мнение эксперта на эту тему, то меня вообще не слушайте.
Итак, повторяю вопрос: «Какие навыки нужны программисту, чтобы успешно устроиться в Австрии?» Я вам отвечу на этот вопрос одним единственным словом: «Основы!» Почему-то многие люди думают, что для того чтобы стать крутым программистом, получить хорошую работу, непременно необходимо знать какие-то супер возможности, скрытые особенности какого-нибудь языка программирования или какой-то технологии. Я вам скажу так, что большинство людей, которые проваливаются на интервью, проваливаются именно на основах, на самых базовых знаниях, которые дают в институтах.
Что мы причисляем к основам? Например, основные принципы объектно-ориентированного программирования. Вы должны точно знать, что такое наследование, инкапсуляция, полиморфизм. Как бы умно эти слова не звучали, но это то, что вы должны знать. Еще вы должны знать основы баз данных. Как хотите, но должны вы это знать. Потому что несмотря на то, что NoSQL продвигается семимильными шагами, основные корпорации и компании используют реляционные базы данных. И знание основ – это непременное условие. Поэтому это вы точно должны знать. Что еще вы должны знать? Ну давайте рассмотрим какой-нибудь язык программирования. Когда вы идете на конкретное интервью, то уже в описании написано, на каком конкретном языке программирования вы будете программировать. Конечно, вы идете в какой-нибудь Google или Microsoft, то там своя специфика. Там они больше проверяют знание алгоритмов, о которых мы поговорим дальше, способность человека мыслить. Но все-таки 99% контор зовут программиста на конкретный язык, конкретную технологию. Так вот этот язык вы должны более или менее знать. Вы не должны знать в нем все, вы не должны знать какие-то мелкие подробности, но вы должны крепко знать, как эта технология или язык программирования работают.
Следующее – алгоритмы. Это интересная штука, о которой во всех книжках по интервью вам будут рассказывать о их важности. За все годы своей работы, пусть даже не в серьезных компаниях, я ни разу не использовал ни одного алгоритма. Ни разу я не сортировал бинарные деревья, ни разу я не делал depth first search, ни разу в жизни мне это не пригодилось. Тем не менее, я советую вам их учить. Почему? Потому что алгоритмы – это предписанный механизм решения какой-либо проблемы. Этот механизм был разработан и утвержден когда-то лучшими умами человечества. Это оптимальное и очень красивое решение какой-то проблемы. Поэтому алгоритмы нужно изучать не только для того, чтобы знать их, а для того чтобы знать, как все в нашем компьютерном мире работает. Потому что куда вы не посмотрите, любая технология, любой язык программирования будут основаны на уже готовых алгоритмах. Поэтому алгоритмы являются той частью фундамента, которую вы должны знать. Я время от времени тоже читаю книги, смотрю видео про алгоритмы и, скажу вам честно, благополучно их забываю. Потом опять смотрю, опять учу и опять забываю. Забываю, потому что никогда не использую, а учу, потому что знаю, что нужно это делать. Поэтому совет такой: даже если алгоритмы вам не понадобятся, то все равно их учите, потому что это улучшит ваш уровень как программиста, IT-специалиста. Просто потому что вы будете учиться различать красивые, элегантные решения стандартных проблем, и в нужных местах вы не будете стараться изобрести велосипед, а будете знать, что подобное решение есть. Все, что вам будет нужно – найти конкретную имплементацию алгоритма и использовать ее.
Дальше – шаблоны проектирования, так называемые паттерны. Нужно ли это учить? Обязательно! Это из той же серии, что и алгоритмы. Шаблоны проектирования – это готовые элегантные решения наиболее стандартных программистских проблем. Поэтому такие вещи, как Singleton, Bridge, Factory не должны вызывать у вас ужас, а должны сопровождаться понимающим кивком головы. Это вы должны точно знать. Поэтому что это, как и алгоритмы, формирует основу вашей профессиональной грамотности.
Также я бы хотел отметить такую особенность нашего ремесла, которую, я думаю, вы уже заметили, а новенькие скоро заметят, что в нашей работе очень тяжело идти постоянно в ногу со временем. Вы постоянно будете видеть какие-то новые языки программирования, какие-то новые фреймворки. В последнее время развелось множество JavaScript— фреймворков, Frontend-девелопмента. И очень часто у людей складывается мнение, и на меня тоже часто нападает такое отчаяние, я чувствую, что я отстаю от времени, теряю квалификацию. И тут вы, друзья, должны понимать такую важную вещь, что новые технологии приходят и выглядят очень классно и круто. Но вы должны понимать, что в основе любого нового фреймворка, любой новой технологии лежат старые. А в основе любой старой технологии лежат все эти алгоритмы, шаблоны проектирования и базовые вещи, которые вы должны знать. Поэтому, зная основы, вы всегда сможете найти ассоциации, сможете легко изучать новые технологии и развиваться профессионально. Поэтому учите основы.
Недавно у нас было новое интервью, мы искали нового программиста, и на интервью было приблизительно 10 кандидатов. Из них около пяти были матерые senior-девелоперы с 15-20 годами опыта, и была одна молодая девушка. Как вы думаете, кого мы в итоге взяли? Мы взяли эту молодую девушку, которой было меньше всего лет, опыта. Но, тем не менее, это был единственный человек, который смог ответить на все эти базовые вопросы, потому что на интервью вам никто не будет задавать супер заковыристые вопросы. Вам сначала зададут базовые вопросы. Эти матерые программисты не смогли на них ответить. Почему они не смогли? Потому что, когда человек работает на одном месте по 10-15 лет, то он перестает развиваться и забывает самые основные базовые вещи. Все эти senior-девелоперы не смогли ответить на самые примитивные вопросы. Они не смогли ответить на вопросы по основам баз данных, по каким-то базовым конструкциям, языкам. Я прекрасно понимаю, что, может быть, они работали с другими технологиями, может быть, они этим не пользовались, но факт остается фактом – молодая девушка смогла на это все ответить и показалась нам гораздо перспективнее, чем все эти матерые программисты с кучей лет опыта.