Моему старшему сыну Ноа три месяца назад исполнилось семь лет. Если бы он мог обменять всю свою семью на два часа игры в Minecraft, то сделал бы это без раздумий. Ещё одна любовь всей его жизни — это Super Mario Maker. У меня бегали мурашки, когда я видел, как он играет в уровни, которые я проходил в его возрасте. Примерно пять месяцев назад я покинул свою семью ради ежегодного паломничества на ludum dare: соревнование разработчиков игр, во время которого мы запираемся в квартире с друзьями, возвращаемся в состояние пещерного человека, не спим 48 часов и создаём с нуля готовую игру. Когда я гордо демонстрировал свою революционную игру уровня AAA своей жене, Ноа, разумеется, заинтересовался. Поэтому я познакомил его с миром кода, показал, как из простых слов (он только что научился читать) можно создать настоящую игру. С того самого дня Ноа постоянно просил меня научить делать собственные видеоигры. И в течение следующих пяти месяцев я искал Святой Грааль языка/IDE для детей в надежде превратить эту искру интереса в запоминающийся опыт…
Мои поиски приводили меня на бесконечные форумы, благодаря которым я попробовал бесчисленное множество рекомендуемых языков и платформ: SmallBasic, Pico-8, Smalltalk, Scratch и т.д. Я даже задавал вопросы великим оракулам StackOverflow, но тщетно. Спустя пять месяцев я пришёл к разочаровывающему выводу: ничто и близко не сравнимо с тем, что было у меня в мои годы. 30 лет спустя QBasic по-прежнему остаётся лучшим языком для новичков в программировании.
«Боже, пожалуйста, не учи его пользоваться GOTO!»
10 PRINT "О НЕТ, ЧТО ЖЕ ТЫ ДЕЛАЕШЬ?!”
20 GOTO 10
Да, QBasic — ужасный процедурный язык. Он знакомит с концепцией, которая большинством считается вредной, использует неудобный синтаксис для неявных объявлений, он не регистрозависим, индексы в нём начинаются не с нуля, и так далее, список бесконечен… При развитии навыка гораздо лучше нарабатывать правильные рефлексы с самого начала, чем исправлять годы неверной практики. Если последовать этому совету, то мне, вероятно, стоило бы начать с основ языка Ruby, который я люблю. Тем не менее, несмотря на то, что большинство этих концепций QBasic большинство считает «красными флагами», в то время они имели свою цель: сохранение простоты и доступности языка; от этого принципа все остальные языки отказались в пользу гибкости, сложности и логики.
Сегодня я установил QBasic на 11-дюймовый HP Stream сына, установку пришлось выполнять вручную через DOSBox. Он дважды нажал на значок рабочего стола и спустя долю секунды мы уже увидели IDE, приветствовавшей нас вводным экраном, который вызвал у меня кучу воспоминаний:
Потом я сказал Ноа, что существует священный ритуал, обязательный для всех, входящих в тайный круг программистов: начинать обучение с программы, приветствующей всех программистов мира. Пока я диктовал формулу, он медленно искал каждую клавишу, аккуратно печатая пальцем правой руки волшебные слова:
PRINT "hello world"
Он нажал F5 и поразился, увидев, как его код скомпилировался в текст, отображаемый на чёрном экране. Он улыбнулся, дал мне пять, а потом записал код в свой маленький блокнот на будущее.
Мы изучили ещё пару команд: CLS, COLOR, PLAY, INPUT и IF. Ничего не нужно было объяснять: никакой сложности, никаких неуклюжих операторов, никаких абстрактных концепций, никакой документации, которую необходимо изучать, никаких концепций объектов/классов/методов, не требовалась установка никаких фреймворков, нет кучи меню и кнопок в IDE, никаких специальных ключевых слов или скобок. Это был код во всей его чистейшей простоте и форме.
Спустя менее часа он написал собственную программу — интерактивное и невероятно изощрённое приложение, сообщающее о том, что думает о вас компьютер:
… которое Ноа с искренней гордостью запустил для своего двоюродного брата и лучшего друга Кристиана:
… после чего он легко объяснил, как оно работает и что делает код!
То есть всего за один час мой семилетний сын не только смог написать свою первую текстовую игру, но и ощутил удовольствие и трепет, возникающие при создании, компилировании и запуске собственной программы. Дополнительные очки за то, что она умещается на одной странице блокнота:
Я был так рад, что он понял, почему я постоянно говорю, что у меня лучшая работа в мире.
Единственное, о чём я сейчас сожалению, так это о том, что за тридцать с лишним лет мы не смогли придумать для детей чего-то лучшего: Qbasic имеет ограниченное множество простых ключевых слов (вся справка умещается на одном экране, вызываемом по F1, и дополнена простыми примерами!), не отвлекает кодера визуальными артефактами, обладает очень компактной и уютной средой разработки, сразу же указывает на ошибки, компилирует и исполняет код за доли секунды нажатием одной клавиши, и к тому же чрезвычайно прост. Мы создали более надёжные и сложные языки/фреймворки/IDE (которые, разумеется, необходимы для любого практичного приложения), но никогда не придумывали более простого способа получить прямой доступ к удовольствию от программирования, чем QBasic. Даже запуск QBasic сегодня стал пугающей задачей для новичков, работающих на современной машине Mac/PC/Linux, хотя раньше для этого достаточно было просто вставить 3,5-дюймовую дискету в дисковод A:\…
Но, впрочем, хватит проповедей, сегодня ведь нужно праздновать знакомство ещё одного человека с радостями и красотой программирования!
Ура!
На правах рекламы
Наша компания предлагает современные серверы в аренду для любых проектов. Создайте собсвенный тарифный план в пару кликов, максимальная конфигурация бьёт рекорды — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe!
Присоединяйтесь к нашему чату в Telegram.
saintbyte
Испортит ребенка надо ему сразу яву или с++. Эти бейсики ничего хорошего не дают а потом ты годами с их наследием в мозгах борешься
starfair
Ну, я хоть и сишник со стажем в 31 год, ничего особо страшного в начале обучения таких юных детей, как сын автора статьи, в изучении Basic-а не вижу! На самом деле, от спагетти-кода, весьма быстро отходишь и никакого особого засорения мозгов не происходит. Сам начинал когда то с Бэйсика на БК01-10, и это вообще никак не навредило перейти сперва на Паскаль, потом на С, а с появлением у нас доступа к первым версиям С++, и к ООП. Более того, я и сейчас вынужден постоянно писать на VBA, и при этом вполне способен параллельно работать и на С++ и на Java и всём таком подобном.
perfect_genius
А как быть с отсчётом не с нуля?
stranger_shaman
прекрасно быть, особенно детям
omxela
AnthonyMikh
Вы явно не знакомы с Haskell
samsergey
А что, Haskell? Если продолжать аналогию с осями, то Haskell даeт понимание того, что оси могут быть какими угодно, хоть криволинейными, но это просто базис в линейном пространстве :)
Начинать с этого обучение точно не стоит, но это не что-то принципиально инопланетное. Оси и оси...
OCTAGRAM
Но ведь ось Y и вправду много, где направлена вниз, а не вверх, а популярный порядок индексов (строка, столбец) это (-Y, X)
Dario9000
Речь о массивах? Сделать с нуля, очевидно: OPTION BASE 0
axe_chita
Это было не везде. В MSX Basic OPTION BASE точно не было.
Alex061
А кому он нужен? Кроме того, все современные языки давно уже перешли «на ноль» и лучше привыкать сразу.
AlexeyALV
И я начинал с Бесика на Агатах. Но это не лучший вариант. Только, еси поиграть в программирование, а потом заняться другим.
А как учебный язык лучше Паскаль. Его, собственно, Николас Вирт за тем и писал.
third112
Есть Паскаль специально для обучения. Нпр., Dr Pascal.
LynXzp
Проиграть в программирование на Агатах была Рапира. Хорошо что тогда она меня не заинтересовала, ведь был Бейсик в котором я уже что-то знал :) Но играть лучше в современные colobot и тому подобное.
Кстати в Бейсике на Агатах были медленные принты и создавать визуальные ASCII игры было невозможно. Рисовать по пикселям было чуть ли не быстрее.
third112
VBA отличается от QBasic-а не меньше, чем QBasic от ранних версий Basic-а. В ранних версиях не было IDE, строки нужно было нумеровать руками. Подпрограммы Basic не полноценные процедуры. Вызывались gosub номер строки, параметры передавлись через глобальные переменные. Был оператор let. Важной причиной популярности Basic стал его небольшой объем, который можно было впихнуть в маленькую память. Перед VBA такой задачи не было.
Int_13h
Был микропроцессор (ins8073) со встроенным интерпретатором бейсика размером 1.25 кБайт — подавай питание, подключай терминал по RS232 и работай! Программы можно было с внешнего ПЗУ выполнять.
vectorplus
А как выглядит и работает такой терминал?
Я недавно подключал RS232, но там через переходник серийный порт. От вида разъема родным повеяло )
Int_13h
Э… как гипертерминал. У чипа простой интерфейс RS-232 или TTY, подключается к компьютеру и пользователь общается с ним через любую терминальную программу.
Таким образом можно вводить программу в память чипа, запускать на исполнение и получать и передавать программе данные также через 232 интерфейс.
vectorplus
Понял, спасибо.
LuchS-lynx
как это не было полноценных процедур и функций? а как же Declare Sub, Declare Function? еще даже была менюшка, позволяющая переходить между ними и отображать только конкретную процедуру или функцию, gosub тоде работала
unclegluk
Примерно так не было.
LuchS-lynx
Именно так и было
Справка на импортном
LuchS-lynx
Конечно Borland/Turbo Pascal 7.0 был более продвинут и во многом более функциональнее чем QBasic, но в чем бэйсик был лучше, так это в справке (дизайн+лаконичность примеров и описаний + дизайн), а так же в оформлении процедур и функций, потому что после того как я создавал в бэйсики процедуру, то в текстовом редакторе она отображалась автоматом в отдельном окне, а переключение было через меню, в то время как в паскале приходилось крутить вниз сплошной листинг всего и вся…
VBA в части логики не отличается от QBasic ни на грамм, да стало больше фишек и функций, а кое-что убрали, но все эти циклы и принципы работы остались теми же. Добавилось объектное программирование, которое проще и более понятно, чтом в том же Паскале.
Fortop
Borland только кажется более продвинутым.
Просто потому что на просторах СНГ самую большую известность имели 6 и 7 версии уже из 90-х.
Тогда как сравнивают с наиболее распространённым у нас QuickBasic 4.5, который на 3-5 лет старше. Или его вариантом QBasic без компилятора.
А между тем был вполне себе мощный Microsoft Basic PDS 7.0, который появился раньше 7ки паскаля. Более того у него был встроенный движок БД (чем паскаль похвастаться не мог) на технологии ISAM (той самой которая потом ещё долгие годы будет использоваться в MS Access) на тот момент более продвинутый чем типичные плоские базы данных типа dBase.
Уж по какой причине он не пошёл в массы у нас - не знаю. Возможно пираты не слишком удачно "поработали" .
starfair
Про VBA я к тому упомянул, что для разных задач, а точнее — для уровня тех, кому нужны скриптовые языки для автоматизации, нет нужды предоставлять инструмент, который настолько сложный, что от него пользователь просто отвернётся. VBA, вполне себе всё тот же Бэйсик. Просто построенный с учётом COM технологий, и разрабатывался он именно под автоматизацию скриптовым методам, через скрытые за функциями вызовы интерфейсов, предоставляемых программой сервером. Но для 99% тех, кто пользуется им, этого знать и не надо.
Простейший набор алгоритмических возможностей почти классического Бэйсика, вполне покрывает их потребности. И таким пользователям, возможность ставить метки или нумерацию и переходить к ним через GoTo вполне себе нормально, ибо им надо решить быстро конкретную и обычно не сложную задачу. Для более продвинутых же задач, приходится очень серьёзно изголяться, это да. Как мне например, в моих макросах под CorelDraw. И в таких случаях, наследие простой алгоритмизации очень мешает, но тем не менее, большинство задач всё же решаются и без ООП. Я бы и перешёл на С#, но он поддерживается только с версии Х7, но мои пользователи работают порой на очень древних версиях Corel. Да и проблема в С#, что поскольку там имортируется интерфейс из самой коревой dll, то от версии к версии получается иногда не совместимость классов, и значит надо плодить зоопарк версий самих плагинов, а в VBA, это всё очень легко обходится путём проверки версий Corel и смены алгоритма или функции, и никаких проблем тогда с использованием одного и того же макроса под разными версиями.
Так что, я думаю Бэйсик ещё и нас переживет! Да и начинать обучение ребёнка программированию с такого простого и очень прощающего ошибки языка, как Бэйсик, вполне себе благодарное дело, если ребёнок хочет программировать, а ты не хочешь ему сразу это желание отбить.
LuchS-lynx
Я в VBA углубился 4 года назад, когда встал вопрос как автоматизировать и упростить ведение документации, т.е. заполнение шаблонов подготовленными данными, что привело к написанию программы на связке Excel + VBA. Что поразило и порадовало:
1. Вся логика (циклы, ветвления, организация процедур и функций, условия, математика) один к одному как QBasic/QBasic 4.5
2. Функции ввода-вывода и обращений к памяти отличаются, в VBA присутствует объектное программирование, но при этом в сети столько контента, что если правильно сформулировать вопрос/хотелку обязательно найдется ответ, часто в виде готовых блоков кода. Из-за чего программировать становится пугающе просто.
Sergani
Я начинал с QBasic. Что не помешало мне освоить C#,C++, Java, Go, Delphi и еще десяток языков.
StanEgo
И как, сильно пригодилось? Я тоже прошёл весь этот путь, но мне и в страшном сне не придёт в голову учить своих… да даже чужих детей BASIC. Я преподавал, начиная от пятиклашек и выше. BASIC — тот случай, когда ты через некоторое время вынужден сказать "А теперь забудьте всё, что мы учили". Если автору так нужно что-то лаконичное и шустрое, то Turbo Pascal просто на голову выше.
DMGarikk
(второй раз в комментах этой темы спрашиваю)
ЧТО надо забыть такого страшного «всё» в бейсике?
===
я тоже начинал с бейсика, причем тогосамого страшного, с обязательной нумерацией… а в VB6 вообще освоил ООП… делал самодельные связные списки и хештаблицы (интернетов тогда не было у меня, гдето про них вычитал и делал самостоятельно как себе представлял это… как ни странно получилось почти как по учебнику)… что мне тоже ниразу не помешало потом перейти на C#/Java и Pyhton
StanEgo
У нас путь похожий, но выводы разные. Да я писал на BASIC ещё для ДВК-1, да потом без труда перешёл на Pascal (только писал на нём как на BASIC, потратив немало времени на выкорчёвывание стереотипов). После чего переход на C#/Java (я опять же говорю о качественном переходе) дался намного легче. Но мне и в голову не приходит мысль пытаться перенести эту пропахшую нафталином ностальгию в сегодняшний день. Или советовать кому-то повторять этот путь длиной в несколько десятилетий с постоянным ломанием парадигм, выбрасыванием в помойку старых наработок и т.п.
Время примитивного императивного мышления в духе for/if уходит. Когда сегодняшний ребёнок выйдет на рынок труда, там уже вовсю будет типо-ориентированное программирование, что-то в духе Haskell, Idris, Agda и т.п. И мой опыт подсказывает, что для детей оно даже более натурально. Структурирование игровых персонажей, исследование их поведения с применением того же ООП заходит лучше, чем скучные синтетические числовые/символьные задачи, на которых строится BASIC, из-за его убогой системы типов и модульности. Таких детей можно хоть завтра бросать на реальные бизнес-задачи. Может у вас другой опыт преподавания, поделитесь, будет очень интересно.
Что я могу перенести из него в сегодняшний день? Скажите мне. Я тогда вычту его из "всего" и мы получим ответ на интересующий вас вопрос "что надо забыть". И я надеюсь, мы говорим о навыках решения задач, которые формируются в наших нейросетях годами, а не схожести синтаксиса for или if. Вы реально считаете, что некоторый условный тинейджер, начавший с BASIC ничуть не проиграет другим, которые начали с Pascal или Smalltalk?
DMGarikk
я сейчас не про то что детей надо учить современным языкам (это несомненно)
а про то что за бейсиком тянется слава 'кошмарного языка который нельзя учить потому что он ломает мышление' — но это блин не так, он не сильно отличается от других языков
то что вы говорите про ООП, так не ООП единым же… взять тотже Си, где там ООП?
На моей текущей работе, огромный проект на питоне где ООП используется очень ограниченно… а это реальная боевая задача, (по началу мне очень сильно мозг это ломало, учитывая что я долго писал на шарпе и на яве)
==
у меня нет опыта преподавания, но мой опыт программирования подсказывает, что все языки плбюсминус одинаковые, разница лишь в фенечках-библиотеках (тут в комментах ктото сетовал что qb нельзя файл из интернета скачать… хах, прямо таки в чистом-'правильном' CPP так можно сделать… ну ну) и нескольких парадигмах, ООП/Процедурщина… но надо понимать что ООП не идеальная модель, очень много кода пишут 'по старинке' и много где это более оправдано чем ООП
AnthonyMikh
Да в том же ядре Linux. И есть целая Glib для реализации ООП на C.
DMGarikk
ну это же отдельная либа, а не часть языка.
тут ниже пишут что в бейсике нет рекурсии… типа впилили только в поздних версиях — фейл.
ну если в сях есть ООП через glib, никто не мешает в старом бейсике без рекурсии, самому её напрограммить сделав счетчики вызовов подпрограмм.
AnthonyMikh
Простите, а стек вы куда класть будете?
StanEgo
У вас странные критерии сравнения. На мой взгляд он кардинально отличается от других языков. Просто небо и земля. Схожесть только на самом примитивном уровне вроде рудиментарных алгоритмических примитивов. Возьмите любую натуральную задачу. Там где ученики оперирует знакомыми объектами. Пусть даже будет скучный вариант с шахматами. Конструкцию вроде
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. И обратно.
DMGarikk
ну тоесть вы считаете что работа с объектами — это лучший вариант в программировании?
А вот в реальной жизни практически никогда не нужно оперировать со 'знакомыми объектами', взять ту-же яву которую многие ява-хейтеры не любят за ад из абстракций и огромные цепочки наследований, там зачастую на один 'знакомый объект' приходится десяток всяких helper-ов factory и прочих абстракций, которые оч сложно объяснить с точки зрения программирования не вникая в паттерны и архитектуру
Я понимаю что это проще объяснить и в некотором роде проще мыслить, я некоторое время думал схоже пока не попал на проект где объекты и вообще ООП используется только там где это требует фреймворк и базовые примитивы языка, весь бизнес код написан процедурщиной… вот тут я и вспомнил свой древний опыт на доисторическом бейсике… по началу оч сильно подгорало от такого, крайне непривычно, вспоминать опыт 20 летней давности
third112
StanEgo
Нет. Я уже не раз написал, что именно я считаю, но видимо вы не читаете.
С точностью наоборот. В реальной жизни всегда приходиться оперировать со знакомыми объектами. Стейкхолдеры, как и дети, не будут разговаривать с вами на другом языке. А вот уже от привычных для них объектов можно идти в правильном направлении. Вы же считаете, что от системы типов BASIC плясать куда проще. Число, строка… в проекте на Python вам тоже этого хватает?
А в Rust отличные абстракции и нет наследования в принципе. Что будем делать с этим фактом?
Не хочу принижать этот проект и ваше в нём участие, но объективно я не могу рассматривать это факт. Я тоже попадал в сотни разных проектов. Были и с уродливой кодовой базой, включая процедурщину и мне в голову не придёт этот подход восхвалять. Может это какой-то выдающийся продукт, который кладёт ту же Java на лопатки и можно краем глаза где-то взглянуть? А может как я и предположил, у нас просто разный смысл кроется за аббревиатурой ООП. Я, например, многие практики OOD в SQL использую. Хотя там никакого привычного ООП и в помине нет.
Andy_Big
Мне — да. Я начинал с Бейсика, на нем учился постановке задач и превращения их в алгоритмы — основа практически любого ЯП. И это мне сильно пригодилось при переходе на другие языки :)
Да, были моменты «опа, а тут так нельзя, что ли?», но это было вполне ожидаемо, другой язык — другие правила. Однако основа оставалась — алгоритмизация, условия, циклы, переменные.
StanEgo
Мы опять говорим про переходы, которые многие из нас осуществляли в прошлом. Современный мир — это совершенно другие приоритеты. Циклы? Вы пропустили тот момент, когда вся индустрия испытывала дикую боль, поскольку циклы не масштабировались на многоядерные системы? Переменные? Вы остались в стороне от страшных пыток многопоточными приложениями и не заметили, что мир становится всё более иммутабельным?)) Всё сейчас заметно движется в сторону обогащения системы типов. Не успеете моргнуть, как вместо условий у вас будут dependent types. И сейчас у многих идёт конкретная ломка, как избавиться от этого старого императивного багажа, который больше не работает. А вы предлагаете продолжать его культивировать.
tester12
ardraeiss
… если целью является "отвратить юного человека от идеи пробовать что-то программировать" — да, видимо идеальное решение. Потому что ему интересно не регистры копировать, а вывести на экран "здесь был вася" и линию нарисовать. Потом вторую. Потом уже про циклы, ветвление и переменные узнавать и оттуда погружаться в типы данных.
tester12
Ну, в качестве вводного/ознакомительного курса можно взять тот же бэйсик или даже яваскрипт. Чтобы ученик нарисовал на экране вращающийся квадрат или стрелочные часы.
StanEgo
Ассемблером можно заинтересовать. Я в таких случаях использую embedded-платформы, от простых контроллеров, где можно помигать светодиодами, до чего-то роботизированного. Но это другой вектор развития.
Andy_Big
Вот именно :)
StanEgo
Из всего богатого мира software engineering вы взяли только computer science, оттуда выдернули маленький кусочек, касающийся исключительно одной вычислительной модели, с уклоном на наиболее типовые микропроцессорные архитектуры и называете это основами программирования?
Я через десятилетия несу любовь к ассемблеру, что не мешало мне программировать от Рефала или Пролога до SQL, XSLT, выводке всяких ML, Gherkin и т.п., которые с недоумением смотрят на ваши выводы, отрицающие существование символьного, декларативного, мета- и других форм программирования.
Я так понимаю, что для вас Марков или Чёрч — это не основы, а НАМ или лямбда-исчисление недоразумение. Ну тогда я вам могу предложить основу ещё более основательную — машина Тьюринга. Не благодарите, получайте удовольствие. Говорят удачный вариант реализации в языке Brainfuck.
0xd34df00d
А почему не с лямбда-исчисления? Я бы сказал, что именно оно — основа программирования.
csl
Как модель абстрактного вычислителя, эквивалентного машине Тьюринга?
0xd34df00d
Да. И на которую легко и непринуждённо навешиваются типы.
Int_13h
Ни в коем случае не с ассемблера! Только вторым языком, чтобы понимать, как работает железо.
После ассемблера просто невозможно программировать на ЯВУ, процесс написания программы превращается в постоянную борьбу с компилятором. Напрмиер Си. Все эти миллионы унаследованных друг от друга типов данных, с невозможностью конвертации «на лету». Пристегивание кучи вроде как и ненужных, но тем не менее необходимых библиотек.
Вот вроде создаю чистое приложение без всяких MFC и прочих стандартных библиотек. Заинклужен только windows.h. А в ресурсе меню не могу назначить пункту свой идентификатор, например, ID_FILE_OPEN, т.к. он уже объявлен в одном из файлов из MFC (неподключенных же!). А в процедуре обработки сообщений сообщение приходит именно со стандартным, MFC-шным значением ID_FILE_OPEN и я его обработать не могу :)
Опять же, вызываю по выбору пункта меню MessageBox (в отладочных целях) — а его окно не прорисовывается :) Зато, кроме отсутсвия фокуса ввода у окна приложения (ну правильно, оно же перешло на непрорисованный месседжбокс!) возрастает нагрузка на процессор из дебрей ядра. До 50% :)
В 2008ой вообще текстовые строки зачем то (:)) надо писать в формате L«my string», просто кавычки компилятор не понимает. И все равно в заголовке окна выводися не только заданный мною текст, а еще и содержимое предваряющих его ячеек памяти.
И это просто шаблон оконного приложения с всего лишь с СreateWindowsEx.
В итоге то же самое, но переписанное буква в букву на ассемблере в Masm — работает так как и задумано.
Andy_Big
И? Циклы исчезли из современных языков?
И переменные тоже упразднили из современного программирования?
В каких-то языках — возможно и будет. Но далеко не во многих :) И поморгать мне на мой век хватит, да и детям моим тоже :)
StanEgo
В некоторых их и не было никогда, в других предпочтение отдавалось рекурсии. А в иных они всё чаще становятся просто синтаксическим сахаром для итераторов. И, наконец-то, вместо этой уродливой императивной конструкции есть нормальный масштабируемый вариант. Хочешь — многопоточность добавляй, хочешь — партиционирование. Не надо обходить весь код и вырезать эти циклы, громко матерясь.
У вас, как я понимаю, очень дискретное мышление? Попробую пояснить на примере. В ES6+ var остался, но практически все best-practices рекомендуют использовать const. В языках вроде Rust, F# и многих других надо принудительно указывать мутабельность, но она не очень приветствуется. Я это рассматриваю как постепенное движение к иммутабельности. А для вас факт поддержки переменных — это то, что они основы?
А там много не надо. Достаточно одного, чтобы большая часть рынка программистов осталась без работы.
Andy_Big
Вы как-то скользко провиляли вокруг ответов, но так и не ответили :)
В С++ еще остались переменные и циклы? В Яве? В С#? Только не говорите, что эти языки уже вымерли :)
bopoh13
Да, в том же VBA нельзя управлять потоками. Но и в Node.js условная многопоточность. Каково ваше отношение после Java?
DMGarikk
например? каким наследием?
вот возьмите python, плохой язык? там можно точно также как на бейсиках писать
0xd34df00d
Да, плохой.
DMGarikk
отлично, хороший получается только си(или си с плюсами)?
alliumnsk
Хаскель же (:
OCTAGRAM
Без трассирующей сборки мусора реализацию сделали уже?
GospodinKolhoznik
Вы так говорите, словно если бы сделали, то побежали бы его осваивать и использовать.
OCTAGRAM
Осваивать его не придётся, он часть учебной программы JetBrains, но как общий принцип кто не научился жить без трассирующей сборки мусора, тот идёт нафиг из технологического стека. Как Haskell научится, так библиотеки на нём станет приемлемо использовать из других языков.
0xd34df00d
А какова мотивация у такого принципа?
Использование из других языков — не единственная цель существования языка программирования общего назначения. Да и
foreign export
в хаскеле есть и вполне успешно работает.OCTAGRAM
Не быть распоследним скотом, как те плохие парни, софтом которых мне приходилось пользоваться на первых работах, на отнюдь не топовых компах провинциального провайдера. И как те другие плохие парни, которым я доверился, поставил их софт, написал конвертер под формат вики, привязался, а как счёт количества объектов пошёл на какие-то смешные тысячи, так оно затормозило и пошло жрать электричество в вечном цикле.
Трассирующая сборка — это вечный двигатель наоборот. Ему всегда есть, чем заняться, и он этим занимается. Мне бы, пожалуйста, вечный двигатель нормальный, чтоб вырабатывал, а не потреблял. А если такого нет, то пусть не будет никакого. Настрадался.
Когда я думаю про интероп, у меня в голове образы WinRT, COM, OLE Automation, VirtualBox XPCOM, libobjc и отчасти SOM. С уже формально решёнными вопросами владения, освобождения ресурсов, уведомления об ошибках и наследования.
А FFI — это только первая ступень лестницы, по ней ещё шагать и шагать к высокоуровневому взаимодействию. Вот, допустим, на макосе есть Oxygene/Toffee, и взять бы написать на гипотетическом избавленном от трассирующей сборки мусора Хаскелле монаду Дейкстры, заполучить её в Oxygene как значение-последовательность (sequence of), и по этому значению походить средствами LINQ. Или в языке Ада, если генератором привязок спроецировать на тип с аспектом Default_Iterator, тоже comprehension можно устроить.
0xd34df00d
И поэтому теперь любая система с tracing GC будет тормозить, ага.
По этой логике вообще всё очень плохо, потому что опыт с текущими по памяти системами с полностью ручным GC у меня есть, и опыт с системами, основанными, например, на рефкаунте, где получались циклические зависимости и утекало до сотни гигабайт памяти в день, у меня тоже есть.
Трассирующая сборка в generational GC для иммутабельных языков — это одно удовольствие. Вы просто берёте и рекурсивно копируете данные из нулевого поколения в более старое, после чего освобождая нулевое поколение целиком. Вам не нужно проходить по старшему поколению — там заведомо не может быть ссылок на данные из более младшего (тут есть детали, касающиеся вещей вроде монады ST, но это другая история).
Для достаточно малых размеров чанка нулевого поколения (например, плюс-минус равного размеру L2-кеша) производительность этого оказывается не сильно далека от вещей, подобных arena allocator'ам. А если у вас очень много мелкого и короткоживущего мусора, то оно начинает вообще не сильно отличаться по производительности от сишного стека.
И только трассирующий GC этому мешает.
Это не имеет смысла, если в целевом языке нет выразительных средств для исходного (или наоборот). Вам так или иначе на каком-то уровне придётся верить.
csl
Касательно кеша (только кеш-памяти)... Вы проходили выбор размера массива, не равный 2 * N (для увеличения производительности)? Встречал postscript-документ Monica Lam (ACM).
0xd34df00d
Я не очень понял вопрос, если честно.
csl
Удивился, встретив в suif.stanford.edu/papers/lam91.ps (postscript), что размеры массива лучше выбирать, не равными 2 * N.
0xd34df00d
А, ассоциативность кэша. Да, это прикольная тема.
Правда, в этом случае она не должна особо играть роль — там нет (по крайней мере, я сходу не могу придумать, почему бы они там были) таких паттернов доступа, которые приводили бы к eviction'у линий до того, как они потребуются ещё раз.
0xd34df00d
Нет, они оба тоже нехорошие.
Объективно хороших языков вообще нет, а дальше это вопрос того, на какие компромиссы вы готовы пойти.
Kurochkin
Любопытно, а как бы вы оценили английский в сравнении с русским и чем-то восточноазиатским? Там везде тоже противоречащие паттерны, и "говорить по-английски" тоже нужно переучиваться после русского. Тем не менее люди справляются, и не считают какой-либо из них "плохим".
DaneSoul
Родился на определенной территории и автоматом получаешь родной язык, даже если он тебе совершенно не нравится. Хочешь общаться со всем миром — учишь международный английский, никого твои сложности не волнуют.
Я бы очень многое отдал, чтобы моим родным был международный язык и мне не приходилось тратить тысячи часов на освоение международного и все равно упираться в то, что на таком же уровне как родной его освоить очень сложно…
В случае же с обучением программированию есть варианты. ИМХО, начинать надо с максимально универсального (позволяет попробовать его в очень разных задачах) и популярного (легко находить информацию, помощь и т.п.) языка, а дальше, поняв принципы, уже можно специализироваться в тех или иных направлениям изучая специфику.
0xd34df00d
Ну, во-первых, на естественных языках не пишут код, а мы тут вроде обсуждали написание кода.
Далее, единственная цель естественного языка — передавать информацию между людьми. А там уже хорошесть языка снова зависит от ваших целей. Если я пишу ТЗ, то хорош тот язык (и то его подмножество), который позволяет меньше неточностей. Если я пишу стихи с претензией на богатый внутренний мир, то большее количество неоднозначностей будет плюсом. Если я живу в стране N, то хорош тот язык, на котором больше всего говорят в N. Если я живу в заснеженной территории, и моё выживание зависит от способности ориентироваться в соответствующих пейзажах, что при прочих равных будет лучше тот язык, в котором больше терминов для разных видов снега.
Дальше можно пойти ещё глубже и сказать, например, что тональные языки для меня заведомо хуже, потому что я с детства к ним не привык, и это надо будет мозг выворачивать.
kasigor
Где я бы взял python в 1990 году? Когда и спектрум не у каждого был. Что было на том и учились. Basic на спектруме мне больше нравился, чем его разновидности qbasic или qwbasic.
GospodinKolhoznik
Бэйсик на спектруме при всей своей примитивности языка был очень классно интегрирован в саму систему.
Запускаешь спектрум, и через 2 секунды тебе доступна примитивная ОС и среда разработки 2 в одном. Причем можно сразу же рисовать на экране графические примитивы, и вместе с ними же писать текст в любую координату экрана. Некоторые люди (не профессиональные программисты) реально брали и писали себе на бэйсике простой софт под собственные нужды и даже делали себе некоторый примитивный ГУИ, используя этот простой подход — тут чертим линии, тут выводим текст, получилась вот такая табличка, этот текст таким цветом выделяет, этот другим, по нажатию клавиш выделенный текст перемещается, вот уже интерактивное меню получилось.
А сколько всего сейчас надо сделать для такой задачи! Установить язык, установить среду разработки, установить зависимости, гуглить почему зависимости конфликтуют. Даже поменять в терминале цвет вывода текста не самая тривиальная задача. А уж сделать так, чтобы можно было выводить на экран графику вместе с текстом, это вообще дано не только лишь всем.
Вот тут с 15-40 www.youtube.com/watch?v=PBRIfY-wRiA&list=PLOtimvwAoYtlWZdX-MgnHrr-GUS7m8F7g&index=6 мужик из 1982 года, профессиональный фотограф сам себе на бэйсике написал софт — собственную простенькую субд в которой он хранит каталог снимков, клиентов, заказов, платежей и вывод на печать всего этого в нужном формате. Наверняка мужик просто талантливый и он бы и сейчас справился с такой задачей (на каком ни-будь питоне). Но ведь нельзя сказать, что за 40 лет стало гораздо удобнее и легче сделать то, что он сделал тогда.
beeruser
Был такой чувак Terry Davis, который разрабатывал подобную старым системам ОС для PC (Temple OS), но его никто не понял. Несмотря на общую кривость и фриковость, задумки очень интересные — перекликаются с возможностями Symbolics Lisp Machine из 80-х, только для Си.
vectorplus
Почти. Передача аргументов через пробел более интуитивно понятна, чем скобки, прилипшие к функции, как в питоне 3. Зато помогают отделять функции и методы от переменных и полей объектов.
chipsoftware
Плохой
Andy_Big
Начинать надо с алгоритмизации задачи, а Basic — это, пожалуй, самый простой способ начать ее осваивать. Да, в нем много неправильного по современным меркам, но тем не менее заложить основу он помогает. И не создает никаких непреодолимых трудностей для дальнейшего перехода на более «правильные» языки :)
third112
Многие классические алгоритмы, которые изучают на первых шагах, рекурсивные (Ханойские башни, 8 ферзей и т.д.). А в QBasic нет рекурсии.
Andy_Big
Рекурсивные алгоритмы — это уже не первые шаги :)
third112
Dr Pascal был предназначен для вводного курса по программированию для первокурсников. Там приводился пример рекурсии в задаче 8 ферзей. И для бинарных деревьев рекурсия нужна. Рекурсивные алгоритмы очень наглядны.
Andy_Big
Прям на первых шагах? «Сегодня мы начнем знакомиться с основами программирования и для начала разберем рекурсивный алгоритм»? :)
third112
Ну, не на первом шаге, не на первом занятии, а на 4ом вполне возможно. Я в МГУ когда-то по Паскалю лекции читал. Уложился в 6 лекций. Рекурсия вопросов не вызвала.
Andy_Big
То есть за три занятия с полного нуля усваиваются основы алгоритмов в целом, применение линейных алгоритмов, понятия переменных, ветвления и циклы и т.п.? Лихо :)
third112
Матан для многих сложнее:) Конечно, понятие теоретической сложности алгоритмов не для первых занятий. Понятие переменной всем известно из школьной алгебры. С пониманием типов у начинающих иногда возникают трудности. Ветвления и циклы проблем обычно не вызывают — все знают выражение «ходить по кругу» — «зациклиться»:)
Andy_Big
Все так, но не за три занятия же :) Ваши студенты ведь уже были хоть как-то подготовлены к тем же алгоритмам, у них были уроки информатики, и понятие переменных действительно из школьный уравнений легко переходят. А я говорил про абсолютное начало — как у автора с его 7-летним сыном :)
third112
7-летних учеников у меня не было. (Был, правда, случай, когда читал лекцию про комп. игры в младших классах подшефной школы). Но это не про циклы и переменные. Думаю, что в данном случае, если сын захочет, то папа сможет провести с ним больше, чем 3 занятия. Но в 7 лет дети часто меняют желания и увлечения. И в более старшем возрасте… Один мой знакомый — университетский профессор, математик, спец. по комбинаторике и теории графов. У нас с ним назревала совместная статья в мат.сборник по его интересному алгоритму. Как-то он пожалел, что не умеет программировать. Я ему предложил прочесть 30 страничную книгу Вирта о Паскале. С его уровнем это было бы не трудно, обещал помочь если возникнут затруднения. Он сначала загорелся, а потом сказал, что передумал. Отсюда ИМХО вывод, что не все люди хотят «кодить» :)
Andy_Big
Было бы удивительно, если бы все это хотели и всем это нравилось :) Более того — даже не всем это дается одинаково. Кому-то алгоритмы и программирование заходят легко (даже если им это не особо интересно), а кому-то приходится прикладывать немалые усилий.
inferrna
Он хотел уметь программировать, а не учиться, как и большинство. Вот, например, ребёнок из статьи за час с папиной помощью написал хэллоуворлд с одним ветвлением и всё, считает, что уже умеет. Взрослому дядьке так обмануть себя сложнее, а тратить время на уровень, на котором он посчитает, что умеет, он не может себе позволить.
Вот именно поэтому для обучения нужен максимально простой язык — чтобы обучаемый с первого урока уже что-то умел, путь даже это будет несколько далеко от правды. Касается не только программированияя, кстати, а чего угодно.
nevelaev
вот всякому хламу ставят кучу лайков или дизлайков. А подобные комменты остаются без внимания. По-моему, этот комментарий как нельзя лучше раскрывает суть сабжа, большинство комментаторов, которые распыляются над тем, какому языку сразу надо учить — игнорируют вопросы педагогики. Многие люди, заметил, будучи опытными профессионалами, считают себя одновременно и педагогами, не понимая, что вливание информации должно происходить в определенном порядке, с определенной скоростью, и в определенные часы жизнедеятельности. Обучение не должно отталкивать. Должны быть определенные этапы, маленькие подэтапы, в конце каждого из которых человек должен ощущать убеждение, что все сделано верно, и можно двигаться дальше. На этом основывается суть всех учебных заведений.
third112
nevelaev
Так сейчас большинство специалистов — узкопрофили-выпускники таких «заведений». Которые одно действие умеют, а чуть что — совершенно неспособны понять причину, почему что-то не работает. Глубины знаний не хватает. Сам-то процесс педагогики в целом изучен уже достаточно давно.
third112
Если говорить о проф.математиках, знающих много алгоритмов (на псевдокоде), могущих доказать корректность и оценить сложность, то ситуация сложнее. Найти день, чтобы прочитать 30 стр. описания Паскаля и разобраться в БНФ, каждый из них сможет. Сложность, видимо, во взглядах. У них иной взгляд, чем у «кодеров».
decomeron
Уважаемый преподаватель, в статье ребенку 7 лет, вы хотя бы сможете ему обьяснить значение этого слова, уж не говоря про лекции.
StanEgo
Зависит от преподавателя. На самом деле рекурсия даже более натуральна. Просто надо ребёнку не на факториале демонстрировать или числах Фибоначчи, а на простой операции подсчёта предметов в мешке.
Andy_Big
В первую очередь нужно научить превращать свои хотелки в алгоритмы, пригодные для перекладывания их на язык программирования. И в этом такой простой язык как Бейсик отлично работает.
StanEgo
Программы = алгоритмы + структуры данных (с) Никлаус Вирт. Да и алгоритмы — это тоже структуры данных (привет LISP/Scheme и классический курс SICP). BASIC решает только одну часть и решает почень осредственно. Можно учить ребёнка писать Circle(...) как мартышка. А можно научить его описывать структуру Circle, массив таких структур, выводить разным способом (все, чётные, сдвигать, масштабировать, находить самый маленький, большой и т.п.), добавлять новые виды, объяснить обобщение и так постепенно вывести на правильный трек. Желаю удачи с алгоритмами в BASIC. Обучал, знаю.
Andy_Big
Это не взаимоисключающие вещи, а скорее взаимодополняющие. Сначала научить простому, а потом переходить к более сложному.
StanEgo
И как этот переход в BASIC будет выглядеть? "Доброе утро, котятушки. Вчера я вам показывал рисование круга на BASIC. Но этот язык настолько убогий, кроме строк и чисел ничего не поддерживает, поэтому сегодня начнём изучать новый".
Andy_Big
Бейсик поддерживает и массивы — первый шаг к структурам. И круг рисовать в нем можно не только через CIRCLE.
И почему все считают, что Бейсик тут отстаивается как самодостаточный функциональный современный ЯП? Это вроде никто и не утверждает. Бейсик — это просто трамплин в мир программирования.
Но может быть где-то у второклассников предмет информатики и начинается со слов «Доброе утро, котятушки. Мы не будем тратить время на всякую устаревшую ерунду, а начнем сразу с ООП и многопоточного программирования.» :)
StanEgo
Я сравнивал BASIC с Pascal. Так что вы ошиблись адресатом.
Я бы спросил, а куда делать следующий шаг, поскольку речь шла о массиве кругов. Но уже понятно, что с вами шагать очень долго. У детей темп намного выше))
axe_chita
Я аж воздухом поперхнулся. Как нет никакой
ложкирекурсии? Тысусликарекурсию видишь? Нет?! Аонона есть!third112
В ранних версиях Basic:
axe_chita
Речь в статье идет на об абстрактных MS Basic образца конца 70-х начала 80-х (коих MS наклепала изрядное количество), а о вполне конкретном QBasic версии 1.0 заменивший GWBasic в составе DOS. Версия DOS пятая, представлен в июне 1991 года.
И кстати, в начале-середине 80-х уже существовали версии диалектов BASIC с рекурсией, структурами, локальными переменными. ЕМНИП на BBC Micro.
third112
Получается, что мы говорим о разных языках.
axe_chita
Диалектах одного языка. Просто сильно отличающихся друг от друга.
third112
ИМХО это сложный философский вопрос: с какого момента диалект становится самостоятельным языком?;)
axe_chita
Qbasic вполне спокойно переваривает сырки GWBasic. QBasic перестает быть самостоятельным диалектом?
third112
Было много попыток перевести какой-то ЯП целиком на русский. И имена и ключевые слова. Аргументировали это тем, что в учебниках и методичках примеры содержат выражения типа «перейти на», «если то», и тупые ученики не понимают, что в проге надо набрать goto.
Такой ЯП будет диалектом? Американец может не понять «перейти на», а ЯП не только для машин, но и для человеков.
Думаю, что QBasic правильнее назвать самостоятельным языком, а не диалектом.
third112
PS Для естественных языков:Вики:
axe_chita
Для языков программирования, в отличии от естественных языков, существуют стандарты полностью описывающие язык.
Andy_Big
А потом кто-то нашел в корзине эти выброшенные попытки… Так и получился язык «1С» :))
axe_chita
Были такие попытки, лично видел Си++ с русскими служебными словами.Читаешь такой «русский» исходник, и ощущение что ты сейчас под психоактивными веществами. И посыл — «С него будет легче перейти на нормальный рабочий язык» считаю ущербным.
Если вы о Русском алгоритмическом языке (школьный алгоритмический язык) то он был введён в употребление академиком А. П. Ершовым в середине 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)
third112
Думаю, что привыкнуть к таким локализованным языкам учителям было сложнее, чем ученикам :) Такие языки диалекты? Если да, то сравнение диалектов не проще сравнения языков.
axe_chita
А все потому что даже стандарт Basic установленный ANSI, воспринимался как свод правил, а не руководство к действию.
third112
Да, грош цена такому «стандарту».
axe_chita
А какая цена ТурбоПаскакалю который изначально отличался от стандарта? ;)
Не будьте так строги, ведь они все соответствовали ANSI X3.60-1978 «FOR MINIMAL BASIC». А вот что они сверху налепили, это их творческое видение. %)
major-general_Kusanagi
пц! *фейспалм*
bolk
Как нет?
progopedia.com/example/factorial/32
static_cast
Это он с GWBasic спутал, — там была сквозная нумерация строк, а в паре GOSUB-RETURN требовалось указать адрес возврата.
third112
Я о версии, котрая была в MS DOS 3.2.
bolk
Не было его там. Он с пятым ДОСом появился.
third112
Извините, перепутал версии: не 3.2, а 3.3. Но в поставке для АН СССР был QBasic. Но это была спец.поставка.
axe_chita
Может вы QBasic со старыми версиями QuickBasic спутали? В сырках QBasic ЕМНИП все датируется 90-91 гг.
third112
Возможно. У нас в НИИ на Basic мало кто работал. Разве что дипломники, но и они больше на турбо.
axe_chita
Кстати о ТурбоВасике%) Лично наблюдал как он пакостил в сложной формуле. Знакомый учился на энерго, и у него в дипломе программа на ТурбоВасике делала какой то длинный расчет, с промежуточными результатами, их анализом, и по концове там зубодробительная формула на полстраницы должна была посчитать потраченную энергию. Делает он прогон с расчетными данными, а программа выдает «у вас на выходе энергия идет». Он с контрольными делает прогон где должен был ноль получиться, а там опять выход энергии. Включаем отладочную печать результатов, и с калькулятором на перевес все перепроверять. Всё бьется, кроме этой зубодробительной формулы. Проверяем её, всё норм, скобки на месте, операторы не перепутали, функции те что надо. Мистика… А побороть её надо!
Режем эту формулу на более мелкие части, присваиваем их дополнительным переменным, и о чудо, она стала считать так как надо. Судя по всему мы тогда дошли предела который мог разобрать парсер выражений, и тот вместо того чтоб послать нас упрощать формулу, обрезал её сам. С известным результатом.
third112
axe_chita
Нет, это баг или фича (кстати это мог так компилятор прооптимизировать) конкретной реализации Basic, в данном случае компилятор Borland Turbo Basic. И багафича вылезла в конкретном предельном случае с зубодробительной формулой, да и программа где она проявилась была далеко не учебная.
Кстати не факт, что она бы не вылезла бы в программе на Си, или на Паскале.
third112
Могло быть на Си, но Pascal 8000 for OS 360/370, сделанный в Австралийском атомном центре, тестировался на подобные баги. Когда компилятору не хватало памяти — он прерывал процесс и выкидывал сообщение. Это был не учебный компилятор.
third112
PS Думаю, что и учебный Виртовский Pascal-S сообщил бы о фатальной ошибке. Тут дело в принципе. В Basic пытались минимизировать «травмирующие» сообщения, а в Паскале наоборот. Поэтому Паскаль очень быстро перестал быть чисто учебным ЯП.
axe_chita
Вы так уверенно говорите? 10000 строк кода, это все таки 10000 строк. Наверняка в них есть темные места, где ждут своего часа неисправленные баги.
Еще раз повторюсь, я не знаю из-за чего было такое странное поведение. Парсер напакостил, оптимизатор кода, или было переполнение буфера, не знаю. В отличии от большинства компиляторов того времени, он не порождал ассемблерный листинг, только ЕХЕ и чайн-файл, а дисассемблировать их было не охота. Проблему то решили.
third112
Никто не может дать 100%-ую гарантию, но это был один из лучших инструментов, с которыми мне довелось работать (не учиться).
axe_chita
Чтоб не плодить воспользуемся ссылкой. ;)
bolk
GW-Basic — 1983
QuickBASIC — 1985
MS-DOS 3.3 — 1987
QBasic — 1991
anonymous
Рекурсия, несмотря на свою наглядность — антипаттерн. Так что её отсутствие в обучающем языке — скорее плюс, чем минус. В конце концов ребёнок научится её разворачивать и писать без рекурсий.
third112
ИМХО чтобы разворачивать, надо понять что такое рекурсия.
Структуру бинарных деревьев проще понять через рекурсивное определение. И операции с ними, следовательно, рекурсивные. А записать нерекурсивные можно, но для начинающего сложно и не нужно.
Alex061
Вот описание класса для бинарных деревьев, причем в обобщенном типе. В узле дерева данные хранятся в виде списка. На PascalABC.NET. Хотелось бы увидеть, как это выглядит на волшебном «живом» QBasic…
DMGarikk
ну так QBasic процедурный язык, а вы пытаетесь указать на то что он в ООП не умеет
но тем не менее, это вполне реально сделать и процедурными способами, но кода будет много, да.
p.s. и еще кстати вопрос, что будет полезнее, решить вашу задачку имеющимися инструментами, или тупо идти по учебнику ООП
Alex061
А это от цели зависит. Насчет «можно сделать» — так давно доказано, что три структуры — следование, выбор и повторение позволяют запрограммировать любой алгоритм. Что Вы подразумеваете под «учебником ООП» я не знаю. Язык изучают поэтапно. Особенно, если он мультипарадигменный. И в этом случае ООП — просто один из этапов изучения. Например, .NET-языки — они изначально ООП-ориентированные, в них любые типы данных — это классы. И запись 2.Sqrt эквивалентна записи Sqrt(2).
third112
// delphi
link = ^node;
node = record
left, right: link;
// something else
end; // record
(почему-то «исх. код» перестал работать)
Dario9000
В детстве попадался код ханойских башен для Бейсика. Рекурсия там делалась через массивы. Каждый массив хранит значения 1 переменной, а в подпрограмму передается индекс для выбора нужного значения. Можно задать максимальную глубину рекурсии, тогда как в Паскале и Си она ограничена размером стека, для изменения которого нужно разбираться с опциями компилятора.
Porohovnik
Первым надо изучать тот язык который тебе понравится.Уже потом в освоение других языков не возникает особых трудностей.Главное понять основную концепцию...
Вот например я,сначала попробовал джаву,и она мне очень не понравиласб,а вот C++ "зашёл" и показался мне очень логичным языком.
AADogov
А вот я не выбирал языки, что дали, то и осваивал. Чтобы язык понравился, нужно что-то в нем понимать. А как ты будешь понимать если еще ничего не умеешь.
Andy_Big
«Из незнакомых блюд следует есть то, которое тебе понравится» или «В рулетке надо ставить на тот номер который выпадет» :))
FSA
Может проблема не в сыне, а в папе, который не знает других языков простых так, чтобы суметь всё наглядно объяснить? Лично у меня не должно быть проблем с примерами на php. С большой долей вероятности, python тоже годится, но я его почти не знаю, так что и использовать для обучения не смогу.
lizarge
о боже зачем ребенку php показывать еще бы 1С предложили ))
не говоря уже о том что зачем ребенку вся эта хоботня с сервером браузером и всем прочим промежуточным стаффомFSA
Т.е. QBasic лучше по вашему? php хотя бы на современных компьютерах работает без эмуляторов, имеет свободную лицензию и для знакомства вполне хватит, т.к. он многое прощает. К тому же никто не заставляет на нём оставаться.
Kotofay
QBasic для Windows 10 можно установить из Microsoft Store, эмуляторы не нужны.
Arris
Ну если не учитывать, какой зоопарк нужно поставить, чтобы заставить PHP выводить в браузер что-то «без эмулятора»…
В общем, лучше QBasic.
P.S. И да, я пишу на PHP. Но ребёнка учить этому языку я бы не стал. QBasic я помню отвратительно (последний раз имел с ним дело на БК1001), поэтому я взял бы… ага, Паскаль.
P.P.S. Или FORTH (но это для ребёнка постарше, 12+ лет, так скажем)
mistergrim
tempick
Ну вообще, для работы с PHP вообще необязателен браузер, это не HTML. Код можно просто запускать из консоли вроде «php hello-world.php», и выводить в коде в консоль значения — тоже не проблема ни разу.
Arris
Можно. Но смысл? В этом случае PHP лишается всех своих преимуществ (по сравнению с любым другим исполняемым в консоли языком). Даже чтобы вывод раскрасить, нужно применять ESCAPE-последовательности, а не HTML-теги.
Да, можно написать конвертор (я так и сделал), но согласитесь, это уже не уровень Hello, world :)
tempick
Да я не спорю) Просто констатировал факт, что браузер вообще необязателен. Особенно, если это не связано с сайтом. Я вот, например, часто парсеры делаю на нём и запускаю из консоли, зачем мне запускать их из браузера?
Ну а если захотите написать, что для этого надо использовать не php, а какой-нибудь пайтон, то не нужно пожалуйста. Мне удобно это делать на php, и я делаю это на php
Arris
Я хочу написать, что PHP все таки не язык для обучения. Да, можно. Но есть варианты лучше. Проще, так скажем.
Да делайте свои парсеры на чем хотите. Хоть на PHP, хоть на баше, хоть на Object REXX.
tempick
Та я вообще ни слова не сказал, что он хорош для обучения.
OnYourLips
А какой, если брать современный PHP, а не что-то там давно не поддерживаемое из истории?
tmin10
Сам php самодостаточен, но для браузера ему нежен вебсервер. Хотя можно найти WAMP сборку и успешно её использовать.
OnYourLips
В PHP давно есть
php -S
, который прекрасно работает вне продакшена.Arris
Под виндой тоже? (много лет не пользуюсь PHP под виндой, просто не в курсе)
OnYourLips
Да, более девяти лет назад.
Более того, под виндой еще и WSL есть.
bolk
Я конечно понимаю, что к ПХП много хейта, но если серьёзно, чем он плох для обучения-то?
Причём тут браузер только неясно, он безо всякого браузера нормально работает.tmin10
Изучил PHP по книжке своим вторым языком после паскаля из школы. Ничего, жить можно.
koldoon
У ребенка конкретный запрос: «хочу написать игру». Судя по контексту, ему нравятся старые платформеры, это для него как эталон сейчас. Ну и где Марио и где php и python? :) QBasic в данном случае весьма неплохое решение. Там очень просто «завести» графику с довольно стандартным набором команд, там есть спрайты и вообще все, чтобы написать тот же Марио. Следующим шагом можно порекомендовать разве что Pascal. Единственное, наверное, к чему можно придраться — это консольная IDE: все же авто-дополнение и оконный интерфейс с более высоким разрешение не помешали бы (хотя не помню, чтобы меня это раздражало тогда)
INSTE
Вот в современном виде
0x131315
Так давно существует отличная обучающая среда pascal ABC. Кажется даже с неким подобием IDE. И оно похоже еще живое: pascalabc.net
Т.е. и на паскале вполне себе удобно можно жить.
Ну а далее все стандартно: C/Cpp, java, и понеслась. Там дальше уже алгоритмы рулят, а не конкретный язык. Конкретный язык каждый уже под себя и свои задачи выбирает.
И ещё хорошо бы параллельно заглянуть в мир ассемблера, почитать «Код — тайный язык информатики» (https://habr.com/ru/post/68365/)
AlexeyALV
Тогда лучше взять бесплатный Godot и писать скрипты там.И в перспективе полезнее.
Yuuri
Или Game Maker Studio, у него порог входа пониже. GMS 1 бесплатен.
zhellion
Подсуньте ему игровой движок. Unity, cocos, ue. В крайнем случае посадите на opengl. По крайней мере он сможет быстро найти туториал или ответ на свой вопрос. Писать игры на байсике - сейчас мне кажется это наркомания для опытных, ибо принесет много боли, а профита будет не очень и много.
static_cast
Ага. Долбаните его сразу графом сцены, шейдерами, мешами и матричными преобразованиями, чтобы понял, что не все в жизни так просто. Все-таки, обучение должно идти более-менее плавно, а весь этот продвинутый бойлерплейт может только оттолкнуть начинающего.
Peacemaker
Простая 2D игра на Unity делается без всего того, что Вы перечислили.
sleepyNepeta
Game Maker ещё :) для ребёнка - самое то, имхо.
Gaikotsu
OCTAGRAM
Я бы подсунул SDLAda
AllexIn
Не понятно. Наверно в этой ситуации Паскаль подошел бы лучше. У него практически все теже преимущества и нет ряда недостатков бейсика.
А еще лучше Lua — можно было бы делать моды для того же майнкрафта.
DMGarikk
каких же?
third112
См. Вики:
Там еще много примеров для ранних версий, теперешний VBA — это другой язык, как и поздние версии фортрана сильно отличны от фортрана-4.LuchS-lynx
QBasic поддерживал нумерацию строк, но обходился и без нее, а метки можно было ставить не только цифровые, но и строковые.
third112
Про какую версию Вы говорите?
LuchS-lynx
Как про указанный в статье QBasic, так и про QBasic 4.5, посмотрите скрины в статье, там нет нумерации строк.
DMGarikk
удивительно что вы goto не вспомнили, версии с нумерацией строк безнадежно устарели уже в конце 80х, когда в бейсике появились полноценные функции и процедуры.
Stac
То о чем вы пишете относится к редактору, а не к языку.
Вот у нас сейчас в каждом нормальном редакторе и IDE есть нумерация строк для любых языков :)
Не слышал, чтобы кто-то про это сказал что-то плохое :)
0x131315
У паскаля все таки порог входа немножко выше.
Он более строг, плюс, насколько помню, нужно иметь понятие о библиотеках и подключать их.
third112
ИМХО выучить может чуть сложнее, а учиться будет проще.
vkni
Сначала можно просто писать «магический пролог программы».
SKProCH
Моды для майнкрафта пишутся на Java. Да и в принципе написание хоть сколь-нибудь что-то делающего мода — задача достаточно нетривиальная, новичку разобраться в ней будет крайне сложно.
AllexIn
Несмотря на то, что основным языком Minecraft является Java — возможность писать моды на Lua есть. Инструментарий довольно обширный.
Ну и по второму пункту с вами не соглашусь. Моды — это возможность влезть в крутую игру, которая тебе нравится и которая тебе интереса и поправить что-то в ней. Эмоционально это другой уровень. А сложность не больно-то отличается от hello world. Дело в том, что совершенно не обязательно сразу бросаться в написание сложнейших модов. Все начинают с правки простых вещей. Изменить параметр, поменять поведение какого-то предмета и т.п.
Эффект втягивания в процесс гораздо круче. Потому что вот написал Hello, world… И что дальше? Ну еще игру можно написать «угадай число» и всё. Дальше уровень сложности растет значительно. А на выходе всё равно черная консоль.
В модах же много чего можно сделать на начальном уровне. При этом вокруг уже готовый сложный код, который можно анализировать. При этом любая правка она формата: в большой крутой игре работает мой код!
Andy_Big
На несколько порядков отличается. Чтобы сделать хоть какой-то мод, нужно уже уметь программировать, знать что такое API, соглашения о вызовах, типы переменных и многое другое. А в случае с Java — еще и знать об ООП.
AllexIn
Чтобы сделать мод достаточно поменять константу(любую). Для этого не нужно ничего из перечисленного вами.
Andy_Big
То есть я открываю блокнот, пишу «Константа := Вася» и получаю готовый мод?
chnav
Это не другой уровень — это следующий уровень.
Прежде чем думать абстракциями и ООП хорошо бы пощупать «кирпичики» компьютера, для чего BASIC очень даже неплох. Так проклинаемый всеми GOTO как раз отражает настоящее поведение процессора, в котором JMP является неотъемлимой частью (на язвительные замечания про ассемблер скажу — всему своё время). А экран DOS максимально приближает к железу, человек начинает понимать, что графика и GUI — это тоже следующий уровень.
SKProCH
Основных ModAPI для майнкрафта, по факту, 2 — Forge и, с недавнего времени, Fabric. Оба используют для написания модов Java.
Писать что в майнкрафте на LUA можно только в одном случае — это компьютеры из OpenComputers/ComputerCraft (так-же я нашел некоторые упоминания пары модов, который интерпретировали вводимые в консоль LUA команды, но, судя по всему они все давно заброшены, да и по факту это скрипты, а не моды), но тем не менее на выходе получаешь всю ту-же "черную консоль" (Мы сейчас не будем говорить про MineOS и что-то подобное, ибо начинающий не будет писать свою графическую подсистему, как минимум), но при этом у тебя нет ни нормальной IDE, ни отладчика, да и API у них немного странный.
Поэтому простой ответ на вопрос — можно ли писать моды для майнкрафта на LUA — нет, нельзя.
Что поменять поведение уже, скорее всего, понадобится ASM.
Ага, конечно. Для начала нужно вдумчиво покурить мануалы и доки по Forge/Fabric (не надейтесь на хорошую документацию), потом покопаться в API и найти что же нужно изменить для получения желаемого эффекта.
В итоге чаще всего большинство останавливается на каком-нибудь простом добавлении своего блока/предмета, ведь что бы сделать что-то большее зачастую нужны уже глубокие познания в API, ООП и многое другое.
alliumnsk
Есть кстати QBasic 64 https://www.qb64.org/
Stac
А для прода — XOJO www.xojo.com (включая, desktop/web/iOS)
А для микроконтроллеров — mmbasic.com
miga
Кроме шуток, я вот недавно собрался кой-чего процедурно порисовать, и с удивлением обнаружил, что QB — это, наверное самый быстрый способ нарисовать на экране точку или линию, нужно ведь только две строки
Все эти JS с канвасом, всякие love2d, SDL и прочее — это, конечно, круто, но, блин, бойлерплейта вокруг будет на порядки больше
INSTE
Вон есть pascalabc еще, там тоже элементарно
vkni
Там нужно написать вот эти 4 строки:
То есть, скрипт должен содержать хотя бы 8 строк рисования для того, чтобы эти служебные строки были несущественны.
Alex061
У Вас старые сведения. Сейчас в PascalABC.NET нужна только одна строка:
## uses GraphWPF // ну или GraphABC, если нужно старье
third112
А в турбо Паскале была черепашья графика. Наверное, самый простой подход для начинающих.
Dario9000
В QBasic для черепашьей графики есть оператор DRAW. И еще 1 похожий — PLAY для проигрывания музыки.
Alex061
В PascalABC.NET есть и Черепашка, и Робот.
Karpion
Попробуйте BBC-basic. Правда, он платный; есть демо-версия с ограничением по доступной памяти. Нарисовать точку там те же два оператора.
Yuuri
Хаскель с библиотекой Gloss:
min0ru
Удивительно, что ни кто еще не вспомнил про Processing. Мало того, что он создан именно для таких целей (минимальный boilerplate для рисования), так еще реализацию под Java, Python и JavaScript и даже что-то под Android. Поддерживает ввод, легко реализовать, например, рисование мышью, таймеры и даже вроде 3D.
Примерный вид аналогичного кода на Processing:
Alex061
Ну и? Вот PascalANC.NET:
Krasnoarmeec
Лучший язык для обучения, по-моему, всё же JavaScript (сам пишу на C#/VBA).
Плюсы:
Минусы:
major-general_Kusanagi
Для самого первого языка программирования — это критичный минус. :(
Никаких нормальных отладчиков для java-script разве нет?
tmin10
Хм, нажал F12 в Firefox, наблюдаю отладчик для JS. Можно ставить брейкпоинты, смотреть значения переменных, выполнять код пошагам и т.д. Вполне полноценная отладка.
kaichou
А теперь попробуйте первокласснику объяснить понятие «брейкпоинт».
tmin10
Я отвечал на пункт про сложность отладки JS.
У первокласника программа будет в разы проще и скорее всего будет отлаживаться вдумчивым чтением или максимум выводом на экран. Из своего школьного опыта даже не припомню отладки программ, всё там работало или исправлялось и работало.
mistergrim
У MS есть (заброшенный) Small Basic. Позволяет работать как с консолью, так и с графикой, имеет черепашку, запускается с удобным редактором со встроенным хелпом и даже умеет запускать написанное через F5.
LuchS-lynx
у QBasic тоже все это есть
mistergrim
И половины нет (ну вот сможет QBasic одной командой загрузить файл из сети?). Не говоря уже о том, что QBasic папа подсунул ребёнку по своим ностальгическим соображениям, а для ребёнка лучше было бы всё же начинать сразу делать что-то под современной системой.
LuchS-lynx
не согласен, потому что для того что бы объяснить принципы, что бы ребенок понял их чем проще, тем лучше. Когда ребенок поймет логику формирования программ и блок-схемы, циклы, ветвления, математику, т.е. принципы. уже можно будет переходить к чему-то более сложному и продвинутому.
QBasic многое может, это простой и в то же время гибкий язык, да со своими ограничениями и под DOS, однако его диалекты под Windows имеют больший функционал и там уже можно делать то о чем Вы пишите. А вот нужно ли? Это зависит от задач. Каждый инструмент для своей задачи
OCTAGRAM
Моя подпись в письмах гласит: If you want to get to the top, you have to start at the bottom
Переходил с QBasic на Turbo Pascal, и там дорвался до ассемблерных вставок. Помню, изучал: вот есть mov для чисел, а есть stos и lods, s = «строковые» инструкции. Для чисел и для строк, видимо. Какой же был шок узнать, что процессору как муравью нужно всю строку облазить, чтоб что-то с ней сделать, и эти «строковые» инструкции не для всей строки, а для шажочка по ней.
Вот эти современности рискуют закамуфлировать ещё больше деталей
Dario9000
Халтура. Там даже свои функции определять нельзя.
INSTE
Ноа? Really? Шутка такая? Что же за переводчик такой, который не знает, что в русском языке это имя звучит как «Ной»?
SergeyMax
А имя «Michael» на русском звучит как Михаил?
ardraeiss
Оно и как "Михаэль" может не звучить. Например, если это француз("Мишель"), или криво записанный Mikhail(англоязычные регулярно пытаются сказать "Микхаеэль").
Тем не менее, Abraham Linkoln на русском языке… Авраам. Библейские имена они такие, с историей звучания.
Так что да, мальчик из статьи может быть записан и как "Ной".
INSTE
Может и так, может и Майкл. Но не Мишаэл же? Впрочем в этом переводе можно и Миша назвать, художественный текст он такой.
SergeyMax
Ну это зависит от грамотности перевода, в некоторых случаях можно даже горшком назвать, и в печку поставить) Но англоязычное имя Ноа вместе с еврейским Ной оба вполне валидны для русского языка. На мой слух по крайней мере.
anonymous
Все бы ничего, но смущает тот факт, что имя библейского Ноя на английском пишется именно как Noah. Не то, чтобы Википедия была каким-то незыблимым авторитетом, но в данном случае, думаю, показательно:
Ноа (ивр. ???????, ???????) — женское библейское имя. Кроме того, так в русской транскрипции выглядит английский вариант мужского библейского имени Ной (Но?ах, ивр. ???????, англ. Noah), не имеющего отношения к женскому.
SergeyMax
Ну, а чо дальше не зацитировали?))
perfect_genius
Странно, что не через Майнкрафт.
DmitryKoterov
В средах программирования для Майнкрафта (например, CodeKingdoms) нереально высокий уровень абстракции. Нужно продраться сквозь очень много всего, чтобы понять, как оно на самом деле работает (а не получить лишь иллюзию понимания).
perfect_genius
А как же всякие калькуляторы и компьютеры, у которых видные все логические цепочки? Это уже слишком низкий уровень?
dikey_0ficial
> Если бы он мог обменять всю свою семью на два часа игры в Minecraft, то сделал бы это без раздумий.
«И да, ещё я не умею правильно расставлять приоритеты»
Metotron0
Когда я писал на qbasic, нумеровать строки там было не обязательно. Он у меня ещё остался, могу посмотреть версию. И справка там большая, с гиперссылками.
Блокнот я бы не назвал маленьким. Разве что автор пользуется A4-блокнотами.
Metotron0
Посмотрел, IBM DOS QBasic, Версия 1.0 (русифицированная), номера строк не обязательны, справа есть по каждому оператору и фунеции, описываются все параметры функции, даётся пример использования, а внизу — ссылки на похожие функции. Я по ним язык и изучал.
diakin
FreeBasic, RapidQ Basic… Microsoft Basic PDS 7.1
QB4.5 не лучший вариант.
axe_chita
Тогда к этому списку надо добавить последний BASIC под DOS от Microsoft, VB for DOS.
Stac
RapidQ я бы сейчас вспоминать не стал (разве что пустить слезу в минут молчания; писал на нем несколько лет).
Из живых, самый активный, наверное Xojo (наследник Real Basic). До пандемии по нему даже конференции в штатах и Германии собирались.
:)
diakin
Если бы Уильям не продал исходники RapidQ в RealBasic, а довел бы язык до релиза, RapidQ вообще цены бы не было ) Но и в таком виде он пригоден для многих вещей. Требующие быстродействия части можно реализовать в виде dll на FreeBasic. А RealBasic что-то совсем не зашел.
liss8608
Когда-то пробовал довольно забавные вещи — DarkBasic и BlitzBasic, он же сейчас Blitz 3D. Оба языка интерпретаторы и оба имеют свой 3D движок и операторы управления объектами матрицами и прочим матаном. Но делается это довольно просто.
arvi1973
Вы просто не пробовали SmileBASIC 4 для Нинтендо Switch.
Там сохранено всё из прошлого века, о чём вы написали. И бережно, с любовью развито до современных технологий. Ребёнок сможет писать современные игры на своём первом языке программирования.
www.nintendo.ru/-/-Nintendo-Switch/SmileBASIC-4-1763115.html
www.petc4.smilebasic.com/?lang=en
Dario9000
О, ради такого стоит купить Switch…
Geograph
Сегодня есть много языков визуального программирования, когда код писать не нужно — просто составляешь логику из кубиков. Для детей самое подходящее.
Pand5461
Автор вот пишет, что посмотрел Scratch — и решил, что Basic лучше.
Я тоже не понимаю, почему — там и набор спрайтов из коробки, и игры кто-то на нём вполне пишет.
Подозреваю, это собственный синдром утёнка у автора, а ребёнка, очевидно, никто не спрашивал.
axe_chita
Главной претензией к QBasic должно быть не yfkbxbt GOTO, а отсутствие в нем Option Explicit, которой реально не хватало при разработку больших программ.
VeryImportantVariable=0
AnotherImportantVariable=funcCalcValue(i)
For i=0 to 9
AnotherImportantVariable=funcCalcValue(i)+i
VeryImportantVariable=VeryImportantVariabel+AnotheerImportantVariable
NEXT i
Чему будет равна VeryImportantVariable по окончанию цикла?
Metotron0
Полагаю, ничему хорошему, потому что AnotheerImportantVariable не определена :)
А у числовых переменных на конце не должен знак процента стоять?
axe_chita
А вот и нет ошибки (синтаксической) не будет, встретив неопределенное слово QBasic создаст новую переменную с этим именем (по умолчанию вещественная двойной точности) и проинициализирует её нулём.
А суффиксы %(целое) &(длинное целое) !(вещественная одинарной точности) #(вещественная двойной точности) $(строка) родимое пятно из прошлого, допустимы, но не обязательны. Но в случае объявления переменное через DIM, ЕМНИП суффиксы типа переменной в имени запрещены.
А VeryImportantVariable по окончанию цикла будет равна нулю
Metotron0
Я не писал про ошибку, я писал, что не будет ничего хорошего. Конечно, смотря что считать хорошим, но как минимум тесты не пройдут :)
axe_chita
О том и речь, что отсутствие в QBasic требования предварительной декларации переменных, плюс создание новых переменных по умолчанию, создавало ситуацию при котором логическая ошибка из-за опечатки может очень долго прикидываться веником.
Metotron0
У меня такое и с JS бывает
axe_chita
;) Well, nobody perfect
BiW
Ой, да ладно. Многие моего поколения начинали c бейсика ZX-spectrum. Олды вспомнят еще советские разработки «чертежник» и «робот», предназначенные для обучения школьников основам алгоритмизации и использующих собственный бейсико-подобный язык с конструкциями вроде
Огромным плюсом бейска является его кристальная простота и схожесть конструкций с английской речью. А если уж ребенка кодинг заинтересует, то рано или поздно он перейдет на другие языки сам, ведь бейсик не сможет обеспечить его возросших потребностей.
Но заставлять 5-ти летнего ребенка разбираться с java/rust/go, когда этот ребенок еще сам не знает, интересно ли ему это в принципе — это самый лучший способ отвратить его от программирования.
LibrarianOok
Можно просто скачать TIC-80, но придётся учить Lua за 15 минут.
genuimous
7 лет уже не мало все ж таки. Ну а так паскаль — классика. Но его компилить надо. Интерпретируемый из старого perl — хоть и аццки упоротый язык, но по-простому там тоже можно. Мне кажется, паскаль лучший для изучения. Там сложность главная в том, что не поддерживаются переменные не в блоке declare. Но это же именно для обучения и сделано, чтобы ошибок меньше плодить.
OCTAGRAM
В Delphi 10.3 уже добавили, правда, ключевое слово почему-то взяли не declare
AADogov
Лично я несколько раз пытался научить своих детей программированию, но спотыкался на самых первых этапах, когда пытался объяснить зачем ему это всё нужно. Написать более-менее играбельную 3D игру мы все равно не сможем, а другие игры его не впечатлят заинтересуют.
Деньги тоже слабый аргумент в этом возрасте, да и не факт что он сможет зарабатывать программированием.
В наше время сам компьютер вызывал столько интереса что не важно что на нем делать, было все равно интересно.
genuimous
В школе графики функций рисовать было удобно (особенно на том же бейсике), что облегчало изучение метаматики. Но щас-то есть готовые инструменты для этого. Мне кажется, и правда, незачем. Толчком к программированию было сделать что-то такое нужное. Сейчас все что нужно в основном уже переделано по 10 раз.
DonAgosto
Не сочтите за рекламу, но порекомендую курс программирования на Учи.ру
Суть заданий — управляем персонажем на экране с помощью кода на Python. Типа провести робота по маршруту и собрать все клады, избегая ловушек, отсортировать вагончики в поезде, перемещая стрелки на путях и тп. Ветвление, циклы, стеки, минимальный ООП («сахар» в виде доступа к методам через точку), даже некоторая многопоточность с сигналами и семафорами. Редактор кода с подсветкой синтаксиса, автодополнением и выделением текущей исполняющейся строки. Лет для 7-10 самое то.
HellWalk
Ага, ага, сложности (точнее не просто сложности, а практически непробиваемая стена) возникнет тогда, когда захочется сделать что-то серьезнее, чем «Hell World» или калькулятор.
Нам в техникуме давали изучать QBasic, ассемблер и паскаль, и меня действительно тянуло на программирование, и я действительно пытался написать свою игру на QBasic. Но… это невозможно.
В итоге провозившись какое-то время, плюнул на это «программирование», как на какую-то неведомую сложную хрень, и вернулся к программированию только в 30 лет, потеряв, по сути, 10+ лет на другие работы/специальности.
Конечно, когда есть папа-программист, он сможет ответить ребенку на вопрос «пап, а как на этом QBasic сделать свою MMORPG?» предложив взять язык попроще (да, именно попроще), с уже готовыми библиотеками под это дело. Но когда человек изучает программирование в одиночку, говорить что QBasic хороший язык программирования для начала — киньте в него что-нибудь тяжелое, за меня.
LuchS-lynx
Почему невозможно? Аркаду там, клон Сокобана или Batty без проблем, я уже молчу про графический редактор или редактор спрайтов… А если учесть что на диалекте Sincair Basic для ZX Spectrum столько игр написано…
Передо мной, в 1997м году нас в школе ребята написали редактор спрайтов, а потом в 1999м при помощи студента-выпускника нашей школы, была написана программа, которая подгружала спрайты — их можно было расставлять по экрану, можно было рисовать и потом это все сбрасывалось на диск, программа создавала программу на бэйсике, которая подгружала спрайты и фон и все это анимировала. Это возможно, весь вопрос в том, что такие вещи без работы с памятью и адресами в памяти не делаются… Это уже продвинутый уровень…
HellWalk
Я говорю про практичность. При желании, конечно можно. Конце концов, ничто не мешает изобрести свой C, потом C+, потом C#, а потом уже на нем сделать свою игру.
Другой вопрос — на сколько это будет увлекательно, и сколько времени в итоге займет, чтобы создать свою игру (и опять же, не примитив, а что-то более навороченное, с мультиплеером).
В свободное от работы время пилю свою MMORPG — то, что за 5 лет сделано на php, на QBasic ушло бы 5 жизней.
LuchS-lynx
Бэйсик это не про сеть, хотя можно заморочиться, локальные игры, в принципе, сделать можно. На сколько помню Caesar III был написан на С…
MMO пишется на других языках, в то время когда создавался и использовался QBasic популярны были другие игры и в других жанрах и почти без сети (в те времена под сетью подразумевалась локальная сеть или подключение через dial-up модем)
Dario9000
А в Unity, кстати, VB.NET поддерживается? Можно тогда и клиента для MMORPG попробовать.
LuchS-lynx
не готов сказать, я завязал с программированием игр со времен MS DOS 6.22, т.е. примерно в 1999м… когда еще учился в школе. Unity поддерживает Visual Studio, т.е. надо пробовать. В то же время я знаю, что VB позволяет обращаться к DirectX 3D, т.е. формально на нем можно будет наваять 3D картинку или даже игрушку, другой вопрос на сколько это будет легко сделать.
kaichou
axe_chita
Навскидку вот тут игры на QuickBasic
Или проигрыватель adlib s3m
Как говориться, немного терпения и прямые руки.
t3hk0d3
Я тоже начинал с QBasic, в 13 лет, в Городском дворец творчества юных.
Тогда моя жизнь и покатилась под откос :)
Он вызывает очень теплые ностальгические воспоминания.
Но я все же считаю что Python или Ruby для обучения детей программированию подойдут лучше.
Вопрос только в среде (IDE / библиотеки).
Например Ruby Warrior моему племяннику очень зашел. Оно не только гораздо интереснее и интерактивнее, но и обучает современным парадигмам программирования.
peacemakerv
Прикиньте, а я до сих пор пишу на диалектах «Васик»-ов…
Как и всю жизнь с 1992 года, на различных диалектах и от различных разработчиков. И под x86 Win, и для телефонов с JavaME, и WinCE, Mobile, и немного Linux, и Android. Вот только под «яблоко» не пробовал.
И до сих пор нравится, вот такой я динозавр :)
LuchS-lynx
А какой сейчас самый современный и продвинуты диалект Бэйсика под Винду?
peacemakerv
Не знаю, я пользуюсь b4x.
axe_chita
А что от него требуется? ;)
LuchS-lynx
Ну, скажем, тот же QBasic позволяет работать с памятью, с графикой, с файловой системой и файлами, есть доступ к консоли… в VB 6.0 я видел как паренек написал аркаду через directX (правда в коде я не копался), на сегодняшний момент я пишу на VBA в Excel'е и что мне точно не хватает, так это вынести весь код в dll, для того что бы с одной стороны защитить некоторые находки от копирования, а с другой стороны хотелось бы как-то подумать и о бэкэнде, часть вещей хотелось бы перенести в БД, сделав MS Excel лишь фронтом, т.к. в этом он очень хорош… Ни одни формы не сравнятся с удобством таблиц по механике копирования/редактирования и навигации. С другой стороны как организовать двунаправленный вводо-вывод через листы MS Excel'я я ХЗ…
axe_chita
А если взглянуть на FreeBasic?
Новые возможности и расширения
Поддержка библиотек функций прикладного программирования
LuchS-lynx
Спасибо, выглядит интересно, нужно тестить
axe_chita
Пожалуйста, надеюсь подойдет под ваши задачи;)
DMGarikk
а помоему можно сделать dll в vb6 и подцепить в vba, или нет? (уже лет 20 в руки шашку не брал)
Dario9000
В VBA можно создавать ActiveX объекты, работать с COM. Насколько помню, произвольные DLL использовать нельзя.
Stac
Скорее всего, Xojo. Но он не столько под винду, сколько кросплатформенный.
Но он коммерческий.
LuchS-lynx
а демо версия у него есть?
Stac
Раньше была. Но я давно не смотрел, похоже сейчас у них какая-то другая схема — написано на сайте, что разработка и тестирование бесплатно. Сдается мне, что эта демоверсия просто не будет собирать исполняемый файл без оплаты.
Dario9000
Если он коммерческий, то чем лучше бесплатного Free Basic? За что нам предлагается платить?
Stac
Наверное, за то, что его пока не закапывают (отсылка в вашему другому комменту).
Я Xojo не использую, просто слежу за ним… рассылку они с новостями и обновлениями присылаю, на конференции зовут… на случай, если понадобится написать что-то продвинутое на бейсике подо все платформы :)
Dario9000
Для Винды, разумеется — VB.NET, но сейчас Microsoft его закапывает.
Упомянутый выше Free Basic неплох, кроссплатформенный, работает с библиотеками, может использовать OpenGL.
Это из открытых, всякими же коммерческими проприетарными поделками вроде Pure Basic или Dark Basic нет интересоваться никакого желания, как и поддерживать их авторов (наглых бессовестных быдлокодеров-барыг, наживающихся на нашей ностальгии).
LuchS-lynx
Dario9000
Ну вы просили самый продвинутый, он и есть. По факту C# с другим синтаксисом… А из простых — Free Basic и QB64.
LuchS-lynx
Спасибо ;)
anonymous
А почему первый не Logo?
А еще есть BASIC в железе — проект Colour MaxiMite 2.
Stac
Дополню ссылкой, вдруг, кто заинтересуется: geoffg.net/maximite.html
По слову «maximite» на Хабре можно несколько статей найти.
Dario9000
Logo слишком примитивен, весь его функционал описывается оператором DRAW в Бейсике. По воспоминаниям тех, у кого он был в школах — никому не нравился. Рисовать фракталы скучно. А вот на Бейсике можно писать и простые игры, и небольшие программы для личных целей. Многих именно Бейсик (будь то синклеровский, MSX или QBasic) привел в мир программирования.
Хотя я когда-то пытался делать расширенную версию Logo, интегрированную с игровым 2D движком. Вместо черепашки там были спрайты. И даже какая-то стрелялка на ней получилась (клон Space Invaders). Но потом понял, что Lua уже написана.
major-general_Kusanagi
Смысл ЛОГО в том что он обучает ФП.
По любому, помимо учебных языков с процедурным программированием и ООП, нужен какой-нибудь учебный язык с ФП.
androidt1c
Прекрасный язык для обучения. В детстве, у бабушки в деревне, часто доставал тетрадку и писал программы на бейсике в ней (компьютера в деревне не было).
И в 90х на бейсике сдавал вступительный экзамен по информатике в ВУЗ (тоже на бумажке).
Alex061
Из того, что когда-то ездили в карете, запряженной лошадьми, вовсе не следует что и сейчас удобно поступать так же.
starosta6123
Да, Бейсик первый язык :-)
kisskin
Ну вообще-то, Паскаль был бы не сильно сложнее для изучения
zuko3d
Каким образом QBasic лучше, чем Python? Может кто-то назвать хоть одно преимущество?
Dario9000
Бейсик до сих пор вызывает ностальгические чувства, прямо как ролики Кинамана. В детстве писал и на Sinclair Basic (ZX Spectrum), и на QBasic, и на Visual Basic 6… В начале 90-х это был хороший вариант для обучения программированию. Вопреки известной цитате Дейкстры опыт на Бейсике не помешал впоследствии освоить Паскаль, Си, Ассемблер, Форт и Лисп в том же детстве, до окончания школы. Разве что C++ совершенно не понравился своей искусственно раздутой сложностью, потому был адептом Delphi, а потом ушел на Java и Linux.
Но нужно признать, время Бейсика (как и Паскаля со всеми его клонами вроде Oberon и Lazarus) ушло безвозвратно. Тогда нас радовали домики, нарисованные оператором DRAW, а уж собственноручно набранные «Змейка» или «Арканоид» вообще казались чем-то невероятно крутым. Современного школьника это вряд ли впечатлит. Да и программирование с тех пор далеко ушло вперед, сейчас балом правят ООП и ФП, а не QBasic с процедурами и структурным программированием. На мой взгляд, сейчас самый лучший язык для обучения детей — Go. Не знаю только, есть ли для него более простые и дружелюбные IDE, чем JetBrains GoLand. Все-таки простота и интерактивность QBasic и Sinclair Basic играли свою роль.
Stac
Как иронично. В Go есть правящие ООП или ФП?
Сам-то я Go не знаю, иначе бы не спрашивал.
Dario9000
ФП есть, на уровне лямбда-выражений как минимум. ООП нестандартное (как в Обероне, записи с методами), не похожее на C++/Java/C#, но основные концепции объяснить можно.
0xd34df00d
Лямбды — это ещё не ФП, а то ФП у вас нынче в почти в любом языке есть, и проще будет сказатЬ, где их нет (кроме С тут ничего не приходит в голову).
Stac
Те, кто тут ругают BASIC (не важно какой и не важно за что), вы всё не так поняли и вы не правы!
Это говорят вам авторы языка. Точнее говорили аж 1985 году. Тогда вышла книга "Back to BASIC: The History, Corruption, and Future of the Language" (продается на Амазоне) — книга-оправдание от Кемени и Куртца.
Это довольно странно: из-за популярности 8-битных домашних компьютеров появилось много реализаций Бейсика разной степени ущербности и отступления от канона. Через которые критика полилась на Бейсик как таковой.
Причины — в ограниченности железа того времени, доступного энтузиастам.
Оригинальный-то Бейсик работал на мэйнфрейме и обеспечивал, между прочим, возможно, впервые в истории, многопользовательский REPL (если можно так сказать), ну или терминальный доступ
.
Интересующиеся найдут больше, погуглив «системы разделения времени» и Dartmouth Time Sharing System.
От себя хочется заметить, что сейчас мы живем в мире, в котором большинство программистов изучали Бейсик. Нравился он или или нет. Понятно, что все пошли дальше и пишут на других языках. Кто-то вспоминает о своем опыте с теплотой, кто-то вообще не способен осознавать свой опыт. Так или иначе, на ИТ мир не так уж и плох :)
И Бейсик где-то вначале причинно-следственной цепи.
Каким был бы мир без Бейсика? Полным перфокарт и перфолент… не хочется и думать о таком.
Каким будет мир без Бейсика? Подождем, пока вырастут и заматереют те, чей первый язык Python, Java или JavaScript, и увидим. Осталось недолго. Кажется, западный мир придет к этому раньше и у нас будет пара лет (может меньше), чтобы подготовиться.
Что-то нет у меня никакого хорошего предчувствия.
:-)
0xd34df00d
Моим первым языком был JS — в этак 2001-м году у меня не было доступа ни к какой другой среде, кроме браузера, поставлявшегося с ОС. Не могу сказать, что результат какой-то плохой.
Stac
Речь, конечно не о вас конкретно :)
А скорее о том, что операционки, весь системный и популярный прикладной софт написан еще теми людьми, которые в массе проходили ± Бейсик -> Паскаль -> Си ->….
csl
Такая же ситуация была с браузером на Windows.
panchenco
QBasic просто очень плохой вариант и уютненький он только для автора, для меня он был очень большим разочарованием, когда я понял в детстве что не смогу реализовать свою задумку даже при огромном количестве желания, а сейчас так я совсем не понимаю зачем пользоваться этим мамонтом, всему свое время же. Для начала нужно, что-то красивое, что-то с графическими возможностями, и при этом простое. Был же какой-то small basic например, и подсказки там вроде были и примеры, я даже на нем пятнашки помню написал из интереса и арканоид. QBasic это ДОС, это нет нормальной поддержки файловой системы, это проблемы с кодировками, это нет графического интерфейса, это маленькое рабочее поле текстового редактора итд.
А взрослому человеку, который решил стать программистом, я бы посоветовал начать знакомство с программированием с языка Си, всё очень просто, нет сложных структур данных, никаких абстракций и очень близко к компьютеру, и самое главное тебе понятно как примерно работает твоя программа.
Maxim78
Написали с сыном (9 лет) идентичную программу на питоне. Я не программист, но мне кажется PyCharm дает такое же понимание для новичков. QBasic вижу впервые, но без труда узнал код своей простенькой программы. Очень приятно видеть понимание в глазах у ребенка, и шок от охвата потенциальных возможностей. Думаю автор не прав — зачем трогать древние IDE, если современные обеспечивают теми же возможностями, без необходимости, в последствии, привыкать к новой оболочке. Интерес ребенка сложно удержать, когда придет время сказать, что в современном мире программисты используют другие инструменты, на их освоение может не остаться интереса.
yuri2
Хоть я и не очень понял, чем для такого python плох (особенно вспоминая про pygame), но статья очень милая )))
DanUnited
На самом деле в юном возрасте нужно прежде всего результат от твоих действий, поэтому я начинал не с консоли, это очень быстро утомляло и казалось бесполезным. А с визуальных программ в Delphi, C++Builder, VCStudio. Делал текстовые редакторы, калькуляторы и прочее и друзьям можно показать и самому пользоваться и порог вхождения минимальный.
Alex061
Чего только люди не напишут… QBasic. Посмотрите лучше, какие вещи творят первоклассники из питерского DL Club на PascalABC.NET. В том числе, с графикой, потому что есть необходимые библиотеки. И все это напрямую под Windows, а не с костылями типа DOSBox.
AlexNecro
Я за Паскаль, как более строгий, и за Питон, который заставляет делать отступ в блоках.
DMGarikk
а что в питоне динамическая типизация, вас не пугает?
крайности какието…
Alex061
За Питон… не хочу писать все, что можно сказать про Питон (который на самом деле Пайтон), а просто приведу отрывок из одной своей книги.
Есть ли в этой программе ошибки? Если есть, то какие и где?
Запускаем, вводим значение 5:
Уфф… отработала. Значит, ошибок нет? Но не спешите так, это же не какой-нибудь плебейский паскаль, это крутой 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:
Но нет! Нет, пишет такого модуля. И правда, его нет. Потому что Python – язык регистрозависимый и библиотеку зовут на самом деле math.
Третий акт мерлезонского балета тоже оказывается неуспешным:
В переводе на русский язык: модуль math не имеет атрибута Sqrt. Не будем выяснять, что это за атрибут такой и почему его модуль не имеет. На самом деле, в библиотеке math не нашлось Sqrt. Потому что там – sqrt! И что, вы сейчас подумали, если везде писать маленькие буквы, наступит полное счастье? Попытайтесь, конечно, если будете изучать Python.
ardraeiss
Итого:
Как описанное Вами не относится к другим языкам? Только вместо ошибок этапа компиляции — ошибки этапа исполнения. И то не везде, вспомнить хоть тот же JS с его "2"+"2"-"2".
А так хождение по граблям таких ошибок для начинающего везде будет норма.
Alex061
Проверка на этапе компиляции позволяет найти «сюрпризы», поскольку статическая типизация позволяет проверить операнды на совместимость. Как минимум, это существенно повышает надежность кода и страхует начинающего от грубых ошибок. Здесь же сразу будут выявлены ошибки в написании имен. Почему Вам надо объяснять такие азы?
Подключать библиотеки — это означает, что новичок должен изначально знать и помнить, что где хранится. С каких пор это считается достоинством первого изучаемого языка?
Неправильное имя метода в том же PascalABC.NET написать практически невозможно (по точке сразу же раскрывается контекстно-зависимое меню со списком полей и методов).
В целом Ваше «везде» — либо попытка замылить недостатки Пайтона, либо незнание возможностей того же PascalABC.NET. В последнем случае не нужно делать утверждения про это самое «везде», выглядит несерьезно.
P.S. А JS в качестве первого языка не критиковали только ленивые.
0xd34df00d
Выбирайте учебные примеры без квадратного корня. Он для обучения программированию не сильно нужен.
Впрочем, не помню, чтобы даже у самых нелюбящих программирование одноклассников были проблемы просто всегда набивать
#include <cstdio>
/#include <iostream>
и тому подобные вещи.0xd34df00d
Что значит «везде»? Любой компилируемый язык на попытку использования такой необъявленной переменной скажет «ошибка».
Любой типизированный язык скажет, что либо в строке
b = 'abcd'" ошибка, либо в строке
b / 2` ошибка (зависит от конкретной системы типов).Это да, это какие-то глупые придирки. Я так и не понял, каким должен быть идеальный учебный язык — то ли регистронезависимым, чтобы можно было писать
Math
,math
иmAtH
, то ли чтобы модули были обязательно с большой буквы.Alex061
Это не глупые придирки, это реальная история новичка, который после школьного КУМир'а попытался освоить Пайтон. Речь-то о том, на чем учиться программированию, а не какой язык учить, чтобы стать профессиональным программистом и писать в production.
На мой взгляд, учебный язык должен быть регистронезависимым. Детям и так непросто, а тут еще регистры запоминать.
0xd34df00d
Ну, то есть, человек приходит из одной экосистемы в другую и говорит, что язык плохой потому, что не соответствует его ожиданиям, сформированным первой экосистемой.
Ну, не знаю, это как придти из C++ в JS (или наоборот) и жаловаться, что язык плохой, потому что
delete
там не то делает.Alex061
Вы действительно не понимаете или делаете вид? Речь о первом/втором языке программирования для новичка, причем о языке для массового обучения, а не будущих победителей международных олимпиад. Речь о том, что понимание алгоритмов закладывается именно на этом этапе и от языка программирования зависит очень многое.
Одного человека, ну там группку небольшую энтузиастов можно с горшка учить писать код на С/С++, но для масс, которые нынче в девятом классе не знают таблицы умножения, вот для таких это не работает.
0xd34df00d
Да, я правда не понимаю, что регистронезависимость языка является плюсом в процессе обучения.
Alex061
Отсюда могу только сделать вывод, что либо Вам не доводилось заниматься обучением в массовой аудитории, либо, в противном случае, эта аудитория Вас тихо ненавидела.
axe_chita
В QBasic в имена переменных не чувствительны к регистру букв, но если вы измените в имени переменной регистр буквы, то имя переменной поменяется по всему тексту программы автоматически. Такая вот особенность IDE/среды исполнения.
MTyrz
Позвольте не поверить.
UPD. Массам, которые в девятом классе не знают таблицу умножения, сначала нужно выучить таблицу умножения, и только потом переходить к пониманию алгоритмов.
Иначе они ни считать не научатся, ни программировать, и будет сначала у вас сплошная имитация обучения, а потом у «учеников» имитация обученности.
axe_chita
Не могу согласиться, у наших студентов это было очень часто, поэтому приходилось специально объяснять правило именования переменной
Alex061
Можете не верить. НО… бывает и достаточно часто. Когда пишется код, в котором есть ввод/вывод текста с кириллицей. Люди просто забывают сменить регистр. Вот простой пример — смотрите этапы последовательного набора оператора:
Введя имя переменной б, увидели ошибку, b поправили, но в спешке к а не вернулись и имя осталось на кириллице.
MTyrz
Отвечу одним комментом вам и axe_chita: спасибо за объяснение и свидетельство. Очевидно, я был неправ.