Кодить что это такое


​Как научиться кодить? Подборка ресурсов

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

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

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

Среди наиболее интересных сайтов можно назвать:

Geek Times. Тут вас ждёт 11 онлайн-курсов в видео-формате. Здесь уже всё распределено по отдельным урокам. Не нужно искать, где начало, а где конец, как на YouTube. Регистрация простая и быстрая. Доступ ко всем материалам бесплатный. Большая часть из них доступна постоянно, но есть такие курсы, которые выходят строго в определённое время.

Geekbrains - основы программирования

Стартует программа 15 января и продолжится в течение двух недель. Еженедельно будет 2 урока, стартующие в 19-00 (часовой пояс +2 GMT).

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

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

Git. Быстрый старт

Отличная обучающая программа для начинающих разработчиков. Вас научат создавать интернет-хранилище кода и пользоваться им.

11 уроков позволят вам разобраться в разработке программ и работать командно. Будет предложено сразу два клиента для GIT. Один консольный, второй более удобный, с пользовательским интерфейсом.

Объектно-ориентированное программирование

По сути, это логическое продолжение курса по основам программирования, в рамках которого вы научитесь работать на языке С#. Первым заданием станет написание всем известной игры «Змейка». Будет применяться система GIT, потому не помешает пройти курс «Быстрый старт», изучающий её работу.

PHP. Быстрый старт

15 увлекательных занятий, в рамках которых найдётся место для теории и практики. Это обучение созданию блога, включающее работу с базами данных и аутентификацией. Учить вас будут с нуля, потому новичкам будет легко ориентироваться.

Вот описание с самого сайта:

«Напишите не просто програмульку, а работающее приложение. После курса можно смело приступать к более детальному погружению в профессию»

С#. Мини-программы

Курс из 10 уроков работы по Windows Forms Net.Framework. Писать придётся на всё том же С#. Практическая часть будет включать написание полезных утилит на этой платформе. Всё обучение бесплатное и в максимально удобной и понятной для новичка форме.

C#. Викторина «Угадай мелодию»

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

Вас научат думать, как программист. Это весьма важный аспект, напоминающий изучение иностранного языка. Если вы учите английский, учитесь думать на нём. Хотите стать программистом? Думайте, как программист.

Objective C. Приложение TO-DO List

Пишем приложение под iPhone на языке Objective C.

Для прохождения обучения необходим компьютер с операционной системой MacOS. За 16 уроков вас обучат азам программирования, а затем дадут практическое задание – написать To-Do List.

Курс интересный и увлекательный. Сделан таким образом, что с ним стоит ознакомиться не только новичкам.

Android. Быстрый старт

Учитывая распространённость этой операционной системы, уметь писать для неё приложения и игры будет весьма полезно. Перед тем, как начать обучение (курс из 15 уроков), вам придётся изучить основы Java.

С#. Работа с API Вконтакте

VK Api – платформа весьма перспективная для разработчиков. Новичков научат писать приложения для Вконтакте, расскажут про XAML-разметку, пользовательские интерфейсы и привязку данных. Весь курс займёт 11 уроков, в ходе которых вас обучат всему самому необходимому.

WordPress. Личный блог

WordPress, это не просто популярный движок для сайтов, но и самая распространённая платформа для блогов в мире. Вы не разбираетесь в HTML? Не беда. После этого курса вы сможете запросто сверстать свой блог. Это будет не страничка «живого журнала», а вполне самостоятельный ресурс, который вы сможете разместить на подходящем хостинге.

Интересные курсы разработки/тестирования ПО есть на Prometheus.

Основы программирования

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

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

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

Разработка и анализ алгоритмов

Как разрабатывать, сравнивать, исследовать различные типы алгоритмов. Весь курс занимает не так много времени. Вам нужно просмотреть девять видео-уроков. Начиная с самых азов, вас постепенно приводят к всё более сложным задачам. Еженедельно сложность материала постепенно нарастает. В курс входит структура данных, теория графов.

Основы тестирования ПО

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

Есть русскоязычные курсы и на Coursera, но там материал не для начинающих.

Андрей Панченко, founder of GreenRedbrandstudio.com

кодить — Викисловарь

Содержание

  • 1 Русский
    • 1.1 Морфологические и синтаксические свойства
    • 1.2 Произношение
    • 1.3 Семантические свойства
      • 1.3.1 Значение
      • 1.3.2 Синонимы
      • 1.3.3 Антонимы
      • 1.3.4 Гиперонимы
      • 1.3.5 Гипонимы
    • 1.4 Родственные слова
    • 1.5 Этимология
    • 1.6 Фразеологизмы и устойчивые сочетания
    • 1.7 Перевод
    • 1.8 Библиография

Морфологические и синтаксические свойства[править]

  наст. прош. повелит.
Я ко́жу ко́дил
ко́дила
 —
Ты ко́дишь ко́дил
ко́дила
ко́дь
Он
Она
Оно
ко́дит ко́дил
ко́дила
ко́дило
 —
Мы ко́дим ко́дили
Вы ко́дите ко́дили ко́дьте
Они ко́дят ко́дили  —
Пр. действ. наст. ко́дящий
Пр. действ. прош. ко́дивший
Деепр. наст. ко́дя
Деепр. прош. ко́див, ко́дивши
Пр. страд. наст. ко́димый
Пр. страд. прош. ко́женный
Будущее буду/будешь… ко́дить

ко́дить

Глагол, несовершенный вид, переходный, тип спряжения по классификации А. Зализняка — 4a. Соответствующие глаголы совершенного вида — закодить, накодить.

Корень: --.

Произношение[править]

  • МФА: [ˈkodʲɪtʲ]

Семантические свойства[править]

Значение[править]
  1. сленг то же, что программировать ◆ Отсутствует пример употребления (см. рекомендации).
Синонимы[править]
Антонимы[править]
Гиперонимы[править]
Гипонимы[править]

Родственные слова[править]

Ближайшее родство

Этимология[править]

От ??

Фразеологизмы и устойчивые сочетания[править]

Перевод[править]

Список переводов

Библиография[править]

Для улучшения этой статьи желательно:
  • Добавить описание морфемного состава с помощью {{морфо-ru}}
  • Добавить пример словоупотребления для значения с помощью {{пример}}
  • Добавить синонимы в секцию «Семантические свойства»
  • Добавить гиперонимы в секцию «Семантические свойства»
  • Добавить сведения об этимологии в секцию «Этимология»
  • Добавить хотя бы один перевод в секцию «Перевод»

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

