С чего начать изучать компьютерные технологии

Обновлено: 03.07.2024

● какие языки пользуются наибольшей популярностью у специалистов и работодателей в 2021 году.

● Что выбирать сначала — язык программирования или специализацию.

● Какие дополнительные навыки вам понадобятся и какие моменты необходимо учитывать.

● Что нужно для уверенного старта в профессии и как не облажаться, начиная с нуля.

Все языки, которые потребуются для работы в айти в целом, в одну статью не уместить. Мы опишем лишь те, которые пользовались наибольшим спросом в 2020 году и точно пригодятся вам в 2021-м.

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

Выбор направления для себя: какие языки учить?

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

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

Как выбрать направление – куда податься

Первое, с чем вам нужно определиться, — со специализацией, которую вы хотите освоить: веб-разработка (интереснее вам фронтенд или бэкенд), мобильные и десктопные приложения, геймдев, научные направления и прочая. Это решение напрямую влияет на то, какие языки программирования вам понадобятся для построения карьеры Первое, с чем вам нужно определиться, — со специализацией, которую вы хотите освоить: веб-разработка (интереснее вам фронтенд или бэкенд), мобильные и десктопные приложения, геймдев, научные направления и прочая. Это решение напрямую влияет на то, какие языки программирования вам понадобятся для построения карьеры

Веб-разработка:

А ведь есть еще разработка клиент-серверных приложений, системное программирование, работа с базами данных (СУБД ) и информационной безопасностью , тестирование, наука (нейронные сети, моделирование структуры ДНК и т.д.), Интернет вещей (IoT), DevOp s и другие более специфичные и узконаправленные направления. Сначала определитесь, что вам интересно, затем подбирайте языки программирования из основных рейтингов.

Учитывайте свой темперамент

Например, если вам нравится:

● работать с «железом» и серверной частью, отдайте предпочтение embedded- или backend-разработке (дополнительные навыки — администрирование систем, работа с базами данных);

● заниматься визуалом, клиентской частью и маркетингом , ваш вариант — frontend и мобильные приложения (нужно уметь работать с графическими редакторами, дизайном, типографикой, пользовательским опытом);

● разрабатывать игры и все, что с ними связано — ваш путь однозначно в gamedev;

● проводить исследования и делать сложные математические вычисления — добро пожаловать в data science;

● искать чужие ошибки и указывать на них — попробуйте себя в роли тестировщика.

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

Определитесь со своей целью

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

Учитывайте скорость изучения языка

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

Ситуация на рынке труда

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

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

Ваш бюджет и время, которым вы располагаете

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

Техническая база

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

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

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

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

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

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

Есть бесплатные материалы и от онлайн-школ, например, Code-Basics от Хекслет . Аналогичные предложения есть и у Microsoft, SkillFactory , Code School и ряда других учебных заведений , причем если хорошо поискать, вы найдете как видеозаписи и просто полезные подборки, так и полные курсы с лекторами , практическими занятиями и даже обратной связью, включая проверку домашних заданий (последнее в бесплатных программах – редкая находка, но бывает).

Как учить язык новичку:

● Выбираем отрасль программирования и язык.

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

● Практикуемся — пишем код, разбираем чужие работы и алгоритмы, вдохновляемся, тренируемся. Для этих целей вам пригодятся инструменты а-ля Microsoft visual studio , Git и аналоги.

● Ищем работу или разовые заказы на фриланс е и применяем знания — можно пойти джуном или стажером для начала.

● Параллельно углубляем знания, совершенствуемся, следим за тенденциями и обновлениями.

Важно: для знакомства с программированием и понимания, подходит вам выбранный язык или нет, вам не нужна научная степень по информатике (Computer Science ) и годы сидения в отечественных или заграничных вузах .

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

Пара слов о платных курсах

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

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

Преимущества курсов от профильных учебных заведений:

  1. Качественная, структурированная образовательная программа с обилием теоретических лекций , практических задач и упражнений, тренажерами, тестированием , видеолекциями , онлайн-уроками , вебинарами, мастер-классами.
  2. Вас обучают программированию практикующие профильные эксперты своего дела и опытные наставники , у многих онлайн-школ – звездный преподавательский состав с ведущими специалистами отрасли, в том числе действующими лекторами в вузах .
  3. Во многих программах по окончании обучения слушатели курса получают сертификат, диплом или свидетельство/удостоверение о повышении квалификации или профессиональной переподготовке ;
  4. Также многие образовательные учреждения помогают с трудоустройством – предлагают консультации по составлению портфолио и резюме (которые пополняются уже в процессе обучения ), курируют при прохождении собеседований, гарантируют стажировк у и/или трудовые места в компаниях-партнерах. То есть после окончания срока обучения и сдачи курсовой/дипломной работы вы создадите полноценное конкурентоспособное портфолио и сможете найти работу (в отдельных случаях учебные центры возвращают деньги, если выпускник не трудоустроится в определенный срок по завершении курса) .
  5. Есть возможность подобрать учебную программу под свой бюджет – стоимость курсов варьируется, часто образовательные порталы и школы программирования предоставляют различные тарифы на выбор в одном онлайн курсе . Также нередко есть рассрочка , можно приобрести курсы со скидкой , по промокод у, за счет работодателя. Еще большинство учебных заведений предлагает удобные способы оплаты на выбор.
  6. Практически в каждом курсе, хоть вводном/базовом, хоть в продвинутом , есть открытые или закрытые чаты и сообщества для учеников, выпускников, наставников, менторов и кураторов – вы будете делиться успехами, задавать вопросы, получать обратную связь и найдете профессиональную поддержку. Живое общение в тематической тусовке единомышленников поможет вам быстрее обучиться программированию , познакомиться с нужными людьми, включая потенциальных работодателей, и быть в курсе событий.
  7. Можно выбрать продолжительность под свой уровень подготовки и количество свободного времени – длительность обучения на курсах разная, от нескольких часов до пары лет.

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

Рейтинг популярных языков программирования в 2021 году

Теперь давайте разберем, какие языки программирования были наиболее востребованными в 2020-м и продолжат быть популярными в 2021 году.

Мы составили эту подборку на основе рейтинга института инженеров электротехники и электроники I EEE Spectrum . Он формируется на основе 11 показателей и метрик из 8 источников, среди которых Google, Git Hub, Career Builder, the IEEE, Hacker News, Stack OverFlow, Reddit и T witter . IEEE Spectrum оценивает языки комплексно — по отраслям и нишам, с точки зрения построения карьеры и количества вакансий, на основе упоминаний в соц.сетях. По этим причинам за основу мы взяли именно этот рейтинг.

Мировое господство, по данным IEEE Spectrum, в 2020 году ожидаемо завоевали Python , Java и С . Рассмотрим топ-20 популярных языков программирования, с которыми, по статистике, вас ждет перспективное будущее. В нашем списке они идут в порядке убывания.

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

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

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

Шесть частых ошибок в обучении

Но для начала рассмотрим 6 частых ошибок в обучении, которые мешают нам достичь цели:

  • Первая – это перепрыгивание: неуверенность в своем выборе. Как это обычно происходит? Решили мы изучать, скажем, верстку сайтов. Собрались, настроились, прошли часть пути, и тут наш сосед Вася говорит: «Слушай, да кому нужен этот HTML CSS, учи PHP». А Петя возражает: «PHP? Зачем, если есть конструкторы». Но Олег всех перебил и молвил: «Все это детские игрушки, Python нынче в моде». В итоге мы мечемся от курса к курсу, от технологии к технологии, что скорее всего сделает из нас разве что недоверстальщиковнаpythonеподphpконструкторы? Что?
  • Вторая ошибка – это спешка. Мы всегда хотим все и сразу. «А посмотрю-ка я весь курс за неделю и пойду работать!», – думают многие из нас. В итоге знания очень поверхностные и сырые. И как дело доходит до реальной практики – получается, что знать знаем, но сделать ничего не можем
  • Третья ошибка – слишком много знаний сразу. Как это ни странно, но бывает, мы пытаемся заучить слишком много. Больше, чем это нужно для начала работы. Мол, мы хотим во всем разбираться досконально. И это здорово, но большой объем информации на неокрепшие мозги может произвести обратный эффект, и даже напрочь отбить желание учиться.
  • Четвертая ошибка не так очевидна. Она возникает, когда мы учимся делать что-то конкретное до того, как усвоены знания самой технологии. Мы слепо повторяем, что не понимаем, как работает изнутри. В итоге умеем делать только некие штуки, но очень плохо владеем технологией и не можем сделать ничего нового, нестандартного.
  • Ну и конечно же, нас может одолеть лень, прокрастинация, неспособность организовать процесс. И еще много непонятных заумных слов. В итоге мы вешаем спортивный костюм на тренажер и ложимся на диван. В этот список я добавил бы еще одно слово – это страх. «У меня не получится, там большая конкуренция, а что если я не смогу выполнить заказ» и т. д. Да, именно такие мысли, вызванные страхом, также являются нашей ошибкой и мешают достичь желаемого результата.
  • Также, пользуясь именно бесплатным контентом, многие из нас допускают еще одну грубую ошибку. Это пренебрежение и приуменьшение важности такого контента. Одним словом, несерьезное к нему отношение. Мы думаем, если это бесплатно, значит – плохое, неточное или его недостаточно. Мы привыкли: за что-то стоящее с нас всегда будут требовать деньги.

