Глубокое обучение программированию: что, зачем и как

    Disclaimer: эта статья подготовлена Skillbox совместно с Егором Яковишеном, ведущим разработчиком Setka Editor и трекером ФРИИ.



    В наше время научиться программировать на базовом уровне относительно несложно. К примеру, американский бездомный Лео Гранд, обладавший только начальным образованием, всего за три месяца смог сделать собственное мобильное приложение, получившее название Trees for Cars.

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

    Зачем вообще совершенствоваться?


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

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

    Даже если взять относительно простые задачи — например, локальную автоматизацию процессов путем создания скриптов на VBScript для Microsoft Office, — то и в этом случае остановиться не получится: офисный пакет изменяется, добавляются и убираются определенные функции, меняется сам VBScript. Пара лет — и сегодняшние решения не подходят. Что уж и говорить о языках программирования вроде Ruby или JavaScript, находящихся на передовой линии развития технологий.

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



    Кейсы? Их есть у меня


    Один из ярких примеров того, что может случиться с человеком, который работает годами в одной и той же сфере, не развиваясь, — ситуация, сложившаяся с Flash-разработчиками и с теми, кто решил выбрать Flex — язык интерактивного программирования, опирающийся на Flash. Достаточно долгое время они были «на коне» — очень востребованными и получающими солидные деньги (во всяком случае, больше, чем многие другие ИТ-специалисты). Хорошая работа, уважение коллег — что еще человеку для счастья надо?

    Но спустя некоторое время, с появлением iPhone и провозглашением Стивом Джобсом лозунга «Flash мы поддерживать не будем», от этой технологии стали постепенно отказываться. С течением времени примеру Apple последовали и разработчики под другие платформы.

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

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

    Программист-полиглот или специалист узкого профиля?


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

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

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

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

    Что именно выбрать?


    image

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

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

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

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

    Три кита современного программирования: JavaScript, Python, Java


    Если уж мы заговорили о выборе, то стоит привести конкретные примеры. Так, языки Java Script и Python на данный момент — одни из наиболее перспективных. Первый — потому, что универсален. Второй — потому, что это один из самых простых (относительно) и в то же время трендовых языков для освоения: на нем пишутся проекты из сферы машинного обучения, нейросетей, ИИ. На Python написаны (целиком или частично) различные продукты Dropbox, Google и «Яндекса».

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

    Как стать гуру?


    В принципе, не так уж это и сложно. Главное — понимание основ, гибкий ум, усидчивость и ПРАКТИКА. Да, именно прописными. Дело в том, что никакая теория, сколько ее ни изучай, не поможет стать профессионалом, если нет практического опыта. Это как в языках, на которых говорят люди: можешь запоминать сотни иностранных слов, читать правила грамматики, но если не говоришь и не пишешь, все это уходит в пассив, а с течением времени и вовсе забывается.

    Поэтому есть две основные рекомендации для тех, кто желает совершенствоваться в выбранной сфере:

    • Читать чужой код.
    • Писать свой код.

    Эти советы можно использовать в любом порядке — вреда не будет, только польза. Почему? Чем больше создаешь продуктов, пишешь кода, тем больше практики. Решаются определенные проблемы, складываются принципы работы, формируются навыки. При этом нужно разбирать чужой код. Для новичка это необходимо просто потому, что он мало что знает, и, читая написанное другими, junior сможет понять, что и как устроено. Для middle разбор чужого кода позволяет находить удачные решения проблемы, которая стоит при разработке определенного продукта. Ну а для senior это, во-первых, поиск ошибок в чужом коде и помощь с ними, а во-вторых, самосовершенствование. «Всегда найдется азиат, который делает что-то лучше тебя» — известный мем, но он справедлив, причем не только в отношении азиатов. Изучая чужой код, можно натолкнуться на элегантное решение какого-либо вопроса, для которого до этого приходилось использовать «костыли».

    image

    Сейчас появились сервисы, которые можно назвать Twitch’ем для программистов. Один из них — livecoding.tv. Зарегистрированные на ресурсе программеры пишут собственные программы с демонстрацией работы кода в режиме реального времени.

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

    В качестве вывода можно вспомнить цитату из «Алисы в Стране чудес» (ее знают даже дошкольники, да, но это не отменяет ценность высказывания): «Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!» В самом деле, в быстро меняющемся мире технологий необходимо прилагать солидные усилия, чтобы оставаться хорошим программистом. А чтобы становиться лучше, требуется работать и учиться вдвое, если не втрое больше.
    • +16
    • 18,5k
    • 6
    Skillbox
    102,53
    Онлайн-университет профессий будущего
    Поделиться публикацией

    Комментарии 6

      +4
      Имхо, фреймворки и языки все же вторичны, гораздо важнее понимание железа, парадигм программирования, структур данных и алгоритмов и подобного. А языки и фреймворки осваиваются гораздо проще перечисленного. А, еще знание предметной области, логическое мышление, умение решать задачи и практики программирования. Имхо.
      • НЛО прилетело и опубликовало эту надпись здесь
          0
          Проблема в «хороший», таких все же очень мало. Да и против курсов как таковых я ничего не имею, хороший способ «обзор» получить. Но одних курсов все же мало, тем более чисто по языкам и фреймворкам. Есть ведь курсы и по железу, и по практикам программирования, и по ОС, и по сетям, и по железу, и по математике. По итогу может выйти и не хуже чем из того же вуза хорошего. Просто слишком уж много в статье упора на «технологическую пену».
          • НЛО прилетело и опубликовало эту надпись здесь
              0
              Эм, курсера, степик. Просто самостоятельно по книгам и учебникам, возможно репетиторы.
        +1
        Недостаточно следовать только новым веяниям, улавливать модные направления, чтобы быть в тренде и оставаться гуру. Движение вглубь зачастую предполагает и освоение фундаментальных технологий. Мне не так давно достался один ios-проект, где значительная часть написана на C++. Но больше всего что меня сначала смутило, что помимо свойственных ios техник многопоточности также использовался API POSIX Threads, который я изучал еще лет пятнадцать назад и который давно считал безнадежно устаревшим в наши-то времена thread-пулов, экзекьюторов, фьюч, akka и других новомодных штуковин. Но в процессе поддержки этого кода оказалось, что в некоторых местах гораздо удобнее использовать C++ классы-обертки над примитивами pthreads, чем тащить логику в objective-c и использвать там мощные GCD и Operations. Вопрос, как мне кажется, не в том, модная ниша или нет, а насколько ты профессионал в своей области.

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

        Самое читаемое