Как учить программирование с нуля

1. Самостоятельно

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

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

Платформа с бесплатными курсами по веб-разработке freeCodeCamp

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

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

Обязательно поставьте перед собой цель создать свой проект и постоянно работайте над ним.

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

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

Сервис вопросов и ответов на технологические темы «Тостер»

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

Если почувствуете, что ваше развитие зашло в тупик, или захотите ускорить обучение, попробуйте следующие варианты.

13 советов тем, кто изучает программирование самостоятельно →

2. С помощью ментора

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

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

3. У преподавателей «живых» курсов

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

Популярные русскоязычные онлайн-площадки, которые занимаются системной подготовкой программистов: «Нетология», GeekBrains и Loftschool.

Если предпочитаете заниматься очно, можете поискать образовательные центры, которые обучают программированию в вашем населённом пункте. К сожалению, такие заведения чаще всего присутствуют только в больших городах. В качестве примера можно привести компьютерную академию «ШАГ», у которой есть филиалы в нескольких странах.

4. В университете

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

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

Как выбрать направление и язык

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

  1. Веб-разработка. Популярные языки: JavaScript, PHP, Python, Ruby.
  2. Мобильная разработка. Популярные языки: Java, Swift.
  3. Разработка игр и программ для настольных компьютеров. Популярные языки: C++, C#, C.
  4. Big Data, машинное обучение. Популярные языки: Python, R, Scala.

На что обратить внимание при выборе

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

График востребованности языков на международном рынке труда / research.hackerrank.com

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

ИНФОГРАФИКА: Какой язык программирования учить первым →

Если не можете определиться

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

Например, основатель образовательного ресурса freeCodeCamp Квинси Ларсон рекомендует JavaScript всем начинающим. Ларсон приводит очень простые аргументы:

  1. JavaScript относительно легко освоить. А чтобы написать что-то и запустить на этом языке, достаточно иметь редактор кода и браузер.
  2. JavaScript — самый востребованный язык на международном рынке труда и у него большие перспективы. В экосистему JavaScript инвестируют крупные компании вроде Google, Microsoft и Facebook.
  3. У JavaScript очень широкая сфера применения: от сайтов и браузерных игр до мобильных приложений.

Кроме того, вокруг этого языка сформировалось крупное сообщество разработчиков. Высокий интерес к JavaScript обеспечивает огромное количество курсов, книг и другого образовательного контента.

Что ещё должен знать программист: математика и английский?

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

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

Как выучить английский язык: всё самое интересное и полезное →

Как получить первый опыт и первую работу

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

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

  1. Выполните несколько заказов на биржах фриланса. Это могут быть «Фрилансим» или Upwork. Предлагайте свои услуги бесплатно, тогда к вам придут первые заказчики.
  2. Найдите единомышленников и создайте с ними общий проект. Люди объединяются для таких целей почти на каждой образовательной площадке, где есть курсы по программированию.
  3. Выберите курсы, организатор которых помогает с трудоустройством. Например, в GeekBrains после обучения открывается доступ к стажировкам от разных компаний, в том числе — оплачиваемым. GeekUniversity и «ШАГ» гарантируют трудоустройство своим выпускникам.

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

Кодить — это скучно? А девочка может стать программистом? Отвечаем на частые вопросы родителей

Все вокруг говорят, что детям нужно программирование, но родителям, далеким от IT, бывает трудно разобраться. Какой язык программирования выбрать для изучения и когда можно начинать учиться? Эта область не для моего ребёнка, если у него плохая память? А если он вообще перестанет общаться с друзьями и разговаривать на понятном языке? Отвечаем на все неудобные вопросы вместе с школой «КрашПро».

1. Чем вообще занимаются программисты?

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

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

2. В каких еще профессиях пригодится программирование?

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

3. Какие бывают языки программирования и чем они отличаются? Почему нельзя использовать один язык везде?

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

Python хорош для обучения, создания сайтов, небольших вспомогательных программ, машинного обучения, анализа данных и визуализации. Это язык подходит для первых шагов в программировании, и он очень популярен. Название, кстати, никак не связано с питонами. Создатель языка назвал его в честь шоу «Летающий цирк Монти Пайтона».

JavaScript раньше использовался в основном для создания интерактивных элементов на сайтах, но теперь на этом языке пишут и серьёзное серверное ПО. Иногда JavaScript сокращают до JS. Не путайте JavaScript с языком Java — на Java разрабатываются как небольшие драйвера устройств, так и огромные высоконагруженные приложения для больших компаний. Сначала язык использовался для программирования бытовых приборов, например, кофемашин. Интересно, что и название язык получил как раз в честь марки кофе.

На C++ пишут сложный софт, для которого важна производительность: драйвера устройств, операционные системы, компиляторы. Язык C++ придумал в начале восьмидесятых сотрудник фирмы Bell Labs Бьёрн Страуструп на основе языка C. Произносить нужно, как «си плюс плюс».

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

Swift — язык программирования Apple. На нём пишут приложения для iPhone, iPad, Apple Watch, Mac, Apple TV.

4. Какой язык ребёнку учить сейчас, чтобы через 20 лет быть успешным?

Нет одного языка, который позволит много зарабатывать в будущем. Успешному программисту нужно знать несколько языков. Главное на старте — понимать основные принципы. Для успеха в будущем мы советуем не останавливаться в развитии — выучиться раз и навсегда не получится. Начать стоит с популярных и простых языков — Python, Java и JavaScript.

5. Сложно ли переучиваться с языка на язык?

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

6. Какие нужны навыки и знания, чтобы начать учиться?

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

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

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

7. С какого возраста можно учиться?

Пятилетние дети в состоянии освоить азы программирования с помощью таких игровых приложений как LightBot Jr или Kodable. Эти обучающие игры доступны на разных платформах — iOS, Android, Windows, Mac. Есть даже настольные игры — например, CodeMonkey Island. C 5-6 лет дети конструируют роботов с помощью Lego и программируют на Scratch — визуальном языке программирования для детей. С 8-9 лет дети отлично понимают базовые концепции и могут создавать свои первые программы.

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

8. По каким критериям выбрать школу или курсы?

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

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

9. Нужно будет покупать ребёнку навороченный компьютер?

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

10. Ребёнку не будет скучно? Это же сплошные цифры и буквы, а не игра