Советы по выбору специальности

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

Вот вам список IT — специальностей по категориям.

Интенсивность (график) обучения

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

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

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

Например, график «два раза в неделю». Что это значит? Это значит, что два раза в неделю вы смотрите новый урок, то есть получаете новую информацию.

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

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

Что же делать между уроками? Практиковать полученную информацию!

Советы по практике

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

Во время практики работайте с небольшими объемами. Его всегда легче доводить до ума. Причем не только физически, но и морально. На вас не давит большой объем, не заставляет ускоряться. Тем более, скорее всего, у вас вряд ли будет получаться нормально сделать что-то крупное. Этот факт ударит по самооценке и мотивации. А нам это точно не нужно. Намного лучше во время обучения практиковаться на мелких объемах, но делать их хорошо.

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

Во время практики экспериментируйте! Помимо явных задач, например, домашек, работайте с несуществующими задачами. Напишите на листочке вопрос «А что если?», приклейте на монитор. И каждый раз, работая с той или иной темой, задавайте себе этот вопрос и экспериментируйте!

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

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

Опорные пункты технологий

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

В верстке это строчная/блочная структура, позиционирование, модули построения структур (flexbox и grid), адаптивная верстка и, конечно, базовый JavaScript.

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

Как бороться с ленью и страхом

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

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

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

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

Главная проблема самообучения

Главная проблема самообучения, которая все-таки остается, – это отсутствие фидбека о своем развитии.

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

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

Как выбрать платный курс

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

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

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

Вот вам пример: если цель курса – научиться вырезать из дерева круг, то это не сделает из вас мастера по дереву. А вот научившись владеть инструментом, методиками и думать, как мастер по дереву, – можно вырезать все что угодно, решать нестандартные задачи и успешно развиваться уже самостоятельно.

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

Стоит ли поступать в университет?

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

Стоит ли читать книги?

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

Как конспектировать материал?

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

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

Какие программы и инструменты использовать?

Что же насчет программ и инструментов? Многие из вас спрашивают, какой редактор выбрать? Каким сборщиком пользоваться и т.д. Спешу вам сообщить, что никакие саблаймы, вс коды, галпы, вебпаки и фотошопы с фигмами не сделают из нас специалистов. Все это инструменты, которые нужно использовать только тогда, когда они необходимы – для помощи в решении или оптимизации той или иной задачи. И выбор того или иного инструмента должен соответствовать этой задаче. Не стоит ездить на БелАЗе за хлебом, а на Порше возить картошку. Это неудобно и нелепо.

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

На чем сосредоточится во время обучения?

Так, что же самое важное? На чем сосредоточиться во время обучения? Для этого нужно понять, что именно на самом деле делает нас специалистами. Мое мнение таково, что специалист – это не тот, кто лучше всех изучил некий язык программирования, либо помнит все HTML теги; и точно не тот, кто хорошо владеет сразу тремя редакторами кода или сборщиками. Все это лишь инструменты для реализации задач, которые решаются у нас в головах. И чем быстрее, правильней и лучше мы их умеем решать, тем более востребован и дороже наш труд.

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

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

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

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

Софт скилы (Soft Skills)

Также сегодня стоит уделять немалое внимание так называемым софт-скилам. Вот ряд навыков, которые стоит развивать в IT-сфере:

Для большинства программистов Computer Science — факультет в зарубежных вузах, целиком и полностью посвящённый программированию, математике и всему, что связано с разработкой программного обеспечения. К счастью, в современном мире необязательно инвестировать тысячи долларов и 4 года своей жизни в образование, ведь существует бесчисленное множество онлайн-курсов, книг и других ресурсов для изучения компьютерных наук.

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

  • Какие дисциплины следует изучать и почему?
  • Какие из доступных ресурсов, книг, серий лекций для конкретной дисциплины имеет смысл посмотреть?

В качестве ответа приведём список материалов, опубликованный Озаном Онай (Ozan Onay) и Майлзом Бёрном (Myles Byrne) — инструкторами в школе компьютерных наук Брэдфилда в Сан-Франциско. Данная подборка литературы и курсов основана на личном опыте обучения сотен программистов-самоучек.

Зачем изучать компьютерные науки?

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

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

