LINUX.ORG.RU

ЛОР, помоги выбрать ЯП для обучения

 , , , ,


1

3

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

Вот к каким мыслям я пришёл:

Язык должен наиболее чисто демонстрировать самые основы написания кода.

Не Си и не современные коммерческие языки (Java, C#, Go). Си, хотя примитивный в основе, усложнён из-за окружения, в котором используется. Современные коммерческие языки были созданы для решения проблем индустрии. Проблема общая: я хочу преподавать материал по мере нарастания сложности. Если в языке неизбежно приходится использовать классы или printf, то это затруднит объяснение (не хотелось бы слишком часто говорить «потом узнаешь для чего это нужно»), напугает студента (ему придётся писать код, используя возможности, которые он плохо понимает), создаст неправильное восприятие основ (как будто printf — это какая-то важная часть компьютера или ОС).

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

Языки, между которыми я выбираю: Pascal и Python.

Pascal устарел и денег не принесёт (обидно), но это и не является основной целью. Целью является программирование, а не современное окружение.

В частности, я не собираюсь задрачивать студента на Delphi или любой «продвинутый» диалект языка. Это противоречит цели. Я рассчитываю на то, что после должной тренировки “bare bones” нужно перейти на современный язык и это будет легко.

Важно упомянуть, что спека языка Oberon (Виртовский язык, тот же Паскаль, только упрощённый и доработанный) составляет 17 страниц.

Питон мне сложнее оценить, потому что я избегал работы с ним.

Если ограничиться императивным подмножеством, без ассоциативных массивов, классов и мета-классов, list comprehensions, HOF, исключений, то выглядит как альтернатива Паскалю. Хотя меня беспокоит динамическая типизация. Типы — очень важная вещь, хотелось бы чтобы язык помог это донести, а не быть типа «ну да, это важно, но ты забей».

Это все мои мысли.

Что касается практики, то я имел несчастье наблюдать как человек впервые знакомился с программированием, изучая Java на javarush. На это было больно смотреть.

Edit: дальнейшие пояснения по теме:

  • Подробнее про то, почему я считаю, что изучение основ и Паскаль хорошо сочетаются: 1
  • Почему не Си и не ассемблер: 1 2
  • Почему Паскаль: 1 2
  • Почему не Питон: 1
  • Целевая аудитория: 1
  • Почему такая размытая аудитория: 1 2
  • Про важность иерархии: 1


Последнее исправление: kaldeon (всего исправлений: 10)
Ответ на: комментарий от qulinxao3

для ФП нужно более непрерывный спектр иерархии памяти

Для ФП не нужна память (как понятие).

anonymous
()
Ответ на: комментарий от anonymous

Для ФП не нужна память (как понятие).

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

  • как разложить задачу на подзадачи

  • как положить подзадачи на структуры данных

  • как оценить сколько памяти сожрет мой алгоритм

  • как ограничить потребляемые ресурсы (работа за константную память)

И вот на последних двух пунтках актульные ФП начинают сосать. Есть решения всех этих проблем (вплоть до загнать ввод в сишную либу и распарсить уже её вывод), но это не про обучение новичков вообще никак.

anonymous
()
Ответ на: комментарий от anonymous

как положить подзадачи на структуры данных

Структуры данных для ФП или для структурного программирования?

как оценить сколько памяти сожрет мой алгоритм

Память - это понятие из архитектуры фон Неймана и гравардской архитектуры. Это не про ФП.

Ты занимаешься натагиванием совы на глобус, ФП на гарвардскую архитектуру.

anonymous
()
Ответ на: комментарий от anonymous

Структуры данных для ФП или для структурного программирования?

Это одни и те же структуры. Просто в ФП с ними страдают. Посмотри на коллекции в хачкеле, там все то же самое.

Память - это понятие из архитектуры фон Неймана и гравардской архитектуры. Это не про ФП. Ты занимаешься натагиванием совы на глобус, ФП на гарвардскую архитектуру.

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

anonymous
()
Ответ на: комментарий от anonymous

Учить людей программировать на языках

Учить программировать не на языках – оффтопик.

anonymous
()
Ответ на: комментарий от anonymous

Учить программировать не на языках – оффтопик.

Мне кажется это эталон вырывания из контекста.

anonymous
()
Ответ на: комментарий от anonymous

Посмотри на коллекции в хачкеле

Это и есть то самое натягивание. Потому что хаскель работает на машиние с гарвардской архитектурой.

Учить людей <чему-то>, которые не применимы в реальной работе

Реальность изменчива. Проблема обучения - это угадать, что понадобится в будущем.

anonymous
()
Ответ на: комментарий от anonymous

ывания из ко

совершенству нет предела

anonymous
()
Ответ на: комментарий от anonymous

Это и есть то самое натягивание. Потому что хаскель работает на машиние с гарвардской архитектурой.

Других-то нет.

Реальность изменчива. Проблема обучения - это угадать, что понадобится в будущем.

Это все демагогия. Людей учат программировать, чтобы они через 2-3 года пошли программы писать. Когда появится альтернатива, имеющие программировать люди её осилят.

anonymous
()
Ответ на: комментарий от anonymous

Людей учат программировать

Программирование - это формальность, как и бюрократия (почему как?). Это мода.

anonymous
()
Ответ на: комментарий от anonymous

память это отложенное вычисление и даже может ленивое

а может какая копрограмма али yield lazy

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

qulinxao3 ★☆
()
Ответ на: комментарий от qulinxao3

вычислитель

какой, единственно верный гарвардской архитектуры?

anonymous
()
Ответ на: комментарий от qulinxao3

память это отложенное вычисление и даже может ленивое

это граф конфигурации

а может какая копрограмма али yield lazy

копро.грамма, гы-гы. ковыражения как в icon, например

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

man мемоизация

man суперкомпиляция и прогонка

man сворачивание графа конфигурации

anonymous
()
Ограничение на отправку комментариев: