Вопрос читателям: какой язык программирования легче всего выучить с нуля? Статьи редакции

Вопрос читателям: какой язык программирования легче всего выучить с нуля? Статьи редакции

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

А компания Foxconn — крупнейший в Китае производитель электроники — планирует автоматизировать 30% рабочих мест на своих фабриках до 2020 года.

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

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

Поскольку я не разработчик, для меня этот вопрос звучит так же естественно как: «Вот ты — столяр. Можешь делать крутые штуки из дерева. А что может сделать фрезеровщик?»

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

Не то чтобы я переживал, что искусственный интеллект заменит журналистов (хотя прецеденты уже существуют), но мне до сих пор любопытно: в чем сильные и слабые стороны Java? Objective-C? Ruby? Python?

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

  • Сколько времени это у вас заняло?
  • Какой язык вы порекомендуете выучить человеку без математического образования?
  • Его лучше учить самому или в специальной школе?
  • Какие школы существуют в Москве и в Санкт-Петербурге? Есть ли похожие школы в регионах?
  • Эффективно ли учить язык с помощью Udemy, Coursera, Udacity или других онлайн-курсов?
  • Какие сайты, блоги или книги вам помогали?

1. Сколько времени это у вас заняло? Полтора года ушло пока я перепробовал кучу языков, гонял на хакатоны - пытался найти свое короче. Питон, Си шарп, Джава - все это казалось очень классным и оплачиваемым, да и вакансий много. Питон - вроде бы везде пиарили его необходимость в обычной жизни, решил попробовать. По факту учить ужасно просто, но все вакансии плотно завязаны либо на джанге (основной веб-фреймворк для веб-приложений), либо же все идет в сторону машинки, нейронных сетей и тд. Джава - денег много, корпоративно, но определенно язык не самый лучший для самообучения, ООП в джаве мне вообще сначала показался каким-то битым, даже пошел поучиться в специалист на курсы по этому ЯП. Си шарп - похожая история с джавой. В итоге пришел в Ruby. Сначала конечно сломалось лицо от магии языка, ноооо есть классные ресурсы full-road-to-developer и как-то пошло поехало. (по сложности - около питона). Учил по ресурсам примерно полгода. Потом еще 10-15 потерянных собеседований и вот ты джун.

2.Какой язык вы порекомендуете выучить человеку без математического образования? Ruby, Js. Если не математика, то начни с веба. А потом гуляй по курсере и учи матан сколько угодно.

3. Его лучше учить самому или в специальной школе? Зависит от денег и от школы. Много школ сейчас тупо шарлатанят на "войти в айти до двадцати". Я бы сказал так, лучше учиться самому, но найти чувака, кто сможет делать базовый код-ревью.

4. Какие школы существуют в Москве и в Санкт-Петербурге? Есть ли похожие школы в регионах? В Москве наверное абсолютно крутые ребята это thinknetica. Расписывать не буду, но знаю много классных специалистов, которые вышли оттуда. Даже было обидно, что в свое время сразу к ним не пошел.

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

6.Какие сайты, блоги или книги вам помогали? theodinschool - если знаем инглиш codenamecrud - если не знаем инглиш (но учить надо) И у Майкла Хартла есть крутой туториал-книга по Rails 5 с нуля

Прям представляю, как вы не поставили ударение, и люди такие: боже, что он имел в виду?

Эм. а чем ООП в Java не зашло? По мне так, он во всех языках плюс минус одинаково, но в Java оно явно ровнее.

На Eiffel посмотрите, сразу поймёте, что в Java довольно куцая и непоследовательная модель. Да, про Eiffel знают 3 с половиной калеки (не в последнюю очередь из-за своеобразного подхода Мейера к лицензированию), но язык прямо красив.

Можно посмотреть в сторону Elixir + Phoenix, если нравится Ruby + Rails. Вакансий правда мало.

а можно примеры толковых проектов на гитхабе?

Тот случай, когда комментарий лучше статьи

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

Знать язык - это малое, чему необходимо научиться. Это как овладеть молотком. Но ведь нужно уметь делать "столы и стулья". А для этого нужно владеть технологиями. А то так и останетесь "малышом, которому везде мерещатся гвозди"

По-моему, ваш ответ мало чем помогает человеку.

Это из разряда, если бы человек спросил: у меня стартап, хочу прокачать менеджерские скиллы, что порекомендуете. А ему говорят, менеджерские скиллы — это малое, чему необходимо научиться. Нужно выстраивать бизнес-процессы. А то так и останетесь "малышом, которому везде мерещатся сотрудники"

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

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

А если снабдить ссылками на ресурсы и книги (к примеру, https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670), то будет вообще замечательно.

я постарался ответить шире, чем автор задаёт вопрос, чтобы пришло реальное осознание значимости ЯП в "системе мер и весов". из моего ответа автор, надеюсь, сформулирует внутренний вопрос - "а в какой индустрии я хочу работать?". Будет еще лучше, если дополнит его еще несколькими - "а какие технологии используются в индустрии, которая мне нравится?". Ведь от этого и зависит, какой пласт знаний предстоит освоить автору этой статьи. Не только вебом ограничивается разработка. Это и системная разработка (например, разработка ядра ОС), это и геймдев, и ИИ (привет математика), и телеком индустрия (различные транспортные протоколы).

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

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

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