Программисты придумывают, как будет работать и выглядеть приложение. В этом смысле программирование — увлекательный и творческий процесс. Кроме того, в обучении сейчас есть тренд на геймификацию. Дети учатся программировать, играя. Например, в IT HUB Academy пятилетние дети на занятиях встречают пчёлку Bee Boot. В игровой форме дети знакомятся с алгоритмами и программируют пчёлку.

11. Подойдёт ли профессия девочке?

Хотя мужчин-разработчиков гораздо больше, нет никаких объективных причин женщине не становиться программистом. В 2018 году ресурс StackOverflow выяснил, что 92,9% разработчиков в мире — мужчины. Но, например, в Facebook 17% технических должностей занимают женщины. В конце концов, двоичный код изобрела женщина! Ей была математик Ада Августа Лавлейс, которая написала первую программу и ввела в научный обиход ключевые понятия — «цикл» и «рабочая ячейка».

Марисса Майер — первая женщина-инженер в Google. Без её одобрения в компании не запускали ни один продукт в области пользовательского интерфейса. Когда Марисса работала на Yahoo! , она была самым молодым директором компании из списка Fortune 500.


Сегодня обучаться программированию можно непрерывно, начиная с 4-5 лет. В IT HUB Academy Kids дети учатся программированию в игровой форме, подтягивая английский и развивая soft skills. Школьники 8-10 лет изучают языки программирования, например, Python или JavaScript. Это помогает определиться с профессией и перейти на следующую ступень — поступить вне конкурса в колледж IT HUB. Здесь можно учиться после девятого или одиннадцатого класса у преподавателей-практиков и c первого курса проходить стажировки в IT-компаниях.

Иллюстрации: Shutterstock (Svetlana Tokarenko, Kit8.net)

Как научиться программированию с нуля — The Village

Codecademy

Самый популярный сервис в области обучения программированию с нуля, получивший несколько значительных раундов финансирования. Известен тем, что абсолютно бесплатен и создан специально для тех, кто ничего в программировании не понимает. Учит базовым принципам работы с JavaScript, HTML and CSS, Python и Ruby. Обучение проходит в форме коротких упражнений с простыми заданиями и инструкциями. Пользователь пишет код и сразу видит результат своих действий.

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

 

Code School

Если Codecademy исповедует минималистичный подход к обучению, то в Code School любят фантазировать и экспериментировать. Самое интересное у них — не базовые уроки по Ruby, JavaScript, HTML/CSS и iOS, а курсы-продолжения, такие как Rails for Zombies. Кредо компании — Learn by Doing («Обучайся, действуя»). Вместо скучных абстрактных заданий они предлагают пользователям программировать то, что им интересно, например игры про зомби.

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

 

Treehouse

Treehouse делают акцент на обучающем видео. Даже если вы не готовы к полноценному курсу по созданию сайта, приложения для iPhone или Android, а просто хотите получить базовые знания о том, что такое интернет и как он работает, стоит подписаться на их канал на YouTube.  Тех, кто решит начать изучать Ruby on Rails, PHP и другие языки программирования, на сайте ждёт более 1 000 видеоуроков. Они собраны в курсы, посвящённые веб-дизайну, программированию, технологическому предпринимательству и многому другому.

Видео постоянно обновляются, так что курсы морально не устаревают. После каждого видео даются практические задания, интерактивные квизы. В конце каждого курса у вас будет готов небольшой проект. После этого сервис подскажет, что стоит изучить дальше. На сайте есть хороший пользовательский форум, можно получить фидбэк от экспертов, поучаствовать в мастер-классах. Единственный недостаток — обучение стоит денег, от $250 до $490 в год. У Treehouse есть отличный бесплатный дочерний проект для тех, кто уже чему-то научился, — Code Racer. Там нужно кодить на скорость, соревнуясь с противником. В процессе ему можно всячески мешать: например, забрасывать его экран фотографиями кошек.  

 

Udacity 

Если обучение в одиночку вам не подходит, можно пройти онлайн-курсы с другими начинающими на Coursera, Udacity и других профильных сайтах, о которых мы уже писали. Плюс таких курсов в том, что у вас есть хоть и удалённый, но учитель, и определённый темп обучения, который не позволяет расслабляться. Курс Introduction to Computer Science (на видео) очень популярен среди новичков. Udacity, созданный на базе Стэнфордского университа, хорош тем, что совершенно бесплатно предоставляет университетские курсы в адаптированной под удалённое обучение форме. Рядом с каждым курсом есть шкала сложности. Предполагается, что, пройдя курс с нулевой сложностью, вы будете готовы к прохождению остальных, где изучаются конкретные языки. На Coursera тоже немало курсов для начинающих программистов, например, этот, посвящённый Python, и этот ­— про создание креативных мобильных приложений.       

 

Sparki

Если подавить гордость и признать, что все вышеуказанные курсы всё равно слишком сложны, можно начать с тех, что созданы специально для детей. Например, приложение для iPad и iPhone Move the Turtle. Это игра, которая обучает программированию через небольшие задания, каждое из которых заставляет двигаться черепашку. Сервис Alice, созданный в Carnegie Mellon University, учит созданию движущихся 3D-героев, параллельно давая основы C++ и Java. Hackety Hack — приложение, обучающее азам Ruby. В отличие от предыдущих оно делает это не через картинки, а уже через конкретные языковые команды. Но, конечно, самое лучшее для детей — это роботы, запрограммированные выполнять простые команды, которые сначала нужно прописать в виде компьютерного кода. Один из таких — робот Sparki, собравший деньги на Kickstarter. Сделать предзаказ можно здесь, и стоить он будет всего $100. 

Фотография via Shutterstock

Почему научиться программировать так чертовски тяжело? / Hexlet corporate blog / Habr

Привет, Хабр!

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

  • С чего начать обучение программированию?
  • У вас есть курс по Java для новичков, но я слышал, что нужно изучать Python, правда ли это?
  • На других сайтах все просто и понятно, а у вас какие-то компиляции и тесты!
  • Непонятно зачем нужен этот ваш курс по алгоритмам, в реальной жизни все алгоритмы уже реализованы в стандартных библиотеках

Но сложнее всего объяснить новичку, грубо говоря, во что он ввязывается. Благодаря очень простым, игровым образовательным проектам многие считают, что программирование это очень легко, а наши виртуальные машины, где нужно запускать тесты и компилировать код – это надуманная сложность. Давно хотелось найти такой материал, который бы подготовил новичка к длинному и сложному пути к карьере программиста. И недавно наши коллеги из Viking Code School такой материал написали! А мы его перевели для вас.

