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)

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

В питоне как раз сложно забыть про существование типов. Попробуй, например, сложить число со строкой.

annulen ★★★★★
()

Ты не повериш но python(а в целом не важно- как это ни странно )

ибо выбор языка это следующее по порядку малости

первоочередное - это выбор обучающегося и обучающего

и кста ассоциативный массив сразу вполне норм иначе просто скатывание в мэйнстрим 70ых

зависит больше от обогащённости входной руды - стоит пробежать экскурсом по Код(Петцтольда) и или по какому кирпичу Хеннеси Патерсона али Патерсона Хеннеси ( опятже к чему больше у первака склоннность)

жечь свечку с обоих концов - и со стороны битиков(с мелким зачёрпыванием транзисторов) и со стороны какой интерактивной реактивной marimo (али jupyter notebook) --

важно не размазывать кашу по тарельке обводняя тексты хихахахиньками а пулять концептами то бишь формулы и структуры и механизмы ( в частности(чисто примера для) что СТЕК(DFS) что ОЧЕРЕДЬ(BFS) это частные специализированные случаи ПРИОРИТЕТНАЯ_ОЧЕРЕДЬ(ВЗВЕЩЕННЫЙ_ПОИСК) где прямая и обратная хронология поступления )

см Программирование Вторая Грамотность Ершова

см «Грамотное» программирование Кнута

см Jupyter Notebooks в части обучежных

qulinxao3 ★★
()

Pascal устарел и денег не принесёт

Swift принесёт. :)

Если в языке неизбежно приходится использовать классы или printf, то это затруднит объяснение

Что поделать, всё есть объект.

dataman ★★★★★
()

Не Си и не современные коммерческие языки

Проблема общая: я хочу преподавать материал по мере нарастания сложности.

Scratch.

Bfgeshka ★★★★★
()

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

Оберон - это не Паскаль. Его иногда считают прообразом Java и .NET

Delphi - это тоже не Паскаль, это можно сказать Modula-2 с классами (также как Borland Pascal).

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

Я бы советовал выбрать Pascal, хотя современный паскаль, как уже сказал, корректнее называть, скорее модулой-2 с классами и еще кучей плюшек. И при всех недостатках для обучения, наверное, ничего лучше нет.

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

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

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

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

Scratch же только для маленьких детей. В принципе, я не против, но не всегда такая аудитория.

Бейсик, особенно где цифры идут в начале каждой строки, оторван от норм. Да, он лёгкий, но паскаль просто ближе к тому, как принято писать код.

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

До сишечки ты всегда можешь докатиться если потребуется нечто низкоуровневое (разбор/формирование бинарных данных на сишечке удобнее и быстрее например).

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

«там» основная(не вся и даже не большая часть но вероятно одна из мод)проблема - в почти неизбежности видеть на нескольких уровнях абстракции

ибо число - которому сейчас обучают когда у личинок предметно-конкретное мЫшленье - есть абстракция к которому человечество подошло(в массе) около 10К лет(не более)

приём нумерации Гёделя - полностью закрывает проблему понимания что такое указатели

т.е число есть имя друго числа и имя разного как функция интерпретации указующего

дело совсем не в указателях - дело в умении отличать имя(именующее) от именуемого - ну и не ловитца в аутореферентные :)

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

битиками обмазываться можно пинцетом можно лопатой

чисто примера для

scapy легче разобраться с протоколами

чем всё(учебное)(протокольное) ваят на Сяшке - что бы почуствовать как битики по сеточке в пакетиках просачиваются сквозь сокетики

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

А я не про пакетики а про неведомые бинарные файлы например или пэйлоад неведомых usb устройств. Вот про файлы например, возьми kaitai struct и оцени треш и угар который он генерит или например оцени дружественность construct. Мне проще описать структуры и гонять ими по памяти например.

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

и опят же «сол мол VS тарелька вилька»

если обучатель (ненамерено) запутывает то учащемуся сложней

