Pull to refresh

Comments 55

Хорошо начинать познавать программирование с ассемблера, так как в таком случае придется хорошо изучить архитектуру ПК и в полной мере понять как все работает. Потом уже осваивать языки высокого уровня.
Я начинал с Sinclair Basic и считаю что лучше ничего не придумать, включил компьютер и он готов к программированию, даже не так — Бейсик в ПЗУ буквально заставлял тебя создавать.
Если говорить о ZX-Spectrum с его Z-80, то там, если что-то и желалось написать, то ничего особо путного, кроме как на ассемблере и не было возможности написать в силу весьма низкого быстродействия. Интерпретатор бейсика содержащийся в ПЗУ не позволял создать мало-мальски серьезное приложение даже по меркам тех времен. О чем собственно и свидетельствует тот факт, что 99% написанного ПО для ZX-Spectrum было исключительно на ассемблере.

насколько помнится в 64КБ (ROM+RAM) версии ZX-Spectrum
#0-#3FFF — область ПЗУ
#4000-#57FF — экранное ОЗУ
#5800-#5AFF — область атрибутов экрана
#5B00-#FFFF — ОЗУ

При такой организации и объеме памяти, а также скорости работы интерпретатора на бейсике ZX-Spectrum можно осваивать разве что крошечные задачки позволяющие понять отдельно взятые алгоритмы, но не написание какого-либо жизнеспособного ПО.

P.S. и если уже хотелось творить на ZX-Spectrum, то приходилось открывать книжку с описанием модели памяти и ассемблерных мнемоник Z-80 и использовать GENS и MONS, а позднее TASM и STS.
на бейсике ZX-Spectrum можно осваивать разве что крошечные задачки позволяющие понять отдельно взятые алгоритмы, но не написание какого-либо жизнеспособного ПО.

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


С помощью встроенного бейсика очень быстро можно понять нравится ли тебе программировать или нет.


Если тебе нравится программировать переходишь на ассемблер и реализуешь там более серьезные задачи.
А если хочется просто играть, набрал заветные: LOAD "", загрузил игру и играй себе.

Хорош кормить людей копипастой.
Ставь эмулятор, качай игры, нажимай shift+space — удивишься сколько игр написано на S-Basic 48k.
Тока эта… там может стоять защита от взлома, как например в футбольном менеджере (border 0: ink 0: paper 0 — самое простое, тебя ещё и послать могут).

Но да, графон как в Крузисе не получится.
А где копипаста?
Ставь эмулятор, качай игры, нажимай shift+space — удивишься сколько игр написано на S-Basic 48k.

За время пользования ZX-Spectrum (ПЭВМ Байт, сначала 48Кб, потом 128кб с TR-DOS и дисководом) с 1992-1999 увидел только то, что свыше 99% игр написаны на ассемблере. В свое время многие из них были перелопачены с помощью указанных выше отладчиков, ради добавления чит мода.
Ну, кстати, в сегодняшних реалиях подобную штуку можно провернуть, как курс «интернет-вещей» на ардуино или SMT32 — будет «стильно, можно, молодежно».
А в каком возрасте тогда его давать?
Если говорить о своем личном опыте, то ассемблер для КР1801-ВМ1 (ПЭВМ «БК0010-01») я начал осваивать в 10,5 лет самостоятельно. Ассемблер для Z-80 (ПЭВМ «Байт») в 12 лет. Без интернета и при минимальном объеме литературы. Полагаю при должном интересе к теме его способен понять любой ребенок. Другое дело, если интереса у ребенка нет. Тогда все объяснения пойдут прахом.

Не согласен. Если бы я начинал с ассемблера, то вряд ли "заболел" программированием. А так Бэйсик-Микрон как первый язык (МК-61 не считаем для ясности), а Ассемблер i8080 (КР580ВМ80А) когда Бэйсик стал тесным, но навыки алгоритмизации уже появились.

У нас даже в университете обучение начинали с C++/Pascal, а вы детям с ассемблера начинать предлагаете)
Да ассемблер при все своей простоте может показаться сложным и скучным. Многие дети утратят интерес, но с другой стороны меньше будет случайных людей в профессии полагающих, что программирование — это просто.

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

Именно. Банальный helloworld для консоли написать может ещё и можно за одно занятие, но чуть сложнее что — тупо даже набить с листа, доски или экрана не успеешь за 40-60 минут.

Ассемблер дает слишком поверхностное знание архитектуры компьютера. Современная архитектура слишком сложная. Надо понимать и микроархитектуру (конвеер, кеш), и потребности ОС (защищенный режим, страничная память). Если с этим не разобраться, от изучения ассемблера возникнет только иллюзия понимания, от которой вреда больше, чем пользы.
В SICP основы архитектуры процессоров хорошо описывают в конце курса, опираясь на изученный в начале язык высокого уровня. Такой подход дает лучшее понимание.
Плюсы — это по-настоящему «взрослая технология», при изучении очень легко последовательно давать материал так, чтобы в коде отсутствовали неизвестные конструкции, но вот с рисованием (да и вообще с красивыми задачами) тут явные проблемы, как ни старайся сделать задачи веселыми. Либо надо использовать сторонние учебные библиотеки (а это не соответствует третьему критерию), либо ждать Qt — а это, извините, 36ое занятие в спокойном темпе работы. Выживают только самые стойкие. Значит плюсы на первом этапе отпадают, надо давать их позже.

Есть еще более классические варианты — Basic, Pascal — но все это в наши дни уже не используется на практике. А значит тоже отпадает по третьему критерию.


Delphi(Object Pascal)!
Есть бесплатная Starter версия, GUI, графика и т.д. доступны прямо из коробки. Используется на практике.
Есть также Open Source Lazarus, у которого кроме всего и русский интерфейс есть из коробки.
Да без разницы что учить. Просто предупредите, что учиться нужно будет всю жизнь и лёгких результатов не будет. А в общем: программирование — это способ воздействия на компьютер. Поэтому с его устройства и надо начинать.

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

UFO landed and left these words here

Почему то не упоминается Смолток.
Просто сейчас ситуация в программировании такая — нет языка, на котором можно было бы сначала хорошо учиться а потом работать. Поэтому, если нужна "латынь" для обучения "правильному" программированию — используется Ada или Компонентный Паскаль, Смолток, OCaml, ML.
Если есть цель в том, чтобы научить применять на практике навыки программирования — Geogebra, Maxima, R, Haskell. Только нужна кооперация с учителями математики и геометрии — чтобы знать чему они обучают и синхронно с ними показывать программные решения для их математических и геометрических задач.

Если действительно не хочется заниматься садизмом, то JS. Графика на canvas позволит сделать хоть 3d игрушку. Все кейсы отлично гуглятся даже без знания английского. И как бы не хотелось этого признавать, но это взрослый язык. Отдельным плюсом можно отметить webasembly, который позволит написать свой язык, со своим компилятором.
У меня коллега тоже так считает, но у меня пока есть сомнения. В этом году мы как раз хотим попробовать сделать такой курс, посмотрим, что получится. Схема получается такая: HTML&CSS (2 недели) -> Bootstrap (1 неделя) -> JS -> Node.

Но с JS у меня возникает вопрос на первой стадии: как дать базовую алгоритмику? Работа в консоли будет выглядеть странновато для ребенка, а манипуляции с DOM — это, вообще говоря, отдельная тема. Но, видимо, надо будет все таки стараться аккуратно сразу давать DOM.

Может что-то типа React? При базовых знаниях HTML&CSS можно начинать алгоритмику без изучения DOM, но в с выводом результатов в знакомой парадигме тегов, свойств и т. п…

Т.е. использовать React для печати так же, как и, например, в питоне? Интересная идея, спасибо, я подумаю об этом.

Да. Только с тем различием, что печать не в консоль, а в окно браузера с использование знакомых технологий и парадигм, а не новых из PyGame и ко. Причём легко обеспечить преемственность в рамках одного проекта — сначала на HTML+CSS создаётся статический прототип какого-то приложения, а потом он натягивается на React (а можно сразу в index.html созданном create-react-app например писать статику) и начинается его динамизация.

Я бы сказал что html и css как раз лучше опустить, оставив лишь часть необходимую для совсем элементарных вещей.

И в плане алгоритмов можно начать (после базы) c алгоритма дейкстры https://jsfiddle.net/MKMatriX/wm1dzqt1/, после можно усилить его до чего-то такого https://jsfiddle.net/MKMatriX/c26fh2ky/59/

Из бонусов тут как раз возможность быстро визуализировать алгоритмы.
Еще js позволяет использовать ООП и ФП, что тоже плюс, причем в искусственных условиях это весьма приятно.

А html и css пусть идут по желанию, отдельно.

ПС https://tproger.ru/translations/first-person-engine-265-lines/ еще один довод за js.
Мое имхо — не стоит начинать с js и web, в них внутри к сожалению кучу неясных новичку костылей, и просто странностей. обьяснить новичку let/var и их различие, уже сложно. "=", "==", "===" — тоже не придают ясности.
Basic лучше не брать в качестве первого языка, как и какой-нибудь Python. Они слишком «грязно» реализуют парадигмы. Будет потом у ребёнка извращенное понимание…
В этом и вопрос, что лучше — дать изначально правильное понимание парадигмы или сначала мотивировать чем то простым, а потом уже уйти в серьезное обучение.
Выскажу своё субъективное мнение, что надо давать сразу правильное, потом будет сложнее переучиваться. А мотивация… она у каждого своя. Если человеку интересны ИТ и программирование — он будет осваивать (по себе знаю, всю жихнь учился по книгам/документации, работаю программистом всю жизнь, хотя образование — экономист-математик).
Вот на «неправильной» парадигме учат, а потом студет выходит и не знает простейших вещей. Для HL, системщины или просто для работы в большом проекте (который потом надо поддерживать) — понимание теории очень важно. Знаю по своему горькому опыту.
Есть ощущение, что во втором случае ученик загрустит и быстро это занятие бросит. У меня есть опыт как плюсов с нуля, так и сначала SmallBasic, а потом уже плюсов.

В стартовой группе по плюсам к зачету отваливается гораздо больше детей, и я бы не сказал, что у ребят, которые начали со смолбейсика, а потом перешли на плюсы, есть какие то проблемы понимаем. Зато во второй группе появилась мотивация к самообучению, ребята вне кружка начали сами смотреть что-то новое: говоришь на втором занятии, что GUI у нас будет через пару недель, а на следующем занятии оказывается, что несколько человек уже сами разобрались. В стартовой группе по плюсам мотивировать ребят что-то почитать вперед или глубже обычно не получается.
Есть ощущение, что во втором случае ученик загрустит и быстро это занятие бросит.

Может тогда ему и не стоит быть программистом? Я начинал с класики — паскаль/ам/си. Они требуют большой внимательности и понимания того, как и что работает. Но при этом, я не могу их назвать сложными. Как и работа с тем же Pure C и памятью скучной. Тут скорее зависит от того, что большинство людей просто не могут получить «фан» от работы и бегут в профессию «потомучтамодна!».
У меня есть опыт как плюсов с нуля, так и сначала SmallBasic, а потом уже плюсов.

У плюсов есть тоже разный уровень погружения. Базовый — не сильно сложнее какого-нибудь другого языка высокого уровня. Разве что семантика SmallBasic проще.
В стартовой группе по плюсам к зачету отваливается гораздо больше детей, и я бы не сказал, что у ребят, которые начали со смолбейсика, а потом перешли на плюсы, есть какие то проблемы понимаем.

Простите за грубость, но те, кто отвалились — им лучше выбрать что-то другое. Мы ведь не о домашнем проекте говорим (где выбирает каждый что хочет), а про образовательный процесс. Если человек не способен понять С++ или ему не интересно само по себе программирование — то может всё же лучше тратить время на тех, кому это по правде интересно?
Ужасно когда приходит человек, занимавшийся рекламой ближайшие пять лет и решает внезапно, что он программист пройдя пару туторов по тому же JS и считает себя сотрудником на равне какому-нибудь специаилсту с 15+ стажа и опытом написания на Си и Лиспах, пониманием матана и т.п. Сам свидетель такого — это очень печально.
Зато во второй группе появилась мотивация к самообучению, ребята вне кружка начали сами смотреть что-то новое: говоришь на втором занятии, что GUI у нас будет через пару недель, а на следующем занятии оказывается, что несколько человек уже сами разобрались. В стартовой группе по плюсам мотивировать ребят что-то почитать вперед или глубже обычно не получается.

Простите за грубость — тут надо смотреть на материал, который вы даете и как его преподносите. В базовых знаниях по С++ нет ничего непостижимого, даже для ребенка 7 класса (сам я его начал тыкать вообще в классе 4-ом и даже тогда он ен казался особо сложным). Тут скорее качество самого материала проблема — либо в нем есть белые пятна (дети чего-то не понимают, т.к. им про это не объяснили), либо язык объяснений слишком сложный для них. Ну или есть вариант — программирование просто не для большинства, которое у вас в группах. У них гуманитарный склад ума и он не способны воспринимать что-то точное. Такое тоже бывает, и тут нет ничего страшного. Просто определенные языки и технологии в этом случае для человека закрыты

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


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

Идея у вас очень хорошая. Можно поинтересоваться — а каковы мотивы? Просто интересно.

По поводу детей из третьей группы… Я бы сказал, что это утопия. Хорошими программистами становятся только настоящие гики, которые готовы быть погруженными в специальность с головой. Для которых это главный интерес, хобби, работа… чуть ил не смысл жизни в написании кода =), а таких как правило не нужно привлекать в школе. Первая и третья группы, в большинстве случаев не приносят никакой пользы своей сфере, они просто делают то, что умеют. Это что-то сродни труду робота. Один мой друг работает программистом, как раз из третьей группы. Знаете почему он пишет код? Он больше ничего не умеет. Его увлекли, вот так же. Но профессия ему мало интересна. И возьмите теперь меня — я из первой группы. Даже получив образование экономиста я продолжаю пистаь код. Я ловлю кайф от этого, мне это нравится. А вот он — несчастен
UFO landed and left these words here
Если бы компьютеры нашей молодости имели только один язык, такой как brainfuck, мы бы сейчас писали о том, что мы начинали с него и было все хорошо.

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

А вот мотивацию должен обеспечить преподаватель.

В корне с Вами не согласен. Странная привычка у современного общества — прикручивать функцию мотивационную учителям. С одной стороны вроде всё и логично, даже правильно. Учитель рассказывает — ученику интересно, он развивается. С другой… не для всех детей подходят такие методы преподавания. Когда мне в школе объясняли математику на белочках и орешках, с какими-то шутками и прибаутками — меня это жутко бесило. Собственно до 5 класса я именно этому на математику забил, т.к. думал, что она создана для «дебилов». Дети — маленькие люди, не надо их считать гулпее себя.

И, по моему скромному мнению, именно ограничения подталкивают развиваться. Я вот в своё время любил Heretic и хотел сделать подобную игру, но с элементами РПГ. И начал читать, изучать… Первые попытки работать с графикой были не удачными — дикие тормоза, переполнение стека… И я начал читать, почему так, изучать как работает то, что я делаю на уровне железа, какие алгоритмы удачнее с точки зрения математики…
UFO landed and left these words here
Я хотел бы предостеречь вас от сопоставления себя с другими.

Любой опыт субъективен. Я высказал ИМХО. Сравнивать себя с другими нужно, хотя бы чтобы иметь какую-то константу, от корторой можно отталкивать свои рассуждения.
Делить людей на избранных и остальных — не дело.

ИМХО, наоборот. Если я не биолог по натуре (мне это не интересно, противно, скучно) — нефиг меня пихать в медики. Только пациентов убью. С программированием — та же штука.
Лично я никогда не имел ничего против белочек и орехов, шуток и прибауток.
Собственно в этом и прелесть математики лично для меня. Когда ты можешь взять какой-то даже не серьезный контекст и перевести это в универсальный язык, чтобы найти решение.

А я вот против, что и сказал выше. Сейчас же вы навязываете своё мнение мне, объект вашего сравнения — вы сами. Следовательно, сами не следуете своим же предостережениям и советам.
Математика — сама по себе универсальный язык. Куда более абстрактно? Если мозг ребенка не может понимать абстрация — не надо его насиловать. Спортсмен, сантехник, рабочий завода — там от него будет больше толку. Если и там не сгодится — пусть танцует и поёт як попса.
Собственно, в программировании также как и в математике никто не мешает заменить X и Y на белку и зайца, или наоборот.

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

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

ИМХО в РФ они чаще отбивают желание учиться. Именно по их вине я н любил долгое время литературу. Спасибо дяде двоюродному, который дал почитать Саймака. Мотивация детей — это их заинтересованность. Почему-то взрослые считают, что ребенку интересны глупости, шалости и ограниченные развлечения. По сути сегодня детей по уровню интелекта расценивают как пьяного в дугу человека. Даже юмор для них похожий делают. Но это не правильно! Дети могут оценить гораздо более сложные вещи и освоить их — у них нет нашего закостенелого сознания и религиозной веры в парадигмы или догмы. Но это ИМХО
UFO landed and left these words here
Если мозг ребенка не может понимать абстрация — не надо его насиловать.

Если мозг ребёнка не может понимать абстракции, то этот ребёнок не сможет нормально жить в обществе. Не знаю про спортсменов, но сантехнику или рабочему завода в их профессиональной деятельности абстракции нужны — какая-нибудь "гайка М6" — это абстракция. А в современной бытовой жизни без них вообще никуда. Это не говоря о том, что вообще языки общения (хоть человеческие. хоть программирования) — это абстракции, позволяющие передавать информацию о реальном или воображаемом мире. Человек, чей мозг не понимает абстракций, не может общаться с себе подобными в принципе.


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

На одной аналогии или примере абстракция выглядит овержинженерингом, непонятно для чего введенным.

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

Я обычно использую кубики от лего :)


Это продолжение все той же идеи — материал проще запоминается, когда он сопровождается яркими образами.

UFO landed and left these words here

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

UFO landed and left these words here

Между бэйсиком и питоном небольшая, паскаль, джава, шарп — тоже близкие, C++ — отдельно.

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

Далее — мотивацию нельзя контролировать. Это бред школьных психологов. Ребенку либо интересно, либо нет. Кроме интереса, при отсутствии давящих факторов — нет. В их мире всё проще.
А я рекомендую начинать с языка Python. На нём хорошо можно закрепить основы алгоритмизации без особых языковых заморочек, а потом переходить на C-подобные языки. Сейчас появилась возможность писать и запускать Python-программы на смартфонах и планшетах (для разных ОС). На мой взгляд, школьнику будет интересней написать и запустить свою первую программу на своём гаджете.

image
У меня один знакомый заставляет своих дочек 10 и 13 лет изучать Java, RUP, UML и прочий ентерпрайз. Требует от них понимания наследования, инкапсуляции и полиморфизма. Пока не ясно, какой будет результат. Но видимо могут быть разные пути как стать спецом в ИТ.

Программирование в этом возрасте — значит научить думать над алгоритмом, задачей, путями ее решения. Это будет полезно и тем, кто потом не будет программистом. Поэтому нет смысла учить сначала "прочему энтерпрайзу", ведь в школе сейчас задача всего дать понемногу, при этом программирование как раз то, что может а) потренировать мозги б) стать любопытным для дальнейшего изучения самостоятельно.
К примеру, мы в школе изучали Pascal, но абстрактно, просто компилируя в консоль. Даже не собирая в exe. А реально интересно стало тогда, когда получилось сделать псевдографикой интерфейс, когда товарищ дал диск с Delphi… То есть нужно, чтобы было не сухое заучивание парадигм, а показать результат труда, с GUI это нагляднее и интереснее.

То есть надо оценить риски — всех научить глубокой теории — интересно будет 1% обучающихся, или всех научить базовым вещам, которые работают(!) и наглядно показывают смысл программирования — ожидается больше тех, кто заинтересуется. Мне кажется, второй путь ближе к целям школы.

Глубокая телрия вместо интересной практики просто выкинет огромный процент потенциальных программистов.
Могу сделать некую аналогию с тем что я в ВУЗах видел — в тех группах, где начинали с Паскаля к первому семестру и концу обучения было намного больше людей в «теме», тех кто не забил и все ещё учился программировать, а не дожить до получения диплома.
Где с си сразу очень много людей посто «зарывались» в указателях, и прочих ненужных в начале вещах, им становилось непонятно, и от того не интересно.
Я считаю, что начинать изучать программирование надо с языков Prolog или Haskell. Ни чего сложного в них нет (ну кроме того, что преподавателям лень разбираться), а умения мыслить математически строго, воспитываемого этими языками, современным программистам крайне не хватает.
Only those users with full accounts are able to leave comments. Log in, please.