LINUX.ORG.RU

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

 , , ,


0

3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

Да, я помню что когда в 8м что ли классе циклы учил поначалу было непонятно.

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

А в этом диалекте и нет функций, ахахах!

Тогда что такое G(K) в пятой (по счету) строчке?

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

Manhunt ★★★★★
()

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

И кстати можно начать с базового ассемблера, после асма возникает понимание как НА САМОМ ДЕЛЕ хранятся данные, что память это не просто именованные ячейки, а регистры, стек и куча, работа с которыми происходит по-разному. И при переход на С сразу возникнет понимание, что например массив как указатель это не магия, а просто оптимизация.

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

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

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

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

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

Медики и юристы знают латынь очень ограниченно.

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

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

Тогда что такое G(K) в пятой (по счету) строчке?

Обращение к элементу массива по индексу.

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

А тебя не смущает что условный путь для ребенка может быть Лого->Васик->Паскакаль->Си? На этапе паскакаля и си могут появиться ассемблерные вставки. На трупо паскакале точно нужны были для обработчика прерываний.

anonymous
()

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

Чтобы что? Какая цель?

Тут уже предлагали два подхода. Первый подход ИМХО нужен для человека который собирается писать код на продажу. Второй подход подойдёт для человека, для которого программы облегчают его основную работу.

einhander ★★★★★
()

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

Очевидная Scheme. Минимум синтаксиса, минимум возни с типами, минимум приколоченных гвоздями извращений, добавляющих сложности (типа наследования).

Ну или бабашка (с оригинальной кложей придётся сперва жабную инфраструктуру раскурить).

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

А зачем это все, когда можно сразу взять подмножество С, которое будет мало чем отличаться на Васика с Паскалем? Проблемы возникают когда учитель начинает переходить с этого подмножества к чему-то более сложноум слишком быстро. Просто потому что он плохой учитель и считает что то что очевидно ему с его опытом должно быть через две недели обучения очевидно и ученику и незачем терять время на повторение базы. И начинает выходить из себя с криками «ты что тупой штоли»?

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

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

та ды уж Dylan

а более серьёзно

Схема но не в Sexp а в Python-like остутами - т.е префиксы показывающие уровень вложенности - а не неявный счётчик открывающи скобок

да и виднее

- а по факту что Sexp что «таб-лесенка» это по сути не состоявшиеся Mexp - как внешнее представление - что «любой» современный редактор может транспилировать в обе стороны

имхо по мнению Парнаса лесенка более понятна чем поток скобок

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

Какой ещё обработчик прерываний? Ему прочти, там про другое.

Что такое Лого вообще не знаю, Бейсик не нужен.

firkax ★★★★★
()

php выбирай или java/go — это самые простые языки, python недалеко ушел, но из-за инфоцыган из яндекс-практикум, geekbrains (вк) и skillbox, где есть курсы типа «разработчик ботов», «аналитик» и тп «разрабов» (это не более чем операторы prompt) на нем овер до пупа

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

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

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

лично у меня понимание цикла и вложенного цикла не заняло много сил и времени

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

rtxtxtrx ★★
()

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

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

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

TPPPbIHDELj
()

