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


(Г. и А. Огородниковы)

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

Прежде всего повторюсь, указывая на общеизвестные факты, что обучение детей со времен пещерных людей является обязательным всеобщим, даже героя Киплинга Маугли учат читать книгу джунглей. Многие мастера и хорошие специалисты в разных областях учатся всю жизнь, но все же для большого количества взрослых обучение не считается обязательным настолько, насколько оно считается обязательным для ребенка. В этом плане, не преуменьшая роль самообучения, все же приходится признать, что традиционно у всех народов основной упор делается на обучение, причем на жесткое модальное обучение типа «делай так». Так в основном учат и воспитывают родители, воспитатели и школьные учителя: «мой руки перед едой», «не грызи ногти», «не держи ложку в кулаке», «паяльник надо держать как карандаш», «не откладывай на завтра то, что можешь сделать сегодня», «на токарном станке нельзя работать в галстуке – может намотать и удушить», «ты не должен поступать с другими так, как не хотел бы, чтобы они поступали с тобой» и т.д. При этом обоснование необязательно. Действительно, можно попытаться разъяснить ребенку, почему нужно мыть руки перед едой, но значительно труднее объяснить, почему нельзя держать ложку в кулаке – ведь ему так удобнее ее держать. Каждый школьник поймет, что движущиеся части станка могут намотать галстук, но найдутся спорщики, которые будут говорить, что галстук может быть коротким, что длинный можно заколоть булавкой и т.д. Стандартная линия поведения учителей и инструкторов – уходить от таких споров: «таковы требования техники безопасности и они не обсуждаются».

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

Отметим, что:

В развитых странах среднее образование, начиная с XX века, является обязательным и всеобщим.(Википедия)

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

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

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

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

Конечно, каждый случай особый и общего рецепта быть не может, однако учителю стоит сильно опасаться девальвации наказаний. Если ученик раз за разом получает двойки и только двойки – он может привыкнуть, притерпеться и для него это перестанет быть наказанием. В ВУЗе ситуация иная: есть система пересдач и, в крайнем случае, отчисления. Поэтому в ВУЗе высокие требования являются более достижимыми. В школе же ИМХО минимальной оценкой, кроме исключительных случаев откровенного саботажа, должна быть тройка. То есть нужно ставить такие основные задачи, с которыми удовлетворительно (т.е. на 3) справятся все. Но кроме основных задач для всех, обязательно нужны дополнительные для успевающих, иначе некоторым из них станет скучно и они перестанут успевать. Понятно, что за успешное (и даже частично-успешное) решение более трудных задач и оценка должна быть выше. Для увлеченных предметом нужны факультативы, за длительное активное участие в которых выставляется только отличная оценка. На практике никого из учителей не приходится убеждать не ставить слишком много двоек – никому не позволят сделать постоянными двоечниками почти половину класса. Просто некоторым учителям стоит осознать двойку, как исключительную и не слишком частую меру и соответственно пользоваться ею осознанно, а не эмоционально. Для этого нужно понять, что при всем желании школа, даже специальная с углубленным изучением, например, информатики, не может дать полных систематических знаний по информатике, т.к. слишком много других предметов, которые не дадут заинтересованным школьникам сфокусироваться только на информатике. В том числе, этим школа принципиально отличается от ВУЗа, хотя и в вузах обычно бывают второстепенные предметы, но студентам гораздо легче, чем школьникам, правильно распределять свое время. Как было сказано, школа обязана заставить каждого учить все предметы, для чего практикуется практически ежедневный почти тотальный контроль. Студентов так не контролируют – они должны сдавать курсовые, зачеты, экзамены, но не ежедневные домашние задания и т.д.

Смешно выглядит стандартный довод, к которому любят прибегать многие школьные учителя: как же можно допустить, чтобы ученик не знал столь элементарной вещи! – Ну неужели они не понимают, что многим из их учеников за всю жизнь не понадобится теорема Пифагора или знание формулы медного купороса? Если, отучившись в школе, ученик так и не заинтересовался химией и математикой – значит, он выберет себе специальность, где ему это будет не нужно. И в таком случае школа выполнила свою обязанность, обеспечив ему осознанный выбор, несмотря на незнание ряда элементарных вещей этим учеником. Может, конечно, случится, что неожиданно для него в выбранной специальности понадобится химия или математика. Ничего не поделаешь – придется либо менять специальность, либо восполнять пробелы в своем образовании. Школа не виновата в таких пробелах.

Однако, переходя к информатике, нужно отметить важный пробел, в котором виновата школа: в частности, в обсуждениях на Хабре часто высказывается мнение, что многим программистам не надо знать математику. Зачем математика для «клепания» веб-сайтиков или простейших мобильных приложений? – А как человеку без знания математики понять смысл и необходимость современных принципов безопасности для веб-сайтиков… Пойдет по пути наименьшего сопротивления «шифрованием через xor» в полной уверенности, что обеспечил высокую степень защиты. Многие знания применяются неосознанно, поэтому специалисту, получившему добротное вузовское образование, может казаться, что математикой в повседневной работе он не пользуется. Например, при выборе алгоритма по вычислительной сложности. Но если другой «спец» не увидит никакой принципиальной разницы между экспонентой и полиномом, то в результате даже простое приложение может оказаться слишком медленным. Может, конечно, такой «HTML-кодер» и найдет себе экологическую нишу, где проработает многие годы.

Однако увольнение с работы может превратиться для него в личную трагедию. Грубая недооценка роли математики в программировании происходит из-за увлечения в школьной информатике технологиями, например, изучением современного, но не самого простого ЯП. Делают на этом языке красивый GUI, и все довольны. И никто из них не хочет понять, что технологии очень быстро устаревают, им на смену приходят новые и они — не главное. А главное — алгоритмы. Изучение информатики нужно начинать с изучения классических алгоритмов, а язык реализации должен прежде всего отвечать принципу «чем проще – тем лучше», чтобы не отвлекать слишком большое внимание на форму от алгоритмической сути. В принципе изучать алгоритмы можно и без ЯП. В конце концов, Евклид и Эратосфен сформулировали свои великие алгоритмы на естественном языке, не зная искусственных – не было тогда ЯП. Много позже определенную роль сыграл, нпр., и предельно упрощенный Русский алгоритмический язык. Однако сейчас у школ другие возможности, и вряд ли стоит возвращаться к этому ЯП. Но мне кажется, что при возможности лучший выбор будет в пользу языка, который минимально отвлекает школьников от основной цели. Код должен быть максимально нагляден для школьника. К сожалению, на любом языке можно написать путаный код. Полагаю, что и ЯП, и учитель первым делом должны этому препятствовать. В частности, не играть в уменьшение строчек кода. Например, программку для нахождения чисел Фибоначчи на Питоне можно записать следующим образом:

fib = lambda n: fib(n - 1) + fib(n - 2) if n > 2 else 1

Для школьника это ненаглядно, хотя и коротко. Другой недостаток для школы у современных языков типа Питона – недостаток учебников на русском по алгоритмам на этих ЯП. Этих недостатков лишен Паскаль. Как бы его ни критиковали, но этот «устаревший» язык зарекомендовал себя в качестве учебного языка и языка публикаций (в последнем случае сейчас чаще используется Pascal-like псевдокод). Выучить Паскаль для школьного применения гораздо проще и быстрее, чем многие другие языки. А строгости языка дисциплинируют учащихся в стилевом плане. Поняв основы, т.е. основные идеи алгоритмики и реализации, тем, кто захочет дальше учится программированию (в вузах, на курсах, самостоятельно), будет гораздо проще осваивать новые технологии и современные языки. Без этих основ учащийся может не увидеть за деревьями леса. В частности, для углубленного изучения алгоритмов в школе кроме классических книг Н.Вирта, можно посоветовать книгу С.М.Окулов, Программирование в алгоритмах, М.: БИНОМ, 2004. В предисловии автор отмечает, что книга в первую очередь предназначена для учителей и учащихся школ с углубленным изучением информатики. Упор делается на алгоритмику, причем на широко известные классические задачи, а не на выдуманные только для учебных целей.

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

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

Я сам, уже работая (с университетским дипломом в кармане), периодически, как и мои коллеги, занимался (и сейчас занимаюсь) самообразованием. Однако, как правило, всегда была конкретная цель, было понятно, на что обратить особое внимание, а на что не следует тратить особо много времени. Например, недавно для конкретной задачи понадобилась технология CUDA, про которую раньше просто читал, чтобы быть в курсе. Разобрался, освоил, решил свою задачу. Наверно, самое трудное при самообразовании – понять, на что обратить внимание в первую очередь. А если все детали покажутся одинаково важными, то их изучать можно очень долго. При хорошем преподавателе такой проблемы возникать не должно, так как он обращает внимание учеников на действительно важные детали. Немаловажен и соревновательный процесс, которого нет при самообразовании. И как оценить свои успехи? Дать беспристрастную самооценку школьнику или студенту почти невозможно: в зависимости от типа характера либо сильно завысит, либо неоправданно занизит.

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

Также существует мнение, что последние классы школы и ВУЗ можно заменить, устроившись работать программистом. Прежде всего, очень большая вероятность, что не повезет – работа окажется если не рутинной, то и не требующей большого искусства. А не имея опыта и знаний, сразу оценить ситуацию вряд ли возможно. Полученный опыт, скорее всего, окажется мизерным. Сослуживцы, если и будут помогать и подсказывать, то по узкому кругу вопросов, связанных с работой. Таким образом, систематичных знаний не получить. Здесь еще одна чисто молодежная проблема – хочется получить все сразу: и знания, и опыт, и деньги. Но сразу обычно ничего не получается – с небольшим дополнительным возрастом обычно получается постепенно. Сначала нужно получить знания, потом приобрести опыт, а потом и деньги могут появиться. Учитывая все вышесказанное, я бы посоветовал основные систематические знания получать в учебном заведении, и при этом дополнительные знания и опыт разработки начать получать, участвуя в каком-нибудь добровольном проекте с открытым кодом. Никаких денег это не принесет, и хорошо – нет опасений, что к новичку будут претензии: какие претензии могут быть к бесплатному добровольцу? В сетке много таких проектов. Некоторое время назад и я предложил подобный проект. Получил много писем, в которых выражалось желание участвовать. Всем был рад. Но никто так и не стал участвовать – все сразу же замолкали. А ведь для новичка опыт участия хоть в каком проекте очень важен. Возрастает вероятность и за деньги куда-то устроиться. Более того, проект амбициозный на очень востребованную тему ИИ. Сейчас вместе с другими проектами у меня накопилось достаточно интересных выводов по путям развития ИИ и даже по его определению. Думаю обобщить их в статье для arXiv. Далее можно подумать и о публикации в солидном международном журнале. Школьнику и даже студенту было бы престижно стать соавтором такой публикации. Но не хотят – видимо, проблемы молодежи во многом в ней самой, а не только в образовании или в отсутствии возможностей.

Комментарии (244)


  1. eandr_67
    07.11.2017 15:15
    -2

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


    1. third112 Автор
      07.11.2017 15:33

      Я и предлагаю Виртовский классический Pascal, но т.к. м.б. сейчас трудно найти компилятор, то можно Турбо, но без использования ООП. Были хорошие IDE для учебных целей, нпр., Dr Pascal, но сейчас их нет :(


      1. CrazyFizik
        08.11.2017 17:24

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

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

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


        1. third112 Автор
          08.11.2017 17:29

          Виртовский классический Паскаль не поддерживает даже динамических массивов и указателей


          Указатели поддерживает. Динамических массивов нет. А зачем они в школе?


          1. CrazyFizik
            08.11.2017 18:08

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

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


            1. third112 Автор
              08.11.2017 18:14

              Базовые алгоритмы (Евклида, Эратосфена, сортировку и поиск) можно изучить без динамических массивов. Вирт в своих книгах это показал. В школе главное не технологии, а алгоритмы.


              1. CrazyFizik
                08.11.2017 18:34

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

                Эт я как сейчас помню, как меня бесило отсутствие массивов переменной длинны в Turbo Pascal'е


                1. third112 Автор
                  08.11.2017 18:41

                  + в начале уроков 10 на изучение ЯП. А дальше привел хорошую книгу:
                  С.М.Окулов, Программирование в алгоритмах.

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


                  1. Zenitchik
                    08.11.2017 19:06

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

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


                  1. CrazyFizik
                    08.11.2017 19:21

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

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


                    1. third112 Автор
                      08.11.2017 19:38

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


                      1. Zenitchik
                        08.11.2017 22:27

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


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

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


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


                        1. akryukov
                          08.11.2017 22:47

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

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


                          1. CrazyFizik
                            08.11.2017 23:15

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

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

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

                            Так что реально пройтись по всем вехам развития технологии программирования.


                          1. Zenitchik
                            08.11.2017 23:26

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

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


                            1. akryukov
                              08.11.2017 23:40
                              +1

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


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

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


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

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


                              1. Zenitchik
                                09.11.2017 10:38

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

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


                            1. third112 Автор
                              08.11.2017 23:42

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

                              Тогда на каждый пункт еще желательно по одному примеру, который нужно как минимум записать, а как максимум — выполнить задачку, похожую на него, в классе и еще несколько дома.
                              Именно так!


                        1. third112 Автор
                          08.11.2017 23:37

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

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


                          1. CrazyFizik
                            08.11.2017 23:56

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

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

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


                            1. third112 Автор
                              09.11.2017 01:11

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


    1. mayorovp
      07.11.2017 16:07
      +1

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


      1. third112 Автор
        07.11.2017 16:12

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


        1. mayorovp
          07.11.2017 16:18

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


          1. third112 Автор
            07.11.2017 16:21
            -1

            Не. Учителю лишние проблемы…


            1. mayorovp
              07.11.2017 16:24

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


              1. third112 Автор
                07.11.2017 16:28

                Ага. Именно так. Только: Это мы изучать не будем изучать не обязательно, кто хочет — приходит на факультатив. Там будет OOP & GUI.


      1. eandr_67
        07.11.2017 17:33

        Отсутствие той самой самодисциплины мешает. Если что-то есть, этим обязательно будут пользоваться.

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


        1. mayorovp
          07.11.2017 17:36

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


          1. eandr_67
            07.11.2017 20:49

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

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

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

            И т.д.


            1. mayorovp
              07.11.2017 20:55

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

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


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

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


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


              1. eandr_67
                07.11.2017 21:35

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

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

                «базовые знания» — это переменные, ветвления и циклы, а также их применение
                Не согласен. Базовые знания — это основы алгоритмики. А ветвления и циклы (как и язык в целом) — всего лишь инструменты для записи алгоритмов. Умение держать в руках молоток — это ещё не базовые знания.
                Структурное программирование — это вовсе не о ветвлениях и циклах, а об умении их правильно готовить. Можно писать спагетти на Pascal и структурно на Fortran-IV.


                1. third112 Автор
                  07.11.2017 21:47

                  Мне кажется, что мы обо всем договорились: на любом языке можно написать очень плохой код, но в школе главное не язык, а алгоритмика. Когда-то на Fortran-IV писали — на перфокартах (ужас!), но получалось алгоритмику изучать. И сейчас на фортране-4 можно, если учитель захочет лишних никому не нужных сложностей себе и своим ученикам. Но и на фортране можно.


                  1. eandr_67
                    07.11.2017 21:59

                    Так с этими тезисами я никогда и не спорил. А говорю лишь о том, что mayorovp путает цель и инструменты для достижения цели.


                    1. third112 Автор
                      07.11.2017 22:03
                      +1

                      Ok: в школе: цель — алгоритмы, язык -инструмент.


                  1. CrazyFizik
                    08.11.2017 17:40
                    -1

                    На Фортране можно. Полная совместимость всех версий. По крайней мере программы, написанные на Фортране-77 отлично компилятся Фортраном-95 и Фортраном-2008. Других версий увы не проверял.

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


                1. mayorovp
                  08.11.2017 16:06

                  Смотрите:


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

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


            1. third112 Автор
              07.11.2017 20:56
              +1

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


        1. third112 Автор
          07.11.2017 17:40
          +2

          современный компонентный язык, который проще, чем классический Pascal
          Это удивительно. Этому есть доказательство? — Приведите, pls.


          1. eandr_67
            07.11.2017 18:35

            Возьмите официальное описание языка Oberon-07 и сравните его с официальным же описанием Pascal.

            Вирт в каждом следующем языке не только добавляет новые возможности, но и выкидывает всё лишнее. Потому Modula меньше, чем Pascal, а Oberon меньше, чем Modula.


            1. third112 Автор
              07.11.2017 18:42

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


              1. eandr_67
                07.11.2017 19:18

                Вполне себе доказывает — если полное описание языка (с примерами, РБНФ и описанием модуля System) укладывается в 17 страниц.

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

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

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


                1. third112 Автор
                  07.11.2017 19:21

                  Здесь обсуждали ООП в школе.


                  1. eandr_67
                    07.11.2017 20:20

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

                    В том-то и дело, что в Oberon проблем, вызываемых в обучении C++-подобным ООП, не существует.


                    1. third112 Автор
                      07.11.2017 20:35

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


                      1. eandr_67
                        07.11.2017 21:01

                        Придумавший ООП Алан Кей с этими «тремя китами» не согласится.

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


                        1. third112 Автор
                          07.11.2017 21:10
                          +1

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


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


                          1. eandr_67
                            07.11.2017 21:54

                            В Javascript множественного наследования не существует. И если его можно имитировать, так и классы в JS — всего лишь имитация через прототипы.

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

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

                            Это не важно — важно, что получилось.
                            Получилось множество разных схем организации ООП. Тот же JavaScript в схему классов никак не укладывается. И то, что одна из схем популярнее всех прочих, не делает её истиной в последней инстанции.


                            1. third112 Автор
                              07.11.2017 22:01

                              Получилось то, что получилось, но зачем каждому школьнику над этим думать?


                          1. CrazyFizik
                            08.11.2017 17:46

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

                            В любом случае никаких проблем с множественным наследованием (кроме проблемы ромба, которая решаема) — нет.


                            1. third112 Автор
                              08.11.2017 17:54

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


                              1. CrazyFizik
                                08.11.2017 18:19
                                -1

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

                                C#и Java умудряются поддерживать баланс между строгостью и вседозволенностью. за это их и любят. Собственно тот же C# — это и есть Object Pascal испорченный сишным синтаксисом. Java тоже нехилое такое влияние Вирта испытала.


                                1. third112 Автор
                                  08.11.2017 18:27
                                  +1

                                  ООП абсолютно интуитивно-понятная технология программирования
                                  Прежде надо понять, что такое программирование.
                                  из всех этих объектов и собираем готовую программу
                                  Сколько объектов нужно для изучения решета Эратосфена? Один? И метод один? И как в этом случае объяснить школьнику необходимость лишних букАв? И как объяснить, что такое спагетти-код на основе программы в несколько строчек? А больше не нужно для общего образования.


                                  1. CrazyFizik
                                    08.11.2017 19:17
                                    -1

                                    Алгоритм Эратосфена на 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 и Битва Экстрасенсов


                                    1. third112 Автор
                                      08.11.2017 21:11

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


                                    1. akryukov
                                      08.11.2017 21:11

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


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


                                      1. third112 Автор
                                        08.11.2017 21:13

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


                                        1. akryukov
                                          08.11.2017 21:49

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


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


                                          1. third112 Автор
                                            08.11.2017 22:17

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


                                        1. CrazyFizik
                                          08.11.2017 22:29

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

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

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


                                          1. Zenitchik
                                            08.11.2017 22:37

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


                                            1. akryukov
                                              08.11.2017 23:20

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


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


                                            1. third112 Автор
                                              08.11.2017 23:26

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


                                          1. third112 Автор
                                            08.11.2017 23:15

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

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


                                            1. Zenitchik
                                              08.11.2017 23:34

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

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


                                              1. third112 Автор
                                                08.11.2017 23:50

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


                                                1. CrazyFizik
                                                  09.11.2017 00:25

                                                  Ну кстати не совсем.

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

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

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

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


                                                1. Zenitchik
                                                  09.11.2017 10:50

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


                                                  1. third112 Автор
                                                    09.11.2017 12:44

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


                                      1. CrazyFizik
                                        08.11.2017 22:10

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

                                        Т.е. если написать программу решетки Эратосфена, то это как мой самый первый пример: 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, то на выходе получим шаманов и ремесленников, а не инженеров, которые будут каждый раз изобретать велосипед. Это кстати нынче очень актуальная проблема.


                                        1. third112 Автор
                                          08.11.2017 22:26

                                          на выходе получим шаманов и ремесленников, а не инженеров
                                          Школа не делает инженеров. Всё, что сказано выше — очень разумно, но это для подготовки настоящих инженеров, которым, как бедным школьникам, не надо еще писать сочинение про образ Татьяны Лариной :)


                                          1. CrazyFizik
                                            08.11.2017 22:35

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

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

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


                                            1. third112 Автор
                                              08.11.2017 23:10

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

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


                                        1. akryukov
                                          08.11.2017 22:40

                                          Но как известно решеток несколько. Поэтому следующим этапом рассказываем как представить решетку в виде класса: сразу и инкапсуляция и наследование (например от IEnumerable).

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


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

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


                                          1. CrazyFizik
                                            08.11.2017 23:49

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

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

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

                                            Ну да. В общем тут много вариантов. Но вот на тему структур данных, бытует такое мнение, что единственная полезная структура данных — это массив, все остальное производные :-)


                                            1. third112 Автор
                                              09.11.2017 03:11

                                              Но вот на тему структур данных, бытует такое мнение, что единственная полезная структура данных — это массив, все остальное производные
                                              Бинарное дерево по Вирту — не массив, однако оказалось очень полезным, в частности, в Виртовских компиляторах.


                                          1. third112 Автор
                                            09.11.2017 02:59

                                            И действительно сложные алгоритмы совершенно точно не нужно знать всем.
                                            Думаю, что никакие алгоритмы всем (кроме профи) знать не нужно. Нужно понять природу/суть алгоритмов.


                                          1. mayorovp
                                            09.11.2017 09:27

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

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


                                            1. akryukov
                                              09.11.2017 10:28

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


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


                                1. Zenitchik
                                  08.11.2017 18:40
                                  +1

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

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


                                  1. CrazyFizik
                                    08.11.2017 19:38

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

                                    А вот если с нуля или обратно — никаких проблем. Я вот например после беглого знакомства с Turbo Pascal почти сразу спрыгнул в Object Pascal/Delphi по причине отсутствия в TP динамических массивов — и объекты зашли очень быстрой (собственно и в TP я самого начала рекорды начал использовать). А оттуда без особых проблем спрыгивал на C++, C#, Java (Delphi=>C# вообще безболезненная процедура, вот Жаба уже менее дуракоустойчивая)


                                  1. CrazyFizik
                                    08.11.2017 19:44

                                    А вот недавно мне надо было сделать симуляшку с анализом характеристик PID-регулятора… и могу сказать, что ООП вариант я накатал куда быстрее, чем чисто процедурный с векторами и бла-бла-бла.


                                    1. third112 Автор
                                      08.11.2017 21:39

                                      И я недавно это на ООП накатал быстрее, чем без него. Но я давно не школьник, как, думаю, и Вы.


                        1. a-l-e-x
                          08.11.2017 15:06
                          +1

                          А в каких ещё языках, кроме С++, существует множественное наследование?

                          OWL


                1. mayorovp
                  07.11.2017 20:07

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


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


                  1. eandr_67
                    07.11.2017 20:34

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

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

                    Это в Modula был только модуль. А в Oberon — уже полноценное компонентное программирование.


                    1. third112 Автор
                      07.11.2017 21:05
                      +1

                      Речь не про С++. Если сравнивать, то с ОО Pascal. Но зачем ООП всем школьникам?


                      1. eandr_67
                        07.11.2017 22:13

                        ОО в Pascal не существует, а в Delphi-7 — редкостное убожество.

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

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


                        1. third112 Автор
                          07.11.2017 22:24

                          ОО в Pascal не существует

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

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

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

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

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

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


                          1. eandr_67
                            07.11.2017 22:45

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

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

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


                            1. third112 Автор
                              08.11.2017 07:28

                              А, например, списки — монолит уже мешает.


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

                              И где мешает монолит?


                      1. CrazyFizik
                        08.11.2017 17:58

                        За что любят ООП — то что он банально проще.

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

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


                        1. third112 Автор
                          08.11.2017 18:04

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

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


                          1. CrazyFizik
                            08.11.2017 19:34

                            Тем более при изучении базовых алгоритмов (по принципу один алгоритм — одна программа)

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

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

                            Хз. Берем любую практическую задачу и там становится очевидным. Например, школьников можно напрячь написать программу бросания камня под углом с простой анимацией (которую можно реализовать на любой формочке): сразу появляется объект типа Stone, который имеет параметры, как mass, velocity, acceleration, impulse, position а также методы для вычисления их, а также появляется класс World с параметрами spaceBound и gravity, объект Launcher с параметрами angle и force. Ну и стандартно, Main где будет реализован основной цикл и UI для отображения.


                            1. third112 Автор
                              08.11.2017 19:52

                              Будем изобретать велосипед «простой» анимации или м.б. сразу возьмем OpenGL/DirectX? Вот уж действительно бесполезное занятие.


                              1. CrazyFizik
                                08.11.2017 20:32

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

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

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

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

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

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

                                Результат программирования — это программа, которая принимает от пользователя какие-то осмысленные входные данные и выдает такой же осмысленный результат. А алгоритмы, языки программирования и т.д. — это всего лишь инструмент и средство, а не цель. Если ими не уметь правильно пользоваться — то это мусорные знания.


                                1. third112 Автор
                                  08.11.2017 21:19

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


                                  1. akryukov
                                    08.11.2017 21:57

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


                                    1. third112 Автор
                                      08.11.2017 22:36

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


                                      1. Zenitchik
                                        08.11.2017 22:44

                                        В комбинаторике много занимательных задач.

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


                                        1. third112 Автор
                                          08.11.2017 23:03

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


    1. Jamdaze
      08.11.2017 15:52

      Оберон, модула… 2017 год на дворе, что с вами не так??


      1. third112 Автор
        08.11.2017 17:09
        +1

        А еще теорема Пифагора и решето Эратосфена — такое старье, а на дворе 2017 год…


        1. Toshiro
          08.11.2017 22:52

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


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


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


          1. CrazyFizik
            08.11.2017 23:37

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


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

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

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

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

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


            1. Toshiro
              10.11.2017 11:19

              Похоже вы не можете в сарказм…


              1. CrazyFizik
                10.11.2017 15:53

                Не могу :-)


  1. haiflive
    07.11.2017 20:07

    «видимо, проблемы молодежи во многом в ней самой, а не только в образовании или в отсутствии возможностей»

    сколько много вакансий в науке смежной с программированием! Доски объявлений прям так и ломятся от предложений: статистика, аналитика, ИИ, компьютерное зрение, квантовая физика, робототехника, компьютерное моделирование, микроэлектроника, станкостроение, логистика, прогнозирование…
    где все эти вакансии? Где я могу применить свои знания в математике, физике, знании алгоритмов?


    1. third112 Автор
      07.11.2017 20:49

      К примеру, можете сделать программу, которая в Го или даже в шахматы играет лучше существующих, можете внести ясность в проблему P=?NP и т.д. Но хорошо если что-то из этого получится у одного человека из всего населения Земли за 10 лет. А для остальных более мелкие дела. Кто сделал хоть что-то при прочих равных имеет больше шансов получить работу, чем те, что ничего не сделали.


      1. haiflive
        08.11.2017 06:37

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

        вот так и ваша программа на go, ни кому не нужна, и нет смысла тратить время в пустую на разрешение задачи p=np…
        так что нет никаких прочих равных, равенства впринципе нет, хоть делай хоть не делай


        1. third112 Автор
          08.11.2017 07:38

          нет смысла тратить время в пустую на разрешение задачи p=np…
          Молодой ученый Г.Перельман решил близкую по сложности задачу, и ему присудили премию в миллион $$. То что он от нее отказался — его дело.


        1. third112 Автор
          08.11.2017 08:12

          PS Если дома термоядерный реактор, то можно соседям электричество продавать за пол-цены, выручку использовать на расширение своей электросети и на ее охрану :)


        1. dimakarp1996
          08.11.2017 15:05

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


          1. haiflive
            08.11.2017 16:20

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


            1. third112 Автор
              08.11.2017 17:04

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


              1. haiflive
                08.11.2017 20:03

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

                .да и вообще мой первый пост про то, что по мнению автора молодёжь не хочет, молодёжь хочет ещё как, но перспективных вариантов особо нет


                1. third112 Автор
                  08.11.2017 21:31

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

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

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


                  1. haiflive
                    11.11.2017 12:56

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

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

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

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


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


            1. dimakarp1996
              08.11.2017 20:49
              +1

              Что за история с парниками для овощей, вы про компанию «Зеленая ферма»? Так она работает, весной 2018 начнет строительство.


  1. OlegZH
    07.11.2017 22:04

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

    Но!

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

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

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

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

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


    1. third112 Автор
      07.11.2017 22:14

      Приходишь на работу

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

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


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


      1. Fedcomp
        09.11.2017 19:18

        Кормить? роботизированный сборщик урожая.


        1. WRONGWAY4YOU
          10.11.2017 00:46

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


  1. ChePeter
    08.11.2017 15:06

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


    1. third112 Автор
      08.11.2017 15:17

      В технике выделяются: средняя техническая квалификация техник-программист (ранее «программист-лаборант») и высшая техническая квалификация инженер-программист. (Вики)


    1. CrazyFizik
      10.11.2017 15:57

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

      Каменщик со знанием сопромата => потенциальный инженегр или как минимум мастер над другими каменщиками (шо впрочем инженегрская должность), каменщик без знания сопромата — так и останется каменщиком.


  1. worldmind
    08.11.2017 16:07

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


    1. third112 Автор
      08.11.2017 17:50

      каждый должен уметь подготовить проект вещи для изготовления на домашнем 3d-принтере
      У меня нет 3d-принтера :( А 3ds max я пробовал лет 10 назад. Т.о. я не достоин аттестата зрелости?


      1. worldmind
        08.11.2017 18:13

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


        1. third112 Автор
          08.11.2017 18:17

          А вот прежде всего ИМХО стоит определиться с масштабом в подобном списке. Умение печатать вслепую 10 пальцами — мелочь или не мелочь? Важнее это 3d-проекта?


          1. worldmind
            08.11.2017 18:24

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


            1. third112 Автор
              08.11.2017 18:36

              В том числе основы выживания — как в природных условиях
              А здесь в какой мере изучать основы? Уметь развести костер из сухих дров и из мокрых веток — две большие разницы. И переночевать на 40-градусном морозе — большое искусство. Или и тут как с набором?:

              набирает с разумной скорость и молодец


              1. worldmind
                09.11.2017 11:41

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


                1. third112 Автор
                  09.11.2017 12:37

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


      1. vbif
        09.11.2017 11:37

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


        1. worldmind
          09.11.2017 11:42

          Да, формулировку поправлю, не домашний и не принтер, хотя суть та же.


  1. Areso
    08.11.2017 17:12

    Набить руку можно на itv.te-st.ru


  1. Varim
    08.11.2017 17:13

    Что такое "нпр."?


    1. third112 Автор
      08.11.2017 17:17

      нпр.=например


  1. OlegZH
    08.11.2017 18:05
    +2

    Всё-таки, это было бы крайне интересно придумать новый учебник по информатике. Заинтересовать всех! Сделать красиво! Кто, как не хабровчание, смогут это сделать? Можно было бы совместными усилиями сделать. И для собственного удовольствия, и для того, чтобы было кого на работу брать.


    1. third112 Автор
      08.11.2017 18:06

      Отличная идея!


    1. uchitel
      08.11.2017 21:14

      Предлагаю Викиучебник. Но в любом случае, я — ЗА!


      1. akryukov
        08.11.2017 22:11

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


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


        1. uchitel
          09.11.2017 15:12
          +1

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

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

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


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

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


  1. Halaa
    08.11.2017 18:44

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


    1. third112 Автор
      08.11.2017 18:47

      Была 10-и летка — сделали 11-и, м.б. до 15 классов довести? Пусть стихи учат.


    1. CrazyFizik
      08.11.2017 22:48

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

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


      1. third112 Автор
        09.11.2017 00:07

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


        1. CrazyFizik
          09.11.2017 01:06

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

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

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

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

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

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

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

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


          1. third112 Автор
            09.11.2017 01:35

            реально до 17 лет давать абстрактные вещи бесполезно — мозг их просто плохо воспринимает
            Не соглашусь. Примерно в 15 лет мы с моим школьным товарищем увлеклись Достоевским, а потом философией — естественно наиболее немарксичной и наиболее абстрактной: Платон, Кант, Шопенгауэр, Флоренский. Пытались создать свою философскую систему, часами спорили о солипсизме и детерминизме и т.д. Другие мои товарищи в это время начали писать стихи и прозу (очень нереалистичную). Мы учились в физмат школе, но абстракций физики и математики нам казалось мало. С юношеским максимализмом хотели проникнуть в самую суть мироздания. Не лень было! :)


            1. third112 Автор
              09.11.2017 01:54

              PS BTW Льюис Кэрролл, в числе прочих, подметил, что маленькие дети очень любят абстракции и возникающие из них парадоксы. В этом секрет успеха его Алисы. Чего стоит один вопрос Безумного чаепития «Как нарисовать множество?»


              1. CrazyFizik
                09.11.2017 02:26

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


                1. third112 Автор
                  09.11.2017 02:32

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


            1. CrazyFizik
              09.11.2017 02:22

              Ну Платон и Кант — это далеко не самое сложное в философии, Платон так вообще самые начала, вот если бы вы там обсуждали Ильина или Гегель с каким-нибудь Бодийяром (правильно написал?).

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

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

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

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

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


              1. third112 Автор
                09.11.2017 02:54

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

                Пожалуй мой интерес к философии начался сильно раньше, чем я познакомился с книгами Достоевского. В 4 классе прочел «Таинственный незнакомец» Марка Твена.


          1. Myxach
            09.11.2017 09:15

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


            1. CrazyFizik
              10.11.2017 15:50

              Или людей, которые понимаю сложный матан, ну имеет слабые навыки письма?

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

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

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

              В общем IRL такие личности могут попасться только в ПНД. К слову сказать любые навыки атрофируются, если ими не пользоваться


              1. Myxach
                10.11.2017 16:37

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


                1. CrazyFizik
                  10.11.2017 17:21

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


                  1. Myxach
                    10.11.2017 22:31

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


          1. worldmind
            09.11.2017 11:46

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

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


            1. CrazyFizik
              10.11.2017 15:22

              откуда цифры?

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

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

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

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


              1. worldmind
                10.11.2017 20:18

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


                1. CrazyFizik
                  11.11.2017 00:24

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

                  Вы смеётесь что ли? Как это не имеет значение — ребенок уверенно ходить начинает только к 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 лет должны все дети.
                  Он просто более старшие группы затронуть не успел, а вот его последователи — продолжили этим заниматься


          1. Fedcomp
            09.11.2017 19:47

            Т.е. реально до 17 лет давать абстрактные вещи бесполезно — мозг их просто плохо воспринимает

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

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

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

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

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


            1. Myxach
              10.11.2017 06:07

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

              10 лет и это я ещё мало сообразительный, то-есть нормальный возраст понимание этой информации — значительно ниже


            1. CrazyFizik
              10.11.2017 15:30
              -1

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

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

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

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

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

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


              1. Fedcomp
                10.11.2017 18:56

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

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

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

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

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

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


                1. Zenitchik
                  10.11.2017 23:37

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

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


                1. CrazyFizik
                  11.11.2017 00:44

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

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

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

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

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

                  Ну это уровень: отделить содержимое рюкзака от самого рюкзака. Ну да, дети с этим справляются.
                  Смогли в 14 лет применить для сайта теорию массового обслуживания? Провести нагрузочное тестирования, все дела?


  1. uchitel
    08.11.2017 21:05
    +1

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

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

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

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


    1. third112 Автор
      08.11.2017 22:03

      Хорошая статья. С вами мы уже немного копий поломали и… о-да!


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

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

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

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


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

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

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


  1. rg_software
    09.11.2017 00:03

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

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

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

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

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

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

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

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

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

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

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


    1. third112 Автор
      09.11.2017 00:52

      дать хоть какие-то самые базовые понятия о профессии программиста
      Не только программиста. И в физическом и в химическом ВУЗах будут учить программировать.

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

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

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

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

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

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

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


      1. rg_software
        09.11.2017 01:31

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


        1. third112 Автор
          09.11.2017 02:17

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

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


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

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

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

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

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

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


          1. rg_software
            09.11.2017 03:10

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

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

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

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

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

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

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

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

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

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

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


            1. third112 Автор
              09.11.2017 03:42

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

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


              1. rg_software
                09.11.2017 08:04

                не всякий школьник воспринимает фото котика как матрицу. М.б. лучше пусть поскучает, но поймет, что такое матрица,

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

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

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

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

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

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

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

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


                1. third112 Автор
                  11.11.2017 07:40

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


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

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

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


                  1. rg_software
                    11.11.2017 09:34

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

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


                    1. third112 Автор
                      11.11.2017 10:06

                      Речь не о матане — там своя специфика.


            1. CrazyFizik
              09.11.2017 04:45

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

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

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

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

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

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


              1. rg_software
                09.11.2017 08:05

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

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


                1. CrazyFizik
                  10.11.2017 16:18

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

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

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


                  1. rg_software
                    10.11.2017 23:14

                    волновой алгоритм и прочие которые успешно используются для поиска пути — все из теории графов

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


                    1. CrazyFizik
                      11.11.2017 00:48

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

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


                      1. rg_software
                        11.11.2017 09:32

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


    1. CrazyFizik
      09.11.2017 01:44

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

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

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

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

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

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


      1. rg_software
        09.11.2017 01:57

        Паскаль в этом плане на голову выше всех этих Пухтонов и прочих мусорных JS

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

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

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

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

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

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


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


        1. CrazyFizik
          09.11.2017 03:32
          +1

          Вот даже лично Вирт бы с вами не согласился, ибо уже во втором издании своей книги (это примерно 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, хотя хз, на Хабре такими вещами и в более сложном виде тоже не брезгают


          1. rg_software
            09.11.2017 08:08

            Он еще кстати жив и можно поинтересоваться у него, что он думает о Пухтоне

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

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

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

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

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


            1. CrazyFizik
              10.11.2017 15:46

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

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

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

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

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

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


              1. rg_software
                10.11.2017 22:52

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

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

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

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

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

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


  1. vbif
    09.11.2017 11:18
    +1

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


    1. Zenitchik
      09.11.2017 11:39
      -1

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


  1. DeepDash
    09.11.2017 14:09

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

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


    1. third112 Автор
      09.11.2017 14:13

      Вот скажите многие ли из вас стали серьезно кодить на Делфи?

      Я и сейчас пишу на Дельфи-7: вот, вот и вот :))


      1. Fedcomp
        09.11.2017 20:14

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


        1. third112 Автор
          10.11.2017 00:44

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


        1. Idot
          10.11.2017 10:39

          Не нашли к чему придраться, поставили в вину, что не на гите. lol
          Ваш слив засчитан! cool face


          PS Срач про гит там => https://habrahabr.ru/post/341676/


  1. MagisterLudi
    09.11.2017 18:12
    +1

    Слово «вуз» по правилам русского языка пишется с маленькими буквами.


    1. Zenitchik
      09.11.2017 18:15
      -1

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


      1. MagisterLudi
        09.11.2017 18:21

        Спорим на 100 баксов?


        1. MagisterLudi
          09.11.2017 18:45

          0. gramota.ru/spravka/buro/29_413672

          1. ru.wikipedia.org/wiki/Вуз

          2. Сайт: «Институт русского языка им. В. В. Виноградова РАН»
          www.ruslang.ru/agens.php?id=aspirant (поиск по странице слова «вуз»)

          3. Сайт GRAMOTA.RU www.gramota.ru/spravka/rules/?rub=sokr

          4. В основе данного словаря лежит «Русский орфографический словарь», изданный под редакцией О.Е. Ивановой и В.В. Лопатина в 2004 году, – самый полный орфографический словарь русского языка на сегодняшний день.
          orf.textologia.ru/definit/vuz/?q=532&n=18948

          5. Лента ру lenta.ru/search?query=вуз

          6. Кремль? www.kremlin.ru/assignments/9399

          7. www.orfo.ru/tutorial/html/Spel_Capital.htm

          8. Словарь Розенталя www.evartist.narod.ru/text1/24.htm#_top
          (Розенталь Д.Э., Джанджакова Е.В., Кабанова Н.П.
          СПРАВОЧНИК ПО ПРАВОПИСАНИЮ, ПРОИЗНОШЕНИЮ, ЛИТЕРАТУРНОМУ РЕДАКТИРОВАНИЮ М.: ЧеРо, 1999)

          9. Ведомости
          www.vedomosti.ru/search/?s=%E2%F3%E7

          10. Российская Газета? search.rg.ru/wwwsearch/?text=вуз

          11. therules.ru/#q=вуз

          habrahabr.ru/company/edison/blog/315360/#comment_9915070


  1. 97nomad
    09.11.2017 18:54

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


    1. Zenitchik
      10.11.2017 15:12

      Умный человек допедрит до области применения сам. Остальные… остальные.


      1. akryukov
        10.11.2017 19:32

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


  1. uchitel
    09.11.2017 19:49

    В частности, не играть в уменьшение строчек кода. Например, программку для нахождения чисел Фибоначи на Питоне можно записать следующим образом:

    fib = lambda n: fib(n - 1) + fib(n - 2) if n > 2 else 1


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

    Давайте посмотрим на код, вычисляющий числа Фибоначи на Паскале и на Питоне.
    Паскаль:
    var
        a,b,c,i,n: integer;
    begin
        write('n = ');
        readln(n);
     
        a := 0;
        write(a,' ');
        b := 1;
        write(b,' ');
        for i:=3 to n do begin
            write(a+b,' ');
            c := b;
            b := a + b;
            a := c
        end;
     
    readln
    end.
    


    Питон:
    n = int(input('n = '))
    
    a = 0
    print(a, end = ' ')
    b = 1
    print(b, end = ' ')
    for i in range(3, n):
        print(a + b, end = ' ')
        c = b
        b = a + b
        a = c
    

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

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

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

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

    Чем я руководствовался, когда принял решение перейти на обучение Питону и программированию на нем? Можно взглянуть на два листинга выше и догадаться. Во первых оба листинга наглядны. Т. е. здесь я действительно ничего не теряю. Во вторых, мне не нужно после каждой команды ставить "; " — которая кажется чем-то бессмысленным и нет-нет, да забывается. В Питоне тоже можно ставить ";" после каждой команды, но как правило, это совсем не пригождается. Да, "; " вместе с " := " — это дурацкая придирка к Паскалю. Но опять же, если взглянуть на листинги, то видно, что на Питоне приходится меньше печатать (иногда, гораздо меньше), нет необходимости в «begin»-ах и «end»-ах, которые в отсутствии отступов, легко могут запутать. Напоминаю, мы говорим о тех, для кого язык является первым, и, они путаются во всем. Причем, чем больше этого самого «всего», тем больше для них путаницы. На Питоне, вероятность сделать ошибку меньше чем на Паскале.

    Если говорить о работе с файлами, а они нужны как минимум на олимпиадах и чемпионатах по программированию, то на Питоне все опять немногим, но проще. Кстати, на чемпионатах по программированию имеет самое главное решить задачу быстрее всех. Поэтому жалкие секунды, которые на Паскале приходится тратить на объявление переменных и печать «лишних» знаков, с большой долей вероятности могут дать преимущество тому, кому тратить на это время ненужно. Т. е. при равных знаниях, у Питониста есть небольшое преимущество, а если тестирующая система пропускает такие команды, как min, max, sum и прочие, которые Питонист, кстати, в любой момент может подсмотреть во встроенной в сам язык документации о нем же… да сам Питон относительно медленный, но в создании кода, пожалуй самый быстрый. Хоть, подготовка к олимпиадам и чемпионатам не является моим «коньком», но на тот момент я это тоже учитывал.

    Питон хорош для быстрого прототипирования. И для профориентации именно в IT отрасли — это идеально. Почему? Допустим подходит ко мне 10-11классник и говорит, что хочет сделать web-приложение, или управлять роботом с компьютера, или поиграться с нейронными сетями (машинным обучением) или что-нибудь еще в этом роде. Помочь ему в этом с питоном мне намного проще чем с паскалем. Достаточно pip-ом установить нужные библиотеки, импортировать их, вместе полистать документацию к ним и выполнить примеры из нее же. И все. Дальше он сам. Дальше самообразование. И если он способен к самообразованию, то ему не нужен учитель, ему нужен помощник или консультант, что бы КПД от такого самообразования был максимальнее. А как показывает моя практика КПД для школьника-старшеклассника очень даже неплохой.

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


    1. OlegZH
      09.11.2017 21:31

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

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

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

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

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

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


      1. uchitel
        10.11.2017 07:18

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


        Наверное, хорошо знакомый ЯП — это действительно зона комфорта. Например, года 4 назад я сам преподавал на Паскале и как-то заехал в свой университет, навестить знакомых (физиков) и один из них только-только начал преподавать программирование почему-то. Я ему сразу посоветовал сайт Полякова К. Ю. Через какое-то время мы снова встретились и он сказал, что вообще не напрягается с преподаванием, все берет с этого сайта и дает студентам.

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

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

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

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

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


    1. akryukov
      09.11.2017 21:51

      Промахнулся с ответом. Посмотрите этот комментарий, пожалуйста.


    1. third112 Автор
      10.11.2017 03:51

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


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

      на Питоне приходится меньше печатать (иногда, гораздо меньше), нет необходимости в «begin»-ах и «end»-ах, которые в отсутствии отступов, легко могут запутать.


      Не первый пример, когда достоинство на один взгляд, представляется недостатком на другой взгляд. Что происходит если код с отступами переносится на другую бумажную страницу? Если это принтерная распечатка — то можно сообразить, а если это черновик, написанный от руки, то отступ легко потерять. Практика бумажных листингов Си показала мне, что и фигурная скобка не всегда пропечатывается… Поэтому ИМХО «begin-end» надежнее.

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

      {обнуляем исходные координаты:}
      x0 := 0;
      y0 := 0;
      z0 := 0;
      
      {обнуляем конечные координаты:}
      x1 := 0;
      y1 := 0;
      z1 := 0;


      Но для учебника или методички компактная запись м.б. лучше:
      x0 := 0; y0 := 0; z0 :=0; {обнуляем исходные координаты}
      x1 := 0; y1 := 0; z1 :=0; {обнуляем конечные координаты}
      

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

      Что касается присваивания, то его как-то надо отличать от операции равенства. Всякие "+=" и "=+" (как в некоторых ЯП) — источник многих ошибок не только у школьников. Еще хуже групповое присваивание:

      a = b = 0

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


      1. akryukov
        10.11.2017 12:48

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


        x0 := 0;    y0 := 0;    z0 :=0;    {обнуляем исходные координаты}
        x1 := 0;    y1 := 0;    z1 :=0;    {обнуляем конечные координаты}

        Проблема схожести присваивания и оператора сравнения актуальна только поначалу.


        Например в java и в C# вот такой код будет подсвечен как синтаксическая ошибка.


        int a = 3, b = 5;
        if (a = b){ //Отсутствует неявное преобразование int в bool
        
        }

        Вот js точно не заметит скрытой ошибки. C++ и C кажется тоже.


        var x = 3, y = 5;
        if (x = y){
            console.log(x);
        }

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

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


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


        В черновиках (и на доске) всякие знаки препинания выделяю жирным шрифтом. Код всегда подлежит написанию в IDE и запуску.


        Всякие "+=" и "=+" (как в некоторых ЯП) — источник многих ошибок не только у школьников.

        В материалах для обучения лучше вместо x += y; использовать x = x + y;. Это минимальный работоспособный вариант. А сокращенный вариант пускай самостоятельно узнают и пользуются.


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

        Даже в популярных промышленных языках есть такое наследие, которое при работе лучше в настоящее время не использовать. Например те же goto в шарпе. Про них постепенно забывают, но они же есть. Все равно получается "подмножество".
        "Можно но не нужно".


        1. third112 Автор
          10.11.2017 14:43

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

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


          1. akryukov
            10.11.2017 20:10

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

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


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

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


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

            Ну например есть чтение из консоли в Java.
            До версии 8 нужно было вызвать дьявола для считывания целого числа из консоли.
            Вот так:


            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            try {
                int a = Integer.parseInt(br.readLine());
            } catch (IOException e) {
                e.printStackTrace();
            }

            А в версии 8 для тех же целей ввели удобный класс. И тот же самый код оформляется вот так:


            Scanner scanner = new Scanner(System.in);
            int n = scanner.nextInt();

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


            1. third112 Автор
              11.11.2017 05:12

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

              procedure add (val : integer; var tree : link);
              {добавить число val  в дерево tree}
               begin
                   if tree=nil then
                       begin
                         {сделать новую вершину}
                         ...
                       end
                   else
                     if  val < tree^.dat then
                       add (val, tree^.left) {добавить в левое поддерево}
                     else
                       if val > tree^.dat then
                         add (val, tree^.right) {добавить в правое поддерево}
                       else  {  val = tree^.dat  дубликат }
                       .... 
               end;
              


              Ну например есть чтение из консоли в Java.


              Я про lambda в Питоне. Школьник найдет на Хабре решение для чисел Фибоначчи в одну строчку и перепишет. Учитель будет трудно отклонить такое решение — «мы lambda не используем» прозвучит неубедительно. А вот goto отклонить очень просто. В сетке можно все что угодно найти, но решения с goto найти будет не очень просто. Скорее всего это будет халтурный перевод с Фортрана-4.

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


      1. uchitel
        10.11.2017 21:16

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

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

        Есть области, которые по силам аспирантам, но не по силам студентам, то же самое что посильно студентам, непосильно школьникам.

        Фактически, я стараюсь, что бы школьник не просто поступил в ВУЗ, т. е был не просто профориентирован, но еще сориентирован в плане IT-специализации, что бы недостатки самообразования в этой специализации устранялись самой вузовской средой. И я думаю, что любой преподаватель был бы рад студенту, которому не нужно разжевывать, что такое http, линейная алгебра, serial-порт. Коректировать знания и устранять в них пробелы, гораздо легче, чем устранять их полное отсутствие. А преподаватели той специализации, в которой студент еще в еще будучи старшеклассником многое попробовал, могут привлекать их к своей работе, проектам, исследованиям.

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

        У Питона много недостатков. Но посмотрите, чего добились в ИИ ребята из OpenAI и теперь скажите мне почему это сделано на Питоне?


        1. third112 Автор
          11.11.2017 06:40

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

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

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


          1. uchitel
            11.11.2017 08:47

            Ну мы конечно не пишем как требуется в PEP-8, но «import this» — большими буквами висит на стене моего кабинета. Неряшливый код не игнорируется и не поощряется. И думаю, что убедил вас в том, что код на Питоне тоже может быть наглядным.

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

            Я готов серьезно поспорить, что 100 алгоритмов, допустим, из теории графов на Питоне (даже без функций и ООП) будут реализованы гораздо быстрее, чем на Паскале.


            1. third112 Автор
              11.11.2017 09:19

              Я не спорю, что м.б. реализованы быстрее. И не спорю, что код на Питоне тоже может быть наглядным. И добавлю, что и на С++ код может быть наглядным. И книг много написано на тему, как надо и как не надо. Хороший профи напишет приемлемый код на любом из распространенных ЯП (про явно неудачные языки, как и про эзотерические ЯП говорить не будем). А новичок и на хорошем ЯП может написать плохо. И в этом случае чем больше возможностей языка — тем больше возможностей плохо написать. А бывает еще объективно хороший, правильно работающий, но сложный для понимания код. В некоторых случаях у некоторых профи особый шик писать такой код. В отдельных случаях для автора кода это может быть и оправданно: у него, нпр., однотипные задачи и ему проще использовать набор привычных трюков. Однако новичок, случайно скачавший такой код, легко в нем запутается.


              1. rg_software
                11.11.2017 09:39

                чем больше возможностей языка — тем больше возможностей плохо написать.

                Это заблуждение, недостойное тиражирования. С точки зрения языка с массой возможностей попросту любой код на языке с меньшим количеством возможностей — «плохой», потому что его синтаксис хуже определяет семантику.
                Например, есть алгоритм, в котором требуется выполнить некоторое действие для каждого элемента массива. В Паскале/Бейсике и пр. это однозначно будет описываться неточной конструкцией типа «for i = 1 TO N», то есть «пройти элементы от 1 до N», а не «все элементы», и на голову программиста ложится задача отслеживания, что массив действительно состоит только из этих объектов.

                Это плохой код. Да, в этих языках иначе не напишешь, но он всё равно плох, и оттого, что язык не даёт альтернатив, хорошим он не становится.


                1. third112 Автор
                  11.11.2017 09:55

                  В дельфи есть функции Low, High. Т.е. пройти все элементы вектора A будет:

                  for i:=Low(A) to High(A) do ...

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


    1. mayorovp
      10.11.2017 07:06

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

      Во-вторых, переменная c не нужна:

      a, b = b, a+b


  1. akryukov
    09.11.2017 21:48

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


    Условие задачи
    Пoльзoватeль ввoдит два маccива данных. cравнить coдeржимoe двух маccивoв и вывecти рeзультат в видe таблицы в файл. Значeния пeрвoгo маccива — загoлoвки кoлoнoк. Значeния втoрoгo маccива — загoлoвки cтрoк. ecли загoлoвoк кoлoнки coвпадаeт c загoлoвкoм cтрoки, тo в ячeйкe нужнo пocтавить плюc. oткрыть файл cтандартным рeдактoрoм при завeршeнии рабoты прoграммы.
    Исходные данные:
    q a z w s x
    q w e

    Примерный результат
    # q a z w s x
    q +          |
    w       +    |
    e            |
    #------------


    1. uchitel
      10.11.2017 12:59

      Мало свободного времени. Поэтому ваш код на С# перевел в Питон код (почти строчка в строчку) и все. Хотя, тут больше ничего на питоне особо не вымудришь больше

      Реализация на Питоне
      topRaw = input()
      leftRaw = input()
      
      if len(leftRaw)==0 or set(leftRaw)=={' '}:
          print('Данные слева отсутствуют')
          
      if len(topRaw)==0 or set(topRaw)=={' '}:
          print('Данные сверху отсутствуют')
      
      file = open('dest.txt', 'w')
      file.write('# ' + topRaw + '\n')
      
      topRaw = topRaw.split(' ')
      leftRaw = leftRaw.split(' ')
      
      for i in leftRaw:
          file.write(i)
          for j in topRaw:
              if i == j:
                  file.write(' +')
              else:
                  file.write('  ')
          file.write('|\n')
      
      file.write('# ')
      
      for i in range(len(topRaw)):
          file.write('--')
      
      file.close()
      
      import os
      os.system('xdg-open ' + os.getcwd() + '/dest.txt')
      


      1. third112 Автор
        10.11.2017 13:49

        Если брать 7 класс (там мы уже знакомимся с Питоном) то, для них даже печать на клавиатуре — долгое занятие. Причем навыка печати практически нет — много опечаток.
        Это очень странно. А сочинения по литературе они ручкой на бумажке пишут? Или набирают на ПК, чтобы чекером воспользоваться, а потом с экрана переписывают?

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


        1. uchitel
          10.11.2017 19:22

          Для них это тяжело. Даже в ВК они начинают обмениваться (сам в шоке) не текстовыми, а голосовыми сообщениями. На первом занятии 50% постоянно делает опечатки и этот процент падает довольно медленно.

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

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

          Со слепого метода с правильной постановкой рук и нужно начинать знакомство с ПК в школе.

          Сейчас знакомятся во втором классе и тут вообще не до клавиатуры. В понимании такой мелюзги, компьютер создан исключительно для игр. Вообще, 2-4 классы — это отдельная тема, но и здесь считаю, что лучше чем Scratch еще ничего не придумали.


          1. akryukov
            10.11.2017 19:56

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

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


            1. third112 Автор
              11.11.2017 05:57

              Можно соревнования на клавиатурных тренажерах устраивать!


            1. uchitel
              11.11.2017 07:34

              В третьем классе мы делаем этот тренажер сами в Scratch. Если говорить о внедрении, то 5-10 минут 1 раз в неделю на уроке ничего ощутимого не даст. Хотя 5-10 минут урока — это очень много.


              1. third112 Автор
                11.11.2017 08:47
                -1

                Тренажер ничего не даст, если печатать одним пальцем. В вики есть статья «Слепой метод печати» (в англо вики, как часто бывает — более полная статья): начинать надо с начального расположения рук. А затем выполнять упражнения, нпр., напечатать 10 строчек «не не не ...». Главное: каждую клавишу нажимать своим пальцем! Я помню такой самоучитель для пишущих машинок — там было примерно 30 уроков, т.е. на 30 дней. Как учили на курсах не знаю, но гугл дает много ссылок. ИМХО нужно найти упражнения и потом хоть раз в неделю весь год ими и заниматься.


                1. mayorovp
                  11.11.2017 09:03

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


                  1. third112 Автор
                    11.11.2017 09:26

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


          1. third112 Автор
            11.11.2017 05:50

            Для них это тяжело. Даже в ВК они начинают обмениваться (сам в шоке) не текстовыми, а голосовыми сообщениями. На первом занятии 50% постоянно делает опечатки и этот процент падает довольно медленно.


            Это ужасно! Программирование будет нужно не всем, а вот умение быстро без напряжения печатать нужно всем. Даже журналистам :) Читал какой-то роман о школе в США начала 50-х гг. прошлого века. Там у школьников принимали сочинения только в машинописном виде. У многих дома были свои дешевые машинки, для тех, у кого не было, в школе было специальное помещение с пишущими машинками.

            В одной школе, ребята вытащили клавиши из клавиатуры и все их поменяли местами.
            Это знакомо. Когда-то я работал на ЭВМ коллективного пользования, где клавиатуры были стерты от долгого употребления и плохого изначального качества.

            Вообще, 2-4 классы — это отдельная тема
            Ужасно! Во 2 классе еще читать и писать толком не умеют. Лучше потратить их время на внеклассное чтение и разговорный английский, а не на информатику. Начальные знания по географии в масштабе глобуса не помешают, и по астрономии. А то прочитают внеклассно про Америку и про Марс, а где это находится не поймут.


            1. uchitel
              11.11.2017 07:46

              Мне кажется, что это наоборот большой плюс. В 5-6 классе с ними уже можно пробовать, что-нибудь «серьезное». У них во 2-4 классах еще и шахматы есть. Родители сначала против были, они, как и многие, думали, что там их будут пичкать всякой жестью. Но там никакой жести нет. Есть такое хорошее слово — пропедевтика. Вот этой пропедевтикой мы и занимаемся.


              1. third112 Автор
                11.11.2017 08:11

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


                1. uchitel
                  11.11.2017 08:28

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


                  1. third112 Автор
                    11.11.2017 09:31

                    Значит Вашим детям повезло. А в другой школе может не повезти и с шахматистом, и с информатиком…


      1. Tallefer
        10.11.2017 15:30

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


        1. uchitel
          10.11.2017 19:52

          Из комментариев этой дискуссии уже можно наскрести

          В комментариях этой дискуссии я уже подчеркнул кому удобнее — КОНКРЕТНЫМ НОВИЧКАМ И ТЕМ, КТО ИХ СОБИРАЕТСЯ УЧИТЬ

          выше уже ответили про «недостаток» begin-end

          Я просто не успеваю писать комментарии. Поэтому не успел ответить на ответ.

          А оставлять крошки в дискуссии на такую тему… тогда зачем вообще дискутировать?


          1. Tallefer
            10.11.2017 21:48

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


            1. uchitel
              11.11.2017 08:19

              … еще статью написать, что-ли…
              То что Питон приучает к сладкой жизни — это большой минус. Поэтому мы обязательно кодим на C++ для Ардуино и иногда Процессинге, который очень похож на Яву. В этой дискуссии понял, что мне самому не мешало бы подтянуть C# и JS — интерес у школьников к этим языкам иногда бывает.

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

              Это чисто математически более логично S = V*t — чем быстрее мы создаем код, тем больше мы изучим за 1 час занятий. Я как водитель автобуса — который перевозит нелегалов — чем дальше от границы тем лучше. И в этом плане нелегалу и беженцу совершенно не важно, на каком автобусе он едет — лишь бы быстрее. Поначалу они будут мести тротуары мегаполисов, мыть посуду — делать самую грязную работу. Но там хотя бы есть шансы подняться. Потому что там, откуда я их везу, шансов практически нет вообще.


  1. third112 Автор
    10.11.2017 13:49

    Не та ветка