Квинси Ларсон был просто “офисным парнем в костюме”. Он решил научиться программировать. Начал спрашивать людей вокруг. Изучил немного Руби, потом быстренько посмотрел на другие языки вроде Scala, Clojure и Go. Он изучил Emacs, а потом Vim, а потом раскладку Dvorak. Он втыкал в Линукс, копался с Лиспом и кодил на Питоне, и жил при этом в командной строке больше полутора лет.

Его швыряло туда-сюда как листочек в торнадо. Каждый совет, который он слышал, тащил его то в одну, то в другую сторону, до тех пор пока он не прошел “каждый онлайн-курс по программированию во вселенной”. В конце концов, не смотря на то, что он получил работу разработчика ПО, Квинси:

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

Ох. Звучит знакомо?

Фаза 1: Медовый месяц

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

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

С другой стороны, движение «Learn to Code” проделало фантастическую работу по удалению барьеров, и показало что кодить на самом деле довольно просто. Инструменты вроде Codecademy, Treehouse и Code School так мягко и за ручку подводят тебя к коду, что можно быть уверенным – я не просто смогу научиться программировать, я смогу стать полноценным разработчиком!

Внезапно, проблема не в страхе, а в избыточных надеждах и высоких ожиданиях.

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

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

Рисуем маршрут

Перед тем как перейти к Фазе 2, давайте взглянем взглянем на весь путь.

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

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

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

Мы рассмотрим уникальные испытания, которые ждут нас в следующих трех фазах, но для начала вкратце рассмотрим каждую фазу:

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

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

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

4. Подъем благоговения это та часть, где вы наконец находите путь через пустыню и начинаете понимать как создавать приложения. Ваш код все еще дырявый и хрупкий как карточный домик. Вера в себя растет потому что ваши сайты вроде как работают, вы изучили несколько важных паттернов, ваши друзья считают ваши интерфейсы крутыми, но вам страшно заглянуть под капот, и вы не знаете как делать production-ready код. Как отсюда построить мост к состоянию “готов к реальной работе”?

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

Давайте вернемся к фазе 2…

Фаза 2: Скала смятения

Итак, вы находитесь в фазе 1 – „Медовый месяц“. Вы заполняете пробелы и завершаете задачи, связанные с кодом в то время как ваша уверенность и возможности растут. Это не так уж плохо… К чему суета? Вы поднялись на «Гору иррационального изобилия»…

Будьте осторожны! Вы собираетесь переступить пропасть, которая ломает многих сильных учеников, вытесняя их в лагерь под названием „кодинг — это слишком тяжело“. Точный момент этого скачка происходит тогда, когда вы садитесь за клавиатуру, открываете свой текстовый редактор и пытаетесь в первый раз создать проект с нуля без каких-либо встроенных в браузер редакторов, костылей кода или полезных советов.

Блин…

Вы можете немного оттянуть этот момент, продолжая следовать учебникам, но никто ещё не достиг неба, не оторвавшись от земли, и настанет момент, когда вы будете творить волшебство в пустом текстовом файле. Вы только что вошли во вторую фазу обучения, где уверенность падает вниз на землю. Добро пожаловать на «Скалу смятения»:

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

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

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

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

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

Два ключевых фактора

Так в чем же на самом деле разница между первой и второй фазой? Почему фаза 2 («Скала смятения») так ужасна по сравнению с фазой 1 («Медовый месяц»)? Понимание этого поможет вам понять, что вашей вины абсолютно нет в том что, ваше путешествие выглядит так, как мы только что описали.

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

Фактор 1: плотность ресурсов

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

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

К сожалению, на более поздних этапах плотность ресурсов быстро падает. Любой, кто прошёл от стадии новичка до среднего уровня, может подтвердить, что существует БОЛЬШАЯ разница между количеством имеющихся ресурсов в самом начале и тогда, когда вы впервые ищете помощь самостоятельно, без посторонней поддержки.

Эта проблема усугубляется при переходе к третьей фазе, когда количество знаний быстро возрастает, и есть одна причина, по которой мы называем эту фазу „Пустыней отчаяния“. Как только вы пройдете её и начнете точно чувствовать, что именно вам нужно искать, то ресурсы вернутся, и вы сможете использовать в работе большее количество технических средств, таких как блоги и видеоролики. Отчасти это просто умение задать правильные вопросы.

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

Фактор 2: объем знаний

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

Когда вы только начали обучение, набор вещей, которые вам нужно понимать, ещё достаточно узкий. Каждому человеку, независимо от целей обучение, языка и предпосылок, необходимо изучить, что такое цикл «for», как построить логику условного оператора и познакомиться с основными структурами синтаксиса программирования. А зачастую даже и не приходится сталкиваться с некоторым из вышеприведенных базовых понятий, поэтому объем знаний на этом этапе является очень узким.

Как только вы отходите от основ, вы замечаете быстрое расширение базы знаний, так как начинаете сталкиваться с более сложными вопросами, такими как понимание разновидностей ошибок, или, когда именно использовать код, который вы знаете и как вообще его использовать. А это две разные вещи, потому что нет „правильного“ ответа на точный вопрос… Пока всё очень размыто.

По мере продвижения к третьему этапу объем знаний станет расти. Теперь вы должны понимать, какие инструменты использовать, какие языки изучать, как писать модулярный код, знать основы CS и объектно-ориентированного программирования, обладать грамотным стилем кода и уметь искать ответы на вопросы (хотя бы в нескольких источниках). Каждый заход в Google или на сайт Hacker News погружает вас в огромное множество кроличьих нор и ошеломляет вас такими вещами, которых вы не знаете, но чувствуете, что должны их знать.

Вы не знаете, чего именно вы не знаете.

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

Фаза 3: Пустыня отчаяния

С пониманием ключевых факторов, можно увидеть, что «Скала смятения» является критической точкой. Мучения, вызванные совокупностью быстро растущего объема знаний и упадка плотности ресурсов привели к фазе, которую я называю „Пустыня отчаяния“.

В сущности, это пустыня, где вы знаете, что где-то есть конец, но не знаете, как до него добраться:

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

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

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

Существует НАМНОГО больше вещей, которые предстоит узнать, чем вы, возможно, ожидали. Даже если вы в состоянии заставить работать некоторые приложения, то очень трудно не чувствовать себя слабым звеном в огромной цепочке становления настоящим профессионалом. Трудно измерить ваш прогресс. Как вы узнаете, что вам изучать, если изучаете только необходимые вещи?

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

