Как стать автором
Обновить

Комментарии 623

Согласился бы, будь в качестве языка предложены Oberon-07 (третье издание учебника Вирта) или хотя бы Modula-2 (второе издание). К сожалению, под Pascal в современном мире подразумевают не маленький и логичный язык Вирта (несмотря на несколько грубых ошибок дизайна, действительно прекрасно подходящий для обучения), а бесформенные кучи нелепостей, именуемые Delphi и PascalABC.Net. Но эти диалекты совершенно не годятся ни для заявленных автором целей, ни, тем более, для цели, автором полностью упущенной: обучение самодисциплине написания кода. Именно последнее может дать Oberon (или классический Pascal), но не могут дать модные языки с C-подобным синтаксисом.
Я и предлагаю Виртовский классический Pascal, но т.к. м.б. сейчас трудно найти компилятор, то можно Турбо, но без использования ООП. Были хорошие IDE для учебных целей, нпр., Dr Pascal, но сейчас их нет :(
Виртовский классический Паскаль не поддерживает даже динамических массивов и указателей, не было раздельной компиляции, не возможно подключить сторонние библиотеки…

Это уж потом он стал настоящим индустриальный ЯП. Сейчас это ObjectPascal/Delphi, PacalABC и FreePascal/Lazarus

Вот PascalABC.NET ИМХО самое то для обучение. Еще Smalltalk хорошая альтернатива. Хотя в силу современных тенденций — я бы все же обучал на C#
Виртовский классический Паскаль не поддерживает даже динамических массивов и указателей


Указатели поддерживает. Динамических массивов нет. А зачем они в школе?
А зачем обучение программированию без динамических массивов вообще? Это одна из основных структур данных, наряду с обычным массивом, списком, деревом и хэш-таблицей.

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

Эт я как сейчас помню, как меня бесило отсутствие массивов переменной длинны в Turbo Pascal'е
+ в начале уроков 10 на изучение ЯП. А дальше привел хорошую книгу:
С.М.Окулов, Программирование в алгоритмах.

Модульные программы для одной процедуры? ;)
Модульные программы для одной процедуры?

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

Присоединюсь к Zenitchik и добавлю, что после оформления модуля готового для повторного использования => следом идет написание других модулей и объединение их в одной программе, например, сравнение алгоритмов Сундарама и Аткина, или разных методов сортировки (а тут уже можно будет рассказать про вычислительную сложность алгоритмов).

Учитывая что в школе программирования идет не один год — на выходе школьники должны в итоге выдать комплексную программу, состоящей из более чем одной процедуры. Тогда от программирования в школе будет хоть какой-то толк.
Если развить эту идею, то и тексты сочинений по литературе нужно использовать повторно, чтобы по окончании школы у каждого выпускника получился если не роман, то повесть. Какой будет ужас, если свои ученические программы все школьники будут публиковать на Хабре. Я не понимаю зачем в школе изучать технологии типа модульного программирования, ООП, GUI, многопоточного программирования и т.д. Толк только один — составить представление, чтобы сделать осознанный выбор будущей специальности.

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


Я не понимаю зачем в школе изучать технологии типа модульного программирования, ООП, GUI, многопоточного программирования и т.д.

Хорошая фраза. Как-то этот демагогический приём называется. Ну да ладно, опустим.


А по сути, если введение в модульное программирование займёт, прости госпади, 15 минут одного урока, и больше к нему возвращаться не придётся, то почему его не дать? Хуже точно не будет.

А по сути, если введение в модульное программирование займёт, прости госпади, 15 минут одного урока, и больше к нему возвращаться не придётся, то почему его не дать? Хуже точно не будет.

А если не 15 минут, а минимум два урока? Один — чтобы рассказать, потом домашнее задание чтобы попробовать и еще один — чтобы ответить на вопросы по домашнему заданию.

Ну 3 урока, обычно 1 урок в неделю — 3 недели, впереди еще почти 2/3 четверти. Всего уроков в году — 35 минимум.

Информатика сейчас начинается 5 или 7 класса и длится до 11 класса. Минимальное общее число часов — вроде не менее 105 (я хз сколько точно), но даже когда я учился, у нас информатика с программированием за 350+ часов перевалила за 7-11 классы.

Времени вагон реально. За это время мы с одноклассникам успели накатать скролл-шутер (на Паскале, бладж) и нафигачить целую кучку маленьких программ на Delphi для всяких мелких расчетов (ну я вон нашлепал себе всякие говнопрограммки, для расчета цепей, чтоб ручками не считать) и покататься по школьным олимпиадам по программированию. Хочу сказать, что у многих компы дома появились вообще только после школы, максимум в старших классах (мне повезло, у меня Синклер на котором я игрался в Elite, Commando, Nether Earth, Arkanoid, Laser Squade).

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

И Вы туда же?
Закончили работу над алгоритмом: "А теперь мы полученную программу оформим вот так… В таком виде она может быть подключена к другой программе. Такой подход называется модульным".
Далее, на каждом уроке все программы оформляются аналогично, уже без объяснения зачем и почему.

Куда "туда же"?


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

Стоит добавить еще несколько пунктов:


  1. Вот так нужно оформлять подключение в другой программе и вызов этого модуля.
  2. Вот так нужно передавать информацию в модуль.
  3. Вот так нужно обрабатывать ошибки, возникающие в модуле.
  4. Вот так нужно получать результаты работы модуля.
  5. Такой подход может быть полезен вот в этом, в этом и в этом случае.

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

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

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

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

Тогда на каждый пункт еще желательно по одному примеру, который нужно как минимум записать, а как максимум — выполнить задачку, похожую на него, в классе и еще несколько дома.
Именно так!
А по сути, если введение в модульное программирование займёт, прости госпади, 15 минут одного урока, и больше к нему возвращаться не придётся, то почему его не дать? Хуже точно не будет.
Да. Хуже не будет. Кто и запомнит — тот не поймет. ИМХО это тема многих уроков.

Программа — это не сочинение. Она имеет практический смысл, даже если писалась в учебных целях.
А разве сочинения не имеют практического смысла? Нпр., обсуждаемая статья? ;)
А разве сочинения не имеют практического смысла? Нпр., обсуждаемая статья? ;)

Вот кстати с сочинениями не надо. Большинство и после школы пишут абсолютный трешак (впрочем, научные и деловые статьи писать все же проще).
А самое главное — вечная школьная драма: сочинения написанные по шаблону получают хорошие оценки, выражение собственного мнения — может жестоко караться, даже если у школьника реальный художественный талант.

Ы общем сочинениями и их критикой в школе туговато. Вот более официальные вещи — типа докладов и рефератов все же проще написать и оценить.
выражение собственного мнения — может жестоко караться, даже если у школьника реальный художественный талант.
Думаю, что это с учителем не повезло, т.к. знал многих учителей, которые боролись с шаблонным списыванием с учебника и поощряли собственные мнения и в сочинениях, и в устных ответах.
Очень сомнительно, что Вы сможете удерживать интерес школьников к программированию алгоритмами.
Вероятнее всего, просто отобъете желание у них заниматься/изучать программирование в принципе.

Как по мне, главное в обучении — завладеть вниманием обучающихся. Без этого обучить человека чему-либо практически не возможно.
главное в обучении — завладеть вниманием обучающихся

И тогда их можно научить чему угодно. В том числе и алгоритмам.

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

А если серьезно — то нужно быть честным, особенно в школе! Нужно не завлекать, а честно показывать, каких жертв потребуют данные специальности.

К примеру, в начале 1960-х гг. в СССР партия решила, что геологов не хватает. Стали в молодежной среде романтику разводить — красивые песенки по радио давать, типа «геолог — ты ветру и солнцу брат». На геологический, в «керосинку» (нефть) и т.д. народ повалил рекой, а после практики первого курса, когда выяснялось, что геология — это гороховый суп с тушенкой и вермишелью, не комфортные условия в ненаселенке с дикими волками и прочими медведями, мокрыми рюкзаками, комарами и мошкой, народ разбегался.

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


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

Недавних студентов-программистов к алгоритмам и не пустят.

Но если они не будут знать алгоритмику, их не пустят к алгоритмам никогда.
Меня на 3 курсе нанимали лаборантом в геологическую партию исследовать собранные образцы на очень древнем приборе:
Первой моделью отечественного спектрофотометра, выпущенного в 1952 году, явился однолучевой нерегистрирующий спектрофотометр СФ-4.

А для приготовления пищи поварих из местных нанимали. Еда — самое важное. Такое студенту никак нельзя доверять!

Что мешает писать на Delphi или PascalABC.Net по старым книгам? Насколько я помню, в том же Delphi 7 надо только расширение файла с .pas на .dpr сменить и {$APPTYPE CONSOLE} добавить.

Ok. {$APPTYPE CONSOLE} само добавляется при выборе из меню New. Недостаток, что меню большое и всяких кнопок много, ученикам так и хочется что-то не то нажать. Но и Delphi, и PascalABC.Net подойдут для классики.

А что будет если что-то не то нажать? Компьютер поломается что ли?

Не. Учителю лишние проблемы…
Какие лишние проблемы-то? «Это мы изучать не будем, кто хочет — может изучать самостоятельно. Вот список книг где можно об этом почитать.»
Ага. Именно так. Только: Это мы изучать не будем изучать не обязательно, кто хочет — приходит на факультатив. Там будет OOP & GUI.
Отсутствие той самой самодисциплины мешает. Если что-то есть, этим обязательно будут пользоваться.

Но дело ещё и в том, что Oberon — современный компонентный язык, который проще, чем классический Pascal. И который удобнее использовать и для объяснения алгоритмов, и для обучения кодингу.

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

Они не подавляют базовые знания. Они создают информационный шум, из которого эти базовые знания намного труднее вытащить.

В Pascal в заголовке подпрограммы явно указывается — передаётся параметр по ссылке, или по значению. В Delphi мы должны постоянно помнить, что некоторые параметры, передаваемые по значению, в действительности передаются по ссылке.

В Pascal мы точно знаем, что делает оператор присваивания. В Delphi мы не можем сказать, что произойдёт при присваивании, пока не изучим код класса — потому как там может быть сеттер, делающий вообще что угодно.

И т.д.
В Delphi мы должны постоянно помнить, что некоторые параметры, передаваемые по значению, в действительности передаются по ссылке.

Есть var, const или out — параметр передается по ссылке, иначе — по значению. Если кажется что-то иное — значит, не разобрались с указателями. Это в языках где нет указателей можно для упрощения придумывать новые термины вроде "pass by share", в Delphi такой необходимости нет.


В Pascal мы точно знаем, что делает оператор присваивания. В Delphi мы не можем сказать, что произойдёт при присваивании, пока не изучим код класса — потому как там может быть сеттер, делающий вообще что угодно.

Сеттер, делающий что угодно, будет грубой архитектурной ошибкой. Сеттер обязан работать подобно присваиванию.


PS и да, "базовые знания" — это переменные, ветвления и циклы, а также их применение (структурное программирование). Зная их, можно разобраться в большинстве языков. Все остальное — это тонкости конкретного языка, которые учить в школе совершенно не обязательно.

Есть var, const или out — параметр передается по ссылке, иначе — по значению.
Классы, динамические массивы по факту передаются по ссылке — без var. Потому, что это не записи (массивы), а указатели. Но в Pascal c указателями всегда работаем явно, а в Delphi некоторые указатели выглядят как указатели, а некоторые маскируются под «структурные» переменные.

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

«базовые знания» — это переменные, ветвления и циклы, а также их применение
Не согласен. Базовые знания — это основы алгоритмики. А ветвления и циклы (как и язык в целом) — всего лишь инструменты для записи алгоритмов. Умение держать в руках молоток — это ещё не базовые знания.
Структурное программирование — это вовсе не о ветвлениях и циклах, а об умении их правильно готовить. Можно писать спагетти на Pascal и структурно на Fortran-IV.
Мне кажется, что мы обо всем договорились: на любом языке можно написать очень плохой код, но в школе главное не язык, а алгоритмика. Когда-то на Fortran-IV писали — на перфокартах (ужас!), но получалось алгоритмику изучать. И сейчас на фортране-4 можно, если учитель захочет лишних никому не нужных сложностей себе и своим ученикам. Но и на фортране можно.
Так с этими тезисами я никогда и не спорил. А говорю лишь о том, что mayorovp путает цель и инструменты для достижения цели.
Ok: в школе: цель — алгоритмы, язык -инструмент.
На Фортране можно. Полная совместимость всех версий. По крайней мере программы, написанные на Фортране-77 отлично компилятся Фортраном-95 и Фортраном-2008. Других версий увы не проверял.

Кстати да. Насчет обучения. Возможно даже тот же Фортран как язык для обучения вполне себе подойдет: прямая связь с математикой + гигантская кодовая база самая большая среди всех существующих ЯП, как следствие влияние Фортрана (банально, например, индексаторы, передаче аргументов по ссылке и т.д.), да и относительно несложный.
О да, никаких ГУИ, только Паскаль и алгоритмика.
Отличный, великолепный способ заставить 99% детей глубоко возненавидеть информатику.

С ГУИ — ещё вернее. Самая ненавистная часть разработки ПО.

Кому как. Я вот тоже гуи терпеть не могу, однако коллега, от разработки и проектирования гуев просто тащиться, раза в 4-5 быстрее меня такие штуки клепает… вот так мы и порешили: он гуи, я — алгоритмы.

Это уже ИМХО от специализации зависит
Мы о детях говорим а не о состоявшихся разработчиках.
Пичкать их алгоритмикой это 100% способ привить им глубокую ненависть к предмету.
Предвещая замечания типа «а вот мне наоборот понравилось» сразу говорю что таких как вы «гиканутых» в классе обычно 1-2 человека.
Ага, а на математике пичкать детей теоремами это 100% способ привить им глубокую ненависть к предмету? Мы ведь о школе говорим, а не о кружке «Умелые руки».
А разве с задачей привить ненависть к математике школа не справляется?
На мой взгляд, постановка вопроса должна быть иной. Вот есть люди, которые по профессии математики. Они утром встают и занимаются весь день математикой. Многие так увлекаются, что забывают пообедать и задерживаются допоздна. Так вот, что их заставляет так себя вести? Видимо, они в этой работе видят какой-то драйв, получают удовольствие.

Ну так надо детям показать, в чём удовольствие от математики, почему люди выбирают её в качестве профессии. Я бы мог согласиться, что надо потерпеть и заниматься порою занудными вещами и т.п., но ведь по факту этот метод всё равно не работает: люди заканчивают школу и забывают всё это напрочь, если работают не по математической специальности. Каждый может легко проверить это утверждение на своих знакомых.
Ну так надо детям показать, в чём удовольствие от математики, почему люди выбирают её в качестве профессии.
Чтобы испытать удовольствие, надо хоть немного знать ту самую математику. Кроме того математика нужна не только профессиональным математикам. Школьник без математики не сможет учить физику. И я считаю информатику. К примеру:

if cond1 then
  if cond2 then
     call1
  else
    call2
else 
   call2;


Я думаю, что для школьника важнее знать как стоит преобразовать этот код, чем знать основы ООП или разработку GUI.
Вероятно, хотя для начала не стоило бы писать такой код, верно? Опять же, я не готов на эту тему глубоко рассуждать, т.к. в данном случае задача не тянет на великую математику. Я бы попросту расписал таблицу истинности (cond1, cond2 -> result) и подумал, как можно записать то же условие проще. Конечно, формально это математика, но на практике это очень простая задача, которая объясняется без особенных затруднений.
Именно это я имел ввиду. Школьник сдает учителю такой код, далее учитель должен сказать, что сказали Вы. Пример можно усложнить, но дело в принципе: Булеву алгебру необходимо знать.

Навык преобразования таких выражений во что-нибудь вроде


if cond1 and cond2 then
   call1
else 
   call2;

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

Да. Ничего сложного. Всего лишь Булева алгебра. Не самый тупой пятиклассник запросто поймет.

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

Не всякий студент, который недавно сдал «дискретную математику», может сформулировать отличие «И» от «ИЛИ»
Ужасно. Гнать такого студента! Он и таблицу умножения до шестью семь — сорок три наверное не знает. Пусть на его место придет более сообразительный.
При этом в булевой алгебре нет никакой привязки к конструкциям ветвления.
Привязку даст информатика, пятиклассник, знающий отличие И от ИЛИ, поймет.
Ужасно. Гнать такого студента! Он и таблицу умножения до шестью семь — сорок три наверное не знает. Пусть на его место придет более сообразительный.

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


Привязку даст информатика, пятиклассник, знающий отличие И от ИЛИ, поймет.

Зачем в таком случае нужно булеву алгебру как отдельную тему подавать? Тут уже приводили пример про Мольера и разговоры прозой.

Если только с привязкой, то можно и теорию множеств давать не на математике, а на информатике. А не слабо весь матан на информатику перетащить? Линейку и прочие терверы? В начале 20 века химия и физика были в одном учебнике:

— В общем, скажите, из какого класса гимназии вас вытурили за неуспешность? Из шестого?
— Из пятого, — ответил Лоханкин.
— Золотой класс. Значит, до физики Краевича вы не дошли? (Золотой телёнок)


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

Я не категоричен. Просто школьника никто не может выгнать, и он обязан учиться, а студент не обязан, но его можно выгнать. Большинство студентов это понимают (при этом далеко не все из них зубрилы), но бывают отсталые в развитии на уровне школьника. Надеюсь, что большинство студентов сообразит, что сказать про отличие И от ИЛИ. Хотя бывают «рекордсмены», так Арнольд описывает американского студента, который написал 1/2+1/3=(1+1)/(2+3)=2/5.

По линейке СЛАУ и задачи по системному анализу отлично решаются в Excel. Это считается информатикой?
Вот только прикладное применение такой математики заключается в решении каких-то задач бизнеса. Найти оптимальный путь, распределить нагрузку и т.п.
Если проводить аналогию с "передать привязку булевой алгебры на информатику", то получается что надо "передать привязку линейной алгебры к решению бизнес-задач на работодателя"?


В нынешней ситуации если какой-то предмет вызывает вопрос "а зачем он?" и объяснение предполагается в рамках другого предмета, то у студентов получается закономерная реакция "сдать и забыть". А если это не желательный исход, было бы логично объяснять в рамках самого предмета.


Выгнать студента тоже не легко. Уже писали об этом.

Прежде чем решать СЛАУ, нужно ввести понятие ранга матрицы и дать правила, когда решение есть, когда единственное и т.д. Далее изучают разные методы: можно решать Гауссом, а можно определителем. Обычно это описано в учебниках под заголовком Линейная алгебра. Где это изучать до численных упражнений в Excel? На математике или на информатике?

Выгнать студента — крайняя мера. Всегда и везде на нее не охотно идут, чаще студент сам осознает, что учится не там, где ему нужно.
Ага, а на математике пичкать детей теоремами это 100% способ привить им глубокую ненависть к предмету?

Да, 100%.
95% процентов школьников никогда в жизни не вспомнят ни одну из этих теорем.
Ваши алгоритмы закончат там-же, рядышком со списком обязательной к прочтению литературы.
Не 100%: факт, что некоторые дети в мат.школы идут. И Ваши 95% явно субъективны, но какому-то проценту в жизни теоремы действительно будут не нужны. Вопрос только в том: какой процент от этого процента заранее уже в 1 классе знает, что ему теоремы будут не нужны?
1-2 человека.

Ага! 3% как с куста. А то и 6%.

Технарями (и прочими экономистами) из каждого выпуска обычно становятся сильно больше выпускников, чем гуманитариями. Технарям алгоритмика нужна. И гуманитариям стоит иметь понятие алгоритма, т.к. это слово вошло в обиходную речь. В статье отметил:

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

Смотрите:


type
    TFoo = record
        x,y : integer;
    end;
    PFoo = ^TFoo;
    CFoo = class
    public
        x,y : integer;
    end;

Почему вы считаете, что написав foo: PFoo вы "работаете с указателем явно", а написав foo: CFoo — "маскируете указатель под обычную структурную переменную"? Напомню, рассматриваем только заголовок подпрограммы.

Сеттер, делающий что угодно, будет грубой архитектурной ошибкой. Сеттер обязан работать подобно присваиванию.

В дельфях — совершенно необязательно.
В Delphi-7 программы Виртовского Паскаля работают верно. Всякие заголовки вроде {$APPTYPE CONSOLE} — просто ритуал, которому не трудно следовать.
В Delphi мы должны постоянно помнить, что некоторые параметры, передаваемые по значению, в действительности передаются по ссылке.

Потому что они в действительности и являются ссылками, ваш кэп.

В Delphi мы не можем сказать, что произойдёт при присваивании, пока не изучим код класса — потому как там может быть сеттер, делающий вообще что угодно.

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

Вирт в каждом следующем языке не только добавляет новые возможности, но и выкидывает всё лишнее. Потому Modula меньше, чем Pascal, а Oberon меньше, чем Modula.
Размер описания ничего не доказывает. ИМХО ООП, как и другие технологии, большинству школьников не нужны. И сколько книг по алгоритмам на Обероне на русском?
Вполне себе доказывает — если полное описание языка (с примерами, РБНФ и описанием модуля System) укладывается в 17 страниц.

И Oberon — это совсем не то ООП, что переехало из Simula-67 в С++, а позже превратилось в пандемию. Компоненты (модули) Oberon намного проще и логичнее, чем классы: никаких неявных this и мешанины из кода и данных.

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

Есть отличный учебник самого Вирта. Ещё попадались книги отечественных авторов, использующие Component Pascal (диалект Oberon для создания больших систем — вот он по сложности примерно равен классическому Pascal). Но специально вопросом кол-ва книг не занимался.
Здесь обсуждали ООП в школе.
Вы всё же взгляните — ради любопытства — как это реализовано в Oberon (или хотя бы в позаимствовавшем его идеи Go). Данные отдельно, код отдельно. Классическое процедурное программирование. Разница только в синтаксисе вызовов: вместо add(q, 17) пишем q.add(17). И add — это не часть q.

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

А в каких ещё языках, кроме С++, существует множественное наследование? Большинство модных языков используют интерфейсы — механизм намного более простой и логичный.
В список языков, поддерживающих множественное наследование, входят: Io, Eiffel, C++, Dylan, Python, некоторые реализации классов Javascript (например, dojo.declare), Perl, Curl, Common Lisp (благодаря CLOS), OCaml, Tcl (благодаря Incremental Tcl)[1], а также Object REXX (за счёт использования классов-примесей). (Вики)


Придумавший ООП Алан Кей с этими «тремя китами» не согласится.
Это не важно — важно, что получилось.
В Javascript множественного наследования не существует. И если его можно имитировать, так и классы в JS — всего лишь имитация через прототипы.

То, что получилось в Python, полноценным множественным наследованием никак не назовёшь.

Про C++ говорил, с остальными языками не сталкивался, потому мнения не имею.

Это не важно — важно, что получилось.
Получилось множество разных схем организации ООП. Тот же JavaScript в схему классов никак не укладывается. И то, что одна из схем популярнее всех прочих, не делает её истиной в последней инстанции.
Получилось то, что получилось, но зачем каждому школьнику над этим думать?
Основные индустриальные ООП языки — C# и Жаба множественное наследование не поддерживают, только множественное наследование интерфейсов, которые чисто декларативные элементы языка. Собственно весь полиморфизм в них — либо перегрузка, либо множественное наследование интерфейсов (встречается не так уж и часто), которые один фиг нужно в каждом классе имплементировать ручками.

В любом случае никаких проблем с множественным наследованием (кроме проблемы ромба, которая решаема) — нет.
В любом случае непонятно зачем каждому школьнику в это вникать? Школа не индустрия и «индустриальные языки» в ней не обязательны.
В че там вникать? ООП абсолютно интуитивно-понятная технология программирования. Все объект, который имеет определенный набор свойств, параметров и методов и из всех этих объектов и собираем готовую программу, да так, что бы потом не утонуть в спагетти-коде.

C#и Java умудряются поддерживать баланс между строгостью и вседозволенностью. за это их и любят. Собственно тот же C# — это и есть Object Pascal испорченный сишным синтаксисом. Java тоже нехилое такое влияние Вирта испытала.
ООП абсолютно интуитивно-понятная технология программирования
Прежде надо понять, что такое программирование.
из всех этих объектов и собираем готовую программу
Сколько объектов нужно для изучения решета Эратосфена? Один? И метод один? И как в этом случае объяснить школьнику необходимость лишних букАв? И как объяснить, что такое спагетти-код на основе программы в несколько строчек? А больше не нужно для общего образования.
Алгоритм Эратосфена на C# в самом прямолинейном исполнении будет выглядить вот так:
class Program
    {
        static void Main(string[] args)
        {
            int maxprime = int.Parse(args[0]);
            List<int> primelist = GetAllPrimesLessThan(maxprime);
            foreach (int prime in primelist)
            {
                Console.WriteLine(prime);
            }
            Console.WriteLine("Count = " + primelist.Count);
            Console.ReadLine();
        }
 
        private static List<int> GetAllPrimesLessThan(int maxPrime)
        {
            List<int> primes = new List<int>();
            int maxSquareRoot = (int)Math.Sqrt(maxPrime);
            bool[] eliminated = new bool[maxPrime + 1];
 
            for (int i = 2; i <= maxPrime; ++i)
            {
                if (!eliminated[i])
                {
                    primes.Add(i);
                    if (i <= maxSquareRoot)
                    {
                        for (int j = i * i; j <= maxPrime; j += i)
                        {
                            eliminated[j] = true;
                        }
                    }
                }
            }
            return primes;
        }
    }


А на Паскале вот так:
program primes(output)
 
const
 PrimeLimit = 1000;
 
var
 primes: set of 1 .. PrimeLimit;
 n, k: integer;
 needcomma: boolean;
 
begin
 { calculate the primes }
 primes := [2 .. PrimeLimit];
 for n := 1 to trunc(sqrt(PrimeLimit)) do
  begin
   if n in primes
    then
     begin
      k := n*n;
      while k < PrimeLimit do
       begin
        primes := primes - [k];
        k := k + n
       end
     end
  end;
 
  { output the primes }
  needcomma := false;
  for n := 1 to PrimeLimit do
   if n in primes
    then
     begin
      if needcomma
       then
        write(', ');
      write(n);
      needcomma := true
     end
end.


