Пришло время взяться за несколько небольших проектов, для которых потребуется использование языка программирования на определенной платформе.
Давайте предположим, что вы изучаете Java.
До сих пор вы писали код на Java, который сработает на любой платформе, где запускается Java, поскольку вы в основном использовали стандартные библиотеки и просто работали с вводом и выводом на экран или в файл. Теперь вы, например, решаете использовать Java для создания приложения для Android. Вам нужно будет узнать, как создавать приложения для Android, и о фреймворке Android. Однако вы уже знакомы с Java, поэтому вам не придется учить огромное количество концепций сразу.
Вы, конечно, можете изучать Android и Java вместе – на самом деле я создал курс, где именно этому и учил, – но если вам хочется по-настоящему овладеть языком и избежать путаницы, то разучить язык отдельно от платформы или технологии, а затем объединить их, вероятно, будет намного проще.
Теперь вам пора развивать конкретные, специализированные навыки работы с изучаемым вами языком программирования, которые будут полезны для получения работы.
Выберите любую платформу или технологию, с которой, как вам кажется, вы хотите работать в будущем, и начните создавать на ней небольшие приложения. Пока я рекомендую вам сосредоточиться только на одной технологии или платформе. Вы всегда сможете добавить еще одну позже.
Так вы не только ограничите то, чему вам предстоит научиться на данном этапе, но и приобретете более глубокие знания и компетентность в конкретной технологии. Это поможет вам стать гораздо увереннее в себе и значительно повысит востребованность ваших навыков.
Решайте сложные алгоритмические задачи
Вы уже должны быть достаточно знакомы с изучаемым языком программирования. Вы должны довольно хорошо знать его и использовать в разных приложениях. Вы должны были выбрать конкретную технологию, применить к ней свои навыки и с легкостью создавать с ее помощью базовые приложения.
Тем не менее вы наверняка по-прежнему не чувствуете, что в совершенстве владеете языком программирования.
Не волнуйтесь, это тоже нормально.
Когда я только изучал C++, я помню, что даже после того, как я понял все об этом языке, использовал его для создания нескольких приложений и даже поработал программистом, пишущим код на C++, я все еще не чувствовал, что по-настоящему овладел этим языком.
Я чувствовал себя хорошим программистом на C++, но не отличным.
Мне хотелось улучшить свои навыки работы с языком, но я не знал как.
Затем я обнаружил сайт под названием TopCoder, где проводились соревнования для программистов. Каждую неделю там появлялся новый набор задач по программированию, и можно было посоревноваться с другими программистами в решении сложных алгоритмических задач.
Сначала это было ужасно. Я не мог решить даже самую простую задачу. Я смотрел на решения других людей и понятия не имел, как они к этому пришли или даже как работает их код.
Они использовали C++ таким образом, какого я и представить себе не мог.
Но со временем, пытаясь решать все новые задачи и глядя на то, как их решают другие люди, я постепенно начал становиться лучше… намного лучше. Я начал видеть закономерности в том, как решались определенные типы задач. Я начал по-настоящему понимать, как использовать функции C++, которые я раньше игнорировал. Я узнал, как эффективно использовать стандартные библиотеки, языковые возможности и структуры данных для решения сложных задач.
Я стал разбираться в C++ не просто хорошо, а превосходно. Наконец-то я почувствовал, что овладел этим языком.
Я хочу, чтобы вы поступили так же.
Вам не обязательно заходить на TopCoder, есть множество других мест, где вы можете попрактиковаться в решении задач программирования алгоритмического типа.
Я уже упоминал об одном хорошем источнике подобных задач, но вот еще несколько:
• «Карьера программиста» Гейл Лакманн Макдауэлл;
• «Жемчужины программирования»[10 - Издавалась на русском языке. Питер, 2002 г. – Прим. ред.] Джон Бентли;
• Проект Эйлер[11 - Проект Эйлер – некоммерческий проект в Интернете, объединяющий любителей математики и программирования. Проект был запущен в 2001 году Колином Хьюзом и сейчас поддерживается небольшой группой энтузиастов. Участники проекта могут выбрать любую из существующих в текущий момент задач и решить ее с помощью любого известного им языка программирования. После ввода правильного числового ответа участник получает доступ к форуму по данной задаче, где участники обсуждают и сравнивают между собой найденные ими алгоритмы. – Прим. ред.];
• Codility;
• Interview Cake;
• TopCoder.
Не думайте, что создать их будет просто, наоборот. И это нормально. Со временем вы поймете, что все задачи делятся на несколько типов, и научитесь с ними работать. Перенимайте опыт других людей, смотрите, как они справились с теми проблемами, с которыми столкнулись вы. Старайтесь понять, почему те, кто успешно решил задачу, выбрали именно такое решение. Это один из лучших способов совершенствования себя как программиста.
Лично я для обучения использую ресурс TopCoder. Решив предлагаемые на этом ресурсе задачи с помощью изучаемого вами языка программирования, вы повысите степень своего мастерства и сможете с легкостью проходить собеседования на должность разработчика, выгодно отличаясь от других кандидатов.
Глава 7. Высшее образование
В следующих трех главах я расскажу вам о трех путях (или стратегиях) становления вас как разработчика. Мы поговорим о высшем образовании, о курсах по программированию, а также о самообразовании. Все эти варианты имеют право на существование, но я хотел бы обратить ваше внимание на плюсы и минусы каждого из них и поговорить о наилучших способах использования каждого из этих подходов.
Давайте начнем с наиболее традиционного пути – высшего (или среднего специального) образования. Думаю, что в рассказах о том, что такое «университет» или «колледж» вы не нуждаетесь. Гораздо лучше будет поговорить о том, к чему следует быть готовыми, отправляясь по этому пути.
Выбор данного пути означает, что ваше обучение будет проходить в аккредитованном учебном заведении по такой специальности, как, например, «информационные технологии», «вычислительная математика» или что-либо подобное. Так начинает большинство программистов. Хороший это способ или лучший? Попробуем разобраться.
Преимущества
Давайте сначала взглянем на преимущества этого варианта. Ваши родители наверняка думают, что плюсов тут огромное количество. Может быть, они даже считают, что получение высшего образования является единственным приемлемым вариантом. Я же постараюсь быть более объективным.
Честно говоря, я не фанат высшего образования, но определенная выгода в получении корочек (красных или синих – неважно) все же есть.
Множество компаний все еще нанимают только тех, кто имеет высшее образование
Несмотря на то, что мы разменяли третье десятилетие XXI века, многие компании относятся к вопросу найма сотрудников очень консервативно. Особенно это касается разработчиков.
Объявляя вакансию, многие фирмы желают видеть только тех кандидатов, у кого в кармане имеется диплом аккредитованного высшего учебного заведения или колледжа. Разумеется, это не означает, что в такие компании невозможно попасть без бумаги об окончании высшей школы. Но сделать это будет нелегко. Поделюсь собственным опытом.
Незадолго до окончания колледжа меня наняли на работу в Hewlett-Packard. К тому времени я уже несколько лет работал программистом. Фактически я работал в HP по договору подряда. Обычно Hewlett-Packard не нанимает сотрудников без диплома о высшем образовании, однако я стал исключением. Так произошло, потому что я доказал свою квалификацию, когда работал сдельно.
Мне пришлось преодолеть огромное количество трудностей, чтобы получить предложение о работе. А когда я наконец его получил, то был… разочарован.
Вместо того чтобы принять во внимание мой опыт и способности, меня отнесли к категории сотрудников «без высшего образования». Это означало, что из всего диапазона зарплат мне назначили самую низкую, сказав при этом, что я должен радоваться самому факту приглашения на работу.
Я рассказываю вам все это лишь для того, чтобы показать, как сильно в некоторых компаниях влияет на вашу карьеру наличие документа об окончании вуза. Получив диплом университета или колледжа, вы откроете для себя куда больше возможностей, чем те, кто окончил курсы или является самоучкой.
Тем не менее следует знать, что существуют компании и с другим подходом, которые возьмут вас на работу и без диплома, просто в таком случае выбор будет более ограничен. К сожалению или к счастью, но сделать с этим ничего нельзя. Остается лишь принять ситуацию как есть.
Подытожу: диплом об окончании университета предоставляет больше возможностей.
Хорошее понимание основных концепций информационных технологий
Зачастую бывает так, что программисты-самоучки, являясь очень хорошими специалистами, не обладают некоторыми базовыми знаниями, которые можно получить в колледже или университете. Сегодня эти навыки менее важны, чем практические аспекты разработки программного обеспечения, но я считаю, что каждый разработчик должен знать об операционных системах, структурах данных, алгоритмах, логике предикатов, компьютерной архитектуре и многих других темах, встречающихся в большинстве учебных программ высших заведений. Эти темы довольно сложно изучить самостоятельно, особенно если вы даже не подозреваете об их существовании.
В следующей главе я расскажу вам о том, как в некоторых наиболее крутых компаниях проводятся собеседования разработчиков, в процессе которых интервьюер пытается выяснить, понимает ли претендент все те основные концепции, которые изучаются в вузах.
Я человек весьма прагматичный и обычно выступаю против традиционных систем образования, но также считаю, что большинству программистов необходимо иметь некоторые теоретические знания, не относящиеся непосредственно к написанию кода, но лежащие в его основе.