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)
Ответ на: комментарий от praseodim

в дорогущих школах-интернетах для детей элиты калькулятором или компьютером, всякими гаджетами запрещено пользоваться класса до 8-го.

Лучше бы учили грамотно ими пользоваться. А то получаем абсолютно компьютерно-безграмотных чиновников,пытающихся рулить тем в чем ничего не понимают. Достаточно посмотреть насколько неудобно сделаны большинство гос и около-гос сайтов.

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

Этими символами в коде «подавится» компилятор. Да и отображение их в IDE тоже под вопросом - не факт что в используемом там шрифте они будут.

Судя по всему вы пишите из 90-х, т.к. в нулевых существование юникода уже перестало быть военной тайной. В таком случае слушайте и запоминайте, в 98-м будет дефолт, ни в коем случае не берите кредит в баксах, даже если процент выгодный, разоритесь. Недвижимость лучше придержать, она в цене будет расти (особенно Московская) что твой биткоин. Про биткоин расскажу на следующем сеансе связи. И ещё, не переживайте, всё будет хорошо!

P.S. Пример:


> (defn ✓ [x] (Math/sqrt x))
> (✓ 4)
2.0
ugoday ★★★★★
()
Последнее исправление: ugoday (всего исправлений: 1)
Ответ на: комментарий от ya-betmen

Нет, железного феликса тоже нельзя.

А почему феликса нельзя,а счеты можно? В чем принципиальная разница? А то я в первом классе застал даже «шариковые ручки нельзя», к счастью во второй перешел в другую школу и там этого дремучего запрета уже небыло. Зато на уроках рисования было «фломастеры нельзя» :)

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

Забывают потому, что в школе нужно зубрить, а не понимать.

Таблицу умножения тоже нужно зубрить. Однако ее всё же обычно не забывают. Забывают то что в жизни не востребовано как те же квадратные уравнения.

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

Лучше бы учили грамотно ими пользоваться. А то получаем абсолютно компьютерно-безграмотных чиновников,пытающихся рулить тем в чем ничего не понимают.

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

praseodim ★★★★★
()
Последнее исправление: praseodim (всего исправлений: 1)
Ответ на: комментарий от ugoday

Думаете, у вас мозги по другому работают? Уверяю вас, это совсем не так.

Всё-таки у восьмилетних мозги работают еще не так. Вот если бы про 12-14-летних сказали то да, я бы согласился. Обратите например внимание что мелкие дети всегда рисуют плоские двумерные рисунки и попыткам научить их изображать на бумаге пространство почти не поддаются. Уверен что это не единственное различие работы детского мозга от взрослого,просто это первое что вспомнилось.

А могли бы в первом классе просто ввести аксиоматику Пеаоно и обойтись без этих нелепых яблок!

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

Распознавать геометрические фигуры можно обучить даже некоторых высших млекопитающих,собак например. Но до постижения абстрактного понятия «круг» им далеко. Восьмилетним детям - не сильно ближе,так как в этом возрасте у них только начинает формироваться абстрактное мышление.

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

Всё-таки у восьмилетних мозги работают еще не так

Контора, где я зарабатываю на хлеб, сделала прибыльный бизнес на визуализации бизнес-процессов. Хотя казалось бы, зачем нужна эта визуализация, каждый может открыть BPMN-файл в любимом текстовом редакторе и читать. Но нет. Не хотят читать. Готовы деньги большие платить, лишь бы не читать, а смотреть на картинку.

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

В качестве «физкультуры для мозгов» и зубрёжка годится.

Это утверждение необходимо доказать.

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

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

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

Так вся система школьного образования постоянно доказывает,особенно младшие классы.

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

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

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

Почему тогда пишут 2 + 2 = 4,а не 4 = 2 + 2 ?

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

Насчет именно восьмиэтажных формул не сказжу, а формулы поменьше в школьной математике писались и справа налево и слева направо. Ну вот например формула из статьи по вполне прикладной математике (там осадку понтона из труб вычисляли перед его постройкой) https://cs9.pikabu.ru/post_img/2018/03/02/4/1519964986127035990.png

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

сможете предоставить человека, который 11 лет зубрил таблицы Брадиса и вырос при этом нормальным

Прослушивал соответствующую аудиокнигу в пробках?

anonymous
()

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

  • Python
KaiKimera
()
Ответ на: комментарий от watchcat382

Почему тогда пишут 2 + 2 = 4,а не 4 = 2 + 2 ?

потому что тут важно что будет, если сложить 2 и 2. а не из каких слагаемых получается 4.

с формулой понтона - то же самое. тут первичная формула, она и стоит ближе к началу конструкции.

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от ugoday

в нулевых существование юникода уже перестало быть военной тайной

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

Также надо помнить,что для внешне одинаковых символов могут быть разные внутренние представления,то есть для компа это разные символы. «Буква с крышкой» может быть как и одним символом,так и составным из «буквы» и «крышки». И вот в этом месте разный софт поступает по-разному - в смысле что нажав одно и то же на клавиатуре и увидев одно и то же на экране,тем не менее получите разное внутреннее представление. Точно помню что эти проблемы вылезают при переносе файлов между маком и линуксом. Для борьбы с такими глюками придумали «нормализацию юникода»,вот только ее есть аж четыре варианта. И процесс это однонаправленный - то есть по после «нормализации» невозможно «денормализовать» строку обратно в исходное представление.

К тому же исходник это по определению текстовый файл. А в нем,в отличие от например html который вы использовали для своего примера,нет стандартного способа указания используемой кодировки. Так что учитывая сложившиеся в программировании традиции, файл скорее всего будет прочитан в однобайтной кодировке. В США это будет ascii,а в России вероятнее всего CP1251,она же «виндовая». И экзотические юникодные символы превратятся в тыкву. Не говоря о том,что в используемом для отображения кода шрифте их просто может не быть так как никто не предполагает что они в коде попадутся.

Пример

Такая замена стандартного sqrt на не особо-то и похожий на математический символ квадратного корня глиф - ни разу не наглядна. Мне она куда больше напоминает бухгалтерский символ «крыж»: https://www.audit-it.ru/terms/accounting/kryzhit.html (он же «галочка»,«птичка»).

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

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

Хорошо,заменим «чиновники» на «большие начальники» без потери исходного смысла. Зачем нам компьютерно-неграмотные большие начальники? А начальники в большинстве случаев такие.

госсайты потихоньку становятся в целом удобнее.

А должны бы наоборот,задавать стандарты удобного и оптимального интерфейса. Они же как тот ёж из анекдота - пока не пнёшь не полетит.

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

Зубрить таблицу умножения вредно.

А что с ней предлагается делать? Калькулятора ведь может под рукой не оказаться или у него кончится питание в неподходящий момент.

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

зачем нужна эта визуализация

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

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

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

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

предоставить человека, который 11 лет зубрил таблицы Брадиса и вырос при этом нормальным здровым человеком

Нормальность - штука весьма относительная,в разные времена и в разных обществах весьма разная. Например в средние века существовали монахи, зубрившие богослужебные тексты,еще и на латыни. Умными людьми были,а монастыри были центрами науки и культуры. Там кстати не только зубрили,но и книги вручную переписывали. Можете поискать исходный латинский текст какой-нибудь из общеупотребительных молитв,да хотябы всем знакомую «Отче наш», и попробовать заучить.

А совсем недавно студентов заставляли зубрить и конспектировать труды классиков марксизма-ленинизма. Я это лично застал. На экзамене могли спросить - что там говорил Ленин о чем-нибудь в такой-то статье. И изволь воспроизвести самые «ходовые» цитаты.

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

первичная формула, она и стоит ближе к началу конструкции.

Так в очень многих случаях первична формула(ее правильность) по которой вычисляли некую величину,а не поименованный адрес в памяти куда там ее потом положили. Раньше вообще однобуквенные имена переменных были весьма частым явлением. Традиция именовать счетчик цикла буквой i - это наследие тех времен(видимо от слова iteration).

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

проще чем отслеживать вложенность промеж лево правых да и наглядней

Лесенки это хорошо,но для обычных языков при необходимости просто используется форматтер. Написал,прогнал,получил красивый код лесенкой. Для Си я indent использую с опциями -npcs -bli0 –no-tabs -npsl -i4 Причем сделать это можно уже после того как код более-менее отлажен и эксперименты закончены.Я последние годы для микроконтроллеров пишу,там эксперименты это нормально,с первого раза редко когда заработает как надо. Понятно что в процессе отладки-правки-дописывания красивое форматирование нарушается. Но компилятор Си не ругается на количество пробелов перед строкой.

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

https://mathspp.com/blog/single-line-calculator

Как раз случай о которого я выше писал. Кода вроде немного. Но вот это самое window.mainloop() - когда основная работа происходит не в написанном программистом коде, а где-то в недрах подключенной сложной библиотеки. Это уже не самостоятельная программа,а что-то вроде подключаемого к библиотеке плагина, который она вызывает по каким-то своим собственным соглашениям. И чтобы разобраться что она там и как делает - надо изучить толстый и не всегда внятный талмуд,написанный из расчета что читать его будет достаточно опытный программист,а не начинающий. Тут-то вся простота Питона и заканчивается. Именно потому что не программист вызывает функции из библиотеки,а библиотека вызывает функции,написанные программистом. Лично для меня когда я лет тридцать назад впервые столкнулся с такой логикой построения программы - это было очень неприятной неожиданностью. Оно и сейчас отторжение вызывает. Справиться конечно могу,но желание связываться не возникает. Благо что в микроконтроллерах под которые я стал писать с двухтысячных годов, такой подход к построению программ почти не встречается.

watchcat382
()

лорчую за Scheme/C/Python/Ruby

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

utf-8

узнавание греческого алфавита

как и ещё эдак армя грузи и прочи глиф

так что символов достаточно - не достаточно необходимости

«и так сойдёт» (пока?)

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

почему весь такой из себя хороший Лисп так редко встречается в коммерческом программировании

Начните везде учить лиспу вместо петона — и через пару десятилетий у вас везде будет лисп, а над редкими петонщиками будут смеяться, как над ненормальными, и рисовать про них обидные картинки.

Но для этого надо, чтобы было кому учить, конечно.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)
Ответ на: комментарий от watchcat382

дык отказ от фронтира прявился на несколько лет раньше

переключением массовых сказок с hard sf на фэнтези - да и магия всегда предшествует науке как софисты(убедители словами) натурфилософам

вон :

Программист-навигатор - Чарльз В. Бахман http://rkka21.ru/docs/turing-award/cb1973r.pdf

Гибсон через 10 лет опубличился с Нейромант

для меньшего скепсиса Анафем Нила Стивенсона

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

вообще готовность решать и поиск решения

не то же самое что

умение решать по указанию

упор на математику как артиллерийскую науку

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

забывают потому что не поняли

а вот почему не поняли догадки разные

либо либо либо да ещё ж «это не ученики №??:%;?:% это значит учителя :?%*№;?»

если есть необходимость людь наизусть библиотеки цитируют

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

Начните везде учить лиспу вместо петона

Для этого, конечно, и со стороны самого языка должно наблюдаться движение навстречу пользователю. Особенно в плане тулинга.

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

Сравним с кложей: емакс само собой, но и джетбрейнс (cursive), и вскод (calva), и даже саблайм (забыл, как называется). С другой стороны, у дотнетовского варианта кложи до сих пор всё печально с базовым тулингом, и это сказывается на относительной популярности конкретно этого варианта.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от watchcat382

компьютерно почтинеграмотные по причине несколько иных общественно социальных механизмов

см Хазин Шилов Лестница в небо

см Перри Андерсон Воображённые сообщества

см Майкл Ман Источники социальной власти = The Sources of Social Power. В 4 т.

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

История воспитания в античности (Греция) / Перевод с французского А. И. Любжина, М. А. Сокольской, А. В. Пахомовой. — М. : Греко-латинский кабинет Ю. А. Шичалина, 1998. — 425 с.

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

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

использование рефлексов(зрительных) в hmi известного металла дно

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

рисовать таблицу на клеточках с обнаружением перестановочного и прочей нумерологии