И там копать, копать. смотришь и уже работаешь нормальным таким формошлепом.

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

Поддерживаю. Плюсую. Начинать надо с алгоритмов.

Во первых в интернете есть диаграмма, приатачил к коменту. Во вторых не важно, любой ЯП в азах довольно прост (как выучить грамоту), сложно писать сложные программы (как стать писателем). Я будучи начинающим программером в течении нескольких лет спокойно выучил Делфи, ПХП, HTML, JS, Java, C#, C++, Prolog. На базовом уровне, но пофигу, написал вполне работающие хоть и простые программы. В третьих зависит от подхода, желания и цели. Для развлечения: Юнити Для академического изучения как всё работает: ассемблер, си, плюсы, джава. Для того чтобы устроиться на высокооплачиваемую работу: Джава, в ней выше потолок возможностей по ЗП. Для личного удовольствия от кодинга: Котлин, Си шарп. Для того чтобы попарить мозги: любую функциональщину. И так далее. При этом. Знания ЯП это примерно процент от необходимого для программиста. Я написал статью где попытался объяснить почему https://blog.itschool-hillel.org/articles/programeriya-ili-chto-nuzhno-znat-programmistu

Очень субъективная картинка (а по другому сложно нарисовать), в php в примеры какие-то тухлые. Нет fb, badoo, vk

На своём опыте знаком с корявостью php. RoR или Django будут получше даже для маленького проекта.

PHP 7 вполне хорош, язык стабильно улучшается.

Вы хотели сказать - с корявостью рук некоторых PHP программистов?

Картинка все-таки старая, Go тогда еще не взлетел

А где единственный мне знакомый и изучаемый 4 года х86(

- Начинал с Object Pascal и заняло около 3 месяцев, чтобы начать писать свои первые десктоп приложения. Через 2 года отдал предпочтение PHP и web разработке, т.к. быстрее можно творить и быстрее получать обратную связь. - Рекомендую python, т.к. все сложности спрятаны под капотом и остается только решать стоящие перед программистом задачи. Почитать: Лутц М. "Изучаем Python, 4-е издание" - Я бы не тратил время на офлайн курсы. Единственный плюс - мотивация, т.к. надо ножками дойти и послушать лекцию, а потом еще и практику успешно пройти, да экзамен сдать - Да, эффективно. Но нужно понимать, что на этих курсах вы узнаете как устроен молоток и изучите пару примеров, как наносить удары по гвоздям. Пример хороший онлайн школы https://www.codecademy.com/ - Читать: https://habrahabr.ru/ + https://toster.ru/ https://stackoverflow.com/

Чтобы я рекомендовал будущему программисту

1. Мотивация Порог вхождение в программирование высок и чтобы преодолеть его, нужно запастись немалым терпением. Примерный набор знаний web-программиста на языке PHP: html, css, javascript, linux, http, nginx, php-fpm, vcs, sql, php, composer, psr, phpdoc, oop, phpunit, etc Из этого всего язык программирования только php.

Пусть это будут даже деньги, но мотивация должна быть. Без нее велика вероятность бросить.

2. Изучить фундамент Один из лучших путей достижения этой цели - cs50 от Гарварда https://www.edx.org/course/introduction-computer-science-harvardx-cs50x (eng) https://www.youtube.com/playlist?list=PLawfWYMUziZqyUL5QDLVbe3j5BKWj42E5 - на русском Курс также добавит мотивации изучать программирование

3. Выбрать язык Какие задачи вы хотите решать? Программировать микроконтроллеры? Делать сайты? Писать десктопные приложения? Мобильные? Разрабатывать игры? В интернете легко найти информацию, какой язык для чего подходит. С конкретным языком, возможно, облегчит выбор два сайта (eng): https://learnxinyminutes.com/ http://hyperpolyglot.org/ На них вы наглядно увидите, что из себя на практике представляет тот или иной язык программирования.

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

6. Для общего развития прочитать классику: - Эндрю Хант, Дэвид Томас "Программист-прагматик. Путь от подмастерья к мастеру" - Мартин Р. "Чистый код. Создание, анализ и рефакторинг" - М. Фаулер "Рефакторинг. Улучшение существующего кода" - Эрик Фримен, Элизабет Фримен, Кэтти Сьерра, Берт Бейтс "Паттерны проектирования"

7. Всегда учиться

Выбирать надо не язык, а экосистему. Причём ту, что развивается, а не умирает. Это резко ограничивает диапазон выбора.

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

1. Умение пользоваться молотком, отвёрткой, шпателем и т.д. Это уровень языка программирования, но в нём это будут умения загрузить файл, принять пакет по сети, вывести сообщение в лог или отсортировать массив. Базовый уровень, необходимый всем программистам. Это то, чему обычно учат в онлайн-курсах или в курсах освоения ЯП за три месяца.

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

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

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

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

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

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

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

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

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

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

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

Здесь уже громадный практический опыт и мощная профессиональная интуиция играют решающую роль.

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

Практика создаёт каркас для знаний замысловатой формы, который мы называем опытом. Без этого никакой инженерный навык не представляет ценности в реальном мире.

📎📎📎📎📎📎📎📎📎📎