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

Сложные простые задачи по программированию

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

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

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

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

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

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

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

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

В реальной жизни программист большую часть времени делает четыре вещи (если говорить только про кодинг):

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

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

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

Вспомните школьных учителей. Кто дал больше всех знаний? Как отразилась строгость преподавателя на качестве вашей подготовки?

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

Главный вывод, который мы сделали: уровень самостоятельности нужно поднимать постепенно (это не то же самое, что уровень сложности). Идеально, если начальное обучение построено максимально просто, в духе «повторяй за мной». Это придаст уверенности и заложит базу. На этом уровне идёт фокус на структуре и синтаксисе. Именно поэтому для совсем новичков мы сделали отдельный проект https://ru.code-basics.com. Короткие уроки, в каждом из которых даётся ровно одна мысль. Например, только вызову функций на бейзиксе посвящёно больше 6 уроков. Для человека, который только начал учить программирование, вызов f(10) и f(x + 5) — абсолютно разные вещи, которые нужно объяснять последовательно, давая возможность как можно чаще пробовать набирать простой код.

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

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

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

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

Прямо сейчас эта идея полностью реализована в профессии PHP-программист. В JavaScript профессиях обновление произойдёт на днях. UPD: Профессии JavaScript уже обновили.

Этот подход базируется на нескольких важных предположениях:

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

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

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

Источник

Какой язык программирования учить прямо сейчас: 9 самых востребованных

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

Самые востребованные языки программирования

Язык программирования — это набор лексических, синтаксических и семантических правил, которые придумали люди, чтобы создавать программы. Изучить язык до начального уровня можно за 6–10 месяцев, но если ошибиться с выбором, язык может устареть, а вы потеряете время и деньги.

Чтобы отслеживать востребованность языков программирования, компании составляют специальные рейтинги. Преподаватель онлайн-школы цифрового творчества и программирования для детей «Кодабра» Николай Ведерников выбрал языки, которые занимают высокие места в рейтингах TIOBE и IEEE. В первый рейтинг попадают языки, на которых написано больше всего строк кода, для второго используют чуть больше критериев. Например, популярность на сайтах для поиска работы, упоминания в сервисах для программистов и соцсетях.

Самые востребованные языки программирования:

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

Стоит ли учиться программированию на C

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

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

Сколько платят программисту. В Москве разработчик на C получает в среднем от 100 тыс. до 250 тыс. руб. В других городах зарплаты меньше — от 50 тыс. до 200 тыс. руб.

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

Стоит ли учиться программировать на Java

Java — кроссплатформенный язык с большим количеством библиотек и большим сообществом разработчиков. Кроссплатформенность — это возможность написать программу один раз и сразу пользоваться ей на нескольких операционных системах: Windows, Linux и MacOS. Благодаря библиотекам Java подойдет практически для всего: работы с графикой, звуком, создания небольших игр. А в большом сообществе начинающий разработчик легко найдет готовые куски кода для разных задач и ответы почти на любые вопросы.

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

Где используют. Java — это язык для всего. На нем пишут мобильные приложения для Android, программы для микроволновых печей и серверы. Для разработки мобильных приложений сейчас все активнее используют язык Kotlin. Но на Java уже написали очень много приложений, которые придется обслуживать и обновлять.

Сколько платят программисту. Зарплаты Java-разработчиков не сильно отличаются от обычных зарплат программистов — от 100 тыс. до 250 тыс. руб. в Москве.

Стоит ли учиться программировать на Python

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

Где используют. Чаще всего на Python создают серверы, обрабатывают данные и разрабатывают нейронные сети. После изучения Python можно работать бэкенд-разработчиком или разработчиком в сфере data science. С помощью Python можно «прикрутить» неочевидные функции к программам — это его главное удобство. Например, создать нейронную сеть для определения степени поражения легких, а заодно в этой же программе сделать просмотр снимков КТ.

Сколько платят программисту. Разработчик в крупной компании в Москве, знающий Python, зарабатывает от 100 тыс. до 250 тыс. руб. При этом спрос на разработчиков в сфере data science растет, поэтому можно рассчитывать даже на более высокую оплату.

Зачем изучать. С помощью Python можно создать бота для мессенджеров или социальных сетей. Или написать программу для парсинга — поиска и переноса информации с разных сайтов в один документ. Такая программа пригодится дизайнерам и журналистам.

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

Стоит ли учиться программировать на C++

С++ — кроссплатформенный язык семейства C с расширенными функциями.

Огромное количество программистов пишут на нем код, делятся библиотеками и шаблонами, отвечают на вопросы новичков.

Где используют. Чаще всего на С++ создают операционные системы, драйверы и утилиты. Делают популярные десктопные приложения серий Adobe и Office. Из-за высокой скорости и производительности C++ используют для разработки компьютерных игр. Например, на нем написан популярный движок Unreal Engine.

