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

Но это не мешает мне иметь в голове концепцию бесконечности.

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

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

Надо писать (comp a b c d).

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

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

Вы обменяли способность к абстрактному мышлению на знание потрохов С++ или как это в вашем случае произошло?

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

иероглиф «конец» (终) состоит из частей «верёвка» и «зима», а произносится абсолютно также, как «середина» (中, zhōng).

Возникает вопрос как же они в разговоре конец от середины отличают если одинаково произносится?

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

абстрактное мышление и галлюцинации - разные вещи. не надо их смешивать.

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

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

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

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

как же они в разговоре конец от середины отличают если одинаково произносится

По контексту. Как мы лук отличаем (зелёный, боевой, репчатый и модный).

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

Устная коммуникация всегда в каком-то контексте. В магазине не будешь говорить об армейских подразделениях, а на плацу о «неправильности номер 13».

в качестве примера - языки, вообще не имевшие письменности

У китайцев есть контрпример: язык, который имеет только письменность — вэньянь. Кстати, не только у китайцев: у математиков тоже 2 + 2 = 4 будут по-разному произносить русские, англичане и китайцы, но писать будут одинаково.

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

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

это чисто религиозная концепция. вы просто верите в ее существование

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

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

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

Если программу напишут, но не скомпилируют, то она останется собой и будет точно такой же программой.

Она будет бесполезной.

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

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

А зачем? Весь Паскаль и есть демонстрационный ЯП, как-то его ограничивать смысла нет.

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

записывает в файл

Это императивная инструкция, т.е. некая команда «сделать запись в файл». Я про такое и говорил: ввод/вывод данных/результатов есть императивные инструкции, недостаточно описать, КАК сделать запись результата, надо ДАТЬ КОМАНДУ (приказать, а не описать) «запиши». Потому в Хаскеле и есть монады и do.

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

По вашему, содержимое книги поменяется в зависимости от того, прочитает ли её умный человек, глупый человек или вообще не прочитают?

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

Это императивная инструкция,

Это не важно. Главное, что инструкция каждый вызов функции одинаковая.

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

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

Зависит от значение слова «содержимое». Смысл прочитанного однозначно зависит от читателя. Например, «Три мушкетёра» не про доблесть и любовь, а как 4 алкоголика, 3 шлюхи и дегенерат в короне трепали нервы Ришелье, пока тот пытался спасти Францию.

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

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

как вы можете выполнить БЕСКОНЕЧНОЕ число действий? выполнить (совершенное время) подразумевает завершение действия. выполнить можно только то, что финитно.

и какой логический вывод? - само выражение «выполнить бесконечное число действий» абсурдно.

alysnix ★★★
()

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

Самое то это Паскаль! Более того он ни такой уж и мёртвый, до сих пор существуют программы которые живут и поддерживаются и написаны на Delphi (а это так сказать финальная версия развития Паскаля)

Например это Total Commander, BS Player. Да и в принципе изучив Паскаль, он хоть и не Си-подобный но общая структура выражений в нём похожа, к тому же фундаментальные, классические труды по алгоритмам (такие большие книги) обычно написаны на похожем на Паскаль языке - и будет удобно читать такие книги, а питонист, привыкший к Питону - будет испытывать сложности читая такие книги, ну собственно как и человек изучивший Паскаль или любое Си-семейство от Си до Джавы - вообще не поймёт код на Питоне предварительно не изучив Питон.

Кстати если пошуршить Вики, то в середине-конце 90 и начале 2000х были игровые проекты (т.е. прям игры которые продавались и изадвались не только в РФ но и в мире) на Дельфях/Паскале написаны, так что в своё время это был не только язык лаболаторных студентов или энтерпрайз-кода, но даже игры писались :)

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

порочности самого метода

Жить можно. Мыслить тоже.

Трудности при вычислении — да, не поспоришь.

Имхо, преимущество рекурсии в её простоте формулировки.

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

Что с дифурами будем делать? Нет, молчите, дайте угадаю. Мы будем считать их приближённо! На С++ потому как он очень быстрый!

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

Это жертва, на которую придётся пойти во имя наглядности.

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

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

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

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

Серьёзно, как можно дорасти до трёх звёзд на лоре и не знать элементарной высшей математики?

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

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

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

то есть у вас в голове путница в силу неточности терминов. вы эквивалентную формулу выдаете за решение

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

«аналитические методы решения» не дают самих численных решений.

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

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

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

решение уравнения это по вашему что? получение множества каких-то чисел, подстановка которых в уравнение сделает его верным, или просто получение неких математических выражений?

и потом не все уравнения решаются аналитически. так что аналитическое решение это скорее казус.

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

решение уравнения это по вашему что?

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

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

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

))) решение его мозговой функции - 0, подставляешь в уравнение и интеллект неиллюзорно схлопывается. Никакой аналитики.

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

Решением дифференциального уравнения является функция

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

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

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

из определения функции никак не следует сушествование некоей «бесконечности».

