Pull to refresh

Comments 438

Испортит ребенка надо ему сразу яву или с++. Эти бейсики ничего хорошего не дают а потом ты годами с их наследием в мозгах борешься
Ну, я хоть и сишник со стажем в 31 год, ничего особо страшного в начале обучения таких юных детей, как сын автора статьи, в изучении Basic-а не вижу! На самом деле, от спагетти-кода, весьма быстро отходишь и никакого особого засорения мозгов не происходит. Сам начинал когда то с Бэйсика на БК01-10, и это вообще никак не навредило перейти сперва на Паскаль, потом на С, а с появлением у нас доступа к первым версиям С++, и к ООП. Более того, я и сейчас вынужден постоянно писать на VBA, и при этом вполне способен параллельно работать и на С++ и на Java и всём таком подобном.
А как быть с отсчётом не с нуля?
Если это юмор, то понимаю. Если это реальная проблема — что-то нужно срочно делать. Это мне живо напомнило старую школьную проблему: ось абсцисс — x, ординат — y. Обозначаешь наоборот. Или вообще русскими буквами. Или греческими. Для многих это реальный шок. Ступор. Потом проходит. Споры о языках проходят на полном серьезе. На мой наивный взгляд, разные языки — это то же самое, что разное обозначение осей. В свое время (лет 25 назад) я на спор на QB написал систему сбора данных полевого эксперимента (это железо и датчики) плюс базу данных и интерактивный графический обработчик. Просто чтобы доказать неверующим, что это совершенно полноценный язык для всяких разных задач. В этом нет ничего странного, имхо, поскольку в любом случае всё транслируется в машинный код. Для себя в то время я использовал Борланд Паскаль 7. Но это чисто субъективное предпочтение.
На мой наивный взгляд, разные языки — это то же самое, что разное обозначение осей.

Вы явно не знакомы с Haskell

А что, Haskell? Если продолжать аналогию с осями, то Haskell даëт понимание того, что оси могут быть какими угодно, хоть криволинейными, но это просто базис в линейном пространстве :)

Начинать с этого обучение точно не стоит, но это не что-то принципиально инопланетное. Оси и оси...

Но ведь ось Y и вправду много, где направлена вниз, а не вверх, а популярный порядок индексов (строка, столбец) это (-Y, X)
Речь о массивах? Сделать с нуля, очевидно: OPTION BASE 0
Это было не везде. В MSX Basic OPTION BASE точно не было.
А кому он нужен? Кроме того, все современные языки давно уже перешли «на ноль» и лучше привыкать сразу.

R начинает индексы массива с 1. Никаких проблем в голове это не вызывает.

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

Тут вроде вся тема про интерпретируемый qBasic. Про популярность R : выше Perl и Swift https://www.tiobe.com/tiobe-index/ . Но вообще дело не в этом, а в том, что нет проблемы писать на языках с разными началами массива.

И я начинал с Бесика на Агатах. Но это не лучший вариант. Только, еси поиграть в программирование, а потом заняться другим.
А как учебный язык лучше Паскаль. Его, собственно, Николас Вирт за тем и писал.
Есть Паскаль специально для обучения. Нпр., Dr Pascal.
Проиграть в программирование на Агатах была Рапира. Хорошо что тогда она меня не заинтересовала, ведь был Бейсик в котором я уже что-то знал :) Но играть лучше в современные colobot и тому подобное.

Кстати в Бейсике на Агатах были медленные принты и создавать визуальные ASCII игры было невозможно. Рисовать по пикселям было чуть ли не быстрее.
Оффтоп: графический бутлоадер
image
VBA отличается от QBasic-а не меньше, чем QBasic от ранних версий Basic-а. В ранних версиях не было IDE, строки нужно было нумеровать руками. Подпрограммы Basic не полноценные процедуры. Вызывались gosub номер строки, параметры передавлись через глобальные переменные. Был оператор let. Важной причиной популярности Basic стал его небольшой объем, который можно было впихнуть в маленькую память. Перед VBA такой задачи не было.
Важной причиной популярности Basic стал его небольшой объем

Был микропроцессор (ins8073) со встроенным интерпретатором бейсика размером 1.25 кБайт — подавай питание, подключай терминал по RS232 и работай! Программы можно было с внешнего ПЗУ выполнять.

А как выглядит и работает такой терминал?

Я недавно подключал RS232, но там через переходник серийный порт. От вида разъема родным повеяло )

Э… как гипертерминал. У чипа простой интерфейс RS-232 или TTY, подключается к компьютеру и пользователь общается с ним через любую терминальную программу.
Таким образом можно вводить программу в память чипа, запускать на исполнение и получать и передавать программе данные также через 232 интерфейс.

как это не было полноценных процедур и функций? а как же Declare Sub, Declare Function? еще даже была менюшка, позволяющая переходить между ними и отображать только конкретную процедуру или функцию, gosub тоде работала

Пройдите по ссылке и попытайтесь набрать и выполнить то, что у вас на скриншоте, только полностью, всю программу. Попробовали? Да, вот такой тогда был Бейсик.
Вы косвенно-нейтральными ответами «догадайся сам» лишь создаёте конфликт :)
Стоит просто отметить, что пример LuchS-lynx а — из QBasic'а, а выше речь шла о более ранних, более примитивных диалектах типа GW или БКшного Вильнюса, где этих конструкций и впрямь не было.
Давайте разберемся. third112 написал комментарий:
VBA отличается от QBasic-а не меньше, чем QBasic от ранних версий Basic-а. В ранних версиях не было IDE, строки нужно было нумеровать руками. Подпрограммы Basic не полноценные процедуры. Вызывались gosub номер строки, параметры передавлись через глобальные переменные. Был оператор let. Важной причиной популярности Basic стал его небольшой объем, который можно было впихнуть в маленькую память. Перед VBA такой задачи не было.

LuchS-lynx на него ответил:
как это не было полноценных процедур и функций? а как же Declare Sub, Declare Function? еще даже была менюшка, позволяющая переходить между ними и отображать только конкретную процедуру или функцию, gosub тоде работала

Я в ответ привел ссылку на эмулятор Вильнюса, как пример отсутствия современных элементов Бейсика. В ответ получил скриншот Кьюбейсика, который не Вильнюс. И теперь я, оказывается, создаю конфликт. В чем он заключается-то?
В том, что вместо короткого пояснения, что речь — о разном наполнении смысла «Бейсик» для вас и для него, вы пытаетесь ткнуть его носом в виде «посмотри, где ты облажался». Зачем так делать — не понимаю. Человеки — они такие. Иногда попадают мимо контекста. Но это просто комментарий со стороны, не принимайте близко к сердцу.
image Конечно Borland/Turbo Pascal 7.0 был более продвинут и во многом более функциональнее чем QBasic, но в чем бэйсик был лучше, так это в справке (дизайн+лаконичность примеров и описаний + дизайн), а так же в оформлении процедур и функций, потому что после того как я создавал в бэйсики процедуру, то в текстовом редакторе она отображалась автоматом в отдельном окне, а переключение было через меню, в то время как в паскале приходилось крутить вниз сплошной листинг всего и вся…

VBA в части логики не отличается от QBasic ни на грамм, да стало больше фишек и функций, а кое-что убрали, но все эти циклы и принципы работы остались теми же. Добавилось объектное программирование, которое проще и более понятно, чтом в том же Паскале.

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

Просто потому что на просторах СНГ самую большую известность имели 6 и 7 версии уже из 90-х.

Тогда как сравнивают с наиболее распространённым у нас QuickBasic 4.5, который на 3-5 лет старше. Или его вариантом QBasic без компилятора.

А между тем был вполне себе мощный Microsoft Basic PDS 7.0, который появился раньше 7ки паскаля. Более того у него был встроенный движок БД (чем паскаль похвастаться не мог) на технологии ISAM (той самой которая потом ещё долгие годы будет использоваться в MS Access) на тот момент более продвинутый чем типичные плоские базы данных типа dBase.

Уж по какой причине он не пошёл в массы у нас - не знаю. Возможно пираты не слишком удачно "поработали" .

Про VBA я к тому упомянул, что для разных задач, а точнее — для уровня тех, кому нужны скриптовые языки для автоматизации, нет нужды предоставлять инструмент, который настолько сложный, что от него пользователь просто отвернётся. VBA, вполне себе всё тот же Бэйсик. Просто построенный с учётом COM технологий, и разрабатывался он именно под автоматизацию скриптовым методам, через скрытые за функциями вызовы интерфейсов, предоставляемых программой сервером. Но для 99% тех, кто пользуется им, этого знать и не надо.
Простейший набор алгоритмических возможностей почти классического Бэйсика, вполне покрывает их потребности. И таким пользователям, возможность ставить метки или нумерацию и переходить к ним через GoTo вполне себе нормально, ибо им надо решить быстро конкретную и обычно не сложную задачу. Для более продвинутых же задач, приходится очень серьёзно изголяться, это да. Как мне например, в моих макросах под CorelDraw. И в таких случаях, наследие простой алгоритмизации очень мешает, но тем не менее, большинство задач всё же решаются и без ООП. Я бы и перешёл на С#, но он поддерживается только с версии Х7, но мои пользователи работают порой на очень древних версиях Corel. Да и проблема в С#, что поскольку там имортируется интерфейс из самой коревой dll, то от версии к версии получается иногда не совместимость классов, и значит надо плодить зоопарк версий самих плагинов, а в VBA, это всё очень легко обходится путём проверки версий Corel и смены алгоритма или функции, и никаких проблем тогда с использованием одного и того же макроса под разными версиями.
Так что, я думаю Бэйсик ещё и нас переживет! Да и начинать обучение ребёнка программированию с такого простого и очень прощающего ошибки языка, как Бэйсик, вполне себе благодарное дело, если ребёнок хочет программировать, а ты не хочешь ему сразу это желание отбить.
Я в VBA углубился 4 года назад, когда встал вопрос как автоматизировать и упростить ведение документации, т.е. заполнение шаблонов подготовленными данными, что привело к написанию программы на связке Excel + VBA. Что поразило и порадовало:
1. Вся логика (циклы, ветвления, организация процедур и функций, условия, математика) один к одному как QBasic/QBasic 4.5
2. Функции ввода-вывода и обращений к памяти отличаются, в VBA присутствует объектное программирование, но при этом в сети столько контента, что если правильно сформулировать вопрос/хотелку обязательно найдется ответ, часто в виде готовых блоков кода. Из-за чего программировать становится пугающе просто.
Я начинал с QBasic. Что не помешало мне освоить C#,C++, Java, Go, Delphi и еще десяток языков.

И как, сильно пригодилось? Я тоже прошёл весь этот путь, но мне и в страшном сне не придёт в голову учить своих… да даже чужих детей BASIC. Я преподавал, начиная от пятиклашек и выше. BASIC — тот случай, когда ты через некоторое время вынужден сказать "А теперь забудьте всё, что мы учили". Если автору так нужно что-то лаконичное и шустрое, то Turbo Pascal просто на голову выше.

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

(второй раз в комментах этой темы спрашиваю)
ЧТО надо забыть такого страшного «всё» в бейсике?
===
я тоже начинал с бейсика, причем тогосамого страшного, с обязательной нумерацией… а в VB6 вообще освоил ООП… делал самодельные связные списки и хештаблицы (интернетов тогда не было у меня, гдето про них вычитал и делал самостоятельно как себе представлял это… как ни странно получилось почти как по учебнику)… что мне тоже ниразу не помешало потом перейти на C#/Java и Pyhton

У нас путь похожий, но выводы разные. Да я писал на BASIC ещё для ДВК-1, да потом без труда перешёл на Pascal (только писал на нём как на BASIC, потратив немало времени на выкорчёвывание стереотипов). После чего переход на C#/Java (я опять же говорю о качественном переходе) дался намного легче. Но мне и в голову не приходит мысль пытаться перенести эту пропахшую нафталином ностальгию в сегодняшний день. Или советовать кому-то повторять этот путь длиной в несколько десятилетий с постоянным ломанием парадигм, выбрасыванием в помойку старых наработок и т.п.


Время примитивного императивного мышления в духе for/if уходит. Когда сегодняшний ребёнок выйдет на рынок труда, там уже вовсю будет типо-ориентированное программирование, что-то в духе Haskell, Idris, Agda и т.п. И мой опыт подсказывает, что для детей оно даже более натурально. Структурирование игровых персонажей, исследование их поведения с применением того же ООП заходит лучше, чем скучные синтетические числовые/символьные задачи, на которых строится BASIC, из-за его убогой системы типов и модульности. Таких детей можно хоть завтра бросать на реальные бизнес-задачи. Может у вас другой опыт преподавания, поделитесь, будет очень интересно.


Что я могу перенести из него в сегодняшний день? Скажите мне. Я тогда вычту его из "всего" и мы получим ответ на интересующий вас вопрос "что надо забыть". И я надеюсь, мы говорим о навыках решения задач, которые формируются в наших нейросетях годами, а не схожести синтаксиса for или if. Вы реально считаете, что некоторый условный тинейджер, начавший с BASIC ничуть не проиграет другим, которые начали с Pascal или Smalltalk?

я сейчас не про то что детей надо учить современным языкам (это несомненно)
а про то что за бейсиком тянется слава 'кошмарного языка который нельзя учить потому что он ломает мышление' — но это блин не так, он не сильно отличается от других языков

то что вы говорите про ООП, так не ООП единым же… взять тотже Си, где там ООП?
На моей текущей работе, огромный проект на питоне где ООП используется очень ограниченно… а это реальная боевая задача, (по началу мне очень сильно мозг это ломало, учитывая что я долго писал на шарпе и на яве)
==
у меня нет опыта преподавания, но мой опыт программирования подсказывает, что все языки плбюсминус одинаковые, разница лишь в фенечках-библиотеках (тут в комментах ктото сетовал что qb нельзя файл из интернета скачать… хах, прямо таки в чистом-'правильном' CPP так можно сделать… ну ну) и нескольких парадигмах, ООП/Процедурщина… но надо понимать что ООП не идеальная модель, очень много кода пишут 'по старинке' и много где это более оправдано чем ООП
взять тотже Си, где там ООП?

Да в том же ядре Linux. И есть целая Glib для реализации ООП на C.

ну это же отдельная либа, а не часть языка.
тут ниже пишут что в бейсике нет рекурсии… типа впилили только в поздних версиях — фейл.
ну если в сях есть ООП через glib, никто не мешает в старом бейсике без рекурсии, самому её напрограммить сделав счетчики вызовов подпрограмм.
ну если в сях есть ООП через glib, никто не мешает в старом бейсике без рекурсии, самому её напрограммить сделав счетчики вызовов подпрограмм.

Простите, а стек вы куда класть будете?

но это блин не так, он не сильно отличается от других языков

У вас странные критерии сравнения. На мой взгляд он кардинально отличается от других языков. Просто небо и земля. Схожесть только на самом примитивном уровне вроде рудиментарных алгоритмических примитивов. Возьмите любую натуральную задачу. Там где ученики оперирует знакомыми объектами. Пусть даже будет скучный вариант с шахматами. Конструкцию вроде


Figure = class … end;
Board: Array['a'..'h', 1..8] of Figure;


На Pascal я объясню за минуты. А представьте себе описание шахматного мира на BASIC. И попробуйте оттуда хоть что-то перенести в современность кроме нескольких for/if. А потом попробуйте из Pascal.


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


то что вы говорите про ООП, так не ООП единым же…

Я говорил про типо-ориентированное программирование. ООП только упомянул в примере и это не эквивалентные вещи.


Да и ООП в Си навалом. Если только вы не ограничены одной и далеко не самой лучшей реализацией (трио инкапсуляция+полиморфизм+наследование). Иначе советую немного расширить кругозор, обратиться хотя бы к автору идеи и посмотреть тот же Smalltalk. Вот из него в современность переехать с event-driven архитектурами было бы не в пример проще. Так что ООП — это скорее стиль мышления. Как вы организуете объекты предметной области. Он спокойно может выражаться в конвенции именования ваших функции и ограничиться использованием простых записей. Возьмем что-то из классики, например Postgres:


static bool bloom_contains_value(BloomFilter * filter, uint32 value)


Если потом посмотреть на имплементации в том же Rust, то будет складываться стойкое ощущение дежа вю. Из такого "не ООП" вы легко можете переехать в тип BloomFilter с методом ContainsValue. И обратно.

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