25–26 ноября, Москва и онлайн, От 24 000 до 52 000 ₽

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

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

Дисциплины

Программирование

Лучшая книга:

Структура и интерпретация компьютерных программ

Львиная доля студентов Computer Science начинают с «вводных курсов» по программированию. Однако такие курсы будут полезны не только новичкам, но и вполне себе специалистам, которые по какой-либо причине пропустили некоторые базовые для программирования вещи.

Мы рекомендуем взять во внимание классическую «Структуру и интерпретацию компьютерных программ». Прочтите как минимум три главы приведенной выше книги, выполняя упражнения для практики. Для тех, кому данная книга кажется слишком сложной, рекомендуется «How to design programs». Тем же, кому она наоборот кажется слишком лёгкой, следует обратить внимание на «Concepts, Techniques, and Models of Computer Programming».

Можно также послушать лекции университета MIT по данной теме. Как альтернативу мы рекомендуем прослушать лекции Брайана Харви из университета Беркли, особенно, если для вас это в новинку.

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

Архитектура ЭВМ

Лучшая книга:

Цифровая схемотехника и архитектура компьютера

Лучшая серия лекций: Berkeley CS 61C

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

The elements of Computing Systems — амбициозная книга, которая даёт понимание того, как работает компьютер. Каждая глава — строение одной маленькой детали большой системы: от написания логики на HGL (языке описания аппаратуры) через центральный процессор к созданию тетриса.

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

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

Как только вы почувствуете себя в своей тарелке, читая эту книгу, смело переходите на Computer Organization And Design, отличный текст, который стал своего рода классикой. Также обратите внимание на курс CS61C, лекции которого доступны онлайн.

Алгоритмы и структуры данных

Лучшая книга:

Обложка книги «Алгоритмы Руководство По Разработке»

Алгоритмы Руководство По Разработке

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

Есть сотни книг для изучения алгоритмов, но наш фаворит — «Алгоритмы Руководство по разработке» от Стивена Скиена. Наш выбор пал именно на неё, потому что автор определенно любит то, что он делает и хочет донести свои знания до читателя.

Для тех же, кто предпочитает лекции в формате видео, Скиена предлагает свой онлайн-курс. Также следует обратить внимание на курс Тима Рафгардена, доступного на Lagunita (сервис от университета Стэнфорда) или на Coursera. Материал обоих авторов очень полезен и информативен и кому из них уделить внимание — решать вам.

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

В завершение, мы настоятельно рекомендуем How to solve it — великолепный материал для практики решения задач. Подходит как тем, кто изучает компьютерные науки, так и математикам.

Математика для компьютерных наук

Лучшая книга:

Mathematics for Computer Science

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

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

Хорошим началом изучения дискретной математики является сборник лекций от László Lovász. Профессор проделал хорошую работу, чтобы сделать математику понятной и интуитивной, так что его работы куда больше подойдут новичкам, чем формальные математические тексты.

Для большего погружения советуем Mathematics for Computer Science — записи с лекций по одноименному курсу MIT, которые по объёму тянут на полноценную книгу. Видео данных лекций, кстати, тоже в свободном доступе.

Для линейной алгебры мы предлагаем начать с плейлиста Основы линейной алгебры.

Операционные системы

Лучшая книга:

Operating Systems: Three Easy Pieces

Лучшая серия лекций: Berkeley CS 162

Operating System Concepts и Modern Operating Systems — классика в вопросе операционных систем. Обе довольно часто подвергались критике в основном за то, что не являются 1000-страничными быстроустаревающими энциклопедиями, новое издание которых приходится покупать каждые пару лет.

Существует ещё одна книга по операционным системам, которую мы также очень рекомендуем к ознакомлению. Three Easy Pieces: структура повествования книги делает её легкой к восприятию, а задания помогут закрепить полученные знания.

После прочтения указанных выше книг имеет смысл пройтись по конкретным операционным системам и прочесть следующее: A commentary on the unix operating system, The design and implementation of the freeBSD operating systems и Mac OS internals.

Идеальный способ закрепить полученные знания — это прочесть код небольшого ядра и внести в него свои изменения. Как вариант можно взять XV6 — современную реализацию 6 версии Unix для архитектуры x86, написанную на ANSI C. В приведённой выше Three Easy Pieces есть раздел с заданиями с XV6, полный интересных идей для потенциальных проектов.

Компьютерные сети

Лучшая книга:

Обложка книги «Computer Networking: A Top-Down Approach»

Computer Networking: A Top-Down Approach

Лучшая серия лекции: Stanford CS 144

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