Надо брать параллельно несколько ЯП разного уровня. Ассемблер любой современный, Си/Раст/C++/Pascal (тут смотри что актуально из этого уровня на рынке труда), высокоуровневое что-то с классической ООП моделью (java/C#) и что-то скриптовое (python, lua, bash, php и так далее). Тут даже важнее в каком направлении у тебя учебная программа, т.к. под разные направления разные ЯП. И понятно что ассемблер надо учить в то же время что и дискретку, а всякие питоны должны расцветать в то же время что и специализированные предметы и желательно задачи между дисциплинами должны перекликаться.

peregrine ★★★★★
()

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

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

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

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

Слава Денису Ричи и Аде Лавлейс программисты возникли до секты Столярова.

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

Это босс в новой игре про чебурашек ниндзя?

anonymous
()

Естественно Scheme, или возможно, Racket. Обучать желательно по SICP или HtDP. Надо знать основы и суть, а не вот эту херню типа «какой язык и фреймворк щас популярен у формошлепов».

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

Паскаль не нужен. Во-первых, потому что всё что есть в Паскале, есть в сишечке, во-вторых, вся его экосистема это мертвое практически не поддерживаемое говно, начиная там с IDE или компиляторов.

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

Человек без знания и понимания основ CS(Computer Science)/SE(Software Engineering)/SA(Software Architecture), никаких денег не заработает. Будет формошлепом на третьих ролях за копейки.

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

Естественно Scheme, или возможно, Racket. Обучать желательно по SICP или HtDP. Надо знать основы и суть, а не вот эту херню типа «какой язык и фреймворк щас популярен у формошлепов».

На Scheme сейчас практически никто не пишет. Тот же Python куда более релевантен реальности. Зачем учить язык, который никогда не пригодится?

Паскаль не нужен. Во-первых, потому что всё что есть в Паскале, есть в сишечке, во-вторых, вся его экосистема это мертвое практически не поддерживаемое говно, начиная там с IDE или компиляторов.

Зато не все, что есть в сишечке, есть в Паскале. UB, например.

anonymous
()

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

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

Читай тему:

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

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

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

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

Например:

pi: float = 3.142

def circumference(radius: float) -> float:
    return 2 * pi * radius
anonymous
()
Ответ на: комментарий от lovesan

Обучать желательно по SICP или HtDP

Насколько я могу судить, лучше сначала HtDP, потом много практики (не обязательно на Scheme), и только потом SICP — эти книги не взаимозаменяемы.

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

На Scheme сейчас практически никто не пишет. Тот же Python куда более релевантен реальности.

Так разговор был вроде о введении в программирование, а не о изучении языков. Это не одно и то же.

Зачем учить язык, который никогда не пригодится?

Было бы там что учить. Две скобки образуют список, его первый элемент — функция, остальные — её аргументы. Поздравляю, теперь вы знаете основы Scheme (и любого другого лиспа).

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

Так разговор был вроде о введении в программирование, а не о изучении языков. Это не одно и то же.

Лучше учить на чем-то похожем на то, что человек будет делать. Scheme не представляет индустрию никоим образом (кроме разве что Closure).

Было бы там что учить. Две скобки образуют список, его первый элемент — функция, остальные — её аргументы. Поздравляю, теперь вы знаете основы Scheme (и любого другого лиспа).

Да, но это ничего не значащие мелочи. Скобочки, c-like или питоновые отступы —- кажется что вообще пофиг.

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

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

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

Меня интересует первое.

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

На Scheme сейчас практически никто не пишет.

Он не для того сделан чтобы на нем писали в прод.

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

После понимания основ, все эти говноязыки типа Python щелкаются как орешки за пару недель от силы.

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

UB, например.

Любая говнина с указателями - вот тебе и UB.

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

Так и быть, вы уговорили меня посмотреть Scratch. Но я до сих пор сомневаюсь, что замена текста на графические блоки имеет ценность.

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

Да. Ну и построение программ.

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

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

Ой, а я с шарпов начинал в своё время. Теперь я профнепригоден?

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

Лучше учить на чем-то похожем на то, что человек будет делать

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

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

Чтобы тебя не забанили за 5.5. Не знаю, почему этого до сих пор не случилось, но однажды случится.

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

Ой, а я с шарпов начинал в своё время. Теперь я профнепригоден?

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

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

Хотя сам когда-то начинал с G-Basic, ещё на восьмибитном типа компьютере, даже сейчас находятся специалисты, которые знают толк в таких машинках :)

У меня тоже такая штука была. Тоже на этом G-Basic ваял простенькие «игрушки». Было прикольно.

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

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

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

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

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

https://sgimenez.github.io/laby

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

Он имеет ввиду операционную систему Oberon (хотя я не уверен, что она пользовалась хоть каким-то коммерческим успехом), которая была написана на одноимённом ЯП. «Баребонный» — bare bones.

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

Не нужно быть Профессором Ксавье для перехода по ссылке.

anonymous
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)