А вот в реальной жизни практически никогда не нужно оперировать со 'знакомыми объектами', взять ту-же яву которую многие ява-хейтеры не любят за ад из абстракций и огромные цепочки наследований, там зачастую на один 'знакомый объект' приходится десяток всяких helper-ов factory и прочих абстракций, которые оч сложно объяснить с точки зрения программирования не вникая в паттерны и архитектуру

Я понимаю что это проще объяснить и в некотором роде проще мыслить, я некоторое время думал схоже пока не попал на проект где объекты и вообще ООП используется только там где это требует фреймворк и базовые примитивы языка, весь бизнес код написан процедурщиной… вот тут я и вспомнил свой древний опыт на доисторическом бейсике… по началу оч сильно подгорало от такого, крайне непривычно, вспоминать опыт 20 летней давности
А вот в реальной жизни практически никогда не нужно оперировать со 'знакомыми объектами'
В GUI нужно. Или предлагаете только консольные приложения делать? Я про это писал.
ну тоесть вы считаете что работа с объектами — это лучший вариант в программировании?

Нет. Я уже не раз написал, что именно я считаю, но видимо вы не читаете.


А вот в реальной жизни практически никогда не нужно оперировать со 'знакомыми объектами'.

С точностью наоборот. В реальной жизни всегда приходиться оперировать со знакомыми объектами. Стейкхолдеры, как и дети, не будут разговаривать с вами на другом языке. А вот уже от привычных для них объектов можно идти в правильном направлении. Вы же считаете, что от системы типов BASIC плясать куда проще. Число, строка… в проекте на Python вам тоже этого хватает?


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

А в Rust отличные абстракции и нет наследования в принципе. Что будем делать с этим фактом?


не попал на проект где объекты и вообще ООП используется только там где это требует фреймворк и базовые примитивы языка, весь бизнес код написан процедурщиной… вот тут я и вспомнил свой древний опыт на доисторическом бейсике

Не хочу принижать этот проект и ваше в нём участие, но объективно я не могу рассматривать это факт. Я тоже попадал в сотни разных проектов. Были и с уродливой кодовой базой, включая процедурщину и мне в голову не придёт этот подход восхвалять. Может это какой-то выдающийся продукт, который кладёт ту же Java на лопатки и можно краем глаза где-то взглянуть? А может как я и предположил, у нас просто разный смысл кроется за аббревиатурой ООП. Я, например, многие практики OOD в SQL использую. Хотя там никакого привычного ООП и в помине нет.

На Pascal я объясню за минуты. А представьте себе описание шахматного мира на BASIC.

Но это вопрос парадигмы, а не языка. Т.е. в разрезе «чем Basic так плох» надо говорить об императивном подходе в других языках, чтобы были в принципе сравнимые категории. В Бейсике, к слову (если брать MS Q(uick)Basic) есть записи, и вы можете описать мир так же. Методы, естественно, будут в виде отдельного пакета процедур, работающих с этими записями.
TYPE Figure
...
END TYPE

DIM Board (1 TO 8, 1 TO 8) AS Figure

Просто ваше «язык плох, забудьте всё» — о переходе к другой парадигме, тогда как возмущение вашего собеседника («а про то что за бейсиком тянется слава 'кошмарного языка который нельзя учить потому что он ломает мышление' — но это блин не так, он не сильно отличается от других языков») — это совсем из другой оперы. Претензия вида «ломает мышление, потом надо переучивать» — она еще из старого брюзжания Дейкстры взялась, и не связана с ООП. Вообще, средняя претензия вида «бейсик ломает сознание, потом переучивать» на поверку выражается в виде «там строки нумеровать надо» или «синтаксис слишком не похож на Сишный» и т.п.
И как, сильно пригодилось?

Мне — да. Я начинал с Бейсика, на нем учился постановке задач и превращения их в алгоритмы — основа практически любого ЯП. И это мне сильно пригодилось при переходе на другие языки :)
Да, были моменты «опа, а тут так нельзя, что ли?», но это было вполне ожидаемо, другой язык — другие правила. Однако основа оставалась — алгоритмизация, условия, циклы, переменные.

Мы опять говорим про переходы, которые многие из нас осуществляли в прошлом. Современный мир — это совершенно другие приоритеты. Циклы? Вы пропустили тот момент, когда вся индустрия испытывала дикую боль, поскольку циклы не масштабировались на многоядерные системы? Переменные? Вы остались в стороне от страшных пыток многопоточными приложениями и не заметили, что мир становится всё более иммутабельным?)) Всё сейчас заметно движется в сторону обогащения системы типов. Не успеете моргнуть, как вместо условий у вас будут dependent types. И сейчас у многих идёт конкретная ломка, как избавиться от этого старого императивного багажа, который больше не работает. А вы предлагаете продолжать его культивировать.

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

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

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

Ассемблером можно заинтересовать. Я в таких случаях использую embedded-платформы, от простых контроллеров, где можно помигать светодиодами, до чего-то роботизированного. Но это другой вектор развития.

Но это другой вектор развития.

Вот именно :)

Из всего богатого мира software engineering вы взяли только computer science, оттуда выдернули маленький кусочек, касающийся исключительно одной вычислительной модели, с уклоном на наиболее типовые микропроцессорные архитектуры и называете это основами программирования?


Я через десятилетия несу любовь к ассемблеру, что не мешало мне программировать от Рефала или Пролога до SQL, XSLT, выводке всяких ML, Gherkin и т.п., которые с недоумением смотрят на ваши выводы, отрицающие существование символьного, декларативного, мета- и других форм программирования.


Я так понимаю, что для вас Марков или Чёрч — это не основы, а НАМ или лямбда-исчисление недоразумение. Ну тогда я вам могу предложить основу ещё более основательную — машина Тьюринга. Не благодарите, получайте удовольствие. Говорят удачный вариант реализации в языке Brainfuck.

UFO just landed and posted this here

Как модель абстрактного вычислителя, эквивалентного машине Тьюринга?

UFO just landed and posted this here
Ни в коем случае не с ассемблера! Только вторым языком, чтобы понимать, как работает железо.
После ассемблера просто невозможно программировать на ЯВУ, процесс написания программы превращается в постоянную борьбу с компилятором. Напрмиер Си. Все эти миллионы унаследованных друг от друга типов данных, с невозможностью конвертации «на лету». Пристегивание кучи вроде как и ненужных, но тем не менее необходимых библиотек.
Вот например,
решыл я вспомнить программинг на Си под Windows, лет 10 не брал в руки этих шашек. Но я не настоящий сварщик, просто понадобилось программку написать для облегчения работы. Установил даже две MSVS, 6ую и 2008ую. Сравнить в процессе. Накидал хеллоуорлд на WinAPI. В результате вылезли пара проблем:
Вот вроде создаю чистое приложение без всяких MFC и прочих стандартных библиотек. Заинклужен только windows.h. А в ресурсе меню не могу назначить пункту свой идентификатор, например, ID_FILE_OPEN, т.к. он уже объявлен в одном из файлов из MFC (неподключенных же!). А в процедуре обработки сообщений сообщение приходит именно со стандартным, MFC-шным значением ID_FILE_OPEN и я его обработать не могу :)
Опять же, вызываю по выбору пункта меню MessageBox (в отладочных целях) — а его окно не прорисовывается :) Зато, кроме отсутсвия фокуса ввода у окна приложения (ну правильно, оно же перешло на непрорисованный месседжбокс!) возрастает нагрузка на процессор из дебрей ядра. До 50% :)
В 2008ой вообще текстовые строки зачем то (:)) надо писать в формате L«my string», просто кавычки компилятор не понимает. И все равно в заголовке окна выводися не только заданный мною текст, а еще и содержимое предваряющих его ячеек памяти.
И это просто шаблон оконного приложения с всего лишь с СreateWindowsEx.
В итоге то же самое, но переписанное буква в букву на ассемблере в Masm — работает так как и задумано.

Запомни! Лучше день потерять, потом за пять минут долететь! (с)
Циклы? Вы пропустили тот момент, когда вся индустрия испытывала дикую боль, поскольку циклы не масштабировались на многоядерные системы?

И? Циклы исчезли из современных языков?
Переменные? Вы остались в стороне от страшных пыток многопоточными приложениями и не заметили, что мир становится всё более иммутабельным?))

И переменные тоже упразднили из современного программирования?
Не успеете моргнуть, как вместо условий у вас будут dependent types.

В каких-то языках — возможно и будет. Но далеко не во многих :) И поморгать мне на мой век хватит, да и детям моим тоже :)
И? Циклы исчезли из современных языков?

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


И переменные тоже упразднили из современного программирования?

У вас, как я понимаю, очень дискретное мышление? Попробую пояснить на примере. В ES6+ var остался, но практически все best-practices рекомендуют использовать const. В языках вроде Rust, F# и многих других надо принудительно указывать мутабельность, но она не очень приветствуется. Я это рассматриваю как постепенное движение к иммутабельности. А для вас факт поддержки переменных — это то, что они основы?


В каких-то языках — возможно и будет. Но далеко не во многих :) И поморгать мне на мой век хватит, да и детям моим тоже :)

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

Вы как-то скользко провиляли вокруг ответов, но так и не ответили :)
В С++ еще остались переменные и циклы? В Яве? В С#? Только не говорите, что эти языки уже вымерли :)

Да, в том же VBA нельзя управлять потоками. Но и в Node.js условная многопоточность. Каково ваше отношение после Java?

например? каким наследием?
вот возьмите python, плохой язык? там можно точно также как на бейсиках писать
UFO just landed and posted this here
отлично, хороший получается только си(или си с плюсами)?
Без трассирующей сборки мусора реализацию сделали уже?

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

Осваивать его не придётся, он часть учебной программы JetBrains, но как общий принцип кто не научился жить без трассирующей сборки мусора, тот идёт нафиг из технологического стека. Как Haskell научится, так библиотеки на нём станет приемлемо использовать из других языков.
UFO just landed and posted this here
но как общий принцип кто не научился жить без трассирующей сборки мусора, тот идёт нафиг из технологического стека


А какова мотивация у такого принципа?


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

Трассирующая сборка — это вечный двигатель наоборот. Ему всегда есть, чем заняться, и он этим занимается. Мне бы, пожалуйста, вечный двигатель нормальный, чтоб вырабатывал, а не потреблял. А если такого нет, то пусть не будет никакого. Настрадался.

Да и foreign export в хаскеле есть и вполне успешно работает.


Когда я думаю про интероп, у меня в голове образы WinRT, COM, OLE Automation, VirtualBox XPCOM, libobjc и отчасти SOM. С уже формально решёнными вопросами владения, освобождения ресурсов, уведомления об ошибках и наследования.

А FFI — это только первая ступень лестницы, по ней ещё шагать и шагать к высокоуровневому взаимодействию. Вот, допустим, на макосе есть Oxygene/Toffee, и взять бы написать на гипотетическом избавленном от трассирующей сборки мусора Хаскелле монаду Дейкстры, заполучить её в Oxygene как значение-последовательность (sequence of), и по этому значению походить средствами LINQ. Или в языке Ада, если генератором привязок спроецировать на тип с аспектом Default_Iterator, тоже comprehension можно устроить.
UFO just landed and posted this here

Касательно кеша (только кеш-памяти)... Вы проходили выбор размера массива, не равный 2 * N (для увеличения производительности)? Встречал postscript-документ Monica Lam (ACM).

UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here

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

Тем не менее люди справляются, и не считают какой-либо из них «плохим».
Вы так говорите, как будто в случае естественных языков у людей так много выбора.
Родился на определенной территории и автоматом получаешь родной язык, даже если он тебе совершенно не нравится. Хочешь общаться со всем миром — учишь международный английский, никого твои сложности не волнуют.
Я бы очень многое отдал, чтобы моим родным был международный язык и мне не приходилось тратить тысячи часов на освоение международного и все равно упираться в то, что на таком же уровне как родной его освоить очень сложно…
В случае же с обучением программированию есть варианты. ИМХО, начинать надо с максимально универсального (позволяет попробовать его в очень разных задачах) и популярного (легко находить информацию, помощь и т.п.) языка, а дальше, поняв принципы, уже можно специализироваться в тех или иных направлениям изучая специфику.
UFO just landed and posted this here
Где я бы взял python в 1990 году? Когда и спектрум не у каждого был. Что было на том и учились. Basic на спектруме мне больше нравился, чем его разновидности qbasic или qwbasic.
Бэйсик на спектруме при всей своей примитивности языка был очень классно интегрирован в саму систему.
Запускаешь спектрум, и через 2 секунды тебе доступна примитивная ОС и среда разработки 2 в одном. Причем можно сразу же рисовать на экране графические примитивы, и вместе с ними же писать текст в любую координату экрана. Некоторые люди (не профессиональные программисты) реально брали и писали себе на бэйсике простой софт под собственные нужды и даже делали себе некоторый примитивный ГУИ, используя этот простой подход — тут чертим линии, тут выводим текст, получилась вот такая табличка, этот текст таким цветом выделяет, этот другим, по нажатию клавиш выделенный текст перемещается, вот уже интерактивное меню получилось.

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

Вот тут с 15-40 www.youtube.com/watch?v=PBRIfY-wRiA&list=PLOtimvwAoYtlWZdX-MgnHrr-GUS7m8F7g&index=6 мужик из 1982 года, профессиональный фотограф сам себе на бэйсике написал софт — собственную простенькую субд в которой он хранит каталог снимков, клиентов, заказов, платежей и вывод на печать всего этого в нужном формате. Наверняка мужик просто талантливый и он бы и сейчас справился с такой задачей (на каком ни-будь питоне). Но ведь нельзя сказать, что за 40 лет стало гораздо удобнее и легче сделать то, что он сделал тогда.
А сколько всего сейчас надо сделать для такой задачи!

Был такой чувак Terry Davis, который разрабатывал подобную старым системам ОС для PC (Temple OS), но его никто не понял. Несмотря на общую кривость и фриковость, задумки очень интересные — перекликаются с возможностями Symbolics Lisp Machine из 80-х, только для Си.

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

Начинать надо с алгоритмизации задачи, а Basic — это, пожалуй, самый простой способ начать ее осваивать. Да, в нем много неправильного по современным меркам, но тем не менее заложить основу он помогает. И не создает никаких непреодолимых трудностей для дальнейшего перехода на более «правильные» языки :)
Многие классические алгоритмы, которые изучают на первых шагах, рекурсивные (Ханойские башни, 8 ферзей и т.д.). А в QBasic нет рекурсии.
Рекурсивные алгоритмы — это уже не первые шаги :)
Dr Pascal был предназначен для вводного курса по программированию для первокурсников. Там приводился пример рекурсии в задаче 8 ферзей. И для бинарных деревьев рекурсия нужна. Рекурсивные алгоритмы очень наглядны.
Прям на первых шагах? «Сегодня мы начнем знакомиться с основами программирования и для начала разберем рекурсивный алгоритм»? :)
Ну, не на первом шаге, не на первом занятии, а на 4ом вполне возможно. Я в МГУ когда-то по Паскалю лекции читал. Уложился в 6 лекций. Рекурсия вопросов не вызвала.
То есть за три занятия с полного нуля усваиваются основы алгоритмов в целом, применение линейных алгоритмов, понятия переменных, ветвления и циклы и т.п.? Лихо :)
Матан для многих сложнее:) Конечно, понятие теоретической сложности алгоритмов не для первых занятий. Понятие переменной всем известно из школьной алгебры. С пониманием типов у начинающих иногда возникают трудности. Ветвления и циклы проблем обычно не вызывают — все знают выражение «ходить по кругу» — «зациклиться»:)
Все так, но не за три занятия же :) Ваши студенты ведь уже были хоть как-то подготовлены к тем же алгоритмам, у них были уроки информатики, и понятие переменных действительно из школьный уравнений легко переходят. А я говорил про абсолютное начало — как у автора с его 7-летним сыном :)
7-летних учеников у меня не было. (Был, правда, случай, когда читал лекцию про комп. игры в младших классах подшефной школы). Но это не про циклы и переменные. Думаю, что в данном случае, если сын захочет, то папа сможет провести с ним больше, чем 3 занятия. Но в 7 лет дети часто меняют желания и увлечения. И в более старшем возрасте… Один мой знакомый — университетский профессор, математик, спец. по комбинаторике и теории графов. У нас с ним назревала совместная статья в мат.сборник по его интересному алгоритму. Как-то он пожалел, что не умеет программировать. Я ему предложил прочесть 30 страничную книгу Вирта о Паскале. С его уровнем это было бы не трудно, обещал помочь если возникнут затруднения. Он сначала загорелся, а потом сказал, что передумал. Отсюда ИМХО вывод, что не все люди хотят «кодить» :)
Было бы удивительно, если бы все это хотели и всем это нравилось :) Более того — даже не всем это дается одинаково. Кому-то алгоритмы и программирование заходят легко (даже если им это не особо интересно), а кому-то приходится прикладывать немалые усилий.
Он хотел уметь программировать, а не учиться, как и большинство. Вот, например, ребёнок из статьи за час с папиной помощью написал хэллоуворлд с одним ветвлением и всё, считает, что уже умеет. Взрослому дядьке так обмануть себя сложнее, а тратить время на уровень, на котором он посчитает, что умеет, он не может себе позволить.
Вот именно поэтому для обучения нужен максимально простой язык — чтобы обучаемый с первого урока уже что-то умел, путь даже это будет несколько далеко от правды. Касается не только программированияя, кстати, а чего угодно.
вот всякому хламу ставят кучу лайков или дизлайков. А подобные комменты остаются без внимания. По-моему, этот комментарий как нельзя лучше раскрывает суть сабжа, большинство комментаторов, которые распыляются над тем, какому языку сразу надо учить — игнорируют вопросы педагогики. Многие люди, заметил, будучи опытными профессионалами, считают себя одновременно и педагогами, не понимая, что вливание информации должно происходить в определенном порядке, с определенной скоростью, и в определенные часы жизнедеятельности. Обучение не должно отталкивать. Должны быть определенные этапы, маленькие подэтапы, в конце каждого из которых человек должен ощущать убеждение, что все сделано верно, и можно двигаться дальше. На этом основывается суть всех учебных заведений.
На этом основывается суть всех учебных заведений.
Традиционных учебных заведений. Но сейчас множество курсов, где бывает очень своеобразная «педагогика».
Так сейчас большинство специалистов — узкопрофили-выпускники таких «заведений». Которые одно действие умеют, а чуть что — совершенно неспособны понять причину, почему что-то не работает. Глубины знаний не хватает. Сам-то процесс педагогики в целом изучен уже достаточно давно.
Если говорить о проф.математиках, знающих много алгоритмов (на псевдокоде), могущих доказать корректность и оценить сложность, то ситуация сложнее. Найти день, чтобы прочитать 30 стр. описания Паскаля и разобраться в БНФ, каждый из них сможет. Сложность, видимо, во взглядах. У них иной взгляд, чем у «кодеров».

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