в частности 365==

как на известной картине конца 19 вечка

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

ruff

зы:

ограничение на формат (лесенка) нет пути

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

это утка она маму-крокодилицу с первого взгляда узнала

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

если серьезно то :

273Бобров - Грокаем конкурентность(2025Питер).pdf - ой питон

потом Таненбаум(ага minix) и Стен? Распределённые системы - там тоже питон

ну и Петрова и Клепмана по распределённым системам

ключ на 12 не все могут в сляпую ныряя ловить

то что кэлбэки как и прочий ооп в с++ изводе то ещё мошенство было очевидно :)

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

в предисловии первого русского издания K&R ( в одном кодексе с задачником Фьюера) - от редактора издания есть очень красноречивое оправдание почему не затрагиваются вопросы параллельного исполнения

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

utf8

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

А уж в исходник юникод пихать ну совсем не хочется. Разве что в строковые литералы и то через эскейп-последовательностьи(через слеш) чтобы цифровое представление однозначно видеть и задавать. В именах функций и переменных юникоду точно нечего делать. Глюки-то выгребать потом нам,программистам. Даже при использовании чистого ascii периодически путают визуально похожие символы - перечеркнутый ноль же не просто так появился. В юникоде их куда больше.

Вот что пишет про именование идентификаторов богопротивный Микрософт: https://learn.microsoft.com/ru-ru/cpp/c-language/c-identifiers?view=msvc-170 Рекомендуют однако ascii-only. Хотя технически их компилятор и допускает в именах идентификаторов какие-то диапазоны юникодовых символов.

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

asii лишь на ~25 лет старше utf8

более того младшие 32 кода(унаследованные от телетайпо функций) стоит более интенсивней использовать

особенно переключение на расширинный набор

али кода начала завершения полей в записи как и начало завершение формы

в python utf-8 стандартный набор хранения - внутри вроде как UTC16(у СPython)

(мало?)полезно узнавать разные алфавиты

utf8 гениальный компроммис - а суббота(компиляторы) для человека

если не могут в текущие моды то сыр бесплатен

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

В случае Ады «не научить» не получится - компилятор ругаться будет.

Покажите ругань компилятора на то, что футы в одной переменной и метры в другой обозначили типом Integer?

В Си вон тоже можно определить через typedef два разных типа,производных от int.

typedef не создаёт тип. Типы создаются через struct meters { value: int; }; struct feet { value: int; };.

Компилятор МОЛЧА обрезает результат сложения до int и только потом присваивает. Это что - логичное поведение?

Вот поэтому Scheme или Python лучше.

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

А чем лучше?

Именно в данном случае ничем. Просто не хуже. А в комбинациях типа:

(with-transaction
  (let ((val (sql select ...)))
    (sql insert into result set values (f, g) ((my-calc val) (my-calc2 val val2)))))

уже лучше. Когда вся интеграция SQL и кода под капотом. В C# есть LINQ, но он предопределённый. Если мне понадобится интеграция с системой правил Пролога, а не SQL, уже не получится.

И почему весь такой из себя хороший Лисп так редко встречается в коммерческом программировании?

Во-первых, исторически. Корпорации в своё время отказались от лиспа, так как причину неудачи проекта AI спихнули именно на него. Сейчас лисп в том же положении, что и Haskell или Zig. Много на них коммерческого программирования?

Во-вторых, если речь про Common Lisp, его очень тяжело ограничить. То есть в руках неумелого программиста влияние на проект такое же как в C++ (там UB, здесь запись в чужие модули). Есть Racket, в котором нормальные модули, но он очень молод (c 2010 года).

В-третьих, в лиспах не принято писать в ООП стиле, что затрудняет миграцию с других языков программирования.

В-четвёртых (и, как бы, не главное), не хватает библиотек. Если для Java, Golang или C# корпорации создали огромный пласт стандартных библиотек, для C/C++ библиотеки создавались десятилетиями и всем миром, то у лиспов подход достаточно отличается от C и Java, чтобы делать прямое использование их библиотек неудобным, и программистов слишком мало, чтобы написать всё самостоятельно.

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Ограничение на отправку комментариев: