All streams
Search
Write a publication
Pull to refresh
33
0
Огромный Боевой Человекоподобный Робот @Tanner

Python-программист

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

Что, крепостное право вернули?
Типичный ментальный блок отлично описал mSnus:
Для начинающих, первым языком? Которые не знают, что такое функция и переменная? Не говоря уж о классах…

Это сколько же времени пройдёт, прежде чем они сумеют написать
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 лямбды!
OK, будем считать, что это исключительно моя проблема.
Это ваше мнение. Но оно не обязательно верное.
Это не то чтобы мнение, это аналитический приём такой, упрощение. В смысле, я не берусь анализировать сразу все факторы, делающие ЯП хорошим для обучения, я беру только один − сложность входа. Он для меня интереснее других, возможно, потому что мой собственный интеллектуальный ресурс весьма ограничен.

Ну да. И что?
Да и верно, шут с ними! :)
Да, препроцессор ужасен, и шаблоны тоже ужасны. Кодогенерация вообще ужасна в любом виде, и если вынести её наружу, то станет наверняка ещё хуже.

Зато есть D, в котором избавились от препроцессора и шаблонов. Я, честно говоря, не понимаю, почему он так непопулярен.
Не «сложнее», а «бесполезнее». В том смысле, что можно уже брать более сложные и более выразительные языки.

Тут, видимо, мой косяк. Я дожен был в явном виде обозначить то, что подразумевал с самого начала, и уже упомянул в комментариях: главная польза от «учебного» языка − это собственно обучение основам программирования, то есть
ввод/вывод, литералы, переменные, присваивание, сравнение и логика, управление последовательностью выполнения, функции…

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

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

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

То есть для изучения в школе Foo может оказаться проще, чем Bar, но при этом в ВУЗе всё кардинально поменяется, и там Foo станет сложнее, чем Bar? Ну, не верю. Разве что Scratch, может быть, но его и старшекласникам-то поздно.

Вообще-то вы к ним «подобрались» на словах «переменная» и «присваивание».

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

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

В определённых случаях без ввода/вывода невозможно ничего продемонстрировать, увы.
Я считаю, что достаточно полно описал контекст фразой «для начинающих». Между выбором первого и последующих ЯП разница действительно существенная. Дальше можно сколько угодно ранжировать фичи по их значимости, это ничего не изменит. Основа останется той же: ввод/вывод, литералы, переменные, присваивание, сравнение и логика, управление последовательностью выполнения, функции, а там мы уже подбираемся к специфическим для разных языков вещам.
Вообще-то, за то, что попадает в поле зрение обучающегося, отвечает преподаватель.
Я не очень хорошо понимаю, как это относится к теме обсуждения. То есть я на месте преподавателя действительно позаботился бы, чтобы в поле зрения обучающегося (полного новичка) не попал код на Java. Но если Java всё-таки выбран в качестве первого языка, то, вы полагаете, ответственность преподавателя может как-то смягчить этот удар, или?…
Я сравниваю языки не на «бесполезной конструкции», а, наоборот, на всём, что попадает в поле зрения обучающегося, кроме неё.

Чем больше попадает, тем хуже для обучения.
Возможно, в некоторых языках базовая арифметика реализована лучше, понятнее, чем в других. Спорить не буду.
Эффективность чего?
Вы просто забыли, каково это было − ничего не знать.
Мне кажется, это не совсем так работает. Изучение языков уровня C/С++ и ниже надо основывать на знаниях цифровой схемотехники, хотя бы уровня “What Every Programmer Should Know About Memory” или Digital Design and Computer Architecture. Если предложить неподготовленным людям начинать с С++, то это будет не кругозор, а БДСМ. А вот Python легко усваивается и без этого, поэтому он и школьникам доступен, и всякие гуманитарии-естественники на нём статистику просчитывают.

Information

Rating
Does not participate
Date of birth
Registered
Activity