Безусловно, до этого момента было трудно, но, возможно, вся эта история с веб-программированием и не такая сложная, в конце концов… Everything's coming up Milhouse!

Фаза 4: Подъем благоговения

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

Это и есть «Подъем благоговения»:

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

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

Это фаза состоит из двух полюсов: вы чувствуете, что одна ваша половина — это пуленепробиваемый разработчик, а вторая — тонкая фанера с дикими глазами новичка, который утонул в своём пути. Чем дальше вы продвигаетесь, тем больше растет терзающее чувство неопределенности, как будто кто-то собирается «разоблачить» вас, как обманщика.

Вы чувствуете, что уже должны стать разработчиком, но дистанция между кодом, который вы пишете и «профессиональной» рабочей средой не сокращается…

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

«Подъем благоговения» всегда занимает больше времени, чем вы ожидаете, и кажется бесконечным, потому что вы так близко… Но вы всё же достигнете его. Если вы настойчиво идёте в правильном направлении (тема следующего поста), то сможете убедить кого-то платить вам и спокойно продолжать учиться дальше. Работа ваша.

На что всё это похоже

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

Одно дело — знать путь, а другое дело — идти по нему. Давайте поможем вам начать.

Как дойти до конца живым

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

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

I: Как Выжить в «Медовом месяце»

Разнообразие доступных ресурсов в «Медовом месяце» доставляет много веселья. Они делают большую работу, чтобы сформировать вам нужный тип логического мышления, который вы должны будете развивать в течение последующих фаз. Это прекрасное время, чтобы начать учиться коду. Итак, пробуйте, наслаждайтесь, но не забывайте держать в голове эти два совета:
  1. Начните пробовать разные ресурсы, чтобы найти те, которые лучше вам помогают в обучении, ищите наиболее интересные для вас проекты. Это могут быть быстрые решения от KhanAcademy, упражнения в браузере от Codecademy, книга Learn to Program Криса Пайна или школа кода Try Ruby. В начале будьте открытыми для всего и игнорируйте наставления в стиле «вы должны учить только это». На данном этапе весь код одинаковый.
  2. Далее выберите один подходящий для вас ресурс и старайтесь придерживаться только его. Пройдите курс от начала до конца, чтобы получить все основные знания, которые вам помогут написать базовые скрипты и приложения. А в дальнейшем приготовьтесь начать создавать свои собственные проекты.
II: Выживание на «Скале смятения»

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

Вот три совета, которые помогут самостоятельно перейти к компилированию:

  1. Работайте с кем-то в паре, даже если он такой же новичок как и вы. Вы будете удивлены, насколько легче отладить кажущуюся неисправимой ошибку, если подключить ещё две пары глаз.
  2. Читайте больше чужого кода, чтобы познакомиться с хорошими паттернами. Постарайтесь понять, почему автор сделал именно так, а не иначе. Вы ведь не сможете стать писателем, не читая чужих книг, не правда ли? Мы подробно рассмотрим это в следующем посте, а сейчас, заострите своё внимание на мелких проектах и задачах, для которых другие люди уже написали решения.
  3. Начните с малого и программируйте постоянно. Вы должны думать о будущих крупных и интересных проектах, но для этого ваша отладка должна стать гладкой, а поиск ресурсов не должен составлять труда. Опыт вы ничем не замените.
III: Выживание в «Пустыне отчаяния»

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

Итак, вот ключи к выходу из «Пустыни отчаяния»:

  1. Поставьте перед собой определенную цель, которую вы хотите достичь, потому что в противном случае вы закончите тем, что устанете гоняться за своим хвостом, изучая различные виды интересных, но по большому счёту ненужных вещей. Но если у вас есть свободное время, то можете опустить этот совет…
  2. Найдите верный путь, который ведет прямо к поставленной цели и убедитесь, что он действительно направляет вас к ней. Вам нужно копать глубже и не искать ответ среди рекламных лозунгов, суперобложек и улыбающиеся лиц на веб-сайтах различных курсов на вопрос „поможет ли мне это достичь поставленной цели или нет?“
  3. Сконцентрируйте всё своё внимание и не отвлекайтесь, потому что, если вы относитесь к тем людям, которым интересно изучать код, вы также заинтересуетесь изучением других интересных вещей. В те моменты, когда программирование даётся тяжело, вы должны особенно сильно продвигаться вперед, а не браться осваивать другие модные занятия.

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

IV: Выживание на «Высоком подъеме»

Подъем благоговения является одним из самых сложных переходов. Вы умеете разрабатывать приложения, но хотите стать настоящим веб-разработчиком. Подходя к этой фазе и к работе, вы должны делать три вещи:
  1. Найдите лучшую практику по программированию и следуйте её рекомендациям. Вы должны видеть разницу между решением и лучшим решением. Лучшие практики покажут большое различие между вашим вымученным кодом и профессиональным кодом высокого качества, написанным на рабочем месте.
  2. Сдерживайте свои амбиции. Наверняка, у вас есть такие пробелы в знаниях, о которых вы даже не подозреваете. Вы должны найти и восполнить их.
  3. Не пренебрегайте рутинной работой, она редко кому-то нравится, но она очень важна для перехода к профессиональному уровню. В неё входят такие вещи, как тестирование, модели данных, архитектура и деплой. Всё это очень легко забывается, но имеет основополагающее значение для правильного развития.

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

Итак… Возможно ли это вообще?

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

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

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

Удачи!

Что не нужно кодить самостоятельно / Habr

Недавно написал свой велосипед и выложил его на хабре. Вот он: «Простейший Connection pool без DataSource в Java». Статья не из самых удачных, только прошу больше не минусовать. Итак, чтобы не повторять такие ошибки самому и, возможно, предостеречь кого-то от таких ошибок, решил перевести статью «Seven Things You Should Never Code Yourself» достаточно известного в среде open-source деятеля IT-области — Andy Lester'а. Итак, кому интересно, прошу под кат.

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

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

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

1. Парсинг HTML или XML

Задачей, сложностью которой зачастую пренебрегают, по крайней мере на основе того, сколько раз про него спросили на StackOverflow — является парсинг HTML или XML. Извлечение данных из произвольного HTML выглядит обманчиво просто, но на самом деле эта задача должна решаться применением библиотек. Скажем, вы хотите извлечь URL из тега такого, как
<img src="foo.jpg"> 

На самом деле это простое регулярное выражение, которое соответствует шаблону.
/<img src="(.+?)">/ 

