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

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

Но есть зависимости физических величин от других величин.

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

Заходим на рынок вакансий, сортируем по популярности, самые популярные там что? Правильно веб ориентированые языки, тоесть javascript, php, python. Смотрим что типовая галера требует от гребца, что там самое популярное - реакт. Вот и делаем вывод, что для того чтобы получился базовый востребованый программист которого можно продать заказчикам, нужно его обучить джаваскрипту + реакт + сети, потому что всё есть веб. Всё легко и просто. Если есть какие-то девиации в требуемом специалисте, то обучаем его по такой же схеме, там ембеддед програмисту чё нужно С, Rust, умение програмировать arm mcu, опционально базу по языкам описания апаратуры. Если тебе нужен девопс, то учи его как сисадмина плюс програмирование на го и питоне. А вот эти все фантомные боли по CS, оно не нужно. Современный слой абстракции позволяет вообще забыть про существование машины.

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

Откуда взялась природа в математике?

конструктивная математика

https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0

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

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

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

Рекурсивный алгоритм фибонначи завершаем. Это можно строго доказать и давным давно доказано. Пользуйтесь на здоровье.

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

Рекурсивный алгоритм фибонначи завершаем.

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

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

Рекурсивный алгоритм фибонначи завершаем.

а что за алгоритм? это который дает 2^n вызовов функций? вопрос в том, что вы имеете ввиду под словом «завершаем».

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

это который дает 2^n вызовов функций?

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

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

Заходим на рынок вакансий, сортируем по популярности, самые популярные там что?

Таксисты? Хотя может и курьеры. Не уверен.

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

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

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

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

2 в степени триллион - это ведь конечное число шагов исполнения.

Да, естественно. Вы вообще ссылку на конструктивную математику зачем притащили?

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

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

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

Вы вообще ссылку на конструктивную математику зачем притащили?

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

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

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

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

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

Подозреваю Гильберт вообще бы не понял ваших затруднений.

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

либо вы должны признать их вечное существование(фактически признав бога)

Наркотики это плохо!

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

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

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

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

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

Чем рекурсия менее надёжна, чем цикл?

Рекурсия способна скушать весь стек. Особо актуально в микроконтроллерах.

И по-прежнему главный вопрос - какие преимущества дает использование рекурсивных вызовов функций в программе? Если это работает быстрее то насколько?

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

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

разумеется. … вы должны … дать алгоритм их создания. которого не существует

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

  1. прибавьте к нему единицу.

Сколько бы раз вы ни выполнили шаг 1, всегда можно выполнить его ещё раз и получить ещё одно целое число. Вуаля, способ генерации бесконечного (счётного) множества целых чисел найден.

Можно даже в коде его воплотить — он работает:

(defn integers [x]
  (cons x (lazy-seq (integers (inc x)))))

(def naturals (integers 1))

(take 10 naturals)
;; => (1 2 3 4 5 6 7 8 9 10)
Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от alysnix

a(b(c(d(x))))

Не надо так писать если это не олимпиадная задача или «чистая наука» какая-нибудь(но там уже под вопросом).

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

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

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

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

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

Бесконечное множество конечных чисел, ага.

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

А пока вы такого числа не предъявили — способ считается рабочим %)

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

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

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

нет. ход ваших рассуждений - берем конечное и получаем следующиее конечное… «отсюда мы нашли способ получить бесконечное». с чего это

Вы путаете числа и множества чисел. Сосредоточьтесь, пожалуйста.

Nervous ★★★★★
()
Ответ на: комментарий от no-such-file

Сделай по-уму scanf/printf.

При выводе - отдельными функциями преобразуем числа в строки,потом складываем строки и выводим куда надо. Формат при преобразовании каждого числа(отдельном!) задаем числовыми аргументами соответствующей функции - сколько знаков всего,сколько до/после десятичной точки. «Разбор форматной строки» и «неопределенное количество аргументов неопределенного типа» - не требуется.

Ввод существенно сложнее - надо читать входные данные в строку,проверяя допустимую длину,потом тщательно заниматься их разбором примерно по типу того что делают yacc+lex - это позволит выявлять некорректность данных. Если нашлись корректные данные,например числа - преобразуем и присваиваем. Да, писать придется больше чем воткнуть один scanf,зато надежность намного выше.

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

