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)

Питухону учить школоту - только портить.

Я б сказал конечно бери бейсик но местные все полопаются, так что свежий диалект паскаля типа fpc сойдет

guyvernk
()

В догонку.

Ни в коем случае не жява/го/шарп. Это языки для тех кто знает что делает. Учиться на них - такое себе.

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

Нейросеть, иди обновись уже. Кожаные не понимают что ты пишешь.

jpegqs
()

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

Способы эти я бы назвал «снизу вверх» и «сверху вниз».

При первом мы начинаем с устройства компьютера (не опускаясь прям до физики, на логическом уровне): процессора, регистров, памяти, а изучение программирования начинаем с ассемблера, потом переходим на Си (как вариант, можно начать сразу с Си в простом виде и без углубления во всякие библиотеки, чётко поясняя, где что происходит, и какова цена того или иного действия). После этого можно перейти, например, на кресты или Objective C, затем разучить различные парадигмы и приёмы и знакомиться уже совсем с другими языками (хоть вообще лисп и хаскель — тут уже по вкусу на этом этапе).

При втором мы начинаем с математической логики и основ алгоритмов. Программируем на языке с высоким уровнем абстракции и низким порогом вхождения, например тот же Python. Учимся именно строить задачи и «объяснять компьютеру, что ты от него хочешь», упор на логику исполнения программы. Постепенно по ходу углубляемся в то, как всё устроено на более низких уровнях, переходим к оптимизации. Точно так же параллельно изучаем и ООП и функциональщину, Python это вполне неплохо позволяет. Далее, в теории немного осознав, что происходит на более низких уровнях, можно переходить к более низкоуровневым языкам, например Rust или тот же Си. Учить в конце ассемблер или нет — уже по желанию, но вообще желательно.

Если пройти весь путь, то и в том и в другом случае результат и знания получается плюс-минус одинаковые. При этом разным людям гораздо легче заходит или один или другой — кому как. Обычно они сами при этом думают, что их способ — единстенный верный. Но это не так, зависит от устройства психики, видимо, или что-то типа того — я не психолог и не нейробиолог, я не знаю, почему так, вижу только, что одним людям гораздо легче даётся так, а другим эдак, как факт.

С чего начинать в твоём случае, я даже не знаю. Pascal не сильно много преимуществ даст в плане обучения по сравнению с Python. Типы данных разве что там удобнее будет объяснить, это да. Так что в каком-то смысле он лучше. Но с другой стороны, Python подходит по второму способу (в моём понимании выше), и, что немаловажно, на Python ученики смогут сразу себе реально полезные скрипты писать, автоматизировать какую-нибудь рутину, а это всегда приятно и очень хорошо способствует мотивации дальнейшего обучения и любознательности. На Паскале тоже можно, конечно, но сам понимаешь, как это будет ощущаться — больше как обуза и как обучение чисто ради обучения — а это не всем просто выдержать и заставить себя сохранить именно живой интерес к объекту изучения. Так что, наверное, всё же Python, ИМХО, будет несколько более правильным выбором. Но только при условии, что всё время будет держаться в головах, что это именно высокий уровень абстракции, и что в итоге всё равно будем учить и другие языки тоже.

P.S. Главное с C# и Java не начинай. Они приводят к необратимому повреждению мозга, если их учить именно в качестве первого языка.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)

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

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

Все что ты написал в 1 варианте - это именно классический трек обучения програмульктрованию в универах.

По крайней мере когда я свою первую вышку получал - она шла по этому треку.

Сверху вниз - это что то от пориджей и смузихлебов. Код уровня оленьпеадников из куяндекса. Var polosa, cvet Это путь для взрослых математиков, желающих заменить фортран на нейросети. Но не путь програмульки

guyvernk
()

я бы всеравно начинал с Си, ибо он позволяет понять , как все устроено. А так что-то типа Java, C#, Python

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

А вот тут детишки мы обьявим указатель на массив указателей на структуру из указателей.

Много школьников 8 класса это поймут?

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

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

Много школьников 8 класса это поймут?

Если сравнивать Си с тригонометрией, то Си проще на мой взгляд.

jpegqs
()

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

Соответственно, либо изучать ардуинку и си, либо какой-нибудь html и JavaScript. Надо чтобы был не только голый синтаксис. Нужно какое-то «мясо».

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

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

Как связана ардуина и програмулькирование?

Вопрос не про электронику или робототехнику.

Вопрос про классическое програмулькирование. И скорее всего под шиндошс. И тут лазарус+fpc хоть и вырвиглазное но рабочее решение.

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

два способа обучения программированию

Машина Тьюринга или лямбда-исчисление Черча. Глобальное состояние (environment) или чистые функции.

anonymous
()

Часто слышу просьбу научить рисовать

какой «инструмент/стиль» выбрать для введения в рисование.

Никакой. Для изучения прогаммирования надо изучать алгоритмы и структуры данных, кодить – дело последнее. Так же как в рисовании надо изучать способы передачи 3д на холсте, а не начинать с состава красок и приемов их нанесения

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

если расчехлять споры 70ых

там (что у Сей меньше но есть дыры и Пацкале) - косяки с синтаксисом которые требуется запомнить привыкнуть

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

один из трюков которых стоит либо осознавать(но не всем это полезно) либо от_утёнится ибо «так всегда было» - это смещивания метки в памяти - что и есть обьявление с определением массива с его размером int[100] a

