LINUX.ORG.RU

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

 , , ,


0

3

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

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

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

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

Расскажите что делает команда lea? Можете расшифровать аббревиатуру?

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

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

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

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

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

Начать можно с MMU, page tables и всего такого. Сделать упор на то, что физической памяти в компьютере ограниченное количество.

ЧТД. Как работает ядерный аллокатор ты мне не рассказал. По твоим собственным рассуждениям ты ламер, который пишет быллокод.

Это ненормально абсолютно.

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

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

Ты сам с собой воюешь. Я тебе показал стек на голанге. Если ты не можешь принять этот факт, это не моя проблема.

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

Как работает ядерный аллокатор ты мне не рассказал.

Можешь оплатить мне лекцию, я тебе подробнейшим образом расскажу.

Я тебе показал стек на голанге.

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

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

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

дык Python таже x-уровневость (а всё потому что не послушали Маккартни и не включили списковые(ну и apply eval на сдачу) в Algol-60(которые недолиспился) и как реакция Algol-68 перелиспился)

обьявление (как припер):

class Z(some):
   field: some

не сколько не-каноничное объявление

zig да rust хз

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

ох - ать - ать

начинать с разделения(жОскоГа) на код и данные это сразу откатываться на «одноуровневые» логики

см Информатика Бауэр(у чела патент на стек ;) ) Гооз

«вся» it построенна на том что сообщение почти никогда не самодескриптивно

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

ты(имхо sic) либо не осознаёшь(вполне) либо не искренен(с публикой)

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

если как выше отмеченно цель набить скор то .

если выбор чему учить то Питон

но не «плохим» практикам найдеными мартышками

а на основе текстбуков отобранных «собственным» вкусом

для примера смотри Шихи сд на питоне

если же у личинок остаточные ганглии с паскалем в наличии то очевидно более паскале синтакситечски похожее - lua

ps вам кому?

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

У меня был вполне конкретный вопрос: зачем ты принёс какие-то близкие к философии идеи про разделение на код и данные?

Ранее я тот же вопрос задавал про конкурентный Паскаль.

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

что обучение программированию

В шапке темы предельно ясно дано понять, что речь идёт о введении в программирование. Если ты хотя бы пытался прочесть материалы, которыми с нами поделился, в них есть глава «Введение» и она обычно очень короткая.

если как выше отмеченно цель набить скор то .

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

Во-вторых, сколько скора можно набить из этой темы? 3, 4? Скор набивается по-другому.

P.S. Сожалею, если ты пытался помочь из благих побуждений.

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

Во-первых не функция

Аргументы принимает? Принимает. Значение возвращает? Возвращает. Чего же боле?

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

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

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

упырь мел pls

у тебя(впрочем у меня тож) проекции

если ты тут с моей стороны видишь высокомерие - то сорян но это ТВОЙ хзкаксказать неполноцености

судя по этой(твоей) и предыдущим репликам вы реально подросток - см Агрессия или так называемое зло ( от создателя? этологии)

твои оценки цены для меня !

qulinxao3 ★☆
()

Если ограничиться императивным подмножеством, без ассоциативных массивов, классов и мета-классов, list comprehensions, HOF, исключений, то выглядит как альтернатива Паскалю. Хотя меня беспокоит динамическая типизация. Типы — очень важная вещь, хотелось бы чтобы язык помог это донести, а не быть типа «ну да, это важно, но ты забей».

Питон(пАйтан) как и lua основан на отображениях не только чисел но любых однозначно отображаемых на число сущностей в значения

без таблиц ключ-значения dict и table эти языки ухудшенные версии более классических языков

.

зы: из той оптики в которой ты ща - Паскаль наилучший выбор - но ведь ты буксуешь не поэтому :)

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

Можешь оплатить мне лекцию, я тебе подробнейшим образом расскажу.

После драки кулаками не машут. Не смог рассказать? Не смог. Потому что не знаешь. Потому что тебе и не надо, для тебя это абстракция.

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

Ее достаточно чтобы понять что а) переменные и код на стеке не бесплатны б) стек может переполнится. Это же были твои тейки.

К тому же, абсолютно неправильно - первая переменная будет расположена в памяти после второй, а не перед ней. :)

Это зависит от ABI платформы. На x86 да, на aarch64 можно в обе стороны. Для целей обучения концепту ваще пофиг.

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

обучаемые двухзначные числа устно перемножают?

да али зачем им это?

qulinxao3 ★☆
()

зачем вообще пытатся в комбайн?

покажи forth - как модель «краткости» и самораскрутки

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

TurboPascal позволял это благодаря пошаговой отладке и мгновенной(в память) компиляции - т.е TP это repl

https://thonny.org/ - это позволяет пошагово смотреть на картинки переменых в перетоне

иди учи уж

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

К тому же, абсолютно неправильно - первая переменная будет расположена в памяти после второй, а не перед ней. :)

Ну и да, не в памяти, а в stack frame’е. В памяти все как раз наоборот:

$ cat stack.c
#include <stdio.h>
#include <stdint.h>