Строка “” будет выдана в результатах поиска по шаблону и она может быть присвоена строковой переменной. Но будет ли такой код находить нужные значения в тегах, в которых имеются другие атрибуты:
<img src="foo.jpg"> 

После изменения кода, чтобы он обрабатывал такие случаи, будет ли он рабочим, если кавычки имеют другой вид:
<img src='foo.jpg'> 

или кавычек не будет вовсе:
<img src=foo.jpg> 

Что делать, если тег занимает несколько строк и является самозакрывающимся:
<img src="foo.jpg" /> 

И будет ли ваш код знать, игнорировать ли закомментированные теги:
<!-- <img src="foo.jpg"> --> 

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

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

2. Парсинг CSV и JSON

CSV файлы обманчиво просты, но таят в себе некую опасность. Файлы с величинами, разделенными запятыми тривиальны для парсинга, не так ли?

# ID, name, city
1, Queen Elizabeth II, London

Безусловно, пока вам не придется иметь дело с запятыми, заключенными в двойные кавычки:

2, J. R. Ewing, "Dallas, Texas"

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

3, "Larry \"Bud\" Melman", "New York, New York"

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

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

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

Если чтение структурированных данных неструктурированным методом считается плохой практикой, то идея изменять данные на месте еще хуже. Люди часто говорят что-то вроде «Я хочу изменить все теги с такими-то и такими URL так, чтобы у них появивлся новый атрибут.» Но даже такое, казалось бы, простое дело, как «Я хочу изменить в каждом пятом поле в этом CSV имя Боб на Стив» таит в себе опасность, потому что, как было отмечено выше, вы не сможете считывать запятые должным образом. Чтобы все было правильно, вам необходимо прочитать данные с помощью грамотной библиотеки во внутреннюю структуру, изменить данные, а затем записать измененные данные обратно с помощью той же библиотеки. Ничто не представляет такой риск искажения данных, как если их структура не соответствует вашим ожиданиям.

3. Проверка Email адресов

Есть два способа проверки адреса электронной почты. Можно проверить по-простому, сказав, «мне нужно иметь некоторые символы перед знаком @, а затем какие-то символы после него», эту идею реализует регулярное выражение:
/.+@.+/ 

Оно, конечно же, не полное, и допускает наличие неверных элементов, но по крайней мере мы имеем знак @ посередине.

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

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

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

4. Работа с URL

URL-адреса не столь противны, как адреса электронной почты, но они по-прежнему полны раздражающих мелких правил, которые вы должны помнить. Какие символы должны быть закодированы? Как вы обрабатываете пробелы? Как насчет знаков +? Какие символы могут идти вслед за знаком #?

Вне зависимости от языка, который вы используете, существует код для разбиения URL на компоненты и для сборки URL из должным образом оформленных компонент.

5. Работа с датой/временем

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

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

6. Системы шаблонов

Это почти обряд посвящения. Младший программист должен создать огромное количество шаблонного текста и придумывает какой-нибудь простенький формат наподобие:
Dear #user#,
Thank you for your interest in #product#...

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

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

7. Фреймворки для логирования

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

Перед тем, как относиться с пренебрежением или презрением к идее подключения стороннего модуля, следует обратить пристальное внимание на ваши протесты и возражения. Первое возражение обычно такое: «Зачем мне нужна целая библиотека просто для того чтобы сделать это (проверить эту дату/распарсить этот HTML/и т.д..),» Мой ответ: «А что в этом плохого?» Вы же, скорее всего, не пишете код микроконтроллера для тостера, где вы должны выжать каждый байт пространства для кода.

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

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

Примечание переводчика:
Кстати, последний абзац очень гармонично перекликается с основной идеей из статьи «Как улучшить свой стиль программирования?».
UPD1. Список инструментов по основным языкам программирования, разбитых по категориям: awesome-awesomeness (ссылка предоставлена hell0w0rd в комментариях, ему отдельное спасибо).

не задумывайтесь / Alconost corporate blog / Habr


Программировать быстро — это легко! Так считает инженер-программист компании Google, который все публикации в своем блоге подписывает лаконичным «Макс». Макс также работает главным архитектором, комьюнити-менеджером и релиз-менеджером в Bugzilla Project. Мы в Alconost впечатлились и перевели его советы о том, можно ли как научиться программировать с космической скоростью.

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

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

Теперь давайте разберемся, как, собственно, стать быстрее? Может, это врожденное магическое умение? Надо ли быть «умнее» других, чтобы быть быстрым?

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

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

Это может звучать невероятно, но работает исключительно хорошо. Задумайтесь: когда вы сидите перед вашим редактором, но работа идет небыстро, потому ли это, что у вас низкая скорость набора? Я сомневаюсь: «слишком много набирать» — редкая проблема программистской производительности. Паузы, когда вы не набираете, — вот что все замедляет. А чем обычно заняты в таких паузах разработчики? Пытаются перестать думать — может быть, о проблеме, об инструментах, о сообщении в почте, да о чем угодно. Но всякий раз, когда такое случается, оно означает проблему. Размышления сами по себе — не проблема, но признак какой-то другой проблемы. Вероятно, вместо того, чтобы ходить по кругу в своих мыслях, вам стоит обратить внимание на что-то из этого:

Понимание


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

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

Таких вариантов — бесчисленное множество. Многие пользуются языком программирования, не разбираясь, что (, ), [, ], {, }, +, * и % означают в этом языке. Некоторые разработчики не понимают, как на самом деле работает компьютер. Помните мой «Единственный секрет программиста-рок-звезды»? Вот где суть! Ведь если ты по-настоящему понимаешь, тебе не надо прекращать ненужные размышления. Это также побудило меня написать книгу: понимание того, что есть незыблемые законы создания программного обеспечения, может избавить от многих эпизодов «борьбы с размышлениями».

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

Рисование


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

Начинание


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

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

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

Пропуск шагов


Еще одна специфическая проблема понимания — пропуск какого-то шага в правильной последовательности разработки. Например, наш объект Велосипед зависит от объектов Колеса, Педали и Рама. Если вы попытаетесь написать весь объект Велосипед без написания объектов Колеса, Педали и Рама, вам придется много обдумывать эти несуществующие классы. С другой стороны, если вы напишете класс Колеса, пока вообще не существует класс Велосипед, вам предстоит много размышлений о том, как класс Колеса будет использоваться классом Велосипед.

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

Не перепрыгивайте шаги при разработке своей системы — и это позволит вам быть продуктивным.

Физические проблемы


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

Отвлекающие факторы


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

