Comments 438
А как быть с отсчётом не с нуля?
прекрасно быть, особенно детям
А как быть с отсчётом не с нуля?Если это юмор, то понимаю. Если это реальная проблема — что-то нужно срочно делать. Это мне живо напомнило старую школьную проблему: ось абсцисс — x, ординат — y. Обозначаешь наоборот. Или вообще русскими буквами. Или греческими. Для многих это реальный шок. Ступор. Потом проходит. Споры о языках проходят на полном серьезе. На мой наивный взгляд, разные языки — это то же самое, что разное обозначение осей. В свое время (лет 25 назад) я на спор на QB написал систему сбора данных полевого эксперимента (это железо и датчики) плюс базу данных и интерактивный графический обработчик. Просто чтобы доказать неверующим, что это совершенно полноценный язык для всяких разных задач. В этом нет ничего странного, имхо, поскольку в любом случае всё транслируется в машинный код. Для себя в то время я использовал Борланд Паскаль 7. Но это чисто субъективное предпочтение.
На мой наивный взгляд, разные языки — это то же самое, что разное обозначение осей.
Вы явно не знакомы с Haskell
R начинает индексы массива с 1. Никаких проблем в голове это не вызывает.
Для начала, это интерпретируемый язык. "Вызывалка для пакетов". На нем можно обрабатывать какие-то данные, но во многих случаях он окажется бесполезен. Так что по одному языку, к тому же пока что мало распространенному, решать, какими должны быть индексы в массивах, по меньшей мере некорректно.
Тут вроде вся тема про интерпретируемый qBasic. Про популярность R : выше Perl и Swift https://www.tiobe.com/tiobe-index/ . Но вообще дело не в этом, а в том, что нет проблемы писать на языках с разными началами массива.
А как учебный язык лучше Паскаль. Его, собственно, Николас Вирт за тем и писал.
Кстати в Бейсике на Агатах были медленные принты и создавать визуальные ASCII игры было невозможно. Рисовать по пикселям было чуть ли не быстрее.
Важной причиной популярности Basic стал его небольшой объем
Был микропроцессор (ins8073) со встроенным интерпретатором бейсика размером 1.25 кБайт — подавай питание, подключай терминал по RS232 и работай! Программы можно было с внешнего ПЗУ выполнять.
А как выглядит и работает такой терминал?
Я недавно подключал RS232, но там через переходник серийный порт. От вида разъема родным повеяло )
Таким образом можно вводить программу в память чипа, запускать на исполнение и получать и передавать программе данные также через 232 интерфейс.
как это не было полноценных процедур и функций? а как же Declare Sub, Declare Function? еще даже была менюшка, позволяющая переходить между ними и отображать только конкретную процедуру или функцию, gosub тоде работала
Стоит просто отметить, что пример LuchS-lynx а — из QBasic'а, а выше речь шла о более ранних, более примитивных диалектах типа GW или БКшного Вильнюса, где этих конструкций и впрямь не было.
VBA отличается от QBasic-а не меньше, чем QBasic от ранних версий Basic-а. В ранних версиях не было IDE, строки нужно было нумеровать руками. Подпрограммы Basic не полноценные процедуры. Вызывались gosub номер строки, параметры передавлись через глобальные переменные. Был оператор let. Важной причиной популярности Basic стал его небольшой объем, который можно было впихнуть в маленькую память. Перед VBA такой задачи не было.
LuchS-lynx на него ответил:
как это не было полноценных процедур и функций? а как же Declare Sub, Declare Function? еще даже была менюшка, позволяющая переходить между ними и отображать только конкретную процедуру или функцию, gosub тоде работала
Я в ответ привел ссылку на эмулятор Вильнюса, как пример отсутствия современных элементов Бейсика. В ответ получил скриншот Кьюбейсика, который не Вильнюс. И теперь я, оказывается, создаю конфликт. В чем он заключается-то?
VBA в части логики не отличается от QBasic ни на грамм, да стало больше фишек и функций, а кое-что убрали, но все эти циклы и принципы работы остались теми же. Добавилось объектное программирование, которое проще и более понятно, чтом в том же Паскале.
Borland только кажется более продвинутым.
Просто потому что на просторах СНГ самую большую известность имели 6 и 7 версии уже из 90-х.
Тогда как сравнивают с наиболее распространённым у нас QuickBasic 4.5, который на 3-5 лет старше. Или его вариантом QBasic без компилятора.
А между тем был вполне себе мощный Microsoft Basic PDS 7.0, который появился раньше 7ки паскаля. Более того у него был встроенный движок БД (чем паскаль похвастаться не мог) на технологии ISAM (той самой которая потом ещё долгие годы будет использоваться в MS Access) на тот момент более продвинутый чем типичные плоские базы данных типа dBase.
Уж по какой причине он не пошёл в массы у нас - не знаю. Возможно пираты не слишком удачно "поработали" .
Простейший набор алгоритмических возможностей почти классического Бэйсика, вполне покрывает их потребности. И таким пользователям, возможность ставить метки или нумерацию и переходить к ним через GoTo вполне себе нормально, ибо им надо решить быстро конкретную и обычно не сложную задачу. Для более продвинутых же задач, приходится очень серьёзно изголяться, это да. Как мне например, в моих макросах под CorelDraw. И в таких случаях, наследие простой алгоритмизации очень мешает, но тем не менее, большинство задач всё же решаются и без ООП. Я бы и перешёл на С#, но он поддерживается только с версии Х7, но мои пользователи работают порой на очень древних версиях Corel. Да и проблема в С#, что поскольку там имортируется интерфейс из самой коревой dll, то от версии к версии получается иногда не совместимость классов, и значит надо плодить зоопарк версий самих плагинов, а в VBA, это всё очень легко обходится путём проверки версий Corel и смены алгоритма или функции, и никаких проблем тогда с использованием одного и того же макроса под разными версиями.
Так что, я думаю Бэйсик ещё и нас переживет! Да и начинать обучение ребёнка программированию с такого простого и очень прощающего ошибки языка, как Бэйсик, вполне себе благодарное дело, если ребёнок хочет программировать, а ты не хочешь ему сразу это желание отбить.
1. Вся логика (циклы, ветвления, организация процедур и функций, условия, математика) один к одному как QBasic/QBasic 4.5
2. Функции ввода-вывода и обращений к памяти отличаются, в VBA присутствует объектное программирование, но при этом в сети столько контента, что если правильно сформулировать вопрос/хотелку обязательно найдется ответ, часто в виде готовых блоков кода. Из-за чего программировать становится пугающе просто.
И как, сильно пригодилось? Я тоже прошёл весь этот путь, но мне и в страшном сне не придёт в голову учить своих… да даже чужих детей 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, никто не мешает в старом бейсике без рекурсии, самому её напрограммить сделав счетчики вызовов подпрограмм.
но это блин не так, он не сильно отличается от других языков
У вас странные критерии сравнения. На мой взгляд он кардинально отличается от других языков. Просто небо и земля. Схожесть только на самом примитивном уровне вроде рудиментарных алгоритмических примитивов. Возьмите любую натуральную задачу. Там где ученики оперирует знакомыми объектами. Пусть даже будет скучный вариант с шахматами. Конструкцию вроде
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 летней давности
ну тоесть вы считаете что работа с объектами — это лучший вариант в программировании?
Нет. Я уже не раз написал, что именно я считаю, но видимо вы не читаете.
А вот в реальной жизни практически никогда не нужно оперировать со 'знакомыми объектами'.
С точностью наоборот. В реальной жизни всегда приходиться оперировать со знакомыми объектами. Стейкхолдеры, как и дети, не будут разговаривать с вами на другом языке. А вот уже от привычных для них объектов можно идти в правильном направлении. Вы же считаете, что от системы типов 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.
После ассемблера просто невозможно программировать на ЯВУ, процесс написания программы превращается в постоянную борьбу с компилятором. Напрмиер Си. Все эти миллионы унаследованных друг от друга типов данных, с невозможностью конвертации «на лету». Пристегивание кучи вроде как и ненужных, но тем не менее необходимых библиотек.
Вот вроде создаю чистое приложение без всяких 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, плохой язык? там можно точно также как на бейсиках писать
Хаскель же (:
Вы так говорите, словно если бы сделали, то побежали бы его осваивать и использовать.
но как общий принцип кто не научился жить без трассирующей сборки мусора, тот идёт нафиг из технологического стека
А какова мотивация у такого принципа?
Не быть распоследним скотом, как те плохие парни, софтом которых мне приходилось пользоваться на первых работах, на отнюдь не топовых компах провинциального провайдера. И как те другие плохие парни, которым я доверился, поставил их софт, написал конвертер под формат вики, привязался, а как счёт количества объектов пошёл на какие-то смешные тысячи, так оно затормозило и пошло жрать электричество в вечном цикле.
Трассирующая сборка — это вечный двигатель наоборот. Ему всегда есть, чем заняться, и он этим занимается. Мне бы, пожалуйста, вечный двигатель нормальный, чтоб вырабатывал, а не потреблял. А если такого нет, то пусть не будет никакого. Настрадался.
Да и foreign export в хаскеле есть и вполне успешно работает.
Когда я думаю про интероп, у меня в голове образы WinRT, COM, OLE Automation, VirtualBox XPCOM, libobjc и отчасти SOM. С уже формально решёнными вопросами владения, освобождения ресурсов, уведомления об ошибках и наследования.
А FFI — это только первая ступень лестницы, по ней ещё шагать и шагать к высокоуровневому взаимодействию. Вот, допустим, на макосе есть Oxygene/Toffee, и взять бы написать на гипотетическом избавленном от трассирующей сборки мусора Хаскелле монаду Дейкстры, заполучить её в Oxygene как значение-последовательность (sequence of), и по этому значению походить средствами LINQ. Или в языке Ада, если генератором привязок спроецировать на тип с аспектом Default_Iterator, тоже comprehension можно устроить.
Касательно кеша (только кеш-памяти)... Вы проходили выбор размера массива, не равный 2 * N (для увеличения производительности)? Встречал postscript-документ Monica Lam (ACM).
Любопытно, а как бы вы оценили английский в сравнении с русским и чем-то восточноазиатским? Там везде тоже противоречащие паттерны, и "говорить по-английски" тоже нужно переучиваться после русского. Тем не менее люди справляются, и не считают какой-либо из них "плохим".
Тем не менее люди справляются, и не считают какой-либо из них «плохим».Вы так говорите, как будто в случае естественных языков у людей так много выбора.
Родился на определенной территории и автоматом получаешь родной язык, даже если он тебе совершенно не нравится. Хочешь общаться со всем миром — учишь международный английский, никого твои сложности не волнуют.
Я бы очень многое отдал, чтобы моим родным был международный язык и мне не приходилось тратить тысячи часов на освоение международного и все равно упираться в то, что на таком же уровне как родной его освоить очень сложно…
В случае же с обучением программированию есть варианты. ИМХО, начинать надо с максимально универсального (позволяет попробовать его в очень разных задачах) и популярного (легко находить информацию, помощь и т.п.) языка, а дальше, поняв принципы, уже можно специализироваться в тех или иных направлениям изучая специфику.
Запускаешь спектрум, и через 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. Зато помогают отделять функции и методы от переменных и полей объектов.
Вот именно поэтому для обучения нужен максимально простой язык — чтобы обучаемый с первого урока уже что-то умел, путь даже это будет несколько далеко от правды. Касается не только программированияя, кстати, а чего угодно.
На этом основывается суть всех учебных заведений.Традиционных учебных заведений. Но сейчас множество курсов, где бывает очень своеобразная «педагогика».
Уважаемый преподаватель, в статье ребенку 7 лет, вы хотя бы сможете ему обьяснить значение этого слова, уж не говоря про лекции.
Зависит от преподавателя. На самом деле рекурсия даже более натуральна. Просто надо ребёнку не на факториале демонстрировать или числах Фибоначчи, а на простой операции подсчёта предметов в мешке.
Программы = алгоритмы + структуры данных (с) Никлаус Вирт. Да и алгоритмы — это тоже структуры данных (привет LISP/Scheme и классический курс SICP). BASIC решает только одну часть и решает почень осредственно. Можно учить ребёнка писать Circle(...) как мартышка. А можно научить его описывать структуру Circle, массив таких структур, выводить разным способом (все, чётные, сдвигать, масштабировать, находить самый маленький, большой и т.п.), добавлять новые виды, объяснить обобщение и так постепенно вывести на правильный трек. Желаю удачи с алгоритмами в BASIC. Обучал, знаю.
Можно учить ребёнка писать Circle(...) как мартышка. А можно научить его описывать структуру Circle, массив таких структур
Это не взаимоисключающие вещи, а скорее взаимодополняющие. Сначала научить простому, а потом переходить к более сложному.
И как этот переход в BASIC будет выглядеть? "Доброе утро, котятушки. Вчера я вам показывал рисование круга на BASIC. Но этот язык настолько убогий, кроме строк и чисел ничего не поддерживает, поэтому сегодня начнём изучать новый".
И почему все считают, что Бейсик тут отстаивается как самодостаточный функциональный современный ЯП? Это вроде никто и не утверждает. Бейсик — это просто трамплин в мир программирования.
Но может быть где-то у второклассников предмет информатики и начинается со слов «Доброе утро, котятушки. Мы не будем тратить время на всякую устаревшую ерунду, а начнем сразу с ООП и многопоточного программирования.» :)
И почему все считают, что Бейсик тут отстаивается как самодостаточный функциональный современный ЯП?
Я сравнивал BASIC с Pascal. Так что вы ошиблись адресатом.
Бейсик поддерживает и массивы — первый шаг к структурам.
Я бы спросил, а куда делать следующий шаг, поскольку речь шла о массиве кругов. Но уже понятно, что с вами шагать очень долго. У детей темп намного выше))
Рекурсия не допускалась.
Бейсик поздних версий (начиная с Turbo Basic и Visual Basic) резко отличается от ранних вариантов. Фактически, это новый язык, который во многом ближе к Фортрану или Паскалю, чем к исходному Бейсику. Основные изменения версий 1990-х годов состоят в следующем: [...] Появилась рекурсия.
И кстати, в начале-середине 80-х уже существовали версии диалектов BASIC с рекурсией, структурами, локальными переменными. ЕМНИП на BBC Micro.
одна интересная особенность языка Алгол 68 — его «многоязычность» — в язык заложена возможность использования различных таблиц трансляции, что позволяет для каждого естественного языка определить свой набор ключевых слов Алгола-68. В результате программисты получают возможность писать программы ключевыми словами родного языка.Вики
Было много попыток перевести какой-то ЯП целиком на русский. И имена и ключевые слова. Аргументировали это тем, что в учебниках и методичках примеры содержат выражения типа «перейти на», «если то», и тупые ученики не понимают, что в проге надо набрать goto.
Такой ЯП будет диалектом? Американец может не понять «перейти на», а ЯП не только для машин, но и для человеков.
Думаю, что QBasic правильнее назвать самостоятельным языком, а не диалектом.
Не существует единого понимания и соответственно единых критериев для разграничения языка и диалекта, поэтому, говоря, что данный идиом является языком или диалектом, необходимо оговаривать, что понимается под тем или иным термином. В случае, когда нужно избежать выбора, лингвисты обычно используют термин идиом, обозначающий любую мало-мальски отличную от других разновидность языка.
Идиом может считаться диалектом, например, если:
он не является стандартизованным литературным языком;
его носители не имеют собственного государства или автономного образования;
он не является престижной формой общения.
Было много попыток перевести какой-то ЯП целиком на русский. И имена и ключевые слова.
А потом кто-то нашел в корзине эти выброшенные попытки… Так и получился язык «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 идеологии: «прощать» максимум ошибок пользователя. «Хорошо» характеризует язык, очень «полезно» для обучения.
Кстати не факт, что она бы не вылезла бы в программе на Си, или на Паскале.
Еще раз повторюсь, я не знаю из-за чего было такое странное поведение. Парсер напакостил, оптимизатор кода, или было переполнение буфера, не знаю. В отличии от большинства компиляторов того времени, он не порождал ассемблерный листинг, только ЕХЕ и чайн-файл, а дисассемблировать их было не охота. Проблему то решили.
QuickBASIC — 1985
MS-DOS 3.3 — 1987
QBasic — 1991
Структуру бинарных деревьев проще понять через рекурсивное определение. И операции с ними, следовательно, рекурсивные. А записать нерекурсивные можно, но для начинающего сложно и не нужно.
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. и еще кстати вопрос, что будет полезнее, решить вашу задачку имеющимися инструментами, или тупо идти по учебнику ООП
link = ^node;
node = record
left, right: link;
// something else
end; // record
(почему-то «исх. код» перестал работать)
А еще, я не понял, где у Вас связь с предшественником? Вы как такое дерево собираетесь обходить, скажем, в ширину?
procedure print (tree: link);
begin
pint(tree^.left);
writeln(tree^.idat);
pint(tree^.right);
end;
Другие обходы возможны, но пользы от них нет. Мусор можно собирать по листику, если дерево больше не нужно.
Книги Вирта не устарели, и алгоритм Евклида и решето Эратосфена, хотя им гораздо больше лет.
И еще раз, указатели — это прошлый век. Современные языки программирования используют ссылочную модель данных.Это как? По матрице смежности, что ли?;)
Так обычно взрослые люди не поступают: это еще простительно для подростков.И сколько Вам лет? Так обычно говорят вчерашние подростки ;) Публикаций у Вас ровно 0. Комментов целых 18. Я балдею.
Лет мне 69 без двух недель и 51 год из них я отдал вычислительной технике. Из нуля публикаций на Хабре следует лишь то, что я не вижу смысла тут что-то публиковать. Вот у Вас аж целых 19 публикаций — и что? «Программист», не понимающий что такое модель данных в ЯП. У меня только за последние два с половиной года опубликованы 4 интернет-книги по программированию с общим объемом более 1000 страниц и пятая на выходе, функционирует интерактивный обучающий курс весьма большого объема, видео и презентации с выступлений на коференциях и т.д. Так что продолжайте балдеть по поводу моих 0 публикаций на Хабре.
С таким количеством книг Вам будет не трудно сделать на Хабре их обзор (продажи повысите). Заодно объясните, как сегодня следует определять структуры графов и, в частности, деревьев. Пожалуйста, снизойдите до сообщества Хабра — вдруг им это будет полезно ;) Спорьте не со мной, но с Виртом 1980х (я его придерживаюсь).
Как определять информационные структуры типа тех же деревьев — про это уже столько всего везде написано, что там и влезть некуда. По поводу «снисходить» — я вовсе не воспринимаю Хабр, как какое-то «дно», дело в ином: моя тематика — это обучение программированию в школе, а Хабр в части программирования больше ориентирован на уже состоявшихся программистов (а также тех, кто считает, что уже состоялся) и все сведется к религиозным войнам.
Как определять информационные структуры типа тех же деревьев — про это уже столько всего везде написано, что там и влезть некуда.Ну так процитируйте, чтобы показать, где я (или Вирт) не прав;)
Но вернемся к бинарным деревьям. Удобно создавать такое дерево, чтобы из текущего узла можно было двигаться вверх, влево или вправо. Следовательно, нам понадобится структура, которая будет хранить некоторое значение, связь с предыдущим уровнем, а также связи с левым и правым поддеревом более низких уровней. Итого — три связи. Н.Вирт решает вопрос несколько иначе: он хранит в некоей глобальной переменной указатель на корень дерева с тем, чтобы начать его обход с корня. И два указателя на левое и правое поддеревья. Собственно, вот и вся разница в организации структуры.
Далее, ООП-языки хранят узел дерева (node) в виде объекта. Когда требуется новый объект, он создается конструктором. У Н.Вирта в реализации на Паскале объектов нет, естественно. Поэтому он реализует рекурсивную динамическую структуру.
Никаких серьезных противоречий нет. Есть речь о том, что так, как описывал Н.Вирт, в современном программировании деревья уже не создаются. Но этот вовсе не означает, что он (или мы теперь) описывал деревья неправильно. Вопрос не о принципах, вопрос о реализации современными средствами.
Я не стану (это просто глупо) приводить тут кодов, обеспечивающих полноценную работу с деревьями. Приводить же отдельные фрагменты еще глупее: они ничего не продемонстрируют. Все это больше похоже на троллинг, чем на попытку действительно разобраться в каком-то вопросе.
И главное. От обсуждения QBasic мы почему-то пошли обсуждать «старый» и «новый» Паскаль. Как-то это неправильно.
Не пойму зачем указывать «связь с предыдущим уровнем», если при обходе сортированного дерева это не нужно? — Избыточная инфа для удовлетворения типового и кривого решения. Я писал в защиту ООП. Но тут вопрос не про него. ИМХО студенты должны мыслить не только в этой парадигме.
И, конечно же, у каждого собственное IMHO. Студент студенту рознь. Одно дело студенты-технари, другое — будущие системщики, третье — математики-прикладники… Одним достаточно единственной парадигмы, другие предпочитают смесь многих парадигм, если это позволяет язык.
Хотите про коды — да не вопрос, поставьте задачу и опубликуйте полный код для ее решения, такой чтобы скопировал, запустил — и выполнилось. Тогда и я в ответ код привести могу. А то сейчас получается развод из области (ничего личного, это лишь поговорка!) «Один дурак может задать столько вопросов, что и 99 умных не ответят».
Допустим, вы пришли на рынок купить приличного вяленого рыбца. В свете последних распоряжений наших властей сейчас их как бы запрещено ловить и, тем более, продавать. Поэтому продавец аккуратненько раскладывает несколько рыбин (объекты), вы их рассматриваете и показываете на ту, которую хотите взять (вот он, указатель на объект). К несчастью, продавец замечает некоего типа в форме и мгновенно сметает рыбу под прилавок (сборщик мусора). Но вот опасность миновала, продавец снова достает и раскладывает рыбу. Какова вероятность, что выбранная вами рыба окажется на месте, которое вы указали «до того, как...» да и вообще, что на этом месте хоть какая-нибудь рыба окажется? Вот поэтому в системах с автоматической сборкой мусора указатели использовать крайне опасно.
А ссылка — это как если бы вы на выбранную рыбу прилепили ярлычок. Тогда после повторной выкладки все равно, на каком месте она окажется.
Вот поэтому в системах с автоматической сборкой мусора указатели использовать крайне опасно.
ИМХО автоматическую сборку мусора использовать крайне опасно;)
«Уборщица» в .NET ничего в мусор без Вашей команды не отправит, но она считает себя вправе подвинуть Ваши бумаги, чтобы вытереть пыль и подготовить кабинет к визиту Биг босса. После чего «тут слева вверху была одна бумажка...» станет неактуальным.
Кому поп, кому попадья, а кому и попова дочка.
Затем, что в .NET-среде написано и функционирует множество прикладных программ. Очевидно, далее последует вопрос, какие именно это программы и требование объяснить, кому и зачем они нужны? Да просто удалите на компьютере все библиотеки .NET и посмотрите, сколько программ перестанет работать.
Ну или почитайте что-нибудь популярное, например https://skillbox.ru/media/code/kak_rabotaet_net_i_zachem_on_nuzhen
Вполне понятен. Не нужен — не пользуйтесь и не меняйте. Вообще-то я все время имел в виду школьную информатику и первый язык программирования для нее, о чем уже не в одном комментарии писал. И возникли эти комментарии как реплика на заявление, что за 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 можете сами написать))
Обучать начинающих можно либо сразу второму коду, либо первому коду и умению привести его ко второму. Тут смотря какая цель аудитории.
По существу — это разбираться, как оно там в Хаскель устроено? Я пока еще в своем уме… несмотря на старания здешней публики.
Вы считаете, что я в свои годы не могу отличить "по делу" от прочего. Есть много иных платформ, есть с чем сравнить. Я не собираюсь тут всем вкусам угождать, у меня есть свое мнение, я считаю его обоснованным и пока не увижу серьезных доводов против, останусь при нем. Мне не нравится и даже смешна попытка нынешней публики (ну т.е. когда людей больше, чем один) устроить показательный расстрел вопросами. Пока мне казалось, что имеет место реальное непонимание, я пытался что-то объяснить. Теперь я вижу, что идет просто "навал" вопросов в объеме, который потребует для ответов уйму времени, но при этом лишь породит очередные. Спасибо, но этот номер не пройдет.
QBasic — я лишь отметил, что он был хорош для своего времени и я тоже когда-то на нем писал. Но и только.
Коды из Вирта устарели, да, это так. Они несовременны, плохо оптимизируются и непригодны для параллельных вычислений. Но именно сами коды, а не алгоритмы, приведенные Н.Виртом! Поэтому их приходится немного перерабатывать с тем, чтобы использовать в современных парадигмах. Но и только.
Виртовский паскаль потому и оказался не у дел, что перестал развиваться.
Коды из Вирта устарели, да, это так. Они несовременны, плохо оптимизируются и непригодны для параллельных вычислений.
Можете доказать, что устарели?
Параллельные вычисления — особый случай. Участвовал в международном конкурсе Интела, шел на 5 месте по таким вычислениям. Использовал коды Вирта. (Несколькими годами позже освоил CUDA).
Но и только.Не перестал. ОО Паскаль.
Виртовский паскаль потому и оказался не у дел, что перестал развиваться.
Ага, Вы еще про Оксиджен не рассказали.
И — я там выше, под Ваш вопрос привел коды на виртовском паскале и PascalABC. Можете написать на ОО Паскаль, сравним ))
Давайте сравним решение простейшей задачи на виртовском паскале и PascalABC.NET.
А какая задача?
Вы не видите по коду? Целочисленный массив из n элементов (n > 10 и вводится с клавиатуры) заполняется случайными целыми числами из интервала [-99;99]. Найти среднее арифметическое элементов массива, делящихся без остатка хотя бы на 5, или на 2.
Вангую: в любом варианте Ваш код будет достаточно длинным. А на PascalABC.NET я могу написать решение еще короче, в одну строку даже, но оно станет куда менее прозрачным. Тут важно знать меру.
Я и написал, что в зависимости от цели, можено сразу писать или короткий или сначала длинный и учить на нем писать короткий.
- Вы давно, видимо, в школе не были, если рассуждаете про ассемблер.
- 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 умеет компилировать и коды своих предшественников.
Ну давайте писать свои библиотеки, может выгадаем пару микросекунд на решении…
Там в 2 раза была разница. А у меня решались 90 лимонов систем, сгенерированных ПК — показал, что мой эвристический алгоритм подходит для СУБД при тестировании молекулярных графов на изоморфизм. И наш метод вычисления электроотрицательностей атомов в молекуле подкрепил. Этод метод и до того показал хорошие результаты для многих физ-хим параметров таких, как геометрия молекул. Сандерсон просчитал почти всю периодическую таблицу для неорганики. Геркулес предложил использовать его метод для простейших орг. соединений. А мы придумали, как считать для любой органики. Всё очень просто: электроотрицательность атома — среднее геометрическое электроотрицательностей остальных атомов. Логарифмируем и получаем СЛАУ размером по числу атомов.
Какой там Ассемблер!… это фантастика.ИМХО для школы, где не нужна продукция, может подойти. Ассемблер, как и языки высокого уровня, дает понимание сути кодинга. А прога в одну строку sort от этой сути уводит. Тогда соглашусь, что QBasic лучше! Для сути программинга нужно еще алгоритмы понимать, хоть на псевдокоде. Бумажное программирование Ершова сейчас уже не нужно — ПК сегодня в каждом доме, как Уи́льям Ге́нри Гейтс III желал;)
И давно Ассемблер считается хорошим инструментом для понимания алгоритмов? Для понимания основ построения компьютера — да, но тут и С подойдет. Но объяснять алгоритм той же сортировки в ассемблерных кодах в школе — это абсурд. Н.Вирт для того и писал Паскаль, чтобы на нем было удобно алгоритмы описывать, так что пусть QBasic тут в сторонке бамбук покурит.
Что до Ваших методов решения какого-то класса задач — вполне вероятно, что они работают лучше общих методов, но так всегда было, что частное решение эффективнее общего для частного же случая.
Под конец — цитатка из романа В.Михайлова "Тогда придите и рассудим". Сами преломите ее к использованию Ассемблера в школьной информатике.
- Благодарю вас, — сказал Первый с тем же неподвижным лицом, когда Форама закончил — закончил как-то неубедительно, не на высокой ноте: почувствовал все холодеющее отношение слушателей к его мыслям и к нему самому. — Благодарю. Разумеется, мы примем во внимание все ваши суждения. Однако мы внимательно слушали вас и полагались на вашу эрудицию, пока речь шла о научных категориях. В области же применения этих категорий к реальной жизни мы привыкли придерживаться наших собственных методов, продиктованных опытом и традициями. Надеюсь, это вас не обидит...
И давно Ассемблер считается хорошим инструментом для понимания алгоритмов?Я не говорил «алгоритмов», я сказал «суть кодинга». Более того: я сказал:
Для сути программинга нужно еще алгоритмы понимать
Далее:
Для понимания основ построения компьютера — даС этой частью фразы согласен. Школьнику полезно понять, как работает «Hello, world!», и что за «циферки» компилятор выдает. А потом на Паскаль. Я работал на многих ассемблерах (PDP-11, IBM 360/370, Macintosh, IBM PC). Лет 20 назад увидел, что не могу обогнать компиляторы в оптимизации кода. И книги по старым CPU не помогают. И школьникам не советую оптимизировать, но ИМХО нужно только один раз увидеть.
В упомянутой Вами книге Вирта прекрасная заключительная глава о разработке игрушечного компилятора. В другой книге он привел исх. код Pascal-S. Я «крутил» этот листинг под Dr Pascal. — Очень красивое получилось кино. Потом Вирт написал, как сделал ОС с нуля, но это уже не для школы.
Школьнику много что полезно. Но дяди и тети из высоких кабинетов решили, что образованием можно управлять так же, как любым бизнес-процессом. В результате чего последовали реформы образования, его "оптимизиция" и т.д. Так что если в рамках существующей часовой сетки изучать ассемблер и устройство персонального компьютера на уровне, позволяющем ассемблром пользоваться, нужно начинать в восьмом классе и как раз к окончанию школы будет шанс завершить эту тему.
Ну как доказать, что устарели...? Я что-то не видел у Вирта в Паскале команд, обеспечивающих параллельное вычисление )))
В том же 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 :)
Сам когда-то работал с Basic, а VBA вообще был «наше всё». Но это дело прошлое, а за прошлое цепляться бессмысленно. Раз уж сама Microsoft отказывается от VB.NET (а других поддерживаемых бейсиков у нее и нет) — тут есть о чем задуматься.
Билл Гейтс отошел от управления, все… профукали Бейсик :) IE похоронили :)
Хотя, что за Майкрософт без Бейсика, корней своих не помнят. Ух )
Пока я сидел на DOS, недолго но очень активно, использовал VBDOS для создания интерфейса и логики работы, а критические функции писал на Си и асме.
А от бейсиков Микрософт зря отказалась, длдя них это практически талисман. И кстати, VB был тем самым ускорителем что создал бум программ для Windows, существенно снизив порог вхождения на рынок программ для Windows. IMHO отсутствие VB (или аналога) для OS/2 послужило существенным фактором, в проигрыше IBM в борьбе с Microsoft.
Первым надо изучать тот язык который тебе понравится.Уже потом в освоение других языков не возникает особых трудностей.Главное понять основную концепцию...
Вот например я,сначала попробовал джаву,и она мне очень не понравиласб,а вот C++ "зашёл" и показался мне очень логичным языком.
Первым надо изучать тот язык который тебе понравится.
«Из незнакомых блюд следует есть то, которое тебе понравится» или «В рулетке надо ставить на тот номер который выпадет» :))
Может проблема не в сыне, а в папе, который не знает других языков простых так, чтобы суметь всё наглядно объяснить? Лично у меня не должно быть проблем с примерами на php. С большой долей вероятности, python тоже годится, но я его почти не знаю, так что и использовать для обучения не смогу.
о боже зачем ребенку php показывать еще бы 1С предложили ))
Т.е. QBasic лучше по вашему? php хотя бы на современных компьютерах работает без эмуляторов, имеет свободную лицензию и для знакомства вполне хватит, т.к. он многое прощает. К тому же никто не заставляет на нём оставаться.
php хотя бы на современных компьютерах работает без эмуляторов,
Ну если не учитывать, какой зоопарк нужно поставить, чтобы заставить PHP выводить в браузер что-то «без эмулятора»…
В общем, лучше QBasic.
P.S. И да, я пишу на PHP. Но ребёнка учить этому языку я бы не стал. QBasic я помню отвратительно (последний раз имел с ним дело на БК1001), поэтому я взял бы… ага, Паскаль.
P.P.S. Или FORTH (но это для ребёнка постарше, 12+ лет, так скажем)
QBasic я помню отвратительно (последний раз имел с ним дело на БК1001),Бейсику с БК до QBasic… ну очень далеко, так скажем.
Ну если не учитывать, какой зоопарк нужно поставить, чтобы заставить PHP выводить в браузер что-то «без эмулятора»…
Ну вообще, для работы с PHP вообще необязателен браузер, это не HTML. Код можно просто запускать из консоли вроде «php hello-world.php», и выводить в коде в консоль значения — тоже не проблема ни разу.
Да, можно написать конвертор (я так и сделал), но согласитесь, это уже не уровень Hello, world :)
Ну а если захотите написать, что для этого надо использовать не php, а какой-нибудь пайтон, то не нужно пожалуйста. Мне удобно это делать на php, и я делаю это на php
Т.е. и на паскале вполне себе удобно можно жить.
Ну а далее все стандартно: C/Cpp, java, и понеслась. Там дальше уже алгоритмы рулят, а не конкретный язык. Конкретный язык каждый уже под себя и свои задачи выбирает.
И ещё хорошо бы параллельно заглянуть в мир ассемблера, почитать «Код — тайный язык информатики» (https://habr.com/ru/post/68365/)
Подсуньте ему игровой движок. Unity, cocos, ue. В крайнем случае посадите на opengl. По крайней мере он сможет быстро найти туториал или ответ на свой вопрос. Писать игры на байсике - сейчас мне кажется это наркомания для опытных, ибо принесет много боли, а профита будет не очень и много.
Подсуньте ему игровой движок. Unity, cocos, ue. В крайнем случае посадите на opengl.
Ага. Долбаните его сразу графом сцены, шейдерами, мешами и матричными преобразованиями, чтобы понял, что не все в жизни так просто. Все-таки, обучение должно идти более-менее плавно, а весь этот продвинутый бойлерплейт может только оттолкнуть начинающего.
Game Maker ещё :) для ребёнка - самое то, имхо.
У ребенка конкретный запрос: «хочу написать игру». Судя по контексту, ему нравятся старые платформеры, это для него как эталон сейчас.Тогда вобще по идее отцу надо было сразу ребенку показывать что-то типа DarkBasic — по сути и полная совместимость с обычными диалектами бейсика и в то же время доп. функционал как раз для создания простых игр.
А еще лучше Lua — можно было бы делать моды для того же майнкрафта.
И никаких скобочек
нет ряда недостатков бейсика.
каких же?
Каждая строка начиналась с номера. При вводе в редактор строка оказывалась в исходном тексте программы на позиции, соответствующей её номеру. Для вставки новой строки нужно было дописать строку с номером, находящимся в диапазоне между номерами двух других строк. «Раздвинуть» строки было невозможно, если требовалось вставить новую строку между строками с соседними номерами, приходилось повторно вводить эти строки с другими номерами, чтобы обеспечить разрыв в нумерации (либо применять специальную команду RENUM, которая перенумеровывала все уже введённые строки с постоянным шагом, синхронно изменяя все команды переходов).Там еще много примеров для ранних версий, теперешний VBA — это другой язык, как и поздние версии фортрана сильно отличны от фортрана-4.
Каждая строка начиналась с номера. При вводе в редактор строка оказывалась в исходном тексте программы на позиции, соответствующей её номеру.
удивительно что вы goto не вспомнили, версии с нумерацией строк безнадежно устарели уже в конце 80х, когда в бейсике появились полноценные функции и процедуры.
Вот у нас сейчас в каждом нормальном редакторе и IDE есть нумерация строк для любых языков :)
Не слышал, чтобы кто-то про это сказал что-то плохое :)
Он более строг, плюс, насколько помню, нужно иметь понятие о библиотеках и подключать их.
Моды для майнкрафта пишутся на Java. Да и в принципе написание хоть сколь-нибудь что-то делающего мода — задача достаточно нетривиальная, новичку разобраться в ней будет крайне сложно.
Ну и по второму пункту с вами не соглашусь. Моды — это возможность влезть в крутую игру, которая тебе нравится и которая тебе интереса и поправить что-то в ней. Эмоционально это другой уровень. А сложность не больно-то отличается от hello world. Дело в том, что совершенно не обязательно сразу бросаться в написание сложнейших модов. Все начинают с правки простых вещей. Изменить параметр, поменять поведение какого-то предмета и т.п.
Эффект втягивания в процесс гораздо круче. Потому что вот написал Hello, world… И что дальше? Ну еще игру можно написать «угадай число» и всё. Дальше уровень сложности растет значительно. А на выходе всё равно черная консоль.
В модах же много чего можно сделать на начальном уровне. При этом вокруг уже готовый сложный код, который можно анализировать. При этом любая правка она формата: в большой крутой игре работает мой код!
Ну и по второму пункту с вами не соглашусь. Моды — это возможность влезть в крутую игру, которая тебе нравится и которая тебе интереса и поправить что-то в ней. Эмоционально это другой уровень.
Это не другой уровень — это следующий уровень.
Прежде чем думать абстракциями и ООП хорошо бы пощупать «кирпичики» компьютера, для чего 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, ООП и многое другое.
но тем не менее на выходе получаешь всю ту-же «черную консоль»
Там же адаптеры есть, которые позволяют что-то в мире менять или лампочкой мигать.
начинающий не будет писать свою графическую подсистему
Ну и не надо. Рисовать можно без проблем.
Есть кстати QBasic 64 https://www.qb64.org/
SCREEN 12
PSET (320,240), 10
Все эти JS с канвасом, всякие löve2d, SDL и прочее — это, конечно, круто, но, блин, бойлерплейта вокруг будет на порядки больше
program velik;
uses graphabc;
begin
end.
То есть, скрипт должен содержать хотя бы 8 строк рисования для того, чтобы эти служебные строки были несущественны.
Примерный вид аналогичного кода на Processing:
void setup() {
size(640, 360);
background(102);
}
void draw() {
point(320, 240);
}
## uses GraphWPF;
DrawCircle(150, 210, 80)
Лучший язык для обучения, по-моему, всё же JavaScript (сам пишу на C#/VBA).
Плюсы:
- Не надо ничего инсталлировать
- Есть на всех устройствах, от ПК до китаефона.
- Может понадобиться в будущем.
- Мобильность: Однажды решал на нём задачки из „Проекта Эйлер“ едучи в поезде.
- Нет типизации.
Минусы:
- Отлаживать тяжело.
- ООП странное.
- Нет типизации.
И половины нет (ну вот сможет QBasic одной командой загрузить файл из сети?).А зачем это нужно? Файлы с локального диска он и подгрузит и запишет как в текстовом, так и в бинарном формате (по крайней мере информацию из видеопамяти в файл сбросить можно, что бы потом подгрузить и использовать в качестве спрайта или фона)
а для ребёнка лучше было бы всё же начинать сразу делать что-то под современной системой.не согласен, потому что для того что бы объяснить принципы, что бы ребенок понял их чем проще, тем лучше. Когда ребенок поймет логику формирования программ и блок-схемы, циклы, ветвления, математику, т.е. принципы. уже можно будет переходить к чему-то более сложному и продвинутому.
QBasic многое может, это простой и в то же время гибкий язык, да со своими ограничениями и под DOS, однако его диалекты под Windows имеют больший функционал и там уже можно делать то о чем Вы пишите. А вот нужно ли? Это зависит от задач. Каждый инструмент для своей задачи
Переходил с QBasic на Turbo Pascal, и там дорвался до ассемблерных вставок. Помню, изучал: вот есть mov для чисел, а есть stos и lods, s = «строковые» инструкции. Для чисел и для строк, видимо. Какой же был шок узнать, что процессору как муравью нужно всю строку облазить, чтоб что-то с ней сделать, и эти «строковые» инструкции не для всей строки, а для шажочка по ней.
Вот эти современности рискуют закамуфлировать ещё больше деталей
Оно и как "Михаэль" может не звучить. Например, если это француз("Мишель"), или криво записанный Mikhail(англоязычные регулярно пытаются сказать "Микхаеэль").
Тем не менее, Abraham Linkoln на русском языке… Авраам. Библейские имена они такие, с историей звучания.
Так что да, мальчик из статьи может быть записан и как "Ной".
Все бы ничего, но смущает тот факт, что имя библейского Ноя на английском пишется именно как Noah. Не то, чтобы Википедия была каким-то незыблимым авторитетом, но в данном случае, думаю, показательно:
Ноа (ивр. נֹועָה, נֹעָה) — женское библейское имя. Кроме того, так в русской транскрипции выглядит английский вариант мужского библейского имени Ной (Но́ах, ивр. נֹחַ, англ. Noah), не имеющего отношения к женскому.
Странно, что не через Майнкрафт.
В средах программирования для Майнкрафта (например, CodeKingdoms) нереально высокий уровень абстракции. Нужно продраться сквозь очень много всего, чтобы понять, как оно на самом деле работает (а не получить лишь иллюзию понимания).
Когда я писал на qbasic, нумеровать строки там было не обязательно. Он у меня ещё остался, могу посмотреть версию. И справка там большая, с гиперссылками.
Блокнот я бы не назвал маленьким. Разве что автор пользуется A4-блокнотами.
QB4.5 не лучший вариант.
Из живых, самый активный, наверное Xojo (наследник Real Basic). До пандемии по нему даже конференции в штатах и Германии собирались.
:)
Там сохранено всё из прошлого века, о чём вы написали. И бережно, с любовью развито до современных технологий. Ребёнок сможет писать современные игры на своём первом языке программирования.
www.nintendo.ru/-/-Nintendo-Switch/SmileBASIC-4-1763115.html
www.petc4.smilebasic.com/?lang=en
VeryImportantVariable=0
AnotherImportantVariable=funcCalcValue(i)
For i=0 to 9
AnotherImportantVariable=funcCalcValue(i)+i
VeryImportantVariable=VeryImportantVariabel+AnotheerImportantVariable
NEXT i
Чему будет равна VeryImportantVariable по окончанию цикла?
А у числовых переменных на конце не должен знак процента стоять?
А суффиксы %(целое) &(длинное целое) !(вещественная одинарной точности) #(вещественная двойной точности) $(строка) родимое пятно из прошлого, допустимы, но не обязательны. Но в случае объявления переменное через DIM, ЕМНИП суффиксы типа переменной в имени запрещены.
А VeryImportantVariable по окончанию цикла будет равна нулю
Если...
То...
Иначе...
Все.
Огромным плюсом бейска является его кристальная простота и схожесть конструкций с английской речью. А если уж ребенка кодинг заинтересует, то рано или поздно он перейдет на другие языки сам, ведь бейсик не сможет обеспечить его возросших потребностей.
Но заставлять 5-ти летнего ребенка разбираться с java/rust/go, когда этот ребенок еще сам не знает, интересно ли ему это в принципе — это самый лучший способ отвратить его от программирования.
Деньги тоже слабый аргумент в этом возрасте, да и не факт что он сможет зарабатывать программированием.
В наше время сам компьютер вызывал столько интереса что не важно что на нем делать, было все равно интересно.
Мы изучили ещё пару команд: 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 модем)
когда захочется сделать что-то серьезнее, чем калькуляторЕсли человек смог самостоятельно реализовать калькулятор, это уже состоявшийся программист.
Я тоже начинал с QBasic, в 13 лет, в Городском дворец творчества юных.
Тогда моя жизнь и покатилась под откос :)
Он вызывает очень теплые ностальгические воспоминания.
Но я все же считаю что Python или Ruby для обучения детей программированию подойдут лучше.
Вопрос только в среде (IDE / библиотеки).
Например Ruby Warrior моему племяннику очень зашел. Оно не только гораздо интереснее и интерактивнее, но и обучает современным парадигмам программирования.
Как и всю жизнь с 1992 года, на различных диалектах и от различных разработчиков. И под x86 Win, и для телефонов с JavaME, и WinCE, Mobile, и немного Linux, и Android. Вот только под «яблоко» не пробовал.
И до сих пор нравится, вот такой я динозавр :)
А какой сейчас самый современный и продвинуты диалект Бэйсика под Винду?
Новые возможности и расширения
- Поддержка Юникода.
- Множество встроенных типов переменных (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 в руки шашку не брал)
Но он коммерческий.
Упомянутый выше Free Basic неплох, кроссплатформенный, работает с библиотеками, может использовать OpenGL.
Это из открытых, всякими же коммерческими проприетарными поделками вроде Pure Basic или Dark Basic нет интересоваться никакого желания, как и поддерживать их авторов (наглых бессовестных быдлокодеров-барыг, наживающихся на нашей ностальгии).
Для Винды, разумеется — VB.NET, но сейчас Microsoft его закапывает.Я, конечно, понимаю, что диалекты C более продвинуты… но смысл Бэйсика именно в его простате и удобстве, что бы рядовой Пользователь смог для себя что-то сделать сам… Эх…
А еще есть BASIC в железе — проект Colour MaxiMite 2.
По слову «maximite» на Хабре можно несколько статей найти.
Хотя я когда-то пытался делать расширенную версию Logo, интегрированную с игровым 2D движком. Вместо черепашки там были спрайты. И даже какая-то стрелялка на ней получилась (клон Space Invaders). Но потом понял, что Lua уже написана.
И в 90х на бейсике сдавал вступительный экзамен по информатике в ВУЗ (тоже на бумажке).
Прекрасный язык для обучения. В детстве, у бабушки в деревне, часто доставал тетрадку и писал программы на бейсике в ней (компьютера в деревне не было).
И в 90х на бейсике сдавал вступительный экзамен по информатике в ВУЗ (тоже на бумажке).
Из того, что когда-то ездили в карете, запряженной лошадьми, вовсе не следует что и сейчас удобно поступать так же.
Ну вообще-то, Паскаль был бы не сильно сложнее для изучения
Но нужно признать, время Бейсика (как и Паскаля со всеми его клонами вроде Oberon и Lazarus) ушло безвозвратно. Тогда нас радовали домики, нарисованные оператором DRAW, а уж собственноручно набранные «Змейка» или «Арканоид» вообще казались чем-то невероятно крутым. Современного школьника это вряд ли впечатлит. Да и программирование с тех пор далеко ушло вперед, сейчас балом правят ООП и ФП, а не QBasic с процедурами и структурным программированием. На мой взгляд, сейчас самый лучший язык для обучения детей — Go. Не знаю только, есть ли для него более простые и дружелюбные IDE, чем JetBrains GoLand. Все-таки простота и интерактивность QBasic и Sinclair Basic играли свою роль.
Это говорят вам авторы языка. Точнее говорили аж 1985 году. Тогда вышла книга "Back to BASIC: The History, Corruption, and Future of the Language" (продается на Амазоне) — книга-оправдание от Кемени и Куртца.
Это довольно странно: из-за популярности 8-битных домашних компьютеров появилось много реализаций Бейсика разной степени ущербности и отступления от канона. Через которые критика полилась на Бейсик как таковой.
Причины — в ограниченности железа того времени, доступного энтузиастам.
Оригинальный-то Бейсик работал на мэйнфрейме и обеспечивал, между прочим, возможно, впервые в истории, многопользовательский REPL (если можно так сказать), ну или терминальный доступ
.
Интересующиеся найдут больше, погуглив «системы разделения времени» и Dartmouth Time Sharing System.
От себя хочется заметить, что сейчас мы живем в мире, в котором большинство программистов изучали Бейсик. Нравился он или или нет. Понятно, что все пошли дальше и пишут на других языках. Кто-то вспоминает о своем опыте с теплотой, кто-то вообще не способен осознавать свой опыт. Так или иначе, на ИТ мир не так уж и плох :)
И Бейсик где-то вначале причинно-следственной цепи.
Каким был бы мир без Бейсика? Полным перфокарт и перфолент… не хочется и думать о таком.
Каким будет мир без Бейсика? Подождем, пока вырастут и заматереют те, чей первый язык Python, Java или JavaScript, и увидим. Осталось недолго. Кажется, западный мир придет к этому раньше и у нас будет пара лет (может меньше), чтобы подготовиться.
Что-то нет у меня никакого хорошего предчувствия.
:-)
А взрослому человеку, который решил стать программистом, я бы посоветовал начать знакомство с программированием с языка Си, всё очень просто, нет сложных структур данных, никаких абстракций и очень близко к компьютеру, и самое главное тебе понятно как примерно работает твоя программа.
Я за Паскаль, как более строгий, и за Питон, который заставляет делать отступ в блоках.
а что в питоне динамическая типизация, вас не пугает?
крайности какието…
Есть ли в этой программе ошибки? Если есть, то какие и где?
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 в качестве первого языка не критиковали только ленивые.
Это да, это какие-то глупые придирки.
Это не глупые придирки, это реальная история новичка, который после школьного КУМир'а попытался освоить Пайтон. Речь-то о том, на чем учиться программированию, а не какой язык учить, чтобы стать профессиональным программистом и писать в production.
На мой взгляд, учебный язык должен быть регистронезависимым. Детям и так непросто, а тут еще регистры запоминать.
Одного человека, ну там группку небольшую энтузиастов можно с горшка учить писать код на С/С++, но для масс, которые нынче в девятом классе не знают таблицы умножения, вот для таких это не работает.
это реальная история новичкаУ вас новичок случайно ввел для одной переменной кириллическое имя?
Позвольте не поверить.
UPD.
но для масс, которые нынче в девятом классе не знают таблицы умноженияМассам, которые в девятом классе не знают таблицу умножения, сначала нужно выучить таблицу умножения, и только потом переходить к пониманию алгоритмов.
Иначе они ни считать не научатся, ни программировать, и будет сначала у вас сплошная имитация обучения, а потом у «учеников» имитация обученности.
Print($'{}, {}, {}');
Print($'Длина{}, ширина{}, периметр{}');
Print($'Длина{а}, ширина{б}, периметр{}');
Print($'Длина{а}, ширина{b}, периметр{2 * (a + b)}');
Введя имя переменной б, увидели ошибку, b поправили, но в спешке к а не вернулись и имя осталось на кириллице.
По поводу JS — специалисты в области начального образования горячо протестуют против использования скриптового языка в качестве первого. Причин много, не вижу смысла перечислять известные вещи. Скрипты на JS пишут в основном люди с административными функциями и это не имеет отношения к, например, школьной информатике.
Может быть провести голосование "какой язык программирования лучше всего изучать детям и новичкам?"
итого: на каком языке в 2021 году начинать обучения подростков 10-12 лет (попробовать привлечь внимание к программированию)?
Чтоб это:
1) было и не как тут ругали QBasic неприменимо в реалиях потом (на ххру Qbasic не находится)
2) чтоб не тратить 2 дня на прикручивание и настройку запчастей (lf,s не ученик не потерял интерес на этапе "ещё не начал")
3) чтоб не только консоль (вряд ли в подростков увлечет консольный вариант решения задачи коммивояжера или уравнения методом Монте-Карло)
ИМХО, это PascalABC.NET -- простейшая установка, компиляция, отладка, графика, есть исходники всех библиотек.
пару лет назад в поисках такового нашел https://basic256.org/
Под линукс в репах убунты, оконный интерфейс присутствует, чтение файлов есть, работа с БД есть, работа с сетью есть, отлов ошибок есть, работа с картинками и звуками есть.... http://yargymn.ru/filestore/Informatika/Basic-256.pdf
не понимаю, зачем, даже для базовых знаний, учить язык который в настоящее время не используются… нигде.
это прям как в институте и на заводе потом, 'забудьте всё чему вас учили' (с)
на каком языке вы обучаете? какой возраст обучаемых?
давайте в автошколах начнем людей учить на гужевых повозках учить ездить, а потом уже на авто. ведь ясно же что водители «раньше» — ездили лучше. а т.к. вы не умеете ездить на гужевой повозке то возражать мне не можете.
===
я вообще по себе сужу, мой первый язык был бейсик, и паскаль я по книжке на компьютер «дельта» учил… но в мое время проблемы были с доступностью вариантов. а сейчас какой смысл учить инструмент который никому вообще не нужен будет?
мой пост был в стиле "что предлагаете?", а не "что осуждаете?" .....
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 началась в контексте первого впечатления от процесса программирования для юного поколения…
в контексте первого впечатления от процесса программирования для юного поколения…
тоесть сначала заманим… а потооом…
Это выглядит как 'сельхозтехникум'… тебя учат работать на комбайне, тракторе, автоматические поливалки… ты весь такой капец современный работник… а приходишь на работу, а там штыковая лопата, лейка и куча навоза… по пятницам у петровича иногда получается завести древний трактор…
чтобы понять как можно быстро убить весь интерес к программированию попробуйте запустить свой "Hello world" на Go в Visual Studio Code ..... ))
свой «Hello world» на Go в Visual Studio Code… ))
а я go и не предлагал, я вообще скептически к этому языку отношусь… где уверенным движением выпилили 'ненужное', а потом героическими усилиями начали костылить это обратно
хотя когда узнаешь сколько вариантов компиляции:
$ 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 по-прежнему лучший