попытка построить бесконечность инкрементом - провалилась. ну найдите функцию которая строит бесконечность. кто против-то?

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

короче.. с определением бесконечности в конструктивном смысле получился облом.

через инкремент не получается.

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

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

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

https://ru.wikipedia.org/wiki/%D0%91%D0%B5%D1%81%D0%BA%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C

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

-1. marching morons

это не софт .....

это цена операции(выч) дешевле воздуха

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

двойная Акермана императивно на паскале питоне али плюсах в студию!

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

Fortran объявили мертвым и устаревшим уже через 10 лет после создания вроде.

А на нем и через полвека пишут в научной среде. Почему-то он нравится математикам и физикам.

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

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

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

А сейчас еще аудиокниги есть. Или у китайцев их нет?

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

По контексту.

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

Да уж - я точно не китаец :-)

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

Устная коммуникация всегда в каком-то контексте.

После предидущего примера с незнакомым стихотворением которое смогли понять только что оно «про революцию», задумался а как же лекцию читать/слушать? Она же по определению о чем-то новом и соответственно незнакомом. Так ведь получится что лекция «про математику» :-)

язык, который имеет только письменность — вэньянь.

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

Кстати, у математиков также есть сложность с передачей записи устно.

Согласен. У электронщиков тоже нарисовать схему проще чем разжевать ее словами.

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

Она будет бесполезной.

Не факт. Она может использоваться для объяснения какого-нибудь алгоритма например. Если язык легко понимаемый (из семейства алголоподобных) то это может быть проще чем разжевывать алгоритм русским текстом.

А еще например программа может использоваться для оценки квалификации программиста. Это когда на собеседованиях код на доске пишут. В этом случае компиляция тоже не требуется.

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

А зачем?

Например если кому-то захочется запихать Паскаль в микроконтроллер. Понятно что весь не влезет,а только лишь какое-то подмножество. Если находятся те кто пихает в МК подмножество Питона то почему не быть тем кто Паскаль захочет?

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

недостаточно описать, КАК сделать запись результата, надо ДАТЬ КОМАНДУ (приказать, а не описать) «запиши».

С философской точки зрения можно например сказать что описание решения задачи включает в себя появление записи в файле. Тогда записывание чего-то там в файл будет частью ОПИСАНИЯ решения задачи. Хотя это уже конечно весьма отвлеченные умозрительные рассуждения. И таки я тоже предпочитаю классические императивные языки,причем алголоподобные.

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

Я про такое и говорил: ввод/вывод данных/результатов есть императивные инструкции

В Haskell и Clean ввод/вывод не является императивной инструкцией, а является чистой функцией, которая получает состояние внешнего мира в качестве аргумента и возвращает новое состояние внешнего мира.

Потому в Хаскеле и есть монады и do.

Монады — это любой контейнер. Список, Maybe, ST, …

Монада требует всего две операции: >>=, которая из состояния контейнера и функции возвращает новой состояние контейнера и return, которая из произвольного значения создаёт контейнер.

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

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

По вашему, содержимое книги поменяется в зависимости от того, прочитает ли её умный человек, глупый человек или вообще не прочитают?

Вообще-то да. «Содержимое книги» - это какие-то закорючки на бумаге. Тот или иной смысл они обретают именно что в голове читающего. И смысл сильно от головы зависит. Дайте Ломоносову книжку из серии «ПК для чайников». Ломоносов - безусловно умный человек. И русский язык для него родной,пусть и отличный от современного но не так сильно чтобы он не мог бы объясняться в каких-то простых бытовых ситуациях. И даже наверно не только бытовых - например смысл описания паровой машины он скорее всего понял бы.Но вот смысл книги про компы у него в голове не появится потому что в его мире отсутствуют соответствующие понятия.

И это всё про тексты про вполне объективные вещи. Если же перейти от реальности к разного рода философским построениям то там всё намного сложнее и неоднозначнее. Хороший пример - Библия. Она одна,ее читают и католики и православные и протестанты и много кто еще. Но понимают настолько по-разному что периодически даже вооруженные конфликты случались между почитателями одного и того же Христа и одной и той же Библии. Где-то читал,что во Христа в мире веруют аж 219 различных церквей,конфессий и сект. И все они считают что только их понимание смысла Библии правильное!

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

какой логический вывод? - само выражение «выполнить бесконечное число действий» абсурдно

Ну ничего, ничего. Не расстраивайся. Скушай банан %)

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

А сейчас еще аудиокниги есть. Или у китайцев их нет?

Есть. Но человек обычно примерно знает заранее сюжет книги. Там аннотация есть.

Потому как например текст театральных пьес - это и есть устные диалоги,записанные на бумаге.

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

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

есть и interactive data language

по русские меньше чем по не русски

бытие сознание т.п

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

Например, «Три мушкетёра» не про доблесть и любовь

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

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

преимущество рекурсии в её простоте формулировки.

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

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