Хекслет
7.8K subscribers
3.97K photos
42 videos
2.65K links
Программы обучения Хекслета - https://ru.hexlet.io/courses
Бот навигатор по ресурсам Хекслета - @HexletLearningBot
Открытое сообщество студентов (более 8000 человек) - @hexletcommunity
Наша группа VK: https://vk.com/hexlet
Download Telegram
Какую последнюю книгу по программированию вы прочитали? Я иногда задаю этот вопрос на собеседовании, так как ответ на него коррелирует с тем, насколько человек увлекается программированием.

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

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

Если вам самостоятельно сложно выбрать конкретные книги, то можно начать с нашего списка, который содержит только самое важное для всех программистов: https://ru.hexlet.io/pages/recommended-books

p.s. Как эффективно читать профессиональную литературу https://ru.hexlet.io/blog/posts/how-to-read-books
Всем привет, на связи снова Кирилл. Расскажу про такую штуку, как ошибка выбора языка. Многие новички боятся выбрать “не тот язык”, что они потратят деньги и время в пустую, а потом придется переучиваться целиком. К счастью это не так.

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

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

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

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

Начнем с того, что популярных языков, которые подходят новичкам достаточно мало. Вот небольшая классификация:
* Массовые и базовые: java, php, js, python, c#.
* Менее массовые и обычно идут как вторые языки: go, ruby
* Особняком Swift для IOS
* Языки обертки, построены на базе других: typescript/js, kotlin/java. Идут как дополнение при трудоустройстве
* Тяжелые языки, из универской среды: c, c++

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

Дальше обычно говорят, выбирай что тебе по душе, фронтенд, мобильная разработка, геймдев или бекенд. Если вы способны на этом этапе выбрать, то действительно за каждым направлением есть более менее определенные языки: фронтенд - js/typescript, ios - swift, android - kotlin (но надо знать java), бекенд - в принципе любой из списка кроме swift. Но не все могут вот так взять и выбрать. Что делать в этом случае? На этом этапе нужно исходить из локации. Смотрите компании в своем городе их вакансии. Обычно разные города имеют разную специфику. Например в Казани много Python, а в Ульяновске много Ruby.

Ну и последний критерий, когда все что выше не работает. Я предлагаю вот такую последовательность: php, js, python, java. Почему именно так? Скриптовые языки (php, js, python) значительно проще остальных. Да кто-то жалуется что с ними не копнешь базы, но надо понимать что копание базы зависит не от языка, а от программы обучения. В этом отношении у Хекслета все в порядке. Я затрону эту тему в одном из следующих постов. А почему php раньше чем js и python? В регионах это наиболее массовый язык, где большая нехватка спецов. Более 70% всех сайтов написано на PHP. JavaScript вторым, потому что это и бек и фронт. А фронт нужен везде, на каком бы языке не был бек. То есть он почти всегда присутствует как второй язык. С питоном чуть сложнее, он популярен да, но далеко не всегда для веб-разработки. Например питон используется для дата аналитики, машинного обучения и так далее. Это требует спец знаний и спец обучения. Ну а Java массовая, поэтому она в этом списке, хотя и кривая обучения у нее сильно выше. Не потому что она глубже, а потому что в самой Java много концепций и подходов специфичных только для Java или статически типизированных языков.

#заметки
По идее я тут должен снова написать "Привет, это Кирилл", но не хочется повторяться) А давайте потренируемся. Задача с собеседования, которую мне задавали в далеком 2009 году. Сейчас такие задачи встречаются редко.

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

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

#заметки
Под одним из предыдущих постов был такой вопрос:
“У меня всегда была проблема с математикой, не знаю её от слова совсем. Стоит ли начинать изучать какие то языки программирования без базовых знаний этого предмета или незнание математики не будет проблемой? Вот ту же JS если начать учить?”

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

Математика для прикладного программирования не нужна!

Теперь чуть подробнее. Основная математика, которая есть в программировании, — это арифметика, немного логики (если A, то B), нахождение остатка от деления или проверка числа на четность. Согласитесь, не рокет сайнс? :) Даже если вы про это не знали или забыли, это легко учится в процессе.

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

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

Когда говорят про то, что математика нужна, имеют ввиду обычно две вещи:

1. Это говорят люди с вышкой. Тут скорее история “мы потратили 5 лет на это, значит, это было не зря”. Причем такие ребята не признаются в этом никогда. Но будут всегда говорить, что математика нужна.

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

Итог такой. Чтобы стать программистом, вам достаточно учиться программированию, а нужные концепции попадутся в процессе. Если вы хотите копнуть сами, то можно глянуть наше видео про математику. Видео уже 7 лет.
#заметки
Недавно мы с вами говорили о том, что первый язык не принципиален. Какой бы язык не был выбран, новичок встречается с одними и теми же ключевыми понятиями. Что к ним относится?

Литералы, Операции, Типы данных, Переменные, Логические выражения и Логика, Циклы и Вызов и Определение Функций.

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

На изучение этих концепций, для минимального уровня понимания, понадобится от 2 недель до месяца при условии хорошо проработанного материала как на code-basics. Как и всегда, главное в этом процессе практика, а не сухая теория.

Приведу пример простой программы на нескольких языках, чтобы вы увидели похожесть. Задача состоит в том, чтобы вывести на экран yes или no в зависимости от того, больше ли пяти сравниваемое число (находится в переменной) или меньше. На псевдокоде это выглядит так: Если a больше 5 то печатай yes иначе no. Вот как выглядит этот код в разных языках:

PHP
$a = 9;
print($a > 5 ? 'yes' : 'no');

JavaScript
let a = 9
console.log(a > 5? : 'yes' : 'no');

Java
var a = 9;
System.out.println(a > 5 ? "yes" : "no");

Python
a = 9
print('yes' if a > 5 else 'no')

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

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

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

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

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

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

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

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

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

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

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

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

Текст ускоряет анализ и потребление. Можно больше времени рассматривать или читать ту часть, которая интересна. И наоборот, можно пропускать то, что понятно и неинтересно.

Возможно, у вас возникает вопрос, почему бы не объединить и не делать и текст, и видео? Ответ очень простой: стоимость. Производство хорошего видео стоит бесконечно дорого.
#заметки
13 апреля с 18 до 19 часов по Мск пройдёт бесплатный турнир «День Кодбаттла» — ежемесячный турнир между программистами по решению задач на скорость. Участвовать могут все желающие: от новичков до опытных разработчиков.

Зачем это нужно?

1. Подготовка к собеседованиям. Вы набьёте руку на решении типовых алгоритмических задач, которые могут спросить на собеседовании.
2. Нетворкинг. Турнир проходит в формате созвона, где можно поучаствовать самому и посмотреть на других.
3. Реальная проверка своих сил. Несмотря на задачи "элементарного" и "лёгкого" уровня сложности, всегда можно столкнуться с чем-то новым, что будет непонятным и потребует дополнительного изучения.

Чтобы принять участие, зарегистрируйтесь на codebattle, откройте турнир по ссылке и нажмите кнопку Join. Незадолго до встречи в чате турнира будет ссылка на видеовстречу.

До начала турнира, если вы ни разу не участвовали, можно зарегистрироваться и поиграть тестовые игры с ботом, чтобы понять куда нажимать и как всё работает.
Стоит ли учить Python и будет ли он востребован через несколько лет?

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

* Веб-разработка. На Python делается немало сайтов и сервисов, среди которых Netflix, Dropbox, Uber.

* Аналитика данных. С помощью Python аналитики выполняют различные манипуляции над данными для построения отчетов и графиков. Все это присутствует внутри любой средней и крупной организации.

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

* Инжиниринг данных (сбор и хранение). С помощью Python данные собирают и подготавливают для работы аналитиков. Это есть во всех крупных компаниях.

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

* Разработка игр. Известнейший World of Tanks написан во многом с помощью Python.