теже картежы(tuple) против наборов(list) - и то и то это набор «имён» обьектов - где tuple на уровне самой(т.е верхней) сущности фиксируется при создании

тогде не будет «открытием» что и у тюпла может менятся(при смени содоржимого одного из именнованных) содержимое

как и мало полезная для новичков(в питоне) концепция переменная - которая тащит за собой сказки про ящики(ячейка памяти) и чисто выдуманные ярлычки на ящиках - которые(ярлычки) есть артефакты буквоцифровых меток из асма которые целиком удобночитаемые замены абсолютным адрессам в коде

если пытатся одновременно пояснять нубу - естественно будет переусложнёная нейронка с забавными вылетами

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

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

amm ★★
()

Я бы C# не сбрасывал со счетов. Простые и демо программы будут мало отличаться от питоновского варианта.

amm ★★
()

выбирайте Smalltalk, он прикольный :-)

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

скорее комментарий для программиста

Ага, поэтому сейчас аннотацию широко используют во всяких pydantic, fastapi и прочих.

anonymous
()

ИМХО Си. Но любой язык без стандартной библиотеки не очень-то много может, поэтому стоит объяснить, что это и для чего, да откуда взялось. Даже в том же Python практически любой код начинается с импорта внешних библиотек, классов, модулей.

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

Это смотря какой язык выбрать. Для «устаревших» Паскаля и Си, с их функциональным программированием, «всё есть функция» :)

yars068 ★★★★
()

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

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

функциональным программированием

Вы батенька тут функциональщину и процедурщину не путайте!

anonymous
()

Начинать надо с ассемблера, понять как работает процессор. Потом на Си, понять как работает память, далее можешь топать куда хочешь.

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

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

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

Начинать надо с ассемблера, понять как работает процессор

Тогда еще раскурить схемотехнику всяких микро-80, радио-86рк, ют-88 и орион-128.

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

Не надо, современный 32-бит ассемблер попроще. Как раз для новичка. 64-бит сложнее, если смотреть на x86_64. Поддержка 32-бит пока еще есть в современных ОС.

jpegqs
()

Этот вопрос тут стабильно раз в месяц всплывает.

Python, без вариантов.

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

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

AntonI ★★★★★
()

Смотря чем заниматься во взрослой жизни потом.

Было время, оказалось, что нужно было очень быстренько, буквально за минуты, делать программки для работы бд. Хлеб с маслом приносили именно паскаль, дельфи и даже access 97.

С другой стороны, почти весь интерфейс, в котором работаешь и который можно править - это С, С++ (gtk, qt и т.п.). Надо знать, и хотя бы читать код, чтоб править его.

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

паскаль, дельфи и даже access 97

Ты бы еще клиппер вспомнил.

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

шттаааа. %)

ибо с# в одёжах промышленной жабы а в индустрии эталон(были) копулируемые языке сутки билдящие но наносекунды в исполнении до полного завершения да плюс многословность имён ибо менеджеры в первом мире чаще филологи чем stem - то что и жаба что и с#(в меньшей но таки имены что паравозы) очень много буккипинга обусловленного не столько самими задачами сколько эволюцией индустрии к моменту продолжительного существования жабы и шарпа

в питоне(более успешно чем в с++ Страустропом) воплощена идея(но не механизм очевидно :) двухуровненых грамматик ВанВардена(:))(по случайности один из научников у Гвидона нашего Росумма)

тот же ic|

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

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

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

Scratch же только для маленьких детей.

Scratch не только для детей

https://cs50.harvard.edu/scratch/2024/

Для совсем маленьких (не умеющих читать) – Scratch Junior.

паскаль просто ближе к тому, как принято писать код.

Вы собираетесь обучать кодописательству?

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

risc-v как раз у ПетерсонаХеннеси али в ХеннесиПетерсона - и теория на любом уровне для прозелита и перспективы в индустрии для нуба пришедшего за хлебушком да и дядки тьюринг лауряты(не без политики но всёж заслуженно)

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

твои ваще не генерит - тем и полезна что чистое исполнение чужих генераций

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