Комментарии 142
А где в этом C++ коде используются области видимости?
Brainfuck же
Та же Java, минус модификаторы доступа, плюс неймспейсы
Почему про пакеты в Java ни слова? Неявный
java.lang
и дефолтный пакет — это, конечно, хорошо, но чуть дальше пойдешь — те же импорты начнутся.puts «Hello World!»
лаконичнее всех вышеприведенных примеров
Если я правильно понял статью, то по вашему выходит, что PHP для изучения просто идеален. "Hello, World!" просто прост до безобразия. Для понимания концепции переменных даже в их типы вдаваться не надо. Ну а под конец можно код написать практически в Java-стиле.
#include <stdio.h>
int main()
{
// printf() displays the string inside quotation
printf("Hello, World!");
return 0;
}
У нас Си уже много лет первый ЯП (у физиков), радиотехники почему-то (из-за графических пакетов) используют С#, а вот экономисты пересаживаются на питон, хотя раньше была джава. На счет программистов согласен, им си в качестве первого ЯП полезен, чтоб понимать низкоуровневые абстракции. Но вот для тех, у кого программирование нужно для подсчета и моделирования, наверно лучше начинать с чего-то высокоуровневого
Рисовать картинки куда нагляднее для начинающего, чем работа в той же консоли а ля DOS.
Как показывает опыт, практически невозможно объяснить современной молодежи, никогда не видевшей зеленых экранов, что такое консоль и как она выводит построчно.
В JS, исходя из моего небольшого опыта в нём, много WTF вызывает то, что лямбды не захватывают this, и приходится извращаться. Кажется, даже в Lua этот аспект понятнее.
Лучший язык, на сегодня, для обучения — JavaScript
Серьезно? Сразу вспоминается — https://cs9.pikabu.ru/post_img/2016/09/15/7/147393909915812096.jpg
1. JS — открыл консоль браузера и ты уже можешь быдлокодить. Нет установки доп. программ, а браузер почти 100% есть у любого.
2. Ещё с 2D, 3D алгоритмами можно играться, что гораздо лучше сухих ответов консоли для новичка.
3. Не нужны медленные IDE для разработки (Notepad++ для большинства задач хватает).
4. C-подобный язык (ИМХО — все базовые конструкции максимально просты для понимания с мин. познаниями английского).
В итоге: порог вхождения ниже плинтуса, телодвижений для начала программирования минимум => больше времени можно провести изучая алгоритмы, язык и почти 0 настраивая окружение. Начинать всегда сложнее всего, а с JS этот момент упрощён максимально.
P.S. Непонятное, для начинающих, автоматическое приведение типов заставляет их избегать его использование в пользу спец. методов и в редких случаях, о ужас! почитать спецификацию.
console.log('Hello, World!');
Как бонус для обучения, можно запустить в любом браузере на любой системе, и вообще как-то использовать на практике не по работе, чтобы отключить рекламу на конкретном сайте, например.
А вообще, долго смеялся над Java как лучшим языком для начинающих. Представляю, как школьники будут конфигурировать Maven или Gradle, собирать jar или war, запускать это под каким-нибудь Tomcat… Если уж жестить, пусть лучше Kotlin учат, там хотя бы синтаксис компактнее.
UPD: начал писать про JS, но меня опередили))
редставляю, как школьники будут конфигурировать Maven или Gradle, собирать jar или war, запускать это под каким-нибудь Tomcat…
Посмейтесь по поводу webpack и gulp до кучи.
он довольно прост в конфигурации.
Да и мавен не сложен (понятные английские слова в XML, очевидная иерархия тегов), тем более, что к нему гуи есть во многих IDE. Это вам не страшный CLI ковырять.
большинство фреймворков предлагает готовую встроенную конфигурацию, как react-scripts или vue-scripts.
Архетипы мавена, spring boot с генератором проектов.
Помнится мне, NetBeans (да и Idea) генерировал какие-то свои ant-скрипты полностью прозрачно для неискушённого пользователя, и java-проекты компилировались и запускались по нажатию кнопки Run, безо всяких мавенов. Для новичка самое то.
Бо потом, у этого новичка будет полный ступор, когда что-то пойдет не так.
Что может пойти не так, чтобы случился полный ступор? Скорее он случится, если усложнять начальный этап обучения программированию системами сборки типа cmake или make (или чем-то позабористее). Но при обучении программированию нужно некоторое усердие, а в таком случае новичок со сборкой разберётся.
К слову, в delphi практически всегда программируют мышкой компилируют нажатием кнопки, отдельной системы сборки как бы и нет. И я когда-то так и не смог объяснить дельфистам cmake. Возможно, это и есть тот ступор, но всё-таки я списываю это на индивидуальные особенности.
Что может пойти не так в идее с джавой? Ну, к примеру, вам понадобилось в ваш пакет запихать что-то сторонее (драйвер селениума, к примеру), как ресурс, и потом им пользоваться. Если не понимать как тот пакет организован, это чуток не совсем тривиальная задача.
Что может пойти не так в идее с джавой? Ну, к примеру, вам понадобилось в ваш пакет запихать что-то сторонее (драйвер селениума, к примеру), как ресурс, и потом им пользоваться. Если не понимать как тот пакет организован, это чуток не совсем тривиальная задача.
В IDE есть каталоги "исходники", "тесты", "ресурсы", "тестовые ресурсы", "библиотеки" (прямо *.jar). Добавляете туда что надо — и IDE (посредством ant, а может быть и maven, в зависимости от настроек проекта) автоматически подхватывает изменения конфигурации и запускает (через систему сборки) с правильными параметрами javac и java. При желании конфиг системы можно править вручную, или переписать вручную. Всё довольно наглядно — не припомню, чтобы NetBeans прятал от меня вызов ant или структуру jar-файлов.
Но говорить, что Java лучше для начинающих может только человек, который никогда в жизни не общался с начинающими, не знающими пока ни одного языка.
Так-то вы сами, сравнивая его с JS, включили кучу "если", которых у не знающих, очевидно, не будет
можно ещё сказать, очевидные английские буквы везде, во всех языках
Так то не язык, а структура данных.Понять связь dependency внутри dependencies не так уж сложно на самом деле. Далее — документация вполне адекватна.
В npm скрипты пишутся на shell, если человек умеет работать с командной строкой — он автоматически понимает все скрипты в npm.
Абстрактно работать с командной строкой и писать скрипты — это очень разные вещи. Назвать синтаксис баша интуитивным у меня язык никак не повернется. Да и писать на нем едва ли станет начинающий, ведь он читал про кучу сборщиков с готовыми модулями под различные задачи.
говорить, что Java лучше для начинающих может только человек, который никогда в жизни не общался с начинающими, не знающими пока ни одного языка.
Громкое заявление, особенно на фоне утверждения про то, что новичок должен уметь пользоваться командной строкой.
Hello world
Жаль не могу сейчас найти источник — на одной из англоязычных конференций товарищ с юмором рассказывал о своих коллегах-программистах, искренне не понимающих, как сделать цикл с помощью условного оператора и оператора безусловного перехода.
Если уж сравнивать, то не hello worldами, а todo list. Хотя бы понятно будет, как обрабатывается ввод, как рисовать интерфейс, как организовывать хранение. И т. д.
А вы хотите сразу вывалить студенту на голову все концепции языка, все фичи, да ещё библиотеками-фреймворками всё сдобрить, графика там, UX, RDBMS… Это что, такой особый вид дедовщины? Или просто саботаж учебного процесса? ;)
Я не говорю о том, что надо начинать изучать со сложного приложения. Я лишь хочу донести, что измерять сложность языка с помощью hello world неправильно.
Ну вот изучил студент этот hello world, даже математику, формулки посчитал. А дальше захотел написать простенькую игру, например, крестики-нолики. Вот тут уже начинает сложно выглядеть то, что просто выглядело в hello world.
И если уж мы заговорили о ЯП, то следующим мы обучаемся уже на основе примеров кода. За всех не скажу, но мне значительно проще разобраться, глядя в чужие удачные примеры.
Имхо, начинать надо с базовых понятий — булевой алгебры, архитектуры компа и процессора в частности(на пальцах, учить делать свои цп не стоит), алгоритмов. Потом перейти к asm и его связи с набором команд, и уже потом — добро пожаловать на высокий уровень. Не говорю, что это надо знать на все 100%, но хотя бы в ознакомительном курсе преподать. Иначе это больше похоже на дрессировку чем на обучение.
Для аналогии — это как дать теорему виета, не изучив предыдущую программу алгебры — решать квадратные уравнения будут люди хорошо, но до понимания происходящего дойдут только самые любопытные, а другие так и останутся дрессированными, а не обученными.
Я считаю, что начинать надо с практики, за это и люблю Python с его книгами типа "Automate the Boring Stuff with Python", где рассказывается, как решить каждодневные задачи быстро, но неэффективно.
К ключевым словам и строкам добавляется понятие функции.
Неа. Просто не надо объяснять ключевые слова (да и строки объяснять не надо), объясните только функции и значения.
И это, кстати, аргумент в пользу того, что не надо начинать с "Hello world", а надо начинать с математических операций.
Вот только для разных концепций разные языки подойдут по-разному. И от выбора ваших примеров будет зависеть эффективность.
Обучения.
… так зачем вы сравниваете языки на бесполезной конструкции?
Чем больше попадает, тем хуже для обучения.
Вообще-то, за то, что попадает в поле зрение обучающегося, отвечает преподаватель. Вы почему-то решили выбрать hello world, хотя никакого смысла в этом нет.
Вообще-то, за то, что попадает в поле зрение обучающегося, отвечает преподаватель.Я не очень хорошо понимаю, как это относится к теме обсуждения. То есть я на месте преподавателя действительно позаботился бы, чтобы в поле зрения обучающегося (полного новичка) не попал код на Java. Но если Java всё-таки выбран в качестве первого языка, то, вы полагаете, ответственность преподавателя может как-то смягчить этот удар, или?…
Я не очень хорошо понимаю, как это относится к теме обсуждения.
Полностью. Потому что выбор "лучшего языка" бессмысленен вне контекста программы обучения.
Я считаю, что достаточно полно описал контекст фразой «для начинающих».
Нет, недостаточно. Есть "начинающие" в общей школе. Есть — в профильной. Есть — в ВУЗе. В техникуме. На курсах.
И это не считая разницы между программами разных преподавателей.
Дальше можно сколько угодно ранжировать фичи по их значимости, это ничего не изменит.
Потому что не надо ранжировать фичи по значимости. Нужно выбирать что и в каком порядке давать учащимся.
а там мы уже подбираемся к специфическим для разных языков вещам.
Вообще-то вы к ним "подобрались" на словах "переменная" и "присваивание". Учитывая, что ввод и вывод совсем не настолько важны, чтобы быть на первом месте, эта специфика внезапно сказывается почти сразу.
Нет, недостаточно. Есть «начинающие» в общей школе. Есть — в профильной. Есть — в ВУЗе. В техникуме. На курсах.
То есть для изучения в школе Foo может оказаться проще, чем Bar, но при этом в ВУЗе всё кардинально поменяется, и там Foo станет сложнее, чем Bar? Ну, не верю. Разве что Scratch, может быть, но его и старшекласникам-то поздно.
Вообще-то вы к ним «подобрались» на словах «переменная» и «присваивание».
Вообще-то нет. Я понимаю, что эти вещи в разных языках выполняются по-разному, но для некоторых примеров эта разница несущественна, и именно эти примеры и нужно использовать в начале обучения.
Учитывая, что ввод и вывод совсем не настолько важны, чтобы быть на первом месте, эта специфика внезапно сказывается почти сразу.
В определённых случаях без ввода/вывода невозможно ничего продемонстрировать, увы.
То есть для изучения в школе Foo может оказаться проще, чем Bar, но при этом в ВУЗе всё кардинально поменяется, и там Foo станет сложнее, чем Bar?
Не "сложнее", а "бесполезнее". В том смысле, что можно уже брать более сложные и более выразительные языки.
но для некоторых примеров эта разница несущественна
Вот разница между возможностью и невозможностью присвоения несущественна, да.
именно эти примеры и нужно использовать в начале обучения
Ну вот видите, мы уже подобрались к тому, что программа имеет значение.
В определённых случаях без ввода/вывода невозможно ничего продемонстрировать, увы.
… и эти случаи вполне можно отодвинуть на "позже".
Не «сложнее», а «бесполезнее». В том смысле, что можно уже брать более сложные и более выразительные языки.
Тут, видимо, мой косяк. Я дожен был в явном виде обозначить то, что подразумевал с самого начала, и уже упомянул в комментариях: главная польза от «учебного» языка − это собственно обучение основам программирования, то есть
ввод/вывод, литералы, переменные, присваивание, сравнение и логика, управление последовательностью выполнения, функции…
Выразительность, востребованность на рынке труда и другие параметры я не рассматривал. Ну, потому что (опять же самоцитата, простите)
Лучше быстро и легко научиться программировать на бесполезном языке, а потом выучить востребованный на практике язык и пользоваться им, чем выбрать для обучения программированию слишком сложный язык и биться лбом об стену.
Вот разница между возможностью и невозможностью присвоения несущественна, да.Конечно, я забыл, что некоторые функциональные языки обходятся без присваивания. :)
… и эти случаи вполне можно отодвинуть на «позже».Так все языки, для которых нет REPLов, придётся отодвинуть.
главная польза от «учебного» языка − это собственно обучение основам программирования, то есть
Это ваше мнение. Но оно не обязательно верное.
Так все языки, для которых нет REPLов, придётся отодвинуть.
Ну да. И что?
Это ваше мнение. Но оно не обязательно верное.Это не то чтобы мнение, это аналитический приём такой, упрощение. В смысле, я не берусь анализировать сразу все факторы, делающие ЯП хорошим для обучения, я беру только один − сложность входа. Он для меня интереснее других, возможно, потому что мой собственный интеллектуальный ресурс весьма ограничен.
Ну да. И что?Да и верно, шут с ними! :)
Это не то чтобы мнение, это аналитический приём такой, упрощение. В смысле, я не берусь анализировать сразу все факторы, делающие ЯП хорошим для обучения, я беру только один − сложность входа. Он для меня интереснее других, возможно, потому что мой собственный интеллектуальный ресурс весьма ограничен.
Ну вот и получается, что вы выбрали лучший язык программирования для начинающего себя.
Из плюсов — хорошая документация, лёгкость в освоении, встречается в разных интересных местах (от wow до nginx, redis или какой-нибудь экзотической консоли pico8). Из минусов — несколько странный null, метатаблицы, не очень удобная отладка, отсутствие ООП в полном смысле этого понятия.
Считаю, что для первого ЯП очень даже годится.
Что — всё так плохо?
Или так и надо?
Ну по мне так язык нужно выбрать не по сложности для новичка, а по потребностям. Начинать нужно с того где ты сможешь добиться возможности работать. Что толку с языка который не востребован в том месте где живёшь. Можно конечно фрилансить, однако мне кажется, что сначала не помешало бы получать по шапке за, скажем так, не правильный код и пояснение почему он не реальный. А так можно только в компашке где уровень мастерства высок.
Стиль обучения типа «сейчас напишите так, а в следующем семестре узнаем, зачем» я не считаю допустимым. А объяснить работу программы на Basic, ничего не откладывая «на потом» и не прикрывая ладошкой, намного проще, чем, скажем, работу эквивалентной программы на Java. Поэтому Basic лучше подходит для обучения программированию, чем Java.
Аргументы в духе «дальше применить» я не принимаю, потому что я говорю об обучении программированию, а не о практике. Лучше быстро и легко научиться программировать на бесполезном языке, а потом выучить востребованный на практике язык и пользоваться им, чем выбрать для обучения программированию слишком сложный язык и биться лбом об стену.
Python 3: функции, строковый тип данных
IMO, в 3-м заметно проще объяснить
2. Для полноты картины замечу, что задолго до реализации НИИСИ РАН на мехмате МГУ были разработаны Е-практикум и КуМир, которые использовались на самом мехмате и продавались в школы. Поэтому упоминание только НИИСИ мне глаз резануло. Ну ок, современная реализация их, а название сохранено для узнаваемости, пусть.
При таком подходе человеку даётся широкий кругозор, возможность понимать работу программ так, как оно есть на самом деле. Если начать со слишком низкого уровня (ассемблер), то это может на корню отбить желание изучать программирование. Если начать с языка, слишком отдалённого от реальности, то человеку будет вообще сложно понять как и почему эта магия работает, и шаг влево, шаг вправо — всё, ступор.
Зато есть D, в котором избавились от препроцессора и шаблонов. Я, честно говоря, не понимаю, почему он так непопулярен.
Кодогенерация вообще ужасна в любом виде, и если вынести её наружу, то станет наверняка ещё хуже.Сейчас читаю про Cog, может, это облегчит мне жизнь, вынеся все макросы в pre-build step IDE. Вообще, с помощью кодогенерации можно попробовать вынести микрооптимизации и часть оптимизация компилятора, но стоит ли оно усилий, я не знаю.
EDIT В хорошей статье lamerok «Безопасный доступ к полям регистров на С++ без ущерба производительности» описана шаблонная магия, которая здорово упрощает программирование для МК, но так писать я не могу — мозг ломается. Может, получится реализовать кодогенерацию на питоне и с большей понятностью.
Зато есть D, [...] честно говоря, не понимаю, почему он так непопулярен.Я, честно говоря, не совсем понимаю, для кого он. Он как плюсы без значительной части legacy, но специфических фич не вижу, и в ногу тоже не сильно сложнее выстрелить. В качестве замены С++ мне больше Раст видится.
foreach
чего стоит! А умные массивы и срезы! А какие простые в D лямбды!Проблема в том, что он поставляется с garbage collector'ом, что сразу делает его конкурентом не C++ и Rust, а, скорее, Go, при том, что позиционируется он как конкурент именно плюсам. Плюс его противоречивая история, когда существовало две стандартные библиотеки; плюс чрезвычайно медленное развитие: например, когда я писал на D (а было это лет 5 назад), в него внесли экспериментальные аллокаторы, которые должны были снизить зависимость от сборщика мусора. Как я сейчас посмотрел, они до сих пор экспериментальные, в то время как Rust уже успел условно вторую версию языка выпустить.
В общем, проблем там хватает. И хотя по скорости и удобству написания он напоминает JavaScript — в том смысле, что ты можешь на коленке программу набросать, и она скомпилируется и запустится, — мне больше импонирует Rust. Писать на нём с непривычки, конечно, боль, но зато и предлагает он значительно больше.
Если человеку программирование нужно просто побаловаться, то конечно нужен такой язык, который на первый взгляд очень похож на человеческий язык, чтобы ничего изучать не нужно было. Тем не менее, как и в игре на музыкальном инструменте, лучше начинать с базовых принципов, если только твоя цель — не играть на гитаре перед костром.
Сообщить("Привет МИР!");
Для C# и F# есть прекрасное приложение LINQPad, в котором очень удобно писать короткие скрипты на C#. Можно просто написать Console.WriteLine("Hello World");
и все — остальную портянку из неймспейсов и точки входа LINQPad сгенерирует и скормит компилятору сам.
Страшный и непонятный Haskell. Строки, функции, всё:
main = putStrLn "Hello world!"
Очередной "эксперт" без преподавательского опыта рассуждает о преимуществах языка для начинающих на примере хеллоуворлдов.
Прежде чем выбирать язык, нужно понять кого мы собираемся учить и зачем.
Та же Java, минус модификаторы доступа, плюс неймспейсы. Ничего интересного, проходим мимо.
Неймспейсы для "Hello World" не нужны. Т.е. такой код валидный:
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("Hello world!");
}
}
Для PHP закрывающий тег почти всегд опускают, особенно когда он не препятствует разбору (используется при альтернативном синтаксисе). Т.е. код можно сократить до такого:
<?php
echo "Hello world!\n";
У меня есть кое-что со школы => https://github.com/ip1981/gcd
Второй этап — различные глобальные подходы: ООП, процедуры и т.п.
Базы данных — отдельная история, требующая отдельного изучения. Взаимодействие с БД — также независимый момент, который плюс-минус в зяыках принципиально не отличается, когда уже понимаешь, что тебе надо.
PHP и другие языки, смешанные с неявным выводом, не стоит, ИМХО, изучать как первый, т.к. они могут заблудить потенциального крутого программиста, ибо он изначально вольется в смесь вывода и логики — просто потеряет время. Хотя бы на втором этапе их можно задействовать.
asm, конечно, топчик, но нафиг, если собирается идти работать «как обычный программист и зарабатывать кучу бабла» )
На мой взгляд. в проекте на водпрессе не обязательно кодить. Он может быть полезен, чтобы показать ученикам как устанавливать и запускать веб-сервер и СУБД, как разворачивать на нем вордпресс, как модифицировать его плагинами и темами, как наполнять его контентом. По пути можно захватить житейское объяснение IP, портов, DNS, хостинга, HTTP(S), SSL-сертификатов, SEO.
Если школьники в рамках информатики, то изучать им надо базовые концепции программирования, и только немного про написание программ. Потому основы алгоритмов и структуру данных и немного про ввод-вывод. Тут уж правда, чем меньше будет «лишних» языковых конструкций, чем проще делать домашку, тем лучше.
В вузе уже очень много зависит от специализации. Так много, что с этого надо начинать, ибо гораздо лучше будут заходить примеры, связанные с понятной предметной областью.
Если же учиться решил уже взрослый человек, надо понять, для чего ему это. Сменить профессию? Тогда востребованность джуниоров на рынке рулит. Расширить компетенции? Тогда зависит от профессии.
Всё, что я хотел показать в своей статье − это откуда берётся эта кривая, и почему одни языки изучить новичку намного проще, чем другие. И что, соответственно, не все ЯП одинаково хорошо подходят на роль первого, «учебного» языка.
Иначе вы просто подменяете понятия: «обучение программированию» → «изучение Java».
Для начинающих, первым языком? Которые не знают, что такое функция и переменная? Не говоря уж о классах…
Это сколько же времени пройдёт, прежде чем они сумеют написать
public static void main в своем Hello World и понять, что это и зачем вообще нужно? А почему public? А почему void? Я себе представляю школьников классе так в 5-м, которые путают ООП с ОПГ...
Я именно это и имел в виду, когда насчитал 12 концепций различного уровня сложности в самой простой программе на Java.
Как преодолеть ментальный блок? Очевидно, выбрать язык, который позволяет изучать все эти концепции по отдельности, или хотя бы в меньшей концентрации.
Может и правда, если ему хочется игрушку для телефончика написать, то надо дать готовый каркас и учить сначала простые вещи делать
А «готовый каркас» Android-приложения на Java будет содержать сотни строк кода и конфигурации, обычно автосгенерированных IDE, без учёта платформенных библиотек. То есть изначальная проблема усугубляется.
Я, наоборот, предполагаю, что от первых шагов до «взрослых» фреймворков − путь неблизкий, и начинать надо с элементарного.
Эх… Не о том вы говорите… Одна из проблем образования вообще, и обучения программированию в частности, это слишком узкий взгляд на задачу. Если ребёнку не заходят в голову алгоритмы и он не понимает, что такое программа, то ментальный блок у него будет от любого языка. И это даже не касаясь языков, переходить на которые сложно даже опытным программистам.
Все эти "public void main" на первых порах не более чем шум, на который можно не отвлекаться. И пофиг, как он выглядит в конкретном языке.
Я реагирую на вполне конкретную статью (перевод), в которой предлагается обучать полных новичков в программировании (возраст и мотивация не рассматриваются) на примере Java
Кстати, нет. Не предлагается. Там предлагается начинать изучать программирование (что сразу говорит о мотивации) с Java в качестве первого языка.
Что, впрочем, не отменяет того, что статья выглядит как рекламная.
И да, если вы хотите поспорить со статьей, то надо опровергать ее конкретные тезисы. Для людей, которым исходная статья не была интересна (типа меня), ваша статья выглядела самостоятельной — и, в таком качестве, слабой.
Отсюда требования к такому ЯП:
а) Его транслятор/компилятор должен обладать «ступенчатой» сложностью («версионностью»). Например, сначала мы просто работаем с числами, а потом уже вводим обязательные типы. И только потом говорим, что может быть динамика. Или чтобы можно было «поиграться» с разными вариантами ООП, и т.д.
б) Среда его разработки должна устанавливаться одним щелчком мыши.
И я не уверен, что такой ЯП есть (Кумир еще не смотрел, но
Поэтому, к сожалению, приходится сравнивать промышленные ЯП в качестве «первого», что уже плохо, так как здесь у каждого человека есть свои весовые коэффициенты тех или иных фич (даже если он о них пока не знает).
UPD: А вот идти в алгоритмы (вверх) и в железо (вниз) можно будет только потом, когда ученик уже будет понимать, как это всё влияет на «выхлоп».
UPD2: А уже потом, в качестве первого промышленного, в настоящее время оптимален Python.
На HH.ru:
— 6 961 вакансия «C»
— 3 107 вакансий «JavaScript»
— 2 814 вакансий «Python»
— 2 628 вакансий «Java»
— 1 413 вакансий «PHP»
— 1 308 вакансий «C++»
— 1 241 вакансия «C#»
— 543 вакансии «Go»
С, JavaScript и PHP слишком узко-специализорованы и в них надо идти осознанно, а JavaScript еще немного запутанный (как для первого ЯП). У Java, C#, C++ высок порог входа. Go — мало вакансий.
И не просто изучаться — появляться на глаза ученика!
Нет такого требования. Что вы, что автор, видите проблему там, где ее нет. Это абсолютно нормально сказать: всякие static void main
это у нас обязательное оформление, мы разберем его подробнее позже. Пока что цель изучить вот этот фрагмент и вот эту команду.
Каверзный вопрос "почему тут так написано" можно задать практически по любому языку.
Вот например для Python 3:
print('Hello world!')
Почему тут кавычки одинарные, а не двойные?
Почему тут скобочки круглые, а не квадратные/фигурные/угловые?
Мы всегда должны ставить восклицательный знак в конце команды?
Почему не работает фрагмент ниже?
print('Первая строка!')print('Вторая строка!')
Зачем команды писать на разных строках?
На все эти вопросы лучше всего ответить "так задумали разработчики языка" или "Так указано в стандарте Python. Если сделать иначе, то нас не сможет понять компьютер и другие разработчики".
Если отвлекаться на обоснование подобных решений синтаксиса, то можно потерять кучу времени, которое можно потратить на изучение действительно важных тем.
На все эти вопросы лучше всего ответить "так задумали разработчики языка" или "Так указано в стандарте Python. Если сделать иначе, то нас не сможет понять компьютер и другие разработчики".
… и, что характерно, подобное "магическое мышление" прекрасно работает при изучении многих других дисциплин, в том числе и в информатике, так что совершенно не понятно, почему программирование должно быть исключением.
Что вы, что автор, видите проблему там, где ее нет.Есть разные подходы к преподаванию. Опираясь на свой опыт в этом, я и вывел свой подход.
Дело ведь в том, что я разделяю ваш подход "изучать одну концепцию за раз". Однако это не значит, что преподаватель должен всячески избегать оформительского кода. Уж тем более это не значит. что наилучший язык программирования тот, у которого самая тривиальная команда вывода "Hello world!" на экран.
Я не оптимизирую количество оформительского кода, потому что нет такой цели.
В обучении программированию есть ведь более важные задачи. Например необходимость помнить об единицах измерения, оформлять ответ с нужной точностью, обрабатывать все ошибки.
Поэтому я все это требую, хотя это по сути это приводит к раздуванию оформительского кода. Например вывод результата вычисления площади круга может выглядеть вот так:
System.out.printf("Площадь круга равна %.4f метров", areaInMeters);
А в какой-нибудь задаче вычисления площади прямоугольника будет еще пачка условий вроде
if (widthInMeters >= 0){
System.out.println("Ширина должна быть неотрицательна");
return;
}
if (heightInMeters >= 0{
System.out.println("Высота должна быть неотрицательна");
return;
}
Хотя, конечно же, проще написать что-то вродеSystem.out.print(a)
и совсем не требовать проверки вводимых данных.
Когда приходится js преподавать, то для наглядности лучше кучу кода написать: html страницы, поля для ввода и кнопку. Так люди видят что-то похожее на реальную разработку, а не абстрактные упражения с консолью. Оформительского кода значительно больше, но люди с ним успешно справляются.
Лучший язык программирования для начинающих