* Автоматизированное тестирование. На Python специализируется много тестировщиков, и это отдельное направление в тестировании.

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

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

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

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

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

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

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

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

Самое простое — это игра в обезьянку. Представьте себе обычную плитку. На одну плитку можно поставить ребенка, а на другую положить банан. Задача ребенка состоит в том, чтобы добраться до банана. Но есть условие — нельзя просто взять и пойти к банану. Ребенок может использовать несколько отдельных команд: повернуться налево на 90 градусов, повернуться направо на 90 градусов и сделать шаг вперед. Сначала ребенок, скорее всего, будет просто игнорировать правила и идти. Дальше можно потихоньку научить его следовать этим командам независимо. Если это окажется слишком легким, игру можно усложнить, добавив, например, шаг назад.

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

Если ребенку понравилось, следующим шагом можно купить одну из типовых алгоритмических игр, в которой нужно задавать путь для робота. Сейчас это довольно популярное направление на маркетплейсах. https://ozon.ru/t/GMA86aV

Принцип здесь такой же, как и в игре «обезьянка», только путь задается заранее с помощью джойстика, а робот потом следует по этому пути.

Дальше можно включать компьютер. Одна из самых классных вещей для детей на компьютере — это визуальный язык программирования https://scratch.mit.edu/. Вокруг него существует множество проектов, которые позволяют детям визуально описывать разнообразные алгоритмы, оживляющие разных персонажей. Например, это может быть дракон, который собирает камни. Подробнее можно посмотреть тут https://www.tynker.com/

Ну и последний шаг перед реальным программированием — это игры наподобие Code Monkey https://www.codemonkey.com/. Здесь уже пишется код, хотя и на очень упрощенном языке. Задача все та же: обезьянке надо добраться до банана. Подобная игра проводит по всем ключевым концепциям языков программирования. Все это сопровождается прикольной анимацией.

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

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

const usersEmails = [‘lala@gmail.com’, ‘kirill@hexlet.io’, ‘petya@gmail.com’];
for (const userEmail of usersEmails) {
sendEmail(userEmail);
}

В этом коде всего лишь 3 строчки, отвечающих за цикл, они начинаются со слова “for”. Сколько времени понадобится человеку, чтобы изучить циклы? Как показывает практика, достаточно много, не хватит и недели, чтобы научиться ими пользоваться.

Скорее всего, понадобится от 2 недель до месяца, чтобы начало что-то получаться. Почему так долго?

Циклы являются неинтуитивной концепцией. Когда человек думает про циклы, он не может их уложить во что-то привычное, что помогло бы логически о них рассуждать. В итоге получается, что синтаксис цикла учится за день-два, но потом требуются недели, чтобы ухватить, как их использовать. Именно поэтому в программах Хекслета есть целый курс, посвященный Циклам (называется «Массивы», так как циклы очень связаны с ними).

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

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

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

У вас есть 100 дверей, закрытых на замок. Вы проходите по ним 100 раз. Первый раз вы открываете каждую дверь. Второй раз вы закрываете каждую вторую дверь. На третий раз вы по очереди открываете каждую третью дверь, если она закрыта, и закрываете ее, если она открыта. Вы продолжаете делать это 100 раз. Какие двери останутся открытыми после последнего прохода?

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

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

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

Сделали транскрипцию курса JS коллекции — теперь его можно проходить в текстовом формате.

В треке «Алгоритмы и структуры данных» добавили новые уроки в курсы «Алгоритмы на графах» и «Алгоритмы на деревьях»

Появились новые текстовые уроки в курсе «Введение в тестирование веб-приложений»:
— Гипертекст
— Уязвимости на странице
— Протокол HTTPS и передача данных по сети
— Сессии
— Виды тестирования

В курс по настройке окружения в JS добавили урок про Lock-файл.

Поменяли 7 уроков с вебинарных на текстовые в курсе «Жизненный цикл ПО».

Собрали полную обратную связь от студентов по курсу «Python Функции» и полностью его переписали.

