Pull to refresh

Comments 184

Алгоритмы можно изучать на Паскале — язык понятный, логичный.
Затем переходить на C++
Java или C# как первый и единственный язык, ИМХО, преподавать не стоит — как же указатели-то?! :) Как второй-дополнительный — хорошо.
А Web можно давать как факультатив.
Не согласен, думаю надо сделать разделение на веберов и не веберов :) Специализация всё же решает. Ибо первым нафиг не упали всякие указатели, а вторым особенности работы javascript в IE.

Ну а начинать да, с паскаля к примеру и питона.
ненене, никакой специализации в школе!
они должны выучить в первую очередь алгоритмы: работа с разными типами данных, поиск, сортировка, деревья, графы, рекурсия.
Вот, например, пишет человек на .Net(C#) веб-приложение. Или на Java EE? Он вебер или не вебер? :) надо ему javascript в IE? )
Извините, разделение на веб и не-веб? В школе? Вы поняли что сейчас сказали? В школе надо алгоритмы учить. А язык не важен: хоть бейсик, хоть паскаль, хоть ассемблер. Плюс надо давать знания того как эта железная шайтан-машина работает внутри, ибо при наличии понимания принципов работы аппаратного уровня, разобраться хоть с C++, хоть с пхп не составить труда, а без этого понимания будут вопросы типа «Почему у меня сортировка миллиона элементов не работает за 1мс» и т.п.
Школа это место для прививания основ, а не специализации. Человека говорящего про «нафиг не упали всякие указатели» профессиональным разработчиком назвать трудно. Поясню свою мысль: в практике веб-программиста указатели конечно не очень то и нужны, но вот практика показывает что, без этих знаний веб-разработчки могут написать код, от которого кровавые слезы сами начинают литься из глаз. А опрос по моему лишен смысл изначально, ибо внимание заострено на языках (т.е. на специализации) а не на основах.
Разделение в школе, наверное, и правда плохая идея, но и алгоритмы — это тоже достаточно специализировано. Важно, чтобы человек представлял себе алгоритмику в целом, чтобы понимал, как объяснить компьютеру то, что он от него хочет, указатели не так важны сейчас, как понимание ссылок и устройство памяти в целом, понимание принципов хранения и передачи данных. Ввести понятные метафоры. Ну и отдельная дисциплина: культура и эстетика разработки по :-)
Алгоритмы это основа основ, абсолютно все программы — это алгоритмы, записанные разными языками. Кроме того, алгоритмы — это то, что реально может пригодиться в жизни, даже если вы никогда больше к компьютеру не подойдёте.
Формально всё же не любая программа. Программы на декларативных (в том числе функциональных) ЯП не алгоритмы.
Не думаю что отличному программисту «нафиг не упали всякие указатели».
Ну как вам сказать. Я вроде как не самый глупый программист. Знаю и алгоритмы, и паттерны, и указатели, и регистры ассемблера. Но занимаюсь вебом. И вот последние лет 5 уж как, мне указатели были без надобности.
А я и не говорю что они каждый день необходимы, я говорю что знать их нужно.
Давайте еще раз…
Мы не говорим про отличных программистов. Мы говорим про детей.
Они обойдутся без этих указателей, динамической памяти и прочих радостей жизни. Если вы им поставите логику, за пять-шесть лет ВУЗа они разберутся со всем, что им будет нужно. Если вы им в школе привьете мысль «указатели — это страшно и сложно», то они всегда будут подсознательно их избегать, если вообще программистами станут.
Согласен, но мой пост это ответ на фразу «веберам нафиг не упали всякие указатели».
Принято.
Я, вот, и понял, что люди опять расплываются мыслью )
Меня просто тема живо интересует. Я тоже сталкиваюсь с проблемой как нанести детям побольше пользы, но не убить интерес. И что б это массово было, а не для трех заинтересованных с потока.
А большинство судит с позиций взрослого спеца.
Я думаю что главное это как раз развить интерес, заинтересовать, чтоб глаза загорелись, а потом хоть формочки клепать, хоть арифметику указателей давать можно :)
«регистры ассемблера»? ну-ну :)
Разумеется вы догадались, что под сокращенной фразой «регистры ассемблера» имелись в виду регистры процессора, используемые в ассемблере, не так ли?
Я сейчас, вот, прямо работаю школьным учителем по информатике в одной из лучших школ города (это я к тому, что дети неглупые).
Тезисно:
1. Да, это все еще дети, даже классе в десятом-одиннадцатом. Разница между одиннадцатиклассником и первокурсником разительна (да, там тоже вел). Почему — не знаю. Просто так.
2. Даже профильный класс — это очень разные уровни, будьте к этому готовы. Уровни знаний и уровни заинтересованности в предмете. С ними нельзя работать как с кружком по программированию или специально отобранными учениками. Здесь будут те, кого запихали родители и те, кто не знал куда идут. Будут просто хуже подготовленные дети.
3. Всегда будьте готовы ответить на вопрос «зачем это нужно»?
4. В сущности — не важно на каком языке учить. Главное — что бы он был логичный, понятный и было легко объяснить зачем дети это делают. Так что наверное — это не брейнфак и не ассемблер даже. Нелогичные или сложные структурно вещи (та же динамическая память) можно опустить. Язык они еще выучат, а если сейчас привить страх к конкретному подходу или методу — он может не пройти никогда. Хорошо, если вы можете сказать «это вам еще пригодится в ВУЗе» (что справедливо, пожалуй, прежде всего, для C). Напомню, что в ЕГЭ тоже используются Basic, Pascal, C.
5. Не старайтесь сделать из них отличных программистов. Это дети. Старайтесь привить любовь к предмету. Остальное приложится, правда.
6. В школе НЕЛЬЗЯ давать одним людям несколько языков. Подход «ставим мозги на Pascal, переползаем на C» не работает. Дети путаются потом до конца обучения, выдалбливается только тяжелой зубрежкой, тогда как первый язык дается сравнительно легко.
7. Есть исключение. Можно дать, скажем, C, потом C++. Давать сразу ООП нельзя. Потом очень сложно будет вдолбить что это такое и зачем надо. Верю в работу обучения ООП в виде отдельных ГРУППОВЫХ лаб и «курсовых». Это хороший способ показать детям почему неудобно делать большой проект толпой только на функциях и зачем нужны объекты. Да, я знаю, что это упрощение и условность, но мы преподдаем в школе.
8. НУЖНО давать какой-то язык, это позволяет раскрепостить мышление и понять что такое программирование. Но начинать надо с банальных блок-схем. Они нагляднее и позволяют въехать в азы алгоритмики уже в начале восьмого класса. Потом прекрасно работает метод «вот этот блок на языке C записывается вот так». Дети любят и легче понимают простые аналогии.

Если тема интересна сообществу — могу распространить свою мысль в формате поста жанра «ИМХО на базе моего недюжего опыта», ато расписался тут… Самому тоже интересно послушать мнения умных людей.
Спасибо, интересно!
У нас в школе были блок-схемы класса с 5, что ли )
ну и алгоритмы на всяких там Кенгуренках.
Потом преподаватель сменился, и в 10-11 мучались с массивами на Паскале. Если б преподавание шло такими же темпами, успели бы и до указателей дойти на факультативах… но все заглохло.