Неуверенность в себе


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

Ложные представления


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

Бездействие


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

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

Как вам такой подход?

О переводчике
Перевод статьи выполнен в Alconost.

Alconost занимается локализацией приложений, игр и сайтов на 60 языков. Переводчики-носители языка, лингвистическое тестирование, облачная платформа с API, непрерывная локализация, менеджеры проектов 24/7, любые форматы строковых ресурсов.

Мы также делаем рекламные и обучающие видеоролики — для сайтов, продающие, имиджевые, рекламные, обучающие, тизеры, эксплейнеры, трейлеры для Google Play и App Store.

Подробнее: alconost.com

использование ИИ для улучшения кода / Habr

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



О чем это ты?


Программируете на Java? Codota поможет вам в этом! Этот помощник разработан, чтобы помочь вам писать код, не проверяя лишний раз документацию. Codota понимает код и предлагает вам правильные решение в нужное время. Означает ли это, что однажды роботы возьмут на себя наши рабочие места разработчиков? Возможно. Но пока еще нет.

Кодить это сложно. Такие сервисы, как StackOverflow или GitHub, безусловно, помогают нам в этом.
Теперь у Java-разработчиков есть еще один альтернативный вариант: ИИ-помощник Codota. Лично я всегда хотел получить помощь искусственного интеллекта при разработке.

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

Как это работает?


По словам создателей этого сервиса, Codota создает прогностические модели кода, которые предполагают доработку кода и связанный контент на основе текущего контекста, присутствующего в вашей среде IDE.

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

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

Так, а это точно ИИ?


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

Давай теперь про минусы


Конечно, есть некоторые рамки.

Codota еще не знает сути кода. В качестве примера вам часто будет предоставлен кусок кода какого-то другого программиста из мира сего. Очевидно, это означает, что нет гарантии на всегда красивый и чистый код. Но поскольку база знаний Codota основывается на таких сервисах, как GitHub, BitBucket и StackOverflow, то каждый день ИИ становится лучше.

Codota работает на Linux, Windows и MacOS.

Программа работает с Eclipse, IntelliJ и Android Studio.



Также, есть довольно интересное промо-видео, в котором подробно показано, как это работает.

Программировать с нуля. «Сейчас» — самое подходящее время, чтобы начать


(Иллюстрации к статье А.П. Ершова «Программирование — вторая грамотность»)

Стив Джобс не написал ни строчки кода, Билл Гейтс — написал. Пол Грэм — первоклассный программист, Питер Тиль — юрист по образованию, сооснователь PayPal и владелец Palantir (написал ли он что-нибудь?), а Илон Маск в детстве написал свою игру и успешно её продал.

Никита truesnow из #tceh сказал мне, что на курсе «Врубаемся в Ruby» они научат программировать любого человека, даже с нуля. Я спросил его: «А с гуманитарием справитесь?» И мы задумались, были ли случаи, когда «гуманитарий» выучил язык программирования?

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

А у меня для вас есть три истории из моей жизни. Просто три истории.

История первая — ламер

Слово «ламер» я прочитал в «Компьютерре». Там давалось такое определение: «Ламер — отнюдь не безграмотный человек, не умеющий (как бы это помягче выразиться?) программировать». Окрылённый истиной я побежал и рассказал об этом друзьям-одноклассникам, но они предпочли поиграть в футбол, вместо того чтобы освоить суперспособности. Забавно, что потом все они зарабатывали программированием деньги, а я нет. Через неделю я записался в краевую станцию юных техников (КСЮТ), где был кружок по программированию. Там для новичков давали qbasic. А боги прогали на C.

Так вот как-то один из «богов» подозвал меня к монитору и спросил: «Так сможешь?». И показал прогу, которая ждала, когда пользователь введёт в командной строке любой символ, а потом поворачивала его на 90 градусов. Я был ошеломлен.

Наверное, меня это так зацепило, что я решил — во что бы то не стало, выучить все что можно, и стать самым крутым программистом. Заряда хватило на годы. Этот случай я позабыл, прошло несколько лет, и, вспомнив о нем, я написал не больше десятка строк на basic`e минут за 20. Программа работала идеально.

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

История вторая — первый шифр

Идея пришла внезапно. Пришла так, что не смог заснуть и сел кодить. Из шифров тогда я знал только про пляшущих человечков из Шерлока Холмса (а это класс 8 или 9, занимался программированием полгода-год). Мне захотелось написать шифр, чтобы нельзя было так просто его вскрыть простым анализом.

Задумка была следующая: каждой букве русского алфавита мы приписываем массив из 5 символов в виде букв русского и английского языка, спецсимволы. При шифровании мы рандомно выбираем один из них. Получалась «расширенная» простая замена. Это сейчас мне понятно как его ломать, но тогда для меня была запредельная высота. Через 3-4 года я поступлю на компьютерную безопасность.

Вывод. Решать интересные задачи — это круто. Но гораздо круче придумывать и находить задачи самому.

История третья — триумф BASIC`а

Я уже 2 года «занимался» программированием. И тут в школе появилась… информатика. Меня почему-то отправили в слабую группу. Как узнал позже, моё лицо не понравилось преподавательнице и она посчитала, что я тупой. Мои друзья ворвались в кабинет к директору и сказали, что я занял призовое место на краевой олимпиаде по программированию. Начались, разборки, но мне было так пофиг, что я остался в слабой группе, где учили вводить цифры в Exсel. За первую неделю я сдал всю программу и спокойно ходил играть в Diablo 2 в компьютерный клуб.

А на олимпиаде был забавный случай. Разрешённые языки — C, Pascal, а я то был прожжённым бейсичником. Выкрутился. Задачу принимали в виде exe'шника, а я подсуетился и нашёл бейсик, который кует exe'шники. Программы проходили тесты, а сами тесты принимались на серваке. Одна задача была сугубо вычислительная. Давались координаты центров и радиусы двух окружностей. Требовалось выдать взаимное расположение окружностей в текстовом виде: пересекаются, касаются, одна в другой, совпадают, и прочие.

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

Вывод. Школа — зло. Результат — круто. Нестандартное мышление — прикольно. Обходной путь есть всегда.

Зачем взрослым учиться программировать

У меня есть три ответа на этот вопрос. Они зависят от горизонта планирования:

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

— Цель на год-два — это бабло. За это время можно научиться создавать ценность и работать удаленно. Или учить других. Очень многие хотят научиться программировать.

пруф

сам поискал 8 сентября:

на русском в 1000 раз меньше:


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

