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

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

i =: ,((,|:)i.9 9),,./,./i.4$3 - действия каких операций J вы угадали?

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

Слово etimológiai должно звучать знакомо.

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

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

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

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

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

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

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

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

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

Если составлять и читать программы/тексты со словарём, то примерно месяц

Я так думаю, что за месяц усердного штудирования J мы с вами сможем достигнуть такого уровня владения языком, для достижения которого в случае венгерского нужно родиться венгром.

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

Ошибка будет:

error: format ‘%s’ expects a matching ‘char *’ argument
Хотя printf это как раз отсутствие типизации, ты же наверное знаешь как он работает. А для С++ есть библиотеки с проверками.

MOPKOBKA ★★★★★
()

Ахаха, 1309 сообщений за 6 дней. Троллинг ТСу удался?

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

действия каких операций J вы угадали?

Напомнило, как я вчера читал описание операций в Raku. Было страшно.

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

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

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

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

Сколько диалектов китайского вы знаете?

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

Я так думаю, что за месяц усердного штудирования J мы с вами сможем достигнуть такого уровня владения языком

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

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

Сколько диалектов китайского вы знаете?

Один. Путунхуа (мандаринский). Точнее полтора: ещё вэньянь понимаю. Меня китайский больше письменный интересует.

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

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

Мимокрокодил, но легко решается мемоизацией || lru cache.

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

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

Что такое «начальное ядро начального компилятора»?

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

Мимокрокодил, но легко решается мемоизацией || lru cache.

мемо ваши изации и кеши - это просто костыль такой. откуда вообще в математике lru кеш?

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

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

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

Спорит один философ с другим и говорит между строк: «Предположим существование или бытие существует …» Собеседник на этих словах его останавливает и возражает: «А ты докажи это в более сильных понятиях, не относящихся к упомянутому существованию.»

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

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

как то все это нехорошо.

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

Сможете исключительно со словарëм перевести какую-нибудь фразу на китайский?

Так-то и в программировании я владею документацией к библиотекам.

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

глобальное состояние легко заменить на локальное. простейший сценарий: передаём указатель на память в саму функцию. если выполнить fib(mem1, 8) и fib(mem2, 16) параллельно, mem1 != mem2, то одно состояние не будет мешать другому

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

Сможете исключительно со словарëм перевести какую-нибудь фразу на китайский?

отвечу на нечеткий вопрос математически точно. Нет.

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

Чистая функция не меняет не состояние вообще, а наблюдаемое состояние. Мемоизация или создание внутренних данных в памяти не запрещено.

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

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

Все же в курсе, что изначально минимальный компилятор Си был написан на ассемблере (у Кёрнигана и Ричи это и было названо ядром), а потом уже на самом Си. Так же происходил перенос Си на другие платформы

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

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

мне лично это говорит внутренней порочности самого метода рекурсивных формулировок нечта.

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

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

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

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

Тут как с regexp’ами. Писать легко, читать сложно. Но к концептуальной сложности это не имеет отношения. Регулярные выражения очень простые. J — это (емнип) просто векторные вычисления над матрицами, ничего нового тут нет, только способ записи.

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

изначально минимальный компилятор Си был написан на ассемблере

На самом деле же это было не совсем так.

Когда Кент Томпсон пытался переписывать UNIX на «Next B» ( будущем C )

https://www.tuhs.org/cgi-bin/utree.pl?file=V3/c/c00.c

в UNIX для PDP-11, кроме транслятора B в нативный шитый код, были уже другие языки высокого уровня. И B не был первым юниксовым транслятором после ассемблера.

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

вопрос не в наблюдаемости состояний. вопрос в том - является ли мемоизация и кеши - частями самой математической теории. или являются внешними механизмами для обеспечения ее адекватности реальности.

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

Арабский в планах (он красивый и в русском из него много забытых заимствований в поговорках). Остальное — нет. У меня это хобби, а не профессия.

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

Откуда у вас в математической теории возникает время работы скомпилированной программы на конкретном ПК?

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

Если в сишке проблемы с рекурсией, это не проблема рекурсии, это проблема сишки.

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

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

Я и regexp’ы знаю со словарём. В смысле, a.b?c* прочитаю, а что-то вроде /(?:[a-z0-9!#$%&'*+/=?^_{|}~-]+(?:.[a-z0-9!#$%&’*+/=?^_{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/ только со словарём.

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

Откуда у вас в математической теории возникает время работы скомпилированной программы на конкретном ПК?

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

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

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

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

в русском из него много забытых заимствований в поговорках

Это средиземноморско-ближневосточный фольклор

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

Это средиземноморско-ближневосточный фольклор

Я про «собак вешать» = سابق وشاية (сабек вишайат) = «прежде оклеветанный» и прочее такое. Или миф?

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

Или миф?

миф конечно. его придумали арабские студенты института патриса лумумбы.

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

Откуда вообще взялось время в математике? У треугольника три угла, не сейчас, не завтра, не вчера, не на этой неделе. А в принципе. Это его свойство такое. А свойство рекурсивного определения числа фиббоначи в том, что оно определяет число с особыми свойствами, парное к любому натуральному числу.

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

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

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