писали на бейсике и паскале — проблем с переходом от одного языка на другой не было, дети учатся легко, изучают по 2 иностранных, так что дать второй язык программирования, имхо, не проблема, если они один уже поняли.
По учебному плану информатика в школах идет, вроде бы, так:
2 часа 8 класс; 2 часа 9 класс; 1 час 10 класс; 2 часа 11 класс. Все в неделю, все академических (45 минут).
То, что у вас была информатика с пятого класса — инициатива школы, вам просто очень повезло.
Проблема с несколькими языками, на мой взгляд, такая же, как и со всем прочим. Бритва Оккама: не нужно плодить сущности. Заинтересованный ученик выучит второй язык сам, незаинтересованного вы будете заставлять зубрить новые конструкции, а он будет путаться и уверять, что ему оно не надо и его вполне устраивает <language_name>. При этом вам вполне достаточно одного языка, что бы показать с чем это едят и чем отличается программирование на реальном компьютере от работы с блок-схемами. Опять же, у некоторых дикий восторг вызывает сам факт того, что пара строчек в текстовом редакторе заставляют компьютер «думать так, как нам надо».
В общем, на мой взгляд давать несколько языков — неверное решение просто с точки зрения экономии сильно ограниченного времени работы в классе и из соотношения польза/затраты. Именно поэтому я не против дать, к примеру, C и C++ или Pascal и Object Pascal/Delphi и т. д. Это близкие вещи, переучиваться надо меньше, а пользы очень много.
Если информатику с 0 изучать в 8 классе, то да, времени остается очень мало. Если получится нормально дать C и немного C++, то хорошо, в дальшейшем пригодится.

А у нас в 5-7 классах были разные учебные среды, в 8-9 был Бейсик, в 10-11 — Паскаль, и как-то нормально все воспринималось.
Про заинтересованность, наверное, так и есть. Классе в 7—8 я ходил на программирование. Помню, как реподавательница писала мне «таблицу перевода» с Бейсика на Паскаль в стиле «было — стало». По ней я за неделю догнал ребят, которые учились уже два месяца. Мне было интересно.
Возможно, вам будет интересно взглянуть на план предмета «Программирование»: www.isphera.ru/infopro-progr
Это примерно 9-10 класс. Какой ЯП дают, не знаю.
Но это не в общеобразовательной школе, а доп. образование для детей, которые хотят и могут заниматься программированием.
С блок-схем может быть и стоить начинать, но уходить с них надо как можно скорее и никогда не возвращаться!
Я в свое время тратил вдвое больше времени, чтобы в ворде кое-как нарисовать эту проклятую блок-схему, чем на сам код.
Ну и лично мне блок-схемы никогда не казались более понятными, чем исходник.
Блок-схемы не окупают себя. Слишком много времени на создание тратится, хотя проще действительно открыть исходник (естественно, при хорошей структуре и документировании оного).

Другое дело UML.
Все это правда, но к школьникам не очень применимо. Имхо.
Да о нынешних школьниках вообще сложно говорить.

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

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

Если же говорить про школы… У меня сейчас младшая в 7 классе. Я слежу за тем, что ей задают, по каким учебникам она занимается. И честно говоря, я очень беспокоюсь за будущее нашей системы образования.
Мы их рисовали то ли в 5, то ли в 6. Прошли понятие «алгоритм» и рисовали блок-схему заваривания чайника и пр. — не было ни кода, ни ворда. :)
Зато потом проще было выстраивать алгоритм на каком-нибудь ЯП, и да, блок-схемы уже не надо было рисовать, можно было в голове прикинуть, как что должно быть.
Из моих воспоминаний, что в школе, что в институте — в каждой группе было несколько (человек 5) продвинутых, кому было действительно интересно — но им как раз в школе было скушно, они опережали. А остальные «ходили на занятия»… в любом случае, хочется верить, что в результате у них мозги хоть немного раскочегарились.
Выкинуть компьютер и читать Кнута. Для развития теоретической базы и воображения.
image
Воображение!
У меня был вариант «Только «Искусство программирования» Д. Кнута сформирует правильное мышление истинного Программиста».
Наверное, стоило включить в окончательную редакцию опроса :)
Ну и зачем школьникам здался Кнут, с его зубодробительным mix. Я даже студентам рекомендую не его, а Кормена с «Алгоритмы: построение и анализ»
+1
Кнут для школьников — зло. Просто не потянут, за исключением уникумов. В лучшем случае — банально не поймут и бросят.
Я себе мозг сломал пытаясь осилить упражнения и математику в Кормене :( школьники и подавно, хотя если не заострять на математике и давать суть
А Вы сами-то осилили Кнута? Есть хорошая шутка: «Программисты делятся на две категории: на тех, кто осилил Кнута, и на тех, кто говорит правду». Для школьников материал непосильный хотя бы из-за того, что для начала нужно знать на очень хорошем уровне дискретную математику.
Нет, даже и не пытался пока. Не созрел.

ИМХО, для начинающих куда лучше подходит «Структура и Интерпретация Компьютерных Программ» (SICP). Но я не уверен, что в школе нужно учить функциональному программированию. Детям ведь ЕГЭ сдавать, а там Pascal, C, Basic.
Чему должны учить в 9-11 классах с углублённым изучением информатики?

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

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

С одной стороны, конечно же, разумно рассказать им обо всём по чуть-чуть. С другой стороны из-за такого обилия информации, они не смогут её усвоить.
Поскольку речь идёт о школе с IT-уклоном, предмет хоть и не единственный, но один из основных.
Естественно, в школе надо не влезать в тонкости, а учить понимать основы. Главное — усвоить сам факт, что программирование бывает разным и хотя бы немного научиться думать по-разному.
Первый язык — Ассемблер, второй (можно паралельно) — Java, C# на поиграться с паттернами. Возможно, как факультатив — что-нибудь функциональное. Языки типа Python, Ruby давать в школе не нужно (ИМХО).
И нахрена ассемблер?
Микроконтроллеры например. Если преподавать IT, то неплохо будет и МК упомянуть. Вдруг кто-то из учеников потом за это «спасибо» скажет.
Упомянуть — безусловно. Но первым же языком ассемблер — никакого желания учиться не останется.
Например, скомпилировать какую-нибудь функцию на СИ и показать ее ассемблерный код, дать общую теорию. Не более того. Да и вообще о чем мы говорим? Вообще у всех уровень разный, кто-то хочет программировать, а кто-то хочет стать фотомоделью, но мама заставила идти в класс с углубленной информатикой т.к. это сейчас модно. Мы с братом без всяких преподов и углубленки с пятого класса программировали всякую фигню на спектруме, доставали где-то бесценные книжки. Школа не должна преподавать углубленно программирование. Алгоритмы, хеллоуворлды — этого более чем достаточно. Информатика должна давать устройство компьютера, типы процессоров, типы операционных систем, что происходит с компьютером при включении питания… как оно работает.
Тут как бы всё от учителя зависит уже.
А вам не кажется, что «программистов» которых может отпугнуть ассемблер, у нас в стране и так более чем достаточно? И нужно ли их еще большее количество, большой вопрос.
Конечно говоря об ассемблере, я не имею в виду его версию для линейки Intel Core iX со всем его расширенным набором команд. Для изучения в школе вполне подойдет ассемблер для какой-нибудь линейки восмиразрядных процессоров или микроконтроллеров. При этом параллельно желательно изучать основы схемотехники, чтобы в голове уложилась связь между софтом и железом.
И, (сейчас посыпятся минусы) делать это надо именно в школе, в институте уже поздно…
есть те, кто призван для ассемблера. и есть те — кто нет.
так что важно иметь возможность выбора
Как можно быть призванным или нет для какого либо языка программирования, ты либо программист либо нет.
Тем более ассемблер — это основа программирования.
Для программиста, на каком бы языке он не писал, процессор и то как он работает, не должно быть непроницаемо черным ящиком.
Горько наблюдать, как приходящие устраиваться на работу программеры, на просьбу возвести число в 8ю степень не используя библиотечных функций, производят на свет код подобный этому: result = x*x*x*x*x*x*x*x;
Заметьте я не призываю учить ассемблеру будущих вебдизайнеров, я просто предлагаю зачислять их в классы иной, не программистской, направленности.
Вы не поверите…
$ cat /tmp/z.c
int xpow8(int x) {
  return x*x*x*x*x*x*x*x;
}

int xpow8_loop(int x) {
  int r = x;
  for (int i = 0; i < 6; i++)
    r *= x;
  return r;
}
$ clang -O2 -S -emit-llvm /tmp/z.c
$ cat z.s
...
define i32 @xpow8(i32 %x) nounwind uwtable readnone {
entry:
  %0 = mul i32 %x, %x
  %1 = mul i32 %0, %0
  %2 = mul i32 %1, %1
  ret i32 %2
}

define i32 @xpow8_loop(i32 %x) nounwind uwtable readnone {
entry:
  %mul = mul nsw i32 %x, %x
  %mul.1 = mul nsw i32 %mul, %x
  %mul.2 = mul nsw i32 %mul.1, %x
  %mul.3 = mul nsw i32 %mul.2, %x
  %mul.4 = mul nsw i32 %mul.3, %x
  %mul.5 = mul nsw i32 %mul.4, %x
  ret i32 %mul.5
}
VC10 не справилась, оставила 7 умножений.
Но почему во второй функции цикл 6 раз, а не 7?
Да, должно быть 7 — опечатка…
Очень хороший ассемблер был у PDP 11/70. Набор команд ненамного сложнее, чем в DCPU-16, но при этом использовался в реальных компьютерах. К нему бы хороший интерпретатор с системой ввода-вывода — и получилась бы неплохая игрушка.
Уже Z80 намного сложнее. Хотя в чём-то приятнее.
Нужен не x86 ассемблер, а более простой. Типа dcpu-16. Десяток команд, вот по этому адресу лежит память дисплея. Это будет что-то типа лего для программистов. Нихрена нет, а надо построить красивый ров с лавой и крокодилами. Не знаю насколько академично, но я бы такому в школе был бы рад в своё время. У нас каждый год приходил новый учитель, а иногда наоборот — учительница, и мы изучали вордпад, эксель. QBasic был в 7 классе, в остальных был ворд. Иногда пытались дать HTML. Но школа — то время, когда надо писать свои велосипеды по любому случаю, переизобретать всем известный алгоритмы самому, буквально для саморазвития.
У каждого свои понятия «быдлокодера» и «отличного программиста». Для кого-то сложноархитектурные корпоративные приложения на Java — быдлокодинг. Пожалуйста, охарактеризуйте, что вы имеете в виду под «отличным программистом», и из-за каких особенностей мы оскорбляем программистов словом «быдлокодер». В конце концов, только в России под программированием понимают все, начиная от цветов и рюшечек оформления интерфейсов (что, вообще-то говоря, относится уже не сколько к технарям, сколько к художникам), и заканчивая то highload-проектами, рассчитанными на тысячи и тысячи одновременно работающих пользователей, то ядерщиками-микроконтрольщиками (не у всех есть ARM и Linux, да).
Причинно-следственным связям, простым и понятным подходам и сменам, и да, Halflling прав, язык на следующем месте. Потому как, если ты знаешь язык, но не умеешь грамотно его применять — грош цена такому кодеру.
Очень советую посмотреть чему учат здесь. Сам был несколько впечатлен, если не сказать шокирован. Теперь интересно, есть ли такие программы в Петербурге.
Вот отрывок из задач 11 класса...
Игры (PyQt и графика):
Различные варианты походовых игр.
Аналог Angry Birds с улучшеной графикой и текстурами (доработка программ 34 и 35).
Сокобан с дизайнером уровней.
MultiUser Dungeon (MUD ). Текстовая многопользовательская игра с интерфейсом командной строки. Сетевое программирование, пишем сервер, пользуемся чужими клиентами.
Игра жанра Roguelike. Текстова игра с псевдографикой.
Шашки.
нехило так «Векторный редактор (аналог Сored Draw)» сделать на экзамен :)
Понаписав не один редактор для игр, только сейчас понимаю как лучше организовать все это визуальное редактирование примитивов.
Знаете, я подозреваю это какая-то очень отборная контора и дети там необычные, и учителя необычные.
Я вам скажу, что даже в обычной школе кружок и работа в классе сильно отличается. Давать ВОТ ЭТО в обычном классе даже технической спец школы невозможно. Не въедут, не всем оно надо и не всеми легко усваивается.
Ну это физ-тех школа им. Курчатова.
Ну и там можно посмотреть отметки учеников — много троек, и всего один-два человека осилили все задания.
На мой взгляд, при хорошем преподавателе и заинтересованности учеников — великолепный курс для старших классов.
Да вы себя в школе вспомните. Сколько было заинтересованных учеников? У нас всего было 4 класса, в двух из которых было по одному заинтересованному, как вы выразились, ученику. Остальные не хотели и не могли ничего понимать. Это при том, что изучали мы самые элементарные алгоритмы (сортировка, поиск и т.п.) в простейшем QBASIC.

Конечно, нужно сделать поправку на время. Тогда ведь компьютеры мы видели только в школе. В России ПК только начали появляться, и позволить себе иметь компьютер дома могли далеко не все. Хотя врядли сейчас стало лучше. Количество заинтересованных в программировании учеников, вероятно, не увеличилось, а вот остальных теперь компьютером не удивишь.
Ну вообще-то, это элитная физ-тех школа… Не должно быть по идее там «случайных» учеников.
Не знаю, насколько корректно сравнивать с МатМех МГУ — но там незаинтересованные не появляются, а если и появляются, то обычно не долго задерживаются
Ну про школы, где со всей страны собирают самых одаренных, я не говорю. Я скорее про обычные школы со специализацией в старших классах, каковой была моя.
Вообще, честно говоря, не очень понимаю, почему программы составляются в расчете на самых отстающих.
По мне, так если по итогам такой тяжелой и насыщенной программы, в IT хорошо подготовленными войдут несколько учеников из класса — отличный результат. Всем отстающим это не очень то и нужно, плюс они нахватаются по краем и по кускам. Ну так и смысл на этих отстающих ориентироваться? Какую программу им не давай — будут халявить.
Я сам учился в считающейся лучшей школе района, с углубленным изучением немецкого. Так там таких кадров хватало, и наркотики и разбой в 9-м классе, и соседка по парте в 8-м классе родила… Потом правда сделали ход конем — и из четырех 9-х классов сформировали один 10-й, осталось 6 пацанов и 26 девчонок — ну так раздолбайства стало на порядок меньше.
А массивы было конечно неинтересно сортировать (( И преподаватели были женщины в годах…
Правда как то один семестр в 10 классе информатику у нас вела препод из ВУЗа — она читала реально лекции, и про системы счисления, постфиксные/префиксные записи и тп. И спрашивала жестко. Тогда женская половина класса чуть не застрелилась, им ведь надо «5»-ки получать, а как непонятно. Зато некоторые научились не бояться троичной системы счисления :)
Ну на самых отстающих никто не ориентируется, ориентируются на «среднего ученика». Звучит примерно как «средняя температура по больнице», и тем не менее, именно средние ученики составляют большинство. Сделай программу проще — тем двум-трем талантливым станет неинтересно и они начнут деградировать, сделай сложнее — и средние ничего не поймут.

Потому и нужен баланс, золотая середина. И потому придумана специализация, углубленное изучение определенных предметов, лицеи и гимназии. Школа ведь должна учить всех, а не только самых лучших.
Да, это правда, поэтому и грустно и холивары.
Сам часто задумываюсь об обучении собственных детей в домашнем режиме. Не факт конечно, что обстоятельства позволят, и очень много социальных тонкостей.
Это что) у нас в ВУЗе на конференции был 9ти классник который написал 3д движок с физикой и антиалиасингом. Все в шоке были.
UFO just landed and posted this here
Думаю большая доля истины есть в Вашем предположении. Там кстати можно из корня сайта полазить, есть кое-какие исходники на текущие задачи 10класса.
А между тем наткнулся на интересную ссылку олимпиады по программированию в Москве, 2012/13 учебный год. Задачи вроде неплохие, и разнообразие допустимых инструментов для решений в принципе радует. Непонятно только, это рассчитано на уровень обычных школ?
UFO just landed and posted this here
Не так давно окончил школу с углублённой информатикой. Сейчас оканчиваю университет по специальности «Программное обеспечение ВТ и АС». Даже в университете редко увидишь преподавателя, который может вышеозначенные пункты правильно донести. От школьных учителей преподавания «правильного ООП» или «изящества и функциональности» ждать не стоит.
А вот низкоуровневые вещи, как-то: ссылки, указатели, как устроен вызов функции, как исходный код компилируется, как это всё выглядит в байтах, вполне можно. И не нужно будет потом тратить на это бессонные ночи.
О моя специальность. Какой ВУЗ? У нас вроде все очень достойно объяснялось. Цифровая схемотехника + микроконтроллеры полностью открыли глаза на устройство компьютера, а ТЯП + ОС + Структуры и алгоритмы и др. полностью посвятили меня в программирование.

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

Да больше половины программистов до сих пор этого не знают =)
Я сказал по этому поводу уже тут: habrahabr.ru/post/162139/#comment_5567473
Что значит «до сих пор?» Наверное, раньше это знала заметно бОльшая доля программистов.
Хотя нет. Программисты на PL1, наверное, очень испугались бы, увидев откомпилированный код. Тогда языки были гораздо сложнее, чем С.
Сибирский Федеральный Университет. У нас тут туговато с предметами по специальности. Есть, конечно, несколько очень и очень достойных преподавателей, но общая картина грустновата.
Да ВУЗ — это одно. Нормальными программистами станут не многие. Кто консультантом, кто в тех.поддержку пойдет… кого мама втыкнет куда надо. Для того чтобы быть программистом надо уже с 3-4 курса работать начинать, либо иметь свой проект, а лучше всего участвовать в опенсурсах. Универ дает только новые нейронные связи в мозгу =) и учит эти нейронные связи создавать. Опенсурс — наше все. Для начала править баги. Вон в Qt их полно. Бери любой и правь, потом уже и нормальные тикеты брать можно. Вот где реальный опыт для студентов. Я бы пошел в Qt necessitas допилвать, если бы студентом был =)
У меня всё в порядке. И с работой, и с получением знаний/навыков. Я просто поделился переживаниями по поводу процесса обучения в образовательных учереждениях :-)
нужно классику учить: Кнута первый том полностью, второй и третий частично.
Теория автоматов и графов и дискретная математика тоже пригодятся, только не сильно глубокого изучения. Главное понять суть и абстракции которые каждая теория представляет, а там уже можно самому углубится где надо.
Обращаюсь к некоторым комментаторам выше. Вы это серьезно? Имеется в виду, что человек пришел на уроки информатики, не имея представления о программировании вообще. И вы желаете, чтобы его сразу учили ассемблеру и задавали читать от корки до корки Кнута?
Я считаю, что лучше всего начинать учиться на человекопонятных языках — бейсике и (что лучше) питоне. Бейсик, хоть уже почти не используется, действительно прост для изучения (особенно QuickBasic). Узнав основы на нем, можно переходить к более сложным языкам, типа паскаля и си. Питон же немного сложнее бейсика, но зато и более актуален, а значит, можно применять навыки, не переучиваясь.
И будете писать простые задачи типа найти корни трехчлена. И потом это будет множится на каждый новый язык. А какую-нибудь задачу с рекурсией человек вообще не будет понимать как сделать.
Даю как тестовое задание для программистов простую достаточно задачу с рекурсией, 9 из 10 студентов (4-5 курс) не могут придумать как это вообще завернуть.
Научить рекурсии и выполнению сложных задач можно практически на любом языке программирования. В данном случае проблема не языка, а учителя.
Причем думаю, учить программировать лучше всего на примере игр. Играть любят все, многим интересно сделать свою игру (хотя бы крестики-нолики). Ну а в ходе всего этого можно уже и освоить язык, и научиться оформлять код, и подучить смежные науки типа геометрии и тригонометрии.
Если же информатику ведет какая-нибудь бабушка под 80 лет, которая БЭСМ помнит, а ничего сложнее PRINT 1+2 не знает, то выводы соответствующие.
кстати да, в играх приходится использовать почти весь арсенал алгоритмов.
А зачем тригонометрия в крестиках-ноликах? Чтобы рисовать нолик?
Не в крестиках-ноликах, их я привел как пример самой простой игры. Тригонометрия нужна, например, для стрелялок (нахождение угла между двумя точками).
UFO just landed and posted this here
Та бабушка, которая вела информатику в школе у нас, была оператором, а не программистом.
UFO just landed and posted this here
>И будете писать простые задачи типа найти корни трехчлена.
И чем это плохо для начала?

>А какую-нибудь задачу с рекурсией человек вообще не будет понимать как сделать.
Basic или Python не поддерживает рекурсию?
Для начала пускай научаться рисовать диаграмму алгоритма по нахождению корней трехчлена.
А потом уже хоть на Бейсик хоть на Паскаль переводят.