Закончили работу над курсом «Python Pandas».

Полностью доделали 30 уроков в курсе по TypeScript на Code Basics. Он пока еще в работе, но первые уроки уже можно проходить.

Появились первые 10 уроков в новом курсе «Основы SQL» — это 50% от всех уроков. Этот курс — общий для всех профессий на Хекслете, где есть SQL и работа с базами данных.

Появились новые уроки в курсе «Аналитические задачи в бизнесе»:
- Воронкообразные диаграммы
- Агрегации в аналитике
- Линии тренда

Мы работаем над новыми текстовыми курсами — «SQL Join», «DevOps Terraform», «Rails ORM», «Playwright», «Мобильное тестирование», «Линейная алгебра», «Продвинутая аналитика на SQL».

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

Образовательные новости Хекслета

У нас стартовал первый поток новой профессии «Аналитика данных» — нашей большой образовательной программы, где мы учим специалистов работать с данными.

На Хекслете прошел третий поток «Школы авторов» — нашего бесплатного образовательного проекта, где мы учим разработчиков, тестировщиков и аналитиков данных писать тексты, статьи и уроки.
Что обычно подразумевается под изучением нового языка программирования и сколько это занимает времени?

Изучение любого нового языка можно разбить на следующие стадии:

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

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

Уровень «Могу создавать типовые приложения, для которых используется язык». На этом уровне основное изучение находится не в области возможностей языка, а в области библиотек и фреймворков, которые нужны для написания приложений. Кроме этого, сюда входят разные элементы конкретной экосистемы. В бекенде — базы данных, веб-сервера, среда запуска, инфраструктура. Во фронтенде — DOM API, BOM API, событийная архитектура, сборщики и тому подобное. Все это не имеет конца обучения, так как здесь приходится учиться постоянно. До уровня «могут взять на работу джуниором» придется потратить месяца три. До уровня «способен работать с приемлемой скоростью» около полугода реального опыта.

Сроки условные, многое зависит и от человека, и от конкретной экосистемы, и от обстоятельств. Главное же то: сложность кроется не в самом языке, а в экосистеме вокруг этого языка.
Developer Roadmaps https://roadmap.sh/ — популярный сайт, на котором опубликованы роадмапы и иллюстрированные гайды. Они показывают, что нужно выучить, чтобы стать специалистом в той или иной технической области. С их помощью можно хотя бы примерно представить себе объем знаний и увидеть темы, которые нужно изучить в теории. В реальности же, в этих роадмапах есть множество вещей, которые либо очень опциональны, либо являются одним из множества вариантов.

Давайте попробуем частично разобрать один из них. Для примера возьмем фронтенд как самое популярное направление. Вот ссылка на него: https://roadmap.sh/frontend

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

Desktop Applications, Mobile Applications — не пригодится скорее всего никогда. Это просто другие области.

Progressive Web App — технология хорошая, но мало распространенная. Необходимость знать ее возникает только у тех, у кого явно существует PWA в компании. Остальным особо не надо.

Static Site Generator — Генераторы статических сайтов. Они сами по себе, без фреймворков, представляют из себя что-то вроде готовой CMS, где надо просто класть правильные файлы в правильные места. Их не нужно специально учить, достаточно прочитать документацию и выполнить по ней создание подобного сайта.

GraphQL — один из вариантов общения клиента и сервера. Используется далеко не всеми, поэтому тут как повезет. В целом можно не тратить время, если вы совсем новичок.

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

TypeCheckers—– тут имеется ввиду TypeScript. Знать его в современном мире полезно. Много где используется. От новичков, скорее всего, знание не потребуется. В крайнем случае можно пройти бесплатный курс https://code-basics.com/ru/languages/typescript.

WebComponents — несколько элементов из HTML и CSS. Можно прочитать одну статью.

Storage, WebSocket, SSE, Service Workers — находятся в одном списке, но нужны они по разному. WebSocket, пожалуй, самая массовая вещь из этого списка, которая широко используется. Остальное по необходимости. Большая часть указанного тут не является чем-то сложным. От новичков не требуется.

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

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