Сосредоточьтесь, пожалуйста.

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

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

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

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

откуда вы делаете заключение, что у вас существует некое «бесконечное число»?

Я ничего не говорил ни о каких бесконечных числах. Я говорил о способе получить бесконечное множество.

Может, всё-таки банан? %)

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

Я говорил о способе получить бесконечное множество.

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

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

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

хоба! - заявляете о существовании бесконечности

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

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

быстрая сортировка, сортировка слиянием и обход в графа глубину

Всё это можно написать без рекурсии. И пишется,например в случае кода для микроконтроллеров где рекурсия противопоказана из-за малого объема ОЗУ. Раздувать стек там просто некуда.

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

Вот например сходу нашлась нерекурсивная сортировка слиянием: https://stackoverflow.com/questions/1557894/non-recursive-merge-sort

ты например не дождёшься конца вычислений fib

Где вычисление чисел Фибоначчи может потребоваться вне олимпиадных задач или учебных упражнений именно как раз на изучение рекурсии?

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

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

Очевидно же - для того чтобы показать насколько нерекурсивный способ медленнее рекурсивного. Если написать без malloc/free на каждом шаге то будет слишком быстро и различие будет не столь наглядно. Что вы и продемонстрировали.

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

Получать новые числа можно бесконечно.

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

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

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

Разговор был не про Питон вообще, про надобность реализации и использования подмножества Питона которое называется micropython.

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

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

какая ошибка будет в printf?

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

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

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

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

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

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

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

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

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

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

Значение каких венгерских слов в названии книги вы угадали?

Словарный запас и устройство грамматики языка - это две разные вещи. Приезжающие в Россию иностранные специалисты могу знать довольно много русских слов. Но выражаться при этом в стиле «моя твоя не понимай» потому что всякие склонения,спряжения,падежи и прочее выучить в русском заметно сложнее чем просто слова. Ткнуть пальцем и сказать «человек» - это просто. А вот то,что в множественном числе будут «люди» - узнать и запомнить сложнее. Особенно носителям языков где множественное число образуется по каким-нибудь простым правилам типа английского с его прибавлением «s» и малым числом исключений вроде mouse->mice. Кстати,слышал мнение что mice - это про живых,а про компьютерных можно и mouses. Ну и как минимум mouses хотябы понятно,пусть и неправильно. А вот «люди» будут непонятны для того кто про эту особенность русского языка не знает.

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

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

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

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

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

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

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

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

с китайского тоны

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

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

Я так полагаю, единственный аргумент, который вы примете, это чтобы алгоритм досчитал до бесконечного числа?

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

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

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

инкремент вас не делает ближе к бесконечности

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

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

Действительно, бесконечное множество нулей ничем не хуже бесконечного множества целых чисел %)

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

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

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

вот эти все фантомные боли по CS, оно не нужно

" было решено, что молодому маркизу не стоит тратить время на Цицерона, Горация и Вергилия. Но что же он станет изучать? Ведь надо же ему что-то знать. Не познакомить ли его чуточку с географией?

– А на что она ему? – возразил воспитатель. – Когда маркиз пожелает отправиться в свои поместья, неужели почтари не найдут дороги? Будьте покойны, не заблудятся. Для путешествий нет нужды в буссоли, и из Парижа в Овернь люди отлично добираются, не ведая, на какой они широте.

Вольтер, повесть «Жанно и Колен»

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

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

Проводили эксперимент. Брали группу китайцев. Одному давали текст, он читал, остальные слушали, могли на листочке записывать. Потом опрашивали про что текст.

Результаты: при чтении стихотворения распознали, про что оно только те, кто это стихотворение уже знал. Остальные только приблизительно угадали тему (про революцию); при чтении рассказа о деятельности отряда 731 слушатели уверенно определили только, что в рассказе кто-то умер, термин «спецподразделение» не распознал никто (восприняли как омоним «особенно неправильный»).

А вот вэньянь — это нечто. Язык только письменный, но какой лаконичный:

Конфуций говорил: «Благородный муж держит себя строго, но не устраивает споров с людьми, он умеет быть в согласии со всеми, но не вступает ни с кем в сговор» = 子曰、君子矜而不争、群而不党

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

Сегодня актуально, завтра все забыли. См. Паскаль, Делфи, Пёрл, Руби, Фортран, пр.

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

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