Бейсик по-моему не держит рекурсию, по крайней мере тот на котором я в начале 90-х писал :)
Написать GOSUB так, чтобы он не держал рекурсию, довольно сложно. Это только разработчикам Фортрана удалось.
А вот использовать рекурсию без стека данных и без локальных переменных — это интересная задача. Заодно и научатся свой стек писать. На бейсике.
На q-бейсике рекурсии делаются элементарно (ограничение стека до ~30 вызовов в глубину, зато учит понятию стека). Или вы о чем-то другом?
Ответственности и компетентности. Этого достаточно. Хотя это скорее личностные качества. Но что такое программист как не личность.
Давать интересные алгоритмические олимпиадные задачи, простые, потом посложнее. Когда видно, как какой-либо метод применяется для чего-то конкретного. Давать школьнику сходу кучу теории не объясняя ее значения — значит отбить у него всякое желание этим заниматься.
Вообще говоря, фиксироваться на каком-то языке в школе — моветон. Лучше всего начать с бейсика, дать общее представление об алгоритмах, типах задач и методах решения, а потом сделать набор курсов вида «задача + язык», типа «веб-страница — HTML + JS», «динамическая веб-страница — PHP + MySQL», «программу с GUI — Delphi», «программа с GUI — C#, .Net», «парсинг текста — Perl». И так далее. Не влазить в каждый конкретный язык, а несколько уроков обзора нового языка с отсылками к ранее изученному, и всё это — применительно к задаче. Имхо, так будет лучше усваиваться. Конечно, было бы интересно как-то вписать сюда эзотерику типа Haskell, Erlang, и прочих — но я сам, честно говоря, слабо себе представляю, как это сделать.
на Erlang можно запросто какой-либо REST сервер замутить несложный.и устойчивый.
Согласна с первым оратором: Паскаль и Бейсик в школе очень помогает.
По своему опыту скажу, что грамотный подход преподов в школе помог вырасти не одному десятку классных программистов, а именно:
Почти обычная Питерская школа без уклонов в конце девяновстых:
Со 2 класса информатика (сразу Винда 95-98 + пейнт + ворд + логомиры //самое лучшее для детей того времени)
С 7 класса Бейсик
С 8го — теория сетей как факультатив (занятия вел местный сисадмин, Игорь, спасибо тебе!)
//От модели OSI до сборок-починок-проектирования локалки.
С 9го — Паскаль
Параллельно предлагалось участвовать во всяких олимпиадах и конкурсах, в том числе по WEB.
10-11 — Cи как факультатив, при этом на основных уроках была и «нормальная» информатика вплоть до основ схемотехники.

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

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

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

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

Преподаватель — призвание, а не работа. Мне повезло, таких было много в жизни и я им благодарна.

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

Подозреваю что излишне сложный язык аля C++ может оттолкнуть на первых порах. Излишне навороченный python тоже не совсем к месту, вместо написания алгоритма сортировки будет проще вызвать готовую функцию.
Паскаль разрабатывался как язык для обучения программированию. Да, он морально безнадежно устарел, но до сих пор помогает с нуля въехать в алгоритмику, как минимум в универе.
На первом курсе всем будущим кодерам преподают как затравку перед Си. Явой и прочими.
А чем Паскаль так устарел? Для серьёзной работы — понятно, но для изучения основ программирования по-моему он устареет только вместе с основами.
У некоторых мозги устроены по-другому. Меня ассемблер и паскаль всегда отталкивали. Мои друзья программировали демки на ассемблере (как было модно в начале 90х) в os/2, а я, начал с qbasic. В нем прекрасно компилировались вполне объемные по тем временам (100Кб+) программы для дос. Пользователям не было никакого дела, т.к. всё работало.

Институтские лабы на паскале мне опять же написали друзья, т.к. я мог только на qbasic/Visual Basic. Объяснил, зачли успешно.

Затем перешел на Visual Basic 3 для windows 3.1 и написал собственный мейлер для своей fidonet ноды на visual basic (ради собственного интереса). Поинты были довольны, для подписки на экохонференции можно было быстро пощелкать мышью. Все успешно работало.

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

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

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

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

Я начинаю писать диссертацию на тему обучения информатики в школе так, чтобы человеку было легче стать специалистом широкого профиля. Так что с удовольствием почитаю критику и советы :)
Ничего из вышеперечисленного. Не язык определят быдлокодера. Зайдите на тот же govnokod — на практически каждом из вышеперечисленных языков найдётся куча примеров. Мне кажется, что лучше всего показать какие задачи можно решать, и заложить основы того, как их решать (желательно на языке проще чем с/c++, тот же Паскаль или Бейсик вполне подойдут).
Постараться между делом объяснить, для чего программистам нужны не только языки программирования, но и иностранные языки, особенно английский.
И главное — оценивать не только за результат работающей программы, но и за качество написанного кода. Если программисту «с детства» сходят с рук переменные вроде «a, b, c, skorost, rasstoyanie», код без отступов в одну линию и т.д — вот вам и потенциальный быдлокодер.
Вот с чего: Структура и интерпретация компьютерных программ. Имхо, лучшее что можно дать школьнику при углубленном изучении информатики. Тут вам и алгоритмы, и базовые концепции и Scheme, который достаточно примитивен, но прививает хороший стиль программирования, в отличие от Бейсика. Ну и как заметил оратор выше, необходимо прививать ответственность и прилежность, а еще сбивать юношеский гонор, которым страдает почти каждый технарь-юниор.
С точки зрения учащегося: прохожу сейчас чисто для себя два курса по питону на edx и coursera — он, как мне кажется, отлично подходит. На coursera последняя неделя, в качестве последнего мини-задания дописываем простую графическую игру, на edx сейчас основы языка закончились, переключились на мат. статистику.

Для хорошего результата очень важны интересные задания, не слишком сложные, но также заставляющие подумать. В обоих курсах для заданий, к примеру, обычно уже даются общие шаблоны с описанием нужных классов, к которым ты дописываешь необходимые методы и функции. Таким образом необходимая для завершения задачи работа уже не представляется совершенно невыполнимой, а ты просто по шагам добавляешь нужный функционал, добавляя +1 к самоуважению в конце за выполненную задачу.
Отличный программист(и любой другой специалист) — это человек увлеченный, получающий удовольствие от плодов своей работы, ему нравится развиваться, учиться и обучать. Чтобы таким стать, нужно чтоб тебя заразили, в хорошем смысле этого слова. Показали как реализовать именно твои идеи. Углубленное изучение должно строится на эвристических методах. Когда есть индивидуальные сквозные задачи для каждого слушателя, растягивающиеся на весь курс обучения.
Алгоритмы можно начинать с машины Поста или Тьюринга. Показать сложение и копирование числа, и попросить написать умножение. При наличии красивого интерпретатора детям (особенно тем, которые любят занимательные задачи) может понравиться — ты пишешь строчки, а она галочки таскает. Но это не 9-11 класс, а несколько раньше, вероятно, 6-8.
А дальше — зависит от того, что конкретный учитель понимает под «отличным программистом», к какому уровеню разработки он хочет готовить детей. И что именно в программах ему кажется недопустимым. Сначала убедиться, что школьники смогут решить квадратное уравнение на Паскале, а потом объяснять, как правильно программировать (с его точки зрения).
По опыту — половина студентов пугаются if вложенного в if. А вы о школьниках говорите.
Для начала — Паскаль — ведь он был спроектирован именно для обучения.
Для начала питон и попробовать машкод какой-нибудь простенькой железки (чтоб зажгли светодиод, например) — чтобы понимали, что там внизу.
Информатика не то же самое, что программирование. Поэтому ничего из перечисленного.
В школе, где я учусь, в математическом классе начинающих учат Python'y.
Печально, что автор поместил в одну категорию BrainFuck и Perl
Некоторые программы на Perl выглядят как программы на BrainFuck
Я писал целый пост про учёбу. Конкретно про информатику вот
1. Информатика. Первые полгода нас познакомили с тем что такое Windows, дали понятие окна, папки, файла, научили перемещать, копировать, разъяснили что есть ярлык а что файл и т.д. Только первые пол года, потом мы полтора года на уроках информатики не видели компов. Изучали системы счисления, булеву алгебру и прочие необходимые вещи. Практически весь университетский курс дискретной математики, кроме кодирования и шифрования. Потом программирование на Паскале, затем HTML, SQL, проектирование БД. Всё это очень развивает мозг. Да, я применяю всё это на практике сейчас, хотя многие не применяют, но они научились не бояться неизвестного. Я считаю это идеальной учебной программой по информатике.
1. Не должно быть специализации «Информатика». Нужна специализация «Математика»
В рамках этой специализации углубленно изучаются ВСЕ точные науки
Иначе это получается уже не школа, а техникум.

