LINUX.ORG.RU

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

 , , ,


0

2

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

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

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

Не Си и не современные коммерческие языки (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)
Ответ на: комментарий от stabilitron

SICP … курс … упразднён

введение в программирование

Осознали, что SICP — это малость не для полных новичков? %)

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

Схема в этом плане попроще — она сама себе платформа, и лишние навороты под ногами не мешаются.

Я к тому, что некорректно рекомендовать Scheme, а примеры приводить на Clojure.

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

Оберегает своё сокровище от непосвящённых.

Kogrom
()

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

Вам не стоит заниматься преподаванием.

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

Вам не стоит заниматься преподаванием.

HE_KOT
()

Понаписали ответов на три экрана, и никто не поинтересовался — а кого, где и для чего ТС учить собрался. Кого учить предполагается — школьников, студентов, вольноопределяющихся? В школе, в профуре, в институте, в универе, на платных или бесплатных курсах, очных или заочных? Какова длина курса (сколько семестров)? Учить программированию предполагается будущих (или уже состоявшихся) бухгалтеров, инженеров, биологов, физиков, математиков или программистов?

Без всего этого дальше разговаривать — только воздух сотрясать. Даже в одном и том же вузе на разных кафедрах могут быть разные курсы.

debugger ★★★★★
()

Pascal и Python

program Серблтьёзно?

begin

Естественно Python. Pascal - это так, чисто на поржать.

end

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

школьников, студентов, вольноопределяющихся?

Любого

В школе, в профуре, в институте, в универе, на платных или бесплатных курсах, очных или заочных?

Для традиционных институтов нет корочки. Курсы — возможно, когда-нибудь. Не знаю что обозначает слово «очно» в контексте курсов.

Дома близких родственников, возможно.

Какова длина курса?

Всё индивидуально. В целом, как только человек станет самостоятельным, дальше сам.

Учить программированию предполагается … ?

Людей.

Без всего этого дальше разговаривать — только воздух сотрясать.

Личность студента важна, но не может полностью определять содержимое курса.

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

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

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

Особенно смешно когда это делают сишники, ведь Pascal во всем, просто во всем лучше C.

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

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

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

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

Де-факто паскаль является мертвым ЯП. Идея учить близких родственников мертвому ЯП представляется довольно смешной, да. ну или трагичной (если это в рамках борьбы с Альцгеймером например).

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

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

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

А с какой целью?

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

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

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

Де-факто паскаль является мертвым ЯП

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

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

Про память ты в принципе везде можешь рассказывать, массив он везде массив.

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

А есть платформы, где можно задачки пощёлкать на Паскале? А то я 100 лет сам на нём не писал, а на литкоде нету этого языка.

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

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

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

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

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

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

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

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

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

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

Машкод вещь специфическая, есть туева хуча программистов которым он ненужен. Скажем я, хоть и занимаюсь HPC, с машкодом дело имею крайне редко. Джависты, вебкодеры, гуисты и пр. его вообще в глаза не видят;-)

В любом случае, если дело дошло до машкодов то можно уже и С/С++ брать. А если речь о представлении данных в памяти - в питоне есть модуль struct, он как раз с такими вещами позволяет играться и даже писать свои бинарные протоколы/парсить стандартные.

AntonI ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

мы мыслим по разному, мы строим для себя разные абстракции понимания той или иной вещи

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

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

Осознали, что SICP — это малость не для полных новичков? %)

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

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

Абстракции действительно могут быть разными. Есть как минимум два типа технарей - те кто воспринимает мир в виде геометрических образов (абстракций), и те кто воспринимает мир как алгебраические абстракции. Мыслят эти две категории совершенно по разному, наверное и в программировании эта разница как то проявляется.

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

Можно померяться встроенной функциональностью, ага.

(defun foo (n)
  (loop :for i :below n :collect i))

Вот это уж точно понятнее и лучше питона, или любого другого говноязыка выглядит.

И Лисп - как раз про это, если что. Про метапрограммирование, синтаксическую абстракцию, и вот это всё.

Но это все мимо темы вопросы.

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

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

Естественно Scheme, или возможно, Racket.

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

(SICP и HtDP не читал.)

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

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

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

И Scheme, и ее ответвление, Racket - аппликативные и императивные языки.

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

Любого

Так не бывает.

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

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

школьников, студентов, вольноопределяющихся?

любого

Так не бывает.

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

Если что, я не официальный препод из школы или вуза.

В принципе, раз уж об этом речь пошла, мне интересно собрать фидбек, посмотреть что делают люди, с какими проблемами сталкиваются, как принято и т.д. Если это «набор скора», наберём побольше =)

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

У меня тут многие (до 90%) программисты со стажем от 5 лет не могут в детские вопросы. Это не значит что это хорошо и правильно.

ya-betmen ★★★★★
()

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

Да ну, бред какой-то. Java и С# конечно уже не простые языки какими они были изначально, а вот Go пока вроде держится.

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

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

Потому что школьник, студент, и взрослый человек — очень разные. Одно дело — урок программирования в школе, другое — студент профильный или непрофильный, третье — профессионал. Там всё разное. Урок программирования в школе — один, максимум два раза в неделю по 45 минут × один или два года в старших классах. Нужно дать понятие о программировании. В качестве языка подойдёт бейсик или питон. Профильный студент — четыре-пять пар по полтора часа × 5 дней в неделю × 5 лет обучения. Здесь надо всё: от ассемблера до лиспа, включая организацию ОС, базы данных, компьютерную графику и хз ещё что. Непрофильный студент — сильно зависит от области. Взрослый человек — зависит от профессии. Физику для обсчёта моделей Фортран зайдёт, статистику — R.

Если что, я не официальный препод из школы или вуза.

Оно видно что ты поболтать зашёл.

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

Речь идёт про введение в программирование, поэтому показать println(s) и объяснить зачем здесь “ln” предпочтительнее, чем объяснить как примерно работает printf и почему именно так. Да, это не такая большая проблема сама по себе, но эти моменты накапливаются.

Go — возможно. Я опасаюсь того же, что и в случае с Java/Python/C#: основная аудитория — индустрия. Но в основе это простой паскалеподобный язык, к тому же современный, так что возможно.

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

Оно видно что ты поболтать зашёл.

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

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

Это деградация, невозможная.

https://ocw.mit.edu/courses/6-0001-introduction-to-computer-science-and-programming-in-python-fall-2016/download/

Просто деградация, натурально. Впрочем, Сассман, или Абельсон, говорили, что уровень студентов упал, и никто уже вообще ничего не понимает. Поэтому вот даже 6.001 сделали для дебилов вообще

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

То есть по сравнению с SICP, они вырезали вообще больше половины, наверное. Оставили вообще какую-то примитивщину, рассчитанную на совсем даунов.

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

Я сам себе философ =) Основная идея в том что нулевой человек легко поймёт задание, нарисуй ситуацию если холодно то сидеть дома, если тепло то гулять, но если дождик то сидеть дома иначе гулять. И пусть он нарисует эту логику как угодно, так как она сформируется у него в голове (формирование понимания сути), затем объяснит что он накалялкал (закрепление понимания, выявление логических ошибок, умение подавать свои мысли). Если ограничится лишь этим примером, то когда уже дело дойдёт до языков конструкцию вида

if тепло == true and not дождик then
    гулять 
else 
 сидеть дома
end

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

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

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

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

Так и с личными абстракциями, они формируются спонтанно, на интуитивном уровне, а интуиция это гремучая смесь жизненного опыта. У каждого уникальна, но проявляться может в конкретике понятной всем в виде речевого изложения, изложение изложением, а в голове чёрт ногу сломит, да и не важно. Адаптируется мозг к чему то у каждого по своему, так как удобно, и наиболее эффективно. А иногда не адаптируется, например как у меня :D у меня одна извилина и то тупая хехе

Как-то так, просто мысли в слух.

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

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

Глупости – если цель именно «выучить много языков», то «база» на старте в виде «мертвых-классических» весьма крута. И читать на них есть чего, если что )))

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

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

Οι νέοι μας σήμερα φαίνεται να αγαπούν την πολυτέλεια. Έχουν κακούς τρόπους και περιφρόνηση προς την αυθεντία. Δεν σέβονται τους μεγάλους και ξοδεύουν τον χρόνο τους εδώ και εκεί κουτσομπολεύοντας… Εναντιώνονται στους γονείς τους, μονοπωλούν τη συζήτηση στην παρέα, τρώνε λαίμαργα και τυραννούν τους δασκάλους τους

Ηρόδοτος

Сам начинал с Basic-а, но особо не зашел, а вот Turbo Pascal как раз расставил все по порядку и уже C самостоятельно удалось изучить с ассемблером. С какого-то уровня приходит осознание, что язык не важен - важно целеполагание, ясность и умение бороться со сложностью.

Рекомендовал бы следующую цепочку: Pascal -> ASM -> C/C++ -> Java|C# -> Python (any scripting) -> Lisp|Haskell.

P.S. В любом случае отличное владение человеческим языком крайне важно - нужно грамотно излагать свои мысли для других людей и для ChatGPT ;)

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

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

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

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

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

У знаний есть иерархия и насильно портить её ни к чему =)

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