Зависит от преподавателя. На самом деле рекурсия даже более натуральна. Просто надо ребёнку не на факториале демонстрировать или числах Фибоначчи, а на простой операции подсчёта предметов в мешке.

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

Программы = алгоритмы + структуры данных (с) Никлаус Вирт. Да и алгоритмы — это тоже структуры данных (привет LISP/Scheme и классический курс SICP). BASIC решает только одну часть и решает почень осредственно. Можно учить ребёнка писать Circle(...) как мартышка. А можно научить его описывать структуру Circle, массив таких структур, выводить разным способом (все, чётные, сдвигать, масштабировать, находить самый маленький, большой и т.п.), добавлять новые виды, объяснить обобщение и так постепенно вывести на правильный трек. Желаю удачи с алгоритмами в BASIC. Обучал, знаю.

Можно учить ребёнка писать Circle(...) как мартышка. А можно научить его описывать структуру Circle, массив таких структур

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

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

Бейсик поддерживает и массивы — первый шаг к структурам. И круг рисовать в нем можно не только через CIRCLE.
И почему все считают, что Бейсик тут отстаивается как самодостаточный функциональный современный ЯП? Это вроде никто и не утверждает. Бейсик — это просто трамплин в мир программирования.
Но может быть где-то у второклассников предмет информатики и начинается со слов «Доброе утро, котятушки. Мы не будем тратить время на всякую устаревшую ерунду, а начнем сразу с ООП и многопоточного программирования.» :)
И почему все считают, что Бейсик тут отстаивается как самодостаточный функциональный современный ЯП?

Я сравнивал BASIC с Pascal. Так что вы ошиблись адресатом.


Бейсик поддерживает и массивы — первый шаг к структурам.

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

Я аж воздухом поперхнулся. Как нет никакой ложки рекурсии? Ты суслика рекурсию видишь? Нет?! А он она есть!
В ранних версиях Basic:
Рекурсия не допускалась.

Бейсик поздних версий (начиная с Turbo Basic и Visual Basic) резко отличается от ранних вариантов. Фактически, это новый язык, который во многом ближе к Фортрану или Паскалю, чем к исходному Бейсику. Основные изменения версий 1990-х годов состоят в следующем: [...] Появилась рекурсия.
Речь в статье идет на об абстрактных MS Basic образца конца 70-х начала 80-х (коих MS наклепала изрядное количество), а о вполне конкретном QBasic версии 1.0 заменивший GWBasic в составе DOS. Версия DOS пятая, представлен в июне 1991 года.
И кстати, в начале-середине 80-х уже существовали версии диалектов BASIC с рекурсией, структурами, локальными переменными. ЕМНИП на BBC Micro.
Получается, что мы говорим о разных языках.
Диалектах одного языка. Просто сильно отличающихся друг от друга.
ИМХО это сложный философский вопрос: с какого момента диалект становится самостоятельным языком?;)
Qbasic вполне спокойно переваривает сырки GWBasic. QBasic перестает быть самостоятельным диалектом?
одна интересная особенность языка Алгол 68 — его «многоязычность» — в язык заложена возможность использования различных таблиц трансляции, что позволяет для каждого естественного языка определить свой набор ключевых слов Алгола-68. В результате программисты получают возможность писать программы ключевыми словами родного языка.
Вики
Было много попыток перевести какой-то ЯП целиком на русский. И имена и ключевые слова. Аргументировали это тем, что в учебниках и методичках примеры содержат выражения типа «перейти на», «если то», и тупые ученики не понимают, что в проге надо набрать goto.
Такой ЯП будет диалектом? Американец может не понять «перейти на», а ЯП не только для машин, но и для человеков.
Думаю, что QBasic правильнее назвать самостоятельным языком, а не диалектом.
PS Для естественных языков:Вики:
Не существует единого понимания и соответственно единых критериев для разграничения языка и диалекта, поэтому, говоря, что данный идиом является языком или диалектом, необходимо оговаривать, что понимается под тем или иным термином. В случае, когда нужно избежать выбора, лингвисты обычно используют термин идиом, обозначающий любую мало-мальски отличную от других разновидность языка.

Идиом может считаться диалектом, например, если:

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

А потом кто-то нашел в корзине эти выброшенные попытки… Так и получился язык «1С» :))
Были такие попытки, лично видел Си++ с русскими служебными словами.Читаешь такой «русский» исходник, и ощущение что ты сейчас под психоактивными веществами. И посыл — «С него будет легче перейти на нормальный рабочий язык» считаю ущербным.
Если вы о Русском алгоритмическом языке (школьный алгоритмический язык) то он был введён в употребление академиком А. П. Ершовым в середине 1980-х годов в качестве основы для «безмашинного» курса информатики.
А «тупые» ученики не способные запомнить пару десятков служебных слов, будут смотреть на следующий код как на китайскую грамоту, с его нач, кон, арг цел, кц, нц.
алг Сумма квадратов (арг цел n, рез цел S)
дано | n > 0
надо | S = 1*1 + 2*2 + 3*3 + … + n*n
нач цел i
| ввод n; S:=0
| нц для i от 1 до n
| | S := S + i * i
| кц
| вывод «S = », S
кон

И язык программирования в первую очередь предназначен для абстрагирования от железа, а уж как он реализован совершенно не важен. К примеру существует реализация ЯП основанная на блок схемах, с средой разработки и отладки, а так же исполнения.
Там вообще без служебных слов обошлись, расставляй элементы, и соединяй их линиями.
А QBasic все таки диалект, возмужавший и выросший того изначального Бейсика, а не отдельный язык программирования.
Диалекты языка программирования Бейсик
Классические
Altair BASIC Applesoft BASIC Atari BASIC (ST) BASIC Programming Color BASIC Commodore BASIC Dartmouth BASIC Family BASIC G-BASIC GFA BASIC GW-BASIC HP BASIC for OpenVMS IBM (BASICA Cassette Disk) Integer BASIC Locomotive BASIC Mallard BASIC Microsoft BASIC MSX BASIC ScriptBasic Sinclair BASIC STOS BASIC TI BASIC (TI 99/4A калькуляторы) Tiny BASIC Turbo-Basic XL UBASIC Бейсик Вильнюс
Переходные
BASIC-256 Basic4GL
Процедурные
AmigaBASIC AMOS BASIC BBC BASIC Beta BASIC DarkBASIC FreeBASIC GFA BASIC GLBasic Liberty BASIC Microsoft Small Basic PureBasic QBasic QB64 QuickBASIC ScriptBasic SuperBasic ThinBasic True BASIC Turbo Basic XBasic Xblite Basic4ppc Visual Basic Visual Test
Объектные
BlitzMax FreeBASIC Gambas GLBasic KBasic (Basic for Qt) OpenOffice Basic PowerBASIC ProvideX RapidQ REALbasic (Xojo) Run BASIC AutoIt StarOffice Basic Visual Basic (.NET)
Думаю, что привыкнуть к таким локализованным языкам учителям было сложнее, чем ученикам :) Такие языки диалекты? Если да, то сравнение диалектов не проще сравнения языков.
А все потому что даже стандарт Basic установленный ANSI, воспринимался как свод правил, а не руководство к действию.
Да, грош цена такому «стандарту».
А какая цена ТурбоПаскакалю который изначально отличался от стандарта? ;)

Не будьте так строги, ведь они все соответствовали ANSI X3.60-1978 «FOR MINIMAL BASIC». А вот что они сверху налепили, это их творческое видение. %)
Это он с GWBasic спутал, — там была сквозная нумерация строк, а в паре GOSUB-RETURN требовалось указать адрес возврата.
Я о версии, котрая была в MS DOS 3.2.
Не было его там. Он с пятым ДОСом появился.
Может вы QBasic со старыми версиями QuickBasic спутали? В сырках QBasic ЕМНИП все датируется 90-91 гг.
Возможно. У нас в НИИ на Basic мало кто работал. Разве что дипломники, но и они больше на турбо.
Кстати о ТурбоВасике%) Лично наблюдал как он пакостил в сложной формуле. Знакомый учился на энерго, и у него в дипломе программа на ТурбоВасике делала какой то длинный расчет, с промежуточными результатами, их анализом, и по концове там зубодробительная формула на полстраницы должна была посчитать потраченную энергию. Делает он прогон с расчетными данными, а программа выдает «у вас на выходе энергия идет». Он с контрольными делает прогон где должен был ноль получиться, а там опять выход энергии. Включаем отладочную печать результатов, и с калькулятором на перевес все перепроверять. Всё бьется, кроме этой зубодробительной формулы. Проверяем её, всё норм, скобки на месте, операторы не перепутали, функции те что надо. Мистика… А побороть её надо!
Режем эту формулу на более мелкие части, присваиваем их дополнительным переменным, и о чудо, она стала считать так как надо. Судя по всему мы тогда дошли предела который мог разобрать парсер выражений, и тот вместо того чтоб послать нас упрощать формулу, обрезал её сам. С известным результатом.
вместо того чтоб послать нас упрощать формулу, обрезал её сам.
Похоже, что это проявление Basic идеологии: «прощать» максимум ошибок пользователя. «Хорошо» характеризует язык, очень «полезно» для обучения.
Нет, это баг или фича (кстати это мог так компилятор прооптимизировать) конкретной реализации Basic, в данном случае компилятор Borland Turbo Basic. И багафича вылезла в конкретном предельном случае с зубодробительной формулой, да и программа где она проявилась была далеко не учебная.
Кстати не факт, что она бы не вылезла бы в программе на Си, или на Паскале.
Могло быть на Си, но Pascal 8000 for OS 360/370, сделанный в Австралийском атомном центре, тестировался на подобные баги. Когда компилятору не хватало памяти — он прерывал процесс и выкидывал сообщение. Это был не учебный компилятор.
PS Думаю, что и учебный Виртовский Pascal-S сообщил бы о фатальной ошибке. Тут дело в принципе. В Basic пытались минимизировать «травмирующие» сообщения, а в Паскале наоборот. Поэтому Паскаль очень быстро перестал быть чисто учебным ЯП.
Вы так уверенно говорите? 10000 строк кода, это все таки 10000 строк. Наверняка в них есть темные места, где ждут своего часа неисправленные баги.

Еще раз повторюсь, я не знаю из-за чего было такое странное поведение. Парсер напакостил, оптимизатор кода, или было переполнение буфера, не знаю. В отличии от большинства компиляторов того времени, он не порождал ассемблерный листинг, только ЕХЕ и чайн-файл, а дисассемблировать их было не охота. Проблему то решили.
Никто не может дать 100%-ую гарантию, но это был один из лучших инструментов, с которыми мне довелось работать (не учиться).
GW-Basic — 1983
QuickBASIC — 1985
MS-DOS 3.3 — 1987
QBasic — 1991
Рекурсия, несмотря на свою наглядность — антипаттерн. Так что её отсутствие в обучающем языке — скорее плюс, чем минус. В конце концов ребёнок научится её разворачивать и писать без рекурсий.
ИМХО чтобы разворачивать, надо понять что такое рекурсия.
Структуру бинарных деревьев проще понять через рекурсивное определение. И операции с ними, следовательно, рекурсивные. А записать нерекурсивные можно, но для начинающего сложно и не нужно.
Вот описание класса для бинарных деревьев, причем в обобщенном типе. В узле дерева данные хранятся в виде списка. На PascalABC.NET. Хотелось бы увидеть, как это выглядит на волшебном «живом» QBasic…
type
  node<T> = class
  private
    left, right: node<T>;
    up: node<T>;
    lst: List<T>;
  
  public
    data: T;
    
    constructor(p: T);
    begin
      left := nil;
      right := nil;
      up := nil;
      lst := new List<T>;
      data := p
    end;
end;
Хотелось бы увидеть, как это выглядит на волшебном «живом» QBasic…

ну так QBasic процедурный язык, а вы пытаетесь указать на то что он в ООП не умеет
но тем не менее, это вполне реально сделать и процедурными способами, но кода будет много, да.
p.s. и еще кстати вопрос, что будет полезнее, решить вашу задачку имеющимися инструментами, или тупо идти по учебнику ООП
А это от цели зависит. Насчет «можно сделать» — так давно доказано, что три структуры — следование, выбор и повторение позволяют запрограммировать любой алгоритм. Что Вы подразумеваете под «учебником ООП» я не знаю. Язык изучают поэтапно. Особенно, если он мультипарадигменный. И в этом случае ООП — просто один из этапов изучения. Например, .NET-языки — они изначально ООП-ориентированные, в них любые типы данных — это классы. И запись 2.Sqrt эквивалентна записи Sqrt(2).
// delphi
link = ^node;
node = record
left, right: link;
// something else
end; // record
(почему-то «исх. код» перестал работать)
И что следует из этого дельфийского кода? Бинарное дерево без хранения данных, состряпанное на указателях, как в книге у Н.Вирта в 1980 году? Приходите с таким кодом в .NET, Вас там сборщик мусора быстро поставит на надлежащее место ))
На месте коммента "// something else" пишите всякие «idat: integer; rdat: real;» и т.д.
Отлично, хочу список вещественного типа написать, это как будет? И сборщик мусора Вы как-то тихонько и аккуратно стороной обошли, видимо, чтобы не зацепило ))))
А еще, я не понял, где у Вас связь с предшественником? Вы как такое дерево собираетесь обходить, скажем, в ширину?
В каждую вершину дерева можно добавить список. Какие проблемы? Обычно дерево обходят следующим образом:

procedure print (tree: link);
begin
   pint(tree^.left);
   writeln(tree^.idat);
   pint(tree^.right); 
end;

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

