Pull to refresh

Comments 184

На уроках практически сразу начинали говорить про begin, printlm и if, что запирало учеников внутри бейсико-паскалевской парадигмы. Оба эти языка можно считать исключительно учебными. Их «боевое» применение практически невозможно.


вас не смущает что pascal и basic долгое время были полноценными 'боевыми' языками, на которых писали в том числе софт и под мейнфреймы?
Время конечно несколько изменилось, но я бы поопасался так принижать историю этих инструментов

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

не особо понимаю в чем тут минус?
я вот зато видел проект который создавался одним человеком который очень активно использовал много стороннизз библиотек и модулей… а через 5 лет штук 6 библиотек были заброшены авторами и в них не появилась поддержка современных процессоров и ОС, новых версия языка и проект попал под угрозу полного переписывания, и как выяснилось что человек его написавший был совершенно неспособен даже понять КАК и ЧТО именно делают эти библиотеки, код использования которых он накопипастил из мануала когда их внедрял… для него это был magic и черный ящик… и написать самостоятельно такую библиотеку он соответственно не мог
вас не смущает что pascal и basic долгое время были полноценными 'боевыми' языками, на которых писали в том числе софт и под мейнфреймы?

Да, это так. Но то время давно прошло. В 90-х, покуда еще царствовал DOS, на Pascal писалась одна программа из 1000, как мне кажется.

не особо понимаю в чем тут минус?

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

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

В данном случае, я например за то чтобы программист знал как работает TCP и что такое фрагментация и как это всё добро попадает в его сокеты, а не тупо по шаблону писал $.ajax(«...бла бла) и на выходе получал красивый json-чик
Да ладно. Скайп в доMS эпоху был написан на Делфи
Дада. А сейчас его переписали на Электрон, и посмотрите что получилось :)))
Сейчас больше похоже, что под личиной Скайпа прячется MSnet Messenger или как там его
UFO just landed and posted this here
UFO just landed and posted this here
ну и total commander вроде бы на дельфи написан
Ну тут речь идет о начале-середине 90-х, уже в 6-м Турбо Паскале была библиотека окошек с событиями. А с 7-й версии и ее исходники в поставку включали. Прикиньте, не то что интернет, выход на бибиэски еще не у всех был, с дискетами катались друг к другу, а тут такой подарок.
Ну тогда ещё и AIMP. Только вот делфи и турбо паскаль немного разные языки с разными требованиями и разными возможностями.
Не только. Где-то в 1994 году мне попалась книга Питера Нортона (не помню, как книга называется), где он рассказывал, что писал одну из своих утилит на нескольких языках. Интерфейс пользователя был у него на Паскале, библиотеки системных вызовов на Си и какой-то клочок на Ассемблере. Он это аргументировал это тем, что для каждой задачи применял наиболее подходящий язык.

Также, если мне не изменяет память, первые версии Windows тоже были написаны на Паскале.
Паскаль как язык был весьма и весьма неплох. Просто мало кто в те времена из непричастных к FIDONet и BBS был в курсе, что BGI (Borland Graphics Interface) и близко не подходит для создания динамичной графики — для этих целей существовали специальные оптимизированные библиотеки наподобие XLib или VidMem.
А без динамичной графики уже в то время было достаточно грустно…
UFO just landed and posted this here
Мы с другом в свое время делали библиотечку вместо crt. Быстрый вывод на экран через запись в видеопамять, позиционирование курсора, чтение скан-кодов клавиш. И на ее основе псевдографическое меню, правда без поддержки мыши.
UFO just landed and posted this here
Умеет: можно захватить/вызвать любой вектор. Захватить — в смысле установить собственный обработчик. Делаешь «procedure IRQHandler; Interrupt;», затем «getintvec()» для сохранения старого вектора (нужно чтобы восстановить как было при выходе), затем «setintvect()» и понеслась. Что же касается вызова програмных прерываний, вроде сервиса DOS, то для этого есть «intr()». Однако, вызов через ассемблерную вставку может быть удобнее и гибче.
UFO just landed and posted this here
При условии наличии этой TSR. Но сама по себе установка и/или вызов обработчика прерывания это более широкий спектр, нежели просто работа с мышкой. Там можно EMSом полакомиться, DOS на ништяки раскрутить или тупо видюхой поморгать, да на диск что-либо сбросить.
Через инжект ASM-а что хочешь можно было сделать
Да, можно просто пользоваться стандартным прерыванием 33. Переводишь в графический режим, показываешь курсор, берешь координаты указателя или нажатия клавиш
Внезапно, первоначально первые версии Windows писались на именно Паскале, по причине неготовности компилятора Си в Микрософте.
внезапно, на хабре уже гдето обсуждали — это не так, а примеры с паскалем это пара какихто модулей не относящихся непосредственно к ядру windows
Об этом читал или у Фролова в «Библиотеке системного программиста», или серии брошюр «Язык программирования Си» в 93 году. Ну и как бы ключевое слово PASCAL в описаниях функций (WinMain()) как бы намекает на происхождение.

Тип PASCAL определен в файле windows.h следующим образом:
#define PASCAL _pascal
Функция, описанная с ключевым словом _pascal, использует соглашение языка Паскаль при передаче параметров, которое отличается от соглашения, принятого в языке C. В частности, в отличие от определения обычной функции C, определение функции, использующей соглашение языка Паскаль, должно содержать точное перечисление всех используемых параметров.
Это связано с тем, что такая функция должна сама освобождать стек перед возвратом. Если перед вызовом функции, описанной с ключевым словом _pascal или PASCAL, записать в стек неправильное количество параметров, перед возвратом из функции обязательно произойдет неправильное освобождение стека.
Вроде это было сделано для банальной экономии памяти, чтобы после каждого вызова функций API не чистить стек.
В смысле экономии памяти? Если мне не изменяет память с регистром указателя стека SP можно работать арифметическими командами ADD/SUB, и чтоб очистить стек достаточно изменить указатель на вершину стека регистр SP.
Да. Но если мы используем соглашение о вызове C, нам нужно вручную корректировать указатель стека после каждого вызова (PUSH … CALL … ADD SP, N). В случае соглашения о вызове PASCAL, стек корректируется в конце вызываемой процедуры.
И вот после всего этого тому, кто придумал передавать функции данные через стэк, основное назначение которого строго для хранения адреса возврата и временных данных через специальные команды PUSH/POP, следует выразить огромное «спасибо» за целый огромный класс фундаментальных уязвимостей, с которыми все вроде как пытаются бороться, но индусы не дремлят. Передавали бы данные через кучу данных, в отдельности от стека и не было бы потенциальных возможностей выполнить произвольный набор данных, т.к. на кучу можно было бы заюзать флаг в таблице дескрипторов памяти защищённого режима, который запрещает исполнение данных как код. А сейчас компиляторы переделывать никто не будет, как и перекомпиливать все программы. Эх.
Не думали ли, что основная проблема передачи данных через один стэк, что на нём и сохраняется адрес возврата в вызываемую программу?

P.S. В Форт, например, для разделения данных и адресов возврата ввели в язык два стека данных!
Это мне вопрос или риторический? Передача параметров через стэк была оправдана на 8ми битках тех лет (в частности i8080), но в x86 и даже на Z80 уже можно было передавать указатель на кучу с нужными данными, не трогая стэк (BP: для x86 и IX/IY для Z80). Что не понравилось минусатору — я не знаю.
Чтобы выделять/освобождать память в куче нужно вызывать аллокатор, да и указатель через что-то же надо передавать, а число регистров ограничено. А в случае стека это просто инкремент/декремент, а если с отдельными стеками для данных и возвратов, то нет и потенциальных уязвимостей + появляется возможность очень просто возвращать несколько значений.

Но почему-то кроме фортеров никто так не делает.
как бы намекает на происхождение.

он лишь намекает на то что в ядре старых windows очень много всякой оптимизации с заточкой на код актуального на тот момент софта, если полистать древние версии winapi там всплывают форматы и типы файлов, железно прибитые к ядру от всяких ископаемых табличных процессоров до энтерпрайзного софта.
А учитывая что существовал Microsoft pascal, не удивительно что и под него были какието оптимизации, да и тот факт что часть какогото служебного софта действительно на нём могло быть написано
Как правильно упомянуто выше, в данном контексте PASCAL это ни что иное как соглашение об способе возврата значений из функции. Ни про какие оптимизации для MS Pascal или еще какого-либо Pascal тут речь не идет.
Т.е. просто определенная последовательность выполнения «как в Pascal».

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

Там была не оптимизация, а сплошные компромиссы, костыли и хаки чтоб вписаться в жесткие ограничения массового железа. Напомню что Windows 1.0 был впервые представлен в ноябре 1983, а за полгода до этого вышел PC/XT с официальным максимумом в 256 килобайт оперативки. И из-за этого приходилось идти на разные ухищрения, к примеру в первой версии windows окна не могли быть перекрываемыми, и выводились только черепицей. И таких костылей и компромиссов было множество.
Одним из таких костылей и стало использование Паскаля, «сейчас напишем прототип на рабочем Паскале, а критические части на ассемблере. А потом когда компилятор Си отладят мы сконвертируем нашу работу на Си! Это же не займет много времени?». Только дьявол кроется в деталях, а дедлайн на носу, и Билл Гейтс через плечо заглядывает в очках велосипедах с немым вопросом «сколько мне еще завтраками общественность и IBM кормить?».
И под давлением обстоятельств критический код (15% от общего объема кода) решили не трогать, а конвертируемый код Си по вызовам становится Паскалевским.
А дальше все как обычно, «Работает-не трогай!», наследие совместимости и решений здесь и сейчас.

И еще из википедии Соглашение о вызовах
pascal — соглашение о вызовах, используемое компиляторами для языка Паскаль. Также применялось в ОС Windows 3.x.

Аргументы процедур и функций передаются через стек, слева направо. Указатель на вершину стека (значение регистра esp) на исходную позицию возвращает вызываемая подпрограмма. Изменяемые параметры передаются только по ссылке. Возвращаемое значение передаётся через изменяемый параметр Result. Параметр Result создаётся неявно и является первым аргументом функции.

В первом абзаце речь идет именно о компиляторах Паскаля. О других языках речь не идет.
П.С. Чтоб снять невольные вопросы скажу сразу: лично мне Си нравиться больше Паскаля. Но у вас может быть ваше личное мнение, не буду его оспаривать во избежание холиваров.
Я слышал что старая макось на паскале была. И, вроде бы, когда-то Photoshop.
Да, это так. Но то время давно прошло. В 90-х, покуда еще царствовал DOS, на Pascal писалась одна программа из 1000, как мне кажется.


Вы не слышали слова Дельфи?
“покуда ещё царствовал DOS” под словом «Delphi» понималось только одно — древнегреческий город. Слышать о нём программисту, не увлечённому историей, не было ни малейшей нужды.
Когда я учился в ССУЗе (конец 90-х), несколько товарищей из параллельной группы писали диплом на Паскале. Одна программа, на сколько помню, визуализировала работу схемы коррекции ошибок в тракте связи. С графикой и мышью. Вторая не помню, что делала. В общем, когда я лет через 8 устроился туда инженером-программистом, эти программы использовались вовсю в процессе обучения. А когда обновили там машины (и ОС до XP), запускали их через DOSBox и всё равно использовали
Если речь про Колледж Связи (теперь Академия) в г. Витебск (Беларусь), то это был мой однокурсник и я. Я писал диплом на Паскале — программа, которая показывает разные схемы связи — с сокрытыми элементами, а студенту нужно отвечать на вопросы — постепенно элементы открываются. В конце ставиться оценка и записываются результы. Препод ставит в журнал зачет. Как бы контрольная и последний шанс чему-то научить студента )))
На удивление эта прога продержалась потом еще очеееень много лет в проде ))))

P.S. Для парня 17-ти лет, без инета и компьютера дома (в колледже тоже не было инета) ушло полгода.
Хотя по современным меркам программа очень простая. Много (всё) пришлось рисовать с помощью линий, точек и кружочков)))

После паскаля в универе был Си — было почему то ощущение, как будто руки развязали )))
Очень мне зашел. Хотя — многим и Паскаль не зашел. В колледже на программирование закрывали глаза.
А вот в универе половину первого курса тупо отсеял препод — Гуру паскаля (который умеет в числа Фибоначчи, но в реальной жизни не писал софт для НИКОГДА)
Потом Qt/C++, Python, разные удобные IDE, либы, фреймоврки, примеры в инете, форумы. Продуктивность выросла с тех пор в сотни раз.

В целом сейчас я бы не пудрил мозг Паскалем — а на Питоне основы программирования и алгоритмизации преподавал бы. Хотя снова суют Паскаль (ABC) на 1 курсе даже во многих универах.

P.S.2 Вспомнил — пару месяцев заняла разработка азставки к этой программе — где звезды летят на встречу. Причем писать я начал именно сначала заставку))))

Через много много лет я переписал эти летящие звезды на Qt (just for fun)))))
В целом сейчас я бы не пудрил мозг Паскалем — а на Питоне основы программирования и алгоритмизации преподавал бы.


Не уверен, что язык с динамической типизацией и gc — это лучший выбор для изучения основ программирования.
и gc

тоесть опять только C остается и ручное управление памятью?
В каком смысле остается? Мы же о преподавании основ говорим.
Чорд! согласен — для начинающих нужна строгая типизация и чоткий синтаксис. А, вообще, на хабре уже не раз был этот холивар про выбор языка для обучения. Я снова почитал. В итоге PascalABC остается лучшим выбором для школы, техникума, первого курса универа))). Вот кто уже пробьет первый порог (тест на проф пригодность) — тому уже на втором курсе давать основы Cи, управление памятью, указатели, более сложные структуры данных и алгоритмы. Вот тут надо прививать культуру экономно использовать вычислительные ресурсы, знать про архитектуру железа, нотация про сложность алгоритмов. На третьем только можно переходить уже на следующий уровень: ООП, скриптовые языки, динамическая типизация, сборщики мусора… Дальше студент выберет по душе свой язык… На котором будет писать диплом)
И уже придя на галеры можно уже клепать в продакшн монструозные поделия в Electron )))))
Оба эти языка можно считать исключительно учебными. Их «боевое» применение практически невозможно.
Бред какой. И писали и сейчас много пишут. Проекты в миллионы (как у нас) и десятки миллионов (пробегают постоянно) строк.
Как можно говорить о том, о чем зеленого понятия нет? Дилетантство крайней степени.
Усугубляло ситуацию крайне мало число сторонних библиотек и модулей. Их можно было сосчитать по пальцам одной руки.

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

В моём опыте был прямо противоположный опыт — в школьные годы мне досталась "поставка паскаля" вообще без библиотек — не было не то, что подключаемых tpu — не было turbo.tpl, соответственно, вместо "uses crt, dos;" все мои поделия начинались с "uses mytpu;", а сам "mytpu.pas" состоял из простыни процедур, написанных преимущественно на ассемблерных вставках, при этом часть процедур была написана "с упрощениями" (например, вместо вызова дос-функции вывода строки в writeln, сначала был написан writed, выводящий строку в память экранного буфера текстового режима — заодно можно было и цвета выставлять и позицию). А вообще, на PC я программировать начал с ассемблера, и паскаль в моём представлении был очень удачным учебным языком. Чуть позже освоил gwbasic, а за ним и qbasic… но с приходом эпохи windows я понял, что все мои знания (управление MCB, порты ввода-вывода, прерывания, вот это вот всё) чуть менее, чем на 100% не нужны. И программистом не стал. Правда, приходится иногда то на php что-нибудь набросать по-быстрому, то javascript поковырять, то в powershell небольшую автоматизацию запустить...

Поэтому в Borland модуль работы с мышью даже не включали в стандартную поставку. Его надо было искать по знакомым, которые разводили руками и в ответ восклицали «а нафига он тебе?».
Странно все это читать. Через прерывания все легко юзалось. И позиция курсора и нажатия/отпускания кнопок. И мышь была вполне себе востребована и до Win3.1. В том же Турбо Паскале хотя бы :)
Плюсую. Однако в начале и середине 90-х интернета еще как бы не было.
UFO just landed and posted this here
Turbo Vision в свое время стал реальным окном в мир UI для очень многих. Причем в связке с ООП
На уроках практически сразу начинали говорить про begin, printlm и if, что запирало учеников внутри бейсико-паскалевской парадигмы.
Бейсик — это изначально был язык, в котором все строки нумеровались, переход осуществлялся по номеру строки и отсутствовал любой намек на указатели. Именно так я учился программировать в детстве и это конечно была та еще парадигма. А еще, в моем Бейсике не было текстового редактора. Нужно было выполнять «List», останавливать пробегающую программу, искать нужную строку, вызывать редактирование этой строки и вносить исправления. Так я написал свою первую игру с самолетиком, бомбящим танки на горах :).
Паскаль напротив по тем временам был прекрасный язык, оснащенный прекрасной IDE, и все это позже получило развитие в Delphi.
Что касается дисководов, то тогда и энтузиазм был другой. Я например учился программировать записывая программы на магнитофон и ничего. Сейчас бы не выдержал такого.
Да, на магнитофон тоже записывал, как раз в собственную допаскалевскую эпоху )
Неправильный у Вас Бейсик был, знакомы ли Вы были с Турбо Бейсиком?

P.S. Мне вот, на нём довелось около года делать промышленный бухгалтерский и лабораторный софт на предприятии.
Чем он меня «добил», так это то, что много вещей делалась через базис строковых операций и слишком многословным кодом не оставляющим свободное место на листинге программы.
но, даже перестав на нём программировать ещё некоторое время продолжал немного дорабатывать решения полученные на нём. :)
Неправильный у Вас Бейсик был, знакомы ли Вы были с Турбо Бейсиком?
Turbo-basic — что-то знакомое, почему-то тревожное… Первую IBM-совместимую машину я увидел позже, в институте в конце 1-го курса, это была «Искра» и писать приходилось на Фортране. Преподаватель информатики у нас был КТН по энергетике не слышал о другом стиле программирования, кроме макаронного, учил нас какой-то ереси и высказывал подозрение, что граф электрической сети таки можно как-то обойти быстрее чем за n^2 времени. Серьезно, не вру :). Просто прочитать какую-нибудь книгу ни ему ни нам в голову не приходило.
На втором курсе добрался до Borland-паскаля. И тогда помню подумал «Хоспаде, наконец вменяемые язык и среда программирования, это-ж просто праздник какой-то!».
На третьем курсе мы попробовали писать на дельфи под Winsows 3.11, но заказчик сказал ему такой софт не нужен, а нужен простой dos, потому что понятно, что этого виндовса на каждой машине все равно у него никогда у него не будет. И данные должны храниться в текстовых файлах и никак иначе.
Человек говорит о первом Бейсике, 1964 года рождения. Поздние варианты, включая всякие Quick, Power, True (кстати, от создателей первого Бейсика), и ещё более поздние типа Visual — без нумерации строк, со всеми ништяками структурного программирования, и даже с элементами ОО — это совершенно другой язык. И вполне приличный, кстати.

Именно незнанием того, чем был Бейсик изначально, вызвано недоумение многих утверждением Дейкстры (1975 год!) “It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.”
Недоумение вызывает не утверждение Дейкстры, а применение его в наши дни к современным бейсикам. Что встречается нередко.

В начале 2000х преподавал алгоритмы и структуры данных (списки, очереди, сортировки и тп) на С под lunux. Так что не стоит обобщать. На счет практических задач, то тут сложнее. Тогда приходили студенты которые программы не писали ни разу. Пошли прогать, чтобы написать героев или варкрафт. Чтобы писать что-то осмысленное надо хотя бы понять как вообще писать.

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

Где можно ознакомиться с вашей практикой преподавания программирования через "танчики"?

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

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

Так почему бы тогда сразу не изучать те же «плюсы»?
Так почему бы тогда сразу не изучать те же «плюсы»?

Незачем. Чем конкретно плюсы лучше Паскаля?
Из вариантов: C++, java, php, js, c#, мне больше всего нравится преподавать на C#. У MS отличные инструменты и достаточно простой язык для новичков.

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

Вон на 2 поста выше человек написал на С с использованием классов реализацию двухсвязанного списка и уверен, что это С++)))
Плюсы они многогранны и без stl это не плюсы.
Я пытался один год разделить курс один семестр С, потом введение в ООП с написанием на "плюсах" это не заехало.
С моей точки зрения С на линуксе с компиляцией из командной строки были оптимальны в то время.
Я не знаю с какими мыслями приходят сейчас в институт и как представляют себе работу программистом нынешние студенты. Возможно сейчас уже в школе дают ту базу, что я давал на 1-2 курсе, тогда да можно уходить куда-нибудь в более сложное. Я бы в этом случае на с# что-то давал, там уже можно и про проектирование систем и про gui побеседовать, но повторюсь, люди приходили 0 и считали, что раз-два и они в гейм деве уже создают варкрафт.

У людей есть фантастическая цель — написать Варкрафт. Не создается ли у Вас впечатление, что давая студентам базу им никогда не расскажут, из чего на самом деле состоит Варкрафт и в какую сторону надо копать, чтобы изучить этот вопрос?

Все, что я видел в данном обсуждении, это возгласы «если надо, сами всегда разберутся», которые пишут как раз те, у которых горели глаза и кому посчастливилось это сделать )
Вот серьёзно, зачем вам Варкрафт на уроках информатики? А если мечта написать Старкрафт, как быть? Кому надо — сами разберутся.
Не создается ли у Вас впечатление, что давая студентам базу им никогда не расскажут, из чего на самом деле состоит Варкрафт и в какую сторону надо копать, чтобы изучить этот вопрос?

Не задумывались ли вы, что студенты, освоившие базу, сами способны достигать целей вроде "изучить строение $gamename"? Игрушек в нашем мире множество, а время не бесконечно.
Зачем тратить время преподавателей на то, чтобы развлекать умненьких игрушками, если нужно научить всех?

студенты, освоившие базу, сами способны достигать целей вроде «изучить строение $gamename»?

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

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


Зачем эти дисциплины давать в школе всем подряд? Как изучение конкретной $gamename поможет научиться разбираться в комплексных системах?

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

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

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

Так все таки зачем всех без исключения нужно нагружать изучением сложных систем?

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

Зачем это всем? В школе не только программисты учатся.

Вот приходят к вам на курсы люди, которые бредят своим Варкрафтом. Что Вы им даете наперед? Типы данных и циклы? С ними они и уходят. Дальше не вырастут, даже если есть способности.
Мне кажется, что за первые 20 минут нужно объяснить человеку, какой путь он должен пройти от 0 и до Варкрафта, что он получит на курсах и где и как ему восполнять недостающее.
Мы все время копаемся в деталях, но целостной картины нигде и никогда не показывают.

Вы зря думаете, что учащиеся курсов и учащиеся школы похожи. Это разные люди. Об учащихся курсов я уже написал статью.
Люди, которые действительно бредят своим варкрафтом ко мне не приходят. Это тупо дорого, в сравнении с халявными курсами в интернете. Если они достаточно заинтересованы, то им не нужен никакой преподаватель.
Первое занятие зависит от того, что человек уже знает.
Довольно часто рассказываю в общих чертах о том какой софт вообще бывает и какие роли выполняют люди в IT.
Вы правы в том, что человеку вначале нужно показать дальнейшее направление. Но это не значит, что нужно рассказывать архитектуру чего-то конкретного. Углубляться в эту конкретную архитектуру еще более бесполезно.


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

А ведь Ваш Варкрафт это не что иное как нагромождение типов данных и циклов… Вот только объяснить это в 20 минут никак не получится. Посмотрите CS50? Там явно не на 20 минут получилось дело
Всю жизнь работаю программистом, имею профильное образование, много времени провёл за игрой в Warcraft и совершенно не представляю, зачем бы мне было знать, как он устроен внутри. Наверняка, скучнейшая вещь с кучей костылей.
Когда человек хочет написать программу (игру) его не остановит ни неудачный язык, ни отсутствие библиотек, ни отсутствие практических знаний. Видя цель и не видя препятствий он дойдет до поставленной цели.
Вот тут большинство игр написано на QuickBasic, скажем так не на самом удачном для реализации сложных программ языке программирования.
Но люди доводили их до вменяемого состояния.
Меня удивляют люди, которые топят за систему, которую можно охарактеризовать фразой «не благодаря, а вопреки».
Потом эти люди, прорвавшись через все барьеры и неустроения, тут рассказывают, что мол только так и надо. Грустно (
Не поверите, но в программировании если используешь средства языка по максимуму то очень скоро упираешься в границы доступного. И делаешь свою программу вопреки этим очерченным границам, для того чтоб сделать свою программу.
К примеру моя первая машинка из 1990 года MSX2 YIS503IIIR (z80@3.53mHz ram128kb/vram128kb, no floppy disk, ЛВС на MIDI, из внешних накопителей — только кассетник, только хардкор) на котором основным языком был интерпретатор бейсика с номерами строк, без локальных переменных в подпрограммах, с ограничением длины имени переменной в два символа, с GOTO-ми и GOSUB-ми, так в нем на все творчество оставалось всего 23 килобайта. На мелких программах этого было достаточно, но когда дело дошло до написания большого проекта (психологическое тестирование (MMPI, IQ, интроверсия/экстраверсия и т.д. ) школьников начальной школы в психологическом центре при детском доме), проект был распланирован, поделен на части (диапазоны строк, доступные имена переменных, размерности массивов), написан, отлажен, сведен в одно целое, перестал влазить в память, был оптимизирован чтоб влазил в память, и был выпущен в свет. И пользовались этой программой психологи до года 97-98.
И когда мы (школьники) писали эту программу на нашу ораву не то что интернета не было, даже ББС-ок не было, были только две истрепанных книжки от КУВТ-а, зачитанные до дыр. А еще у нас были горящие глаза и желание написать программу.
А логика тут в том что живем мы здесь и сейчас, и проги которые мы пишем нужны здесь и сейчас, и если мы будет сидеть и ждать «прекрасного принца» у моря погоды, а не прикладывать усилия к её написанию, то наша программа не будет нужна никому, включая нас самих.
Я программировал на Бейсике на Z80 тоже в тетрадке. Страницах на 10 каждый раз.
А я сейчас пересматриваю свои тетрадки тех времен, переписанные руководства от КУВТ-а, переписанная книга Керригана и Ричи «Язык программирования Си», наброски на полях школьных тетрадей, а иногда куски программы посередине какой то тетради по истории или литературы. Ностальгия и легкая грусть.
Мы это называли фракталами. Вы это изучали в школе?
Я о коде, рисующем эти 'фракталы'. Ведь можно без возни всё запилить на каком-то модном и быстром 'фреймворке', а можно это всё в 4-16 k уложить.
Многое делается вопреки. И новое всегда рождается из вопреки, а не мейнстрима.
А танчики я уверен с 0 вы бы не один семестр писали.
Все очень сильно изменилось, когда все привыкли к компьютерам и в программисты пошли люди, которым не очень нравится программировать. Я сейчас довольно средний программист, если не ниже, но диггера (не сильно проще танчиков) я написал в 10 классе за неделю на ассемблере с записью на магнитофон (ни о каком семестре речь не шла). А все мои знакомые, которые стали хорошими программистами были уверены, что могут сделать это за день в нормальных условиях. Причиной этих успехов была мотивация — дикий восторг от компьютера самого по себе и возможности его программировать.
А до ассемблера какие языки учили (кроме Бейсика)?
Никаких. Это было самое интересное. Никто не «учил» никаких языков, как это сейчас бывает. У меня как у школьника не было даже малейшего представления о том, что где-то есть целый мир технологий и я где-то могу о нем прочитать. Игровых компьютеров и приставок еще не было в продаже. Какой-нибудь БК-0010 можно было увидеть в дворце пионеров или в школе на информатике, но пробиться к нему было не реально. Теоретически можно было искать журналы в библиотеке или знакомых, которые бы знали где взять информацию, но это было скучно а возиться с настоящим компьютером было невероятно увлекательно. Мне компьютер достался случайно от друга отца. Вместе с компом мне досталась кассета с программами и нечто вроде краткой и совершенно непонятной технической спецификации по этому компьютеру (86-РК). Некое комьюнити по этому компьютеру конечно существовало, но предполагаю, что это были солидные инженеры и я никого из них не мог знать. Бейсик и ассемблер изучался методом проб и ошибок по сути. Игры писались потому, что их попросту негде было взять больше. Ощущение от компьютера, который выполняет программу было невероянтым.
Как обучать программированию детей сейчас, непонятно, потому что они страшно избалованы изобилием технологий, софта и прочего в интернете. Даже если сразу показываешь как сделать мод для Майнкрафта или платформер на Unity это вызывает довольно мимолетный интерес. Потому что в интернете этого добра и так перебор.
В институте, на первом курсе преподавали Фортран-77 на ЕС ЭВМ,
но прочитав книгу Баранова, Ноздрунова «Язык Форт и его реализации», понял, что это мой выбор. :) (ну и самостоятельно ассемблер для Z80, как без него)

P.S. В качестве Вау-эффекта школьникам можно предложить к ознакомлению
Forth Haiku Salon
Обучающие языки для детей не должны быть слишком сложными, иначе дети просто не смогут их осилить. Я как-то поприсутствовал на занятиях в кружке робототехники, где детей учили языку «С для микроконтроллеров» — чтобы роботами управлять. До сих пор мурашки по всему организму бегают: дети фактически запоминали куски кода как единое целое, и из этих кусков «складывали» программу. При этом если возникали ошибки — ступор, паника, зовем учителя.
Для детей хорошо подходят языки, где сразу все наглядно и очевидно. Черепашья графика — вообще прекрасная вещь. Я своим, помнится, поставил MSWLogo и распечатал шпаргалку про пару десятков команд — и дети вполне увлеченно рисовали всяческие снежинки, по ходу громоздя циклы.
Для школьников постарше уже можно давать языки посложнее — но опять же, не языки промышленной разработки. Паскаль — нормально, а вот С++ с его неочевидными правилами, напластованиями стандартов, эзотерическими сообщениями об ошибках на три экрана — это уже перебор. Дети просто не смогут освоить его в полном объеме, а значит, неизбежно возникнут фатальные перекосы в зависимости от квалификации учителя: одни будут его использовать как «си с удобным комментарием //», другие — как скриптовой язык, который зачем-то надо компилировать и в котором надо обязательно написать в начале магические строчки
#include <iostream>
using namespace std;
int main() {

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

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

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

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

Есть другая, гораздо более важная проблема — синдром утенка. Человек, увлекшийся программированием на каком-то языке, быстро осваивает его особенности. Но потом, когда он берется писать на другом языке, он использует ухватки и привычки, оставшиеся от первого языка — и иногда это заметно даже через многие годы. И вот здесь становится важным, какой язык он изучал первым — потому что некоторые языки прививают весьма специфические привычки.
Например, код бывших сишников, переквалифицировавшихся в плюсисты, бывает полон сырых указателей, malloc/free и прочих strdup. Код джавистов, переквалифицировавшихся в плюсы, надо с лупой проверять на предмет утечек памяти: привычка делать new и забывать про delete очень живуча. А когда на плюсах пишут любители функциональных языков, приходится разбираться с простынями сообщений об ошибках из-за их попыток все запихать в многоэтажный шаблонный код.
В этом плане «учебные» языки типа паскаля или питона достаточно безопасны — они структурные, изолируют ученика от многих подводных граблей, и в общем и целом формируют довольно адекватные привычки.
Во всей дискуссионной ветке обратил внимание на то, что все дружно топят за идею «если надо, то сами потом научаться». И другого мнения не заметил. Тем временем вся учеба выглядит так: мы вас научим кататься не велосипеде, а на машине уже сами научитесь. При этом по факту у нас все катаются только на машинах.
И вот тут еще какой подводный камень. Приведу аналогию со спортом. Цель — сделать успешных спортсменов. Всех дружно учат составлять план тренировок, водят в спортзал. Но никто не говорит про то, что кроме тренировок есть еще питание, есть собственное пошаговое продвижение, есть особенности организма. В итоге мы имеем кучу людей, которые умеют составлять планы тренировок и делать определенные успехи, но выиграть реальные соревнования уже нет. Им не дают целостную картину.
P.S. когда я пишу «дети», то подразумеваю старшеклассников. А в начальной школе, конечно, ничего кроме Бейсика и не надо. При этом если старшеклассник в свое время пропустил Бейсик, то можно и не переживать.
Есть другая сторона медали. Инженер-ракетостроитель уехал в Канаду. Пошел он значит со своим инженерным подходом в колледж, дабы переквалифицироваться в SDE. Ему говорят — вот эту часть работы нужно делать так. А парень реально freaking out от того, что ему не дают увидеть картину в целом. И это можно назвать успехом?
Скажу о себе, начал с Паскаля(96-00), и сразу делал ассемблерные вставки. Потом ушел на Delphi(2000-2002), а потом ушел из этой сферы вообще. Хотя вполне мог уйти в С… Но не сложилось…
Тем временем вся учеба выглядит так: мы вас научим кататься не велосипеде, а на машине уже сами научитесь. При этом по факту у нас все катаются только на машинах.

Неудачная аналогия это как котенок с дверцей.
Какой тезис вы хотите аргументировать с помощью своей аналогии?


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

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


когда я пишу «дети», то подразумеваю старшеклассников.

Да какая разница: старшеклассники или младшеклассники? Чтобы писать что-то сложное, сначала нужно научиться основам. Какую цель вы хотите достичь когда предлагаете выдавать игрушки на занятиях, потому что человек учится в классе с каким-то номером?
Если старшеклассник в свое время пропустил бейсик обучение основам, то он будет банально отставать от тех, кто основы освоил. Срок обучения тут роли не играет.

Поддержу. Первую сложную программу я написал на Бейсике для ZX Spectrum. Был бы это C или ассемблер — вряд ли хватило бы терпения их освоить. А риалтайм-производительность нужна не всегда, я не часто сталкивался за свою карьеру с нехваткой производительности высокоуровневых языков. Я не писал игры и не работал с графикой, а обработка данных и интерфейсы и на паскале (Delphy) прекрасно работают.
Их «боевое» применение практически невозможно.

Хорошо, что в те времена интернета у нас небыло, и мы не могли прочитать о том, что возможно, а что нет. Просто писали… вполне себе боевое.
Как же облегчал жизнь nice.com. Человеку, его написавшему, надо памятник поставить.
Я, к сожалению, уже не помню, что делал этот nice.com, но вот Tech Help Rus до сих пор сидит в голове.
Tech Help Rus
image
image
Найс делал замечательный графический курсор посреди текстового ДОСа, который плавно ездил — на картинке очень похоже на него. Сначала подумал, что это он и есть, а потом увидел гуй.
Вот теперь вспомнил. Нечто подобное делал в текстовом экране Петя Нортон в своих NU версии выше 7 для DOS. Тоже всё такое типа графическое и мышка красивая, при этом экран не мигал при запуске — режим не менялся. Однако если сильно приглядеться, то был заметен мелкий артефакт при движениях мышки, который обозначен самим выводом видеокарты: символ 8х16, а выводится 9х16, последний столбец точек повторяет предпоследний (или наоборот он слева и повторяет первый — не помню точно уже). Так достигается экран 80х25 символов, который эквивалентен не ожидаемому 80*8=640 точек в ширину, а 80*9=720. А дублирующийся столбец обычно в знакогенераторе черным закрашен, что даёт заметную разбивочку между символами, при этом самому символу доступно больше точек. А непрерывные символы, вроде рамок, не имеют разбивочки. Элегантное аппаратное решение.
Изначально этот курсор был сделан для EGA, а там символы были 8×14.
Лично я в школе начинал программировать на Си (ШАЯ не в счёт). Но в универе был в принудительном порядке пересажен на Pascal. Сначала в обязательном порядке 1-2курсы лекции + практика на ЕС ЭВМ. Потом на старших курсах на практике ООП был вынужден сидеть на Turbo Pascal + Turbo Vision на ПК, ибо ждать, колда скомпилируются те же задачи на Turbo C никогда не хватало машинного времени.
Что имеем в итоге: Паскаль — существенно более быстрая компиляция и чуть медленнее исполнение, Си — наоборот.

Всплакнул с Gothic шрифта (до сих пор считаю его супер-шикарным)

Мне кажется у вас в корне не верная постановка проблемы.
Взгляд на информатику через «танчики» мне не понятен.
Например у вас фото легендарного БК-0011, сколько учителей(преподавателей) и тогда и сейчас знают, что можно было по трудившись, возможно не самим а с помощью практикующих инженеров, собрать для него систему
— однозадачную без пользователя
— однопользовательскую однозадачную
— однопользовательскую многозадачную
— многопользовательскую однозадачную(по одной на пользователя)
— многопользовательскую многозадачную
?
Естественно задача в данном случае очень условно ввиду скудности ресурсов, т.е. в большей степени для демонстрации принципа работы техники и ПО.
Проблема не в инструментах, а в том, что учат те, кто сам имеет нулевые знания и навыки.
Проблема не в инструментах, а в том, что учат те, кто сам имеет нулевые знания и навыки.

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

Статья не соответствует заголовку.
Было заявлено: как учили детей программированию в 90-х и что с этим было не так
Однако получилось что то вроде "раньше было вот такое оборудование и я хотел бы во время уроков заниматься чем то таким". Складывается впечатление, что вы просто чуть более сообразительный чем обычный ученик. При этом хотите чтобы преподаватель затачивал программу под таких как вы.
Вы может быть и умный, но сообразительных мало, а учить в школе нужно всех.


О том, как действительно учили раньше, вы написали три фрагмента. Первый:


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

Идеи итерирования и хранения данных в массиве вызывают наибольшие сложности у новичков.
Чтобы отработать и понять эти идеи, нужно решить много простых задач. Если же в каждую простую задачу добавлять еще "что-то полезное", то задача внезапно становится сложной. Если давать сложные задачи, то большинство людей намертво застревают при решении. И вы в начале своего обучения не были бы исключением.
Знаете, сколько нужно времени, чтобы научить среднего человека решать задачи с использованием циклов? Я знаю. Нужно от 4 до 8 индивидуальных занятий. Эффективность усвоения уменьшается пропорционально количеству учеников. В обычном школьном классе это вполне может растянуться на 2 года.
Игрушки намного увлекательнее обычных тренировок. Однако учебные задачки — единственное, что поможет вам справиться с первыми проблемами в программировании.


Второй:


Детям никто тогда не рассказывал о преимуществах и возможностях других языков. На уроках практически сразу начинали говорить про begin, printlm и if, что запирало учеников внутри бейсико-паскалевской парадигмы.

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


Третий:


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

Изготовление очередной записной книжки — бесполезное занятие. Реальные прикладные задачи вообще дико скучные. Два дня куришь исходники и тз, потом день пишешь код, еще два дня — тесты и еще неделю — оформляешь для релиза. Для реальных прикладных задач умение читать код может быть даже важнее умения писать код.
Больше всего пользы можно нанести если научить детей скриптовому языку для текстового редактора. Для работы с ними не требуется никакого дополнительного софта. Мануал по языку есть почти на каждом компьютере. Вы правда хотите чтобы в школах давали Microsoft Office Visual Basic?
Занимательные задачи должны иллюстрировать ту тему, которую сейчас проходит класс. Нет смысла давать программировать игрушки тем людям, которые еще ни одного цикла не написали.


В моем понимании «Танчики» — это максимум, что можно было выжать из Turbo Pascal без ассемблерных вставок. Из явных недостатков конечного продукта – медленный опрос клавиатуры и медленная отрисовка графики.

Ассемблерные вставки в логике программы вообще никак не помогут вам ускорить I/O. Про это писал Страуструп в руководстве инструктора к книге "Программирование: принципы и практика с использованием C++" примерно в 8 главе. Мой вольный перевод. Цитата по теме:


Про низкоуровневые операции

Удивительно, что "неэффективность" того, что вы предлагаете — популярное оправдание каши в коде. Это особенно часто встречается среди "тру гиков", которые программировали в школе (зачастую переоценивая собственные силы потому что раньше были лучше учителя) или зависали на форумах с обсуждением. Им очень трудно донести ценность структурированного кода и логической простоты. А с их лозунгами "Запутанный значит продвинутый" и "низкоуровневый значит эффективный/быстрый" трудно бороться. Я наблюдал студентов, которые были помешаны на эффективности, но при этом компилировали со стандартными настройками. Они очень удивлялись, что по-умолчанию стоит "отладка" и программа выполняется в 25 раз медленнее, чем после оптимизации компилятором. Тот факт, что код можно ускорить в 25 раз не переписывая его (не всегда), заставляет их задуматься. Многие даже не понимают что именно значит эффективность и могут потратить несколько часов вручную оптимизируя фрагмент, который ждет ввода данных от пользователя (используя низкоуровневые функции ввода/вывода, а не iostream). Этой группе студентов можно указать, что эффективность бывает разная (напр. эффективность использования времени студента) и что во многих приложениях на первом месте стоит правильность ("если тебе не нужен правильный результат, его можно вычислить с любой желаемой скоростью"). Постарайтесь не отвлекаться на споры об эффективности при всех. Это сбивает с толку, смущает, и студенты могут посчитать, что вы не смогли ответить, потому что они не поняли ваш ответ: старайтесь отвечать просто, иначе для многих студентов все будет только хуже.


Вам в комментариях уже указали, что проблема медленного I/O решается переходом на другой API.

Во многом согласен. Однако остается проблема, когда изучая язык ученики не выходят из «обучающего» уровня. Их научили клепать циклы, но целостного знания о том, как написать, например интернет-браузер (из чего он вообще состоит), в голове не появляется.
Их научили клепать циклы, но целостного знания о том, как написать, например интернет-браузер (из чего он вообще состоит), в голове не появляется.

При изучении основ программирования в школе просто нет такой цели.
Зачем вообще изучать строение интернет-браузера?

В 1996-м популярность 8-биток прошла, они давно пылились в шкафах,


Кто-то очень много кушать. ;)
UFO just landed and posted this here
Начинал с бейсика, потом перешел на паскаль, дальше на ассемблер и Си. Плюсы освоил уже после универа, на первой работе, где писал прошивки для AVR. Считаю, что язык вторичен, в первую очередь надо понимать, что такое компьютер, как он работает, организацию памяти, какие бывают данные, как они хранятся и обрабатываются. Для начала бейсик вполне подходит.

Примерно тот же путь, только ассемблер изучался одновременно с паскалем, а си — одновременно с плюсами и FoxPro.
Ну и тогда же начали появляться VisualBasic, BP for windows, а дальше — Delphi ну и понеслось…
Язык вторичен. Первично понимание алгоритмов, знание устройства платформы, под которую софт пишешь и понимание приоритетов софта: производительность/удобство для пользователя/лёгкость поддержки и сопровождения (обычно можно выбрать только одно)

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

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

UFO just landed and posted this here

Ну и midpack/digpack тоже с поддержкой паскаля… И про Covox забыли ;)

У меня до сих пор сохранились как BLASTER.PAS вместе с PLAYS3M.PAS, так и MIDI*.PAS. Но чего там звук, есть у меня даже CDROM.PAS… Turbo Pascal просто поражал степенью свободы после QBasic. Но это не уменьшает достоинства последнего, конечно.

Именно. А при наличии знаний ассемблера и железа можно было мегавещи делать. Тот же VGA/MCGA 3202008bit режим — ваще бомба...

Честно говоря, не понимаю этого нытья. Я начинал немного раньше, с МК-61 и БК-0010. В школе (вернее в УПК) давали GW Basic на Д3 28 (желающие могут погуглить этот гробик). Графики не было, но играть (и писать игры), например в Xonix это не сильно мешало. Ну а когда у друга появился 8-ми битный «Вектор 06Ц», то и графика подоспела (даже цветная). Во всю писали разные штуки на Бейсике и с лёгким недоумением ломали Форт. В институте (потом его переименовали в университет) учили, ага, Паскалю (8000-ному под ЕС-1046, на перфокартах), с графикой, как догадываетесь, тоже был облом, а звуком могли порадовать «Бармалеи». Но это опять никому не мешало. REXX и ассемблер IBM 370 (а также канальные программы — та ещё тема) изучал уже по собственному почину, чтобы ломать СВМ. Курсе на 3-ем (вот тут начались 90-ые) появился класс с XT-ками. Продолжили на Turbo Pascal-е (том который ещё не умел делать exe-ники, а только com-ы). Графика уже была, CGA-шная. Аж в 4 цвета, но их можно было переключать. Помню на недельном практикуме писал по одной программке за занятие (не танчики конечно, но анимированные ханойские башни — легко), со звуком, графикой и без ассемблерных вставок. Примерно в то же время начал работать на кафедре и появился постоянный доступ к PC. Писал на FoxBase и Turbo Pascal-е разные штуки для Компрессорного завода (первый аутсорс). Паскаль же помог и при поступлении на первую работу. За одну ночь на кафедре написал под заказ презентацию (PowerPoint-а тоже не было, ага) с графическими эффектами на EGA (тут, конечно, без ассемблерных вставок не обошлось, но не понимаю, что вы на них так ополчились?). С мышью тоже всё было норм (даже графические курсоры в текстовом режиме с перекодирокой знакогенератора, по примеру NU тоже делали). На работе был уже Borland C++, а потом и просто Си (уже под HP-UX-ом). Так в последующем и чередовал Си с Паскалем (если за Паскаль считать и Delphi тоже). Ничего, жив здоров, быстро осваивал новые языки. Perl, например, изучил за 2 недели (жизнь заставила). Что касается Internet-а, то его конечно не было, но компьютерные журналы и BBS сильно помогали.
На уроках практически сразу начинали говорить про begin, println и if, что запирало учеников внутри бейсико-паскалевской парадигмы. Оба эти языка можно считать исключительно учебными.
begin/end или скобочки это совсем не парадигма. А так ведь можно сказать, форма скобок здесь не та, шрифт поменяйте, а то я не могу в таких условиях программировать, парадигма, понимаете ли, не та.
Зачем учить детей фейковым языкам
Что значит «фейковые языки»? Что значит «нормальная платформа»?
Школа нужна не для того, чтобы сделать из всех физиков, химиков, программистов и великих спортсменов. Это как бы прерогатива совсем других ступеней образования.
Однако, школа закладывает фундамент. Цель её — научит учиться. подготовить мозг и вообще организм ребенка. В школе изучают синусы\косинусы\термодинамику\программирование\химическиё формулы\строение человека и бегают на лыжах совсем не для того, чтобы после школы всем решать системы уравнений и становится олимпийскими чемпионами.
Цель совсем другая — научить школьника логически мыслить, анализировать, делать выводу, развить память, в конце концов, заучивая стихи.
Посещение уроков физкультуры не сделает из ребенка спортсмена, но задаст вектор развития.
Поэтому, инструмент в школе должен быть простой и понятный, чтобы не отвлекаться от абсолютно незначащих на данном этапе вещей.
Если человек не способен реализовать простую задачу на простой языке ( на который задача отлично ложится), то ему ничего не поможет, ни «нормальные платформы», ни шрифт с правильными скобочками. Я видел немало людей, которые раскладывали пасьянс, нажимая перед каждым ходом кнопку подсказка. И искренне считали, что они супер игроки. Также, я видел немало людей, считающих себя суперпрограммистами, но неспособными реализовать простейшие структуры данных, они запинались на каждом шагу и тратили кучу времени на поиск нужной библиотеки или фреймворка, потому что без этого они не могли дальше написать ни строчки. Это карго-культ.
Однако, школа закладывает фундамент. Цель её — научит учиться.

Я когда получал первое высшее в МИФИ на Кибернетике, все вокруг, да и мы сами в первую очередь, на все стороны кричали, что главное что дает институт — учит учиться.
А вот когда я получал второе высшее за деньги, это была другая картина — там не только учили учиться (что, безусловно, очень важно), но и давали предметы более целостно и утилитарно. За время обучения ты получал реальный опыт, с которым можно было идти дальше, а не по принципу «мы дадим базу, а кому надо, тот сам доучится».
Разумеется, учимся мы все каждый день. Но в одном месте мы получаем продукт, а в другом полуфабрикат. Пусть и качественный.
Но в одном месте мы получаем продукт, а в другом полуфабрикат.

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

В 95-97 годах в нашей школе в НН ребята делали практически тоже самое, но на QBasic 4.5, т.е. одна пара товарищей составила программу генератор спрайтов, а потом была написана программа подобия генератора уровней, в которой можно было рисовать, подгружать спрайты и сохранять на жесткий диск проект с генерирование файла формата бэйсик, который это все отдельно выводил для дальнейших манипуляций(так была написана одна аркада в стиле арканоида)


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


Для DOSa эти языки программирования были хороши, но с приходом новых ОС и технологий они ушли, уступив место другим более специализированным проектам

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

Пусть разновидности «Бейсика» кое-где используются.

А как же… Delphi? И в отличии от всяких бейсиков в экселе и 1С это была полноценная среда разработки, просто в какойто момент проиграла конкуренцию.

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

Насчет бейсика полностью согласен. Бейсик скорее мешает создать в голове картинку как это все работает, потому что позволяет писать все как попало. Сделано для тупых так, что умный не поймет. А вот после Паскаля я без проблем пересел на PHP — ничего принципиального нового на тот момент еще не было.
Бейсик скорее мешает создать в голове картинку как это все работает, потому что позволяет писать все как попало.

можете объяснить конкретнее? многие «недостатки бейсика» в некоторых современных языках сейчас называют достоинствами
А, можете уточнить?
Про какие многие «недостатки бейсика» идёт речь, и в каких современных языках они достоинство?
ну например vb ругали за тип variant
а потом внезапно динамическая типизация стала трендом
Самый большой недостаток бейсика — макаронистость из-за GOTO. Дальше идёт, на мой взгляд, отсутствие структурированности. Нумерация строк не позволяет после что-либо добавлять в середину кода из-за того, что закончились цифры в этом месте.

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

Мы сейчас говорим про бейсик до 80х годов? Уже например в QuickBasic номера строк стали необязательны и уже навязший на зубах goto превратился в обычный вызов процедур. (но у многих почемуто до сих пор чешется от этого слова, хотя людей писавших на бейсике с обязательной нумерацией не сильно то и много, среди тех кто про это вспоминает)
Увы, самое моё плотное знакомство с бейсиком было на ZX-Spectrum. В школе был КуМир, в ССУЗе — паскаль, java уже сам изучал. Но за тот бейсик могу сказать, что подпрограммы там были, вызывались через GOSUB
Тут имеются в виду подпрограммы как функции. Sub/EndSub вспоминается. :) На спектруме такого не было. А в QBasic было.
Когда довелось программировать на Турбо Бейсике,
GoTo использовал только старший программист, мне хватало структурных операторов.
и соответственно никакой надобности в прямой нумерации строк не было (94г.)

P.S. Есть ещё что можете отнести к недостаткам Бейсика, как языка программирования?
Нумерация строк не позволяет после что-либо добавлять в середину кода из-за того, что закончились цифры в этом месте.

Перенумерация строк делается одной командой. После этого «цифры в этом месте» внезапно появляются.

За GOTO в паскале обычно бьют канделябром по харе.

Вы какой бейсик с каким паскалем сравниваете? Кстати, паскаль вообще мог работать в диалоговом режиме?
можете объяснить конкретнее? многие «недостатки бейсика» в некоторых современных языках сейчас называют достоинствами

Это сложно. Я с бейсиком работал всего пол года более 15 лет назад. Детали уже не помню, остались только впечатления:

1. Не строгая типизация. Ученику пытаются объяснить, что такое типы и зачем они нужны, но из задач это не ясно, ведь можно писать как хочешь.
2. Экономия на буквах. Паскаль можно тупо взять, прочитать и, если ты хоть немного знаешь английский, понять, что программа делает. С бейсиком так не прокатит, все операторы пишутся сокращенно, и нужно именно знать эти сокращения, чтобы чтото понять. Нельзя прийти в середине симестра и просто так взять и чтото решить. Школьникам тем более непонятно зачем учить эту белиберду.
3. Нет точки запятой в конце операторов. Спагетти код обеспечен даже на школьных задачках.
прямо по всем пунктом вы описали python который сейчас рекомендуют всем учить как идеальный язык для обучения современных программеров
причем все 3 ваши пункта там считаются достоинствами
Не строгая типизация

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

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

Простите, как это связано?
А что делать тем школьникам, которые изучают немецкий или французский? Им непонятно, зачем писать длинные слова вместо коротких.

Дык, язык программирования надо так же учить как и язык общения. Он поэтому так и называется — язык. И если его придумали на английском — ничего не попишешь. С другой стороны, в 1С есть русский и ничего учить для русскоязычного не надо:
image
Наберите-ка
Если чисто<1e-7 То
Вот потому я и не люблю подобные языки.

ничего учить для русскоязычного не надо

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

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

Как-то так?
Варкалось();
хливкие[шорьки].пырялисьПо(наве) и хрюкотали(зелюки).как(мюмзикиВМове);
Вы, наверное, шутите. Я говорил о языке программирования, а не именах переменных и функций.
Имена переменных — должны быть терминами из предметной области.

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

Заголовок спойлера
Forth
Ну это как бы в теории. А на практике таки содержит.
DUP ROT SWAP ALLOT IF ELSE THEN — слова определены в любом интерпретаторе форта искаропки, чем не ключевые? :)
> < <= >= + — = @!.,:; — чем не спецсимволы? :)
чем не ключевые?

Дык это простые подпрограммы, они могут быть переопределены и не являются частью синтаксиса. Все равно что назвать в Си ключевым словом printf.

чем не спецсимволы?

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

Пожалуй единственными спецсимволами в нем являются пробелы и переносы строки ;)
Дык это простые подпрограммы, они могут быть переопределены и не являются частью синтаксиса. Все равно что назвать в Си ключевым словом printf.

Дык если убрать все «простые подпрограммы», то форт станет абсолютно бесполезен. Так что — хотим мы или нет — часть «простых подпрограмм» придется оставить. Как минимум те, которые позволяют определять новые слова. :)

Пожалуй единственными спецсимволами в нем являются пробелы и переносы строки ;)

Ну тут да, согласен. Веселый язык. :)
DUP DROP SWAP OVER ROT
обычные слова Форт языка, не лучше и не хуже других реалий в других языках.

P.S. Чем плоха идиома слова DUP — дублирования значения для дальнейших действий со значением?
Можно и так
: add { a b -- }
a b + ;

@" а и б сидели на трубе а упала б пропала кто остался на трубе?" :)
Можно сказать и всерьез про APL (значки).
Не разделяю эту концепцию.
Отдельная разработка комментариев — хорошая самопроверка.
Пересказав одну и ту же мысль тремя разными способами (третий — юнит-тесты) — лучше её понимаешь.
Простите, мы о каком бейсике говорим?

На вид древнее чем Турбо Паскаль7.0. Турбо Бейсик? Тогда все было «турбо».
А что делать тем школьникам, которые изучают немецкий или французский? Им непонятно, зачем писать длинные слова вместо коротких.
Им идти в ПТУ. В моей школе немецкий учили только неуспевающие в наказание, потому что школе тоже нужно было план по немецкому делать. И это были 90-ые. Учить другие языки, не зная английского, в 2к19 это явно какое-то не правильное образование. Скорее всего родители просто забили болт, а чиновники съэкономили. Информатикой тут делу уже не поможешь.
Простите, как это связано?
Мысль должна заканчиваться точкой. В бейсике получается мыслей нет, только поток сознания. Усваивать такое сложнее.

DMGarikk
прямо по всем пунктом вы описали python который сейчас рекомендуют всем учить как идеальный язык для обучения современных программеров
причем все 3 ваши пункта там считаются достоинствами

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

я практически тоже самое могу сказать про javascript если вы питонистов сектантами считаете (смотрите, мы скоро так дойдём до шутки 'в новостях говорят один _____ едет по встречке. да какой один, их тут сотни!!')… парадигма меняется, за старое держатся не всегда хорошо
===
У вас предвзятое мнение, на самом деле я с вами в чемто согласен (учитывая что я когдато начинал с бейсика, потом писал на C# и java, но сейчас зарабатываю на жизнь на python-е… мне всёравно остаются ближе C# и java как языки со строгой типизацией)
Но теперь мне стало както всёравно на чем программировать, надо будет на js писать буду на нем писать, надо на ruby — и его освою. по прошествии моего опыта работы я понял что плохих инструментов не бывает, если мозги на месте.
Турбо Бейсик?

А разве в нём не строгая типизация? Я, конечно, на нём всего пару раз писал, но запомнилось, что были тип с плавающей точкой, целый, и строковый. Необъявленные переменные — по умолчанию с плавающей точкой. Если нужно что-то другое — нужно использовать суффиксы типа.

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

А в моей — класс ровно поделился на английскую и немецкую группу. И в институте тоже немецкий не считался чем-то хуже английского.

А вообще, по моему опыту, те, кто знал, что значат все эти слова в английском языке — хуже врубались, что они значат в языке программирования. Я, вот, английского не знал, и потому код читал свободно, без лишних ассоциаций.
Проиграла она относительно. Три миллиона пользователей в мире юзают, версии постоянно выходят. Вот недавно как раз.
Паскаль — отличный язык для обучения основам программирования. Строгая типизация, компиляция, минимальная поддержка ООП, даже указатели есть. С и С++ — слишком сложно для начала (мне даже после Паскаля было очень больно разбираться, хотя сейчас программирую именно на плюсах).
> Я тогда таскал с собой вот это творение емкостью 360 кБ.
На картинке у вас дискета двойной плотности, на нее влезает 720кб (в формате писюка): 160 треков по 9 секторов на каждом по 512 байт.
Так то на писюке. А на дисководе БК писалась только половина.
В 90е образовательного Госта по информатике еще не было. Учили программировать на том языке который знал учитель, кому повезло доставался С или Паскаль, кому нет qBasic, если совсем не повезло — осваивали текстовый редактор Write (кажется) под dos вместо программирования.

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

устаревший на 20 лет язык, который всё никак закопать не могут?
устаревший на 20 лет язык, который всё никак закопать не могут?

Он еще и проприетарный!
На самом деле давать скриптовый язык для автоматизации рутины с документами — хорошая идея. На таком языке "из коробки" можно будет давать "прикладные" задачи. Но на VBA писать неудобно и неприятно. Поэтому питон или powershell могут подойти больше.

Да не, тренировки в Visual Basic потом помогают в 1С, если вдруг кого-то туда нечаянно затянет.
Стоит напомнить что под все программирование в школьной программе выделено хорошо если 10 занятий. Часть из которых ребенок пропустит по болезни/прогуляет, ожидать чего то серьезного от школы крайне наивно.
Интересно, имеется ли смысл в такой ситуации, знакомить учащихся с языком программирования Форт примерно по такой книге?
Л. Броуди. «НАЧАЛЬНЫЙ КУРС ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ ФОРТ» (хотя это уже немного устаревшая книга)

P.S. Ну или другой книге данного автора ЛЕО БРОУДИ «СПОСОБ МЫШЛЕНИЯ — ФОРТ ЯЗЫК И ФИЛОСОФИЯ ДЛЯ РЕШЕНИЯ ЗАДАЧ»
Онлайн-версия на английском более актуальная, примеры для ANS-стандарта.

Хотя, тут языки с динамической типизацией считают плохими для обучения, а в форте типизации вообше никакой…
В Форте («стандартно») типизация определяется типом операций (отображаемым в названии операции) применяемой к аргументам.

P.S. дополнительный контроль типов можно добавить на уровне среды IDE или варианта Форт языка (пример: StrongForth), но это мало кому интересно и востребовано. (Форт «мышление» вне условных рамок типовых задач)
Учитывая, ещё тот факт, что в Форт основная ячейка хранения данных CELL — определяемая разрядностью Форт-системы (32,16, или 64). ( считывание и Char (8-мь бит) происходит в часть данной ячейки — размерности ячеек стека)
Зайдите на hh и посмотрите вакансии на Delphi.
Вот только вчера видел вакансию на 300к. (разработчика!)
А уж сколько энтерпрайзных проектов на нём написаны и до сих пор живы и требуют развития и поддержки — это вообще песня )

Так что, каждый раз когда мне говорят, что Pascal — учебный язык меня пробивает на нервный смех.
Вчера (вроде) на РБК промелькивал сюжетец о том, что хорошо бы преподавать Доту в средней школе. Вот теперь я полностью готов сказать, что не так у нас с образованием. Вместо того, чтобы нормально давать математику, физику и иностранные языки, давайте будем рассказывать средним школьникам о компьютерных играх, ага. Причём, не абы каких, а вызывающих жёсткую зависимость. Как будто им и так этого не хватает. Заметьте, им не про архитектуру Доты или Варкрафта собираются рассказывать. Из них собираются готовить киберспортсменов. Ещё с пелёнок, угу. Вот кем надо быть, чтобы такое придумать?
Sign up to leave a comment.

Articles