Причем в первом случае (C#) программа уже проявляет структурированность — отдельно алгоритм, отдельно работа с вводом-выводом. На следующем уроке можно будет показать как вывести этот алгоритм в отдельный класс EratosthenesEnumerator:

public class EratosthenesEnumerator : IEnumerator
{
    private BitArray _bits = null;

    // Enumerators are positioned before the first element until the first MoveNext() call.
    private int _primePosition = -1;
    private int _bitPosition = -1;

    public EratosthenesEnumerator(BitArray bits)
    {
        _bits = bits;
    }

    public bool MoveNext()
    {
        _primePosition++;
        if (_primePosition > 0)
        {
            var found = -1;
            for (var i = _bitPosition + 1; i < _bits.Length; i++)
            {
                if (_bits[i])
                {
                    found = i;
                    break;
                }
            }
            _bitPosition = (found >= 0) ? found : _bits.Length;
        }
        return (_primePosition >= 0) && (_bitPosition < _bits.Length);
    }

    public void Reset()
    {
        _primePosition = -1;
        _bitPosition = -1;
    }

    object IEnumerator.Current
    {
        get
        {
            return Current;
        }
    }

    public int Current
    {
        get
        {
            try
            {
                if (_primePosition == 0)
                {
                    return 2;
                }
                return SieveOfEratosthenes.ToNumber(_bitPosition);
            }
            catch (IndexOutOfRangeException)
            {
                throw new InvalidOperationException();
            }
        }
    }
}

Показать как ркуто можно взаимодействовать с объектами:
EratosthenesEnumerator sieve = EratosthenesEnumerator(limit);
foreach (var prime in sieve)
{
    /* do something */
}
Console.WriteLine("Count of primes {0}", sieve.Count);

Потом по аналогии пишем классы для решета Сундарама и решета Аткина, и показываем как три разных класса уживаются в одной программе и сравнить их (например, время выполнения).

Да и вообще, само по себе знание конкретных реализаций алгоритмов. если не умеешь ими пользоваться бесполезно. Тем более если надо, то нужный алгоритм можно в книжке прочитать или на Rosseta Code посмотреть. Вот навыки декомпозиции задачи, построения логики программы, навыки поиска и анализа, с последующим выбором алгоритмов — куда важнее.
Ну и самое главное — должен быть понятен сразу прикладной смысл, для школьников это вообще критично, так что школьное программирование должно быть направленно именно на написание практичных программ, например, написание программ для решения задач по физике, написание калькулятора или вообще игры, или журнала с базой данных. Я вот, например, вообще не вижу ничего интересного в алгоритме Эратосфена или поиска пузырьком для школьника, если он не будет знать как это можно использовать. А у нас все крутится вокруг одного — давайте понапихаем в школьника наор всяких примитивов, типа теоремы Пифагора, но не покажем им зачем это нужно. Ясень пень. что такие знания тут же выветриваются, а потом удивляются, отчего в стране победившей безграмотность самые популярные шоу это Дом 2 и Битва Экстрасенсов
О чем Вы говорите? Здесь учителя жалуются, что идею цикла трудно объяснить и транспозиция матрицы — непосильная задача, а Вы про декомпозиции… И не нужно это большинству школьников. И зря думаете, что если загрузить их больше, то не будут Дом-2 смотреть. Будут. А уроки из инета скачают.

Для решета Эратосфена ООП выглядит весьма надуманно. Одного метода тут будет более чем достаточно.


Однако я согласен с вами в другом — нужны навыки анализа и декомпозиции задачи, построения логики программы. "Как из кубиков построить дом?", "Какой дом нам вообще нужен?".
Автор статьи не прав в том, что нужно пичкать школьников алгоритмами. Не усвоятся они.
На самом деле к любому алгоритму можно прийти самостоятельно, если будет необходимость применить его. "Знание алгоритмов" тут всего лишь экономит время на поиск.
Нужны не столько готовые решения, сколько интересные проблемы, подаваемые в посильном порядке. Хотя бы на примере игры.

Пока человек не поймет что такое алгоритм всякие декомпозиции для него просто сотрясение воздуха.

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


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

Как определить, что человек понял, что такое мат.задача? — С первых классов школьники решают задачки типа «из пункта А в пункт Б», «из одной трубы втекает..., из другой вытекает ...» и т.д. Постепенно приходит понимание, что задача состоит из «дано» и «найти». Так и с алгоритмом — есть типовые задачи, есть типовые алгоритмы. Знакомство с ними дает ученику понимание.
Хз, дедушки-конструкторы спокойно проводили декомпозиции своих задач, когда еще чертили на кульманах, а программирование и алгоритмы был уделом горстки ученых.

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

Знание разных алгоритмов и ЯП — это как знание молотка и киянка — оно полезно, но только вместе с умением их применять

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

Я размышлял над обратной проблемой. Когда спрашивающий знает из каких элементов нужно составить решение и (допустим) понимает к чему нужно прийти. А собрать целое из частей не может.


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

Неспособность к декомпозиции задачи (выраженной обычным человеческим языком) — главная проблема начинающих программистов.
Когда-то детей учили решать задачи по арифметике через последовательные вопросы: сколько яблок у Пети? сколько яблок у Саши? Потом сразу стали учить записывать уравнение, обозначая через Х искомое. М.б. первый метод лучше развивал способность к декомпозиции.
Знание разных алгоритмов и ЯП — это как знание молотка и киянка — оно полезно, но только вместе с умением их применять

В статье написал:
Изучение алгоритмов вырабатывает умение последовательно и четко излагать свои мысли, описывать по шагам какое-либо действие. Такое умение не лишнее в любой специальности.
Изучение алгоритмов вырабатывает умение последовательно и четко излагать свои мысли, описывать по шагам какое-либо действие.

Изучение алгоритмики как таковой — да.
Но изучение готовых разработанных кем-то алгоритмов — нет.

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

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

Я собственно недавно смотрел учебники по математике для младших школьников: там все по прежнему идут яблоки и арбузы.

В общем связь с тем что можно пощупать — прямая. В более старших классах начинаются тоже приближенные к IRL задачки: типа поезд выехал из точки А в точку Б или 3.5 землекопа копали яму… и т.д.

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

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

На «почему он так устроен» учитель и должен обратить особое внимание. Показать классу пошаговое выполнение под отладчиком.
Это уже вопрос архитектуры и методологии.
По идее все эти «решетки» можно вывести как методы одного статичного класса, но это будет иметь смысл, если есть другие более осмысленные классы (такой вот каламбур).

Т.е. если написать программу решетки Эратосфена, то это как мой самый первый пример: class Program с двумя методами, собственном main, где крутится логика программы и метод самого алгоритма Эратосфена.

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

Следом мы изучаем другие алгоритмы и расширяем прежнею программу: дабы не плодить сущностей — сводим эти решетки как методы в один статичный класс (а их старые классы ликвидируем), про который забываем и принимаемся за демонстрацию тех же пузырьков… и далее по нарастающей.

В итоге получаем:
1. Изучаем алгоритм Эратосфена
2. Показываем как можно по-другому структурировать программу и модернизируем её
3. Расширяем программу, добавляя аналогичные алгоритмы
4. Изучаем как это все работает, сравниваем, анализируем
5. Рассказываем об оптимизациях и вычислительных сложностях
6. Снов модифицируем программу и добавляем туда новые сущности

PROFIT!

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

А просто написать программу «алгоритм Эратосфена»… ну я хз, это тупо. Более того, польза от этого алгоритма будет разве что тем кто занимается криптографией. Я вот занимаюсь математическим программирование уже дофигущу лет (смотря как считать, но 10+ уже наберется) и мне эти решетки понадобились всего пару раз — когда привлекали к задачам связанных с кодированием. Часто ли потребуется эта решетка людям, занимающимися более приземленными вещами?

А вот например всевозможные задачи на графах (например, обход графа) — встречаются ну просто постоянно, трудно наверное найти задачи где их нет. Еще конечные автоматы, задачи оптимизации и т.д. и т.д.

Т.е. я бы строил бы курс (вообще я уже такой строил) с целью, например, разработки программы где роботы ходят по клеточкам, потом ищут выход из лабиринта, потом взаимодействует друг с другом и т.д. Это наглядно, это интересно, а самое главное покрывает необходимым минимум алгоритмов, используемых на практике: там будут и деревья, и сортировки, и конечные автоматы, и задачи поиска пути, и оптимизации (например, задача коммирвояджера). Студентам заходит лучше, чем «а сегодня я вам расскажу про ещё одну олимпиадную задачку про паровозики», школьникам думаю тоже.

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

Автор статьи не прав в том, что нужно пичкать школьников алгоритмами. Не усвоятся они.

Да. Так и есть.

На самом деле к любому алгоритму можно прийти самостоятельно, если будет необходимость применить его.

Смотря к какому. Сортировку — да, а какой-нибудь non-dominated sorting genetic algorithm или TimberWolf 3.2 — это уже будет уровень научной работы, которую уже проделали лет 10-20 тому назад.

«Знание алгоритмов» тут всего лишь экономит время на поиск.

Не только. Это еще и влияет на эффективность полученного решения. Мой самый любимый пример — это то сколькими способами можно крутить матрицы — алгоритмов несколько (разложение Холецкого, LU-разложение, QR, SVD и т.д.), каждый со своим достоинствами и недостатками и лучше их использовать прицельно, т.к. заюзать SVD — это будет тотальный оверхеад в ряде практических задач: уж задач где основная матрица системы квадратная и невырожденная не меньше, чем задач где они прямоугольные и плохообусловленные.

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

В общем всегда должна соблюдаться связка практики с теорией:
1. Если напихать максимум теории, то потерпим фейл — единицы смогут сообразить куда и как это можно вставить самостоятельно, у большинства же знания выветрятся — человек имеет особенность забывать то, чем не пользуется.
2. Если заниматься только практикой и учится исключительно на копипасте со StackOverflow, то на выходе получим шаманов и ремесленников, а не инженеров, которые будут каждый раз изобретать велосипед. Это кстати нынче очень актуальная проблема.
на выходе получим шаманов и ремесленников, а не инженеров
Школа не делает инженеров. Всё, что сказано выше — очень разумно, но это для подготовки настоящих инженеров, которым, как бедным школьникам, не надо еще писать сочинение про образ Татьяны Лариной :)
Хз, дети отлично умудряются самостоятельно собирать радиоприемники и передатчики, пользуясь таблицами, номограммами и упрощенными формулами, затем уже идут с первичными навыками обучаться на какую-нибудь радиотехнику, где уже углубляют свои знания и осваивают весь необходимый набор знаний для того что бы разрабатывать их самостоятельно и лучше.

Навыки то надо постоянно тренировать и чем раньше начать — тем лучше будет.

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

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

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


Смотря к какому. Сортировку — да, а какой-нибудь non-dominated sorting genetic algorithm или TimberWolf 3.2 — это уже будет уровень научной работы, которую уже проделали лет 10-20 тому назад.

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

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

Ну обычно да. Еще столы, стулья, доски. Но круги квадраты все же хотелось бы тоже давать не в абстрактном виде, а как-то сразу с точки зрения компьютерной геометрии.
На самом деле ИМХО ООП лучше всего заходит с задачами где надо оперировать реальными сущностями — например, полет снаряда, брошенного под углом к горизонту, робот в лабиринте и т.д…
Другая проблема — не всякое ООП и не в каждой задаче одинаково полезно — это вот очень тонкий момент кстати. Ну там смоделировать работу PID регулятора с какой-то штуковиной — легко, а вот например, моделировать динамику каких то частиц и под каждый атом частицы отводить свой класс — ну ИМХО это никакой компьютер не переварит.

IEnumerable можно на графиках (линейных, квадратичных) функций показывать. Но сначала желательно объяснять отличие списка и множества от массива.

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

Ха-ха-ха. Кажется, правильное наследование квадрата от прямоугольника до сих пор многими считается великой нерешенной проблемой ООП...

Никто не предлагает наследовать прямоугольник от квадрата. И то и другое наследуется от "фигуры". Для иллюстрации этого достаточно.


Если вы пробовали объяснять на чем-то другом и у вас получилось, поделитесь пожалуйста.

ООП абсолютно интуитивно-понятная технология программирования.

Хрен там плавал. Мне в своё время стоило изрядного труда врубиться, что за зверь такой.

Смотря откуда приплыли, если до этого были многие года процедурного программирования 60-ых годов или вообще из области системного программирования, то врубиться будет трудно. Еще бывает трудно переключаться с C++ на C#, т.к. ООП в них все таки разные.

А вот если с нуля или обратно — никаких проблем. Я вот например после беглого знакомства с Turbo Pascal почти сразу спрыгнул в Object Pascal/Delphi по причине отсутствия в TP динамических массивов — и объекты зашли очень быстрой (собственно и в TP я самого начала рекорды начал использовать). А оттуда без особых проблем спрыгивал на C++, C#, Java (Delphi=>C# вообще безболезненная процедура, вот Жаба уже менее дуракоустойчивая)
А вот недавно мне надо было сделать симуляшку с анализом характеристик PID-регулятора… и могу сказать, что ООП вариант я накатал куда быстрее, чем чисто процедурный с векторами и бла-бла-бла.
И я недавно это на ООП накатал быстрее, чем без него. Но я давно не школьник, как, думаю, и Вы.
А в каких ещё языках, кроме С++, существует множественное наследование?

OWL

Как же это "никаких неявных this" когда в одном модуле все идентификаторы видимы по простому имени? Это скорее "всегда неявный this" получается.


И да, модуль не имеет ничего общего с ООП. Эдак можно модуль в любом языке программирования "компонентом" обозвать.

Запись, с типом которой связана подпрограмма, всегда объявляется явно — как параметр подпрограммы, имеющий удобное для автора кода имя. Тогда как в С++-подобных языках параметр передаётся неявно: по факту он есть, но в заголовке подпрограммы мы его не видим.

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

Это в Modula был только модуль. А в Oberon — уже полноценное компонентное программирование.
Речь не про С++. Если сравнивать, то с ОО Pascal. Но зачем ООП всем школьникам?
ОО в Pascal не существует, а в Delphi-7 — редкостное убожество.

Я никогда и не говорил, что ООП необходимо (учился во времена процедурного структурного программирования). Но в большинстве актуальных языков ООП есть. И в том или ином виде, но сталкиваться с ним придётся. Если не в виде классов, то в виде модулей: хотя бы потому, что классический Pascal предлагает только монолитный код программы (одна из тех ошибок дизайна языка, которые я упомянул в первом комментарии).

И если столкновение неизбежно, то лучше выбрать не тот вариант ООП, который моден, а тот, который будет максимально понятен школьникам.
ОО в Pascal не существует

Существует с момента турбо-5, а микрософт тогда сделал свой, но он оказался не успешен. А был еще Think Pascal на Маке и т.д.

Delphi-7 — редкостное убожество

Извините, но я на этом «убожестве» много лет успешно работаю.

И в том или ином виде, но сталкиваться с ним придётся.
Лирикам не придётся.

классический Pascal предлагает только монолитный код программы

Для изучения сортировки пузырьком иного не надо.
Это всё диалекты. Я же под Pascal везде подразумеваю классический язык Вирта.

Это исключительно моё личное мнение, сформировавшееся после того, как пришлось написал на Delphi-7 программу управления механизмами. Да, создание интерфейса упрощает очень сильно. Но на этом все достоинства и заканчиваются.

Пузырёк — да, большего не надо. А, например, списки — монолит уже мешает.
А, например, списки — монолит уже мешает.


type
 list = ^memeber;
 member = record
                   dat : integer;
                   next: list;
                end; 

И где мешает монолит?
Это исключительно моё личное мнение, сформировавшееся после того, как пришлось написал на Delphi-7 программу управления механизмами. Да, создание интерфейса упрощает очень сильно. Но на этом все достоинства и заканчиваются.

И в чем же это убожество выражается?
За что любят ООП — то что он банально проще.

Да, само по себе ООП тупо доступнее для понимания, чем прочие приемы, большинству среднестатистических людей без специального образования. В принципе этому среднестатистическому большинству проще написать более менее вменяемую и читаемую программу, используя объектно-ориентированный подход, чем используя, например ФП, или «старый» процедурный язык, или испльзую ориентированный на данные дизайн и т.д.

Так что ООП школьникам то как раз вкатит, тем более как бы не кочывряжились адепты ООП, но по факту это просто небольшая надстройка над структурным программированием (также как структурное — надстройка над процедурным)

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

Да, само по себе ООП тупо доступнее для понимания, чем прочие приемы, большинству среднестатистических людей без специального образования.
Это не очевидно. Тем более при изучении базовых алгоритмов (по принципу один алгоритм — одна программа) нет возможности увидеть достоинства ООП.
Тем более при изучении базовых алгоритмов (по принципу один алгоритм — одна программа)

Это бесполезное занятие — показать 3.5 алгоритма в 4-х отдельных программах. Тупо натаскивание эрудиции, не более.
В итоге у одних знания улетучатся, у других (у кого память получше) будет просто набор несвязанных и бесполезных знаний.
Нужно в первую очередь уделять вниманию следующим навыкам:
1. Декомпозиции задачи
2. Поиска
3. Анализа
4. Построение архитектуры приложения
5. Экспериментирования и сравнения
Это навыки общего вида

Это не очевидно.

Хз. Берем любую практическую задачу и там становится очевидным. Например, школьников можно напрячь написать программу бросания камня под углом с простой анимацией (которую можно реализовать на любой формочке): сразу появляется объект типа Stone, который имеет параметры, как mass, velocity, acceleration, impulse, position а также методы для вычисления их, а также появляется класс World с параметрами spaceBound и gravity, объект Launcher с параметрами angle и force. Ну и стандартно, Main где будет реализован основной цикл и UI для отображения.
Будем изобретать велосипед «простой» анимации или м.б. сразу возьмем OpenGL/DirectX? Вот уж действительно бесполезное занятие.
Обычные WinForms на GDI с этим с успехом справятся — всего 1000 строчек говнокода внутри формочки (естественно, если бы автор в школе учил ООП, а не сортировку пузырьком на Бейские, то кода было бы меньше, он был бы разборчивее и красивее). В современных энтерпрайз языках все уже из под коробки есть, того же WinChart выше крыше хватает

А если уж совсем загнаться, то есть замечательные и бесплатные надстройки как XNA, Unity3D или Xenko, по которым даже есть целые курсы адаптированные как раз на студентов/старшеклассников

А так. умные люди из MIT придумали Scratch для обучения. Подтверждаю — младшие школьники на нем очень быстро въезжают и начинают даже что-то пытаться программировать. В это точно лучшая стартовая точка для самых маленьких.

А вообще школьники спокойно и такое делают

Вот уж действительно бесполезное занятие.

Бесполезное занятие рассказывать про сортировку пузырьком, не показав как её можно использовать. Это даже на студентах тяжко прокатывает, а у школьников отличный иммунитет к обучению, упирающему на эрудицию, а не на прикладное применение.

Результат программирования — это программа, которая принимает от пользователя какие-то осмысленные входные данные и выдает такой же осмысленный результат. А алгоритмы, языки программирования и т.д. — это всего лишь инструмент и средство, а не цель. Если ими не уметь правильно пользоваться — то это мусорные знания.
Бесполезное занятие рассказывать про сортировку пузырьком, не показав как её можно использовать.
Не понял: что непонятного в том как использовать сортировку? Что тут особо объяснять? Возьмите любую последовательность слов или чисел и отсортируйте по алфавиту или по возрастанию. Что тут непонятного?

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

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

Для школьника? Вы серьёзно?

См. С.М.Окулов, Программирование в алгоритмах: перестановки, размещения, сочетания, разбиение числа на слагаемые, последовательность из нулей и единиц без 2х единиц подряд и т.д. Я когда-то в школе основы комбинаторики на уроках математики проходил. Не знаю есть ли комбинаторика в современной школе.
Оберон, модула… 2017 год на дворе, что с вами не так??
А еще теорема Пифагора и решето Эратосфена — такое старье, а на дворе 2017 год…

Лол, письменность? Вы чё шумеры штоле? На дворе 2017!!! Поди прогуливали телепатию в школе?)))


Я ни разу не в защиту оберона или модулы, но я например вообще не знаю JAVA. При этом у меня есть знакомый, который вообще не знает Python… И это никогда не мешало нам обсуждать алгоритмы и архитектуры.


Ну восхваляет кто-то фортран в 2017-м, зачем на него агриться если только цель не в умышленном троллинге?))

Лол, письменность? Вы чё шумеры штоле? На дворе 2017!!! Поди прогуливали телепатию в школе?)))


Ну вообще решето Эратосфена — это алгоритм для поиска всех простых чисел. Просты числа — если не в курсе, активно применяют в криптографии, кодировании и т.д. А еще с простыми числами есть ряд нерешенных проблем математики (например первая и вторая проблемы Ландау. проблема Гольдбаха и т.д.).

А теорема Пифагора… Вы как расстояние будите считать в прямоугольных координатах? Все, вся прикладная вычислительная графика и геометрия проходят мимо. Или решать Диофантово уравнение? Епс, да все задачи оптимизации, машинного обучения проходят мимо.

Хотите поновее? Ну в геометрии есть пространство Минковского — конец 19-го века. сумма Минковсокго вон используется в motion planing в робототехнике и играх. Но без теоремы Пифагора и прочих, даже с вазелином туда не пролезете.

Ну восхваляет кто-то фортран в 2017-м

А че его восхвалять? Например вот это написано на Фортране. Вот Фортрановски библиотеки при этом эти библиотеку лезут ну просто везде — практически в любой программе для численного моделирования и расчетов (естественно это не говноподелки на Пухтоне) торчит фортрановский код и библиотеки. Для HPC у Фортрана только одна альтернатива — Си, хотя недавно туда пробилась Julia. Так что, что его славить — его повсеместно используют, благодаря чему можно, например долететь на самолете из Москвы во Владивосток и неубиться…
Похоже вы не можете в сарказм…
Не могу :-)
«видимо, проблемы молодежи во многом в ней самой, а не только в образовании или в отсутствии возможностей»

сколько много вакансий в науке смежной с программированием! Доски объявлений прям так и ломятся от предложений: статистика, аналитика, ИИ, компьютерное зрение, квантовая физика, робототехника, компьютерное моделирование, микроэлектроника, станкостроение, логистика, прогнозирование…
где все эти вакансии? Где я могу применить свои знания в математике, физике, знании алгоритмов?
К примеру, можете сделать программу, которая в Го или даже в шахматы играет лучше существующих, можете внести ясность в проблему P=?NP и т.д. Но хорошо если что-то из этого получится у одного человека из всего населения Земли за 10 лет. А для остальных более мелкие дела. Кто сделал хоть что-то при прочих равных имеет больше шансов получить работу, чем те, что ничего не сделали.
вот вам гипотетическая ситуация, молодой учёный разработал термоядерный реактор у себя дома, казалось бы, вот он стоит работает мини реактор и способен из стакана морской воды произвести энергии для целого города, это самое величайшее открытие за все времена.
А что дальше? для строительства полномасштабной электростанции нежны деньги, где их взять молодому учёному? ведь в друзьях у него нету Генри Форда, связей в государстве тоже нет, он было побежал в прессу, что бы рассказать о своём открытии, а там ему сказали извините не формат нашего издания, но вы можете заплатить и мы опубликуем, потом он побежал искать инвесторов, но там ему сказали, я не понимаю этот ваш термоядерный синтез и вкладывать не буду, когда он ещё там окупится… и что теперь? Это открытие никому не нужно? никому не нужна дешёвая и безопасная энергия…

вот так и ваша программа на go, ни кому не нужна, и нет смысла тратить время в пустую на разрешение задачи p=np…
так что нет никаких прочих равных, равенства впринципе нет, хоть делай хоть не делай
нет смысла тратить время в пустую на разрешение задачи p=np…
Молодой ученый Г.Перельман решил близкую по сложности задачу, и ему присудили премию в миллион $$. То что он от нее отказался — его дело.
PS Если дома термоядерный реактор, то можно соседям электричество продавать за пол-цены, выручку использовать на расширение своей электросети и на ее охрану :)
Если реактор уже стоит и работает, и уже способен из стакана морской воды произвести энергии для целого города, то то на этом этапе проблем со сроками окупаемости уже быть не должно…
господа, вы явно не пробовали что-то продать, во-первых сбегутся соседи и нарекут тебя террористом, во-вторых прибегут всякие службы и скажут что это опасно и немедленно нужно всё это убрать, даже если придраться не к чему вам всё равно не дадут это продавать…
вспомните хотя бы историю с геотермальной энергией и парниками для овощей, бизнес закрыли, парники заморозили, ибо не порядок, как это так на халяву энергию качают и налоги не платят
Налоги надо платить и спать спокойно (С)… ну, и со всеми, как говорят, можно договориться… видимо Вы не пробовали что-то продать — раз этого не знаете :) Лично у меня нет реактора, но ради интереса пробовал продавать ПО через одну из специализированных на этом фирм (не называю, чтобы не упрекнули в рекламе). Вполне продавалось — они даже налоги за меня платили — мне только оставалось подтверждать поступление денег на мой счет.
я вам не про пряники на базаре говорю, а про полноценную дорогостоящую технологию, которую что бы создать необходимы вложения, которые ну уж никак не потянет один программист… так сказать, что бы вспахать поле и что-то там вырастить мне нужен комбаин, склады машины и рабочие, а сажать картошку с помощью лопаты и продавать на местном рынке, да ещё и 30к рублей налогов платить государству, так себе занятие…

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

что бы вспахать поле и что-то там вырастить мне нужен комбаин, склады машины и рабочие, а сажать картошку с помощью лопаты и продавать на местном рынке, да ещё и 30к рублей налогов платить государству, так себе занятие…
Многие лопатой работают и живут, но некоторые любят говорить, что им нужны условия и даже картошку для собственного пропитания, а не то, что для продажи, вырастить не могут.

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

гипотетическая — основанный на гипотезе, на предположении; предположительный, предполагаемый;

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

Не вижу доказательств этому утверждению. А вижу, что лопатой картошку сажать не хотят.


в первом посте я саркастически, попросил указать хотя бы пару вакансий из целого списка важных научный направлений, где я мог бы с удовольствием использовать свои накопленные знания, которые на сей момент считаю бесполезными… так что начните со списка вакансий, а уже потом осуждайте.
Что за история с парниками для овощей, вы про компанию «Зеленая ферма»? Так она работает, весной 2018 начнет строительство.
Тут всё очень противоречиво. Школа, сама по себе, даёт только общие представления и призвана, в основном, научить думать, решать задачи, искать информацию и целенаправленно работать. С другой стороны, ученики делает свои проекты. Нынешним школьникам, которые растут вместе с гаджетами, легко разбираться с языками программирования и средствами разработки. Чего же хотят от образования? Обеспечить всех потенциальных работников общей высокой математической культурой (дискретная математика+теория алгоритмов+схемотехника) и культурой ведения проектов (чтобы все создавали программное обеспечение по единым лекалам, а не на коленке)? Вузы, вообще, живут по своим общеобразовательным стандартам и выполняют определённые учебные планы. И… чему учить? Программированию вообще или проектированию в определённой среде разработки? Всё-равно, программированию нельзя научиться, наблюдая как это делают другие.

Но!

Можно обратить внимание школьника на то, сколько вокруг нас разных алгоритмов! Везде выполняются какие-то операции. Есть определённые последовательности действий. И что многое можно посчитать!

В этом смысле, вспоминается «Конкретная математика» Дональда Кнута, «Инофрматика» Бауэра и Гооза.

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

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

Если бы можно было бы добиться, хотя бы, совпадения теории с практикой, то… была бы сделана добрая половина дела!
Приходишь на работу

Да. Прежде всего школьнику нужно помочь понять: на какую работу он хочет приходить. Я очень надеюсь, что большинство не захотят приходить на IT-работу, иначе кто нас будет кормить и лечить…

а том тебя просят забыть всё, что ты учил раньше, и учиться приходится совершенно новому делу (причем, именно, делу) и учиться совершенно заново.


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

ИИ также лечить уже практически полностью умеет...

А зачем каменщику сопромат или зачем архитектору мозоли от мастерка?
Каменщик со знаанием сопромата ничем не лучше другого, а архитектор с мозолями совсем не нужен.
Врядли Гауди или Фиораванти сами лично таскали кирпичи и клали их ровнее и краше своих работяг.
Поэтому отделяйте пожалуйста. В СССР программист получался в техникуме и не нужно было ему никакое высшее образование. Высшее образование нужно только для создания нового. Новизна без фундаментального образования получается только у гениев или случайно.
Как у Ньютона «я стоял на плечах гениев» поэтому и видел дальше.
В технике выделяются: средняя техническая квалификация техник-программист (ранее «программист-лаборант») и высшая техническая квалификация инженер-программист. (Вики)
Я не встречал инженеров-механиков, которые не умели работать на станке. Так же как и инженеров-электронщиков, которые не умели паять. Другое дело, шо по-хорошему за них это должны делать специально обученные люди, но общие навыки и понимание есть у всех.

Каменщик со знанием сопромата => потенциальный инженегр или как минимум мастер над другими каменщиками (шо впрочем инженегрская должность), каменщик без знания сопромата — так и останется каменщиком.
Шутка про Паскаль не очень.
А про школу понимание проблемы верное, а вот вывод не тот, да в школе мы не можем научить всем предметам через силу, поэтому в школе нужно давать только те предметы, необходимость которых несомненна — раз школьное образование обязательное, то и изучать там надо только то что обязательно знать, я вот собрал примерный список такого.
каждый должен уметь подготовить проект вещи для изготовления на домашнем 3d-принтере
У меня нет 3d-принтера :( А 3ds max я пробовал лет 10 назад. Т.о. я не достоин аттестата зрелости?
К сожалению это как раз мелочь, более серьёзная проблема в сложностях с логикой у текущих выпускников.
Хотя формулировку в данном случае нужно поменять, раз не всем понятно, что речь о будущем, да и не обязательно ему быть домашним.
А вот прежде всего ИМХО стоит определиться с масштабом в подобном списке. Умение печатать вслепую 10 пальцами — мелочь или не мелочь? Важнее это 3d-проекта?
Сложный вопрос, с одной стороны интерфейс человек-машина важен, с другой стороны, его скорость не является чем-то прямо критичным, немного видов деятельности где эта скорость важна, точнее она нужна, но мало где разница между обычным набором и слепым что-то меняет.
Т.е. набирать на клавиатуре нужно уметь не одним пальцем, и логично обучать слепому десятипальцевому, но не факт что надо это проверять на экзамене — набирает с разумной скорость и молодец.
В том числе основы выживания — как в природных условиях
А здесь в какой мере изучать основы? Уметь развести костер из сухих дров и из мокрых веток — две большие разницы. И переночевать на 40-градусном морозе — большое искусство. Или и тут как с набором?:

набирает с разумной скорость и молодец
Конкретику на данном этапе сложно озвучить (я один не могу составить подробную школьную программу), тут много факторов, включая то, что время лимитировано, придётся балансировать все предметы.
Но данный предмет важен и думаю будет детям весьма интересен, особенно благодаря наличию практики, поэтому есть шанс и про мокрые ветки и про мороз рассказать, хотя в первую очередь для выживания нужно умение ориентироваться.
для выживания нужно умение ориентироваться
Зависит от ситуации. Нпр., самолет сделал вынужденную посадку в не населенной местности. Тут как раз ориентироваться вредно и не нужно далеко уходить от самолета — его найдут быстрее, чем отдельного человека.
3D-принтер — специфический инструмент для определённого круга задач, скорее всего таким и останется. Домашний 3D-принтер будет востребован где-нибудь на уровне настольного токарного станка.
Да, формулировку поправлю, не домашний и не принтер, хотя суть та же.
Что такое "нпр."?
нпр.=например
Всё-таки, это было бы крайне интересно придумать новый учебник по информатике. Заинтересовать всех! Сделать красиво! Кто, как не хабровчание, смогут это сделать? Можно было бы совместными усилиями сделать. И для собственного удовольствия, и для того, чтобы было кого на работу брать.
Отличная идея!
Предлагаю Викиучебник. Но в любом случае, я — ЗА!

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


Викиучебник наверное стоит просто начать. А там уже видно будет.

Да, единой точки зрения нет. Но некоторые точки соприкосновения все-таки появляются. Много споров, но выводы спорщиками тоже делаются. В общем, пользы больше чем вреда.

И да, меня уже не раз тыкали носом, в то, что я учитель и всему этому тут не место. Однако, есть хаб «Учебный процесс в IT» и нравится вам это или нет, но этот процесс теперь начинается в школах со второго класса. Мне не нравится, то во что этот процесс выливается, и, оказывается, не мне одному. Хабрахабр — это сообщество. Изучите список хабов и вам станет понятно, для кого этот ресурс.

Поэтому дискуссия регулярно уходит в оффтопик про ООП и фичи ЯП.


Для учителя, преподавателя (новичка или нет) достаточно важно, какой язык (языки) программирования использовать в обучении. Какой язык выбрать для обучающихся в качестве самого первого. Даже то, что дискуссия уходит в офтопик про ООП и фичи ЯП, гораздо лучше того, куда уходят подобные дискуссии на других ресурсах.

Викиучебник — это не Word-овский документ, но начинается он именно там. И он начат — это документация и туториал по NumPy. Однако, принять участие в совместном написании учебников я бы хотел. Причем, думаю, что и вы тоже.
Все гораздо проще, нежели видит автор. Изучение областей, в которых ученик не заинтересован прокачивает его связи в мозгу. Поэтому обширная программа с кучей неинтересного может вызывать определнное сопротивление у падавана, но он суммет с ним справляться. Зачем учить стихи?… ребенок, много «зубривший» в детстве, во взрослом возрасте будет легче переключаться между задачами именно за счет всесторонней развитости его органов восприятия, нервных центров и связей в мозгу, приобретенных в школе.
Была 10-и летка — сделали 11-и, м.б. до 15 классов довести? Пусть стихи учат.
На самом деле между 14 и 20 годами большая часть связей в мозгу массово самоустраняется — это процесс который происходит у всех. Эдакое упрощение структуры мозга. Естественно, часть воспоминаний и знаний просто выветриваются (прежде всего те связи, которыми не пользуешься), что-то очень сильно фрагментируется, остается только минимальный набор самых востребованных связей, зато происходит резкий скачек в интеллекте, причем это не случайный процесс. Вообще такая оптимизация мозга кагбэ всю жизнь происходит, но именно в трубку 14-20 лет она самая масштабная и там реально часть навыков и знаний просто исчезает. По аналогии в ML введена такая техника как вербализация (прореживание) нейросетей.

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

Проблема только в том, что в этот период отделы и функции мозга мозга только формируются, например, формирование мелкой моторики завершается только к 9-10 годам. Речь окончательно формируется к 6 годам, а общая моторика к 4. Префронтовая кора (рассудительность) заканчивает свое формирование только к 13-14 годам.

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

И только после того как специализация из-за прореживания завершится — формируется абстрактное мышление, собственно только к 17-18 годам они учатся полноценно планировать и оценивать риски, оперировать сложными вещами в голове.

И к 20-21 году заканчивается формимидирование высших психических функций.

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

А самое главное — что бы какие-то знания закрепить и не потерять во время большой чистки — необходимо что бы отдача от них была моментальная и ощутимая, т.к. до 17 лет человеки еще не умеют строить далеко идущих прогнозов. Именно поэтому, например, навыки письма и арифметики у всех людей одинаково хорошо закрепляются — ну тупо потому что как сразу им начинают учить, ими тут же начинают пользоваться, просто на бытовом уровне человеку приходится постоянно считать и писать + по другим предметам надо делать тоже самое. А вот с геометрией уже ж0па начинается — слишком много абстракций, которые еще юные котелки плохо переваривают, но посчитать площадь квартиры в итоге все равно сможет каждый (опять таки — это практический навык), но большинство теорем никто и не вспомнит и не сможет доказать (хотя в школе могли доказывать). Тоже с навыками труда и даже с частью физики — т.к. с физикой мы на интуитивном уровне взаимодействуем, но только с частью: ядерную физику никто не вспомнит и даже после универа человек будет свято верить что Эйнштейн всех обманул, а мериканцы не высаживались на Луне. А вот со всякими химиями, биологиями и историями — кому как повезет. Если пол детства провел за пестиками и тычинками, коллекционируя гербарии, то что-то может и останется, но таких мало и естественно большинство не вспомнит сразу (вот прям сразу) после школы что такое эукариоты и прокариоты, а для людей в 40 лет может оказаться настоящим открытием, что вирусные заболевания антибиотиками не лечат, а гомеопатия — обман.

Потом-то, начиная с 20-и летнего возраста, конечно, человек сможет осваивать новые и более сложные знания самостоятельно и восполнять пробелы в знаниях. Проблема вот только в том, что специализация мозга уже давно закончилась и в некоторых областях человек оказывается в пролете. В принципе тут ничего плохого, но хренова бывает тогда, когда человек оказывается в пролете с основными навыками и программирование на самом деле — это вторая грамотность. А хваленая советская и нынешняя постсоветская система образования — мягко говоря положительному подкреплению не способствует + нездоровая атмосфера в учительском корпусе. В итоге в универе народ начинает учится заново.
реально до 17 лет давать абстрактные вещи бесполезно — мозг их просто плохо воспринимает
Не соглашусь. Примерно в 15 лет мы с моим школьным товарищем увлеклись Достоевским, а потом философией — естественно наиболее немарксичной и наиболее абстрактной: Платон, Кант, Шопенгауэр, Флоренский. Пытались создать свою философскую систему, часами спорили о солипсизме и детерминизме и т.д. Другие мои товарищи в это время начали писать стихи и прозу (очень нереалистичную). Мы учились в физмат школе, но абстракций физики и математики нам казалось мало. С юношеским максимализмом хотели проникнуть в самую суть мироздания. Не лень было! :)
PS BTW Льюис Кэрролл, в числе прочих, подметил, что маленькие дети очень любят абстракции и возникающие из них парадоксы. В этом секрет успеха его Алисы. Чего стоит один вопрос Безумного чаепития «Как нарисовать множество?»
Скорее всего им нравятся именно пародоксы + вау эффект: круто то, что не понятно. Все новое и неопознанное — увлекает, это изначально во всех человеках заложено. Собственно без этого бы и не было нормального обучения, да и вообще трудно представить себе выживание вида, не пытающегося что-нибудь новое исследовать (например, новый ареал для распространения).
Ok. Именно поэтому я и думаю, что дети и подростки лучше понимают абстракции, чем взрослые.
Ну Платон и Кант — это далеко не самое сложное в философии, Платон так вообще самые начала, вот если бы вы там обсуждали Ильина или Гегель с каким-нибудь Бодийяром (правильно написал?).

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

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

Ну и повторюсь — развитие все же несколько индвидуально.

А теперь представьте детей, которые по Коломогоровскому учебнику геометрии изучают в 7-ом классе понятие конгруэнтности. Самое главное, с точки зрения правильной подачи материала этот учебник был составлен очень хорошо, но оказался полным фейлом в качестве школьного. Та же участь постигла учебники по физике старый Кондартьева и новый Громова — физика там была представлена достаточно корректно (и я бы не сказал, что сложно, учебники как учебники), но в итоге и дети, и учителя его не любили, зато старый Мякишев и Буховцев или Перышкина все любят, хотя тот же Перышкин вообще ниачем.

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

Пожалуй мой интерес к философии начался сильно раньше, чем я познакомился с книгами Достоевского. В 4 классе прочел «Таинственный незнакомец» Марка Твена.
«Именно поэтому, например, навыки письма и арифметики у всех людей одинаково хорошо закрепляются » Это в какой такой вселенной — это происходит? Вы не знаете борцов за грамотность, которые не могут 2*2 посчитать? Или людей, которые понимаю сложный матан, ну имеет слабые навыки письма? Я не говорю что так и должно быть, нет конечно — это базовые навыки, ну так происходит.
Или людей, которые понимаю сложный матан, ну имеет слабые навыки письма?

Эти монстры матана в университет поступить смогли? Значит сдавали русский язык, даже те кто идет вне конкурса, должны сдать все экзамены не хуже чем «удовлетворительно». Если сдали, то значит навыки письма достаточные.

Вы не знаете борцов за грамотность, которые не могут 2*2 посчитать?

В магазин они своих помощников отправляют за покупками и верят им на слово?

В общем IRL такие личности могут попасться только в ПНД. К слову сказать любые навыки атрофируются, если ими не пользоваться
«В магазин они своих помощников отправляют за покупками и верят им на слово?»
Видимо да, так как много раз слышал «я гуманитарий — я не знаю математику», после того как я видел пример банального не умение считать, да согласен это много говорит о моём круге общение… но если вы говорите о одинаковом знание и категорично, то должны брать всех, а не только. О, по поводу удовлетворительно — у меня так, но у меня проблемы с начальной школой даже(если брать русский). Удовлетворительно это Каким-то рандомом смог сдать, а не достаточные навыки
Эт Вы наверное просто никогда не видели людей у которых не могут сформироваться или были утеряны навыки речи и письма — есть целый ряд патологий на эту тему: афазия, дисграфия и т.д. Как правило это все серьезные патологии.
Ну кстати один легкий пример можно увидеть по телевизору — Кличко, который иногда трех слов связать не может — это все результат его боксерской карьеры, где часто приходиться получать по голове.
«Эт Вы наверное просто никогда не видели людей у которых не могут сформироваться или были утеряны навыки речи и письма — есть целый ряд патологий на эту тему: афазия, дисграфия и т.д. Как правило это все серьезные патологии.» Ну это я понимаю, да
> 17-18 годам они учатся полноценно планировать и оценивать риски, оперировать сложными вещами в голове. И к 20-21 году заканчивается формимидирование высших психических функций.

откуда цифры? По Пиаже насколько помню окончательное формирование ммышления в период с 11 до 15 лет
откуда цифры?

Из книг и статей по нейрофизиологии. Конкретно такие цифры вроде как приводила нейрофизиолог Карла Ханфорд. Но у других будут аналогичные цифры.

По Пиаже насколько помню окончательное формирование мышления в период с 11 до 15 лет

Пиаже умер лет за 10 до, например, появления функционального МРТ. Миелинизация (процесс формирования миелиновых оболочек вокруг отростков нервных клеток ) ассоциативных путей в головном мозгу начнется со 2-го месяца жизни и заканчивается только к 25 годам. Ретикулярная формация завершает свое формирование в 18 лет — а она не только контролирует рефлекторную деятельность спинного мозга, но и влияет на обучение, например.

И Пиаже утверждал что в период с 11 до 15 лет ребенок только формирует умение оперировать гипотезами — это еще не абстрактное мышление, только зачатки. К слову сказать это его последняя работа, было бы у него больше времени — вывел бы больше периодов развития.
Мне кажется вы что-то путаете, мы ведём речь не о нейрофизиологии, не о строении и развитии мозга как органа.
Мы ведём речь о способностях в решении определённых задач, ни МРТ, ни формирование каких-либо оболочек не имеют в данном вопросе никакого значения, мы рассматриваем человека как чёрный ящик — дали задачу, справился, значит всё сформировалось, нет — нет.
Так вот мне и интересно на каких такого рода исследованиях базируется утверждение, что человек после (в среднем) 14 лет неспособен решать какого-то класса задачи? Пока всё говорит об обратном — Пиаже никто не свергает, сроки наступления уголовной ответственности только снижают, да и элементарный жизненный опыт показывает, что нормальный человек и в юности может думать, а дурак таким и помрёт.
Мы ведём речь о способностях в решении определённых задач, ни МРТ, ни формирование каких-либо оболочек не имеют в данном вопросе никакого значения...

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

Так вот мне и интересно на каких такого рода исследованиях базируется утверждение, что человек после (в среднем) 14 лет неспособен решать какого-то класса задачи?

На исследованиях нейрофизиологов, нейробиологов, психологов, неврологов, психиатров, педагогов — тут целый сомн исследователй, т.к. эта научная область междисциплинарная, но за последние 20 лет значительно выросли наши знания о мозге и возможности его исследования, правда все равно еще недостаточно. Та самая Карла Ханфорд, таблицу которой я приводил выше — чойт около 30 лет занимается проповедованием в школе, так шо помимо нейрофизиологии она еще и педагог.

дали задачу, справился, значит всё сформировалось, нет — нет

Вы можете давать общий тест на IQ в течении всей жизни и обнаружить, что с возрастом «сырые баллы» растут, особенно сильный качественный скачок между 17 и 25 годами.
Собственно есть, например Сиэтлское лонгитюдное исследование (которое проводилось на протяжении 40 лет), там например, пик по вербальному тесту вообще приходиться на 55 лет, а минимум на 25 лет, по пространственному тесту — 30 лет и снижается только после 60, по умозаключениям — достигает пика в 40 лет и начинается снижаться только после 60, успешность по числовому тесту растут от 25 лет и до 50, после чего начинает снижаться.
Все эти тесты не требуют специальных навыков (но образование, естественно, как и любая другая форма тренировки мозга улучшает показатели).

мы рассматриваем человека как чёрный ящик

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

сроки наступления уголовной ответственности только снижают

Вообще-то их скорее поднимают. В начале 20-го века никого не удивлял смертный приговор для 12-и летнего, а сейчас про такое наверное разве что из Ирана или Нигерии услышишь. К слову сказать в СССР в 30-ых годах за отдельные преступления могли судить уже с 12 лет, сейчас только с 14 и то только за особо опасные. Основной возраст уголовной ответственности — обычно 16 лет, но до 18 лет в обычную тюрьму не отправят. Во многих странах существует градация по составу преступления в зависимости от возраста. Хе, в США алкоголь не продают лицам младше 21 года, а в армию можно с 18 лет или с согласия родителей 17 лет ;-) Вот такие вот они странные американцы — водить машину можно с 14, в армию служить с 18, а бухать только с 21, как думайте почему? :-)

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

Пиаже никто не свергает

Естественно, просто его последними исследованиями — были исследования по тому как 11-15 летние дети усваивают формальную логику, а потом он умер.
Ну логично, сам себя процитирую:
префронтальная кора заканчивает свое развитие к 13-14 годам

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

Ну так это и есть:
И мой вопрос был в том какую задачу (класс задач) не может решать человек после 14 лет?

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

Ну если хотите наглядный пример: Самолетик, FlappyBird и Stardew Valley. Первую игру создал подросток в 14 лет, вторую игру самостоятельно реализовал 16-и летний подросток, ну а тертью игру 4 года разрабатывал чувак после колледжа, работавший библиотекарем. Вот и сравните сложность работ Самолетик vs Flappy Birds vs Stardew Valley — вот Вам и разница между 14, 16 и 20+ годами, на примере синглового проекта. Другой пример: Magicka — её разработчики ей начали заниматься еще в университете, выиграли грант, организовали фирму и выпустили спустя несколько лет игру — им тоже было 20+.
Все такие умные:
Особенно забавно это читать после того как начал кодить в 12.

имеют столько инструментов и свободного времени, каждый новый учебный год генерирует толпы школьников которые собираются создать убийцу WOW/Diablo/Crysis (нужное подчеркнуть), но у них нифига не получается, потому что это требует:
1. Знание и умение применять сложные алгоритмы, несколько сложнее, чем сортировка пузырьком
2. Умение самостоятельно строить реалистичные планы и организовывать работу… длительную работу
3. Разработку грамотной архитектуры
4. Собственно долго и упорно работать
Т.е. Самолетик они создать могут, сделать свою SCAD или Космических Рейнджеров — нет.
Я вот только про одного школьника (уже не школьника, уже студента) знаю, который к успеху пришел. И опять таки чуваку не 14 лет, а 17 (уже больше) и там не рядовой школьник — олимпиадник, углубленное изучение математики, все дела. И то это скорее всего казузистика (хотя с учетом того, что инструменты разработки упрощают жизнь все больше и больше, планка падать потихоньку буде), все это примеры достаточно выдающихся людей, несколько круче среднестатистических.

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

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

Так что в 14 лет человек может с легкостью паять также хорошо как и опытные паяльщицы, потому что вся моторика уже развилась, а вот возглавить УФТИ Ландау смог только в 24 года, а первую работу по теоретической физике он опубликовал в 20 лет — не смотря на то, что это была архинезаурядная личность, который с детства опережал сверстников в развитии.

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

Самым кстати молодым доктором наук за всю историю России — был Маргелян, защитил диссертацию в 20 лет, самый молодой профессор за всю историю человечества — была Алия Сабур, с 18 по 19 лет была профессором, но потом ей контракт так и не продлили — к слову сказать настоящие профессора в США работают по пожизненным контрактам, и вообще ее квалификация под большим вопросом (суды там какие-то были даже). Вот Вам и
принципиальную возможность

в 20 лет стать ученым таки реально, если ты акселерат. Жду теперь примеры 14-и летних докторов наук, директоров и известных разработчиков.
Вы снова путаете то же самое, для того чтобы стать профессором, директором и т.д. нужна не только принципиальная возможность полноценного мышления, но и образование/опыт/навык на получение которых требуется время, а если в 14 лет только появилась возможность решать такого класса задачи, то нужно время на их шлифовку.
Ваши примеры как раз подтверждают то, что в 14 лет всё уже сформировалось и работает как надо, но для достижения пика эффективности даже талантам нужны годы, что вобщем-то не удивительно.
Касательно снижения возраста уголовной ответственности — тыц.
Касательно снижения возраста уголовной ответственности — тыц.

Она и была раньше с 12 лет. Потом повысили. Но тут опять ограниченный состав преступлений. При этом для того что бы понимать «что такое хорошо, а что такое плохо» университетов кончать не надо.

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

Особенно забавно это читать после того как начал кодить в 12.

т.к. до 17 лет человеки еще не умеют строить далеко идущих прогнозов

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

геометрия — слишком много абстракций, которые еще юные котелки плохо переваривают

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

10 лет и это я ещё мало сообразительный, то-есть нормальный возраст понимание этой информации — значительно ниже
Очень смешно. Просто покажите урок в применении к движку компьютерной игры. Сразу вовлеченность возрастет.

Вы и предлагайте переход от абстрактной подачи материала, к практической.

Особенно забавно это читать после того как начал кодить в 12.

Вы уже в 12 лет умели оперировать паттернами и разрабатывать архитектуру, применяли замыкания, могли написать компилятор и разрабаться с языком только по его спецификации (без примеров)?

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

Хотя слова «контент» тогда не знал/не юзал, но общее понимание видимо имел — это наверное ключевое выражение в этом увлекательном рассказе.

Вы уже в 12 лет умели оперировать паттернами и разрабатывать архитектуру, применяли замыкания, могли написать компилятор и разрабаться с языком только по его спецификации (без примеров)?

Я вполне себе понимал классы/графический интерфейс как абстракцию.

Вы и предлагайте переход от абстрактной подачи материала, к практической.

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

Хотя слова «контент» тогда не знал/не юзал, но общее понимание видимо имел — это наверное ключевое выражение в этом увлекательном рассказе.

Если вы не поняли, то без знания как называется это «по научному» мозг сам выделил эту абстракцию и использовал для себя. Да и слово контент тогда было не так популярно.
Из практического примера мозг сам может выдернуть абстракцию.

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

В любом возрасте можно неправильно выдернуть и/или применить абстракцию или их комбинацию.

Так и я о том же. Не в возрасте дело, а в сложности абстракции.

Точно также как в арифметике с яблоками.

Это называется «примитивная чувственная абстракция». Ключевое слово тут «примитивная».

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

А если нет исходного практического примера? Если надо выделить абстракцию из абстракции, на основе чисто теоретических знаний, а потом их применить на практике? :-) А почему у одних абстракции выдергивает у других нет или по разному?

Если вы не поняли, то без знания как называется это «по научному» мозг сам выделил эту абстракцию и использовал для себя. Да и слово контент тогда было не так популярно.

Ну это уровень: отделить содержимое рюкзака от самого рюкзака. Ну да, дети с этим справляются.
Смогли в 14 лет применить для сайта теорию массового обслуживания? Провести нагрузочное тестирования, все дела?
С теорией массового обслуживания не знаком, а про проблему 10k соединений читал как раз приблизительно в 14. Где то в 15 написал простого бота на twisted, и вообще въехал в асинхронщину. Было понимание почему асинхронщина выигрывает в большинстве случаев в производительности в отличии от многопоточности.

И да, провести нагрузочное тестирование в 14 лет вполне реально. Зависит от уровня этого тестирования конечно, потестировать гугл далеко не каждый взрослый сможет к примеру.

Это называется «примитивная чувственная абстракция». Ключевое слово тут «примитивная».

А покажите мне пример сложной абстракции, которую мозг не сможет выделить на конкретном примере (в контексте программирования)?
Хорошая статья. С вами мы уже немного копий поломали и… о-да! Я по прежнему, с многим согласен и несогласен! Мне кажется, взгляд не такой уж и «мета». Но это отличное начало, потому, что очень много статей о проблемах образования со взглядом «изнутри», а описать всю картину целиком — действительно непросто. Я честно говоря, даже понятия не имею, как это сделать, ничего не упустить, да еще и не ошибиться.

Может исследование операций?.. Образование — чертовски сложная система, которая в свою очередь, является частью государства — другой, еще более сложной системы. Или теория самоорганизации (синергетика)?.. все-таки, у системы есть параметры, значит могут быть уравнения, моделирование.

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

Статья, правда, классная. Я бы с радостью с вами еще поспорил (от этого есть польза), но к сожалению нет времени. Зарплата у учителей… в общем приходится подрабатывать.
Но я сюда еще обязательно вернусь!
Хорошая статья. С вами мы уже немного копий поломали и… о-да!


О- да! Рад нашей новой встрече! Спасибо! Рад, что статья Вам понравилась. Конечно же полного согласия быть не может, иначе не о чем было бы писать и нечего было бы обсуждать.

Мне кажется, взгляд не такой уж и «мета».

Если чисто формально, то я давно не преподаю.

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


Именно. Но ИМХО какие цели поставить — таким образование и будет.
Небольшой мысленный эксперимент. Дано: университет, например, МГУ. Там ряд факультетов: химический, физический, биологический, исторический, филологический. На каждом проходят специальные предметы. Попробуем представить себе, что все факультеты объединили и все студенты проходят все предметы всех факультетов. Зубрилы сойдут с ума от перегрузки, а лодыри не пострадают. Школа — это такой объединенный университет. Чтобы зубрилы выжили, их нужно разгрузить, т.е. каждого предмета давать на порядки меньше, чем дают на любом факультете МГУ.

Но я сюда еще обязательно вернусь!

Обязательно возвращайтесь. Вы — практик, за Вами последнее слово.

Вроде первое сентября уже давно прошло, а разговоры не утихают.

Очень не согласен с общим взглядом автора на происходящее и на возможные решения проблемы.

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

Но если это так, то дальнейшие средства выглядят решительно странно. Во-первых, откуда здесь вообще математика и математическая подготовка? Да, математика нужна в решении задач вычислительной геометрии или решения уравнений, но точно так же биология нужна для решения задач computational biology. Мне при всём желании сложно вспомнить универсальные алгоритмы из классического списка, для понимания которых требуется хоть какая-то математика (не берём вопрос анализа сложности, это отдельная тема).

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

Решение задач Прима-Краскала или поиск корней уравнения на уроке информатики — это ещё одна математика под другим соусом. Такая деятельность, во-первых, скучна абсолютному большинству, а во-вторых, очень слабо отражает реальные задачи повседневного программирования. Если уж рассказывать о программировании, то брать хотя бы занятные задачи, в которых, тем не менее, есть алгоритмы.

Например, почему бы не предложить нарисовать на экране шарик, который летает по прямой и отражается от стенок? Это была задача на 10 строк в QuickBasic. Или показать круговое движение: Земля вращается вокруг Солнца. Задание со звёздочкой: Луна ещё и вращается вокруг Земли. Или вот: мы не просто программируем алгоритм Дейкстры, а рисуем на карте как проходит маршрут.

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

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

Короче говоря, я за то, чтобы дети могли легко использовать весь спектр современных возможностей аппаратуры (да посмотрите хотя бы на Scratch), не спотыкались на ровном месте из-за отсутствия в языке той или иной структуры данных и не просидели весь курс в занудных задачах двадцатилетней давности.

Я сам родом из той эпохи, но давайте здраво смотреть на вещи. Я сам в своё время взял труд почитать задачники по программированию 1970-х, когда авторы были вынуждены ограничивать себя ещё сильнее (например, нельзя было рассчитывать, что в языке есть строки). Так вот, это была катастрофическая тоска — решим уравнение методом Ньютона, а теперь давайте попробуем деление пополам, а теперь бонус: метод Гаусса системы решения линейных уравнений! Давайте всё-таки идти в ногу со временем.
дать хоть какие-то самые базовые понятия о профессии программиста
Не только программиста. И в физическом и в химическом ВУЗах будут учить программировать.

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

Мне при всём желании сложно вспомнить универсальные алгоритмы из классического списка, для понимания которых требуется хоть какая-то математика
Нпр., теория графов — математика. Алгоритмы на графах, начиная с балансировки деревьев, разве не требуют некоторых знаний из теории графов? А как быть с приближенными вычислениями? А Булева алгебра это не математика? Про криптографию поминать не буду. Что касается computational biology, насколько знаю, там очень активно применяют кластерный анализ.

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

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

выделять буфер постоянного размера — спасибо, давайте ещё научим детей пить и курить
Не знал, что буфер постоянного размера в несколько десятков байтов выглядит столь безнравственно!

Давайте всё-таки идти в ногу со временем.

Давайте только посмотрим сначала: куда мы придем. Всякие шарики от стенок — это уж тогда не доморощенным путем делать, а через DirectX или, еще лучше, Unity3d. А почему Вы уверены, что все школьники хотят делать игрушки или даже играть в них? Тем более в примитивные игрушки, потому как ничего впечатляющего на уроке в школе не сделать. М.б. лет 30 назад Земля вокруг Солнца впечатляла, но сейчас этим никого не удивить. Только предмет дискредитировать.
А почему не берем? Как раз очень важный момент для оценки алгоритма.

Не берём потому, что для классических алгоритмов это уже сделано (ну т.е. рассказать немного можно, конечно), а для собственных, как правило, уже потребуется математика за пределами школьного курса.

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

Каких, например?

А как быть с приближенными вычислениями? А Булева алгебра это не математика?


Это именно что математические задачи. Вы по сути говорите: «разве в математических задачах не применяется математика?» Ещё бы, применяется, но и задач вне области математики просто вагон и маленькая тележка, не будем о них забывать.

Что касается computational biology, насколько знаю, там очень активно применяют кластерный анализ.

Безусловно. Давайте обсудим, например, KNN и C-means. Математика здесь на уровне, не знаю, пятого класса? Я же не говорю, что всё на свете надо выбросить, математика никуда не денется, но для ученика десятого класса понимание KNN не потребует особенных интеллектуальных усилий, пусть это и проходит по ведомству математики.

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

Разумеется, изобрели: Python, да и не только. Вы лукавите, когда говорите, что в научных публикациях используется Паскаль. Там обычно используют некий псевдокод, который у нас традиционно называют «паскалеобразным», но в действительности его с тем же успехом можно назвать «бейсикообразным» или «питонообразным».

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

Вот это и печально, что не знали. Вы предлагаете учить детей либо обрезать имена по «техническим ограничениям» (которых нет), либо оставлять buffer overflow-уязвимости, хотя это исключительно и только проблема языков типа Паскаль и C.

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

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

Идея идти в сторону Unity и DirectX не лишена логики, но в целом это тупиковая ветвь дискуссии, т.к. вот есть некий непрерывный ряд языков и технологий от машинного кода и ассемблера до Unity и далее, и вы просто берёте в этом ряду произвольную точку и говорите: вот я хочу брать этот уровень абстракции, а влево-вправо не хочу, потому что гладиолус.

Можно сколько угодно дискутировать о том, насколько низкоуровневым должно быть школьное программирование, но считать, что в языке должны быть строки, но не должно быть ассоциативных массивов, например, по-моему, крайне странно, не вижу логики.
Не берём потому, что для классических алгоритмов это уже сделано (ну т.е. рассказать немного можно, конечно)
Не немного, а чем принципиально экспонента в наихудшем случае хуже полинома. Уже хорошо.

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


К примеру, задача как-то классифицировать графы. И мы по-простому будем вычислять сумму степеней вершин (или удвоенную сумму). Берем матрицу смежности и суммируем все единицы. Разве оценка трудности данного алгоритма будет за пределами школьного курса? ;)

Каких, например?

Высота дерева.

Математика здесь на уровне, не знаю, пятого класса?
Кластерный анализ теперь в 5 классе проходят?

оставлять buffer overflow-уязвимости, хотя это исключительно и только проблема языков типа Паскаль и C.
Прежде всего я предлагаю не загружать детей понятием «уязвимость», хотя бы до тех пор пока взрослые не договорятся, что это такое. Особенно забавно звучит «уязвимость учебной программы»! Далее это проблема и Васика, разве нет?

Во-первых, это модель физического явления [...] это чистая физика, угол падения равен углу отражения, критерий столкновения и т.п. Тут масса тонкостей за простейшей обложкой.
Ага. Будем на уроках информатики изучать чистую физику.

К примеру, задача как-то классифицировать графы.

Зачем простому смертному, а тем более, школьнику классифицировать графы?

Высота дерева.

Ну это, конечно, жутко сложное понятие. Балансировка дерева, кстати, тоже на любителя задача.

Кластерный анализ теперь в 5 классе проходят?

Передёргиваете. Я предложил просто изучить KNN и C-Means, это задача на один день, и ничего тут изучать вообще не надо, достаточно знать, что такое евклидово расстояние.

Прежде всего я предлагаю не загружать детей понятием «уязвимость»… Далее это проблема и Васика, разве нет?

Абсолютно не надо загружать детей понятием «уязвимость». Вы просто покажете им, как выделить массив на 100 символов, а потом считать строку. А они просто потом будут это везде повторять. Спасибо за это от нас всех.
У Бейсика (а я про Питон, вообще-то...) такой уязвимости нет: «INPUT S$» считывает строку динамической длины.

Ага. Будем на уроках информатики изучать чистую физику.

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

Да и опять же, вы выбираете удобные цели для спора. Вот приводил же простой пример. Есть куча задач с преобразованием матриц. Транспонирование, поворот, интерполяция и т.п. Всё это можно сделать в виде скучнейших задач на ввод десятков чисел и вывод десятков других чисел, которые ещё надо осмыслить. А можно сказать, что матрица — это просто фотография, и вам надо эту фотографию повернуть/отобразить/увеличить/превратить в чёрно-белую. Это на порядок интереснее (котики же), при этом математическая строгость не страдает совершенно никак. Проблема только в том, что в некоторых языках почему-то считать с диска jpeg в массив и вывести обратно массив на диск трудно, а в других языках это делается в одну строку.
Проблема только в том, что в некоторых языках почему-то считать с диска jpeg в массив и вывести обратно массив на диск трудно, а в других языках это делается в одну строку.
В Дельфи jpg загрузить легко. Но проблема ИМХО в другом: не всякий школьник воспринимает фото котика как матрицу. М.б. лучше пусть поскучает, но поймет, что такое матрица, когда его программа транспонирует матрицу 3х4? Тем более, что котики не всем нравятся.
Зачем простому смертному, а тем более, школьнику классифицировать графы?

Аналогично: Зачем простому смертному, а тем более, школьнику на математике упрощать тригонометрические выражения?
затем решать с её помощью задачи, которые решительно никогда никому на практике не понадобятся.
Большинству школьников и модель идеального газа не понадобится и тригонометрические выражения. А многим (страшно сказать!) и теорема Пифагора никогда-никогда не будет нужна. Но общая естественнонаучная картина сложится: в математике доказываются теоремы, в информатике работают алгоритмы. Только ради этого, школьникам приходится трудится несколько лет, но ничего лучше человечество не смогло придумать за всю свою долгую историю. А почему не модель газа? — Потому, что в большинстве случаев это будет очень развесистый код, сделанный м.б. не самым хорошим учителем. А сортировку пузырьком столь испортить гораздо труднее. Она будет сильно короче. А в слишком длинной программе новичкам за деревьями не увидеть леса. Т.о. лучше 10 коротких программ на 10 алгоритмов, чем одна длинная по этим алгоритмам.
не всякий школьник воспринимает фото котика как матрицу. М.б. лучше пусть поскучает, но поймет, что такое матрица,

Да бросьте: вы собираетесь рассказывать о балансировке дерева школьнику, который не сможет понять, что такое bitmap? Не могу согласиться, что нарисовать рисунок по клеточкам из нулей и единиц — это rocket science.

Зачем простому смертному, а тем более, школьнику на математике упрощать тригонометрические выражения?

Тут вот какая штука. Тригонометрия — это сам по себе предмет. Мы можем обсуждать, нужен он в принципе или не нужен. Если считать, что нужен, то придётся и эту его часть изучать. Информатика же дисциплина более общая, и если стоит цель научиться программировать, то можно это делать на самых разных примерах, не упрощая задачи. Задача балансировки дерева ничуть не сложнее массы других, только смысл её совершенно непонятен нормальному человеку. Соответственно, я просто предлагаю обучаться программированию на понятных повседневных задачах, а не сначала тратить кучу времени на обучение некоторой теме, которая нужна лишь для того, чтобы потом на ней тренировать свои алгоритмические навыки.

тому, что в большинстве случаев это будет очень развесистый код, сделанный м.б. не самым хорошим учителем.

Попробуйте на досуге, уверяю, это 20 строк максимум.

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

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

В этом смысле классические книги вроде того же Вирта гораздо больше к своему времени, чем вы к нашему. Смотрите, просто считать из текстового файла вещественное число и преобразовать его в настоящее число или, скажем, посчитать косинус — это вполне себе сложные задачи (косинус так вообще требует разложения в ряд). Однако Вирт и его современники обычно не грузят читателя этими вещами, справедливо считая, что всё это уже реализовано в стандартных библиотеках любого языка. Так почему же мы не поступаем так же, как они? Если некая функциональность уже доступна везде «из коробки», значит, это и есть наш атомарный кирпичик, из которого мы строим программу. Да, неплохо бы разобраться в устройстве кирпича, но в этом отношении подсчёт косинуса или устройство «кучи» памяти ничуть не менее важны, чем внутренняя организация ассоциативного массива, и тем не менее, первые темы мы игнорируем, а вторые всячески продвигаем.
Ведь простота формулировки и доступность задачи на понятийном уровне не означает простоты алгоритма.


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

Жарков В.А, Самоучитель Жаркова по анимации и мультипликации в Visual C# .NET 2003, М.: Жарков Пресс, 2003, 432 С.

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

Вам привести список скучнейших книг по матану или физике?
Даже для самых интересных тем, конечно, нужен интересный материал.
Речь не о матане — там своя специфика.
Речь о том, что вы приводите в пример скучную книгу и делаете вывод, что она посвящена скучной теме. Некорректно.
Возможно, я нечетко выразился. У меня сложилось впечатление, что тема (точнее подтема) скучная. Это основное, скучный текст к нескучным задачкам я бы простил. А так очевидные (бытовые) задачки решаются очевидным занудным образом.
Да, я понимаю вашу мысль, но не могу согласиться.
Впрочем, тема «скучности» и «занимательности» крайне субъективная, тут у всех свои предпочтения.
Мы же не о худ.литературе говорим (там занимательность другая). Если на многих страницах разбирается объемный рутинный код, каждый фрагмент которого не дает читателю ничего нового, то зачем читать эти многие страницы.
Безусловно. Вы о теме или о конкретной книге? Если о книге, то да, книга плохая, согласен. По теме же можно написать и интереснее. Без объёмного рутинного кода. В каком-нибудь Седжвике, «Алгоритмы на С++» тоже кода хватает. Ну подход у автора такой, что ж сделаешь.
В «Алгоритмах на С++» другая тема — тема классических алгоритмов и некоторых их вариаций. Поэтому и супер-интересно. И там объем кода помогает понять нетривиальную суть, а не вгоняет в тоску.
Ну вот видите, везде вопрос вкуса. Меня как раз Седжвик вгоняет в тоску.
Зачем простому смертному, а тем более, школьнику классифицировать графы?

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

Я предлагаю смоделировать, например, идеальный газ — это то, что дети изучают, не знаю, в девятом классе или в восьмом? Известную концепцию, простую как мячики на бильярдном столе, да ещё и не сталкивающиеся

Но шарики действительно наше все, отличный вариант для старта. Тем более потом можно будет сделать много двигающихся шариков, потом очень много => плавно перейти к квадратичным деревьям например. Потом кому-нибудь захочется работать не только с шариками и прямыми стенами, но и с полигонами, а тут и вычислительная геометрия…

можно сказать, что матрица — это просто фотография, и вам надо эту фотографию повернуть/отобразить/увеличить/превратить в чёрно-белую.

Ну вот я такой фигней дочку на паузу ставлю — ей нравиться как квадратики колеблются-колеблются, и бац! Картинка. Наглядная демонстрация любого алгоритма оптимизации ИМХО (но учебный пример ГА сюда кладутся просто идеально)
Я не про классификацию графа, а о задачах на графах в общем: помоги роботу выбраться из лабиринта — поиск пути, самая такая настоящая задача на графах.

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

Ну алгоритмы Дейкстры, Ли, волновой алгоритм и прочие которые успешно используются для поиска пути — все из теории графов.
Есть другие — типа алгоритм поворота Креша или метод потенциальных полей — способ решить задачу с другого бока (хотя некоторые утверждают что метод потенциальных полей, тот же алгоритм Ли, но я хз). А можно вообще нейросеть присобачить

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

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

Не надо подходить к вопросу формально. Помните, у Мольера господин Журден очень удивился, когда узнал, что разговаривает прозой? Вот и здесь: волновой алгоритм прекрасно объясняется и без того, чтобы ошарашивать учеников тем, что это, оказывается, теория графов.
Не надо подходить к вопросу формально. Помните, у Мольера господин Журден очень удивился, когда узнал, что разговаривает прозой? Вот и здесь: волновой алгоритм прекрасно объясняется и без того, чтобы ошарашивать учеников тем, что это, оказывается, теория графов.

Я хз, они должны знать откуда это и где потом искать больше. Тем более тут просто предлагают просто рассказать все алгоритмы, а дальше как хотите.
А это не оттуда. Алгоритмы обхода лабиринтов описывались много где, хоть в «Занимательных задачах» Перельмана, да и до этого, конечно. Ну то есть, конечно, это задача теории графов, но нельзя сказать, что теория графов её приватизировала.
Ну к слову сказать современный Паскаль, т.е. Дельфи/Лазарус — все необходимое имеет, и работу с простой графикой, и с базами данных, и со строками там все нормально, я даже более того скажу — с паскалевскими строками все куда лучше, чем сишными. В общем все там у Паскаля с этим нормально.

Если же говорить об обучении (откровенно говоря и об разработке тоже) — то Паскаль в этом плане на голову выше всех этих Пухтонов и прочих мусорных JS — строгий синтаксис дисциплинирует и уменьшает вероятность ашипки (а это очень важно в начале обучения! Так шо Си тоже не особо прокатывает, разгребать дампы памяти даже за деньги не очень хочется). Говнокод конечно можно и на Паскале писать, но на Пухтоне говнокод пишется автоматически, если за него садится программист с плохой самодисциплиной (т.е. 99% всех программистов и и 99.9% школьников), собственно хваленные пухтоновские библиотеки состоят из говнокода более чем полностью. Я таки языки называю мусорными — вроде как на них писать легко, приятно и быстро, но все что сложнее пятистрочного скрипта превращает в спагетти. И да, меня всегда умиляло, что на ОО языке — Пухтоне, 99% программ написано в чисто процедурном стиле.

Если же Паскаль не нравится, то есть альтернатива — мейнстримовые энтерпрайз языки: Java и C# — в них в принципе также можно писать как душе угодно, но они все же имеют достаточно строгий и формализованный синтаксис и целую рекомендаций и соглашений. А самое главное эти языки дуракоустойчивые (C# все же более дуракоустойчивый чем Java. все же в последней куда проще несознательно вступить в тот же boxing/unboxing, например). А еще по ним очень много копипасты на всяких стековерфлоу — в общим учится им намного проще и эффективнее.

Так вот, это была катастрофическая тоска — решим уравнение методом Ньютона, а теперь давайте попробуем деление пополам, а теперь бонус: метод Гаусса системы решения линейных уравнений! Давайте всё-таки идти в ногу со временем.

Хз, по мне так это самое главное. Я когда в школе узнал, что есть такой метод Гаусса и компьютер можно начить решать системы уравнений — был счастлив и тут же запил (ну на самом деле не тут же — это было долго и мучительно). Знайте как круто решать домашку, когда компьютер уже посчитал все и выдал ответ. Вообще к 11 классу физику, математику и частично радиолюбительство получилось автоматизировать написанием собственных программок. Вот геометрия оказалась в пролете — она кончилась раньше чем стали появляться вумные мысли в голове, да и вообще компьютерная геометрия адок еще тот. С тех пор у меня и развилась мания всю симулячить на компе, а сейчас уже проще решать обратные задачи и строить всякие регрессии, чем выучивать формулы и законы.

Тем более все эти Ньютоны и наискорейшие спуски — то собственно для чего компы создавались и то что приносит реальную пользу. Задачи оптимизации — это именно то, что позволяет нам летать, разговаривать по телефону и смотреть картинки с котиками. Опять таки тут вопрос правильной демонстрации и она решаема. Другое дело, что всему свое время, ну вот для первого курса: метод Ньютона, касательных и Гаусса ИМХО должен реализовываться каждым студентом, параллельно с высшей математикой.
Паскаль в этом плане на голову выше всех этих Пухтонов и прочих мусорных JS

Вот даже лично Вирт бы с вами не согласился, ибо уже во втором издании своей книги (это примерно 1990-й год, если не ошибаюсь) убрал Паскаль в пользу Modula-2. Это чистая вкусовщина, спорить бессмысленно.

Хз, по мне так это самое главное. Я когда в школе узнал, что есть такой метод Гаусса и компьютер можно начить решать системы уравнений — был счастлив

Я рад за вас, не могу подтвердить личным опытом.

Знайте как круто решать домашку, когда компьютер уже посчитал все и выдал ответ.

А, ну это всё объясняет. Смысл и радость компьютера — это помогать решать другие домашки. Домашки ради домашек.

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


С этим никто не спорит. И тем не менее, это не значит, что данные задачи являются наилучшими с дидактической точки зрения.
Вот даже лично Вирт бы с вами не согласился, ибо уже во втором издании своей книги (это примерно 1990-й год, если не ошибаюсь) убрал Паскаль в пользу Modula-2. Это чистая вкусовщина, спорить бессмысленно.


Но не в пользу Пухтона :-) Он еще кстати жив и можно поинтересоваться у него, что он думает о Пухтоне с JS, например, и больше чем уверен, что ничего хорошего. А Модула-2 просто дальнейшее развитие паскаля: модульность, функции первого порядка, низкоуровневые свистелки и перделки и кучка еще вещей, которых не хватало в Паскале. Но главным и последним языком Вирта, является Все же Оберон. В общем это чисто одна ветка: Паскаль => Модула => Модула-2=>Оберон

А, ну это всё объясняет. Смысл и радость компьютера — это помогать решать другие домашки. Домашки ради домашек.

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

С этим никто не спорит. И тем не менее, это не значит, что данные задачи являются наилучшими с дидактической точки зрения.

Уравнения и системы уравнений приходится решать в любой технической области, и решать ручками даже систему из двух уравнений — крайне унылое занятие, а из штук 10-12 наверное только от безысходности люди решали (я вообще хз как они это делали), а в современных задачках их количество переваливает за сотни. Так что тут вопрос вопрос не хочешь-не хочешь, а придется в любом случае.
И с учебной стороны, что Ньютона, что метода бисекций, что Гаусса — единственный верный выбор, т.к. это самые простейшие и классические методы, еще и представляют 3 разных класса методов сразу и хорошо применимы (в отличии от метода Крамера, например), еще и выполнимы ручками если что пойдет не так. А вот давать студентам сразу какой-нибудь BFGS или GMRES, или там какие-нибудь проекционные методы — то это будет адок, там уже только от вида формул в пояснениях страшно становится, хотя и их в итоге придется учить, т.к. какой-нибудь нолик закрадется — и все, хана Гауссу, но можно и попозже и не всем.

Вот он метод Ньютона (метод касательных), куда уж проще:
double TangentsMethod(function f, function df, double xn, double eps)
{
   double x1  = xn - f(xn)/df(xn);
   double x0 = xn;
   while(abs(x0-x1) > eps) 
   {
      x0 = x1;
      x1 = x1 - f(x1)/df(x1);
   }
   return x1;
}

Для школы такое наверное не пойдет, врядли им нужно искать корни какой-нибудь функции x^3+3x-1->min, хотя хз, на Хабре такими вещами и в более сложном виде тоже не брезгают
Он еще кстати жив и можно поинтересоваться у него, что он думает о Пухтоне

Это неважно. Просто если так любить идеи Вирта, давайте и вправду переходить на Оберон.

Уравнения и системы уравнений приходится решать в любой технической области, и решать ручками даже систему из двух уравнений — крайне унылое занятие,

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

А вот давать студентам сразу какой-нибудь BFGS или GMRES,

Не в этом дело. Я же не против методов Ньютона или Гаусса. Я просто говорю, что всё это задачи из области математики и смежных областей. Можно найти огромное число полезнейших для начинающего программиста задач, которые бы не были бы связаны настолько жёстко с математикой. Мне хотелось бы, чтобы цвели все цветы.
Это неважно. Просто если так любить идеи Вирта, давайте и вправду переходить на Оберон.

Ну мне Оберон и Компонентный Паскаль скажем так нравятся больше чем мейнстримовые Жабы и C# или JS с Пухтоном. Но приходиться все равно идти за большинством и выбирать из 2-х зол меньшее.

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

Нет конечно, я вообще в умножение плохо умею еще со школы :-)

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

Тут главное верно подводить к этому. Ну например, когда я учился на физфаке у нас всегда была триада: лекции, семинары и лабораторные работы по физике, так что в вопросов «где нужна теорема Штейнера и как это выглядит?» не было. Более того — чем старше курс, тем больше практических примеров. При этом математика катастрофически не поспевала за физикой. На старших курсах в эту триаду плавно вплелось программирование — и тут я могу сказать вот что: то программирование которое нам читали погромисты с погромисткого факультета: набор алгоритмов и зубодробильная дискретка — прошло по факту мимо всех, пока к физике на старших курсах не прибавилась вычислительная практика и численные методы. Но даже в универах с грамотной демонстрацией — туго, а в школах с этим вообще ж0па.
Ну мне Оберон и Компонентный Паскаль скажем так нравятся больше чем мейнстримовые Жабы и C# или JS с Пухтоном.

Согласитесь, это ваши личные предпочтения. Имеете полное право. Но всё-таки не отказывайте в здравомыслии людям, которые выросли на Паскале и прочих языках той эпохи, а затем создали свои языки, в которых попытались избавиться от недостатков языков времён своей юности. И в этом смысле для меня Python, при всех его проблемах, огромный шаг вперёд по сравнению с Паскалем. Ограничения и решения Паскаля из нынешнего времени видятся обычной архаикой, а не целенаправленными архитектурными замыслами. Человек, изучающий программирование на Паскале приобретает превратное представление о дизайне языка программирования. Ну это как если бы он обучался архитектуре зданий только на римско-греческих примерах.

Нет конечно, я вообще в умножение плохо умею еще со школы :-)

Именно! Вы не забиваете себе голову алгоритмами умножения и не пишете соответствующий код, а просто берёте калькулятор. Аналогично, в наше время решение системы линейных уравнений осуществляется таким же точно «калькулятором», а не собственной программой.

так что в вопросов «где нужна теорема Штейнера и как это выглядит?» не было

Да, всё так. Почувствуйте разницу: вас целенаправленно обучали на физфаке профессии (физика, вероятно). И все предметы были подчинены этой общей задаче, в том числе и программирование. В школе такой цели нет. Программирование изучают не для физики, не для математики и не для биологии. Программирование изучают для программирования, поэтому я так и ратую за то, чтобы задачи были как можно менее специальными. Чем ближе к быту, тем лучше. В конце концов, в задачниках по математике тоже обычно решают что-то «из жизни»: узнать цену, расстояние, скорость, количество, а не что-нибудь такое из медицины или технарства.
Мне кажется, есть ещё одна проблема школьного образования. Не помню, то ли в 3-м, то ли в 5-м классе проходили, как происходил переход от геоцентрической к гелиоцентрической системе мира. Всё, что тогда запомнилось, кроме названия, что гелиоцентрическую систему придумал Николай Коперник, и за это почему-то сожгли Джордано Бруно и судили Галлилея. Что вынесет школьник из этой истории? Что наши таки победили, а если против тебя ополчился весь мир — значит ты просто сделал открытие, к которому все ещё не готовы. Про то, как гелиоцентрическая модель была открыта, что у неё на первых порах были сложности не только с церковью и властями, но и с обоснованием некоторых природных явлений, и главное — что когда была построена достаточно точная гелиоцентрическая модель Солнечной системы, на основе неё были Ньютоном были открыты законы механики я узнал значительно позже. Школа должна объяснять, что научные открытия не происходят вдруг из-за того, что на тебя упало яблоко, и любой самый гениальный гений не смог бы открыть закон всемирного тяготения, пока общепринято существование небесных сфер и эпициклов.

Категорически поддерживаю!
А ещё Джордано Бруно из списка нужно исключить за плагиат.
Вместо него вписать Николая Кузанского, который абсолютно в духе античной мысли предположил единство минерального царства всей вселенной (писал он, конечно, в других терминах). А из оного предположения закономерно следует множественность миров.

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

А потом мы удивляемся откуда столько людей которые сдачу в магазине правильно посчитать не могут и не различают дизель и бензин.
На то школа и является Общеобразовательной чтобы дать общие понятия во всех необходимых областях знаний, а для профильного образования есть университет.
К школе, как по мне, сейчас можно предъявить другие претензии: не эффективные методы обучения, устаревшие знания в некоторых областях.
Орерон-07 это конечно хорошо, но желательно чтобы ЯП был ещё и функциональным. Вот скажите многие ли из вас стали серьезно кодить на Делфи? Поэтому, думаю для изучения отлично подошёл бы Питон. Прост, несложный синтаксис и главное применим в реальной жизни.
Вот скажите многие ли из вас стали серьезно кодить на Делфи?

Я и сейчас пишу на Дельфи-7: вот, вот и вот :))
Ожидал увидеть ссылки на гитхаб, но увидел ссылку на статью со ссылкой на форум где просто прикреплены исходники. Считаю что ваш подход к программированию устарел.
Использование Дельфи-7 обусловлено повторным использованием кода, технология гитхаб в данных случаях мне не нужна.
</