Книги Вирта не устарели, и алгоритм Евклида и решето Эратосфена, хотя им гораздо больше лет.
Мне все окончательно стало понятно. Вы не отвечаете прямо на поставленные вопросы, а приводите какие-то фрагменты коды, якобы имеющие некое отношение к общей теме. Так обычно взрослые люди не поступают: это еще простительно для подростков. А во взрослом мире подобные попытки уйти в сторону свидетельствует о том, что человек, скажем так, не совсем в теме. Печально, что Вы считаете, будто «Другие обходы возможны, но пользы от них нет». Например, прямой обход дерева используется при сортировках, обратный — при динамическом программировании. Пользы от Вашего варианта построения дерева я не увидел. В нем и элементы сложно размещать для поиска (к примеру), и сам поиск производить. У Вас абстрактное дерево ради самого дерева, но не более того. И еще раз, указатели — это прошлый век. Современные языки программирования используют ссылочную модель данных.
К Вашему сведению я работаю с разными графами, а не только с деревьями: пример 1 и 2.
И еще раз, указатели — это прошлый век. Современные языки программирования используют ссылочную модель данных.
Это как? По матрице смежности, что ли?;)
Так обычно взрослые люди не поступают: это еще простительно для подростков.
И сколько Вам лет? Так обычно говорят вчерашние подростки ;) Публикаций у Вас ровно 0. Комментов целых 18. Я балдею.
Рад, что у Вас от меня «балдеж». Я не знаю, как с Вами разговаривать, если Вы считаете, что ссылочная модель данных в языке программирования определяется некоей матрицей смежности. Почитайте в Интернет, что такое ссылочная модель данных, что ли…
Лет мне 69 без двух недель и 51 год из них я отдал вычислительной технике. Из нуля публикаций на Хабре следует лишь то, что я не вижу смысла тут что-то публиковать. Вот у Вас аж целых 19 публикаций — и что? «Программист», не понимающий что такое модель данных в ЯП. У меня только за последние два с половиной года опубликованы 4 интернет-книги по программированию с общим объемом более 1000 страниц и пятая на выходе, функционирует интерактивный обучающий курс весьма большого объема, видео и презентации с выступлений на коференциях и т.д. Так что продолжайте балдеть по поводу моих 0 публикаций на Хабре.
Что за книги пишите, можно полюбопытствовать? И что за курс?
Можете, конечно. Последнее время занялся вопросами школьного образования в части информатики. Все по PascalABC.NET. Если нужны подробности, ссылки — это только в личку, не хочу чтобы тут кто-то счел за рекламу.
Давайте в личку. Последнее время тоже начинаю интересоваться вопросами образования, хотя и не школьного, а для взрослых.
Я на 6 лет Вас моложе и рад, что в Вашем возрасте сохраняется юношеский задор. У меня кроме Хабра более 100 публикаций в рецензируемых н-т журналах. Таких, как ДАН, Byte (en), First Class (OMG), J of Mat Chem… Имею проф. сертификат ACM и свидетельство на изобретение СССР. Касательно книг — не хочу сказать ничего плохого про Ваши книги, которых не читал, но сейчас издать книгу просто — были бы деньги. Реценезия не требуется.

С таким количеством книг Вам будет не трудно сделать на Хабре их обзор (продажи повысите). Заодно объясните, как сегодня следует определять структуры графов и, в частности, деревьев. Пожалуйста, снизойдите до сообщества Хабра — вдруг им это будет полезно ;) Спорьте не со мной, но с Виртом 1980х (я его придерживаюсь).
Спасибо за советы, но книги я выкладываю в открытый доступ, так что вопрос их продажи не стоит, а счетчик их скачиваний (разумеется, также свободных) может удовлетворить любое ЧСВ. ))
Как определять информационные структуры типа тех же деревьев — про это уже столько всего везде написано, что там и влезть некуда. По поводу «снисходить» — я вовсе не воспринимаю Хабр, как какое-то «дно», дело в ином: моя тематика — это обучение программированию в школе, а Хабр в части программирования больше ориентирован на уже состоявшихся программистов (а также тех, кто считает, что уже состоялся) и все сведется к религиозным войнам.
Как определять информационные структуры типа тех же деревьев — про это уже столько всего везде написано, что там и влезть некуда.
Ну так процитируйте, чтобы показать, где я (или Вирт) не прав;)
Вопрос так не ставился: прав Н.Вирт или нет. Н.Вирт в своей книге «Algorithms + Data Structures = Programs», вышедшей в 1976 году, говорил о реализации динамических структур данных при помощи как ссылок, так и указателей. Ныне указатели остались в языке C, как воспоминание об операционных системах с «ручным» управлением оперативной памятью. В современных системах, где царствуют сборщики мусора, указатель очень быстро может начать указывать совсем не туда, куда хотел указать программист. Именно поэтому в ООП-языках только ссылки, которые упрощенно можно считать просто дополнительными именами. В С# оставлена возможность использовать указатели, но она недаром именуется «небезопасный код».
Но вернемся к бинарным деревьям. Удобно создавать такое дерево, чтобы из текущего узла можно было двигаться вверх, влево или вправо. Следовательно, нам понадобится структура, которая будет хранить некоторое значение, связь с предыдущим уровнем, а также связи с левым и правым поддеревом более низких уровней. Итого — три связи. Н.Вирт решает вопрос несколько иначе: он хранит в некоей глобальной переменной указатель на корень дерева с тем, чтобы начать его обход с корня. И два указателя на левое и правое поддеревья. Собственно, вот и вся разница в организации структуры.
Далее, ООП-языки хранят узел дерева (node) в виде объекта. Когда требуется новый объект, он создается конструктором. У Н.Вирта в реализации на Паскале объектов нет, естественно. Поэтому он реализует рекурсивную динамическую структуру.
Никаких серьезных противоречий нет. Есть речь о том, что так, как описывал Н.Вирт, в современном программировании деревья уже не создаются. Но этот вовсе не означает, что он (или мы теперь) описывал деревья неправильно. Вопрос не о принципах, вопрос о реализации современными средствами.
Без кода не понятно. Общие слова про «современные средства» и вопрос про корректность сборщиков мусора.
Мне тут задали вопрос, почему я не публикую материалы на Хабре. Вот в частности потому, что в ответ не на материал, всего лишь на реплики, народ (видимо, поболтать охота) уже несколько дней засыпает меня тривиальными вопросами, за которые студентов уже давно бы отправили «учить матчасть». Представляю, какой бы поток комментариев вызвала статья сколь-нибудь существенного объема!
Я не стану (это просто глупо) приводить тут кодов, обеспечивающих полноценную работу с деревьями. Приводить же отдельные фрагменты еще глупее: они ничего не продемонстрируют. Все это больше похоже на троллинг, чем на попытку действительно разобраться в каком-то вопросе.

И главное. От обсуждения QBasic мы почему-то пошли обсуждать «старый» и «новый» Паскаль. Как-то это неправильно.
Не хотите разбираться — не разбирайтесь. Опасаетесь публиковать коды? Опасения не порок ;) Но тогда не кричите так громко про «современные средства» и сборку мусора, про которую сами сказали, что «сборщики мусора, указатель очень быстро может начать указывать совсем не туда, куда хотел указать программист.»

Не пойму зачем указывать «связь с предыдущим уровнем», если при обходе сортированного дерева это не нужно? — Избыточная инфа для удовлетворения типового и кривого решения. Я писал в защиту ООП. Но тут вопрос не про него. ИМХО студенты должны мыслить не только в этой парадигме.
Про сборщик мусора я попытался объяснить на примере. Более серьезное объяснение будет целой статьей и такая задача передо мной не стоит.
И, конечно же, у каждого собственное IMHO. Студент студенту рознь. Одно дело студенты-технари, другое — будущие системщики, третье — математики-прикладники… Одним достаточно единственной парадигмы, другие предпочитают смесь многих парадигм, если это позволяет язык.
Хотите про коды — да не вопрос, поставьте задачу и опубликуйте полный код для ее решения, такой чтобы скопировал, запустил — и выполнилось. Тогда и я в ответ код привести могу. А то сейчас получается развод из области (ничего личного, это лишь поговорка!) «Один дурак может задать столько вопросов, что и 99 умных не ответят».
Вы же упомянули книгу Вирта — там полный код сортировки деревом. Спорьте!
О чем спорить-то? Что его код не сможет надежно работать в .NET? Так тут и спора нет, не зря оттуда указатели изгнали.
Про сборщик мусора поясню на примере.
Допустим, вы пришли на рынок купить приличного вяленого рыбца. В свете последних распоряжений наших властей сейчас их как бы запрещено ловить и, тем более, продавать. Поэтому продавец аккуратненько раскладывает несколько рыбин (объекты), вы их рассматриваете и показываете на ту, которую хотите взять (вот он, указатель на объект). К несчастью, продавец замечает некоего типа в форме и мгновенно сметает рыбу под прилавок (сборщик мусора). Но вот опасность миновала, продавец снова достает и раскладывает рыбу. Какова вероятность, что выбранная вами рыба окажется на месте, которое вы указали «до того, как...» да и вообще, что на этом месте хоть какая-нибудь рыба окажется? Вот поэтому в системах с автоматической сборкой мусора указатели использовать крайне опасно.
А ссылка — это как если бы вы на выбранную рыбу прилепили ярлычок. Тогда после повторной выкладки все равно, на каком месте она окажется.
И Вы еще упрекали меня в слишком абстрактном подходе! А сами про рынок и рыбу… ;) Очевидно, что уборщицы нужны. Но если в моем кабинете нужные бумаги со стола уборщица отправит в мусор, то я приму меры.
Вот поэтому в системах с автоматической сборкой мусора указатели использовать крайне опасно.

ИМХО автоматическую сборку мусора использовать крайне опасно;)
Ну что же, зайдите в среду .NET и примите там «меры». Заранее могу сказать, что они кончатся тем, что Вы ее благополучно покинете и будете всем рассказывать, какое это зло. Не проблема. Работайте в Линуксе на FPC и будет Вам счастье.
«Уборщица» в .NET ничего в мусор без Вашей команды не отправит, но она считает себя вправе подвинуть Ваши бумаги, чтобы вытереть пыль и подготовить кабинет к визиту Биг босса. После чего «тут слева вверху была одна бумажка...» станет неактуальным.
Вам он может и не нужен. А многим нужен. Тут каждому свое.
Кому поп, кому попадья, а кому и попова дочка.
Обычно к совету прилагают доводы, но не Вы. Можете ответить на вопрос: Зачем многим нужен .NET?

Затем, что в .NET-среде написано и функционирует множество прикладных программ. Очевидно, далее последует вопрос, какие именно это программы и требование объяснить, кому и зачем они нужны? Да просто удалите на компьютере все библиотеки .NET и посмотрите, сколько программ перестанет работать.
Ну или почитайте что-нибудь популярное, например https://skillbox.ru/media/code/kak_rabotaet_net_i_zachem_on_nuzhen

Спасибо, я знаю, что многим приложениям нужны другие приложения. Нпр., у меня приложения, которым нужна Ява-машина. Но я спрашивал о другом: зачем мне нужен .NET? Т.е. почему я должен менять под него свои опредления деревьев? Вопрос понятен?

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

ничего лучше QBasic в качестве языка для приобщения к программированию не нашлось
У меня сложилось впечатление, что у Вас нашлось PascalABC.NET. Я ошибся?

странно, что впечатление только, я все примеры именно на нем приводил и сравнивал именно его с прочими языками. На мой взгляд для первого языка это идеал. Не случайно именно на нем начинают учить первоклашек в питерском DL Club, уже не первый год поставляющим стране призеров олимпиад. Три года PascalABС.NET — затем дальше идут, на C++. Не случайно официальный сайт этого языка недавно отмечал 6 миллионов скачивания дистрибутива.

Я уже ответил, QBasic устарел. И в Microsoft считают так же.

Давайте сравним решение простейшей задачи на виртовском паскале и PascalABC.NET.


program Sample;

const
  m = 100;

var
  i, n, k, s: integer;
  a: array[1..m] of integer;

begin
  Write('n = ');
  Readln(n);
  Randomize;
  k := 0;
  s := 0;
  for i := 1 to n do
  begin
    a[i] := Random(199) - 100;
    Write(a[i], ' ');
    if (a[i] mod 5 = 0) or (a[i] mod 2 = 0) then
    begin
      s := s + a[i];
      Inc(k)
    end
  end;  
  Writeln;
  Write(s / k)
end.

И вот второй код


##
var n := ReadInteger('n =');
var a := ArrRandom(n, -99, 99);
a.Println.Where(t -> t.DivsAny(5, 2)).Average.Print

Код на QBasic можете сами написать))


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

UFO just landed and posted this here
Я вот «не умею телевизоры», а когда кнопочку на пульте нажимаю он все что просишь как-то показывает. Наверно потому, что внутри у него какое-то волшебство сидит. Вот так же и в Haskell — наверно у него в библиотеках сидит какой-то Чеширский котик и все обеспечивает…
ИМХО ответ не по существу.

По существу — это разбираться, как оно там в Хаскель устроено? Я пока еще в своем уме… несмотря на старания здешней публики.

Прискорбно, что Вы здесь на Хабре недавно, а уже здешней публикой не довольны. А ведь Вас по делу спрашивают, а не о покупке рыбы на рынке ;)

Вы считаете, что я в свои годы не могу отличить "по делу" от прочего. Есть много иных платформ, есть с чем сравнить. Я не собираюсь тут всем вкусам угождать, у меня есть свое мнение, я считаю его обоснованным и пока не увижу серьезных доводов против, останусь при нем. Мне не нравится и даже смешна попытка нынешней публики (ну т.е. когда людей больше, чем один) устроить показательный расстрел вопросами. Пока мне казалось, что имеет место реальное непонимание, я пытался что-то объяснить. Теперь я вижу, что идет просто "навал" вопросов в объеме, который потребует для ответов уйму времени, но при этом лишь породит очередные. Спасибо, но этот номер не пройдет.

Нет никакого навала вопросов! Я почти буквально цитировал коды из Вирта, а Вы заявили, что это устарело. Ну, не мог я не спросить? И Вы говорите, то QBasic, то PascalABC.NET. Как тут не спросить? Просто любопытно.

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


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

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

Можете доказать, что устарели?
Параллельные вычисления — особый случай. Участвовал в международном конкурсе Интела, шел на 5 месте по таким вычислениям. Использовал коды Вирта. (Несколькими годами позже освоил CUDA).
Но и только.
Виртовский паскаль потому и оказался не у дел, что перестал развиваться.
Не перестал. ОО Паскаль.

Ага, Вы еще про Оксиджен не рассказали.
И — я там выше, под Ваш вопрос привел коды на виртовском паскале и PascalABC. Можете написать на ОО Паскаль, сравним ))

Давайте сравним решение простейшей задачи на виртовском паскале и PascalABC.NET.

А какая задача?

Вы не видите по коду? Целочисленный массив из n элементов (n > 10 и вводится с клавиатуры) заполняется случайными целыми числами из интервала [-99;99]. Найти среднее арифметическое элементов массива, делящихся без остатка хотя бы на 5, или на 2.

Вижу, но много работаю с математиками. Они не будут работать без точной формулировки. И меня приучили:)

Вангую: в любом варианте Ваш код будет достаточно длинным. А на PascalABC.NET я могу написать решение еще короче, в одну строку даже, но оно станет куда менее прозрачным. Тут важно знать меру.

Длинный не значит плохой. Школьнику м.б. полезно.

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

Да, зависит, школьник будет рад, если получит 5 за Hello, world! на ассемблере, а дадите ему библиотечную процедуру sort, и что ему пользы от проги в одну строку?
  1. Вы давно, видимо, в школе не были, если рассуждаете про ассемблер.
  2. Sort можно дать вначале, а затем рассказывать, как оно устроено внутри, разбирать и реализовывать алгоритмы сортировки. Можно наоборот — начать с алгоритмов, а потом дальше везде писать Sort, не заставляя детей тратить время на тупое копирование кода каждый раз, когда сортировка понадобится.

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

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

Для Delphi в книгах писали, что загнать 100 чисел в список и вызвать sort — не лучшее решение.

У меня был случай, когда нужно было решать очень много СЛУ для графов, но все размером 8 и все имеют только одно решение. Использовал метод Гаусса. А потом попытался использовать Интеловскую библиотеку. У Интела окзалось медленнее. Написал, перекинули разработчику (он из РФ). Послал ему код. Подтвердил, что их функция для тысяч неизвестных, а моя для 8 может работать быстрее.

Да, я был прав в своем предположении: вопросами изучения информатики в школе Вы не интересовались очень давно. Школа и в лучшие свои годы была ориентирована на середнячков, а сейчас ее ориентир те, кто в советское время еле-еле мог рассчитывать на троечку. Какой там Ассемблер!… это фантастика.
Для Делфи писали… когда это писали, в каком году? В 2010-м, издание 5-е, исправленное и дополненное, где вершиной творения был процессор Pentium 2? Когда 16 Гб оперативной памяти стоили почти как как подержаный автомобиль? Кого сейчас интересует сортировка 100 чисел в списке? Сейчас десять миллионов чисел в списке располагаются в оперативной памяти и сортируются за 0.4 секунды:


