Как изучить программирование самостоятельно?
Кори Альтхофф — автор, спикер IT-конференций и стартап-консультант. Он ведёт блог Selftaught.blog, основал сервис поиска курсов «Coding List». Сервис рекомендаций Book Authority назвал его книгу «Сам себе программист» одной из величайших книг для программистов за всё время. Она написана на основе его опыта работы инженером-программистом в eBay и нескольких стартапах в Кремниевой Долине и рассказывает о том, как ему удалось стать программистом, несмотря на магистерскую степень в нетехнической сфере — политологии.
«Сам себе программист» — это книга с полным учебным планом, позволяющим самостоятельно овладеть языком Python через необычный подход: сначала — научиться писать код, а затем — изучить теорию. Это пособие ведёт читателя от написания первой программы на Python до прохождения первого технического собеседования.
Сегодня всё больше людей самостоятельно изучают программирование, и, предполагая, что эта тенденция будет развиваться, мы решили обсудить с Кори сложные моменты, с которыми сталкиваются начинающие разработчики. Он рассказал нам, резонно ли изучать одновременно фронтенд и бэкенд, какие проекты ждут начинающих Python-разработчиков и поделился мнением по актуальным вопросам индустрии.
Evrone: Привет, Кори. Спасибо за шанс пообщаться с тобой! Приступим к нашей беседе. Считаешь ли ты, что существует «природная склонность» к программированию, как, например, склонность к музыке или рисованию?
Кори: Я уверен, что некоторые люди имеют природный талант к созданию программ. Это, однако, не значит, что большинство людей не способны программировать.
Я рекомендую прочитать «Код таланта» Дэниела Койла, если вы переживаете, что недостаточно одарены для программирования. Автор прекрасно объясняет, почему природный талант переоценён, и почему ключ к успеху в любом навыке — это не столько дарование, сколько сознательная практика.
Evrone: Современные IDE и редакторы для программистов, такие как VSCode, нередко интегрируют git с причудливым графическим интерфейсом. Как ты считаешь, для новых разработчиков лучше изучать и использовать интерфейс командной строки git или полагаться на интеграцию IDE?
Кори: В своих книге и курсе я учу студентов, как использовать git из командной строки. Интеграция IDE — штука хорошая, но у вас должно быть общее представление о том, что за процессы происходят под капотом графического интерфейса.
Evrone: Какую основную вещь или концепцию труднее всего освоить начинающим разработчикам?
Кори: Первое затруднение для большинства начинающих разработчиков — это функции. Однако самой сложной концепцией для них в большинстве случаев становится объектно-ориентированное программирование. Концепция передачи «self» в качестве параметра в Python особенно сбивает новичков с толку.
Evrone: Должны ли программисты во всём мире уметь читать и писать по-английски в 2020 году? Это обязательный навык для нашей профессии, или без этого можно обойтись?
Кори: Это полезно, но не обязательно; полезно потому, что существует море документации на английском языке. Тем не менее, я выступал на конференции PyCon JP в прошлом году в Токио. Использование Python там велико, но в Японии мало кто говорит по-английски. Это показывает, что вы вполне можете быть успешным разработчиком, не владея при этом английским.
Evrone: Твоя книга «Сам себе программист» закладывает прочный фундамент для любого начинающего разработчика программного обеспечения. Что ты делаешь сейчас, со всей своей популярностью и 50-тысячной группой Facebook в арсенале?
Кори: Прямо сейчас я пишу новую книгу под названием «Сам себе computer scientist». Я объясняю некоторые аспекты computer science и в первой книге, но во второй я углубляюсь в концепции, которые помогут самостоятельно обучающимся программистам на протяжении всей их карьеры.
У меня также есть новый проект «Coding List». Это веб-сервис, который позволяет отфильтровать более двадцати тысяч курсов для программистов по критериям цены, отзывов, тематик и многого другого. Когда вы находите подходящий вам курс, сервис помогает знакомиться с другими людьми, которые обучаются там же.
Evrone: Помогает ли тебе ведение такого огромного сообщества на Facebook находить новые и лучшие способы обучения начинающих разработчиков?
Кори: Определённо. Это помогает увидеть, какие вопросы задают раз за разом — и это одна из причин, по которой я создал «Coding List». Так много людей спрашивали, какой курс лучше всего подходит для разных направлений программирования, и постоянно отвечать на этот вопрос было не очень эффективно. Поэтому я решил создать сайт, который поможет найти лучшие курсы по любому направлению программирования. Подобные инсайты также помогли мне улучшить учебную программу для моего собственного курса.
Evrone: Распространено мнение, что Python — лучший язык программирования общего назначения для новичков. Какой язык ты бы назвал вторым лучшим для обучения? Какие языки тебе нравятся, кроме Python?
Кори: Если бы я не преподавал в первую очередь Python, это был бы либо JavaScript, либо Swift, в зависимости от того, какой областью деятельности интересуется студент. Оба эти языка просты в освоении и пользуются большим спросом.
Evrone: Ты бы рекомендовал разработчику-новичку начинать с простого, но расширяемого «редактора программиста», типа VSCode, или сразу перейти к полнофункциональной IDE, вроде PyCharm?
Кори: В своих книге и курсе я начинаю со среды IDLE. Многие студенты испытывают трудности даже с её освоением, хотя VSCode или PyCharm сложнее.
Мне нравится давать им возможность сначала познакомиться с чем-то простым. Позже я знакомлю их с PyCharm, моей любимой средой разработки. PyCharm имеет кучу полезных функций, которые упрощают рабочий процесс, но в самом начале они вам не нужны.
Evrone: В сообществе Ruby разработчиков существует мнение, что «выбирая язык программирования, вы выбираете проекты, которыми будете заниматься каждый день и то, как вы их будете делать». Что касается Python, какого рода проекты могут ожидать разработчики в начале своей карьеры?
Кори: Одна из причин, по которой я так советую Python для начинающих программистов, заключается в том, что он совершенно универсален. Когда вы изучаете JavaScript, он полезен только в веб-разработке. Вы не будете его использовать для data science.
С Python вы можете работать во многих областях: бэкенд для веб-разработки и разработка приложений, разработка игр, data science и многих других. Поскольку у Python так много применений, уже в начале своей карьеры вы можете выбрать проект по вкусу, что очень круто. Хотя, скорее всего, с Python вы не будете работать над фронтендом сайта или приложения.
Evrone: Полезно ли начинающим разработчикам уже с самого начала изучать новые «асинхронные» библиотеки Python, или такой функционал требует некоторого «полевого» опыта, и лучше изучать asyncio и aiohttp после нескольких лет практики?
Кори: Не думаю, что следует фокусироваться на них в начале профессионального пути. Лучше освоить эти библиотеки позже, когда вы овладеете основами программирования.
Evrone: Такие фичи, как Type Hints и Gradual Typing были привнесены в Python недавно, но уже популярны среди опытных разработчиков и авторов библиотек. А что насчёт новичков? Следует ли им погружаться в изучение типов с самого начала, или лучше поднакопить несколько лет «боевой» практики, прежде чем научиться грамотно расставлять «ловушки» для своих будущих ошибок с помощью типов?
Кори: Когда я только учился программировать, понимание как работают типы стало для меня прорывом. Начинающим программистам важно понимать концепцию типов данных и быть знакомыми с различными типами в их языке программирования. А вот с Type Hinting я бы не спешил. Классная штука, но для новичков не слишком полезная.
Evrone: Что ты думаешь о популярном сейчас направлении full-stack разработки? Есть ли смысл начинающему программисту изучать и писать одновременно фронтенд и бэкенд?
Кори: Я бы такого не рекомендовал. Изучение фронтенда и бэкенда вместе было одной из самых больших ошибок, которые я совершил на своём пути от новичка до опытного разработчика.
Если бы мне нужно было пройти этот путь снова, я бы сосредоточился только на одном аспекте. Когда изучаешь их одновременно, в итоге формируется чувство, будто ни в одном, ни в другом ты не разбираешься на должном уровне.
Чтобы как следует разобраться в одном из этих аспектов, требуется знать так много всего, что хвататься за оба «конца» разработки просто бессмысленно. Лучше стать отличным спецом в чём-то одном. К тому же, так вы не будете делать две работы по цене одной!
Evrone: Для разработчиков обычным делом является изучение новых технологий после работы, и это нередко приводит к «выгоранию». Что бы ты рекомендовал новичкам для обретения баланса между работой и личной жизнью, чтобы программирование буквально не «пожирало» всё их время?
Кори: Занимайтесь спортом! Я снова начал играть в баскетбол несколько лет назад, и это просто совершило чудо с балансом личного и рабочего в моём графике. Мы, программисты, сидим весь день перед экраном, поэтому, чтобы избежать «выгорания», полезно найти активное хобби, типа баскетбола или подобного. Я также играл во фрисби в прошлом, что тоже было очень весело. А ещё я пытаюсь заняться гольфом, но он мне не очень поддаётся.
В одном из своих подкастов Тим Феррисс рассказал о том, как ему нравится устанавливать профессиональную цель и личную цель — например, удвоение дохода для его компании и тягу в 300 фунтов (~137 кг). Таким образом, если одна из них провалится, у него остаётся вторая, что мне кажется отличным советом, и я сам пытаюсь поступать так же.
Evrone: Разработка программного обеспечения — это индустрия, которая покорила мир. Огромное количество профессиональных разработчиков — самоучки. Но что такое, в твоём представлении, хорошее образование для разработчика ПО? Нужна ли нам такая наука, как информатика, или computer science, со всей её математикой, алгоритмами и структурами данных? Или нам нужно что-то другое?
Кори: Проблема, с которой я сталкиваюсь в учебных программах по информатике во многих университетах, заключается в порядке преподавания предметов. Изучать информатику, математику, алгоритмы и структуры данных, если вы хотите сделать успешную карьеру инженера-программиста, безусловно, полезно. Однако начинать обучение с этих дисциплин бессмысленно.
Студенты должны сначала научиться программировать, и увидеть, как это здорово, а потом думать об остальном. В некоторых отраслях, таких как веб-разработка, вам не нужно изучать математику, чтобы быть хорошим специалистом. Делать математику обязательной для изучения базового программирования, как это делают многие университеты, не имеет никакого резона; это только отпугивает от освоения навыков программирования людей, которым не интересна математика.
Кроме того, существует так много бесплатных или недорогих учебных ресурсов, что вкладывать столько времени и денег в высшее образование, когда вы можете научиться программировать самостоятельно, становится всё менее и менее разумно.
Первая книга Кори была переведена на восемь языков и упомянута в разных медиа, например в Forbes. Теперь Кори пишет свою вторую книгу, помогает ученикам в своей группе на Facebook «Self-Taught Programmers» становиться разработчиками, а также развивает сообщество Coding List. Мы рады, что так много людей во всем мире выбирают Python и используют его, как профессиональный ориентир.
Мы стремимся быть в курсе новых технологических разработок и внедрять инновационные инструменты и методы. Если у вас есть идея для проекта, и вы заинтересованы в применении Python, наши разработчики всегда рады обсудить возможность его использования. Неважно на какой стадии находится ваш проект — оставьте свои контактные данные и мы свяжемся с вами, чтобы рассказать, чем можем быть полезны.