CSS Frameworks — знать конечно полезно, но не все сразу. Достаточно знать хотя бы один на базовом уровне. Остальное подтягивается в процессе реальной работы, если оно используется..

Web Security Knowledge — по-хорошему знать надо, на практике мало кто разбирается. От новичков практически не требуется, но этому нужно учиться просто потому, что профессионал обязан думать о безопасности

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

Сферы применения JavaScript не ограничиваются браузерами и веб-приложениями. Еще на этом языке, например, можно:

- Разрабатывать мобильные приложения. С помощью фреймворка React Native создаются приложения для Android и iOS

- Серверные приложения. Например, Node.js-разработчик отвечает за написание логики веб-приложений на стороне сервера на языке JavaScript. Он разрабатывает бэкенд-компоненты, связывает приложение с другими веб-сервисами. С помощью Node.js реализуется парадигма «JavaScript для всего», когда вместо разных языков для работы над фронтендом и бэкендом, используется один.

- С помощью Electron на Javascript пишут десктопные приложения. Например, в Discord, VSCode и Slack.

В апреле 2023 года JS занимает седьмое место в индексе TIOBE, который составляется на основе статистики поисковых запросов.

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

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

1. Это единственный язык такого класса, поддерживаемый браузерами, и нет предпосылок, что это может поменяться, хотя попытки были. Всё, что создается как альтернатива JavaScript, в конечном итоге конвертируется в него.
2. Необходимость шарить логику между клиентом и сервером, Server Side Rendering и прочее укрепляет позиции JavaScript на серверной стороне.
3. Тулинг для JavaScript, как и для клиентского веб-стека, по большей части написан на JavaScript.

Специалисты со знанием JavaScript будут востребованы еще достаточно долго.
Стоит ли учить язык программирования GO?

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

Изначально Go создавался для программ, связанных с сетями и инфраструктурой, в качестве замены популярных высокопроизводительных серверных языков, таких как Java и C++. Сегодня же Go используется как бэкенд-язык для огромного количества различных направлений разработки:

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

Однако лучше всего Go раскрывается как язык программирования для работы с инфраструктурой. Самые популярные инструменты в этой области написаны именно на Go — Kubernetes, Docker и Prometheus.

Какие преимущества есть у Go?

Простота языка

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

Высокопроизводительные приложения

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

Комьюнити

У Go очень живое и активное сообщество разработчиков, так как это Open Source проект. Они самостоятельно контрибьютят его, создают новые модули и библиотеки, а также помогают новичкам осваивать язык. Несмотря на Open Source историю, Go активно поддерживается Google, поэтому язык быстро развивается и активно меняется.

В вакансиях в связке с Go часто требуются технологии:

1. Docker
2. Postgres
3. Kubernetes
4. gRPC
5. Git
6. Rest API
7. Python
8. PHP

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

А почитать про PHP можно вот здесь https://vk.com/wall-54520471_16769
Среды разработки: какие они бывают и чем отличаются друг от друга. Рассказывает Кирилл Мокевнин.

В любом производственном процессе, к которому относится и разработка программ, есть несколько этапов:

1. Производство
2. Сборка
3. Контроль и испытания
4. Доставка

Давайте рассмотрим каждый из них более подробно.

Производство

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

Место, где происходит этот процесс, называется средой разработки. Всегда есть как минимум две среды:

1. Среда разработки, ее часто называют development environment
2. Среда эксплуатации, обычно ее называют боевая среда или production.

В зависимости от среды код должен вести себя по-разному. Например:

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

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

Сборка

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

Контроль и испытания

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

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

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

Тут появляется еще одно новое слово — релиз, или по-другому выпуск. С одной стороны, это процесс выкатки в бой новой версии системы. С другой стороны, так иногда называют сборку, которая представляет из себя новую версию системы.

Читайте продолжение в комментариях 👇