##
var L := ArrRandom(10000000, -1000, 1000).ToList;
Milliseconds;
Sort(L);
var t := MillisecondsDelta/1000;
t.Print // 0.388 c

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


СЛАУ решить размером 8? Ну давайте писать свои библиотеки, может выгадаем пару микросекунд на решении… Я не знаю, что там за Интеловская библиотека, в PascalABC.NET есть написанная мной NumLibABC — библиотека численных методов. Там СЛАУ можно решать несколькими методами и большая их часть портирована на Паскаль из научных фортрановских библиотек, имеющих мировое признание. И кому может прийти в голову писать собственное решение? Хотите, можем сравнить, давайте свой код, PascalABC.NET умеет компилировать и коды своих предшественников.

По вопросам информатики в школе и вузе написал 4 статьи: вот, вот, вот и вот. Было много комментов — получились интересные обсуждения.

Ну давайте писать свои библиотеки, может выгадаем пару микросекунд на решении…

Там в 2 раза была разница. А у меня решались 90 лимонов систем, сгенерированных ПК — показал, что мой эвристический алгоритм подходит для СУБД при тестировании молекулярных графов на изоморфизм. И наш метод вычисления электроотрицательностей атомов в молекуле подкрепил. Этод метод и до того показал хорошие результаты для многих физ-хим параметров таких, как геометрия молекул. Сандерсон просчитал почти всю периодическую таблицу для неорганики. Геркулес предложил использовать его метод для простейших орг. соединений. А мы придумали, как считать для любой органики. Всё очень просто: электроотрицательность атома — среднее геометрическое электроотрицательностей остальных атомов. Логарифмируем и получаем СЛАУ размером по числу атомов.
Какой там Ассемблер!… это фантастика.
ИМХО для школы, где не нужна продукция, может подойти. Ассемблер, как и языки высокого уровня, дает понимание сути кодинга. А прога в одну строку sort от этой сути уводит. Тогда соглашусь, что QBasic лучше! Для сути программинга нужно еще алгоритмы понимать, хоть на псевдокоде. Бумажное программирование Ершова сейчас уже не нужно — ПК сегодня в каждом доме, как Уи́льям Ге́нри Гейтс III желал;)

И давно Ассемблер считается хорошим инструментом для понимания алгоритмов? Для понимания основ построения компьютера — да, но тут и С подойдет. Но объяснять алгоритм той же сортировки в ассемблерных кодах в школе — это абсурд. Н.Вирт для того и писал Паскаль, чтобы на нем было удобно алгоритмы описывать, так что пусть QBasic тут в сторонке бамбук покурит.


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


Под конец — цитатка из романа В.Михайлова "Тогда придите и рассудим". Сами преломите ее к использованию Ассемблера в школьной информатике.


  • Благодарю вас, — сказал Первый с тем же неподвижным лицом, когда Форама закончил — закончил как-то неубедительно, не на высокой ноте: почувствовал все холодеющее отношение слушателей к его мыслям и к нему самому. — Благодарю. Разумеется, мы примем во внимание все ваши суждения. Однако мы внимательно слушали вас и полагались на вашу эрудицию, пока речь шла о научных категориях. В области же применения этих категорий к реальной жизни мы привыкли придерживаться наших собственных методов, продиктованных опытом и традициями. Надеюсь, это вас не обидит...

И давно Ассемблер считается хорошим инструментом для понимания алгоритмов?
Я не говорил «алгоритмов», я сказал «суть кодинга». Более того: я сказал:
Для сути программинга нужно еще алгоритмы понимать

Далее:
Для понимания основ построения компьютера — да
С этой частью фразы согласен. Школьнику полезно понять, как работает «Hello, world!», и что за «циферки» компилятор выдает. А потом на Паскаль. Я работал на многих ассемблерах (PDP-11, IBM 360/370, Macintosh, IBM PC). Лет 20 назад увидел, что не могу обогнать компиляторы в оптимизации кода. И книги по старым CPU не помогают. И школьникам не советую оптимизировать, но ИМХО нужно только один раз увидеть.

В упомянутой Вами книге Вирта прекрасная заключительная глава о разработке игрушечного компилятора. В другой книге он привел исх. код Pascal-S. Я «крутил» этот листинг под Dr Pascal. — Очень красивое получилось кино. Потом Вирт написал, как сделал ОС с нуля, но это уже не для школы.

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

Ok.Согласен. Надеюсь на скорое улучшение этой «бизнес-модели». Не унывайте!

Ну как доказать, что устарели...? Я что-то не видел у Вирта в Паскале команд, обеспечивающих параллельное вычисление )))
В том же PascalABC.NET средства для параллельных вычислений имеются и даже идут примеры в поставке.

В Delphi -7 всякие семафоры и т.д. ИМХО для школьников это не самая важная тема.

Да ну, помилуйте, какие семафоры, это же еще у Дейкстры в 60-х годах. В .NET есть готовые библиотеки, а в PascalABC.NET языковые средства для работы с ними.

UFO just landed and posted this here
Не во всех. А Вы не рассматриваете случай обхода дерева не с вершины, например, бинарного дерева поиска с тем, чтобы получить отсортированные значения из узлов? Или дерева, оставшегося после разбора арифметического выражения с тем, чтобы произвести вычисление его значения?
UFO just landed and posted this here
Да почемуу же надо думать, поднимаемся мы выше или нет. Мы просто проходим все листья и не должны думать, на каком они уровне.
В детстве попадался код ханойских башен для Бейсика. Рекурсия там делалась через массивы. Каждый массив хранит значения 1 переменной, а в подпрограмму передается индекс для выбора нужного значения. Можно задать максимальную глубину рекурсии, тогда как в Паскале и Си она ограничена размером стека, для изменения которого нужно разбираться с опциями компилятора.
Возможно это было познавательно — ковыряться в подобном коде, а сейчас на PascalABC.NET это все занимает десяток строк и понимается очень легко.
procedure Ханой(Дисков, Откуда, Куда, Рабочий: integer);
begin
  if Дисков = 0 then
    exit;
  Ханой(Дисков - 1, Откуда, Рабочий, Куда);
  $'Переложить диск с {Откуда} на {Куда}'.Println;
  Ханой(Дисков - 1, Рабочий, Куда, Откуда)
end;

begin
  Ханой(4, 1, 3, 2) // четыре кольца с 1-го стержня на 3-й через 2-й
end.
Извините, не удержался.
DECLARE SUB hanoi (disks AS INTEGER, from AS INTEGER, dest AS INTEGER, work AS INTEGER)
hanoi 4, 1, 3, 2

SUB hanoi (disks AS INTEGER, from AS INTEGER, dest AS INTEGER, work AS INTEGER)
        IF disks = 0 THEN EXIT SUB
        hanoi disks - 1, from, work, dest
        PRINT "move disk from"; from, "to"; dest
        hanoi disks - 1, work, dest, from
END SUB

DECLARE SUB — создал сам QBASIC :)
Ну, нормально. Я же в данном случае не по поводу QBasic (или даже самого QB) писал, а по поводу реализации рекурсии на массивах.

Сам когда-то работал с Basic, а VBA вообще был «наше всё». Но это дело прошлое, а за прошлое цепляться бессмысленно. Раз уж сама Microsoft отказывается от VB.NET (а других поддерживаемых бейсиков у нее и нет) — тут есть о чем задуматься.
Майкрософт уже не тот.
Билл Гейтс отошел от управления, все… профукали Бейсик :) IE похоронили :)
Хотя, что за Майкрософт без Бейсика, корней своих не помнят. Ух )
Нет, я не с претензией. Просто решил показать, что QBasic язык следующего поколения, с внятными процедурами, функциями. О явных недостатках я раньше по обсуждению упоминал.
Пока я сидел на DOS, недолго но очень активно, использовал VBDOS для создания интерфейса и логики работы, а критические функции писал на Си и асме.
А от бейсиков Микрософт зря отказалась, длдя них это практически талисман. И кстати, VB был тем самым ускорителем что создал бум программ для Windows, существенно снизив порог вхождения на рынок программ для Windows. IMHO отсутствие VB (или аналога) для OS/2 послужило существенным фактором, в проигрыше IBM в борьбе с Microsoft.

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

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

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

«Из незнакомых блюд следует есть то, которое тебе понравится» или «В рулетке надо ставить на тот номер который выпадет» :))

Может проблема не в сыне, а в папе, который не знает других языков простых так, чтобы суметь всё наглядно объяснить? Лично у меня не должно быть проблем с примерами на php. С большой долей вероятности, python тоже годится, но я его почти не знаю, так что и использовать для обучения не смогу.

о боже зачем ребенку php показывать еще бы 1С предложили ))

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

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

QBasic для Windows 10 можно установить из Microsoft Store, эмуляторы не нужны.
php хотя бы на современных компьютерах работает без эмуляторов,

Ну если не учитывать, какой зоопарк нужно поставить, чтобы заставить PHP выводить в браузер что-то «без эмулятора»…

В общем, лучше QBasic.

P.S. И да, я пишу на PHP. Но ребёнка учить этому языку я бы не стал. QBasic я помню отвратительно (последний раз имел с ним дело на БК1001), поэтому я взял бы… ага, Паскаль.
P.P.S. Или FORTH (но это для ребёнка постарше, 12+ лет, так скажем)
QBasic я помню отвратительно (последний раз имел с ним дело на БК1001),
Бейсику с БК до QBasic… ну очень далеко, так скажем.
Ну если не учитывать, какой зоопарк нужно поставить, чтобы заставить PHP выводить в браузер что-то «без эмулятора»…

Ну вообще, для работы с PHP вообще необязателен браузер, это не HTML. Код можно просто запускать из консоли вроде «php hello-world.php», и выводить в коде в консоль значения — тоже не проблема ни разу.
Можно. Но смысл? В этом случае PHP лишается всех своих преимуществ (по сравнению с любым другим исполняемым в консоли языком). Даже чтобы вывод раскрасить, нужно применять ESCAPE-последовательности, а не HTML-теги.

Да, можно написать конвертор (я так и сделал), но согласитесь, это уже не уровень Hello, world :)
Да я не спорю) Просто констатировал факт, что браузер вообще необязателен. Особенно, если это не связано с сайтом. Я вот, например, часто парсеры делаю на нём и запускаю из консоли, зачем мне запускать их из браузера?
Ну а если захотите написать, что для этого надо использовать не php, а какой-нибудь пайтон, то не нужно пожалуйста. Мне удобно это делать на php, и я делаю это на php
Я хочу написать, что PHP все таки не язык для обучения. Да, можно. Но есть варианты лучше. Проще, так скажем.

Да делайте свои парсеры на чем хотите. Хоть на PHP, хоть на баше, хоть на Object REXX.
Та я вообще ни слова не сказал, что он хорош для обучения.
UFO just landed and posted this here
Сам php самодостаточен, но для браузера ему нежен вебсервер. Хотя можно найти WAMP сборку и успешно её использовать.
UFO just landed and posted this here
Под виндой тоже? (много лет не пользуюсь PHP под виндой, просто не в курсе)
UFO just landed and posted this here
Я конечно понимаю, что к ПХП много хейта, но если серьёзно, чем он плох для обучения-то? Причём тут браузер только неясно, он безо всякого браузера нормально работает.
Изучил PHP по книжке своим вторым языком после паскаля из школы. Ничего, жить можно.
У ребенка конкретный запрос: «хочу написать игру». Судя по контексту, ему нравятся старые платформеры, это для него как эталон сейчас. Ну и где Марио и где php и python? :) QBasic в данном случае весьма неплохое решение. Там очень просто «завести» графику с довольно стандартным набором команд, там есть спрайты и вообще все, чтобы написать тот же Марио. Следующим шагом можно порекомендовать разве что Pascal. Единственное, наверное, к чему можно придраться — это консольная IDE: все же авто-дополнение и оконный интерфейс с более высоким разрешение не помешали бы (хотя не помню, чтобы меня это раздражало тогда)
Так давно существует отличная обучающая среда pascal ABC. Кажется даже с неким подобием IDE. И оно похоже еще живое: pascalabc.net
Т.е. и на паскале вполне себе удобно можно жить.
Ну а далее все стандартно: C/Cpp, java, и понеслась. Там дальше уже алгоритмы рулят, а не конкретный язык. Конкретный язык каждый уже под себя и свои задачи выбирает.

И ещё хорошо бы параллельно заглянуть в мир ассемблера, почитать «Код — тайный язык информатики» (https://habr.com/ru/post/68365/)
Тогда лучше взять бесплатный Godot и писать скрипты там.И в перспективе полезнее.

Или Game Maker Studio, у него порог входа пониже. GMS 1 бесплатен.

Подсуньте ему игровой движок. Unity, cocos, ue. В крайнем случае посадите на opengl. По крайней мере он сможет быстро найти туториал или ответ на свой вопрос. Писать игры на байсике - сейчас мне кажется это наркомания для опытных, ибо принесет много боли, а профита будет не очень и много.

Подсуньте ему игровой движок. Unity, cocos, ue. В крайнем случае посадите на opengl.

Ага. Долбаните его сразу графом сцены, шейдерами, мешами и матричными преобразованиями, чтобы понял, что не все в жизни так просто. Все-таки, обучение должно идти более-менее плавно, а весь этот продвинутый бойлерплейт может только оттолкнуть начинающего.
Простая 2D игра на Unity делается без всего того, что Вы перечислили.

Game Maker ещё :) для ребёнка - самое то, имхо.

У ребенка конкретный запрос: «хочу написать игру». Судя по контексту, ему нравятся старые платформеры, это для него как эталон сейчас.
Тогда вобще по идее отцу надо было сразу ребенку показывать что-то типа DarkBasic — по сути и полная совместимость с обычными диалектами бейсика и в то же время доп. функционал как раз для создания простых игр.
Не понятно. Наверно в этой ситуации Паскаль подошел бы лучше. У него практически все теже преимущества и нет ряда недостатков бейсика.
А еще лучше Lua — можно было бы делать моды для того же майнкрафта.
И никаких скобочек
нет ряда недостатков бейсика.

каких же?
См. Вики:
Каждая строка начиналась с номера. При вводе в редактор строка оказывалась в исходном тексте программы на позиции, соответствующей её номеру. Для вставки новой строки нужно было дописать строку с номером, находящимся в диапазоне между номерами двух других строк. «Раздвинуть» строки было невозможно, если требовалось вставить новую строку между строками с соседними номерами, приходилось повторно вводить эти строки с другими номерами, чтобы обеспечить разрыв в нумерации (либо применять специальную команду RENUM, которая перенумеровывала все уже введённые строки с постоянным шагом, синхронно изменяя все команды переходов).
Там еще много примеров для ранних версий, теперешний VBA — это другой язык, как и поздние версии фортрана сильно отличны от фортрана-4.
QBasic поддерживал нумерацию строк, но обходился и без нее, а метки можно было ставить не только цифровые, но и строковые.
Про какую версию Вы говорите?
Как про указанный в статье QBasic, так и про QBasic 4.5, посмотрите скрины в статье, там нет нумерации строк.
Каждая строка начиналась с номера. При вводе в редактор строка оказывалась в исходном тексте программы на позиции, соответствующей её номеру.

удивительно что вы goto не вспомнили, версии с нумерацией строк безнадежно устарели уже в конце 80х, когда в бейсике появились полноценные функции и процедуры.
То о чем вы пишете относится к редактору, а не к языку.
Вот у нас сейчас в каждом нормальном редакторе и IDE есть нумерация строк для любых языков :)

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

Моды для майнкрафта пишутся на Java. Да и в принципе написание хоть сколь-нибудь что-то делающего мода — задача достаточно нетривиальная, новичку разобраться в ней будет крайне сложно.

Несмотря на то, что основным языком Minecraft является Java — возможность писать моды на Lua есть. Инструментарий довольно обширный.

Ну и по второму пункту с вами не соглашусь. Моды — это возможность влезть в крутую игру, которая тебе нравится и которая тебе интереса и поправить что-то в ней. Эмоционально это другой уровень. А сложность не больно-то отличается от hello world. Дело в том, что совершенно не обязательно сразу бросаться в написание сложнейших модов. Все начинают с правки простых вещей. Изменить параметр, поменять поведение какого-то предмета и т.п.
Эффект втягивания в процесс гораздо круче. Потому что вот написал Hello, world… И что дальше? Ну еще игру можно написать «угадай число» и всё. Дальше уровень сложности растет значительно. А на выходе всё равно черная консоль.
В модах же много чего можно сделать на начальном уровне. При этом вокруг уже готовый сложный код, который можно анализировать. При этом любая правка она формата: в большой крутой игре работает мой код!
На несколько порядков отличается. Чтобы сделать хоть какой-то мод, нужно уже уметь программировать, знать что такое API, соглашения о вызовах, типы переменных и многое другое. А в случае с Java — еще и знать об ООП.
Чтобы сделать мод достаточно поменять константу(любую). Для этого не нужно ничего из перечисленного вами.
То есть я открываю блокнот, пишу «Константа := Вася» и получаю готовый мод?
Ну и по второму пункту с вами не соглашусь. Моды — это возможность влезть в крутую игру, которая тебе нравится и которая тебе интереса и поправить что-то в ней. Эмоционально это другой уровень.

Это не другой уровень — это следующий уровень.

Прежде чем думать абстракциями и ООП хорошо бы пощупать «кирпичики» компьютера, для чего BASIC очень даже неплох. Так проклинаемый всеми GOTO как раз отражает настоящее поведение процессора, в котором JMP является неотъемлимой частью (на язвительные замечания про ассемблер скажу — всему своё время). А экран DOS максимально приближает к железу, человек начинает понимать, что графика и GUI — это тоже следующий уровень.
Несмотря на то, что основным языком Minecraft является Java — возможность писать моды на Lua есть. Инструментарий довольно обширный.

Основных ModAPI для майнкрафта, по факту, 2 — Forge и, с недавнего времени, Fabric. Оба используют для написания модов Java.
Писать что в майнкрафте на LUA можно только в одном случае — это компьютеры из OpenComputers/ComputerCraft (так-же я нашел некоторые упоминания пары модов, который интерпретировали вводимые в консоль LUA команды, но, судя по всему они все давно заброшены, да и по факту это скрипты, а не моды), но тем не менее на выходе получаешь всю ту-же "черную консоль" (Мы сейчас не будем говорить про MineOS и что-то подобное, ибо начинающий не будет писать свою графическую подсистему, как минимум), но при этом у тебя нет ни нормальной IDE, ни отладчика, да и API у них немного странный.
Поэтому простой ответ на вопрос — можно ли писать моды для майнкрафта на LUA — нет, нельзя.


поменять поведение какого-то предмета

Что поменять поведение уже, скорее всего, понадобится ASM.


В модах же много чего можно сделать на начальном уровне.

Ага, конечно. Для начала нужно вдумчиво покурить мануалы и доки по Forge/Fabric (не надейтесь на хорошую документацию), потом покопаться в API и найти что же нужно изменить для получения желаемого эффекта.
В итоге чаще всего большинство останавливается на каком-нибудь простом добавлении своего блока/предмета, ведь что бы сделать что-то большее зачастую нужны уже глубокие познания в API, ООП и многое другое.

но тем не менее на выходе получаешь всю ту-же «черную консоль»

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

начинающий не будет писать свою графическую подсистему

Ну и не надо. Рисовать можно без проблем.
Кроме шуток, я вот недавно собрался кой-чего процедурно порисовать, и с удивлением обнаружил, что QB — это, наверное самый быстрый способ нарисовать на экране точку или линию, нужно ведь только две строки
SCREEN 12
PSET (320,240), 10

Все эти JS с канвасом, всякие löve2d, SDL и прочее — это, конечно, круто, но, блин, бойлерплейта вокруг будет на порядки больше
Там нужно написать вот эти 4 строки:
program velik;
uses graphabc;
begin
end.


То есть, скрипт должен содержать хотя бы 8 строк рисования для того, чтобы эти служебные строки были несущественны.
У Вас старые сведения. Сейчас в PascalABC.NET нужна только одна строка:
## uses GraphWPF // ну или GraphABC, если нужно старье
В QBasic для черепашьей графики есть оператор DRAW. И еще 1 похожий — PLAY для проигрывания музыки.
В PascalABC.NET есть и Черепашка, и Робот.
Попробуйте BBC-basic. Правда, он платный; есть демо-версия с ограничением по доступной памяти. Нарисовать точку там те же два оператора.

Хаскель с библиотекой Gloss:


import Graphics.Gloss
main = display (InWindow "Nice Window" (200, 200) (10, 10)) white (Circle 80)
Удивительно, что ни кто еще не вспомнил про Processing. Мало того, что он создан именно для таких целей (минимальный boilerplate для рисования), так еще реализацию под Java, Python и JavaScript и даже что-то под Android. Поддерживает ввод, легко реализовать, например, рисование мышью, таймеры и даже вроде 3D.

Примерный вид аналогичного кода на Processing:
void setup() {
  size(640, 360);
  background(102);
}

void draw() {
  point(320, 240);
}
Ну и? Вот PascalANC.NET:
## uses GraphWPF;
DrawCircle(150, 210, 80)

Лучший язык для обучения, по-моему, всё же JavaScript (сам пишу на C#/VBA).


Плюсы:


  • Не надо ничего инсталлировать
  • Есть на всех устройствах, от ПК до китаефона.
  • Может понадобиться в будущем.
  • Мобильность: Однажды решал на нём задачки из „Проекта Эйлер“ едучи в поезде.
  • Нет типизации.

Минусы:


  • Отлаживать тяжело.
  • ООП странное.
  • Нет типизации.
Минусы:
Отлаживать тяжело.

Для самого первого языка программирования — это критичный минус. :(
Никаких нормальных отладчиков для java-script разве нет?
Хм, нажал F12 в Firefox, наблюдаю отладчик для JS. Можно ставить брейкпоинты, смотреть значения переменных, выполнять код пошагам и т.д. Вполне полноценная отладка.
А теперь попробуйте первокласснику объяснить понятие «брейкпоинт».
Я отвечал на пункт про сложность отладки JS.
У первокласника программа будет в разы проще и скорее всего будет отлаживаться вдумчивым чтением или максимум выводом на экран. Из своего школьного опыта даже не припомню отладки программ, всё там работало или исправлялось и работало.
У MS есть (заброшенный) Small Basic. Позволяет работать как с консолью, так и с графикой, имеет черепашку, запускается с удобным редактором со встроенным хелпом и даже умеет запускать написанное через F5.
И половины нет (ну вот сможет QBasic одной командой загрузить файл из сети?). Не говоря уже о том, что QBasic папа подсунул ребёнку по своим ностальгическим соображениям, а для ребёнка лучше было бы всё же начинать сразу делать что-то под современной системой.
И половины нет (ну вот сможет QBasic одной командой загрузить файл из сети?).
А зачем это нужно? Файлы с локального диска он и подгрузит и запишет как в текстовом, так и в бинарном формате (по крайней мере информацию из видеопамяти в файл сбросить можно, что бы потом подгрузить и использовать в качестве спрайта или фона)

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

QBasic многое может, это простой и в то же время гибкий язык, да со своими ограничениями и под DOS, однако его диалекты под Windows имеют больший функционал и там уже можно делать то о чем Вы пишите. А вот нужно ли? Это зависит от задач. Каждый инструмент для своей задачи
Моя подпись в письмах гласит: If you want to get to the top, you have to start at the bottom

Переходил с QBasic на Turbo Pascal, и там дорвался до ассемблерных вставок. Помню, изучал: вот есть mov для чисел, а есть stos и lods, s = «строковые» инструкции. Для чисел и для строк, видимо. Какой же был шок узнать, что процессору как муравью нужно всю строку облазить, чтоб что-то с ней сделать, и эти «строковые» инструкции не для всей строки, а для шажочка по ней.

Вот эти современности рискуют закамуфлировать ещё больше деталей
Ноа? Really? Шутка такая? Что же за переводчик такой, который не знает, что в русском языке это имя звучит как «Ной»?
А имя «Michael» на русском звучит как Михаил?

Оно и как "Михаэль" может не звучить. Например, если это француз("Мишель"), или криво записанный Mikhail(англоязычные регулярно пытаются сказать "Микхаеэль").
Тем не менее, Abraham Linkoln на русском языке… Авраам. Библейские имена они такие, с историей звучания.


Так что да, мальчик из статьи может быть записан и как "Ной".

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

Все бы ничего, но смущает тот факт, что имя библейского Ноя на английском пишется именно как Noah. Не то, чтобы Википедия была каким-то незыблимым авторитетом, но в данном случае, думаю, показательно:
Ноа (ивр. ‏נֹועָה, נֹעָה‏‎) — женское библейское имя. Кроме того, так в русской транскрипции выглядит английский вариант мужского библейского имени Ной (Но́ах, ивр. ‏נֹחַ‏‎, англ. Noah), не имеющего отношения к женскому.

Ну, а чо дальше не зацитировали?))

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

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

UFO just landed and posted this here

Когда я писал на qbasic, нумеровать строки там было не обязательно. Он у меня ещё остался, могу посмотреть версию. И справка там большая, с гиперссылками.

Блокнот я бы не назвал маленьким. Разве что автор пользуется A4-блокнотами.

Посмотрел, IBM DOS QBasic, Версия 1.0 (русифицированная), номера строк не обязательны, справа есть по каждому оператору и фунеции, описываются все параметры функции, даётся пример использования, а внизу — ссылки на похожие функции. Я по ним язык и изучал.
FreeBasic, RapidQ Basic… Microsoft Basic PDS 7.1
QB4.5 не лучший вариант.
Тогда к этому списку надо добавить последний BASIC под DOS от Microsoft, VB for DOS.
RapidQ я бы сейчас вспоминать не стал (разве что пустить слезу в минут молчания; писал на нем несколько лет).

Из живых, самый активный, наверное Xojo (наследник Real Basic). До пандемии по нему даже конференции в штатах и Германии собирались.
:)
Если бы Уильям не продал исходники RapidQ в RealBasic, а довел бы язык до релиза, RapidQ вообще цены бы не было ) Но и в таком виде он пригоден для многих вещей. Требующие быстродействия части можно реализовать в виде dll на FreeBasic. А RealBasic что-то совсем не зашел.
Когда-то пробовал довольно забавные вещи — DarkBasic и BlitzBasic, он же сейчас Blitz 3D. Оба языка интерпретаторы и оба имеют свой 3D движок и операторы управления объектами матрицами и прочим матаном. Но делается это довольно просто.
Вы просто не пробовали SmileBASIC 4 для Нинтендо Switch.

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

www.nintendo.ru/-/-Nintendo-Switch/SmileBASIC-4-1763115.html

www.petc4.smilebasic.com/?lang=en
О, ради такого стоит купить Switch…
Сегодня есть много языков визуального программирования, когда код писать не нужно — просто составляешь логику из кубиков. Для детей самое подходящее.

Автор вот пишет, что посмотрел Scratch — и решил, что Basic лучше.
Я тоже не понимаю, почему — там и набор спрайтов из коробки, и игры кто-то на нём вполне пишет.
Подозреваю, это собственный синдром утёнка у автора, а ребёнка, очевидно, никто не спрашивал.

Главной претензией к QBasic должно быть не yfkbxbt GOTO, а отсутствие в нем Option Explicit, которой реально не хватало при разработку больших программ.
Пример ошибки из-за отсутствия Option Explicit
DEF FN funcCalcValue(i)=(i MOD 2)

VeryImportantVariable=0
AnotherImportantVariable=funcCalcValue(i)
For i=0 to 9
AnotherImportantVariable=funcCalcValue(i)+i
VeryImportantVariable=VeryImportantVariabel+AnotheerImportantVariable
NEXT i

Чему будет равна VeryImportantVariable по окончанию цикла?
Полагаю, ничему хорошему, потому что AnotheerImportantVariable не определена :)
А у числовых переменных на конце не должен знак процента стоять?
А вот и нет ошибки (синтаксической) не будет, встретив неопределенное слово QBasic создаст новую переменную с этим именем (по умолчанию вещественная двойной точности) и проинициализирует её нулём.
А суффиксы %(целое) &(длинное целое) !(вещественная одинарной точности) #(вещественная двойной точности) $(строка) родимое пятно из прошлого, допустимы, но не обязательны. Но в случае объявления переменное через DIM, ЕМНИП суффиксы типа переменной в имени запрещены.
А VeryImportantVariable по окончанию цикла будет равна нулю
Я не писал про ошибку, я писал, что не будет ничего хорошего. Конечно, смотря что считать хорошим, но как минимум тесты не пройдут :)
О том и речь, что отсутствие в QBasic требования предварительной декларации переменных, плюс создание новых переменных по умолчанию, создавало ситуацию при котором логическая ошибка из-за опечатки может очень долго прикидываться веником.
У меня такое и с JS бывает
Ой, да ладно. Многие моего поколения начинали c бейсика ZX-spectrum. Олды вспомнят еще советские разработки «чертежник» и «робот», предназначенные для обучения школьников основам алгоритмизации и использующих собственный бейсико-подобный язык с конструкциями вроде
Если...
То...
Иначе...
Все.

Огромным плюсом бейска является его кристальная простота и схожесть конструкций с английской речью. А если уж ребенка кодинг заинтересует, то рано или поздно он перейдет на другие языки сам, ведь бейсик не сможет обеспечить его возросших потребностей.
Но заставлять 5-ти летнего ребенка разбираться с java/rust/go, когда этот ребенок еще сам не знает, интересно ли ему это в принципе — это самый лучший способ отвратить его от программирования.
Можно просто скачать TIC-80, но придётся учить Lua за 15 минут.
7 лет уже не мало все ж таки. Ну а так паскаль — классика. Но его компилить надо. Интерпретируемый из старого perl — хоть и аццки упоротый язык, но по-простому там тоже можно. Мне кажется, паскаль лучший для изучения. Там сложность главная в том, что не поддерживаются переменные не в блоке declare. Но это же именно для обучения и сделано, чтобы ошибок меньше плодить.
В Delphi 10.3 уже добавили, правда, ключевое слово почему-то взяли не declare
Лично я несколько раз пытался научить своих детей программированию, но спотыкался на самых первых этапах, когда пытался объяснить зачем ему это всё нужно. Написать более-менее играбельную 3D игру мы все равно не сможем, а другие игры его не впечатлят заинтересуют.
Деньги тоже слабый аргумент в этом возрасте, да и не факт что он сможет зарабатывать программированием.
В наше время сам компьютер вызывал столько интереса что не важно что на нем делать, было все равно интересно.
В школе графики функций рисовать было удобно (особенно на том же бейсике), что облегчало изучение метаматики. Но щас-то есть готовые инструменты для этого. Мне кажется, и правда, незачем. Толчком к программированию было сделать что-то такое нужное. Сейчас все что нужно в основном уже переделано по 10 раз.
UFO just landed and posted this here
Мы изучили ещё пару команд: CLS, COLOR, PLAY, INPUT и IF. Ничего не нужно было объяснять: никакой сложности, никаких неуклюжих операторов, никаких абстрактных концепций, никакой документации, которую необходимо изучать, никаких концепций объектов/классов/методов, не требовалась установка никаких фреймворков, нет кучи меню и кнопок в IDE, никаких специальных ключевых слов или скобок. Это был код во всей его чистейшей простоте и форме.

Ага, ага, сложности (точнее не просто сложности, а практически непробиваемая стена) возникнет тогда, когда захочется сделать что-то серьезнее, чем «Hell World» или калькулятор.

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

В итоге провозившись какое-то время, плюнул на это «программирование», как на какую-то неведомую сложную хрень, и вернулся к программированию только в 30 лет, потеряв, по сути, 10+ лет на другие работы/специальности.

Конечно, когда есть папа-программист, он сможет ответить ребенку на вопрос «пап, а как на этом QBasic сделать свою MMORPG?» предложив взять язык попроще (да, именно попроще), с уже готовыми библиотеками под это дело. Но когда человек изучает программирование в одиночку, говорить что QBasic хороший язык программирования для начала — киньте в него что-нибудь тяжелое, за меня.
Нам в техникуме давали изучать QBasic, ассемблер и паскаль, и меня действительно тянуло на программирование, и я действительно пытался написать свою игру на QBasic. Но… это невозможно.

Почему невозможно? Аркаду там, клон Сокобана или Batty без проблем, я уже молчу про графический редактор или редактор спрайтов… А если учесть что на диалекте Sincair Basic для ZX Spectrum столько игр написано…

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

Я говорю про практичность. При желании, конечно можно. Конце концов, ничто не мешает изобрести свой C, потом C+, потом C#, а потом уже на нем сделать свою игру.

Другой вопрос — на сколько это будет увлекательно, и сколько времени в итоге займет, чтобы создать свою игру (и опять же, не примитив, а что-то более навороченное, с мультиплеером).

В свободное от работы время пилю свою MMORPG — то, что за 5 лет сделано на php, на QBasic ушло бы 5 жизней.
Я говорю про практичность. При желании, конечно можно. Конце концов, ничто не мешает изобрести свой C, потом C+, потом C#, а потом уже на нем сделать свою игру.
С, С++, С# были в 90-е, но речь не о них, а о том, что определенный класс задач можно и проще всего решать на QBasic'е, иногда мы пилили себе инструменты сами себе, например редактор спрайтов на Бэйсике… Писали программы для расчета линейных систем уравнений или построения эпюр.

Другой вопрос — на сколько это будет увлекательно, и сколько времени в итоге займет, чтобы создать свою игру (и опять же, не примитив, а что-то более навороченное, с мультиплеером).
Бэйсик это не про сеть, хотя можно заморочиться, локальные игры, в принципе, сделать можно. На сколько помню Caesar III был написан на С…

В свободное от работы время пилю свою MMORPG — то, что за 5 лет сделано на php, на QBasic ушло бы 5 жизней.
MMO пишется на других языках, в то время когда создавался и использовался QBasic популярны были другие игры и в других жанрах и почти без сети (в те времена под сетью подразумевалась локальная сеть или подключение через dial-up модем)
А в Unity, кстати, VB.NET поддерживается? Можно тогда и клиента для MMORPG попробовать.
не готов сказать, я завязал с программированием игр со времен MS DOS 6.22, т.е. примерно в 1999м… когда еще учился в школе. Unity поддерживает Visual Studio, т.е. надо пробовать. В то же время я знаю, что VB позволяет обращаться к DirectX 3D, т.е. формально на нем можно будет наваять 3D картинку или даже игрушку, другой вопрос на сколько это будет легко сделать.
когда захочется сделать что-то серьезнее, чем калькулятор
Если человек смог самостоятельно реализовать калькулятор, это уже состоявшийся программист.
Навскидку вот тут игры на QuickBasic
Или проигрыватель adlib s3m
Как говориться, немного терпения и прямые руки.

Я тоже начинал с QBasic, в 13 лет, в Городском дворец творчества юных.
Тогда моя жизнь и покатилась под откос :)
Он вызывает очень теплые ностальгические воспоминания.


Но я все же считаю что Python или Ruby для обучения детей программированию подойдут лучше.
Вопрос только в среде (IDE / библиотеки).


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

Прикиньте, а я до сих пор пишу на диалектах «Васик»-ов…
Как и всю жизнь с 1992 года, на различных диалектах и от различных разработчиков. И под x86 Win, и для телефонов с JavaME, и WinCE, Mobile, и немного Linux, и Android. Вот только под «яблоко» не пробовал.
И до сих пор нравится, вот такой я динозавр :)

А какой сейчас самый современный и продвинуты диалект Бэйсика под Винду?

А что от него требуется? ;)
Ну, скажем, тот же QBasic позволяет работать с памятью, с графикой, с файловой системой и файлами, есть доступ к консоли… в VB 6.0 я видел как паренек написал аркаду через directX (правда в коде я не копался), на сегодняшний момент я пишу на VBA в Excel'е и что мне точно не хватает, так это вынести весь код в dll, для того что бы с одной стороны защитить некоторые находки от копирования, а с другой стороны хотелось бы как-то подумать и о бэкэнде, часть вещей хотелось бы перенести в БД, сделав MS Excel лишь фронтом, т.к. в этом он очень хорош… Ни одни формы не сравнятся с удобством таблиц по механике копирования/редактирования и навигации. С другой стороны как организовать двунаправленный вводо-вывод через листы MS Excel'я я ХЗ…
А если взглянуть на FreeBasic?
Язык FreeBasic
Несмотря на то, что компилятор имеет совместимость с QuickBASIC, в язык FreeBASIC были добавлено множество расширений и возможностей для соответствия современным требованиям, стандартам и совместимостью с библиотеками и API написанными на C/C++. Начиная с версии 0.17 пользователь может выбрать три режима компиляции (опция -lang): режим совместимости с QuickBASIC (qb), старыми версиями FreeBASIC (deprecated), и стандартный режим, включающий в себя все последние изменения и возможности.

Новые возможности и расширения
  • Поддержка Юникода.
  • Множество встроенных типов переменных (Byte, UByte, Short, UShort, Integer, UInteger, LongInt, ULongInt, Single, Double, Boolean, String, ZString, WString).
  • Типы данных определяемые пользователем (бесконечная вложенность, Union, тип поля (array, function, bit fields)).
  • Пространства имён.
  • Перечисляемый тип (Enum).
  • Новые возможности при работе с массивами (до 2 ГБ размером, Redim Preserve).
  • Указатели (указатели на любые типы данных, неограниченная косвенная адресация).
  • Перегрузка функций и операторов.
  • Необязательные аргументы функций.
  • Встроенный ассемблер (ассемблерные инструкции в исходном коде программы).
  • Препроцессоры.
  • Typedefs.
  • Конструкторы и деструкторы классов.
  • Улучшенная графическая библиотека.

Поддержка библиотек функций прикладного программирования
  • Создание интерфейсов: GTK, FLTK, IUP, WINAPI и др.
  • Регулярные выражения: PCRE
  • Автоматизация IE и Microsoft Office: Disphelper
  • Звук: BASS, fbsound, FMOD и др.
  • Графика: Сairo, FreeType, Allegro, DevIL, FreeImage, DISLIN и др.
  • Создание PDF: CD, LibHaru
  • Базы данных: mysql, sqlite, postgresql
  • Сеть: Curl и др.
  • Архивы: Zlib, libzip и др.

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

а помоему можно сделать dll в vb6 и подцепить в vba, или нет? (уже лет 20 в руки шашку не брал)
В VBA можно создавать ActiveX объекты, работать с COM. Насколько помню, произвольные DLL использовать нельзя.
Скорее всего, Xojo. Но он не столько под винду, сколько кросплатформенный.
Но он коммерческий.
Раньше была. Но я давно не смотрел, похоже сейчас у них какая-то другая схема — написано на сайте, что разработка и тестирование бесплатно. Сдается мне, что эта демоверсия просто не будет собирать исполняемый файл без оплаты.
Если он коммерческий, то чем лучше бесплатного Free Basic? За что нам предлагается платить?
Наверное, за то, что его пока не закапывают (отсылка в вашему другому комменту).
Я Xojo не использую, просто слежу за ним… рассылку они с новостями и обновлениями присылаю, на конференции зовут… на случай, если понадобится написать что-то продвинутое на бейсике подо все платформы :)
Для Винды, разумеется — VB.NET, но сейчас Microsoft его закапывает.

Упомянутый выше Free Basic неплох, кроссплатформенный, работает с библиотеками, может использовать OpenGL.

Это из открытых, всякими же коммерческими проприетарными поделками вроде Pure Basic или Dark Basic нет интересоваться никакого желания, как и поддерживать их авторов (наглых бессовестных быдлокодеров-барыг, наживающихся на нашей ностальгии).
Для Винды, разумеется — VB.NET, но сейчас Microsoft его закапывает.
Я, конечно, понимаю, что диалекты C более продвинуты… но смысл Бэйсика именно в его простате и удобстве, что бы рядовой Пользователь смог для себя что-то сделать сам… Эх…
Ну вы просили самый продвинутый, он и есть. По факту C# с другим синтаксисом… А из простых — Free Basic и QB64.
А почему первый не Logo?

А еще есть BASIC в железе — проект Colour MaxiMite 2.
Дополню ссылкой, вдруг, кто заинтересуется: geoffg.net/maximite.html
По слову «maximite» на Хабре можно несколько статей найти.
Logo слишком примитивен, весь его функционал описывается оператором DRAW в Бейсике. По воспоминаниям тех, у кого он был в школах — никому не нравился. Рисовать фракталы скучно. А вот на Бейсике можно писать и простые игры, и небольшие программы для личных целей. Многих именно Бейсик (будь то синклеровский, MSX или QBasic) привел в мир программирования.

Хотя я когда-то пытался делать расширенную версию Logo, интегрированную с игровым 2D движком. Вместо черепашки там были спрайты. И даже какая-то стрелялка на ней получилась (клон Space Invaders). Но потом понял, что Lua уже написана.
Logo слишком примитивен, весь его функционал описывается оператором DRAW в Бейсике

Смысл ЛОГО в том что он обучает ФП.
По любому, помимо учебных языков с процедурным программированием и ООП, нужен какой-нибудь учебный язык с ФП.
Прекрасный язык для обучения. В детстве, у бабушки в деревне, часто доставал тетрадку и писал программы на бейсике в ней (компьютера в деревне не было).
И в 90х на бейсике сдавал вступительный экзамен по информатике в ВУЗ (тоже на бумажке).
Прекрасный язык для обучения. В детстве, у бабушки в деревне, часто доставал тетрадку и писал программы на бейсике в ней (компьютера в деревне не было).
И в 90х на бейсике сдавал вступительный экзамен по информатике в ВУЗ (тоже на бумажке).

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

Ну вообще-то, Паскаль был бы не сильно сложнее для изучения

Каким образом QBasic лучше, чем Python? Может кто-то назвать хоть одно преимущество?
Бейсик до сих пор вызывает ностальгические чувства, прямо как ролики Кинамана. В детстве писал и на Sinclair Basic (ZX Spectrum), и на QBasic, и на Visual Basic 6… В начале 90-х это был хороший вариант для обучения программированию. Вопреки известной цитате Дейкстры опыт на Бейсике не помешал впоследствии освоить Паскаль, Си, Ассемблер, Форт и Лисп в том же детстве, до окончания школы. Разве что C++ совершенно не понравился своей искусственно раздутой сложностью, потому был адептом Delphi, а потом ушел на Java и Linux.

Но нужно признать, время Бейсика (как и Паскаля со всеми его клонами вроде Oberon и Lazarus) ушло безвозвратно. Тогда нас радовали домики, нарисованные оператором DRAW, а уж собственноручно набранные «Змейка» или «Арканоид» вообще казались чем-то невероятно крутым. Современного школьника это вряд ли впечатлит. Да и программирование с тех пор далеко ушло вперед, сейчас балом правят ООП и ФП, а не QBasic с процедурами и структурным программированием. На мой взгляд, сейчас самый лучший язык для обучения детей — Go. Не знаю только, есть ли для него более простые и дружелюбные IDE, чем JetBrains GoLand. Все-таки простота и интерактивность QBasic и Sinclair Basic играли свою роль.
Как иронично. В Go есть правящие ООП или ФП?
Сам-то я Go не знаю, иначе бы не спрашивал.
ФП есть, на уровне лямбда-выражений как минимум. ООП нестандартное (как в Обероне, записи с методами), не похожее на C++/Java/C#, но основные концепции объяснить можно.
UFO just landed and posted this here
Те, кто тут ругают BASIC (не важно какой и не важно за что), вы всё не так поняли и вы не правы!

Это говорят вам авторы языка. Точнее говорили аж 1985 году. Тогда вышла книга "Back to BASIC: The History, Corruption, and Future of the Language" (продается на Амазоне) — книга-оправдание от Кемени и Куртца.

Это довольно странно: из-за популярности 8-битных домашних компьютеров появилось много реализаций Бейсика разной степени ущербности и отступления от канона. Через которые критика полилась на Бейсик как таковой.

Причины — в ограниченности железа того времени, доступного энтузиастам.

Оригинальный-то Бейсик работал на мэйнфрейме и обеспечивал, между прочим, возможно, впервые в истории, многопользовательский REPL (если можно так сказать), ну или терминальный доступ
.
Интересующиеся найдут больше, погуглив «системы разделения времени» и Dartmouth Time Sharing System.

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

Каким был бы мир без Бейсика? Полным перфокарт и перфолент… не хочется и думать о таком.

Каким будет мир без Бейсика? Подождем, пока вырастут и заматереют те, чей первый язык Python, Java или JavaScript, и увидим. Осталось недолго. Кажется, западный мир придет к этому раньше и у нас будет пара лет (может меньше), чтобы подготовиться.

Что-то нет у меня никакого хорошего предчувствия.

:-)
UFO just landed and posted this here
Речь, конечно не о вас конкретно :)
А скорее о том, что операционки, весь системный и популярный прикладной софт написан еще теми людьми, которые в массе проходили ± Бейсик -> Паскаль -> Си ->….
Такая же ситуация была с браузером на Windows.
QBasic просто очень плохой вариант и уютненький он только для автора, для меня он был очень большим разочарованием, когда я понял в детстве что не смогу реализовать свою задумку даже при огромном количестве желания, а сейчас так я совсем не понимаю зачем пользоваться этим мамонтом, всему свое время же. Для начала нужно, что-то красивое, что-то с графическими возможностями, и при этом простое. Был же какой-то small basic например, и подсказки там вроде были и примеры, я даже на нем пятнашки помню написал из интереса и арканоид. QBasic это ДОС, это нет нормальной поддержки файловой системы, это проблемы с кодировками, это нет графического интерфейса, это маленькое рабочее поле текстового редактора итд.

А взрослому человеку, который решил стать программистом, я бы посоветовал начать знакомство с программированием с языка Си, всё очень просто, нет сложных структур данных, никаких абстракций и очень близко к компьютеру, и самое главное тебе понятно как примерно работает твоя программа.
Написали с сыном (9 лет) идентичную программу на питоне. Я не программист, но мне кажется PyCharm дает такое же понимание для новичков. QBasic вижу впервые, но без труда узнал код своей простенькой программы. Очень приятно видеть понимание в глазах у ребенка, и шок от охвата потенциальных возможностей. Думаю автор не прав — зачем трогать древние IDE, если современные обеспечивают теми же возможностями, без необходимости, в последствии, привыкать к новой оболочке. Интерес ребенка сложно удержать, когда придет время сказать, что в современном мире программисты используют другие инструменты, на их освоение может не остаться интереса.
Хоть я и не очень понял, чем для такого python плох (особенно вспоминая про pygame), но статья очень милая )))
На самом деле в юном возрасте нужно прежде всего результат от твоих действий, поэтому я начинал не с консоли, это очень быстро утомляло и казалось бесполезным. А с визуальных программ в Delphi, C++Builder, VCStudio. Делал текстовые редакторы, калькуляторы и прочее и друзьям можно показать и самому пользоваться и порог вхождения минимальный.
Чего только люди не напишут… QBasic. Посмотрите лучше, какие вещи творят первоклассники из питерского DL Club на PascalABC.NET. В том числе, с графикой, потому что есть необходимые библиотеки. И все это напрямую под Windows, а не с костылями типа DOSBox.
Я за Паскаль, как более строгий, и за Питон, который заставляет делать отступ в блоках.
Я за Паскаль, как более строгий, и за Питон, который заставляет делать отступ в блоках.

а что в питоне динамическая типизация, вас не пугает?
крайности какието…
За Питон… не хочу писать все, что можно сказать про Питон (который на самом деле Пайтон), а просто приведу отрывок из одной своей книги.

Есть ли в этой программе ошибки? Если есть, то какие и где?
a = int(input())  # Так в Python оформляется ввод данных
c = a/3
if c < 3:
    print(a,3*c,sep=' ')
    b = 12
else:
    print(а,c-1,sep=' ')
    b = 'abcd'
print(b/2)

Запускаем, вводим значение 5:
==== RESTART: C:/Python/Python38-32/tmp.py ===
5
5 5.0
6.0

Уфф… отработала. Значит, ошибок нет? Но не спешите так, это же не какой-нибудь плебейский паскаль, это крутой Python! И ошибки на самом деле есть. Две. Одна в той ветке, которая по else и куда можно попасть, введя значение 9 и больше. Там переменная а набрана кириллицей. Но об этом пользователь программы узнает лишь тогда, когда будет предпринята попытка эту строку выполнить. А пока это просто мина, ждущая своего часа. Вторая ошибка немного похитрее. Переменной b в этой ветке присваивается значение строки, содержащей буквы. Последний оператор программы вычисляет и выводит значение b/2, считая что b должно быть числом. Программа отработала лишь потому, что она пошла по первой ветке, где b получило значение 12 и действительно стало числового типа.

Вот что творит динамическая типизация в кривых ручонках! А у какого новичка в программировании они сразу прямые? Так что на Python пусть пишут любители работать на минном поле. Остальным, считающим что квесты и челленджи не нужно смешивать с уроками информатики, Python выбирать для обучения алгоритмизации не следует. Как второй язык – отличное решение.