с указателем(типизированным в части размера указуемого) на некоторое мест int* a

в первом случае а это некоторое число которое компилятор спокойно может впихивать как константу

во втором это адрес адреса

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

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

Как связана ардуина и програмулькирование?

Через Arduino IDE. А там диалект Си. Автор темы жаждет обучать Си, и при программировании микроконтроллеров он будет вполне уместен.

лазарус+fpc

Если брать Паскаль, то либо откапывать древний Турбо Паскаль, либо Pascal.ABC. То есть там, где полноценно работают модули типа Crt и Graph. С Лазарусом у программы будет дранная структура на событиях и сгенерированных методах, да ещё и с ООП, которые новичку сложно будет понять.

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

Турбо Паскаль

с ООП, которые новичку сложно будет понять

Добро пожаловать в Turbo Vision.

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

маркова рифмы

Третий.

поста не машина

Первый. Пусть патентная система разбирается, кто первый.

anonymous
()

Мельком пробежался по комментариям. Правы и те, кто аргументирует за Pascal, и те, кто аргументирует за Python.

А ты не хочешь начать изучать сразу оба? Например, один мой близкий друг, решая задачи с Leetcode, в качестве упражнения решал их одновременно на Lisp, Haskell и OCaml, хотя, очевидно, языки очень разные.

К слову о Lisp, обрати внимание на такую книгу, как SICP («Структура и интерпретация компьютерных программ»). Там в качестве языка для обучения используется Scheme, но книга хороша, даже если ты пока не собираешься изучать Lisp-подобные языки.

Bass ★★★★★
()

Чему бы вы не учили/учились, это должно приносить удовольствие. Иначе это обучение будет заброшено. А если в ходе обучения будет фан, то в последствии под задачу уже будет изучен и язык, и библиотеки, и концепции, и алгоритмы.

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

Суть в том, что есть глобальное состояние (бесконечная лента). Кстати, у алгоритмов Маркова тоже есть глобальное состояние.

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

Чему бы вы не учили/учились, это должно приносить удовольствие.

У обучения должна быть цель(-евая функция) с точки зрения ученика.

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

А вот тут детишки мы обьявим указатель на массив указателей на структуру из указателей. Много школьников 8 класса это поймут?

А тут ничего сложного нет.

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

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

В ячейке можно хранить номер другой ячейки. Первую ячейку принято называть «указателем», а обращение ко второй ячейке по номеру, прочитанному из первой ячейки, принято называть «обращением по указателю».

Это доступно не то что в восьмом, а в третьем классе.

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 2)

Классический подход примерно следующий:

  1. Ассемблер (можно 6502, а можно и RISC-V).

  2. Схема (прорешать SICP).

  3. Интерпретатор схемы на ассемблере.

  4. Компилятор схемы (в машинный код) на схеме.

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

А тут ничего сложного нет.

Память компьютера состоит из ячеек…

«Кручу, верчу, запутать хочу».

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

Это доступно не то что в восьмом, а в третьем классе.

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

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

Да там даже строк нет

А с какого перепугу Си-строка называется так тогда?

«Все есть указатель», даже массив и тот тоже указатель :) Выборка из массива в Си скорее просто другой способ записи разыменовывания указателя, чем отдельная сущность. Правда, любой массив – указатель, но не любой указатель – массив :) Потому что через указатель можно обращаться и к переменным.

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

Это доступно не то что в восьмом, а в третьем классе.

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

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

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

А с какого перепугу Си-строка называется так тогда?

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

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

По своим воспоминаниям, вложенные циклы сложностей не представляют и легко визулизируются на примере вывода таблицы умножения.

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

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

По своим воспоминаниям, вложенные циклы сложностей не представляют и легко визулизируются на примере вывода таблицы умножения.

Визуализируются они легко, а вот начать ими мыслить - сложно.

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

Все что сложнее линейного кода вызывает трудности. Даже элементарные массивы одномерные могут вогнать в ступор начинающего.

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

двух томник Гооза Бауэра вполне доступен школьнику начальной школы

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

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

ибо бля нет той индустрии адаптирования бля бля бля кормушка для куриц и прочих птиц

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

ага:

Пусть A есть унарный и, следовательно, унитарный объект. Тогда A есть A, поэтому

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

Для обучения васик вполне пригоден. В твоем примере злоупотребляют goto, и не используют функции. Это не вина васика.

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

Ток не говори это медикам;)

Медики и юристы знают латынь очень ограниченно. Всякую худ.литературу они джаст-фор-фан читать/писать на латыни не будут.

Да и греческий алфавит много где используется.

Греческий алфавит используется (я его например использую активно), греческий язык существует и используется в Греции. Но древнегреческий это совсем другая история, мертвый язык интересный только некоторым филологам, историкам да археологам.

Еще можно старославянский вспомнить - в православии имеет некоторое хождение.

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

на пенсии можно начать с тривиума

у Весёлого Алтайского? Молочника есть

забавный и познавательный

ЧАП { ЧАП для взрослых (1 из 6)

https://www.youtube.com/playlist?list=PLz2be7z5MhMfa0tAwfnCkYzepDay3mox3 }

и

ФинУпр

всё для малограммотных и высоко образованных ( эпоха разделения труда )

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