int
main(void)
{
	uint32_t x;
	uint32_t y;

	printf("&x = %p\n&y = %p\n", &x, &y);

	return 0;
}
$ ./stack
&x = 0x7ffc6187c140
&y = 0x7ffc6187c144
anonymous
()
Ответ на: комментарий от anonymous

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

а вообще от флагов :)

qulinxao3 ★☆
()

если будут автономные железки (для дрыганья развитой подсистемой in/out)

то:

https://codewith.mu/

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

От флагов, от ABI, от желания левой пятки компилятора. Но надо же указать Стасону что очередная его странная теория об устройстве мира это каргокультирование, верно?

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

Паскаль отстал от жизни

«Наши-то инновационные способы перекладывать нули и единицы такие инновационные» (ТМ)

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

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

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

примет какую-то несущественную техническую деталь (к примеру, наследование) за что-то действительно важное

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

def my_list(x):
    l = []
    for i in range(0, x):
        l.append(i)
    return l

он будет писать

def my_list(x):
    def build_list(y):
      if y<=0:
        return []
      else:
        return [(y-1)] + build_list(y-1)
    return list(reversed(build_list(x)))
monk ★★★★★
()
Ответ на: комментарий от qulinxao3

лучшее:


from functools import partial, reduce
def compose(*fns): #https://en.wikipedia.org/wiki/Tacit_programming
    return partial(reduce, lambda v, fn: fn(v), fns)

my_list = compose(range,list) # or swaped? lol kek 

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

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

А это и время, и деньги на расходники, и ресурс электромеханических устройств, и жидкости, потребляемые Михалычами…

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

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

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

но студенту важно их впитать в себя, потому что сама профессия этим пропитана.

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

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

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

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

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

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

1. регрессом

ибо тацит питону орто

2. у чела фобия к тифону

3 у чела филия к трупопаскакалю

хотя и 2 и 3 дети своего времени и marching morons

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

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

3 топа Плоджеровых

Programming on Purpose, collected essays from the magazine Computer Language

Volume I: Essays on Software Design (1992)

Volume II: Essays on Software People (1993)

Volume III: Essays on Software Technology (1993)

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

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

ибо тацит питону орто

Питон не умеет в нормальное ФП, очень тормозное ФП. Да еще неудобное с человеческой точки зрения. Так что не орто, а параллельная вселенная.

Уж лучше [oca]ml изучать.

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

Это все про computer science. Я, похоже, удивлю присутствующих, но в средней массе программистам все это не нужно. Они код должны писать. Не про ассемблер и перфокарты думать, а писать код, который делает фичу X на языке Y наиболее понятным способом. А думать про архитектуру, ассемблер, оптимизации и прочее будут два-три сеньора, которым в должностной инструкции написано про это думать.

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

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

«А чо такого-то, я всего лишь один объект в функции локально объявил - всего-то одну ячейку стека занял.»

Один ассемблерный MOV может выполнятся дольше, чем new Object для сложной структуры. Программирование на ассемблере приучает к ложной мысли, что более короткая на ассемблере программа должна быть быстрее.

И в Си++ вообще любое действие может оказаться сложным от сложения до присваивания.

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

В оригинальном примере ЛОР, помоги выбрать ЯП для обучения (комментарий) его тоже нет.

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

И даже без хвостовой рекурсии в Racket (my-list 10000000) сработает, а в питоне уже на 1000 будет переполнение стека.

Вот такие вот несущественные детали.

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

list(range(x))

Так смысл именно написать эту функцию, а не использовать библиотечную. А то я и в Racket напишу

(define my-list range)
monk ★★★★★
()
Ответ на: комментарий от anonymous

Вот это полноценная очередь

Но нельзя сделать новую очередь из значения и очереди за O(1). Только за O(N).

def cons(x, d):
  d1 = d.copy()
  d1.append(x)
  return d1
monk ★★★★★
()
Ответ на: комментарий от qulinxao3

несколько лахов лахов оборотов земли солнца назад

Памагити

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

Они код должны писать.

А думать будут два-три сеньора

Взать сокращенный набор команд и натравить генетический алгоритм (с (нейро)эвритикой). Недумающие программисты не нужны для генерации KLOC

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

Но нельзя сделать новую очередь из значения и очереди за O(1). Только за O(N).

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

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

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

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

Кстати, в другую сторону тоже работает. Хаскелевский

quicksort1 (x:xs) =
  let smallerSorted = quicksort1 [a | a <- xs, a <= x]
      biggerSorted = quicksort1 [a | a <- xs, a > x]
  in  smallerSorted ++ [x] ++ biggerSorted

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

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

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

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

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

неа

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

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

плохо когда с ложно понимаемой педагогике забивают микроскопом гвозди

у питона стандартная библиотека в сырцах идёт ( как у святого Ся изначального)

чтение кода следует в учебном(реальном) курсе раньше пишанию кода

одна из килер фич что Py что Pa меньшая запутанность основной библиотеки

в отличии от языка phd Ся

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