Comments 184
На уроках практически сразу начинали говорить про begin, printlm и if, что запирало учеников внутри бейсико-паскалевской парадигмы. Оба эти языка можно считать исключительно учебными. Их «боевое» применение практически невозможно.
вас не смущает что pascal и basic долгое время были полноценными 'боевыми' языками, на которых писали в том числе софт и под мейнфреймы?
Время конечно несколько изменилось, но я бы поопасался так принижать историю этих инструментов
Усугубляло ситуацию крайне мало число сторонних библиотек и модулей. Их можно было сосчитать по пальцам одной руки.
не особо понимаю в чем тут минус?
я вот зато видел проект который создавался одним человеком который очень активно использовал много стороннизз библиотек и модулей… а через 5 лет штук 6 библиотек были заброшены авторами и в них не появилась поддержка современных процессоров и ОС, новых версия языка и проект попал под угрозу полного переписывания, и как выяснилось что человек его написавший был совершенно неспособен даже понять КАК и ЧТО именно делают эти библиотеки, код использования которых он накопипастил из мануала когда их внедрял… для него это был magic и черный ящик… и написать самостоятельно такую библиотеку он соответственно не мог
вас не смущает что pascal и basic долгое время были полноценными 'боевыми' языками, на которых писали в том числе софт и под мейнфреймы?
Да, это так. Но то время давно прошло. В 90-х, покуда еще царствовал DOS, на Pascal писалась одна программа из 1000, как мне кажется.
не особо понимаю в чем тут минус?
В отсутствии библиотек возникает масса ограничений. Вы остаетесь без готовых инструментов.
В отсутствии библиотек возникает масса ограничений. Вы остаетесь без готовых инструментов.
важно умение создать себе инструмент и понять как он работает, а потом с этим знанием можно и сторонние реализации использовать.
В данном случае, я например за то чтобы программист знал как работает TCP и что такое фрагментация и как это всё добро попадает в его сокеты, а не тупо по шаблону писал $.ajax(«...бла бла) и на выходе получал красивый json-чик
Это Паскаль
Там даже тетрис шёл в нагрузку
Также, если мне не изменяет память, первые версии Windows тоже были написаны на Паскале.
doublecmd.sourceforge.io
Тип PASCAL определен в файле windows.h следующим образом:
#define PASCAL _pascal
Функция, описанная с ключевым словом _pascal, использует соглашение языка Паскаль при передаче параметров, которое отличается от соглашения, принятого в языке C. В частности, в отличие от определения обычной функции C, определение функции, использующей соглашение языка Паскаль, должно содержать точное перечисление всех используемых параметров.
Это связано с тем, что такая функция должна сама освобождать стек перед возвратом. Если перед вызовом функции, описанной с ключевым словом _pascal или PASCAL, записать в стек неправильное количество параметров, перед возвратом из функции обязательно произойдет неправильное освобождение стека.
P.S. В Форт, например, для разделения данных и адресов возврата ввели в язык два стека данных!
Но почему-то кроме фортеров никто так не делает.
как бы намекает на происхождение.
он лишь намекает на то что в ядре старых windows очень много всякой оптимизации с заточкой на код актуального на тот момент софта, если полистать древние версии winapi там всплывают форматы и типы файлов, железно прибитые к ядру от всяких ископаемых табличных процессоров до энтерпрайзного софта.
А учитывая что существовал Microsoft pascal, не удивительно что и под него были какието оптимизации, да и тот факт что часть какогото служебного софта действительно на нём могло быть написано
Т.е. просто определенная последовательность выполнения «как в Pascal».
Из-за этого непонимания, многие считают что если в софте есть такое ключевое слово, то он писался на Pascal. В самом же Pascal такого ключевого слова нет.
он лишь намекает на то что в ядре старых windows очень много всякой оптимизации с заточкой на код актуального на тот момент софта
Там была не оптимизация, а сплошные компромиссы, костыли и хаки чтоб вписаться в жесткие ограничения массового железа. Напомню что Windows 1.0 был впервые представлен в ноябре 1983, а за полгода до этого вышел PC/XT с официальным максимумом в 256 килобайт оперативки. И из-за этого приходилось идти на разные ухищрения, к примеру в первой версии windows окна не могли быть перекрываемыми, и выводились только черепицей. И таких костылей и компромиссов было множество.
Одним из таких костылей и стало использование Паскаля, «сейчас напишем прототип на рабочем Паскале, а критические части на ассемблере. А потом когда компилятор Си отладят мы сконвертируем нашу работу на Си! Это же не займет много времени?». Только дьявол кроется в деталях, а дедлайн на носу, и Билл Гейтс через плечо заглядывает в очках велосипедах с немым вопросом «сколько мне еще завтраками общественность и IBM кормить?».
И под давлением обстоятельств критический код (15% от общего объема кода) решили не трогать, а конвертируемый код Си по вызовам становится Паскалевским.
А дальше все как обычно, «Работает-не трогай!», наследие совместимости и решений здесь и сейчас.
И еще из википедии Соглашение о вызовах
pascal — соглашение о вызовах, используемое компиляторами для языка Паскаль. Также применялось в ОС Windows 3.x.
Аргументы процедур и функций передаются через стек, слева направо. Указатель на вершину стека (значение регистра esp) на исходную позицию возвращает вызываемая подпрограмма. Изменяемые параметры передаются только по ссылке. Возвращаемое значение передаётся через изменяемый параметр Result. Параметр Result создаётся неявно и является первым аргументом функции.
В первом абзаце речь идет именно о компиляторах Паскаля. О других языках речь не идет.
П.С. Чтоб снять невольные вопросы скажу сразу: лично мне Си нравиться больше Паскаля. Но у вас может быть ваше личное мнение, не буду его оспаривать во избежание холиваров.
Да, это так. Но то время давно прошло. В 90-х, покуда еще царствовал DOS, на Pascal писалась одна программа из 1000, как мне кажется.
Вы не слышали слова Дельфи?
На удивление эта прога продержалась потом еще очеееень много лет в проде ))))
P.S. Для парня 17-ти лет, без инета и компьютера дома (в колледже тоже не было инета) ушло полгода.
Хотя по современным меркам программа очень простая. Много (всё) пришлось рисовать с помощью линий, точек и кружочков)))
После паскаля в универе был Си — было почему то ощущение, как будто руки развязали )))
Очень мне зашел. Хотя — многим и Паскаль не зашел. В колледже на программирование закрывали глаза.
А вот в универе половину первого курса тупо отсеял препод — Гуру паскаля (который умеет в числа Фибоначчи, но в реальной жизни не писал софт для НИКОГДА)
Потом Qt/C++, Python, разные удобные IDE, либы, фреймоврки, примеры в инете, форумы. Продуктивность выросла с тех пор в сотни раз.
В целом сейчас я бы не пудрил мозг Паскалем — а на Питоне основы программирования и алгоритмизации преподавал бы. Хотя снова суют Паскаль (ABC) на 1 курсе даже во многих универах.
P.S.2 Вспомнил — пару месяцев заняла разработка азставки к этой программе — где звезды летят на встречу. Причем писать я начал именно сначала заставку))))
Через много много лет я переписал эти летящие звезды на Qt (just for fun)))))
В целом сейчас я бы не пудрил мозг Паскалем — а на Питоне основы программирования и алгоритмизации преподавал бы.
Не уверен, что язык с динамической типизацией и gc — это лучший выбор для изучения основ программирования.
и gc
тоесть опять только 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. В том же Турбо Паскале хотя бы :)
Посмотрите, что даёт поиск по слову Pascal на Github
На уроках практически сразу начинали говорить про begin, printlm и if, что запирало учеников внутри бейсико-паскалевской парадигмы.Бейсик — это изначально был язык, в котором все строки нумеровались, переход осуществлялся по номеру строки и отсутствовал любой намек на указатели. Именно так я учился программировать в детстве и это конечно была та еще парадигма. А еще, в моем Бейсике не было текстового редактора. Нужно было выполнять «List», останавливать пробегающую программу, искать нужную строку, вызывать редактирование этой строки и вносить исправления. Так я написал свою первую игру с самолетиком, бомбящим танки на горах :).
Паскаль напротив по тем временам был прекрасный язык, оснащенный прекрасной IDE, и все это позже получило развитие в Delphi.
Что касается дисководов, то тогда и энтузиазм был другой. Я например учился программировать записывая программы на магнитофон и ничего. Сейчас бы не выдержал такого.
P.S. Мне вот, на нём довелось около года делать промышленный бухгалтерский и лабораторный софт на предприятии.
Чем он меня «добил», так это то, что много вещей делалась через базис строковых операций и слишком многословным кодом не оставляющим свободное место на листинге программы.
но, даже перестав на нём программировать ещё некоторое время продолжал немного дорабатывать решения полученные на нём. :)
Неправильный у Вас Бейсик был, знакомы ли Вы были с Турбо Бейсиком?Turbo-basic — что-то знакомое, почему-то тревожное… Первую IBM-совместимую машину я увидел позже, в институте в конце 1-го курса, это была «Искра» и писать приходилось на Фортране. Преподаватель информатики у нас был КТН по энергетике не слышал о другом стиле программирования, кроме макаронного, учил нас какой-то ереси и высказывал подозрение, что граф электрической сети таки можно как-то обойти быстрее чем за n^2 времени. Серьезно, не вру :). Просто прочитать какую-нибудь книгу ни ему ни нам в голову не приходило.
На втором курсе добрался до Borland-паскаля. И тогда помню подумал «Хоспаде, наконец вменяемые язык и среда программирования, это-ж просто праздник какой-то!».
На третьем курсе мы попробовали писать на дельфи под Winsows 3.11, но заказчик сказал ему такой софт не нужен, а нужен простой dos, потому что понятно, что этого виндовса на каждой машине все равно у него никогда у него не будет. И данные должны храниться в текстовых файлах и никак иначе.
Именно незнанием того, чем был Бейсик изначально, вызвано недоумение многих утверждением Дейкстры (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.
Вы правы в том, что человеку вначале нужно показать дальнейшее направление. Но это не значит, что нужно рассказывать архитектуру чего-то конкретного. Углубляться в эту конкретную архитектуру еще более бесполезно.
Цель курсов в том, чтобы человек перестал нуждаться в курсах. Для этого внезапно достаточно основ императивного программирования и базовых понятий ООП. Дальше студент устраивается на работу и уходит в свободное плавание.
Вот тут большинство игр написано на QuickBasic, скажем так не на самом удачном для реализации сложных программ языке программирования.
Но люди доводили их до вменяемого состояния.
Потом эти люди, прорвавшись через все барьеры и неустроения, тут рассказывают, что мол только так и надо. Грустно (
К примеру моя первая машинка из 1990 года MSX2 YIS503IIIR (z80@3.53mHz ram128kb/vram128kb, no floppy disk, ЛВС на MIDI, из внешних накопителей — только кассетник, только хардкор) на котором основным языком был интерпретатор бейсика с номерами строк, без локальных переменных в подпрограммах, с ограничением длины имени переменной в два символа, с GOTO-ми и GOSUB-ми, так в нем на все творчество оставалось всего 23 килобайта. На мелких программах этого было достаточно, но когда дело дошло до написания большого проекта (психологическое тестирование (MMPI, IQ, интроверсия/экстраверсия и т.д. ) школьников начальной школы в психологическом центре при детском доме), проект был распланирован, поделен на части (диапазоны строк, доступные имена переменных, размерности массивов), написан, отлажен, сведен в одно целое, перестал влазить в память, был оптимизирован чтоб влазил в память, и был выпущен в свет. И пользовались этой программой психологи до года 97-98.
И когда мы (школьники) писали эту программу на нашу ораву не то что интернета не было, даже ББС-ок не было, были только две истрепанных книжки от КУВТ-а, зачитанные до дыр. А еще у нас были горящие глаза и желание написать программу.
А логика тут в том что живем мы здесь и сейчас, и проги которые мы пишем нужны здесь и сейчас, и если мы будет сидеть и ждать
Вспомним демосцену хотя б:
habr.com/ru/company/mailru/blog/406969
А танчики я уверен с 0 вы бы не один семестр писали.Все очень сильно изменилось, когда все привыкли к компьютерам и в программисты пошли люди, которым не очень нравится программировать. Я сейчас довольно средний программист, если не ниже, но диггера (не сильно проще танчиков) я написал в 10 классе за неделю на ассемблере с записью на магнитофон (ни о каком семестре речь не шла). А все мои знакомые, которые стали хорошими программистами были уверены, что могут сделать это за день в нормальных условиях. Причиной этих успехов была мотивация — дикий восторг от компьютера самого по себе и возможности его программировать.
Как обучать программированию детей сейчас, непонятно, потому что они страшно избалованы изобилием технологий, софта и прочего в интернете. Даже если сразу показываешь как сделать мод для Майнкрафта или платформер на Unity это вызывает довольно мимолетный интерес. Потому что в интернете этого добра и так перебор.
но прочитав книгу Баранова, Ноздрунова «Язык Форт и его реализации», понял, что это мой выбор. :) (ну и самостоятельно ассемблер для Z80, как без него)
P.S. В качестве Вау-эффекта школьникам можно предложить к ознакомлению
Forth Haiku Salon
Для детей хорошо подходят языки, где сразу все наглядно и очевидно. Черепашья графика — вообще прекрасная вещь. Я своим, помнится, поставил MSWLogo и распечатал шпаргалку про пару десятков команд — и дети вполне увлеченно рисовали всяческие снежинки, по ходу громоздя циклы.
Для школьников постарше уже можно давать языки посложнее — но опять же, не языки промышленной разработки. Паскаль — нормально, а вот С++ с его неочевидными правилами, напластованиями стандартов, эзотерическими сообщениями об ошибках на три экрана — это уже перебор. Дети просто не смогут освоить его в полном объеме, а значит, неизбежно возникнут фатальные перекосы в зависимости от квалификации учителя: одни будут его использовать как «си с удобным комментарием //», другие — как скриптовой язык, который зачем-то надо компилировать и в котором надо обязательно написать в начале магические строчки
#include <iostream>
using namespace std;
int main() {
Ну или учитель окажется очень продвинутый и даст детям какую-нибудь визуальную среду разработки — и тогда все «программирование» будет заключаться в накидывании кнопочек на формочки и вбивании однострочников в обработчики нажатий.
Видел только одного человека, который подзавис на одном языке. В остальных любопытство брало верх и они изучали что-то новое. Я когда сам учился вышла первая джава, так я задание по компьютерной графике написал на джаве с запуском в браузере в джава аплете. А это были просто поверхности безье которые надо мышью вращать. Все писали на С/паскале и крутили клавишами.
Так что проблема надуманная.
Если человек заинтересуется и поймет, что красивые картинки это художник, а экшен это вот та "скукота" на бэке и она нравится то дальше он и сам горы свернет, а нет, ну так тут хоть танки, хоть калькуляторы, хоть тауэр дефенс для андроида — ничего не поможет.
Но есть проблема, что те, кто предрасположен к тому же программированию, зависнут именно на «обучающем» языке, потому как чтобы идти дальше, нужно силы и время.
Этой проблемы нет.
Люди — это не радиодетальки. Они прекрасно осознают, что в мире есть множество языков программирования, и что есть языки «престижные» и «непрестижные», «взрослые» и «детские» и т. п. Поэтому если у ребенка программирование на «несерьезном» языке заходит легко и без проблем — его интерес к «серьезным» языкам программирования практически неизбежен.
Есть другая, гораздо более важная проблема — синдром утенка. Человек, увлекшийся программированием на каком-то языке, быстро осваивает его особенности. Но потом, когда он берется писать на другом языке, он использует ухватки и привычки, оставшиеся от первого языка — и иногда это заметно даже через многие годы. И вот здесь становится важным, какой язык он изучал первым — потому что некоторые языки прививают весьма специфические привычки.
Например, код бывших сишников, переквалифицировавшихся в плюсисты, бывает полон сырых указателей, malloc/free и прочих strdup. Код джавистов, переквалифицировавшихся в плюсы, надо с лупой проверять на предмет утечек памяти: привычка делать new и забывать про delete очень живуча. А когда на плюсах пишут любители функциональных языков, приходится разбираться с простынями сообщений об ошибках из-за их попыток все запихать в многоэтажный шаблонный код.
В этом плане «учебные» языки типа паскаля или питона достаточно безопасны — они структурные, изолируют ученика от многих подводных граблей, и в общем и целом формируют довольно адекватные привычки.
И вот тут еще какой подводный камень. Приведу аналогию со спортом. Цель — сделать успешных спортсменов. Всех дружно учат составлять план тренировок, водят в спортзал. Но никто не говорит про то, что кроме тренировок есть еще питание, есть собственное пошаговое продвижение, есть особенности организма. В итоге мы имеем кучу людей, которые умеют составлять планы тренировок и делать определенные успехи, но выиграть реальные соревнования уже нет. Им не дают целостную картину.
P.S. когда я пишу «дети», то подразумеваю старшеклассников. А в начальной школе, конечно, ничего кроме Бейсика и не надо. При этом если старшеклассник в свое время пропустил Бейсик, то можно и не переживать.
Скажу о себе, начал с Паскаля(96-00), и сразу делал ассемблерные вставки. Потом ушел на Delphi(2000-2002), а потом ушел из этой сферы вообще. Хотя вполне мог уйти в С… Но не сложилось…
Тем временем вся учеба выглядит так: мы вас научим кататься не велосипеде, а на машине уже сами научитесь. При этом по факту у нас все катаются только на машинах.
Неудачная аналогия это как котенок с дверцей.
Какой тезис вы хотите аргументировать с помощью своей аналогии?
Цель — сделать успешных спортсменов. Всех дружно учат составлять план тренировок, водят в спортзал.
Кого "всех"? Где вы такое наблюдали? Как оценили факт "куча людей умеет составлять план тренировок, но не может выиграть соревнования"?
когда я пишу «дети», то подразумеваю старшеклассников.
Да какая разница: старшеклассники или младшеклассники? Чтобы писать что-то сложное, сначала нужно научиться основам. Какую цель вы хотите достичь когда предлагаете выдавать игрушки на занятиях, потому что человек учится в классе с каким-то номером?
Если старшеклассник в свое время пропустил бейсик обучение основам, то он будет банально отставать от тех, кто основы освоил. Срок обучения тут роли не играет.
Их «боевое» применение практически невозможно.
Хорошо, что в те времена интернета у нас небыло, и мы не могли прочитать о том, что возможно, а что нет. Просто писали… вполне себе боевое.
Что имеем в итоге: Паскаль — существенно более быстрая компиляция и чуть медленнее исполнение, Си — наоборот.
Всплакнул с 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-биток прошла, они давно пылились в шкафах,
Кто-то очень много кушать. ;)
Примерно тот же путь, только ассемблер изучался одновременно с паскалем, а си — одновременно с плюсами и FoxPro.
Ну и тогда же начали появляться VisualBasic, BP for windows, а дальше — Delphi ну и понеслось…
Язык вторичен. Первично понимание алгоритмов, знание устройства платформы, под которую софт пишешь и понимание приоритетов софта: производительность/удобство для пользователя/лёгкость поддержки и сопровождения (обычно можно выбрать только одно)
И вообще есть огромный зоопарк устройств, и, соответственно, огромная область программирования, вопрос выбора языка программирования под которые никогда не поднимается, т.к. язык жестко задан производителем. И не факт, что вы его изучали в институте, вот хелп, вот тех.поддержка — разбирайтесь сами. Примеры на гитхабе? Где-где?
Ну и midpack/digpack тоже с поддержкой паскаля… И про Covox забыли ;)
На уроках практически сразу начинали говорить про begin, println и if, что запирало учеников внутри бейсико-паскалевской парадигмы. Оба эти языка можно считать исключительно учебными.begin/end или скобочки это совсем не парадигма. А так ведь можно сказать, форма скобок здесь не та, шрифт поменяйте, а то я не могу в таких условиях программировать, парадигма, понимаете ли, не та.
Зачем учить детей фейковым языкамЧто значит «фейковые языки»? Что значит «нормальная платформа»?
Школа нужна не для того, чтобы сделать из всех физиков, химиков, программистов и великих спортсменов. Это как бы прерогатива совсем других ступеней образования.
Однако, школа закладывает фундамент. Цель её — научит учиться. подготовить мозг и вообще организм ребенка. В школе изучают синусы\косинусы\термодинамику\программирование\химическиё формулы\строение человека и бегают на лыжах совсем не для того, чтобы после школы всем решать системы уравнений и становится олимпийскими чемпионами.
Цель совсем другая — научить школьника логически мыслить, анализировать, делать выводу, развить память, в конце концов, заучивая стихи.
Посещение уроков физкультуры не сделает из ребенка спортсмена, но задаст вектор развития.
Поэтому, инструмент в школе должен быть простой и понятный, чтобы не отвлекаться от абсолютно незначащих на данном этапе вещей.
Если человек не способен реализовать простую задачу на простой языке ( на который задача отлично ложится), то ему ничего не поможет, ни «нормальные платформы», ни шрифт с правильными скобочками. Я видел немало людей, которые раскладывали пасьянс, нажимая перед каждым ходом кнопку подсказка. И искренне считали, что они супер игроки. Также, я видел немало людей, считающих себя суперпрограммистами, но неспособными реализовать простейшие структуры данных, они запинались на каждом шагу и тратили кучу времени на поиск нужной библиотеки или фреймворка, потому что без этого они не могли дальше написать ни строчки. Это карго-культ.
Однако, школа закладывает фундамент. Цель её — научит учиться.
Я когда получал первое высшее в МИФИ на Кибернетике, все вокруг, да и мы сами в первую очередь, на все стороны кричали, что главное что дает институт — учит учиться.
А вот когда я получал второе высшее за деньги, это была другая картина — там не только учили учиться (что, безусловно, очень важно), но и давали предметы более целостно и утилитарно. За время обучения ты получал реальный опыт, с которым можно было идти дальше, а не по принципу «мы дадим базу, а кому надо, тот сам доучится».
Разумеется, учимся мы все каждый день. Но в одном месте мы получаем продукт, а в другом полуфабрикат. Пусть и качественный.
Редактор типа Art-Studio.
Игра Диктатор.
Игра Earth Shaker.
Писалось в школе после уроков, так как дома был только спектрум.
В 95-97 годах в нашей школе в НН ребята делали практически тоже самое, но на QBasic 4.5, т.е. одна пара товарищей составила программу генератор спрайтов, а потом была написана программа подобия генератора уровней, в которой можно было рисовать, подгружать спрайты и сохранять на жесткий диск проект с генерирование файла формата бэйсик, который это все отдельно выводил для дальнейших манипуляций(так была написана одна аркада в стиле арканоида)
я не согласен с автором в том, что это не пригодилось, многим информатика была до одного места, но в том же MS Office есть VBA, при помощи которого можно решать прикладные задачи, опираясь на тот прошлый опыт. В частности я так сделал проект для структурирования и заполнения типовых форм исполнительной документации в строительстве.
Для DOSa эти языки программирования были хороши, но с приходом новых ОС и технологий они ушли, уступив место другим более специализированным проектам
Пусть разновидности «Бейсика» кое-где используются.
А как же… Delphi? И в отличии от всяких бейсиков в экселе и 1С это была полноценная среда разработки, просто в какойто момент проиграла конкуренцию.
Но, в любом случае, если человек задумает связать свое будущее с программированием, ему придется учить с нуля другие языки.
Насчет бейсика полностью согласен. Бейсик скорее мешает создать в голове картинку как это все работает, потому что позволяет писать все как попало. Сделано для тупых так, что умный не поймет. А вот после Паскаля я без проблем пересел на PHP — ничего принципиального нового на тот момент еще не было.
Бейсик скорее мешает создать в голове картинку как это все работает, потому что позволяет писать все как попало.
можете объяснить конкретнее? многие «недостатки бейсика» в некоторых современных языках сейчас называют достоинствами
Про какие многие «недостатки бейсика» идёт речь, и в каких современных языках они достоинство?
За GOTO в паскале обычно бьют канделябром по харе.
Самый большой недостаток бейсика — макаронистость из-за GOTO
Мы сейчас говорим про бейсик до 80х годов? Уже например в QuickBasic номера строк стали необязательны и уже навязший на зубах goto превратился в обычный вызов процедур. (но у многих почемуто до сих пор чешется от этого слова, хотя людей писавших на бейсике с обязательной нумерацией не сильно то и много, среди тех кто про это вспоминает)
GoTo использовал только старший программист, мне хватало структурных операторов.
и соответственно никакой надобности в прямой нумерации строк не было (94г.)
P.S. Есть ещё что можете отнести к недостаткам Бейсика, как языка программирования?
Нумерация строк не позволяет после что-либо добавлять в середину кода из-за того, что закончились цифры в этом месте.
Перенумерация строк делается одной командой. После этого «цифры в этом месте» внезапно появляются.
За GOTO в паскале обычно бьют канделябром по харе.
Вы какой бейсик с каким паскалем сравниваете? Кстати, паскаль вообще мог работать в диалоговом режиме?
можете объяснить конкретнее? многие «недостатки бейсика» в некоторых современных языках сейчас называют достоинствами
Это сложно. Я с бейсиком работал всего пол года более 15 лет назад. Детали уже не помню, остались только впечатления:
1. Не строгая типизация. Ученику пытаются объяснить, что такое типы и зачем они нужны, но из задач это не ясно, ведь можно писать как хочешь.
2. Экономия на буквах. Паскаль можно тупо взять, прочитать и, если ты хоть немного знаешь английский, понять, что программа делает. С бейсиком так не прокатит, все операторы пишутся сокращенно, и нужно именно знать эти сокращения, чтобы чтото понять. Нельзя прийти в середине симестра и просто так взять и чтото решить. Школьникам тем более непонятно зачем учить эту белиберду.
3. Нет точки запятой в конце операторов. Спагетти код обеспечен даже на школьных задачках.
причем все 3 ваши пункта там считаются достоинствами
Не строгая типизация
Простите, мы о каком бейсике говорим?
Паскаль можно тупо взять, прочитать и, если ты хоть немного знаешь английский, понять, что программа делает.
А что делать тем школьникам, которые изучают немецкий или французский? Им непонятно, зачем писать длинные слова вместо коротких.
Нет точки запятой в конце операторов. Спагетти код обеспечен даже на школьных задачках.
Простите, как это связано?
А что делать тем школьникам, которые изучают немецкий или французский? Им непонятно, зачем писать длинные слова вместо коротких.
Дык, язык программирования надо так же учить как и язык общения. Он поэтому так и называется — язык. И если его придумали на английском — ничего не попишешь. С другой стороны, в 1С есть русский и ничего учить для русскоязычного не надо:
Если чисто<1e-7 То
Вот потому я и не люблю подобные языки.
ничего учить для русскоязычного не надо
Это не правда. Слова всё равно нужно учить по списку, потому что их значение в языке не тождественно принятому в разговоре.
А я лично считаю, что язык программирования не должен иметь общих слов с естественными языками. Чтобы гугл не принимал включённое в запрос ключевое слово как слово естественного языка.
я лично считаю, что язык программирования не должен иметь общих слов с естественными языками
Как-то так?
Варкалось();
хливкие[шорьки].пырялисьПо(наве) и хрюкотали(зелюки).как(мюмзикиВМове);
Имена переменных — должны быть терминами из предметной области.
Кстати, Вы подали хорошую идею. Идеальный язык — вообще не содержит ключевых слов, а только спецсимволы.
DUP ROT SWAP ALLOT IF ELSE THEN — слова определены в любом интерпретаторе форта искаропки, чем не ключевые? :)
> < <= >= + — = @!.,:; — чем не спецсимволы? :)
чем не ключевые?
Дык это простые подпрограммы, они могут быть переопределены и не являются частью синтаксиса. Все равно что назвать в Си ключевым словом printf.
чем не спецсимволы?
Они не имеют какого-то специального значения как в других языках и могут быть включены в любое имя.
Пожалуй единственными спецсимволами в нем являются пробелы и переносы строки ;)
Дык это простые подпрограммы, они могут быть переопределены и не являются частью синтаксиса. Все равно что назвать в Си ключевым словом printf.
Дык если убрать все «простые подпрограммы», то форт станет абсолютно бесполезен. Так что — хотим мы или нет — часть «простых подпрограмм» придется оставить. Как минимум те, которые позволяют определять новые слова. :)
Пожалуй единственными спецсимволами в нем являются пробелы и переносы строки ;)
Ну тут да, согласен. Веселый язык. :)
Простите, мы о каком бейсике говорим?
На вид древнее чем Турбо Паскаль7.0. Турбо Бейсик? Тогда все было «турбо».
А что делать тем школьникам, которые изучают немецкий или французский? Им непонятно, зачем писать длинные слова вместо коротких.Им идти в ПТУ. В моей школе немецкий учили только неуспевающие в наказание, потому что школе тоже нужно было план по немецкому делать. И это были 90-ые. Учить другие языки, не зная английского, в 2к19 это явно какое-то не правильное образование. Скорее всего родители просто забили болт, а чиновники съэкономили. Информатикой тут делу уже не поможешь.
Простите, как это связано?Мысль должна заканчиваться точкой. В бейсике получается мыслей нет, только поток сознания. Усваивать такое сложнее.
DMGarikk
прямо по всем пунктом вы описали python который сейчас рекомендуют всем учить как идеальный язык для обучения современных программеров
причем все 3 ваши пункта там считаются достоинствами
Питонисты к своему языку относятся как сектанты уже. Разумеется он у них и для образования подходит. Они им скоро людей исцелять начнут.
Питонисты к своему языку относятся как сектанты уже. Разумеется он у них и для образования подходит. Они им скоро людей исцелять начнут.
я практически тоже самое могу сказать про javascript если вы питонистов сектантами считаете (смотрите, мы скоро так дойдём до шутки 'в новостях говорят один _____ едет по встречке. да какой один, их тут сотни!!')… парадигма меняется, за старое держатся не всегда хорошо
===
У вас предвзятое мнение, на самом деле я с вами в чемто согласен (учитывая что я когдато начинал с бейсика, потом писал на C# и java, но сейчас зарабатываю на жизнь на python-е… мне всёравно остаются ближе C# и java как языки со строгой типизацией)
Но теперь мне стало както всёравно на чем программировать, надо будет на js писать буду на нем писать, надо на ruby — и его освою. по прошествии моего опыта работы я понял что плохих инструментов не бывает, если мозги на месте.
Турбо Бейсик?
А разве в нём не строгая типизация? Я, конечно, на нём всего пару раз писал, но запомнилось, что были тип с плавающей точкой, целый, и строковый. Необъявленные переменные — по умолчанию с плавающей точкой. Если нужно что-то другое — нужно использовать суффиксы типа.
В моей школе немецкий учили только неуспевающие в наказание, потому что школе тоже нужно было план по немецкому делать.
А в моей — класс ровно поделился на английскую и немецкую группу. И в институте тоже немецкий не считался чем-то хуже английского.
А вообще, по моему опыту, те, кто знал, что значат все эти слова в английском языке — хуже врубались, что они значат в языке программирования. Я, вот, английского не знал, и потому код читал свободно, без лишних ассоциаций.
На картинке у вас дискета двойной плотности, на нее влезает 720кб (в формате писюка): 160 треков по 9 секторов на каждом по 512 байт.
Имхо сейчас проще и полезней было бы тот же VBA в экселе детям показать.
Имхо сейчас проще и полезней было бы тот же VBA в экселе детям показать.
устаревший на 20 лет язык, который всё никак закопать не могут?
устаревший на 20 лет язык, который всё никак закопать не могут?
Он еще и проприетарный!
На самом деле давать скриптовый язык для автоматизации рутины с документами — хорошая идея. На таком языке "из коробки" можно будет давать "прикладные" задачи. Но на VBA писать неудобно и неприятно. Поэтому питон или powershell могут подойти больше.
Л. Броуди. «НАЧАЛЬНЫЙ КУРС ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ ФОРТ» (хотя это уже немного устаревшая книга)
P.S. Ну или другой книге данного автора ЛЕО БРОУДИ «СПОСОБ МЫШЛЕНИЯ — ФОРТ ЯЗЫК И ФИЛОСОФИЯ ДЛЯ РЕШЕНИЯ ЗАДАЧ»
Хотя, тут языки с динамической типизацией считают плохими для обучения, а в форте типизации вообше никакой…
P.S. дополнительный контроль типов можно добавить на уровне среды IDE или варианта Форт языка (пример: StrongForth), но это мало кому интересно и востребовано. (Форт «мышление» вне условных рамок типовых задач)
Учитывая, ещё тот факт, что в Форт основная ячейка хранения данных CELL — определяемая разрядностью Форт-системы (32,16, или 64). ( считывание и Char (8-мь бит) происходит в часть данной ячейки — размерности ячеек стека)
Вот только вчера видел вакансию на 300к. (разработчика!)
А уж сколько энтерпрайзных проектов на нём написаны и до сих пор живы и требуют развития и поддержки — это вообще песня )
Так что, каждый раз когда мне говорят, что Pascal — учебный язык меня пробивает на нервный смех.
Танчики на Паскале: как учили детей программированию в 90-х и что с этим было не так