Сколько платят программисту. В регионах разработчик на C++ зарабатывает от 50 тыс. до 150 тыс. руб., в Москве — от 100 тыс. до 250 тыс. руб. Зарплата зависит не только от города, но и от сферы — в геймдеве можно заработать больше, чем в разработке системных приложений.

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

Стоит ли учиться программировать на C#

C# (си-шарп) — язык, изначально придуманный компанией Microsoft, чтобы создавать приложения под Windows. Это объектно-ориентированный язык — его сложнее изучать, но проще использовать, например, меньше писать одинаковый код. С помощью С# можно работать с платформой WPF, которая помогает создавать «красивые» оконные приложения. Например, последние версии MS Office.

Где используют. Чаще всего на C# пишут приложения для Windows и создают компьютерные игры. Например, на C# работает популярный движок Unity. Кроме того, на нем можно разрабатывать системные приложения и создавать библиотеки для С++.

Сколько платят программисту. В регионах разработчики на С# получают от 35 тыс. до 130 тыс. руб., в Москве — от 100 тыс. до 250 тыс. руб.

Зачем изучать. С помощью C# можно создать оконное приложение для Windows, например, калькулятор или небольшую игру. Но изучать его сложнее, чем языки для создания мобильных приложений.

Стоит ли учиться программировать на JavaScript

JavaScript — быстрый кроссплатформенный язык для веб-разработки. С помощью кода на JavaScript разработчик «говорит» странице, как она будет реагировать на действия пользователя. С помощью JS можно показывать пользователю информацию без перезагрузки страницы — так работают выпадающие меню, всплывающие окна, оконные клавиатуры.

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

Где используют. JS постоянно используют для веб-разработки. На нем удобно создавать мобильные и десктопные приложения, которые будут работать через браузер. Например, Notion, Discord, Visual Studio Code.

Сколько платят программисту. Разработчик на JavaScript в Москве зарабатывает от 140 тыс. до 300 тыс. руб.

Зачем изучать. С помощью JS можно создать простой сайт или модуль для него, работающий с запросами клиента. Например, онлайн-калькулятор.

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

Стоит ли учиться программировать на PHP

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

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

Сколько платят программисту. В регионах PHP-разработчик получает от 50 тыс. до 120 тыс. руб., в московских компаниях — от 80 тыс. до 220 тыс. руб.

Зачем изучать. Со знанием PHP легко начать карьеру разработчика. Такой разработчик сможет найти работу, даже если у него мало опыта.

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

Стоит ли учиться программировать на R

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

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

Где используют. Чаще всего с помощью R обрабатывают данные в научных исследованиях. На нем создают нейронные сети.

Сколько платят программисту. Разработчики и дата-аналитики, использующие R, зарабатывают от 100 тыс. до 200 тыс. руб. Точная сумма зависит от типа компаний — иногда в научных проектах, получающих международные гранты, можно заработать больше.

Зачем изучать обычным людям. Не стоит.

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

Стоит ли учиться программировать на Arduino

Arduino — это упрощенный диалект C++, на котором пишут только программы для контроллеров Arduino. Но вот эти контроллеры используют почти везде — от устройств для автоматического полива до полноценных систем «умный дом» и разнообразных роботов.

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

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

Сколько платят программисту. В Москве инженеры-электронщики зарабатывают от 50 тыс. до 120 тыс. руб., преподаватели — от 30 тыс. до 100 тыс. руб.

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

Какие языки теряют актуальность

Сомнительная идея изучать Perl в 2021 году, — считает ИТ-предприниматель и идейный вдохновитель школы программирования для детей CODDY Оксана Селендеева. Perl — язык программирования для системного администрирования, веб-разработки, игр. У Perl-разработчиков довольно высокая зарплата — 150 тыс. ₽ в месяц, но начиная с 2017 года вакансий для таких разработчиков почти нет. Лучше обратить внимание на Python. На нем выполняют те же задачи, но язык в 2021 году намного более востребован в ИТ-сфере.

Теряют актуальность и другие языки: Fortran, Objective-C, Haskell, Visual Basic.

По версии Stack Overflow, самые «страшные» языки в 2020 году — VBA, Objective-C, Perl, Assembly, C. «Страшные» означают, что большинство разработчиков, которые сейчас пишут код на этих языках программирования, не планируют продолжать с ними работать.

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

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

Общие тренды ИТ-сферы вне зависимости от языков программирования

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

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

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

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

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

Программирование молодеет. Дети и подростки изучают программирование на онлайн-курсах или самостоятельно. Из-за этого уже в 13–15 лет они могут писать приложения, выкладывать их в Appstore или GooglePlay и даже зарабатывать деньги. Некоторые из них так начинают карьеру разработчика и конкурируют с выпускниками вузов и более старшими коллегами.

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

Еще пять статей о программировании

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *