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

ывания из ко

совершенству нет предела

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

Это и есть то самое натягивание. Потому что хаскель работает на машиние с гарвардской архитектурой.

Других-то нет.

Реальность изменчива. Проблема обучения - это угадать, что понадобится в будущем.

Это все демагогия. Людей учат программировать, чтобы они через 2-3 года пошли программы писать. Когда появится альтернатива, имеющие программировать люди её осилят.

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

работать с монадическим стеком

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

Вы первый, кто предложил Хаскель для вводного курса по программированию. Поздравляю! %)

в базу данных надо сходить

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

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

Хотя можно и до — главное, не смешивать. Иначе есть немалый шанс, что в голове ученика тоже всё как следует перемешается.

простейшие языки вроде Python

Это петон-то простейший? Да там одного синтаксиса учить-не переучить.

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

Вы первый, кто предложил Хаскель для вводного курса по программированию. Поздравляю! %)

Ну ты первый заговорил про ФП. Актуальные ФП это OCaml и Haskell.

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

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

Это петон-то простейший? Да там одного синтаксиса учить-не переучить.

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

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

Людей учат программировать

Программирование - это формальность, как и бюрократия (почему как?). Это мода.

anonymous
()

Учитывая средний уровень кривости мозгов совершенно непринципиально чему вы собираетесь учить, лишь бы сами хорошо знали. Просто вначале надо давать больше теории чтобы пока она укладывается переходить к практике. Вот только делать это надо прямо, если нет желания стать очередным профанирующим клоуном, что вещает дебильную ахинею месяцами, если не годами обучения - чтобы сделать еще хуже, чем если бы человек сам все изучал. А для этого придется не самый простой язычок взять, а полноценный с разными возможными подходами, реализующими как императивный, так и функциональный подход. Я вообще не вижу повода в обучении тому, что человек сам должен осваивать. Большая часть программистов те еще полудурки, учитывая качество кода. И платить за полудурость смысла никакого нет. Вот если будут освоены разные парадигмы - это еще куда ни шло. Программистов обучают на пачке разноплановых языков вместо того чтобы выбрать один наиболее наглядный не просто так, а чтобы разводить годами на деньги. А полудуркам вообще не стоит в программирование лезть. Я в упор не понимаю нахрена они пытаются, если так и не научились взаимодействовать с окружающими предметами и явлениями. Их разве что в микроконтроллеры послать фигней страдать с ардуинками и близко не подпускать к распределенным вычислениям и суперкомпьютерам. Пусть радуются что лампочка там загорелась или еще какой-нибудь дури. Ваше дело объяснить стоящие вещи. Если кто-то не понял это их проблемы, хотя можно и пояснить некоторые явления. Дубилов не просто так держали подальше от компов. Они в принципе неспособны сгенерировать никаких идей.

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

Единственно, кому верно советовать Scheme - это начинающему создателю интерпретаторов

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

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

Ну вот даже наша «короткая дискуссия» показывает что «люди читают странно» ))).

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

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

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

Этап когда топикстртер пишет спецификацию задачи «на естественном языка» неустраним никак. (и сейчас практически это основное что и осталось от программирования на практике )))). И проблема что кому то «ИИ не отвечает», на 99% в том что этот кто то «и не спрашивает». ))))

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

С теперешними планами приёма на околоайтишные специальности недубилов столько не найти.

anonymous
()

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

Если ограничиться императивным подмножеством, без ассоциативных массивов, классов и мета-классов, list comprehensions, HOF, исключений

То зачем он нужен? Учить язык надо в полном объеме, а не подмножество.

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

Один пишет примеры на SBCL, второй на Clojure, хотя оба советуют Scheme

Примеры на Scheme в обилии можно найти в литературе — Little Schemer, Seasoned Schemer, How to Design Programs и так далее. С подробными объяснениями.

А мы пишем на чём привыкли.

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

лисп-машины

А обратную польскую нотацию они не хотят?

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

А мы пишем на чём привыкли.

%)

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

зачем он нужен? Учить язык надо в полном объеме

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

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

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

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

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

Про историю языков я не спорю. Я спорю с тем, что надо учить латынь/паскаль.

Для 99% людей ЯП это сугубо утилитарный инструмент. История ручного инструмента не менее занимательна чем история языков - начиная от примитивных рубил и заканчивая безоткатным молотком и кувалдами на гибкой ручке. Но никто слесаря в ПТУ этому не учит, слесаря учат стучать обычным молотком.

Сильно сомневаюсь, что ТС будет с нуля готовить будущих академических спецов в области ЯП, которым база нужна и вот это все…

Этап когда топикстртер пишет спецификацию задачи «на естественном языка» неустраним никак. (и сейчас практически это основное что и осталось от программирования на практике )))).

Да ладно, даже на моей полянка, где этот этап жизненно необходим, многие его умудряются пропускать. А уж если речь о каком то приложении с абстракциями попроще…

И проблема что кому то «ИИ не отвечает», на 99% в том что этот кто то «и не спрашивает». ))))

А зачем его спрашивать? Всемогущество ИИ сильно преувеличенно.

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

Это же @lovesan, он слегка оторван от реальности. Что можно ждать от человека который на каждом углу кричит о крутости лиспа, а сам при этом пишет на шарпах?!

Естественно обучающие курсы не стоят на месте и адаптируются под запросы окружающей среды. Особенно в США, где образование это бизнес с серьёзной конкуренцией. Когда то лисп казался той самой серебряной пулей - на нем и учили. Потом выяснилось что все это лисперство нафик не надо, лисп выкинули на помойку и стали учить воцарившемуся питону.

Лет через дцать, возможно, питон заменят чем то… если ИИ не убьёт всех программистов:-)

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

обучающие курсы не стоят на месте

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

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

если ИИ не убьёт всех программистов

Я думаю, ИИ не будет делить кожаных по профессиональному признаку. Зачем? %)

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

Проще будет научить ИИ русскому и китайскому.

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

Вот потому и надо большинству мозги распямлять. А сделать это без тонны вводной информации ну никак не выйдет. Да, мозги скорее всего закипят от большого объема данных. Но тебя себя будут сильно жалеть так и не сделают рывок на достаточный уровень чтобы уже понятную фигуру взаимодействия как-то вынести на осознанный уровень, потому что без точного понимания будет фиготень наугад и даже ИИ им не поможет потому что они даже запрос нормально составить не смогут. Я просто люто упарился объяснять элементарщину людям о том что у них игры будут работать быстрее, если они во встройку, а не в видеокарту провод воткнут потому что рабочий стол на винде, как и какая-нибудь плазма на линуксе выжирают видеопамять, а также ресурсы занятости видеочипа и не делая практической работы получается фигня на выходе, хотя ширина шины данных при каких-нибудь 4-х линиях уже мало на что будет влиять, если данные уже загнаны в видеопамять и косплеить майора Дыбила совершенно ненужно. А использование одного лишь императивного подхода приведет к полной роботности и задействованию скорее всего только его без включения других парадигм, хотя бы какого-нибудь Clojure - так, для разнообразия. И без внутренней достаточной упорядоченности код будет просто лютой чернухой на выходе без желания вдумываться. Я конечно не гуру программирования, но могу оценить средний уровень хотя бы в базовой логике и он вообще не радует. Линуксоиды это прямо отдушина чаще всего. Они правда лучшие, ну или хотя бы одни из лучших, если они просто пользуются линуксом. Просто если в программисты подается обыватель это просто будет боль без супер грамотного подхода к пояснению. Вот тут видно как тяжело хоть чему-то новому научить кого-то на наглядных казалось бы примерах. Если такое будет в головах людей при обучении, то им нужен сначала курс базовой логики, тогда можно достичь какого-то серьезного результата и даже стать гуру. Но скатываться до питона это ну совсем уж дикость на мой взгляд. Я конечно не думаю что каждый программист должен понимать в какой ассемблерный код превратится их писанина. Но жалеть новичков по полной это уровень средней школы. Если человек более взрослый, то он может подождать результат более явный и качественно более интересный. И лучше неделю готовить мозги в сторону реального программирования, чем потратить месяцы на тупое зазубривание элементарных алгоритмов работы. То есть нагрузка должна постоянно возрастать, а не быть постоянной.

https://overclockers.ru/blog/Gamandril_Stories/show/178324/uskorenie-kompjutera-v-igrah-s-raskrytiem-potenciala-videokarty-i-snizheniem-nagruzki-na-cp

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

Ну кто то же должен будет ему от пыли кулеры чистить…

AntonI ★★★★★
()

паскаль@оберонь, конешшшно.

Когда надоест паскалить@оберонить, приходи в срач питон vs C# тут рядом. Правда, там уже будут сраться про все другое.

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

память это отложенное вычисление и даже может ленивое

а может какая копрограмма али yield lazy

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

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

если в полноте то какой(вариант) Pascal?

Учитывая что под онтопик есть вроде только фри, то он самый.

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

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

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

ya-betmen ★★★★★
()

Для «освоить с нуля максимум за неделю и начать писать что-то реальное» однозначно один из трёх: Python, Go, Tcl. Дальше ветвление зависит от того, какая модель исполнения предпочтительней и каков характер данных, с которыми предстоит работать.

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

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

вычислитель

какой, единственно верный гарвардской архитектуры?

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

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

В диалектах лиспа возможна синтаксическая абстракция. О чем в SICP целая глава. Весь этот «сахар» делается макросами.

Пример на CL, естественно, а не на схеме. Это к вопросу о том, что «ой посмотрите как в Python удобно, там столько сахара».

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

Python и прочие языки, которые провоцируют написание херак херак и в продакшн не думая, без понимания основ, новичкам объективно вредны.

lovesan ★★★
()

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

Ещё можно Nim посмотреть.

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

Потому что промышленные языки - не для новичков.

А какой смысл приводить примеры на других языках, если ты рекомендуешь Scheme? oO

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

Это абсолютная примитивщина для идиотов.

Это называется «базовые знания». Они нужны, чтобы получить «продвинутые знания». Так работает обучение. Ты не в курсе?

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

Ты невероятно глуп, все-таки. Просто невероятно. Как таких вообще земля носит?

А в чем он неправ? Ты правда на каждом углу орешь про лиспы. Как будто тебе платят за каждое упоминание лиспа на LOR.

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

До-до. С Вашим умищщем бы в вузе лисп преподавать - уже бы на Марсе яблони цвели!

Но не берут почему то… может потому что Вы даже на лоре свое мнение аргументировать не в состоянии? Кидаться какашками и кричать все кругом идиоты, один Вы умный с лиспом наперевес - для этого много ума не надо.

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

А вот услышать аргументы собеседника и внятно сформулировать свои аргументы… с этим у Вас как обычно никак. Пичалька.

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

До-до. Интересно, как я, будучи невероятно глупым, делаю вещи по которым потом снимают научные подкасты от которых Вы оторваться не можете? Настолько не можете, что у Вас даже интеллектуальных сил на лисп не остаётся - на шарпы перешли.

В общем этот лишпер ожидаемо порвался, несите следующего!

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