Я вполне верю, но думаю, что это уже оффтопик, так как исходный посыл статьи − как заколхозить накопитель для дома из устаревших энтерпрайзных девайсов, а не наоборот, топовую бытовую комплектуху тащить в энтерпрайз.
Для начинающих, первым языком? Которые не знают, что такое функция и переменная? Не говоря уж о классах…
Это сколько же времени пройдёт, прежде чем они сумеют написать
public static void main в своем Hello World и понять, что это и зачем вообще нужно? А почему public? А почему void? Я себе представляю школьников классе так в 5-м, которые путают ООП с ОПГ...
Я именно это и имел в виду, когда насчитал 12 концепций различного уровня сложности в самой простой программе на Java.
Как преодолеть ментальный блок? Очевидно, выбрать язык, который позволяет изучать все эти концепции по отдельности, или хотя бы в меньшей концентрации.
Может и правда, если ему хочется игрушку для телефончика написать, то надо дать готовый каркас и учить сначала простые вещи делать
А «готовый каркас» Android-приложения на Java будет содержать сотни строк кода и конфигурации, обычно автосгенерированных IDE, без учёта платформенных библиотек. То есть изначальная проблема усугубляется.
Я, наоборот, предполагаю, что от первых шагов до «взрослых» фреймворков − путь неблизкий, и начинать надо с элементарного.
Если при изучении Java у ученика возник ментальный блок, то лучше взяться за Python или JS с прицелом на Kivy (Cordova, React Native), чем продолжать штурмовать Java.
Иначе вы просто подменяете понятия: «обучение программированию» → «изучение Java».
Как я уже отвечал выше в комментариях, я не претендую на всеобъемлющее решение этого вопроса, да мне это и не очень интересно. Я реагирую на вполне конкретную статью (перевод), в которой предлагается обучать полных новичков в программировании (возраст и мотивация не рассматриваются) на примере Java − языка со слишком крутой кривой обучаемости. Характер этой кривой, и даже, кажется, само её существование автором исходной статьи просто игнорируется.
Всё, что я хотел показать в своей статье − это откуда берётся эта кривая, и почему одни языки изучить новичку намного проще, чем другие. И что, соответственно, не все ЯП одинаково хорошо подходят на роль первого, «учебного» языка.
Плюсы без лигаси − это уже круто! А D − это даже не плюсы без лигаси, а плюсы, спроектированные проще и чище. Один foreach чего стоит! А умные массивы и срезы! А какие простые в D лямбды!
Это не то чтобы мнение, это аналитический приём такой, упрощение. В смысле, я не берусь анализировать сразу все факторы, делающие ЯП хорошим для обучения, я беру только один − сложность входа. Он для меня интереснее других, возможно, потому что мой собственный интеллектуальный ресурс весьма ограничен.
Не «сложнее», а «бесполезнее». В том смысле, что можно уже брать более сложные и более выразительные языки.
Тут, видимо, мой косяк. Я дожен был в явном виде обозначить то, что подразумевал с самого начала, и уже упомянул в комментариях: главная польза от «учебного» языка − это собственно обучение основам программирования, то есть
ввод/вывод, литералы, переменные, присваивание, сравнение и логика, управление последовательностью выполнения, функции…
Выразительность, востребованность на рынке труда и другие параметры я не рассматривал. Ну, потому что (опять же самоцитата, простите)
Лучше быстро и легко научиться программировать на бесполезном языке, а потом выучить востребованный на практике язык и пользоваться им, чем выбрать для обучения программированию слишком сложный язык и биться лбом об стену.
Вот разница между возможностью и невозможностью присвоения несущественна, да.
Конечно, я забыл, что некоторые функциональные языки обходятся без присваивания. :)
… и эти случаи вполне можно отодвинуть на «позже».
Так все языки, для которых нет REPLов, придётся отодвинуть.
Нет, недостаточно. Есть «начинающие» в общей школе. Есть — в профильной. Есть — в ВУЗе. В техникуме. На курсах.
То есть для изучения в школе Foo может оказаться проще, чем Bar, но при этом в ВУЗе всё кардинально поменяется, и там Foo станет сложнее, чем Bar? Ну, не верю. Разве что Scratch, может быть, но его и старшекласникам-то поздно.
Вообще-то вы к ним «подобрались» на словах «переменная» и «присваивание».
Вообще-то нет. Я понимаю, что эти вещи в разных языках выполняются по-разному, но для некоторых примеров эта разница несущественна, и именно эти примеры и нужно использовать в начале обучения.
Учитывая, что ввод и вывод совсем не настолько важны, чтобы быть на первом месте, эта специфика внезапно сказывается почти сразу.
В определённых случаях без ввода/вывода невозможно ничего продемонстрировать, увы.
Я считаю, что достаточно полно описал контекст фразой «для начинающих». Между выбором первого и последующих ЯП разница действительно существенная. Дальше можно сколько угодно ранжировать фичи по их значимости, это ничего не изменит. Основа останется той же: ввод/вывод, литералы, переменные, присваивание, сравнение и логика, управление последовательностью выполнения, функции, а там мы уже подбираемся к специфическим для разных языков вещам.
Вообще-то, за то, что попадает в поле зрение обучающегося, отвечает преподаватель.
Я не очень хорошо понимаю, как это относится к теме обсуждения. То есть я на месте преподавателя действительно позаботился бы, чтобы в поле зрения обучающегося (полного новичка) не попал код на Java. Но если Java всё-таки выбран в качестве первого языка, то, вы полагаете, ответственность преподавателя может как-то смягчить этот удар, или?…
Мне кажется, это не совсем так работает. Изучение языков уровня C/С++ и ниже надо основывать на знаниях цифровой схемотехники, хотя бы уровня “What Every Programmer Should Know About Memory” или Digital Design and Computer Architecture. Если предложить неподготовленным людям начинать с С++, то это будет не кругозор, а БДСМ. А вот Python легко усваивается и без этого, поэтому он и школьникам доступен, и всякие гуманитарии-естественники на нём статистику просчитывают.
Что, крепостное право вернули?
Я именно это и имел в виду, когда насчитал 12 концепций различного уровня сложности в самой простой программе на Java.
Как преодолеть ментальный блок? Очевидно, выбрать язык, который позволяет изучать все эти концепции по отдельности, или хотя бы в меньшей концентрации.
А «готовый каркас» Android-приложения на Java будет содержать сотни строк кода и конфигурации, обычно автосгенерированных IDE, без учёта платформенных библиотек. То есть изначальная проблема усугубляется.
Я, наоборот, предполагаю, что от первых шагов до «взрослых» фреймворков − путь неблизкий, и начинать надо с элементарного.
Иначе вы просто подменяете понятия: «обучение программированию» → «изучение Java».
Всё, что я хотел показать в своей статье − это откуда берётся эта кривая, и почему одни языки изучить новичку намного проще, чем другие. И что, соответственно, не все ЯП одинаково хорошо подходят на роль первого, «учебного» языка.
foreach
чего стоит! А умные массивы и срезы! А какие простые в D лямбды!Да и верно, шут с ними! :)
Зато есть D, в котором избавились от препроцессора и шаблонов. Я, честно говоря, не понимаю, почему он так непопулярен.
Тут, видимо, мой косяк. Я дожен был в явном виде обозначить то, что подразумевал с самого начала, и уже упомянул в комментариях: главная польза от «учебного» языка − это собственно обучение основам программирования, то есть
Выразительность, востребованность на рынке труда и другие параметры я не рассматривал. Ну, потому что (опять же самоцитата, простите)
Конечно, я забыл, что некоторые функциональные языки обходятся без присваивания. :)
Так все языки, для которых нет REPLов, придётся отодвинуть.
То есть для изучения в школе Foo может оказаться проще, чем Bar, но при этом в ВУЗе всё кардинально поменяется, и там Foo станет сложнее, чем Bar? Ну, не верю. Разве что Scratch, может быть, но его и старшекласникам-то поздно.
Вообще-то нет. Я понимаю, что эти вещи в разных языках выполняются по-разному, но для некоторых примеров эта разница несущественна, и именно эти примеры и нужно использовать в начале обучения.
В определённых случаях без ввода/вывода невозможно ничего продемонстрировать, увы.
Чем больше попадает, тем хуже для обучения.