2. Не надо стремиться сделать готового программиста после школы (см. про техникум). Готовый программист получается после целого ряда образовательных ступеней.

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

предмет «Информатика» в том виде, в котором есть просто убивается.
вместо него создается 2 предмета: «Логика» и «Информатика»

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

цель предмета «Информатика» — изучение прикладных инструментов, систем обработки информации
В рамках предмета изучается
Paint ))
Word/Excel, фотошоп
сайтостроение
умение пользоваться инетом для поиска информации/ответов на произвольные вопросы.
какой-нибудь высокоуровнывый язык программирования. Детям надо все и сразу: первая программа должна быть написана сразу после изучения программирования, дальше у ребенка должно быть достаточное понимание чтобы НАЧАТЬ писать.
Программирование должно быть не какой-то непонятной вещью, а инструментом творчества.
Также в предмет должны быть включены понятия о корпоративных информационных системах, потоках информации, бизнес процессах — естаственно, на обзорном уровне.
И обязательно базовые понятия о защите информации.

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

Отличия между углубленными и неуглебленными в технические науки классами в предмете «Логика»
У гуманитариев и медиков часы режутся на нем
А информатика дается в несильно меньшем объеме — в ней то теперь изучаются прикладные вещи.
UFO just landed and posted this here
В 2006, будучи студентом второго курса, полгода вел факультатив по информатике в школе в 8-9 классах. Мои соображения:

1) Вводный курс. Архитектура ЭВМ, роль операционной системы, исполнение программ, современные уровни абстракции, классификация и области применения ЯП, эволюция ЯП и парадигмы. ИТ — индустрия. Процедурное программирование, язык не принципиален.
Цель курса — показать что программирование это не магия, дать базовые знания и культуру.

2) ООП и технология разработки. На примере мэйнстрим языка (Java, С#). Я бы построил курс вокруг решения одной задачи на протяжении курса.
Цель курса — дать инструмент для дальнейшего обучения и развития.

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

Было бы замечательно при обучении использовать какую-нибудь платформу типа Lego Mindstorms и адаптировать для нее учебные задачи.
Расскажу как было у меня в школе (2006 год выпуска. Школа 444 с углублённым изучением математики, физики, информатики ).
8 класс — теоретическая информатика. Системы счисления, самые простенькие алгоритмы. Из чего состоит компьютер. ФСы Команды DOS, скриптование bat файлов.
9 класс — turbo pascal. Основы, алгоритмы. Понятие процедуры, функции. Массивы под конец года. +обзорный курс по ворду на пару недель с призывами верстать всё-таки стилями =)
к 10 классу класс делился на две группы программисты и пользователи. Пользователи углублённо осваивали ворд, эксель, фотошоп и корел.
Программисты проходили 1 полугодие — более углублённо паскаль, (у меня полугодовой реферат был сравнение 3х различных видов сортировки.). 2 полугодие — устройство ЦПУ, ассемблер x86. Самые простенькие программы для пирмера. Основная идея в теоретической части объяснить что есть регистры, есть стек и т.д.
11 класс «программисты» — формошлёпство на delphi, введение в базы данных, подключение из Delphi к базам данных.

К сожалению бОльшая часть этой программы выпилена сейчас из-за введения ЕГЭ.

Я считаю, что не надо учить языку программирования. Надо учить алгоритмам, внутреннему устройству компьютера и, главное, делать это интересно. А прогаммировать можно и танчики в 3D (например, colobot). Чтобы нагляднее было.
Кроме как ООП иной теории и не увидел. Необходима в первую очередь теория, а не сразу конкретные языки программирования.

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

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

Что-то в этом духе, как мне кажется.
На западе статью назвали бы «Как воспитать программиста звезду или инди-программиста», а у нас среднестатистическое быдло напишет про быдлокодеров.
По-моему, хорошим вариантом будет использовать JavaScript.
— Всегда доступен, всегда есть на любой машине, в том числе дома, запускается даже на смартфоне.
— Синтаксис очень краток и понятен (не вдаваясь глубоко в детали, можно даже без прототипов)
— Можно без проблем обучаться алгоритмам и технологиям типа рекурсии или поиска по регуляркам (очень полезный навык кстати, не только для программиста).
— Не нужно вдаваться в особенности выделения памяти, компиляции и линковки библиотек.
— В жизни приносит пользу (юзерскрипты)
— Браузерный JS тесно связан с другими ECMAScript-технологиями, например NodeJS, ActionScript, можно писать даже сценарии обработки изображений в Photoshop-е.
— В будущем упростит усвоение других языков.
— Это интересно и «жизненно», особенно для школьника.
Некоторое время назад я обучал лиц 17-20 лет основам информатики и программирования. Устоявшаяся программа обучения содержала ассемблер, паскаль, си, делфи и пролог (именно в таком порядке). После ассемблера у обучаемых заметно снижался интерес к информатике, за единичными исключениями. Я дополнительно проводил обзоры php и js. В последствии, ассемблер, паскаль и делфи были убраны из программы, и заменены на html и js. Эта технология наиболее живо интересовала большинство обучаемых, и вызывала волну энтузиазма, поскольку до этого многие не понимали пользы от абстрактных знаний информатики, пока не столкнулись с реальностью в виде понимания устройства любимых интернет-страничек. Это особенно было заметно на сокращении доли поддельных самостоятельных работ.
Многие знакомые не понимают даже на русском языке алгоритм работы программы, поэтому считаю необходимо научить логически мыслить и строить алгоритмы (блок схемы пускай рисуют для решения типовых задач). Ну и конечно же теория баз данных — они то везде пригодятся.
UFO just landed and posted this here
UFO just landed and posted this here
(с) «Мессаджбоксы созданы для отладки!»
Я бы предложил сразу web приложения на C# (или Ruby).

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

А веб сам по себе перспективное направление и позволяет достаточно быстро получать интересные результаты в той области, в которой всё будущее поколение крутиться и общается (интернет) — детям будет интересно.

Пункт «Понятное ООП, скорость разработки, высокочитабельный код» очень заманчив, но это оттолкнёт очень много детей от программирования — это хоть и очень нужные знания, но реально понять их (нужность и полезность ООП особенно) можно только с возрастом и опытом. Это такое же, как давать Войну и Мир или Преступление и наказание в школе — реально прочтут и вникнут единицы, остальные вас (как учителя) за это тягомотину возненавидят.
Голосую за Python || Ruby. Но так же и очень важно заинтересовать учеников.

Почему? На своем примере: программированием заинтересовался лет в 12 на встроенном в WarCraft JASS. Язык по возможностям слабее даже паскаля, но, что оказалось немаловажно, очень прост (хотя и многословен), встроен в игру, и вместо сидения в консоли я занимался более реальными вещами — писал заклинания, системы вроде движения юнитов, etc. Позднее познакомился с препроцессорами vJASS и cJASS, которые добавляли кучу плюшек, и, что немаловажно, эмулировали ООП. Это был как глоток свежего воздуха :)

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

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

Вы хорошо знакомы с разработкой под веб? Можно сделать простой сайтик с учениками на Sinatra/Flask, а позже прикрутить интерфейс на бутстрапе. Я был бы такому рад :)

Правда, по паскалю много литературы, как раз таки школьного / олимпиадного направления, и на всяких олимпиадах никаких Ruby/ Python обычно не бывают. Но выучить паскаль, зная эти языки, будет намного легче.
Эх никто тут sicp не вспомнил
Только паскаль и асм на факультативах. Это в сумме даст понятие о работе компа внутри и алгоритмах в целом.
Мне кажется, нужно преподавать логику, алгоритмы, паскаль для строгости и факультативно руби али питон для простоты.

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

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

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

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

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

Так что, 9-11 класс — это основы алгоритмизации, которые лучше давать на Pascal.
1 этап: (алгоритмы + структуры данных + устройство компа) + Python (можно паскаль, но зачем, если юзаться потом не будет?) для практики
2 этап: (дискретка + компьютерные сети) + C/C++
3 этап: дискретка (теория множеств и тд.) + ООП (Java/C#) и SQL
Далее по желанию — advanced матан (типа теории категорий) и ФП (LISP/Scala/F#/Haskell...), ну или углубление в низкий уровень (архитектуры, ассемблер и тд).

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

P.S. А теперь прикиньте, что учителей, знающих хотя-бы питон вы не найдете, и продолжайте учить паскаль (хорошо если не ВАСИК).
> Python (можно паскаль, но зачем, если юзаться потом не будет?)

А питон все будут юзать? :) Что за бред. Паскаль идеален для изучения алгоритмов.
Я не большой любитель питона, но его область применения на несколько порядков шире области применения паскаля, так что ответ — «да, вероятность того, что питон потом будут юзать очень и очень велика».

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

Учить нужно то, что пригодится в дальнейшем. Учить искусственную промежуточную сущность — неправильно, печально, что это вошло в привычку. Ладно бы не было аналогов — допустим, говорят что С сложен для школьников, или что C# и Java навязывают ООП парадигмы — но когда есть возможность использовать хотя бы более менее полезный язык с тем же успехом что и учебный, глупо от него отворачиваться.

А вообще я бы С давал, чистый, без плюсов. Но им не заинтересовать школьников, не будут они радоваться черной консольке. А без интереса это все пустое занятие. Значит, либо делать свою «песочницу», то бишь фреймворк, отгораживающий их от страшных апишек, но дающий возможность сделать что-нибудь интересное, либо юзать язык, где подобное уже в том или ином виде есть (Шарп, Ява, Питон — в питоне вообще куча легковесных фреймворков для окошек), либо — учить низкому уровню с привязкой к железкам (типа АВРок) и пытаться заинтересовать роботами.
> Учить нужно то, что пригодится в дальнейшем.
Почему? Как определить, что выбранный язык понадобится школьникам через 7 лет (2 года школы + 5 лет универа)?

> А вообще я бы С давал, чистый, без плюсов.
Согласен, но после паскаля. В обратном порядке были эксперименты и неудачные. Усвояемость разная :) Паскаль как бульёнчик.

З.Ы. А меня вполне устаивает как учился я. Школа — Кумир, Паскаль. Универ — Пакаль, Асм, С, С++, C# с паттернами. А все остальные языки очень быстро учаться после такого списка.
Ну так я же сказал как определить — вероятность того, что понадобится питон много выше вероятности того, что понадобится паскаль. Потому что у него область применения широчайшая. Я вот даже и не думал что по моему роду деятельности он пригодится, а вот пригодился. Поэтому можно применить вероятностный подход и учить то, что вероятнее всего пригодится, т.к. при всем при этом он позволяет точно также обучить алгоритмам и прочим начальным навыкам.

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

Да меня тоже устраивает, как я учился. Школа при этом не дала и тысячной доли процента — я начал учиться программированию лет в 8, на бейсике, во Дворце Пионеров. К началу школьной информатике в 8м классе (или когда она там? в 7м?) уже давно кодил под винду в ВБ и Борланд С++ билдере, поэтому идиотская программа информатики воспринималась как издевательство.

Вуз тоже ничего не дал в этом плане, увы. Хотя и Бауманка.
Поэтому важнее всего личная заинтересованность. Самое лучшее, что может сделать преподаватель — заинтересовать в предмете.
Вероятность использования питона через 7 лет, такая же как и паскаля. (Как и любого другого ЯП). Все ЯП развиваются, рождаются новые и т.д. По этому через 7 лет питона в таком виде как сейчас может и не быть, а паскаль может развится дальше.
Совсем не такая же. Области могут слегка поменяться, но не более.
Поглядите на С (без плюсов который). Да, его постоянно теснят, но он более чем используем остался (ядро линукс, эмбеддед).
Дело в том, что паскаль уже отмер, а питон вот только родился недавно и только что выбился в топ-10 языков программирования) — так почему бы не повысить свои шансы и не учить языку из топ-10, когда он дает все то же что и паскаль, но дополнительным бонусом — настоящую применимость. Которую вполне можно отметить на первом занятии и привести соответствующие примеры.
Так давайте с пхп начнем, он все еще более популярен питона. Или с перла, он тоже рядом. Как будто популярность языка увеличивает скорость (и качество) обучения программированию.
Ох. Ну какая часть выражения «широкая область применения» вам не ясна?
Вы на ПХП напишете прикладной софт для эмбеддед системы?
Или десктопное приложение? Или скрипты автоматизации линуксовые?

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

> Или десктопное приложение?
php-gtk

> Или скрипты автоматизации линуксовые?
да

Никто не говорит, что это будет весело, но возможно. (и даже на паскале это возможно — fpc)

З.Ы. pascal + delphi популярнее Obj-C, хаскеля и многих других ЯП.
Не лукавьте, с таким решением вы далеко не уедете, это будет уровня бреинфака.
У вас не будет огромного набора библиотек (потому что, в отличие от питона, это не целевое использование ПХП), у вас будут проблемы с «запиливанием интерпретатора» туда, куда не надо и тому подобные вещи.
Заметьте, библиотек — не традиционно-пхпшных, для веба, а библиотек, которые могут пригодиться в эмбеддед или десктопном исполнении, а то вы ж ща начнете увиливать и приводить в пример ПхПшные фреймворки…

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

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

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

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

А когда уже вкатили туда интерпретатор питона, то и заодно и некоторые инит-скрипты на нем сделали, чего добру пропадать) Получилось куда читабельнее баша.
> все эти треды
fork

> SQLite
sqlite3 test.db «SQL QUERY;»

> работа с определенными «железными» библами
если они не кривые, то cat/echo /dev/etc…
Ну флаг вам в руки. Это опять «никто не говорил что будет весело».
Я с тем же успехом могу это тогда на С писать и получу куда более читабельный и поддерживаемый код.
Реальной причины писать это на баше нет. Я бы даже сказал нет ни одной причины, по которой человек в здравом уме это будет писать на баше)

Кстати консольного sqlite3 клиента там тоже не было. Да-да, можно заодно и его скомпилять, но вопрос с «весельем» мы уже вроде обсудили)

P.S.
Кстати, а что «cat/echo», это не с железом работа с библами, которые эту работу с железом реализуют. Там катом ничего не сделаешь.
> Кстати консольного sqlite3 клиента там тоже не было.
Питон тоже ведь собирали :)

И все равно исходя из вашего краткого описания, на баше будет короче код.
Не будет. Гарантировано не будет. Т.к кода я вам показать не могу ибо связан NDA, поверьте на слово)
Там я был совершенно не заинтересован городить велосипеды, нужно было быстрое и грамотное решение, которое бы потом было удобно поддерживать, поэтому я однозначно искал самые удобные варианты.
К тому же, та часть что с железом, я все таки думаю, нереализуема на баше без прог-хелперов на С, а если начать эти хелперов клепать, то толку в баше…

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

Но тогда имеет смысл учить С. По сравнению с паскалем, если смотреть на консольные поделки, там только с указателями может возникнуть проблема, но, имхо, те, кто заинтересован, с этим справятся. А пользы от знания С будет больше.
Си это более высокий уровень. Не школьный совсем. 1-й курс универа, но не школа.
Чем? Что в чистом С такого ужасного, чего нет в паскале?
Работа с указателями — ну да, я ее упомянул, но почему это должно в такой ужас повергать школьников 8,9,10 классов? Которым уже вот вот в вуз поступать.

Этот «первый курс универа» я сам осваивал, без учителя, классе в шестом-седьмом, проблем не возникло.
Да, когда я пытался с него начать (третий класс) — было тяжко и я его забросил. Но то, все таки, третий класс, а не восьмой. В третьем я в сторону Visual Basic пошел, после qbasic во втором.
Он меня подкупил возможностью работать не в скучном «черном экране», а с настоящими окошками.
Поэтому могу точно сказать — школьникам (особенно младшим) нужно видеть свой результат. Такой, который они могут «потрогать». А не заверения учителя что консоль это труЪ.
Это тогда еще можно было делать текстовые игрушки и играть в них с друзьями (что мы и делали когда учили тот самый QBasic), а сейчас таким уже никого не захватишь.
Потому что большинство детей в 8-м классе первый раз видят ЯП. Им нужно изучать алгоритмы и базовые структуры, а не отвлекаться на думанье, почему строки мы объявляем как массивы, что за звездочки кругом. Не совсем логичные названия методов при первом взгляде (cin vs read, cout vs write) и т.д. Паскаль больше похож на natural language (хоть и английский), по этому усвояемость лучше.
Откуда в С взялся cin?
ах да. scanf/printf задумался. но все равно это не read/write (слова которые в школе уже знают из уроков английского)
Полагаю, слова scan и print восьмиклассникам уже знакомы, и этимология названия «printf» проблем не вызовет)
Обычно дети тупят совсем не из-за названий)

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

Как вариант — притащить самодельных роботов и дать деткам их кодить, должно увлечь. Когда видишь, что результат твоей работы не просто в черном окошечке на экране, а ходит по столу рядом с тобой.
Uses graph и можно порисовать :)
Ну это уровня рисовки в Бейсике, раньше было прикольно, тем более для совсем мелкого, а потом уже надоело. А сейчас у детей и вовсе айфоны с пяти лет, будут нос воротить.

Все таки, мне кажется, чем можно реально заинтересовать — железками. Их, в отличие от софта, они вблизи не видели, будут радоваться) а на железке сделать «песочницу» чтоб не пугать их сразу регистрами и прочим, хоть на вашем паскале, если вам он так близок(хотя и туда можно питон запихать), и мелкий фреймворк типа «поднять руку робота» «поднять ногу робота».
Все остальное для современных детей будет выглядеть скудно после их айфонов, крайзисов, скайримов и прочего…
Учите писать программы, а не языку программирования.
Изучать конкретный язык это то что делает из человека быдлокодера, и счастья от того что этот кодер будет писать под PEP8 (или что там сейчас любят школьнички) не будет.
Как по мне — менять язык каждые пол года. И не важно с чего начинать.
Да, это не даст глубоких знаний конкретного языка, но это и не нужно.
Человек понимающий как пишутся алгоритмы и знающий в каком окружении работают программы без труда разберётся в особенностях конкретного языка, человек вызубривший как делать циклы и условия не напишет ничего толкового.
Да что ж вы как под копирку подобный коммент пишете, «учить надо не топором махать а рубить дрова».
Вот только чтобы дрова нарубить нужен топор. И начать надо все-таки с конкретного «топора», не забыв рассказать о том, что есть другие. Без нормальной практики от знаний ничего не останется, к тому же речь о школьниках идет. Поэтому распыляться сразу тоже смысла нет. Нужно выбрать более-менее популярный язык, не шибко заточенный под какую-то конкретную область — тот же питон вполне подойдет (хотя я сам, конечно, за С-поднобные и за что-нибудь более низкоуровневое, но школьников этим не заинтересовать). И потом базируясь на этом языке обучать последовательно алгоритмам и всему прочему, прежде всего, сумев заинтересовать. А заинтересовать можно хорошими проектами, совместным написанием простой игры, допустим.
Может я повторюсь, но не важно какой язык брать, но желательно взять что-нибудь известное типа Python/Java/C#.
Языки в которых, надо меньше думать о структуре языка, выделении памяти и т.д.

Но язык это только инструмент.

Главное в школе дать фундаментальные знания — алгоритмы: сортировка, Devide and conquer парадигма, деревья/графы, структуры данных, жадные алгоритмы и т.д.

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

Но, если цель стоит вырастить хорошего технаря надо научить ученика:
1. Искать нужную информацию и выбирать правильные инструменты
2. Работать в коллективе (класс разбить на пары/тройки и т.п.)
3. Рассказать про системы контроля версий. Это же как черновик и чистовик.
4. Аккуратность и понятность кода. Откройте любую методичку, даже по паскалю. Там мало рассказывают что такое unit и зачем они нужны, что объявления процедур и функций, это не прихоть учителя, это помогает, это упрощает работу. А
разбиение на подзадачи поможет системно мыслить и добиваться большего.

Сам лично видел, как студенты приносили курсовые:
Задача (упрощённо): прочитать файл, обработать, сделать поиск по 2ум критериям (вводится с клавиатуры запрос).
Открываешь код, а там один единственный `int main()`, простыня переменных от a до z и куча говнокода в котором даже сам студент не разбирается. Дело даже до алгоритмизации не доходит.

В школе надо закладывать основы. Мне кажется, что нужно вложить в головы школьников следующие мысли:

— Программирование опирается на серьёзный фундамент
(Двоичная система, основы дискретной математики, основы алгоритмов и структур данных)

— Программирование — это очень широкое и разнообразное поле деятельности
(2-3 ОЧЕНЬ разных языка — ну, например Питон, Хаскел, С, основы работы с базами данных, основы 3D, основы работы с сетями)

— Профессиональное программирование — это технологический процесс.
(Система контроля версий, багтрекер, обзор кода и т.п)

— Программирование — это интересно и здорово!
(Из всего вышеперечисленного сделать несколько интересных проектов, например, игры :) )
Это все частные случаи (я про варианты опроса).
А как насчет планирования и системного подхода?

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

Тогда можно будет определиться с тем, чему стоит учить.
>>> А как насчет планирования и системного подхода?
«Свой вариант предложу в комментариях»

>>> Уж молчу о том, что надо дать определение тому, кто считается программистом, и что считается отличным.
И где надо было написать определение? В заголовке опроса?
Ага, заставлять бедных детей учить самое неинтересное — алгоритмы. Ваши алгоритмы забудутся 99% школьников так же как формула дискриминанта почти всеми вашими друзьями — проверьте. Человека нужно заинтересовать, давать реальные практические и полезные задачи. А их можно давать даже с минимальными знаниями. Вот тогда в голове осядет что-то. К интересным задачам подоспеют решения — вот там и алгоритмы помогут и у школьника может даже и не возникнет вопроса «зачем они нужны».
Sign up to leave a comment.

Articles