Ах да, может вы думаете, что извлечь квадратный корень из числа в Python так же просто, как в каком-нибудь КуМир или Паскаль? Радостно написать одну строчку print(Sqrt(2)), еще раз подумав: «а эти, со своими дурацкими паскалями все еще begin … end пишут», и увидеть результат? Спешу разочаровать: получите сразу две ошибки. Во-первых, Python не знает, что такое Sqrt. Функция извлечения квадратного корня хранится у него в библиотеке Math, имя которой надо указать перед функцией и отделить от нее точкой. Значит, print(Math.Sqrt(2))? Снова не угадали: библиотеку сначала надо подключить оператором import:
import Math
print(Math.Sqrt(2))

Но нет! Нет, пишет такого модуля. И правда, его нет. Потому что Python – язык регистрозависимый и библиотеку зовут на самом деле math.
import math
print(math.Sqrt(2))

Третий акт мерлезонского балета тоже оказывается неуспешным:
print(math.Sqrt(2))
AttributeError: module 'math' has no attribute 'Sqrt'

В переводе на русский язык: модуль math не имеет атрибута Sqrt. Не будем выяснять, что это за атрибут такой и почему его модуль не имеет. На самом деле, в библиотеке math не нашлось Sqrt. Потому что там – sqrt! И что, вы сейчас подумали, если везде писать маленькие буквы, наступит полное счастье? Попытайтесь, конечно, если будете изучать Python.

Итого:


  • кириллическое имя переменной(везде без IDE неразличимо)
  • ошибка в логике программы(знатная доля отладки примерно везде)
  • неподключённая библиотека(такой ошибки не бывает только если в языке нет библиотек)
  • неправильное имя библиотеки(везде, где есть библиотеки)
  • неправильное имя метода(везде)

Как описанное Вами не относится к другим языкам? Только вместо ошибок этапа компиляции — ошибки этапа исполнения. И то не везде, вспомнить хоть тот же JS с его "2"+"2"-"2".
А так хождение по граблям таких ошибок для начинающего везде будет норма.

Проверка на этапе компиляции позволяет найти «сюрпризы», поскольку статическая типизация позволяет проверить операнды на совместимость. Как минимум, это существенно повышает надежность кода и страхует начинающего от грубых ошибок. Здесь же сразу будут выявлены ошибки в написании имен. Почему Вам надо объяснять такие азы?
Подключать библиотеки — это означает, что новичок должен изначально знать и помнить, что где хранится. С каких пор это считается достоинством первого изучаемого языка?
Неправильное имя метода в том же PascalABC.NET написать практически невозможно (по точке сразу же раскрывается контекстно-зависимое меню со списком полей и методов).
В целом Ваше «везде» — либо попытка замылить недостатки Пайтона, либо незнание возможностей того же PascalABC.NET. В последнем случае не нужно делать утверждения про это самое «везде», выглядит несерьезно.

P.S. А JS в качестве первого языка не критиковали только ленивые.
UFO just landed and posted this here
UFO just landed and posted this here
Это да, это какие-то глупые придирки.

Это не глупые придирки, это реальная история новичка, который после школьного КУМир'а попытался освоить Пайтон. Речь-то о том, на чем учиться программированию, а не какой язык учить, чтобы стать профессиональным программистом и писать в production.
На мой взгляд, учебный язык должен быть регистронезависимым. Детям и так непросто, а тут еще регистры запоминать.
UFO just landed and posted this here
Вы действительно не понимаете или делаете вид? Речь о первом/втором языке программирования для новичка, причем о языке для массового обучения, а не будущих победителей международных олимпиад. Речь о том, что понимание алгоритмов закладывается именно на этом этапе и от языка программирования зависит очень многое.
Одного человека, ну там группку небольшую энтузиастов можно с горшка учить писать код на С/С++, но для масс, которые нынче в девятом классе не знают таблицы умножения, вот для таких это не работает.
UFO just landed and posted this here
Отсюда могу только сделать вывод, что либо Вам не доводилось заниматься обучением в массовой аудитории, либо, в противном случае, эта аудитория Вас тихо ненавидела.
UFO just landed and posted this here
Это уже хорошо (что осилили), я недавно читал «крик души» учителя, у которого как раз «ниасилили».
UFO just landed and posted this here
Согласен на все 100%. Но еще есть школьная программа…
В QBasic в имена переменных не чувствительны к регистру букв, но если вы измените в имени переменной регистр буквы, то имя переменной поменяется по всему тексту программы автоматически. Такая вот особенность IDE/среды исполнения.
это реальная история новичка
У вас новичок случайно ввел для одной переменной кириллическое имя?
Позвольте не поверить.

UPD.
но для масс, которые нынче в девятом классе не знают таблицы умножения
Массам, которые в девятом классе не знают таблицу умножения, сначала нужно выучить таблицу умножения, и только потом переходить к пониманию алгоритмов.
Иначе они ни считать не научатся, ни программировать, и будет сначала у вас сплошная имитация обучения, а потом у «учеников» имитация обученности.
Не могу согласиться, у наших студентов это было очень часто, поэтому приходилось специально объяснять правило именования переменной
Можете не верить. НО… бывает и достаточно часто. Когда пишется код, в котором есть ввод/вывод текста с кириллицей. Люди просто забывают сменить регистр. Вот простой пример — смотрите этапы последовательного набора оператора:
Print($'{}, {}, {}');
Print($'Длина{}, ширина{}, периметр{}');
Print($'Длина{а}, ширина{б}, периметр{}');
Print($'Длина{а}, ширина{b}, периметр{2 * (a + b)}');

Введя имя переменной б, увидели ошибку, b поправили, но в спешке к а не вернулись и имя осталось на кириллице.
Отвечу одним комментом вам и axe_chita: спасибо за объяснение и свидетельство. Очевидно, я был неправ.
Я же там вроде по-русски написал, что Питон мне нравится тем, что заставляет делать отступ для выделения блоков, и ни чем другим. В чем минусы Питона по сравнению с другими языками из вашего изложения непонятно — многие языки также имеют библиотеки, поддерживают уникод, чувствительны к регистру, интерпретируемы и слабо типизированы.
А в чем проблема-то? В PascalABС.NET отступы автоматически расставляются. А если что-то не так — есть кнопочка и HotKey для форматирования. про минусы Пайтона я сразу написал, что обосновано изложить их в комментариях не получится, да и не нужно это, потому что изложено не раз и только фанаты этого языка делают вид, что у Пайтона минусов нет.
То, что отступы расставляются автоматически, совсем не учит их ставить, так ведь? А Питона я не фанат, вообще им не пользуюсь, если бы пришлось кого-то учить — не погнушался бы яваскриптом, потому что он в любом браузере, сразу в комплекте есть GUI, графика и даже OpenGL. Даже была бы практическая польза — ведь на JS пишутся скрипты под Windows.
Хм… ну если идеосинкразия к автоматической простановке переносов, это отключаемо настройками IDE.
По поводу JS — специалисты в области начального образования горячо протестуют против использования скриптового языка в качестве первого. Причин много, не вижу смысла перечислять известные вещи. Скрипты на JS пишут в основном люди с административными функциями и это не имеет отношения к, например, школьной информатике.

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

итого: на каком языке в 2021 году начинать обучения подростков 10-12 лет (попробовать привлечь внимание к программированию)?

Чтоб это:

1) было и не как тут ругали QBasic неприменимо в реалиях потом (на ххру Qbasic не находится)

2) чтоб не тратить 2 дня на прикручивание и настройку запчастей (lf,s не ученик не потерял интерес на этапе "ещё не начал")

3) чтоб не только консоль (вряд ли в подростков увлечет консольный вариант решения задачи коммивояжера или уравнения методом Монте-Карло)

пару лет назад в поисках такового нашел https://basic256.org/

Под линукс в репах убунты, оконный интерфейс присутствует, чтение файлов есть, работа с БД есть, работа с сетью есть, отлов ошибок есть, работа с картинками и звуками есть.... http://yargymn.ru/filestore/Informatika/Basic-256.pdf

*ой, не туда попал, это в ветку про basic256
не понимаю, зачем, даже для базовых знаний, учить язык который в настоящее время не используются… нигде.
это прям как в институте и на заводе потом, 'забудьте всё чему вас учили' (с)

на каком языке вы обучаете? какой возраст обучаемых?

аргумент в стиле «чтобы оценить блюдо — надо обязательно быть поваром?» ©

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

мой пост был в стиле "что предлагаете?", а не "что осуждаете?" .....

я бы предложил JS или Python для базовых уровней и C#/Java для более высоких если в сторону серьезного ООП копать

p.s. а вот плюсы и прочее, я бы не стал

я бы предложил JS

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

или Python

про Python для новичков (напоминаю подростков 10-12 лет, а не дядя, который ищет новую работу "вайти") уже выше написали ....

C#/Java для более высоких

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

который «живет» только в веб-браузере ?

который живет в электроне, на базе которого делают десктопные приложения, а еще node.js есть для бэка
напоминаю подростков 10-12 лет,

ну я на VB4/VB5 в этом возрасте писал, и у меня знатно пригорало как БД подключить к нему… все эти безумные connection string, OLE DB и прочая чертовщина… ну и ниче, победил
Несколько дней разбирался как прикрутить JDBC (в конкретной IDE и вообще без IDE как оно прикручивается)… не осилил и потерял к ней интерес…

а причем тут java, если коннекторы к БД во всех языках и ко всем БД, это отдельный вид геморроя, которым кстати зачастую занимаются девопсы и дба? (там в глубь далекооо копать можно… вcе эти connection pool, баунсеры, и прочая чертовщина)
это вы еще не пробовали к __вашемулюбимомуязыку__ поддержку oracle db подключать
который живет в электроне, на базе которого делают десктопные приложения, а еще node.js есть для бэка

полагаете знакомство с миром программирования ребенку надо начинать именно с такого конгломерата абстракций?
«эээ… JavaScript — это язык для анимации html страничек… ну вот потому что html изначально статичен, а пользователи хотят „свистелки-моргалки“… ну этот html для рисования страниц в браузере… там еще все от DOM начинается… а идет все от веб сервера… а потом это засунули в node чтоб еще и вне веб браузера и html страничек использовать тот же синтаксис… но там нет DOM… и рисовать на канвасе нельзя… а чтоб можно… на десктопе… то запихнули все это в electron… а это фреймворк для разработки настольных приложений с использованием HTML, CSS и JavaScript… а фреймворк — это каркас… а в основе Electron лежат проекты Chromium и Node.js… па, ну его нахер твоё „программирование“, я лучше в барыги пойду… там понятнее и бабки сразу на руки....»

ну я на VB4/VB5 в этом возрасте писал, и у меня знатно пригорало как БД подключить к нему… все эти безумные connection string, OLE DB и прочая чертовщина

Я с Delphi начинал по книге Фленова, потом на VBA в RSView32 и в MS Excel делал подключение к БД (MS Express), потом на PHP — проблем не было…

а причем тут java

1) довольно популярный (на ххру) язык с мощной инфраструктурой (комьюнити, how to, фреймворки, IDE, библиотеки, кроссплатформенный и т.д.) — отличный кандидат для изучение
2)
я бы предложил… C#/Java


если коннекторы к БД во всех языках и ко всем БД, это отдельный вид геморроя, которым кстати зачастую занимаются девопсы и дба?

ну что за фантазии Фарятьева… если нет девопса, что ж теперь и программки не писать? вот такую штуку на PHP делал и через ODBC к Postges и без ODBC к SQLite — ничего сложного…
довольно популярный (на ххру) язык с мощной инфраструктурой

я спросил про проблемы с jdbc, это вопрос не к java, а к механизмам подключения к БД
делал и через ODBC к Postges и без ODBC к SQLite — ничего сложного…

ээмм
решил как-то я посмотреть что такое этот Java — хотел сделать маленькую программку, которая читает данные из SQLite и отображает в таблице. Несколько дней разбирался как прикрутить JDBC (в конкретной IDE и вообще без IDE как оно прикручивается)… не осилил и потерял к ней интерес…


так ничего сложного или слишком сложно?
так ничего сложного или слишком сложно?

в одних случаях ничего сложного, в других довольно запутанно… особенно на этапе hello_world (конкретно с Java этот JDBC в Eclipse прикручивается так, в NetBeans по другому, в IntelliJ IDEA наверняка по-своему, думаю а как же без IDE это предусмотрено разработчиками Java прикручиваться, как то же прикручивалось когда IDE для Java еще не было… и совсем закопался...)
в других довольно запутанно… особенно на этапе hello_world

ну собственно если на этапе hello world такие проблемы с мотивацией, то может и программирование не нужно? ;))

вообще если уж на то пошло, я, так получилось, не пользуюсь средствами девелоперской ide чтобы в базу ходить… ни в эклипсе ни в бинсе ни в jetbrains продуктах (кроме разве что специализированного datagrip) потому что они везде крайне обрезанные по функционалу и шаг в сторону — чтото уже не работает… гдето хранимые процедуры не подключаются, гдето sql дампы не выгружаются.

Для этих целей есть свои инструменты, вроде всяких pgadmin-ов и прочих workbench-ей
ну собственно если на этапе hello world такие проблемы с мотивацией, то может и программирование не нужно?

отчего уж прям вот так вот?
выше же показано, что в других случаях нет подобных «проблем»… ниже можно показать (возможно) отсутствие подобных проблем в других случаях (тот же JS или питон)

я, так получилось, не пользуюсь средствами девелоперской ide чтобы в базу ходить… Для этих целей есть свои инструменты, вроде всяких pgadmin-ов

и как же PgAdmin помогает вам в Java/C++/Python/C#/VB/JS «в базу ходить»?
а для MySQL phpMyAdmin помогает «в базу ходить»? ))
и как же PgAdmin помогает вам в Java/C++/Python/C#/VB/JS «в базу ходить»?
а для MySQL phpMyAdmin помогает «в базу ходить»? ))

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

начинает работать код
Connection connection = DriverManager.getConnection(DB_URL);//соединениесБД
System.out.println("Соединение с СУБД выполнено.");
connection.close();       // отключение от БД
String query = "select id, name, author from books";

rs = stmt.executeQuery(query);

while (rs.next()) {
   int id = rs.getInt(1);
   String name = rs.getString(2);
   String author = rs.getString(3);
   System.out.printf("id: %d, name: %s, author: %s %n", id, name, author);
 }



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

совершенно верно поняли — но рассматривать язык без IDE в 2021 году не комильфо…
начинает работать код

какое отношение этот код к IDE имеет?
совершенно верно поняли — но рассматривать язык без IDE в 2021 году не комильфо…

некомильфо, даже в 2021 году, НЕразделять IDE и язык программирования
надо всегда понимать что язык вообще от IDE не зависит
некомильфо, даже в 2021 году, НЕразделять IDE и язык программирования

в 2021 году не все могут писать код в блокноте. Вернее писать код в блокноте могут не только лишь все, не каждый может это делать…
Полагаете в другой IDE процесс пойдет быстрее? Попробуем LiteIDE…

надо всегда понимать что язык вообще от IDE не зависит

мы то понимаем, но вспомните, что вся это котовасия с IDE началась в контексте первого впечатления от процесса программирования для юного поколения
в контексте первого впечатления от процесса программирования для юного поколения…

тоесть сначала заманим… а потооом…
Это выглядит как 'сельхозтехникум'… тебя учат работать на комбайне, тракторе, автоматические поливалки… ты весь такой капец современный работник… а приходишь на работу, а там штыковая лопата, лейка и куча навоза… по пятницам у петровича иногда получается завести древний трактор…
UFO just landed and posted this here
популярных языков или какихто специализированных?
а давайте, знания лишними не бывают ;)
так как же PgAdmin помогает вам в Java/C++/Python/C#/VB/JS «в базу ходить»?

чтобы понять как можно быстро убить весь интерес к программированию попробуйте запустить свой "Hello world" на Go в Visual Studio Code ..... ))

свой «Hello world» на Go в Visual Studio Code… ))

а я go и не предлагал, я вообще скептически к этому языку отношусь… где уверенным движением выпилили 'ненужное', а потом героическими усилиями начали костылить это обратно
к самому Golang пока претензий нет… из консоли прекрасно запускает и как build и как run
хотя когда узнаешь сколько вариантов компиляции:
$ gccgo -g hello.go -o hello.gcc
$ go build -o hello.gcs -compiler gc hello.go
$ go build -o hello.gcd -linkshared -compiler gc hello.go

пока что проблема именно в связке Go+VSC… примерно вот такая
это я еще gopls не настроил и Delve для отладки не прикрутил… даже если потом все прикрутится… как говорится осадочек остался…
при том, что ты знаешь варианты язык + IDE = работает «искаропки»
О, тоже с QBasic начинал в детстве. Потом на VisualBasic 5 (а затем и 6) перешел. А на PureBasic оказалось совсем шикарно.