bannerbannerbanner
Карьера в IT. Как найти работу, прокачать навыки и стать крутым разработчиком

Джон Сонмез
Карьера в IT. Как найти работу, прокачать навыки и стать крутым разработчиком

Изучите имеющийся код и разберитесь в каждой строке

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

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

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

Вопрос Джону!

Ты точно уверен, что мне не обязательно знать, почему код работает именно так? В чем прикол понимать «как», не понимая «почему»?

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

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

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

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

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

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

Создайте ЧТО-ТО. А потом еще раз, и еще

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

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

Предлагаю несколько идей для программы.

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

• Программа типа «Выбери свое приключение», в которой ход программы определяют действия пользователя.

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

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

• Чат-бот, который разговаривает с пользователем и притворяется человеком или дает юмористические ответы.

Используйте конкретную технологию или платформу

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

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

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

Давайте предположим, что вы изучаете Java.

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

Вы, конечно, можете изучать Android и Java вместе – на самом деле я создал курс, где именно этому и учил, – но если вам хочется по-настоящему овладеть языком и избежать путаницы, то разучить язык отдельно от платформы или технологии, а затем объединить их, вероятно, будет намного проще.

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

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

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

Решайте сложные алгоритмические задачи

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

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

Не волнуйтесь, это тоже нормально.

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

Я чувствовал себя хорошим программистом на C++, но не отличным.

Мне хотелось улучшить свои навыки работы с языком, но я не знал как.

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

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

Они использовали C++ таким образом, какого я и представить себе не мог.

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

Я стал разбираться в C++ не просто хорошо, а превосходно. Наконец-то я почувствовал, что овладел этим языком.

Я хочу, чтобы вы поступили так же.

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

Я уже упоминал об одном хорошем источнике подобных задач, но вот еще несколько:

• «Карьера программиста» Гейл Лакманн Макдауэлл;

• «Жемчужины программирования»[10] Джон Бентли;

• Проект Эйлер[11];

 

• Codility;

• Interview Cake;

• TopCoder.

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

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

Глава 7. Высшее образование

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

Давайте начнем с наиболее традиционного пути – высшего (или среднего специального) образования. Думаю, что в рассказах о том, что такое «университет» или «колледж» вы не нуждаетесь. Гораздо лучше будет поговорить о том, к чему следует быть готовыми, отправляясь по этому пути.

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

Преимущества

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

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

Множество компаний все еще нанимают только тех, кто имеет высшее образование

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

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

Незадолго до окончания колледжа меня наняли на работу в Hewlett-Packard. К тому времени я уже несколько лет работал программистом. Фактически я работал в HP по договору подряда. Обычно Hewlett-Packard не нанимает сотрудников без диплома о высшем образовании, однако я стал исключением. Так произошло, потому что я доказал свою квалификацию, когда работал сдельно.

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

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

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

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

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

Хорошее понимание основных концепций информационных технологий

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

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

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

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

Структурированные знания

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

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

Стажировки и прочие возможности

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

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

Преимущества такого подхода очевидны, если вы хотите начать свою карьеру в по-настоящему крупной компании (такой как Microsoft или Google).

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

Недостатки

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

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

Затраченное время

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

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

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

Финансовые затраты

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

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

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

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

Позволю себе напоследок дать вам еще один совет.

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

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

Устаревшая и не имеющая ничего общего с реальностью информация

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

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

Да, знать основные концепции отрасли IT полезно. Однако в работе вам куда больше пригодится умение пользоваться системой контроля версий и знание методологии Agile и наиболее распространенного фреймворка JavaScript.

 

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

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

Вы, конечно, можете и самостоятельно преодолеть это ограничение, изучив своими силами другие аспекты разработки ПО. Только вот, подозреваю, в процессе этого вам наверняка захочется спросить: «А зачем я тогда вообще плачу за высшее образование?»

Отвлекающие факторы

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

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

Части студентов очень нравится атмосфера высших учебных заведений. Однако если вы серьезно настроены на то, чтобы стать разработчиком ПО, то эта атмосфера будет вас очень сильно отвлекать.

Вряд ли большинство выпускников школ задумываются об этом. Обычно им кажется, что они будут по будням учиться и развиваться, а по выходным – кутить и развлекаться. К сожалению, это так не работает. Когда я учился в колледже, вечеринки были каждую ночь. Было очень легко заниматься чем угодно (спать, гулять, играть в компьютер), но только не учебой. Я не говорю, что вы обязательно потеряетесь в океане развлечений, просто не забывайте об этом факторе при принятии решения о поступлении.

Вопрос Джону!

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

Однажды я сидел в суши-баре на Пасифик-Бич и рассказывал о своих пробежках. В это время ко мне подошел бездомный и сказал, что бегать надо не по тротуару рядом с пляжем, а по самому пляжу. Я подумал, что он, пожалуй, прав, и начал говорить, что, вероятно, так и следует делать, но в этот момент ко мне подошла моя шестилетняя дочка и сказала: «Будь самим собой. Ты просто программист (Simple Programmer)».

Очевидно, она запомнила что-то из того, что я обычно говорю о жизни. Меня это очень впечатлило, ведь она была права.

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

Иногда человеку кажется, что у него нет выбора, но это не так. Не поймите меня превратно, я не советую вам: «Ни за что не ходите в институт!», я говорю: «Думайте своей головой!»

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

10Издавалась на русском языке. Питер, 2002 г. – Прим. ред.
11Проект Эйлер – некоммерческий проект в Интернете, объединяющий любителей математики и программирования. Проект был запущен в 2001 году Колином Хьюзом и сейчас поддерживается небольшой группой энтузиастов. Участники проекта могут выбрать любую из существующих в текущий момент задач и решить ее с помощью любого известного им языка программирования. После ввода правильного числового ответа участник получает доступ к форуму по данной задаче, где участники обсуждают и сравнивают между собой найденные ими алгоритмы. – Прим. ред.
1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58 
Рейтинг@Mail.ru