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

Полная версия

Настройки чтения
Размер шрифта
Высота строк
Поля
На страницу:
5 из 6

Например, Ruby был перенесен на множество различных платформ и используется во многих технологических областях. JavaScript также легко адаптируется. Вы даже можете использовать JavaScript для управления платами Arduino и робототехники. (Мой хороший друг Дерик Бейли написал неплохую статью на этот счет.)

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

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

Пара мыслей напоследок

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

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

Главное – не сдаваться! Уверяю вас, что все получится. В какой-то момент вы можете ощутить скуку или решить, что надо было выбрать другой язык и затем начать перебирать разные технологии, но поверьте мне – это будет плохая идея. Когда я начинал изучать программирование, одним из самых важных навыков для разработчика было глубокое понимание языка. Я просматривал массу книг по C++, пытаясь узнать обо всех тонкостях языка. Сегодня в этом занятии нет необходимости. В наши дни программисты работают на более высоком уровне, что предполагает более широкое использование библиотек и фреймворков, нежели функций самого языка. Разумеется, вы по-прежнему должны уметь программировать, но тончайшее владение каким-либо языком сейчас излишне.

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

Глава 6. Ваш первый язык программирования

Итак, выбор сделан. Что дальше? Конечно же, открыть книгу и начать читать! Прекрасный выбор, который с большой долей вероятности заставит вас отказаться от программирования раз и навсегда.

Помните, я говорил об обучении на практике? Именно этим мы и займемся в этой главе.

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

Большинство программистов (как и я сам в начале пути) учились так:

1) начинали штудировать учебник;

2) пытались что-то из него повторить;

3) это что-то не желало работать;

4) вновь и вновь перечитывали материал, пока не удавалось разобраться в проблеме;

5) PROFIT!

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

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

Посмотрите, как функционирует уже работающее приложение

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

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

Я предлагаю вам взять любое популярное приложение с открытым кодом и изучить его. Для поиска объекта исследования воспользуйтесь сайтом GitHub. Отдельно рекомендую вам научиться скачивать код, собирать и запускать его самостоятельно. Будет очень круто, если в это время с вами сможет побыть опытный программист и помочь вам в наиболее трудных моментах! Но если таких знакомых у вас нет – ничего страшного.

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

Вы совершенно точно будете ощущать дискомфорт. Скорее всего, вы даже почувствуете, что не понимаете ровным счетом ничего.

Как я уже говорил – это нормально. Если вы сможете понять хотя бы пару строчек, это будет очень круто. А если вам удастся изменить пару параметров так, что код запустится, а в приложении что-то изменится, то вы – огромный молодец!

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

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

Просмотрите пару качественных материалов по теме

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

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

Программка Hello World

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

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

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

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

В учебнике, посвященном вашему языку программирования, наверняка есть текст этой программы. Если это не так, сделайте в Google запрос «Hello World + твой язык программирования». В Google есть все. В процессе создания программы Hello World вы поймете, как выглядит базовая структура программ на этом языке программирования.

Изучите базовые конструкции и попрактикуйтесь на реальных задачах

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

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

• Возможность вывода на экран.

• Базовые математические действия.

• Хранение информации в виде переменной.

• Организация кода с помощью функций, методов или модулей.

• Вызов функции или метода.

• Булева алгебра.

• Операторы if/else.

• Циклы.

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

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

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

Усвойте разницу между функциями языка и библиотеками

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

Однако, как я уже сказал, знать, где находится грань между библиотекой и самим языком, необходимо.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Давайте предположим, что вы изучаете 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 не нанимает сотрудников без диплома о высшем образовании, однако я стал исключением. Так произошло, потому что я доказал свою квалификацию, когда работал сдельно.

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

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

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

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

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

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

На страницу:
5 из 6