Есть заезженная картинка на этот счёт:

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

Если готовы приступить по-взрослому, то есть множество ресурсов для самообучения. От Coursera (раз, два) до всяких %имя%academy (codeacademy, htmlacademy и пр)

Если намерения совсем серьёзные, могу посоветовать курс «Врубиться в Ruby».

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

— Никита, почему именно Ruby?
— Все просто, мы нашли очень хорошего преподавателя.

Про Ruby
Попробовать сделать первые шаги можно прямо сейчас, займет всего 5-10 минут.


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


А зомбяк не хотите ли? railsforZOMBIES.org

Про Lisp

«Однако я не думаю, что смогу убедить кого-нибудь (старше 25) выучить Lisp.» Пол Грэм, «Побеждая посредственность»

Начитавшись Грэма, осваиваю Lisp.
;; Welcome to L(λ)THW! (let ((llthw '(learn lisp the hard way))) (format t "~{~@(~A~)~^ ~}, because ~{~A~^ ~} is easier!" llthw (cddr llthw))) ;; Common Lisp: Powerful, Expressive, Programmable, General Purpose, Multi-Paradigm. 


Нашёл для себя удобную браузерную обучалку Learn Lisp The Hard Way

«За те годы, что я проработал в Viaweb, я прочитал множество объявлений о найме на работу. Примерно каждый месяц появлялся новый конкурент. Первое, что я делал после того, как проверял, доступна ли онлайновая демонстрация работы их программы, — смотрел список их вакансий. Через пару лет я научился отличать опасных конкурентов от неопасных. Чем больше отдавало IT-мэйнстримом от описания требуемых кандидатур, тем менее опасна была компания. Самыми безопасными были те, кому требовались специалисты по Oracle. О таких не стоило беспокоиться. Также мы были спокойны, если требовались разработчики на C++ или Java.

Если требовались программисты на Perl или Python, это уже было слегка пугающе — это значило, что компанией или, по крайней мере, ее технической частью заправляли настоящие хакеры. Если бы я когда-нибудь увидел объявление о найме на работу Lisp-хакеров, я бы обеспокоился не на шутку.» Пол Грэм, «Побеждая посредственность»

Ещё пара советов

  • Читайте Хабр. Например, вот это статья может очень помочь тем кто уже начал свой путь — «Почему научиться программировать так чертовски тяжело?» Или история успеха — «Как я сам научился программировать за 8 недель»
  • Читайте Пола Грэма. Он вдохновит заняться программированием кого угодно. Даже меня. Даже на Lisp.
  • Найдите единомышленников
  • Найдите вдохновляющую задачу
    напримерОбщие упражнения:
    Project Euler содержит более 500 математических задач (на теорию чисел, числовых систем и пр.), которые нужно решить, используя программирование на любом языке.
    Code Abbey хранит более 200 задач по программированию. За решения 125 из них выдают сертификат, чем мотивируют многих студентов.
    Rosalind — это ещё один сайт наподобие Project Euler, который предоставляет на выбор более 200 задач по биоинформатике.
    Codingbat.com дарит упражнения по Java и Python, как для новичков, так и для продвинутых программистов.
    codegolf.stackexchange.com – сайт, на котором публикуют и обсуждают программистские головоломки.
    Ruby Quiz — серия головоломок, в которых вас просят написать короткие программы различной сложности. Исходные решения описаны на Ruby, но их можно реализовать на любом языке.

    Задачи из олимпиад по программированию:
    UVa Online Judge — коллекция из сотен задач с олимпиад по программированию, с онлайн-системой проверки решений.
    TopCoder содержит сложные задачи на алгоритмы, собранные годами с разных соревнований. Также несколько раз в месяц проводит олимпиады по программированию.
    CodeForces похож на TopCoder, но содержит больше задач на соревнованиях и несколько особых фишек, включая «виртуальные соревнования».
    Timus — то же, что и UVA. Содержит задачи с последних соревнований (мирового и регионального уровня).
    SPOJ — похож на UVA, с огромным числом языков программирования на выбор.
    USACO содержит несколько задач на алгоритмы с руководством по их решению.

    Под определённые языки:
    Для Prolog, Lisp и подобных языков посетите P-99 и L-99, наборы из 99 задач для повышения вашей эффективности в данных языках.
    Python Challenge — объединяет загадки и головоломки, которые помогут вам серьёзно прокачаться в Python.
    4Clojure — набор упражнений по программированию, специально разработанных под Clojure, Lisp-подобный язык.

  • Соревнуйтесь
  • Играйте в Игры для программистов
  • Пишите код каждый день
  • Пишите о своих успехах и находках на Хабр

P.S.
Ещё интересные статьи с Хабра на тему быть/не быть программистом и как делать шаги на пути мастерства

P.P.S.
Алан Кэй делится яркой идеей об идеях. Архитектура, математика, обучение, программирование и много ещё интересного.

Пишите код каждый день / Habr

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

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

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

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


Иллюстрация Стивена Резига

Я установил для себя несколько правил:

  1. Я обязан кодить каждый день. Я могу заниматься другими вещами — писать документацию или статьи в блог, но только в дополнение к работе над кодом.
  2. Это должен быть функциональный код. Возня с отступами, переформатирование, и, насколько это возможно, рефакторинг — не считаются. Я могу заниматься всем этим, но это не может быть основной частью дневной нормы.
  3. Считается только код, написанный до полуночи.
  4. Весь код должен быть открытым и публиковаться на Гитхабе.

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

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

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

Минимальный рабочий код. Мне пришлось выделять для работы над кодом не меньше получаса в день. Очень трудно написать что-то осмысленное за меньшее время, особенно учитывая, что приходится вспоминать, на чём остановился вчера. Иногда мне удавалось поработать чуть больше (но обычно не больше часа), а по выходным бывало, что и весь день.

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

Победа над тревогой. До начала своего эксперимента я часто чувствовал сильное беспокойство от того, что не успел сделать «достаточно» работы, или продвинуться «достаточно» далеко (хотя измерить эту «достаточность» я не мог, так как у побочных проектов не было конкретных дедлайнов). Я понял, что ощущуение прогресса в работе настолько же важно как и сам прогресс. У меня открылись глаза! Как только я начал стабильно продвигаться вперёд каждый день, вся моя тревога постепенно растаяла. Я был удовлетворён объёмом сделанной работы и больше не испытывал одержимости сделать как можно больше в один присест.

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

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

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

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

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

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

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


Смотрите также