Comments 623
Это уж потом он стал настоящим индустриальный ЯП. Сейчас это ObjectPascal/Delphi, PacalABC и FreePascal/Lazarus
Вот PascalABC.NET ИМХО самое то для обучение. Еще Smalltalk хорошая альтернатива. Хотя в силу современных тенденций — я бы все же обучал на C#
Виртовский классический Паскаль не поддерживает даже динамических массивов и указателей
Указатели поддерживает. Динамических массивов нет. А зачем они в школе?
В противном случае школьникам придется еще и научится предсказывать объемы используемых данных, а работа с полностью статичной памятью несколько более сложное искусство — вон, даже разработчики С и С++ не смогли осилить. уж от школьников тем более ждать этого не стоит.
Эт я как сейчас помню, как меня бесило отсутствие массивов переменной длинны в Turbo Pascal'е
С.М.Окулов, Программирование в алгоритмах.
Модульные программы для одной процедуры? ;)
Модульные программы для одной процедуры?
Нет, оформить файлик с процедурой так, чтобы можно было использовать повторно.
Ну и пару слов про соглашения об именовании сказать.
Учитывая что в школе программирования идет не один год — на выходе школьники должны в итоге выдать комплексную программу, состоящей из более чем одной процедуры. Тогда от программирования в школе будет хоть какой-то толк.
Программа — это не сочинение. Она имеет практический смысл, даже если писалась в учебных целях.
Я не понимаю зачем в школе изучать технологии типа модульного программирования, ООП, GUI, многопоточного программирования и т.д.
Хорошая фраза. Как-то этот демагогический приём называется. Ну да ладно, опустим.
А по сути, если введение в модульное программирование займёт, прости госпади, 15 минут одного урока, и больше к нему возвращаться не придётся, то почему его не дать? Хуже точно не будет.
А по сути, если введение в модульное программирование займёт, прости госпади, 15 минут одного урока, и больше к нему возвращаться не придётся, то почему его не дать? Хуже точно не будет.
А если не 15 минут, а минимум два урока? Один — чтобы рассказать, потом домашнее задание чтобы попробовать и еще один — чтобы ответить на вопросы по домашнему заданию.
Информатика сейчас начинается 5 или 7 класса и длится до 11 класса. Минимальное общее число часов — вроде не менее 105 (я хз сколько точно), но даже когда я учился, у нас информатика с программированием за 350+ часов перевалила за 7-11 классы.
Времени вагон реально. За это время мы с одноклассникам успели накатать скролл-шутер (на Паскале, бладж) и нафигачить целую кучку маленьких программ на Delphi для всяких мелких расчетов (ну я вон нашлепал себе всякие говнопрограммки, для расчета цепей, чтоб ручками не считать) и покататься по школьным олимпиадам по программированию. Хочу сказать, что у многих компы дома появились вообще только после школы, максимум в старших классах (мне повезло, у меня Синклер на котором я игрался в Elite, Commando, Nether Earth, Arkanoid, Laser Squade).
Так что реально пройтись по всем вехам развития технологии программирования.
А если не 15 минут, а минимум два урока? Один — чтобы рассказать, потом домашнее задание чтобы попробовать и еще один — чтобы ответить на вопросы по домашнему заданию.
И Вы туда же?
Закончили работу над алгоритмом: "А теперь мы полученную программу оформим вот так… В таком виде она может быть подключена к другой программе. Такой подход называется модульным".
Далее, на каждом уроке все программы оформляются аналогично, уже без объяснения зачем и почему.
Куда "туда же"?
А теперь мы полученную программу оформим вот так… В таком виде она может быть подключена к другой программе. Такой подход называется модульным
Стоит добавить еще несколько пунктов:
- Вот так нужно оформлять подключение в другой программе и вызов этого модуля.
- Вот так нужно передавать информацию в модуль.
- Вот так нужно обрабатывать ошибки, возникающие в модуле.
- Вот так нужно получать результаты работы модуля.
- Такой подход может быть полезен вот в этом, в этом и в этом случае.
А если мы хотим, чтобы информация не только дошла до сознания слушателей, но и закрепилась в нем?
Тогда на каждый пункт еще желательно по одному примеру, который нужно как минимум записать, а как максимум — выполнить задачку, похожую на него, в классе и еще несколько дома.
Такой подход называется модульнымТолько еще область видимости имен объяснить… и как модули подключать.
Тогда на каждый пункт еще желательно по одному примеру, который нужно как минимум записать, а как максимум — выполнить задачку, похожую на него, в классе и еще несколько дома.Именно так!
А по сути, если введение в модульное программирование займёт, прости госпади, 15 минут одного урока, и больше к нему возвращаться не придётся, то почему его не дать? Хуже точно не будет.Да. Хуже не будет. Кто и запомнит — тот не поймет. ИМХО это тема многих уроков.
Программа — это не сочинение. Она имеет практический смысл, даже если писалась в учебных целях.А разве сочинения не имеют практического смысла? Нпр., обсуждаемая статья? ;)
А разве сочинения не имеют практического смысла? Нпр., обсуждаемая статья? ;)
Вот кстати с сочинениями не надо. Большинство и после школы пишут абсолютный трешак (впрочем, научные и деловые статьи писать все же проще).
А самое главное — вечная школьная драма: сочинения написанные по шаблону получают хорошие оценки, выражение собственного мнения — может жестоко караться, даже если у школьника реальный художественный талант.
Ы общем сочинениями и их критикой в школе туговато. Вот более официальные вещи — типа докладов и рефератов все же проще написать и оценить.
Вероятнее всего, просто отобъете желание у них заниматься/изучать программирование в принципе.
Как по мне, главное в обучении — завладеть вниманием обучающихся. Без этого обучить человека чему-либо практически не возможно.
главное в обучении — завладеть вниманием обучающихся
И тогда их можно научить чему угодно. В том числе и алгоритмам.
Не материал выбирают, чтобы завладеть вниманием, а вниманием завладевают, чтобы дать материал.
Материал же выбирается исходя из задач обучения.
А если серьезно — то нужно быть честным, особенно в школе! Нужно не завлекать, а честно показывать, каких жертв потребуют данные специальности.
К примеру, в начале 1960-х гг. в СССР партия решила, что геологов не хватает. Стали в молодежной среде романтику разводить — красивые песенки по радио давать, типа «геолог — ты ветру и солнцу брат». На геологический, в «керосинку» (нефть) и т.д. народ повалил рекой, а после практики первого курса, когда выяснялось, что геология — это гороховый суп с тушенкой и вермишелью, не комфортные условия в ненаселенке с дикими волками и прочими медведями, мокрыми рюкзаками, комарами и мошкой, народ разбегался.
Популяризацией программирования сейчас не занимается только ленивый. И зарплаты тебе, и гамак, и два монитора.
Раз уж речь зашла про честность, то тогда уж точно не алгоритмы показывать надо, а более приземленное "подключись к базе данных, обработай результат запроса, нарисуй на формочке".
Недавних студентов-программистов к алгоритмам и не пустят. Тех же студентов-геологов привлекали ведь не для анализа грунта, а для копания земли, приготовления пищи и других хозяйственных активностей.
Недавних студентов-программистов к алгоритмам и не пустят.
Но если они не будут знать алгоритмику, их не пустят к алгоритмам никогда.
Первой моделью отечественного спектрофотометра, выпущенного в 1952 году, явился однолучевой нерегистрирующий спектрофотометр СФ-4.
А для приготовления пищи поварих из местных нанимали. Еда — самое важное. Такое студенту никак нельзя доверять!
Что мешает писать на Delphi или PascalABC.Net по старым книгам? Насколько я помню, в том же Delphi 7 надо только расширение файла с .pas
на .dpr
сменить и {$APPTYPE CONSOLE}
добавить.
А что будет если что-то не то нажать? Компьютер поломается что ли?
Но дело ещё и в том, что Oberon — современный компонентный язык, который проще, чем классический Pascal. И который удобнее использовать и для объяснения алгоритмов, и для обучения кодингу.
Вообще-то если рассуждать о школьном образовании — то есть учитель который может пресекать методически нежелательные инициативы. Хотя лично я не помню каких-то ужасных возможностей которые бы подавляли базовые знания.
В Pascal в заголовке подпрограммы явно указывается — передаётся параметр по ссылке, или по значению. В Delphi мы должны постоянно помнить, что некоторые параметры, передаваемые по значению, в действительности передаются по ссылке.
В Pascal мы точно знаем, что делает оператор присваивания. В Delphi мы не можем сказать, что произойдёт при присваивании, пока не изучим код класса — потому как там может быть сеттер, делающий вообще что угодно.
И т.д.
В Delphi мы должны постоянно помнить, что некоторые параметры, передаваемые по значению, в действительности передаются по ссылке.
Есть var, const или out — параметр передается по ссылке, иначе — по значению. Если кажется что-то иное — значит, не разобрались с указателями. Это в языках где нет указателей можно для упрощения придумывать новые термины вроде "pass by share", в Delphi такой необходимости нет.
В Pascal мы точно знаем, что делает оператор присваивания. В Delphi мы не можем сказать, что произойдёт при присваивании, пока не изучим код класса — потому как там может быть сеттер, делающий вообще что угодно.
Сеттер, делающий что угодно, будет грубой архитектурной ошибкой. Сеттер обязан работать подобно присваиванию.
PS и да, "базовые знания" — это переменные, ветвления и циклы, а также их применение (структурное программирование). Зная их, можно разобраться в большинстве языков. Все остальное — это тонкости конкретного языка, которые учить в школе совершенно не обязательно.
Есть var, const или out — параметр передается по ссылке, иначе — по значению.Классы, динамические массивы по факту передаются по ссылке — без var. Потому, что это не записи (массивы), а указатели. Но в Pascal c указателями всегда работаем явно, а в Delphi некоторые указатели выглядят как указатели, а некоторые маскируются под «структурные» переменные.
Сеттер обязан работать подобно присваиванию.Нет, не обязан. Мы можем договориться, что в данном коде будем использовать сеттеры только для присваивания (сделаем вид, что логирования не было, нет и не будет). Но в языке не существует механизмов контроля за тем, что они реально делают.
«базовые знания» — это переменные, ветвления и циклы, а также их применениеНе согласен. Базовые знания — это основы алгоритмики. А ветвления и циклы (как и язык в целом) — всего лишь инструменты для записи алгоритмов. Умение держать в руках молоток — это ещё не базовые знания.
Структурное программирование — это вовсе не о ветвлениях и циклах, а об умении их правильно готовить. Можно писать спагетти на Pascal и структурно на Fortran-IV.
Кстати да. Насчет обучения. Возможно даже тот же Фортран как язык для обучения вполне себе подойдет: прямая связь с математикой + гигантская кодовая база самая большая среди всех существующих ЯП, как следствие влияние Фортрана (банально, например, индексаторы, передаче аргументов по ссылке и т.д.), да и относительно несложный.
Отличный, великолепный способ заставить 99% детей глубоко возненавидеть информатику.
С ГУИ — ещё вернее. Самая ненавистная часть разработки ПО.
Это уже ИМХО от специализации зависит
Пичкать их алгоритмикой это 100% способ привить им глубокую ненависть к предмету.
Предвещая замечания типа «а вот мне наоборот понравилось» сразу говорю что таких как вы «гиканутых» в классе обычно 1-2 человека.
На мой взгляд, постановка вопроса должна быть иной. Вот есть люди, которые по профессии математики. Они утром встают и занимаются весь день математикой. Многие так увлекаются, что забывают пообедать и задерживаются допоздна. Так вот, что их заставляет так себя вести? Видимо, они в этой работе видят какой-то драйв, получают удовольствие.
Ну так надо детям показать, в чём удовольствие от математики, почему люди выбирают её в качестве профессии. Я бы мог согласиться, что надо потерпеть и заниматься порою занудными вещами и т.п., но ведь по факту этот метод всё равно не работает: люди заканчивают школу и забывают всё это напрочь, если работают не по математической специальности. Каждый может легко проверить это утверждение на своих знакомых.
Ну так надо детям показать, в чём удовольствие от математики, почему люди выбирают её в качестве профессии.Чтобы испытать удовольствие, надо хоть немного знать ту самую математику. Кроме того математика нужна не только профессиональным математикам. Школьник без математики не сможет учить физику. И я считаю информатику. К примеру:
if cond1 then
if cond2 then
call1
else
call2
else
call2;
Я думаю, что для школьника важнее знать как стоит преобразовать этот код, чем знать основы ООП или разработку GUI.
Навык преобразования таких выражений во что-нибудь вроде
if cond1 and cond2 then
call1
else
call2;
не требует привлечения сложного математического аппарата. Люди сами начинают так писать, если им вообще рассказать про логические операторы. Если очень хочется обратить внимание, то можно специальный набор заданий сделать.
Вот только подавать ее отдельно неполезно. Не всякий студент, который недавно сдал "дискретную математику", может сформулировать отличие "И" от "ИЛИ".
При этом в булевой алгебре нет никакой привязки к конструкциям ветвления.
Не всякий студент, который недавно сдал «дискретную математику», может сформулировать отличие «И» от «ИЛИ»Ужасно. Гнать такого студента! Он и таблицу умножения до шестью семь — сорок три наверное не знает. Пусть на его место придет более сообразительный.
При этом в булевой алгебре нет никакой привязки к конструкциям ветвления.Привязку даст информатика, пятиклассник, знающий отличие И от ИЛИ, поймет.
Ужасно. Гнать такого студента! Он и таблицу умножения до шестью семь — сорок три наверное не знает. Пусть на его место придет более сообразительный.
Не будьте так категоричны. Такой вопрос я задаю только сильным студентам. Со сворачиванием и разворачиванием условных выражений, а также с другими задачами по программированию эти же студенты отлично справляются. Слабым сразу идет разбор решения задачи.
Дело в мотивации. Для сухой математики она звучит как "сдал и забыл" как раз потому что нет привязки к реальным задачам.
Привязку даст информатика, пятиклассник, знающий отличие И от ИЛИ, поймет.
Зачем в таком случае нужно булеву алгебру как отдельную тему подавать? Тут уже приводили пример про Мольера и разговоры прозой.
— В общем, скажите, из какого класса гимназии вас вытурили за неуспешность? Из шестого?
— Из пятого, — ответил Лоханкин.
— Золотой класс. Значит, до физики Краевича вы не дошли? (Золотой телёнок)
Правда химии в учебнике Краевича была посвящена всего одна глава-прибавление. Все же математика, информатика, физика, химия — разные предметы со своей спецификой, хоть и пересекаются.
Я не категоричен. Просто школьника никто не может выгнать, и он обязан учиться, а студент не обязан, но его можно выгнать. Большинство студентов это понимают (при этом далеко не все из них зубрилы), но бывают отсталые в развитии на уровне школьника. Надеюсь, что большинство студентов сообразит, что сказать про отличие И от ИЛИ. Хотя бывают «рекордсмены», так Арнольд описывает американского студента, который написал 1/2+1/3=(1+1)/(2+3)=2/5.
По линейке СЛАУ и задачи по системному анализу отлично решаются в Excel. Это считается информатикой?
Вот только прикладное применение такой математики заключается в решении каких-то задач бизнеса. Найти оптимальный путь, распределить нагрузку и т.п.
Если проводить аналогию с "передать привязку булевой алгебры на информатику", то получается что надо "передать привязку линейной алгебры к решению бизнес-задач на работодателя"?
В нынешней ситуации если какой-то предмет вызывает вопрос "а зачем он?" и объяснение предполагается в рамках другого предмета, то у студентов получается закономерная реакция "сдать и забыть". А если это не желательный исход, было бы логично объяснять в рамках самого предмета.
Выгнать студента тоже не легко. Уже писали об этом.
Выгнать студента — крайняя мера. Всегда и везде на нее не охотно идут, чаще студент сам осознает, что учится не там, где ему нужно.
Ага, а на математике пичкать детей теоремами это 100% способ привить им глубокую ненависть к предмету?
Да, 100%.
95% процентов школьников никогда в жизни не вспомнят ни одну из этих теорем.
Ваши алгоритмы закончат там-же, рядышком со списком обязательной к прочтению литературы.
1-2 человека.
Ага! 3% как с куста. А то и 6%.
Показательно, что сегодня слово «алгоритм» все чаще и чаще применяется в обиходном языке. При этом даже далекие от информатики лирики применяют его вполне уместно. И почти никто уже не путает алгоритм с логарифмом – значит, слово действительно прижилось в обиходе.
Смотрите:
type
TFoo = record
x,y : integer;
end;
PFoo = ^TFoo;
CFoo = class
public
x,y : integer;
end;
Почему вы считаете, что написав foo: PFoo
вы "работаете с указателем явно", а написав foo: CFoo
— "маскируете указатель под обычную структурную переменную"? Напомню, рассматриваем только заголовок подпрограммы.
Сеттер, делающий что угодно, будет грубой архитектурной ошибкой. Сеттер обязан работать подобно присваиванию.
В дельфях — совершенно необязательно.
В Delphi мы должны постоянно помнить, что некоторые параметры, передаваемые по значению, в действительности передаются по ссылке.
Потому что они в действительности и являются ссылками, ваш кэп.
В Delphi мы не можем сказать, что произойдёт при присваивании, пока не изучим код класса — потому как там может быть сеттер, делающий вообще что угодно.
Используйте только процедурный подход, кто мешает-то.
современный компонентный язык, который проще, чем классический PascalЭто удивительно. Этому есть доказательство? — Приведите, pls.
Вирт в каждом следующем языке не только добавляет новые возможности, но и выкидывает всё лишнее. Потому Modula меньше, чем Pascal, а Oberon меньше, чем Modula.
И Oberon — это совсем не то ООП, что переехало из Simula-67 в С++, а позже превратилось в пандемию. Компоненты (модули) Oberon намного проще и логичнее, чем классы: никаких неявных this и мешанины из кода и данных.
Какие именно «другие технологии»? В том-то и дело, что увеличение мощности языка достигается абсолютно минимальными средствами — без всех этих новомодных рюшечек.
Есть отличный учебник самого Вирта. Ещё попадались книги отечественных авторов, использующие Component Pascal (диалект Oberon для создания больших систем — вот он по сложности примерно равен классическому Pascal). Но специально вопросом кол-ва книг не занимался.
В том-то и дело, что в Oberon проблем, вызываемых в обучении C++-подобным ООП, не существует.
А в каких ещё языках, кроме С++, существует множественное наследование? Большинство модных языков используют интерфейсы — механизм намного более простой и логичный.
В список языков, поддерживающих множественное наследование, входят: Io, Eiffel, C++, Dylan, Python, некоторые реализации классов Javascript (например, dojo.declare), Perl, Curl, Common Lisp (благодаря CLOS), OCaml, Tcl (благодаря Incremental Tcl)[1], а также Object REXX (за счёт использования классов-примесей). (Вики)
Придумавший ООП Алан Кей с этими «тремя китами» не согласится.Это не важно — важно, что получилось.
То, что получилось в Python, полноценным множественным наследованием никак не назовёшь.
Про C++ говорил, с остальными языками не сталкивался, потому мнения не имею.
Это не важно — важно, что получилось.Получилось множество разных схем организации ООП. Тот же JavaScript в схему классов никак не укладывается. И то, что одна из схем популярнее всех прочих, не делает её истиной в последней инстанции.
В любом случае никаких проблем с множественным наследованием (кроме проблемы ромба, которая решаема) — нет.
C#и Java умудряются поддерживать баланс между строгостью и вседозволенностью. за это их и любят. Собственно тот же C# — это и есть Object Pascal испорченный сишным синтаксисом. Java тоже нехилое такое влияние Вирта испытала.
ООП абсолютно интуитивно-понятная технология программированияПрежде надо понять, что такое программирование.
из всех этих объектов и собираем готовую программуСколько объектов нужно для изучения решета Эратосфена? Один? И метод один? И как в этом случае объяснить школьнику необходимость лишних букАв? И как объяснить, что такое спагетти-код на основе программы в несколько строчек? А больше не нужно для общего образования.
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 и Битва Экстрасенсов
Для решета Эратосфена ООП выглядит весьма надуманно. Одного метода тут будет более чем достаточно.
Однако я согласен с вами в другом — нужны навыки анализа и декомпозиции задачи, построения логики программы. "Как из кубиков построить дом?", "Какой дом нам вообще нужен?".
Автор статьи не прав в том, что нужно пичкать школьников алгоритмами. Не усвоятся они.
На самом деле к любому алгоритму можно прийти самостоятельно, если будет необходимость применить его. "Знание алгоритмов" тут всего лишь экономит время на поиск.
Нужны не столько готовые решения, сколько интересные проблемы, подаваемые в посильном порядке. Хотя бы на примере игры.
А как вы определите, что человек понял что такое алгоритм?
Если ориентироваться на следующее определение "Алгоритм это набор инструкций, описывающих порядок действий исполнителя для достижения некоторого результата."
то "понимание" можно оценить например по способности человека написать программу для условного башенного крана для частного случая перестановки ящиков с палубы корабля на площадку в порту.
Если под "пониманием алгоритма" вы имеете в виду "знание классических алгоритмов", то я с вами не согласен. Знание некоторого множества готовых решений проблем значительно менее полезно, чем умение определить проблему и самостоятельно прийти к ее решению. Даже если это решение уже известно.
Это общий инженерный навык. А вот умение работать за токарным станком — это уже частный и сугубо специфический навык. Ну дядя Вася-конструктор и дядя Петя-токарь умеют точить, но разработкой занимается только дядя Вася, и более того — станок с ЧПУ сделает обоих (вот только этот станок не обладает волшебным знанием — ему все равно потребуется оператор).
Знание разных алгоритмов и ЯП — это как знание молотка и киянка — оно полезно, но только вместе с умением их применять
Кстати, да. Неспособность к декомпозиции задачи (выраженной обычным человеческим языком) — главная проблема начинающих программистов.
Бывает такое на каком-нибудь форуме "А как написать ..."
А по ходу обсуждения выясняется, что всё, что нужно для решения задачи топик-стартер знает, каждую часть задачи по отдельности — решил бы, только расчленить задачу — не сумел, поэтому тупил и писал на форум.
И чем ему помочь непонятно.
Я размышлял над обратной проблемой. Когда спрашивающий знает из каких элементов нужно составить решение и (допустим) понимает к чему нужно прийти. А собрать целое из частей не может.
Если человек действительно хочет, то развитию навыка может помочь решение классических геометрических головоломок. Танграм, пентамино, кубик Рубика и т.п. Может быть даже конструкторы наподобие лего. Но я плохо представляю себе как включить их в программу какого-либо образовательного учреждения.
Неспособность к декомпозиции задачи (выраженной обычным человеческим языком) — главная проблема начинающих программистов.Когда-то детей учили решать задачи по арифметике через последовательные вопросы: сколько яблок у Пети? сколько яблок у Саши? Потом сразу стали учить записывать уравнение, обозначая через Х искомое. М.б. первый метод лучше развивал способность к декомпозиции.
Знание разных алгоритмов и ЯП — это как знание молотка и киянка — оно полезно, но только вместе с умением их применять
В статье написал:
Изучение алгоритмов вырабатывает умение последовательно и четко излагать свои мысли, описывать по шагам какое-либо действие. Такое умение не лишнее в любой специальности.
Изучение алгоритмов вырабатывает умение последовательно и четко излагать свои мысли, описывать по шагам какое-либо действие.
Изучение алгоритмики как таковой — да.
Но изучение готовых разработанных кем-то алгоритмов — нет.
Начинается все со счетных палочек и фигурок -то что дети могут пощупать ручками, пересчитать и убедиться.
Затем идут циферки и как ими офигенно отражать число палочек на бумаге, а уж затем правила столбиком (и все равно возвращаются к палочкам) и так далее.
Я собственно недавно смотрел учебники по математике для младших школьников: там все по прежнему идут яблоки и арбузы.
В общем связь с тем что можно пощупать — прямая. В более старших классах начинаются тоже приближенные к IRL задачки: типа поезд выехал из точки А в точку Б или 3.5 землекопа копали яму… и т.д.
Хотя с формальной точки зрения надо начинать с теории множеств, формальной логики, теории групп, топологии пространства, теории чисел и прочий дельта-эпсилон формализм с производными и интегралами. Но даже в универах так не делают (страшно, епты!)… хотя есть люди, которые считают, что это надо в школе проходить, шоб чувак пришел и начал с первого курса изучать всякие гомологии и дифференциальные геометрии, а уж потом можно и арифметикой позаниматься %-)
Сложение столбиком на бумажке — это технология. Она запоминается один раз и используется.
А потом мы встречаемся с людьми, которые не понимают, почему при умножении нужно произведения на разные разряды смещать на клетку относительно друг друга — делают это механически, потому что так научили.
То же самое будет и с "пузырьком", например. Как он устроен — запомнят все, но почему он так устроен — большинство даже не задумается.
По идее все эти «решетки» можно вывести как методы одного статичного класса, но это будет иметь смысл, если есть другие более осмысленные классы (такой вот каламбур).
Т.е. если написать программу решетки Эратосфена, то это как мой самый первый пример: class Program с двумя методами, собственном main, где крутится логика программы и метод самого алгоритма Эратосфена.
Но как известно решеток несколько. Поэтому следующим этапом рассказываем как представить решетку в виде класса: сразу и инкапсуляция и наследование (например от IEnumerable). После этого по аналогии реализуем еще пару классов с другими алгоритмами и делаем программу, которая не просто что-то там считает, а сравнивает несколько алгоритмов. Дополнительно можно отнаследоваться от Эратосфена и изменить реализацию алгоритма (их несколько) — показать более эффективные: т.е. рассказываем о таких вещах как оптимизация, рассказываем что такое вычислительная сложность и наглядно демонстрируем, заодно знакомимся как организовывать иерархию похожих классов с помощью наследования.
Следом мы изучаем другие алгоритмы и расширяем прежнею программу: дабы не плодить сущностей — сводим эти решетки как методы в один статичный класс (а их старые классы ликвидируем), про который забываем и принимаемся за демонстрацию тех же пузырьков… и далее по нарастающей.
В итоге получаем:
1. Изучаем алгоритм Эратосфена
2. Показываем как можно по-другому структурировать программу и модернизируем её
3. Расширяем программу, добавляя аналогичные алгоритмы
4. Изучаем как это все работает, сравниваем, анализируем
5. Рассказываем об оптимизациях и вычислительных сложностях
6. Снов модифицируем программу и добавляем туда новые сущности
…
PROFIT!
Самое главное — наглядно демонстрирует итеративный процесс разработки, с постоянным улучшением и расширением программы. смотрим какие есть техники и попутно демонстрируем другие алгоритмы.
А просто написать программу «алгоритм Эратосфена»… ну я хз, это тупо. Более того, польза от этого алгоритма будет разве что тем кто занимается криптографией. Я вот занимаюсь математическим программирование уже дофигущу лет (смотря как считать, но 10+ уже наберется) и мне эти решетки понадобились всего пару раз — когда привлекали к задачам связанных с кодированием. Часто ли потребуется эта решетка людям, занимающимися более приземленными вещами?
А вот например всевозможные задачи на графах (например, обход графа) — встречаются ну просто постоянно, трудно наверное найти задачи где их нет. Еще конечные автоматы, задачи оптимизации и т.д. и т.д.
Т.е. я бы строил бы курс (вообще я уже такой строил) с целью, например, разработки программы где роботы ходят по клеточкам, потом ищут выход из лабиринта, потом взаимодействует друг с другом и т.д. Это наглядно, это интересно, а самое главное покрывает необходимым минимум алгоритмов, используемых на практике: там будут и деревья, и сортировки, и конечные автоматы, и задачи поиска пути, и оптимизации (например, задача коммирвояджера). Студентам заходит лучше, чем «а сегодня я вам расскажу про ещё одну олимпиадную задачку про паровозики», школьникам думаю тоже.
Есть еще один очень скользкий момент: изучение алгоритмов требует определнной математической подготовки, которая появляется не раньше университета. Поэтомы дети и младшекуры их тупо заучивают и обезъянничают. Если остановится именно на этом — то это будет бестолковое занятие. т.к. между извилинами ничего не отложиться. Поэтому в таких условиях лучше давать материал исходя из практического применения — так хотя бы начнет откладываться понимание куда и как это все добро можно вставить, а следом уже может появится интерес к тому, что бы подтянуть фундаментальные знания.
Автор статьи не прав в том, что нужно пичкать школьников алгоритмами. Не усвоятся они.
Да. Так и есть.
На самом деле к любому алгоритму можно прийти самостоятельно, если будет необходимость применить его.
Смотря к какому. Сортировку — да, а какой-нибудь non-dominated sorting genetic algorithm или TimberWolf 3.2 — это уже будет уровень научной работы, которую уже проделали лет 10-20 тому назад.
«Знание алгоритмов» тут всего лишь экономит время на поиск.
Не только. Это еще и влияет на эффективность полученного решения. Мой самый любимый пример — это то сколькими способами можно крутить матрицы — алгоритмов несколько (разложение Холецкого, LU-разложение, QR, SVD и т.д.), каждый со своим достоинствами и недостатками и лучше их использовать прицельно, т.к. заюзать SVD — это будет тотальный оверхеад в ряде практических задач: уж задач где основная матрица системы квадратная и невырожденная не меньше, чем задач где они прямоугольные и плохообусловленные.
Вон я недавно давал программисту (без опыта математического программирования) задание прикрутить метод иммитации отжига (Simulated Annealing), объяснив откуда и что копипастить (т.е. даже поиск минимизировал). Ну выполнение затянулось на 2 недели (хотя там работы было от силы максимум пара дней) — несколько дней ушло только на поиск ошибки где больше с меньше перепутал. Ну со временем — чаще выполняя такие задачи и почитывая на ходу соответствующую теорию — досадных ошибок станет меньше, такие задачи будут выполняться быстрее и эффективнее.
В общем всегда должна соблюдаться связка практики с теорией:
1. Если напихать максимум теории, то потерпим фейл — единицы смогут сообразить куда и как это можно вставить самостоятельно, у большинства же знания выветрятся — человек имеет особенность забывать то, чем не пользуется.
2. Если заниматься только практикой и учится исключительно на копипасте со StackOverflow, то на выходе получим шаманов и ремесленников, а не инженеров, которые будут каждый раз изобретать велосипед. Это кстати нынче очень актуальная проблема.
на выходе получим шаманов и ремесленников, а не инженеровШкола не делает инженеров. Всё, что сказано выше — очень разумно, но это для подготовки настоящих инженеров, которым, как бедным школьникам, не надо еще писать сочинение про образ Татьяны Лариной :)
Навыки то надо постоянно тренировать и чем раньше начать — тем лучше будет.
В противном случае, тогда встает вопрос, а нафига оно нужно программирование в школах, если нет задачи дать человеку навыки разработки программ? А алгоритмы он один фиг постигнет на дискретной математике той же, например, где их ему будут их подавать правильно и корректно уже… Ну если, конечно, пойдет учиться на погромиста.
дети отлично умудряются самостоятельно собирать радиоприемникиДа. И я в 5 классе сделал детекторный приемник не очень понимая принцип работы колебательного контура. А потом в старших классах на физике увидел, что принцип очень простой, когда формулы понятны.
нафига оно нужно программирование в школахТолько чтобы определиться. А то пойдет в ВУЗ на физику или на химию, а и там программирование. И на экономическом. На литфаке, наверное, нет.
Но как известно решеток несколько. Поэтому следующим этапом рассказываем как представить решетку в виде класса: сразу и инкапсуляция и наследование (например от IEnumerable).
Классы хорошо заходят на геометрических задачках. Прямоугольники, квадраты, круги. Объяснение на всяких алгоритмах с решетами еще не пробовал, но предполагаю, что будет черезчур сложно.
IEnumerable можно на графиках (линейных, квадратичных) функций показывать. Но сначала желательно объяснять отличие списка и множества от массива.
Смотря к какому. Сортировку — да, а какой-нибудь non-dominated sorting genetic algorithm или TimberWolf 3.2 — это уже будет уровень научной работы, которую уже проделали лет 10-20 тому назад.
Даже к таким можно самому дойти. Просто времени уйдет непозволительно много. И действительно сложные алгоритмы совершенно точно не нужно знать всем. Чтобы их применять, нужно научиться понимать решаемую проблему. То есть тренировать навыки анализа и поиска, которые вы упоминали.
Классы хорошо заходят на геометрических задачках. Прямоугольники, квадраты, круги. Объяснение на всяких алгоритмах с решетами еще не пробовал, но предполагаю, что будет черезчур сложно.
Ну обычно да. Еще столы, стулья, доски. Но круги квадраты все же хотелось бы тоже давать не в абстрактном виде, а как-то сразу с точки зрения компьютерной геометрии.
На самом деле ИМХО ООП лучше всего заходит с задачами где надо оперировать реальными сущностями — например, полет снаряда, брошенного под углом к горизонту, робот в лабиринте и т.д…
Другая проблема — не всякое ООП и не в каждой задаче одинаково полезно — это вот очень тонкий момент кстати. Ну там смоделировать работу PID регулятора с какой-то штуковиной — легко, а вот например, моделировать динамику каких то частиц и под каждый атом частицы отводить свой класс — ну ИМХО это никакой компьютер не переварит.
IEnumerable можно на графиках (линейных, квадратичных) функций показывать. Но сначала желательно объяснять отличие списка и множества от массива.
Ну да. В общем тут много вариантов. Но вот на тему структур данных, бытует такое мнение, что единственная полезная структура данных — это массив, все остальное производные :-)
И действительно сложные алгоритмы совершенно точно не нужно знать всем.Думаю, что никакие алгоритмы всем (кроме профи) знать не нужно. Нужно понять природу/суть алгоритмов.
Классы хорошо заходят на геометрических задачках. Прямоугольники, квадраты, круги.
Ха-ха-ха. Кажется, правильное наследование квадрата от прямоугольника до сих пор многими считается великой нерешенной проблемой ООП...
ООП абсолютно интуитивно-понятная технология программирования.
Хрен там плавал. Мне в своё время стоило изрядного труда врубиться, что за зверь такой.
А вот если с нуля или обратно — никаких проблем. Я вот например после беглого знакомства с Turbo Pascal почти сразу спрыгнул в Object Pascal/Delphi по причине отсутствия в TP динамических массивов — и объекты зашли очень быстрой (собственно и в TP я самого начала рекорды начал использовать). А оттуда без особых проблем спрыгивал на C++, C#, Java (Delphi=>C# вообще безболезненная процедура, вот Жаба уже менее дуракоустойчивая)
А в каких ещё языках, кроме С++, существует множественное наследование?
OWL
Как же это "никаких неявных this" когда в одном модуле все идентификаторы видимы по простому имени? Это скорее "всегда неявный this" получается.
И да, модуль не имеет ничего общего с ООП. Эдак можно модуль в любом языке программирования "компонентом" обозвать.
«Не имеет ничего общего» с С++-подобным ООП. Но то, что предлагают C++ и его последователи — всего лишь самая модная из множества моделей ООП. И та мешанина из кода и данных, которую они навязывают, очень плохо совместима с концепцией легко читаемого кода.
Это в Modula был только модуль. А в Oberon — уже полноценное компонентное программирование.
Я никогда и не говорил, что ООП необходимо (учился во времена процедурного структурного программирования). Но в большинстве актуальных языков ООП есть. И в том или ином виде, но сталкиваться с ним придётся. Если не в виде классов, то в виде модулей: хотя бы потому, что классический Pascal предлагает только монолитный код программы (одна из тех ошибок дизайна языка, которые я упомянул в первом комментарии).
И если столкновение неизбежно, то лучше выбрать не тот вариант ООП, который моден, а тот, который будет максимально понятен школьникам.
ОО в Pascal не существует
Существует с момента турбо-5, а микрософт тогда сделал свой, но он оказался не успешен. А был еще Think Pascal на Маке и т.д.
Delphi-7 — редкостное убожество
Извините, но я на этом «убожестве» много лет успешно работаю.
И в том или ином виде, но сталкиваться с ним придётся.Лирикам не придётся.
классический Pascal предлагает только монолитный код программы
Для изучения сортировки пузырьком иного не надо.
Это исключительно моё личное мнение, сформировавшееся после того, как пришлось написал на Delphi-7 программу управления механизмами. Да, создание интерфейса упрощает очень сильно. Но на этом все достоинства и заканчиваются.
Пузырёк — да, большего не надо. А, например, списки — монолит уже мешает.
А, например, списки — монолит уже мешает.
type
list = ^memeber;
member = record
dat : integer;
next: list;
end;
И где мешает монолит?
Это исключительно моё личное мнение, сформировавшееся после того, как пришлось написал на Delphi-7 программу управления механизмами. Да, создание интерфейса упрощает очень сильно. Но на этом все достоинства и заканчиваются.
И в чем же это убожество выражается?
Да, само по себе ООП тупо доступнее для понимания, чем прочие приемы, большинству среднестатистических людей без специального образования. В принципе этому среднестатистическому большинству проще написать более менее вменяемую и читаемую программу, используя объектно-ориентированный подход, чем используя, например ФП, или «старый» процедурный язык, или испльзую ориентированный на данные дизайн и т.д.
Так что ООП школьникам то как раз вкатит, тем более как бы не кочывряжились адепты ООП, но по факту это просто небольшая надстройка над структурным программированием (также как структурное — надстройка над процедурным)
по факту это просто небольшая надстройка над структурным программированиемЕсли можно без надстройки, то зачем надстройка?
Да, само по себе ООП тупо доступнее для понимания, чем прочие приемы, большинству среднестатистических людей без специального образования.Это не очевидно. Тем более при изучении базовых алгоритмов (по принципу один алгоритм — одна программа) нет возможности увидеть достоинства ООП.
Тем более при изучении базовых алгоритмов (по принципу один алгоритм — одна программа)
Это бесполезное занятие — показать 3.5 алгоритма в 4-х отдельных программах. Тупо натаскивание эрудиции, не более.
В итоге у одних знания улетучатся, у других (у кого память получше) будет просто набор несвязанных и бесполезных знаний.
Нужно в первую очередь уделять вниманию следующим навыкам:
1. Декомпозиции задачи
2. Поиска
3. Анализа
4. Построение архитектуры приложения
5. Экспериментирования и сравнения
Это навыки общего вида
Это не очевидно.
Хз. Берем любую практическую задачу и там становится очевидным. Например, школьников можно напрячь написать программу бросания камня под углом с простой анимацией (которую можно реализовать на любой формочке): сразу появляется объект типа Stone, который имеет параметры, как mass, velocity, acceleration, impulse, position а также методы для вычисления их, а также появляется класс World с параметрами spaceBound и gravity, объект Launcher с параметрами angle и force. Ну и стандартно, Main где будет реализован основной цикл и UI для отображения.
А если уж совсем загнаться, то есть замечательные и бесплатные надстройки как XNA, Unity3D или Xenko, по которым даже есть целые курсы адаптированные как раз на студентов/старшеклассников
А так. умные люди из MIT придумали Scratch для обучения. Подтверждаю — младшие школьники на нем очень быстро въезжают и начинают даже что-то пытаться программировать. В это точно лучшая стартовая точка для самых маленьких.
А вообще школьники спокойно и такое делают
Вот уж действительно бесполезное занятие.
Бесполезное занятие рассказывать про сортировку пузырьком, не показав как её можно использовать. Это даже на студентах тяжко прокатывает, а у школьников отличный иммунитет к обучению, упирающему на эрудицию, а не на прикладное применение.
Результат программирования — это программа, которая принимает от пользователя какие-то осмысленные входные данные и выдает такой же осмысленный результат. А алгоритмы, языки программирования и т.д. — это всего лишь инструмент и средство, а не цель. Если ими не уметь правильно пользоваться — то это мусорные знания.
Бесполезное занятие рассказывать про сортировку пузырьком, не показав как её можно использовать.Не понял: что непонятного в том как использовать сортировку? Что тут особо объяснять? Возьмите любую последовательность слов или чисел и отсортируйте по алфавиту или по возрастанию. Что тут непонятного?
Ну, допустим, назначение сортировки в быту еще более менее понятно. Но вы ведь не только ее собираетесь доносить студентам? А что еще?
доносить студентамНе студентам, а школьникам! Студент хочет, чтобы его научили программировать, а большинство школьников считает, что им это не нужно. И большинству действительно не нужно.
А что еще?Что-то такое же понятное на бытовом уровне. Нпр., кратчайшие пути в графе достаточно наглядны. В комбинаторике много занимательных задач.
В комбинаторике много занимательных задач.
Для школьника? Вы серьёзно?
Лол, письменность? Вы чё шумеры штоле? На дворе 2017!!! Поди прогуливали телепатию в школе?)))
Я ни разу не в защиту оберона или модулы, но я например вообще не знаю JAVA. При этом у меня есть знакомый, который вообще не знает Python… И это никогда не мешало нам обсуждать алгоритмы и архитектуры.
Ну восхваляет кто-то фортран в 2017-м, зачем на него агриться если только цель не в умышленном троллинге?))
Лол, письменность? Вы чё шумеры штоле? На дворе 2017!!! Поди прогуливали телепатию в школе?)))
Ну вообще решето Эратосфена — это алгоритм для поиска всех простых чисел. Просты числа — если не в курсе, активно применяют в криптографии, кодировании и т.д. А еще с простыми числами есть ряд нерешенных проблем математики (например первая и вторая проблемы Ландау. проблема Гольдбаха и т.д.).
А теорема Пифагора… Вы как расстояние будите считать в прямоугольных координатах? Все, вся прикладная вычислительная графика и геометрия проходят мимо. Или решать Диофантово уравнение? Епс, да все задачи оптимизации, машинного обучения проходят мимо.
Хотите поновее? Ну в геометрии есть пространство Минковского — конец 19-го века. сумма Минковсокго вон используется в motion planing в робототехнике и играх. Но без теоремы Пифагора и прочих, даже с вазелином туда не пролезете.
Ну восхваляет кто-то фортран в 2017-м
А че его восхвалять? Например вот это написано на Фортране. Вот Фортрановски библиотеки при этом эти библиотеку лезут ну просто везде — практически в любой программе для численного моделирования и расчетов (естественно это не говноподелки на Пухтоне) торчит фортрановский код и библиотеки. Для HPC у Фортрана только одна альтернатива — Си, хотя недавно туда пробилась Julia. Так что, что его славить — его повсеместно используют, благодаря чему можно, например долететь на самолете из Москвы во Владивосток и неубиться…
сколько много вакансий в науке смежной с программированием! Доски объявлений прям так и ломятся от предложений: статистика, аналитика, ИИ, компьютерное зрение, квантовая физика, робототехника, компьютерное моделирование, микроэлектроника, станкостроение, логистика, прогнозирование…
где все эти вакансии? Где я могу применить свои знания в математике, физике, знании алгоритмов?
А что дальше? для строительства полномасштабной электростанции нежны деньги, где их взять молодому учёному? ведь в друзьях у него нету Генри Форда, связей в государстве тоже нет, он было побежал в прессу, что бы рассказать о своём открытии, а там ему сказали извините не формат нашего издания, но вы можете заплатить и мы опубликуем, потом он побежал искать инвесторов, но там ему сказали, я не понимаю этот ваш термоядерный синтез и вкладывать не буду, когда он ещё там окупится… и что теперь? Это открытие никому не нужно? никому не нужна дешёвая и безопасная энергия…
вот так и ваша программа на go, ни кому не нужна, и нет смысла тратить время в пустую на разрешение задачи p=np…
так что нет никаких прочих равных, равенства впринципе нет, хоть делай хоть не делай
нет смысла тратить время в пустую на разрешение задачи p=np…Молодой ученый Г.Перельман решил близкую по сложности задачу, и ему присудили премию в миллион $$. То что он от нее отказался — его дело.
вспомните хотя бы историю с геотермальной энергией и парниками для овощей, бизнес закрыли, парники заморозили, ибо не порядок, как это так на халяву энергию качают и налоги не платят
.да и вообще мой первый пост про то, что по мнению автора молодёжь не хочет, молодёжь хочет ещё как, но перспективных вариантов особо нет
я вам не про пряники на базаре говорю, а про полноценную дорогостоящую технологию, которую что бы создать необходимы вложенияНу, вот. Сначала сказали:
молодой учёный разработал термоядерный реактор у себя домаА теперь оказывается, что ничего он не разработал, т.к. «необходимы вложения». Подменяем условия задачи, чтобы опровергнуть любое решение.
что бы вспахать поле и что-то там вырастить мне нужен комбаин, склады машины и рабочие, а сажать картошку с помощью лопаты и продавать на местном рынке, да ещё и 30к рублей налогов платить государству, так себе занятие…Многие лопатой работают и живут, но некоторые любят говорить, что им нужны условия и даже картошку для собственного пропитания, а не то, что для продажи, вырастить не могут.
молодёжь хочет ещё какНе вижу доказательств этому утверждению. А вижу, что лопатой картошку сажать не хотят.
А теперь оказывается, что ничего он не разработал, т.к. «необходимы вложения». Подменяем условия задачи, чтобы опровергнуть любое решение.
гипотетическая — основанный на гипотезе, на предположении; предположительный, предполагаемый;
По вашему молодой учёный, это робот без потребностей, способный силой мысли (читай «без оборудования и адронного коллайдера») создать теорию всего? Вроде бы наука у нас продвигается эмпирическим путём, сначала теория, потом практика, на которую нужны ресурсы.
Не вижу доказательств этому утверждению. А вижу, что лопатой картошку сажать не хотят.
в первом посте я саркастически, попросил указать хотя бы пару вакансий из целого списка важных научный направлений, где я мог бы с удовольствием использовать свои накопленные знания, которые на сей момент считаю бесполезными… так что начните со списка вакансий, а уже потом осуждайте.
Но!
Можно обратить внимание школьника на то, сколько вокруг нас разных алгоритмов! Везде выполняются какие-то операции. Есть определённые последовательности действий. И что многое можно посчитать!
В этом смысле, вспоминается «Конкретная математика» Дональда Кнута, «Инофрматика» Бауэра и Гооза.
А, вообще, информатика начинается с такой задачи как кодирование, передача информации и системы организации хранения данных. Было бы крайне любопытно создать такой синтетический вводный курс в информатику.
Правда, у любой монеты есть оборотная сторона. Если мы начинаем повышать планку, то как мы сможем её, затем, опустить. Ведь, самое сильное разочарование, которые получает выпускник школы и института, заключается в том, что на практике всё оказывается совершенно другим, чем в теории. Приходишь на работу, а том тебя просят забыть всё, что ты учил раньше, и учиться приходится совершенно новому делу (причем, именно, делу) и учиться совершенно заново.
Если бы можно было бы добиться, хотя бы, совпадения теории с практикой, то… была бы сделана добрая половина дела!
Приходишь на работу
Да. Прежде всего школьнику нужно помочь понять: на какую работу он хочет приходить. Я очень надеюсь, что большинство не захотят приходить на IT-работу, иначе кто нас будет кормить и лечить…
а том тебя просят забыть всё, что ты учил раньше, и учиться приходится совершенно новому делу (причем, именно, делу) и учиться совершенно заново.
Это обычно технологии. А алгоритмы почти не меняются, меняются языки их реализующие.
Каменщик со знаанием сопромата ничем не лучше другого, а архитектор с мозолями совсем не нужен.
Врядли Гауди или Фиораванти сами лично таскали кирпичи и клали их ровнее и краше своих работяг.
Поэтому отделяйте пожалуйста. В СССР программист получался в техникуме и не нужно было ему никакое высшее образование. Высшее образование нужно только для создания нового. Новизна без фундаментального образования получается только у гениев или случайно.
Как у Ньютона «я стоял на плечах гениев» поэтому и видел дальше.
В технике выделяются: средняя техническая квалификация техник-программист (ранее «программист-лаборант») и высшая техническая квалификация инженер-программист. (Вики)
Каменщик со знанием сопромата => потенциальный инженегр или как минимум мастер над другими каменщиками (шо впрочем инженегрская должность), каменщик без знания сопромата — так и останется каменщиком.
А про школу понимание проблемы верное, а вот вывод не тот, да в школе мы не можем научить всем предметам через силу, поэтому в школе нужно давать только те предметы, необходимость которых несомненна — раз школьное образование обязательное, то и изучать там надо только то что обязательно знать, я вот собрал примерный список такого.
каждый должен уметь подготовить проект вещи для изготовления на домашнем 3d-принтереУ меня нет 3d-принтера :( А 3ds max я пробовал лет 10 назад. Т.о. я не достоин аттестата зрелости?
Хотя формулировку в данном случае нужно поменять, раз не всем понятно, что речь о будущем, да и не обязательно ему быть домашним.
Т.е. набирать на клавиатуре нужно уметь не одним пальцем, и логично обучать слепому десятипальцевому, но не факт что надо это проверять на экзамене — набирает с разумной скорость и молодец.
В том числе основы выживания — как в природных условияхА здесь в какой мере изучать основы? Уметь развести костер из сухих дров и из мокрых веток — две большие разницы. И переночевать на 40-градусном морозе — большое искусство. Или и тут как с набором?:
набирает с разумной скорость и молодец
Но данный предмет важен и думаю будет детям весьма интересен, особенно благодаря наличию практики, поэтому есть шанс и про мокрые ветки и про мороз рассказать, хотя в первую очередь для выживания нужно умение ориентироваться.
Наблюдая за всеми этими темами, я прихожу к выводу, что нет единой точки зрения по поводу того, чему именно учить. В первую очередь потому, что у разных преподавателей разная аудитория. То, что подходит школьникам, не подойдет хирургам, меняющим профессию, и наоборот.
Плюс это ресурс для профессионалов и специалистов разработки, а не для учителей школ-СПО-ВУЗ. Поэтому дискуссия регулярно уходит в оффтопик про ООП и фичи ЯП.
Викиучебник наверное стоит просто начать. А там уже видно будет.
И да, меня уже не раз тыкали носом, в то, что я учитель и всему этому тут не место. Однако, есть хаб «Учебный процесс в IT» и нравится вам это или нет, но этот процесс теперь начинается в школах со второго класса. Мне не нравится, то во что этот процесс выливается, и, оказывается, не мне одному. Хабрахабр — это сообщество. Изучите список хабов и вам станет понятно, для кого этот ресурс.
Поэтому дискуссия регулярно уходит в оффтопик про ООП и фичи ЯП.
Для учителя, преподавателя (новичка или нет) достаточно важно, какой язык (языки) программирования использовать в обучении. Какой язык выбрать для обучающихся в качестве самого первого. Даже то, что дискуссия уходит в офтопик про ООП и фичи ЯП, гораздо лучше того, куда уходят подобные дискуссии на других ресурсах.
Викиучебник — это не Word-овский документ, но начинается он именно там. И он начат — это документация и туториал по NumPy. Однако, принять участие в совместном написании учебников я бы хотел. Причем, думаю, что и вы тоже.
Ну т.е. все эти заученные стишки просто растворятся и никогда ни на что не повиляют. Единственный плюс в этом, что задатки все же у всех разные: когда мы бьем по площадям больше вероятность того, что найдем что-то полезное, но переусердствовать здесь не стоит.
Ну т.е. все эти заученные стишки просто растворятся и никогда ни на что не повиляютЯ некоторые неприличные частушки помню, которые слышал только один раз в очень юном возрасте, а многие стихи, которые для школы учил и на уроке их не раз слушал, начисто забыл.
Вообще, как мне объясняли на пальцах — изначально когда человек рождается, у него связей в мозгу ну просто дофига. В дальнейшем дети все впитывают все как губка, вообще максимальная обучаемость у людей до подросткового периода.
Проблема только в том, что в этот период отделы и функции мозга мозга только формируются, например, формирование мелкой моторики завершается только к 9-10 годам. Речь окончательно формируется к 6 годам, а общая моторика к 4. Префронтовая кора (рассудительность) заканчивает свое формирование только к 13-14 годам.
Вот только дело в том, что процесс обучения завязан на положительном подкреплении, а там процесс сложный, но в общем виде так: что лучше и приятнее тренируется, то и продолжает тренироваться и тут очень большое влияние оказывает эмоциональное состояние и получение быстрого и ощутимого эффекта. Поэтому стихи Пушкина вспомнят единицы — а матерные частушки будут знать все. В дальнейшем (всю жизнь) мозг и дальше будет выкидывать все что считает малополезным и закреплять то, что он посчитает нужным: не так уж и много у человека нейронов… а вот у кита дофига и он может позволить себе хранить в памяти рельеф мирового океана. И как раз в подростковом возрасте с 14-15 лет, начинается тотальнейшая перестройка — все лишнее просто убирается, то что получалось лучше всего — наоборот усиливается. В общем начинается процесс специализации, который длится до 17-20 лет (вообще точный период у разных людей разный).
И только после того как специализация из-за прореживания завершится — формируется абстрактное мышление, собственно только к 17-18 годам они учатся полноценно планировать и оценивать риски, оперировать сложными вещами в голове.
И к 20-21 году заканчивается формимидирование высших психических функций.
Т.е. реально до 17 лет давать абстрактные вещи бесполезно — мозг их просто плохо воспринимает, а когда начинается большая чистка — все что плохо понималось выкидывается на свалку. Ну а до 21 года бесполезно давать полностью самостоятельные и очень ответственные задания.
А самое главное — что бы какие-то знания закрепить и не потерять во время большой чистки — необходимо что бы отдача от них была моментальная и ощутимая, т.к. до 17 лет человеки еще не умеют строить далеко идущих прогнозов. Именно поэтому, например, навыки письма и арифметики у всех людей одинаково хорошо закрепляются — ну тупо потому что как сразу им начинают учить, ими тут же начинают пользоваться, просто на бытовом уровне человеку приходится постоянно считать и писать + по другим предметам надо делать тоже самое. А вот с геометрией уже ж0па начинается — слишком много абстракций, которые еще юные котелки плохо переваривают, но посчитать площадь квартиры в итоге все равно сможет каждый (опять таки — это практический навык), но большинство теорем никто и не вспомнит и не сможет доказать (хотя в школе могли доказывать). Тоже с навыками труда и даже с частью физики — т.к. с физикой мы на интуитивном уровне взаимодействуем, но только с частью: ядерную физику никто не вспомнит и даже после универа человек будет свято верить что Эйнштейн всех обманул, а мериканцы не высаживались на Луне. А вот со всякими химиями, биологиями и историями — кому как повезет. Если пол детства провел за пестиками и тычинками, коллекционируя гербарии, то что-то может и останется, но таких мало и естественно большинство не вспомнит сразу (вот прям сразу) после школы что такое эукариоты и прокариоты, а для людей в 40 лет может оказаться настоящим открытием, что вирусные заболевания антибиотиками не лечат, а гомеопатия — обман.
Потом-то, начиная с 20-и летнего возраста, конечно, человек сможет осваивать новые и более сложные знания самостоятельно и восполнять пробелы в знаниях. Проблема вот только в том, что специализация мозга уже давно закончилась и в некоторых областях человек оказывается в пролете. В принципе тут ничего плохого, но хренова бывает тогда, когда человек оказывается в пролете с основными навыками и программирование на самом деле — это вторая грамотность. А хваленая советская и нынешняя постсоветская система образования — мягко говоря положительному подкреплению не способствует + нездоровая атмосфера в учительском корпусе. В итоге в универе народ начинает учится заново.
реально до 17 лет давать абстрактные вещи бесполезно — мозг их просто плохо воспринимаетНе соглашусь. Примерно в 15 лет мы с моим школьным товарищем увлеклись Достоевским, а потом философией — естественно наиболее немарксичной и наиболее абстрактной: Платон, Кант, Шопенгауэр, Флоренский. Пытались создать свою философскую систему, часами спорили о солипсизме и детерминизме и т.д. Другие мои товарищи в это время начали писать стихи и прозу (очень нереалистичную). Мы учились в физмат школе, но абстракций физики и математики нам казалось мало. С юношеским максимализмом хотели проникнуть в самую суть мироздания. Не лень было! :)
И интерес к филосфии вполне себе вписывается в этот возраст, т.к. в мозгу уже активно формируются это самое абстрактное мышление и естественно интересначинает проявляться, он обнаруживает что иногда у него получается прослеживать крутые штуки, которые неочевидны и начинает кагбэ прощупывать, но глубина понимания и успешность небольшие. Полноценно оперировать абстракциям мозг реально учится только к 17 годам — особенно такие эпохи развития мозга хорошо заметны когда ведешь дневники и по всякому документируешь свою деятельность.
Я вот например простенькие диффуры умел считать еще в 11 классе, но только в универе смог въехать в то какая офигенная штука производная и интеграл, и какая у них связь с физикой и природными процессами. Еще и в процессе обучения осознал шо представление о физических законах, да и о программировании тоже — были зачастую неправильными.
Ну и повторюсь — развитие все же несколько индвидуально.
А теперь представьте детей, которые по Коломогоровскому учебнику геометрии изучают в 7-ом классе понятие конгруэнтности. Самое главное, с точки зрения правильной подачи материала этот учебник был составлен очень хорошо, но оказался полным фейлом в качестве школьного. Та же участь постигла учебники по физике старый Кондартьева и новый Громова — физика там была представлена достаточно корректно (и я бы не сказал, что сложно, учебники как учебники), но в итоге и дети, и учителя его не любили, зато старый Мякишев и Буховцев или Перышкина все любят, хотя тот же Перышкин вообще ниачем.
В общем к абстракциям надо приучать постепенно, но как основной тем в обучения — только для вузов.
Пожалуй мой интерес к философии начался сильно раньше, чем я познакомился с книгами Достоевского. В 4 классе прочел «Таинственный незнакомец» Марка Твена.
Или людей, которые понимаю сложный матан, ну имеет слабые навыки письма?
Эти монстры матана в университет поступить смогли? Значит сдавали русский язык, даже те кто идет вне конкурса, должны сдать все экзамены не хуже чем «удовлетворительно». Если сдали, то значит навыки письма достаточные.
Вы не знаете борцов за грамотность, которые не могут 2*2 посчитать?
В магазин они своих помощников отправляют за покупками и верят им на слово?
В общем IRL такие личности могут попасться только в ПНД. К слову сказать любые навыки атрофируются, если ими не пользоваться
Видимо да, так как много раз слышал «я гуманитарий — я не знаю математику», после того как я видел пример банального не умение считать, да согласен это много говорит о моём круге общение… но если вы говорите о одинаковом знание и категорично, то должны брать всех, а не только. О, по поводу удовлетворительно — у меня так, но у меня проблемы с начальной школой даже(если брать русский). Удовлетворительно это Каким-то рандомом смог сдать, а не достаточные навыки
Ну кстати один легкий пример можно увидеть по телевизору — Кличко, который иногда трех слов связать не может — это все результат его боксерской карьеры, где часто приходиться получать по голове.
откуда цифры? По Пиаже насколько помню окончательное формирование ммышления в период с 11 до 15 лет
откуда цифры?
Из книг и статей по нейрофизиологии. Конкретно такие цифры вроде как приводила нейрофизиолог Карла Ханфорд. Но у других будут аналогичные цифры.
По Пиаже насколько помню окончательное формирование мышления в период с 11 до 15 лет
Пиаже умер лет за 10 до, например, появления функционального МРТ. Миелинизация (процесс формирования миелиновых оболочек вокруг отростков нервных клеток ) ассоциативных путей в головном мозгу начнется со 2-го месяца жизни и заканчивается только к 25 годам. Ретикулярная формация завершает свое формирование в 18 лет — а она не только контролирует рефлекторную деятельность спинного мозга, но и влияет на обучение, например.
И Пиаже утверждал что в период с 11 до 15 лет ребенок только формирует умение оперировать гипотезами — это еще не абстрактное мышление, только зачатки. К слову сказать это его последняя работа, было бы у него больше времени — вывел бы больше периодов развития.
Мы ведём речь о способностях в решении определённых задач, ни МРТ, ни формирование каких-либо оболочек не имеют в данном вопросе никакого значения, мы рассматриваем человека как чёрный ящик — дали задачу, справился, значит всё сформировалось, нет — нет.
Так вот мне и интересно на каких такого рода исследованиях базируется утверждение, что человек после (в среднем) 14 лет неспособен решать какого-то класса задачи? Пока всё говорит об обратном — Пиаже никто не свергает, сроки наступления уголовной ответственности только снижают, да и элементарный жизненный опыт показывает, что нормальный человек и в юности может думать, а дурак таким и помрёт.
Мы ведём речь о способностях в решении определённых задач, ни МРТ, ни формирование каких-либо оболочек не имеют в данном вопросе никакого значения...
Вы смеётесь что ли? Как это не имеет значение — ребенок уверенно ходить начинает только к 4 годам когда основная моторика развилась. Покажите мне двухнедельного новорожденного который умеет ходить, когда еще лобно-мостовой путь даже еще не начал формироваться.
Рученочками-ножками беспорядочно он махать будет, потому что чувствительные корешки еще на стадии плода завершают свое формирование.
Так вот мне и интересно на каких такого рода исследованиях базируется утверждение, что человек после (в среднем) 14 лет неспособен решать какого-то класса задачи?
На исследованиях нейрофизиологов, нейробиологов, психологов, неврологов, психиатров, педагогов — тут целый сомн исследователй, т.к. эта научная область междисциплинарная, но за последние 20 лет значительно выросли наши знания о мозге и возможности его исследования, правда все равно еще недостаточно. Та самая Карла Ханфорд, таблицу которой я приводил выше — чойт около 30 лет занимается проповедованием в школе, так шо помимо нейрофизиологии она еще и педагог.
дали задачу, справился, значит всё сформировалось, нет — нет
Вы можете давать общий тест на IQ в течении всей жизни и обнаружить, что с возрастом «сырые баллы» растут, особенно сильный качественный скачок между 17 и 25 годами.
Собственно есть, например Сиэтлское лонгитюдное исследование (которое проводилось на протяжении 40 лет), там например, пик по вербальному тесту вообще приходиться на 55 лет, а минимум на 25 лет, по пространственному тесту — 30 лет и снижается только после 60, по умозаключениям — достигает пика в 40 лет и начинается снижаться только после 60, успешность по числовому тесту растут от 25 лет и до 50, после чего начинает снижаться.
Все эти тесты не требуют специальных навыков (но образование, естественно, как и любая другая форма тренировки мозга улучшает показатели).
мы рассматриваем человека как чёрный ящик
Рассматривайте сколько угодно, но способности человека напрямую ограничены его уровнем физиологического развития — оно последовательно и долгое — занимать может до 20-25 лет. Нравиться Вам это или нет, но это объективная реальность.
сроки наступления уголовной ответственности только снижают
Вообще-то их скорее поднимают. В начале 20-го века никого не удивлял смертный приговор для 12-и летнего, а сейчас про такое наверное разве что из Ирана или Нигерии услышишь. К слову сказать в СССР в 30-ых годах за отдельные преступления могли судить уже с 12 лет, сейчас только с 14 и то только за особо опасные. Основной возраст уголовной ответственности — обычно 16 лет, но до 18 лет в обычную тюрьму не отправят. Во многих странах существует градация по составу преступления в зависимости от возраста. Хе, в США алкоголь не продают лицам младше 21 года, а в армию можно с 18 лет или с согласия родителей 17 лет ;-) Вот такие вот они странные американцы — водить машину можно с 14, в армию служить с 18, а бухать только с 21, как думайте почему? :-)
Но вообще Вы соскочили с темы — «что такое хорошо, и что такое плохо» — уровень мыслительной деятельности ниже, чем оперирование абстракциями или эмоциональная зрелость.
Пиаже никто не свергает
Естественно, просто его последними исследованиями — были исследования по тому как 11-15 летние дети усваивают формальную логику, а потом он умер.
Ну логично, сам себя процитирую:
префронтальная кора заканчивает свое развитие к 13-14 годам
так что уметь в рассудительность в 15 лет должны все дети.
Он просто более старшие группы затронуть не успел, а вот его последователи — продолжили этим заниматься
И мой вопрос был в том какую задачу (класс задач) не может решать человек после 14 лет?
Не очень понятно зачем вы упоминаете исследование по IQ — никто не спорит что человек учится и развивается всю жизнь, нас интересует не момент когда он достиг совершенства в каких-то навыках, а момент когда он все необходимые навыки в принципе способен освоить.
Не очень понятно зачем вы упоминаете исследование по IQ
Ну так это и есть:
И мой вопрос был в том какую задачу (класс задач) не может решать человек после 14 лет?
IQ и все схожие тесты — это есть задачи, нескольких классов: на пространственное мышление, вербальное, работа с цифрами и т.д. и т.п. Причем они не требуют специальных навыков. Чем лучше котелок работает, тем быстрее и больше заданий решается. Вот там с 14 до 25 прям взрывной рост идет каждый год.
IQ разве что эмоциональный интеллект не проверяет, но с ним сложнее чем треугольниками и слово-сочетаниями.
Ну если хотите наглядный пример: Самолетик, FlappyBird и Stardew Valley. Первую игру создал подросток в 14 лет, вторую игру самостоятельно реализовал 16-и летний подросток, ну а тертью игру 4 года разрабатывал чувак после колледжа, работавший библиотекарем. Вот и сравните сложность работ Самолетик vs Flappy Birds vs Stardew Valley — вот Вам и разница между 14, 16 и 20+ годами, на примере синглового проекта. Другой пример: Magicka — её разработчики ей начали заниматься еще в университете, выиграли грант, организовали фирму и выпустили спустя несколько лет игру — им тоже было 20+.
Все такие умные:
Особенно забавно это читать после того как начал кодить в 12.
имеют столько инструментов и свободного времени, каждый новый учебный год генерирует толпы школьников которые собираются создать убийцу WOW/Diablo/Crysis (нужное подчеркнуть), но у них нифига не получается, потому что это требует:
1. Знание и умение применять сложные алгоритмы, несколько сложнее, чем сортировка пузырьком
2. Умение самостоятельно строить реалистичные планы и организовывать работу… длительную работу
3. Разработку грамотной архитектуры
4. Собственно долго и упорно работать
Т.е. Самолетик они создать могут, сделать свою SCAD или Космических Рейнджеров — нет.
Я вот только про одного школьника (уже не школьника, уже студента) знаю, который к успеху пришел. И опять таки чуваку не 14 лет, а 17 (уже больше) и там не рядовой школьник — олимпиадник, углубленное изучение математики, все дела. И то это скорее всего казузистика (хотя с учетом того, что инструменты разработки упрощают жизнь все больше и больше, планка падать потихоньку буде), все это примеры достаточно выдающихся людей, несколько круче среднестатистических.
Вы путаете принципиальную возможность решить задачу и хороший навык в решении задачи.
Нет необходимых навыков — нет возможности решить задачу, как Вы назвали нет принципиальной возможности. Навыки человеком приобретаются самостоятельно, уровень овладения навыками и обучаемость напрямую зависят от его развития. Вот начиная с 20 лет, человек может освоить и применить любые навыки, которые соответствуют его специализации мозга (которая формируется в 13-17 лет примерно), до 20 лет — нет, только часть более простых.
Так что в 14 лет человек может с легкостью паять также хорошо как и опытные паяльщицы, потому что вся моторика уже развилась, а вот возглавить УФТИ Ландау смог только в 24 года, а первую работу по теоретической физике он опубликовал в 20 лет — не смотря на то, что это была архинезаурядная личность, который с детства опережал сверстников в развитии.
Вот вам и принципиальная возможность — в 20 лет можно выполнить работу по теоретической физике и в 24 озаглавить институт, а в 14 лет — нет, принципиально нет, но работать радиомонтажником можно и в 10 лет.
Самым кстати молодым доктором наук за всю историю России — был Маргелян, защитил диссертацию в 20 лет, самый молодой профессор за всю историю человечества — была Алия Сабур, с 18 по 19 лет была профессором, но потом ей контракт так и не продлили — к слову сказать настоящие профессора в США работают по пожизненным контрактам, и вообще ее квалификация под большим вопросом (суды там какие-то были даже). Вот Вам и
принципиальную возможность
в 20 лет стать ученым таки реально, если ты акселерат. Жду теперь примеры 14-и летних докторов наук, директоров и известных разработчиков.
Ваши примеры как раз подтверждают то, что в 14 лет всё уже сформировалось и работает как надо, но для достижения пика эффективности даже талантам нужны годы, что вобщем-то не удивительно.
Касательно снижения возраста уголовной ответственности — тыц.
Она и была раньше с 12 лет. Потом повысили. Но тут опять ограниченный состав преступлений. При этом для того что бы понимать «что такое хорошо, а что такое плохо» университетов кончать не надо.
Тут еще кстати один момент есть. Вообще преступления склонны совершать люди с психопатией — у мериканцев находил исследования, в которых пишут, что каждый третий-четвертый преступник страдает этим заболеванием, не смотря на то, что частота заболевания низкая — в общем порядка что ли 1% всего. Между прочим это заболевание прям с самого детства начинает развивается, аш с 2-3 летнего возраста.
Т.е. реально до 17 лет давать абстрактные вещи бесполезно — мозг их просто плохо воспринимает
Особенно забавно это читать после того как начал кодить в 12.
т.к. до 17 лет человеки еще не умеют строить далеко идущих прогнозов
в 14 продумывал как раскручивать свой сайт, в том числе видео-уроки, статьи, карты для игры, модели/звуки и так далее. В голове прикидывал что наиболее эффективно. Прекрасно понимал что удобная навигация и нужные ссылки под рукой делают контент более эффективным в плане возвращения пользователей на сайт. Хотя слова «контент» тогда не знал/не юзал, но общее понимание видимо имел.
геометрия — слишком много абстракций, которые еще юные котелки плохо переваривают
Очень смешно. Просто покажите урок в применении к движку компьютерной игры. Сразу вовлеченность возрастет.
Особенно забавно это читать после того как начал кодить в 12.
10 лет и это я ещё мало сообразительный, то-есть нормальный возраст понимание этой информации — значительно ниже
Очень смешно. Просто покажите урок в применении к движку компьютерной игры. Сразу вовлеченность возрастет.
Вы и предлагайте переход от абстрактной подачи материала, к практической.
Особенно забавно это читать после того как начал кодить в 12.
Вы уже в 12 лет умели оперировать паттернами и разрабатывать архитектуру, применяли замыкания, могли написать компилятор и разрабаться с языком только по его спецификации (без примеров)?
в 14 продумывал как раскручивать свой сайт, в том числе видео-уроки, статьи, карты для игры, модели/звуки и так далее. В голове прикидывал что наиболее эффективно. Прекрасно понимал что удобная навигация и нужные ссылки под рукой делают контент более эффективным в плане возвращения пользователей на сайт. Хотя слова «контент» тогда не знал/не юзал, но общее понимание видимо имел.
Хотя слова «контент» тогда не знал/не юзал, но общее понимание видимо имел — это наверное ключевое выражение в этом увлекательном рассказе.
Вы уже в 12 лет умели оперировать паттернами и разрабатывать архитектуру, применяли замыкания, могли написать компилятор и разрабаться с языком только по его спецификации (без примеров)?
Я вполне себе понимал классы/графический интерфейс как абстракцию.
Вы и предлагайте переход от абстрактной подачи материала, к практической.
Из практического примера мозг сам может выдернуть абстракцию. Точно также как в арифметике с яблоками.
Хотя слова «контент» тогда не знал/не юзал, но общее понимание видимо имел — это наверное ключевое выражение в этом увлекательном рассказе.
Если вы не поняли, то без знания как называется это «по научному» мозг сам выделил эту абстракцию и использовал для себя. Да и слово контент тогда было не так популярно.
Из практического примера мозг сам может выдернуть абстракцию.
А может и не выдернуть. Или выдернуть неправильно. С простыми примерами, типа арифметики на яблоках — это нам не грозит. Но в чём-то менее бытовом...
Точно также как в арифметике с яблоками.
Это называется «примитивная чувственная абстракция». Ключевое слово тут «примитивная».
Из практического примера мозг сам может выдернуть абстракцию.
А если нет исходного практического примера? Если надо выделить абстракцию из абстракции, на основе чисто теоретических знаний, а потом их применить на практике? :-) А почему у одних абстракции выдергивает у других нет или по разному?
Если вы не поняли, то без знания как называется это «по научному» мозг сам выделил эту абстракцию и использовал для себя. Да и слово контент тогда было не так популярно.
Ну это уровень: отделить содержимое рюкзака от самого рюкзака. Ну да, дети с этим справляются.
Смогли в 14 лет применить для сайта теорию массового обслуживания? Провести нагрузочное тестирования, все дела?
И да, провести нагрузочное тестирование в 14 лет вполне реально. Зависит от уровня этого тестирования конечно, потестировать гугл далеко не каждый взрослый сможет к примеру.
Это называется «примитивная чувственная абстракция». Ключевое слово тут «примитивная».
А покажите мне пример сложной абстракции, которую мозг не сможет выделить на конкретном примере (в контексте программирования)?
Может исследование операций?.. Образование — чертовски сложная система, которая в свою очередь, является частью государства — другой, еще более сложной системы. Или теория самоорганизации (синергетика)?.. все-таки, у системы есть параметры, значит могут быть уравнения, моделирование.
Наверное, к этой задаче можно подобраться математически, что бы понять при каких параметрах системы образовательный процесс становится оптимальным и максимально полезным.
Статья, правда, классная. Я бы с радостью с вами еще поспорил (от этого есть польза), но к сожалению нет времени. Зарплата у учителей… в общем приходится подрабатывать.
Но я сюда еще обязательно вернусь!
Хорошая статья. С вами мы уже немного копий поломали и… о-да!
О- да! Рад нашей новой встрече! Спасибо! Рад, что статья Вам понравилась. Конечно же полного согласия быть не может, иначе не о чем было бы писать и нечего было бы обсуждать.
Мне кажется, взгляд не такой уж и «мета».
Если чисто формально, то я давно не преподаю.
Образование — чертовски сложная система, которая в свою очередь, является частью государства — другой, еще более сложной системы.
Именно. Но ИМХО какие цели поставить — таким образование и будет.
Небольшой мысленный эксперимент. Дано: университет, например, МГУ. Там ряд факультетов: химический, физический, биологический, исторический, филологический. На каждом проходят специальные предметы. Попробуем представить себе, что все факультеты объединили и все студенты проходят все предметы всех факультетов. Зубрилы сойдут с ума от перегрузки, а лодыри не пострадают. Школа — это такой объединенный университет. Чтобы зубрилы выжили, их нужно разгрузить, т.е. каждого предмета давать на порядки меньше, чем дают на любом факультете МГУ.
Но я сюда еще обязательно вернусь!
Обязательно возвращайтесь. Вы — практик, за Вами последнее слово.
Очень не согласен с общим взглядом автора на происходящее и на возможные решения проблемы.
Для начала, вроде бы все согласны, что цель информатики в школе — это заинтересовать ученика предметом и дать хоть какие-то самые базовые понятия о профессии программиста и об информатике как науке.
Но если это так, то дальнейшие средства выглядят решительно странно. Во-первых, откуда здесь вообще математика и математическая подготовка? Да, математика нужна в решении задач вычислительной геометрии или решения уравнений, но точно так же биология нужна для решения задач computational biology. Мне при всём желании сложно вспомнить универсальные алгоритмы из классического списка, для понимания которых требуется хоть какая-то математика (не берём вопрос анализа сложности, это отдельная тема).
Во-вторых, вы предлагаете Паскаль с его абсолютно архаическим подходом к языковым и аппаратным средствам (об этом чуть ниже). Паскаль сам по себе не виноват, но вы по сути говорите, что за прошедшие 30 лет ничего лучше не изобрели. Изобрели тот же Python, конечно, а лямбды вас никто в школе писать не заставляет. Вы ставите языку в вину то, что у него имеется больше средств, чем вам требуется, удивительное дело.
Решение задач Прима-Краскала или поиск корней уравнения на уроке информатики — это ещё одна математика под другим соусом. Такая деятельность, во-первых, скучна абсолютному большинству, а во-вторых, очень слабо отражает реальные задачи повседневного программирования. Если уж рассказывать о программировании, то брать хотя бы занятные задачи, в которых, тем не менее, есть алгоритмы.
Например, почему бы не предложить нарисовать на экране шарик, который летает по прямой и отражается от стенок? Это была задача на 10 строк в QuickBasic. Или показать круговое движение: Земля вращается вокруг Солнца. Задание со звёздочкой: Луна ещё и вращается вокруг Земли. Или вот: мы не просто программируем алгоритм Дейкстры, а рисуем на карте как проходит маршрут.
Проблема в том, что на старых языках все эти трюки не работают, т.к. авторы этих языков жили совсем в другой реальности. Нарисовать что-то — проблема, осуществить анимацию — проблема, проиграть звук — проблема. Я вот не понимаю, как я буду объяснять ученику, что в 2017 году открыть jpeg картинку и перевернуть её вверх ногами алгоритмически это «сложно» (а чем плохая задача — преобразование матрицы, только не в её занудном математическом изложении). Когда у вас есть простые средства доступа к звуку, графике, интернету, открываются совершенно новые возможности, выходящие за рамки суконных традиционных задач (опять же, не будем критиковать авторов, они исходили из того, что возможно было спрашивать).
Далее, даже чисто алгоритмически эти языки заставляют работать на неоправданно низком уровне без каких-либо причин. Вот нельзя просто ввести с клавиатуры имя. Почему? Ну потому, что вы не знаете длины требуемого текстового буфера, динамических строк нет, а выделять буфер постоянного размера — спасибо, давайте ещё научим детей пить и курить. Можно сопоставить значение целочисленному индексу (массив), а вот строке или вещественному числу уже нельзя. Почему? Ну вот потому, что 30 лет назад Вирт так решил.
Короче говоря, я за то, чтобы дети могли легко использовать весь спектр современных возможностей аппаратуры (да посмотрите хотя бы на Scratch), не спотыкались на ровном месте из-за отсутствия в языке той или иной структуры данных и не просидели весь курс в занудных задачах двадцатилетней давности.
Я сам родом из той эпохи, но давайте здраво смотреть на вещи. Я сам в своё время взял труд почитать задачники по программированию 1970-х, когда авторы были вынуждены ограничивать себя ещё сильнее (например, нельзя было рассчитывать, что в языке есть строки). Так вот, это была катастрофическая тоска — решим уравнение методом Ньютона, а теперь давайте попробуем деление пополам, а теперь бонус: метод Гаусса системы решения линейных уравнений! Давайте всё-таки идти в ногу со временем.
дать хоть какие-то самые базовые понятия о профессии программистаНе только программиста. И в физическом и в химическом ВУЗах будут учить программировать.
не берём вопрос анализа сложности, это отдельная темаА почему не берем? Как раз очень важный момент для оценки алгоритма. Если не смотреть на сложность, то почти всё будем решать полным перебором исходя из принципа экономии мышления.
Мне при всём желании сложно вспомнить универсальные алгоритмы из классического списка, для понимания которых требуется хоть какая-то математикаНпр., теория графов — математика. Алгоритмы на графах, начиная с балансировки деревьев, разве не требуют некоторых знаний из теории графов? А как быть с приближенными вычислениями? А Булева алгебра это не математика? Про криптографию поминать не буду. Что касается computational biology, насколько знаю, там очень активно применяют кластерный анализ.
вы по сути говорите, что за прошедшие 30 лет ничего лучше не изобрелиНет. Я так не говорю. Я говорю, что ничего лучше для школы и для научных публикаций алгоритмов не изобрели. И не нужно. Pascal-like псевдокод для публикаций всех вполне устраивает — от добра добра не ищут.
Решение задач Прима-Краскала или поиск корней уравнения на уроке информатики — это ещё одна математика под другим соусом. Такая деятельность, во-первых, скучна абсолютному большинству, а во-вторых, очень слабо отражает реальные задачи повседневного программирования. Если уж рассказывать о программировании, то брать хотя бы занятные задачи, в которых, тем не менее, есть алгоритмы.И поиск корней уравнения на уроке математики не менее скучен. М.б. и там брать более занятные задачи?
выделять буфер постоянного размера — спасибо, давайте ещё научим детей пить и куритьНе знал, что буфер постоянного размера в несколько десятков байтов выглядит столь безнравственно!
Давайте всё-таки идти в ногу со временем.
Давайте только посмотрим сначала: куда мы придем. Всякие шарики от стенок — это уж тогда не доморощенным путем делать, а через DirectX или, еще лучше, Unity3d. А почему Вы уверены, что все школьники хотят делать игрушки или даже играть в них? Тем более в примитивные игрушки, потому как ничего впечатляющего на уроке в школе не сделать. М.б. лет 30 назад Земля вокруг Солнца впечатляла, но сейчас этим никого не удивить. Только предмет дискредитировать.
А почему не берем? Как раз очень важный момент для оценки алгоритма.
Не берём потому, что для классических алгоритмов это уже сделано (ну т.е. рассказать немного можно, конечно), а для собственных, как правило, уже потребуется математика за пределами школьного курса.
Алгоритмы на графах, начиная с балансировки деревьев, разве не требуют некоторых знаний из теории графов?
Каких, например?
А как быть с приближенными вычислениями? А Булева алгебра это не математика?
Это именно что математические задачи. Вы по сути говорите: «разве в математических задачах не применяется математика?» Ещё бы, применяется, но и задач вне области математики просто вагон и маленькая тележка, не будем о них забывать.
Что касается computational biology, насколько знаю, там очень активно применяют кластерный анализ.
Безусловно. Давайте обсудим, например, KNN и C-means. Математика здесь на уровне, не знаю, пятого класса? Я же не говорю, что всё на свете надо выбросить, математика никуда не денется, но для ученика десятого класса понимание KNN не потребует особенных интеллектуальных усилий, пусть это и проходит по ведомству математики.
Я говорю, что ничего лучше для школы и для научных публикаций алгоритмов не изобрели. И не нужно
Разумеется, изобрели: Python, да и не только. Вы лукавите, когда говорите, что в научных публикациях используется Паскаль. Там обычно используют некий псевдокод, который у нас традиционно называют «паскалеобразным», но в действительности его с тем же успехом можно назвать «бейсикообразным» или «питонообразным».
Не знал, что буфер постоянного размера в несколько десятков байтов выглядит столь безнравственно!
Вот это и печально, что не знали. Вы предлагаете учить детей либо обрезать имена по «техническим ограничениям» (которых нет), либо оставлять buffer overflow-уязвимости, хотя это исключительно и только проблема языков типа Паскаль и C.
почему Вы уверены, что все школьники хотят делать игрушки или даже играть в них?
А разве я что-то говорил об игрушках?
Взять тот же несчастный шарик. Во-первых, это модель физического явления (молекула идеального газа, напр.) Во-вторых, нужно понимать, каким образом изменяются координаты со временем. В-третьих, понимать как устроена анимация (это вообще все без исключения системы современные). В-четвёртых, реагировать на столкновения со стенками и понимать как устроен этот процесс — это чистая физика, угол падения равен углу отражения, критерий столкновения и т.п. Тут масса тонкостей за простейшей обложкой.
Идея идти в сторону Unity и DirectX не лишена логики, но в целом это тупиковая ветвь дискуссии, т.к. вот есть некий непрерывный ряд языков и технологий от машинного кода и ассемблера до Unity и далее, и вы просто берёте в этом ряду произвольную точку и говорите: вот я хочу брать этот уровень абстракции, а влево-вправо не хочу, потому что гладиолус.
Можно сколько угодно дискутировать о том, насколько низкоуровневым должно быть школьное программирование, но считать, что в языке должны быть строки, но не должно быть ассоциативных массивов, например, по-моему, крайне странно, не вижу логики.
Не берём потому, что для классических алгоритмов это уже сделано (ну т.е. рассказать немного можно, конечно)Не немного, а чем принципиально экспонента в наихудшем случае хуже полинома. Уже хорошо.
для собственных, как правило, уже потребуется математика за пределами школьного курса
К примеру, задача как-то классифицировать графы. И мы по-простому будем вычислять сумму степеней вершин (или удвоенную сумму). Берем матрицу смежности и суммируем все единицы. Разве оценка трудности данного алгоритма будет за пределами школьного курса? ;)
Каких, например?
Высота дерева.
Математика здесь на уровне, не знаю, пятого класса?Кластерный анализ теперь в 5 классе проходят?
оставлять buffer overflow-уязвимости, хотя это исключительно и только проблема языков типа Паскаль и C.Прежде всего я предлагаю не загружать детей понятием «уязвимость», хотя бы до тех пор пока взрослые не договорятся, что это такое. Особенно забавно звучит «уязвимость учебной программы»! Далее это проблема и Васика, разве нет?
Во-первых, это модель физического явления [...] это чистая физика, угол падения равен углу отражения, критерий столкновения и т.п. Тут масса тонкостей за простейшей обложкой.Ага. Будем на уроках информатики изучать чистую физику.
К примеру, задача как-то классифицировать графы.
Зачем простому смертному, а тем более, школьнику классифицировать графы?
Высота дерева.
Ну это, конечно, жутко сложное понятие. Балансировка дерева, кстати, тоже на любителя задача.
Кластерный анализ теперь в 5 классе проходят?
Передёргиваете. Я предложил просто изучить KNN и C-Means, это задача на один день, и ничего тут изучать вообще не надо, достаточно знать, что такое евклидово расстояние.
Прежде всего я предлагаю не загружать детей понятием «уязвимость»… Далее это проблема и Васика, разве нет?
Абсолютно не надо загружать детей понятием «уязвимость». Вы просто покажете им, как выделить массив на 100 символов, а потом считать строку. А они просто потом будут это везде повторять. Спасибо за это от нас всех.
У Бейсика (а я про Питон, вообще-то...) такой уязвимости нет: «INPUT S$» считывает строку динамической длины.
Ага. Будем на уроках информатики изучать чистую физику.
Снова передёргиваете. Я предлагаю смоделировать, например, идеальный газ — это то, что дети изучают, не знаю, в девятом классе или в восьмом? Известную концепцию, простую как мячики на бильярдном столе, да ещё и не сталкивающиеся. А вы говорите, что это шаг в сторону, предлагая для начала изучить несколько абсолютно новых концепций из теории графов, а затем решать с её помощью задачи, которые решительно никогда никому на практике не понадобятся.
При этом почему-то начала кластерного анализа, которые требуют абсолютно базовых математических знаний — это «плохо», а балансировка деревьев, несравнимо более трудная и абстрактная задача — «хорошо».
Да и опять же, вы выбираете удобные цели для спора. Вот приводил же простой пример. Есть куча задач с преобразованием матриц. Транспонирование, поворот, интерполяция и т.п. Всё это можно сделать в виде скучнейших задач на ввод десятков чисел и вывод десятков других чисел, которые ещё надо осмыслить. А можно сказать, что матрица — это просто фотография, и вам надо эту фотографию повернуть/отобразить/увеличить/превратить в чёрно-белую. Это на порядок интереснее (котики же), при этом математическая строгость не страдает совершенно никак. Проблема только в том, что в некоторых языках почему-то считать с диска jpeg в массив и вывести обратно массив на диск трудно, а в других языках это делается в одну строку.
Проблема только в том, что в некоторых языках почему-то считать с диска jpeg в массив и вывести обратно массив на диск трудно, а в других языках это делается в одну строку.В Дельфи jpg загрузить легко. Но проблема ИМХО в другом: не всякий школьник воспринимает фото котика как матрицу. М.б. лучше пусть поскучает, но поймет, что такое матрица, когда его программа транспонирует матрицу 3х4? Тем более, что котики не всем нравятся.
Зачем простому смертному, а тем более, школьнику классифицировать графы?
Аналогично: Зачем простому смертному, а тем более, школьнику на математике упрощать тригонометрические выражения?
затем решать с её помощью задачи, которые решительно никогда никому на практике не понадобятся.Большинству школьников и модель идеального газа не понадобится и тригонометрические выражения. А многим (страшно сказать!) и теорема Пифагора никогда-никогда не будет нужна. Но общая естественнонаучная картина сложится: в математике доказываются теоремы, в информатике работают алгоритмы. Только ради этого, школьникам приходится трудится несколько лет, но ничего лучше человечество не смогло придумать за всю свою долгую историю. А почему не модель газа? — Потому, что в большинстве случаев это будет очень развесистый код, сделанный м.б. не самым хорошим учителем. А сортировку пузырьком столь испортить гораздо труднее. Она будет сильно короче. А в слишком длинной программе новичкам за деревьями не увидеть леса. Т.о. лучше 10 коротких программ на 10 алгоритмов, чем одна длинная по этим алгоритмам.
не всякий школьник воспринимает фото котика как матрицу. М.б. лучше пусть поскучает, но поймет, что такое матрица,
Да бросьте: вы собираетесь рассказывать о балансировке дерева школьнику, который не сможет понять, что такое bitmap? Не могу согласиться, что нарисовать рисунок по клеточкам из нулей и единиц — это rocket science.
Зачем простому смертному, а тем более, школьнику на математике упрощать тригонометрические выражения?
Тут вот какая штука. Тригонометрия — это сам по себе предмет. Мы можем обсуждать, нужен он в принципе или не нужен. Если считать, что нужен, то придётся и эту его часть изучать. Информатика же дисциплина более общая, и если стоит цель научиться программировать, то можно это делать на самых разных примерах, не упрощая задачи. Задача балансировки дерева ничуть не сложнее массы других, только смысл её совершенно непонятен нормальному человеку. Соответственно, я просто предлагаю обучаться программированию на понятных повседневных задачах, а не сначала тратить кучу времени на обучение некоторой теме, которая нужна лишь для того, чтобы потом на ней тренировать свои алгоритмические навыки.
тому, что в большинстве случаев это будет очень развесистый код, сделанный м.б. не самым хорошим учителем.
Попробуйте на досуге, уверяю, это 20 строк максимум.
в математике доказываются теоремы, в информатике работают алгоритмы. Только ради этого, школьникам приходится трудится несколько лет
Абсолютно согласен. Информатика — это не про Пифагора, не про идеальный газ, и не про решение уравнений. Это именно что про алгоритмы. Но чтобы проиллюстрировать эту мысль, нужны задачи. Так почему бы не брать те задачи, которые любой ребёнок поймёт с пол-пинка? Ведь простота формулировки и доступность задачи на понятийном уровне не означает простоты алгоритма. Она означает лишь то, что мы не будем тратить время на изучение левых тем с единственной целью сформулировать и решить задачу в рамках этой темы.
В этом смысле классические книги вроде того же Вирта гораздо больше к своему времени, чем вы к нашему. Смотрите, просто считать из текстового файла вещественное число и преобразовать его в настоящее число или, скажем, посчитать косинус — это вполне себе сложные задачи (косинус так вообще требует разложения в ряд). Однако Вирт и его современники обычно не грузят читателя этими вещами, справедливо считая, что всё это уже реализовано в стандартных библиотеках любого языка. Так почему же мы не поступаем так же, как они? Если некая функциональность уже доступна везде «из коробки», значит, это и есть наш атомарный кирпичик, из которого мы строим программу. Да, неплохо бы разобраться в устройстве кирпича, но в этом отношении подсчёт косинуса или устройство «кучи» памяти ничуть не менее важны, чем внутренняя организация ассоциативного массива, и тем не менее, первые темы мы игнорируем, а вторые всячески продвигаем.
Ведь простота формулировки и доступность задачи на понятийном уровне не означает простоты алгоритма.
Да. И я про это. Бывают задачи с красивым решением, которое многие авторы в своих публикациях довели почти до совершенства. А может быть и более простая задача, но решение потребует много рутинных операций. К примеру:
Жарков В.А, Самоучитель Жаркова по анимации и мультипликации в Visual C# .NET 2003, М.: Жарков Пресс, 2003, 432 С.
М.б. я несправедлив, но более скучной книги припомнить затрудняюсь.
М.б. я несправедлив, но более скучной книги припомнить затрудняюсь.
Вам привести список скучнейших книг по матану или физике?
Даже для самых интересных тем, конечно, нужен интересный материал.
Впрочем, тема «скучности» и «занимательности» крайне субъективная, тут у всех свои предпочтения.
Зачем простому смертному, а тем более, школьнику классифицировать графы?
Я не про классификацию графа, а о задачах на графах в общем: помоги роботу выбраться из лабиринта — поиск пути, самая такая настоящая задача на графах.
Я предлагаю смоделировать, например, идеальный газ — это то, что дети изучают, не знаю, в девятом классе или в восьмом? Известную концепцию, простую как мячики на бильярдном столе, да ещё и не сталкивающиеся
Но шарики действительно наше все, отличный вариант для старта. Тем более потом можно будет сделать много двигающихся шариков, потом очень много => плавно перейти к квадратичным деревьям например. Потом кому-нибудь захочется работать не только с шариками и прямыми стенами, но и с полигонами, а тут и вычислительная геометрия…
можно сказать, что матрица — это просто фотография, и вам надо эту фотографию повернуть/отобразить/увеличить/превратить в чёрно-белую.
Ну вот я такой фигней дочку на паузу ставлю — ей нравиться как квадратики колеблются-колеблются, и бац! Картинка. Наглядная демонстрация любого алгоритма оптимизации ИМХО (но учебный пример ГА сюда кладутся просто идеально)
Я не про классификацию графа, а о задачах на графах в общем: помоги роботу выбраться из лабиринта — поиск пути, самая такая настоящая задача на графах.
Да, это хорошая задача, поддерживаю. Но тут теория графов уж очень сбоку, даже в какой-то из книг занимательной серии Перельмана всякие методы выхода из лабиринтов описывались.
Есть другие — типа алгоритм поворота Креша или метод потенциальных полей — способ решить задачу с другого бока (хотя некоторые утверждают что метод потенциальных полей, тот же алгоритм Ли, но я хз). А можно вообще нейросеть присобачить
Этим и хороши прикладные задачи — можно продемонстрировать сразу несколько путей решения. Более того, любой разработчик это должен уметь делать (хотя вот меня стал часто посещать «паралич разработчика» — когда хз что лучше выбрать).
Ну т.е. все эти абстракции — гарфы там, конечные автоматы и прочая хрень — отлично демонстрируются набором прикладных задач. Вот с них и нужно начинать.
волновой алгоритм и прочие которые успешно используются для поиска пути — все из теории графов
Не надо подходить к вопросу формально. Помните, у Мольера господин Журден очень удивился, когда узнал, что разговаривает прозой? Вот и здесь: волновой алгоритм прекрасно объясняется и без того, чтобы ошарашивать учеников тем, что это, оказывается, теория графов.
Не надо подходить к вопросу формально. Помните, у Мольера господин Журден очень удивился, когда узнал, что разговаривает прозой? Вот и здесь: волновой алгоритм прекрасно объясняется и без того, чтобы ошарашивать учеников тем, что это, оказывается, теория графов.
Я хз, они должны знать откуда это и где потом искать больше. Тем более тут просто предлагают просто рассказать все алгоритмы, а дальше как хотите.
Если же говорить об обучении (откровенно говоря и об разработке тоже) — то Паскаль в этом плане на голову выше всех этих Пухтонов и прочих мусорных JS — строгий синтаксис дисциплинирует и уменьшает вероятность ашипки (а это очень важно в начале обучения! Так шо Си тоже не особо прокатывает, разгребать дампы памяти даже за деньги не очень хочется). Говнокод конечно можно и на Паскале писать, но на Пухтоне говнокод пишется автоматически, если за него садится программист с плохой самодисциплиной (т.е. 99% всех программистов и и 99.9% школьников), собственно хваленные пухтоновские библиотеки состоят из говнокода более чем полностью. Я таки языки называю мусорными — вроде как на них писать легко, приятно и быстро, но все что сложнее пятистрочного скрипта превращает в спагетти. И да, меня всегда умиляло, что на ОО языке — Пухтоне, 99% программ написано в чисто процедурном стиле.
Если же Паскаль не нравится, то есть альтернатива — мейнстримовые энтерпрайз языки: Java и C# — в них в принципе также можно писать как душе угодно, но они все же имеют достаточно строгий и формализованный синтаксис и целую рекомендаций и соглашений. А самое главное эти языки дуракоустойчивые (C# все же более дуракоустойчивый чем Java. все же в последней куда проще несознательно вступить в тот же boxing/unboxing, например). А еще по ним очень много копипасты на всяких стековерфлоу — в общим учится им намного проще и эффективнее.
Так вот, это была катастрофическая тоска — решим уравнение методом Ньютона, а теперь давайте попробуем деление пополам, а теперь бонус: метод Гаусса системы решения линейных уравнений! Давайте всё-таки идти в ногу со временем.
Хз, по мне так это самое главное. Я когда в школе узнал, что есть такой метод Гаусса и компьютер можно начить решать системы уравнений — был счастлив и тут же запил (ну на самом деле не тут же — это было долго и мучительно). Знайте как круто решать домашку, когда компьютер уже посчитал все и выдал ответ. Вообще к 11 классу физику, математику и частично радиолюбительство получилось автоматизировать написанием собственных программок. Вот геометрия оказалась в пролете — она кончилась раньше чем стали появляться вумные мысли в голове, да и вообще компьютерная геометрия адок еще тот. С тех пор у меня и развилась мания всю симулячить на компе, а сейчас уже проще решать обратные задачи и строить всякие регрессии, чем выучивать формулы и законы.
Тем более все эти Ньютоны и наискорейшие спуски — то собственно для чего компы создавались и то что приносит реальную пользу. Задачи оптимизации — это именно то, что позволяет нам летать, разговаривать по телефону и смотреть картинки с котиками. Опять таки тут вопрос правильной демонстрации и она решаема. Другое дело, что всему свое время, ну вот для первого курса: метод Ньютона, касательных и Гаусса ИМХО должен реализовываться каждым студентом, параллельно с высшей математикой.
Паскаль в этом плане на голову выше всех этих Пухтонов и прочих мусорных JS
Вот даже лично Вирт бы с вами не согласился, ибо уже во втором издании своей книги (это примерно 1990-й год, если не ошибаюсь) убрал Паскаль в пользу Modula-2. Это чистая вкусовщина, спорить бессмысленно.
Хз, по мне так это самое главное. Я когда в школе узнал, что есть такой метод Гаусса и компьютер можно начить решать системы уравнений — был счастлив
Я рад за вас, не могу подтвердить личным опытом.
Знайте как круто решать домашку, когда компьютер уже посчитал все и выдал ответ.
А, ну это всё объясняет. Смысл и радость компьютера — это помогать решать другие домашки. Домашки ради домашек.
Тем более все эти Ньютоны и наискорейшие спуски — то собственно для чего компы создавались и то что приносит реальную пользу. Задачи оптимизации — это именно то, что позволяет нам летать,
С этим никто не спорит. И тем не менее, это не значит, что данные задачи являются наилучшими с дидактической точки зрения.
Вот даже лично Вирт бы с вами не согласился, ибо уже во втором издании своей книги (это примерно 1990-й год, если не ошибаюсь) убрал Паскаль в пользу Modula-2. Это чистая вкусовщина, спорить бессмысленно.
Но не в пользу Пухтона :-) Он еще кстати жив и можно поинтересоваться у него, что он думает о Пухтоне с JS, например, и больше чем уверен, что ничего хорошего. А Модула-2 просто дальнейшее развитие паскаля: модульность, функции первого порядка, низкоуровневые свистелки и перделки и кучка еще вещей, которых не хватало в Паскале. Но главным и последним языком Вирта, является Все же Оберон. В общем это чисто одна ветка: Паскаль => Модула => Модула-2=>Оберон
А, ну это всё объясняет. Смысл и радость компьютера — это помогать решать другие домашки. Домашки ради домашек.
Смысл и радость, что у тебя есть правильный ответ, знание которого всегда упрщает жизнь и под который уже всегда можно подогнать, что положительно влияет на оценку. Ведь именно для этого программирование и компьютеры нужны: упрощение работы и повышение эффективности, а не программирование ради программирования :-)
С этим никто не спорит. И тем не менее, это не значит, что данные задачи являются наилучшими с дидактической точки зрения.
Уравнения и системы уравнений приходится решать в любой технической области, и решать ручками даже систему из двух уравнений — крайне унылое занятие, а из штук 10-12 наверное только от безысходности люди решали (я вообще хз как они это делали), а в современных задачках их количество переваливает за сотни. Так что тут вопрос вопрос не хочешь-не хочешь, а придется в любом случае.
И с учебной стороны, что Ньютона, что метода бисекций, что Гаусса — единственный верный выбор, т.к. это самые простейшие и классические методы, еще и представляют 3 разных класса методов сразу и хорошо применимы (в отличии от метода Крамера, например), еще и выполнимы ручками если что пойдет не так. А вот давать студентам сразу какой-нибудь BFGS или GMRES, или там какие-нибудь проекционные методы — то это будет адок, там уже только от вида формул в пояснениях страшно становится, хотя и их в итоге придется учить, т.к. какой-нибудь нолик закрадется — и все, хана Гауссу, но можно и попозже и не всем.
Вот он метод Ньютона (метод касательных), куда уж проще:
double TangentsMethod(function f, function df, double xn, double eps)
{
double x1 = xn - f(xn)/df(xn);
double x0 = xn;
while(abs(x0-x1) > eps)
{
x0 = x1;
x1 = x1 - f(x1)/df(x1);
}
return x1;
}
Для школы такое наверное не пойдет, врядли им нужно искать корни какой-нибудь функции x^3+3x-1->min, хотя хз, на Хабре такими вещами и в более сложном виде тоже не брезгают
Он еще кстати жив и можно поинтересоваться у него, что он думает о Пухтоне
Это неважно. Просто если так любить идеи Вирта, давайте и вправду переходить на Оберон.
Уравнения и системы уравнений приходится решать в любой технической области, и решать ручками даже систему из двух уравнений — крайне унылое занятие,
Верно. Вот умножить вручную два пятизначных числа тоже унылое занятие. Вы это тоже обычно с помощью ручки и бумаги делаете?
А вот давать студентам сразу какой-нибудь BFGS или GMRES,
Не в этом дело. Я же не против методов Ньютона или Гаусса. Я просто говорю, что всё это задачи из области математики и смежных областей. Можно найти огромное число полезнейших для начинающего программиста задач, которые бы не были бы связаны настолько жёстко с математикой. Мне хотелось бы, чтобы цвели все цветы.
Это неважно. Просто если так любить идеи Вирта, давайте и вправду переходить на Оберон.
Ну мне Оберон и Компонентный Паскаль скажем так нравятся больше чем мейнстримовые Жабы и C# или JS с Пухтоном. Но приходиться все равно идти за большинством и выбирать из 2-х зол меньшее.
Верно. Вот умножить вручную два пятизначных числа тоже унылое занятие. Вы это тоже обычно с помощью ручки и бумаги делаете?
Нет конечно, я вообще в умножение плохо умею еще со школы :-)
Не в этом дело. Я же не против методов Ньютона или Гаусса. Я просто говорю, что всё это задачи из области математики и смежных областей. Можно найти огромное число полезнейших для начинающего программиста задач, которые бы не были бы связаны настолько жёстко с математикой. Мне хотелось бы, чтобы цвели все цветы.
Тут главное верно подводить к этому. Ну например, когда я учился на физфаке у нас всегда была триада: лекции, семинары и лабораторные работы по физике, так что в вопросов «где нужна теорема Штейнера и как это выглядит?» не было. Более того — чем старше курс, тем больше практических примеров. При этом математика катастрофически не поспевала за физикой. На старших курсах в эту триаду плавно вплелось программирование — и тут я могу сказать вот что: то программирование которое нам читали погромисты с погромисткого факультета: набор алгоритмов и зубодробильная дискретка — прошло по факту мимо всех, пока к физике на старших курсах не прибавилась вычислительная практика и численные методы. Но даже в универах с грамотной демонстрацией — туго, а в школах с этим вообще ж0па.
Ну мне Оберон и Компонентный Паскаль скажем так нравятся больше чем мейнстримовые Жабы и C# или JS с Пухтоном.
Согласитесь, это ваши личные предпочтения. Имеете полное право. Но всё-таки не отказывайте в здравомыслии людям, которые выросли на Паскале и прочих языках той эпохи, а затем создали свои языки, в которых попытались избавиться от недостатков языков времён своей юности. И в этом смысле для меня Python, при всех его проблемах, огромный шаг вперёд по сравнению с Паскалем. Ограничения и решения Паскаля из нынешнего времени видятся обычной архаикой, а не целенаправленными архитектурными замыслами. Человек, изучающий программирование на Паскале приобретает превратное представление о дизайне языка программирования. Ну это как если бы он обучался архитектуре зданий только на римско-греческих примерах.
Нет конечно, я вообще в умножение плохо умею еще со школы :-)
Именно! Вы не забиваете себе голову алгоритмами умножения и не пишете соответствующий код, а просто берёте калькулятор. Аналогично, в наше время решение системы линейных уравнений осуществляется таким же точно «калькулятором», а не собственной программой.
так что в вопросов «где нужна теорема Штейнера и как это выглядит?» не было
Да, всё так. Почувствуйте разницу: вас целенаправленно обучали на физфаке профессии (физика, вероятно). И все предметы были подчинены этой общей задаче, в том числе и программирование. В школе такой цели нет. Программирование изучают не для физики, не для математики и не для биологии. Программирование изучают для программирования, поэтому я так и ратую за то, чтобы задачи были как можно менее специальными. Чем ближе к быту, тем лучше. В конце концов, в задачниках по математике тоже обычно решают что-то «из жизни»: узнать цену, расстояние, скорость, количество, а не что-нибудь такое из медицины или технарства.
Категорически поддерживаю!
А ещё Джордано Бруно из списка нужно исключить за плагиат.
Вместо него вписать Николая Кузанского, который абсолютно в духе античной мысли предположил единство минерального царства всей вселенной (писал он, конечно, в других терминах). А из оного предположения закономерно следует множественность миров.
Ну неужели они не понимают, что многим из их учеников за всю жизнь не понадобится теорема Пифагора или знание формулы медного купороса?
А потом мы удивляемся откуда столько людей которые сдачу в магазине правильно посчитать не могут и не различают дизель и бензин.
На то школа и является Общеобразовательной чтобы дать общие понятия во всех необходимых областях знаний, а для профильного образования есть университет.
К школе, как по мне, сейчас можно предъявить другие претензии: не эффективные методы обучения, устаревшие знания в некоторых областях.
Орерон-07 это конечно хорошо, но желательно чтобы ЯП был ещё и функциональным. Вот скажите многие ли из вас стали серьезно кодить на Делфи? Поэтому, думаю для изучения отлично подошёл бы Питон. Прост, несложный синтаксис и главное применим в реальной жизни.
Не нашли к чему придраться, поставили в вину, что не на гите. lol
Ваш слив засчитан! cool face
PS Срач про гит там => https://habrahabr.ru/post/341676/
По правилам середины 20 века. Сейчас все аббревиатуры принято писать заглавными буквами.
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
В частности, не играть в уменьшение строчек кода. Например, программку для нахождения чисел Фибоначи на Питоне можно записать следующим образом:
fib = lambda n: fib(n - 1) + fib(n - 2) if n > 2 else 1
Мета-взгляд на проблемы (не)образованной молодежи