Наш фаворит в этом вопросе — Computer Networking: A Top-Down Approach. Небольшие проекты и задания для практики на протяжении всего материала весьма интересны и стоят вашего внимания. Также следует обратить внимание на Wireshark labs, любезно предоставленные автором книги.

Для тех же, кто предпочитает просмотр лекций чтению книг, мы рекомендуем серию лекций от университета Стэнфорд Stanford CS 144.

Базы данных

Лучшая книга:

Обложка книги «Readings in Database Systems»

Readings in Database Systems

Изучение баз данных требует куда большего упорства, чем нужно для других тем, так как базы данных —относительно новая область компьютерных наук (с 1970-ых). Её основы скрыты от нас по вполне себе понятным коммерческим причинам. К тому же многие потенциальные авторы книг по базам данных предпочли сами стать разработчиками и основали свои компании.

Учитывая приведенные выше обстоятельства, мы настоятельно рекомендуем новичкам избегать книжек и начинать прямиком с записей CS186 весны 2015 от Джо Геллерштейна из университета Беркли. После данного курса уже можно переходить к книжкам.

Одна из них — это Architecture of a Database System от того же профессора из того же университета. Книга даст читателю углубленный взгляд на реляционные базы данных и послужит отличным скелетом для будущих знаний в этой области.

Readings in Database Systems, также известная как красная книга по базам данных (никто не вымирает), представляет собой сборник публикаций по данной теме. Для тех, кто осилил CS186, эта книга может стать следующей остановкой.

Если вы настаиваете на том, чтобы начинать изучение баз данных по книжкам, то советуем обратить внимание на Database management systems.

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

Под конец, моделирование данных — один из самых пренебрегаемых аспектов в изучении баз данных. Здесь нашим фаворитом является Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World.

Языки и компиляторы

Лучшая книга:

Compilers: Principles, Techniques and Tools

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

Классикой в данном вопросе является Compilers: Principles, Techniques and Tools. К сожалению, этот материал больше подходит учителям, нежели самоучкам. Однако книга отлично подойдёт для непоследовательного чтения, для выхватывания отдельных кусков из материала и изучения по ним. К тому же, если у вас будет учитель, это лишь ускорит ваше обучение.

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

Потенциальной альтернативой этой книге может стать Language Implementation Patterns. Она написана с упором на инженеров, которые собираются практиковаться на языках вроде DSL.

В качестве проекта для закрепления материала можно написать свой компилятор для простенького языка вроде COOL. Те, кому данный проект кажется невыполнимым, могут начать с чего-то вроде Make a Lisp.

Распределённые системы

Лучшая книга:

Обложка книги «Distributed Systems, 3rd Edition by Maarten van Steen»

Distributed Systems, 3rd Edition by Maarten van Steen

Число компьютеров и их разнообразие увеличилось за последние несколько десятков лет. Если раньше крупные компании закупали огромные сервера для обеспечения работы каких-либо программ, то сегодня нам кажется очевидным тот факт, что даже самые незначительные программы работают на нескольких компьютерах одновременно. Распределённые системы — наука о том, как это обеспечить.

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

Можно также обратить внимание на серию лекций MIT 6.824, но, к сожалению, качество записи звука оставляет желать лучшего.

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

Часто задаваемые вопросы

Что насчет искусственного интеллекта и графики?

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

  • ИИ: пройдите введение в ИИ от университета Беркли и выполните проект Pacman. Прочтите великолепную книгу от Рассела и Новрига Artificial Intelligence: A Modern Approach;
  • Машинное обучение: пройдите этот курс на Coursera и убедитесь, что действительно понимаете смысл повествования и основы машинного обучения, прежде чем переходить на Deep Learning;
  • Графика: ознакомьтесь с серией лекций из университета Беркли CS184 и прочтите книгу Computer Graphics: Principles and Practice.

Насколько важно строго следовать порядку, приведенному в статье?

На самом деле, все 9 дисциплин достаточно часто пересекаются. К примеру, возьмите дискретную математику и алгоритмы: изучение математики поможет вам в освоении алгоритмов. Знание алгоритмов, в свою очередь, даст стимул погрузиться в дискретную математику. В идеальном сценарии программист достаточно часто повторяет данный материал в своей карьере.

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

Что общего у данного списка с Open Source Society или FreeCodeCamp?

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

Касательно FreeCodeCamp, данный ресурс сконцентрирован на программировании, а не на компьютерных науках.

А где же язык X?

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

Почему вы до сих пор рекомендуете книжку с драконами (Compilers: Principles, Techniques and Tools)?

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

Читайте также: