А нужны люди, которые просто будут хорошо выполнять свою работу:
— либо в офисе, если учился на пятёрки,
— либо у станка, если учился на тройки.
Справедливости ради стоит отметить, что это не лучшая классификация. Работать за станком намного сложнее, чем, например, обзванивать соискателей или вбивать первичку.
ни один язык не может доказать корректность данных в файле на этапе компиляции.
Поэтому я сомневаюсь в полезности программы, которая проверяет размер матриц на этапе компиляции. Даже во время учебы. Особенно с целью объяснения ООП.
Скорее всего это потребует преподаватель. И это не так уж трудно сделать в варианте с 4 простыми функциями.
А вот как сделать ошибку компиляции при умножении матриц несовпадающего размера в случае загрузки матриц из файла я не знаю.
Предложите вариант, если знаете как.
ООП — это метод организации программных текстов, или способ написания программ, состоящих в свою очередь из небольших изолированных, функционально самостоятельных и законченных программ.
Примерно такое же определение можно дать термину модульное программирование. Да и все остальное в вашем тексте описывает именно необходимость выделения модулей для борьбы со сложностью. Я согласен, что это нужно и важно. Но это слишком общий взгляд на ООП.
Когда студент хочет понять ООП, он вряд ли хочет услышать рассказ смысле ООП в языке 60-70 годов. Ему нужно объяснить то, что большинство специалистов понимают под ООП сейчас. Потому что он хочет в итоге пройти собеседование и устроиться на работу. На этом собеседовании его скорее всего спросят "какие основные принципы ООП?" и будут выяснять понимание терминов: класс, абстракция, инкапсуляция, наследование, полиморфизм и т.п.
Поэтому материал для студентов должен содержать объяснение именно этих понятий. А для всяких интересующихся можно делать и исторический экскурс в модульное программирование на Simula, которое раньше называлось объектно-ориентированным.
Да хоть к процедурному. Концепция АТД существует почти везде, включая чистый С и некоторые диалекты sql.
В ООП, насколько я его понимаю, в дополнение дается возможность строить иерархии АТД (наследование+полиморфизм).
В полном понимании ФП я сомневаюсь, но оно вряд ли про то, что мы просто объявим четыре функции.
Для работы с матрицами ООП излишне. Достаточно описать абстрактный тип данных с пачкой методов: транспонирования, ранга, умножения, сложения ну и еще чего-нибудь.
если от их параллельного использования мозг не переклинило, потом уже не будут страшны ни java ни bash.
Подход "дадим им лишние трудности сейчас, кто осилит — молодец" по моему опыту ведет лишь к отсеиванию людей. Причем у тех, кто не осиливает, появляется стойкое отвращение к программированию в целом и изучаемому материалу в частности.
Почему бы не изучить сначала один язык до уверенного использования, а потом только другой?
Ну и немного отвлеченный вопрос: действительно ли нужно всем учить (пусть даже один) ЯП на информатике?
Аналогия про японский получилась не совсем удачной. Иероглифы — разные.
Алгоритмические конструкции до определенного момента для учеников/студентов выглядят именно как иероглифы. Где-то не тот символ написал — получил совершенно другой смысл. Только после множества решенных задач появляется понимание что к чему.
Наблюдал такое не только у своих студентов, но и у себя, когда изучал ФП на Scala.
Изучать второй язык есть смысл когда все идеи программирования поняты на примере первого языка. При этом помимо идеи "они все очень похожи" должна быть идея "каждой задаче свой инструмент".
Конечно, иногда всегда в классе находится один человек, который хочет «изучать программирование». Тогда всем остальным в класее приходится делать то же самое.
При всем уважении к автору, я не согласен с этим тезисом. Если задача — научить пользоваться компьютером, и ваш материал построен так, чтобы развивать навыки пользователя, то будет неправильно все бросать и ради одного ученика грузить всех программированием, тем более если нет знакомого вам материала.
Такому умнику лучше дать хороший самоучитель. Раз он спросил сам, то сам сможет и научиться. Вот тут обсуждали книги по питону. По плюсам можно взять "Программирование, принципы и практика с использованием С++" Страуструпа. Лучшее, что может сделать преподаватель в этом случае — отвечать на возникающие вопросы.
Если же желающих изучать программирование большинство, то преподавателю невероятно повезло. Такой класс лучше сразу учить программировать, без извращений с "пользовательским программированием" и вводом тысячи значений в эксель.
Насколько я помню, еще существует ЕГЭ по информатике. В старших классах, я полагаю, желающим сдавать информатику лучше помочь именно с подготовкой к ней.
Извините конечно, но наверное вам дальше курсов профессиональной подготовки больше нигде не преподавать.
Вы упоминаете курсы профессиональной подготовки в каком-то негативном ключе. Как будто такие учителя ни внимания, ни уважения не заслуживают. А ведь им приходится проявлять настоящее мастерство, чтобы понятно объяснять простым людям весьма сложные и абстрактные материи. Это намного сложнее, чем объяснять высшую математику выпускникам-медалистам в универе. Отличники иногда и сами сообразят, если преподаватель не смог объяснить.
Автор — большой молодец, что на своей невысокооплачиваемой работе не зарос мхом и пробует что-то делать.
Поэтому то, что пытаются преподавать в школах таким образом под названием «Информатика и ИКТ» является по сути своей уроками труда современности.
А почему бы и нет? В современности очень востребованы навыки набора текста, оформления текста, таблиц, изображений и писем. Где этому учиться, если не в школе? В вузе? Или тоже оставить на самообразование и специальные курсы?
При этом, я считаю, что содержание уроков труда и сейчас актуально в части работы с (острыми) инструментами, деревом, металлом, чертежами, а также с продуктами питания и рецептами, тканью и выкройками. Материальный мир вокруг нас все еще существует.
Знаю одного деревенского учителя труда далеко за Уралом. Он добился установки в мастерской современных деревообрабатывающих станков, чтобы мальчишки из его села умели работать руками. Золотой человек. Побольше бы таких.
Любопытно, что вместо одного сугубо профессионального навыка "десятипальцевая печать" предлагается уделять больше времени намного более специальному профессиональному навыку "программирование". А ведь простых пользователей пк с клавиатурой намного больше, чем программистов.
Поэтому если цель обучения — дать максимум полезных знаний и навыков, то рациональнее развивать более универсальный навык, т.е. десятипальцевую печать.
Другое дело, если цель — профориентация. В этом случае десятипальцевая печать является вспомогательным навыком, в который нужно вкладывать время для ускорения выполнения заданий.
Спасибо за статью. Интересное решение.
Можно ли прятать код, который отвечает за построение графика?
Как вы думаете, насколько трудоемкой будет реализация фичи: при нажатии на точке графика вывести детализацию по ней?
А вы уверены, что сами делаете правильно?
Останется ли ваше "правильно" таким же, если его перенести в другую прикладную область?
Если учить конкретным алгоритмам, то запросто можно получить на выходе человека, который всегда будет руками сортировки писать.
Именно поэтому целью обучения должен быть образ мышления. В том числе умение систематизировать информацию и дообучаться при необходимости.
Обработка показаний от множества датчиков (например температуры) и построение температурной карты в реальном времени.
Высокие нагрузки они относительны. При отсутствии денег можно ограничить процесс по ресурсам. Проблема только в поставщиках данных. Кто нагружать то будет?
Разговаривать предметно на одном алгоритме пузырьковой сортировки не получится. Какие еще алгоритмы вы считаете ценными? Какой критерий ценности?
В игре "морской бой" при реализации честного компьютерного противника (который не стреляет прямо по кораблям игрока) есть задача выбора цели таким образом, чтобы была наибольшая вероятность попадания в корабль.
Поначалу то все просто. Стреляй в каждую четвертую ячейку и все. А если потоплен хотя бы один корабль противника? Как выбрать из оставшихся такую ячейку, чтобы была наибольшая вероятность?
Какой классический алгоритм подходит для решения этой задачи?
Что именно вы считаете алгоритмами, которые нужно изучать?
Оформите конкретный список и можно будет предметно поговорить. Либо в морском бое найти применение, либо другую задачу выбрать.
Справедливости ради стоит отметить, что это не лучшая классификация. Работать за станком намного сложнее, чем, например, обзванивать соискателей или вбивать первичку.
Поэтому я сомневаюсь в полезности программы, которая проверяет размер матриц на этапе компиляции. Даже во время учебы. Особенно с целью объяснения ООП.
Скорее всего это потребует преподаватель. И это не так уж трудно сделать в варианте с 4 простыми функциями.
А вот как сделать ошибку компиляции при умножении матриц несовпадающего размера в случае загрузки матриц из файла я не знаю.
Предложите вариант, если знаете как.
Примерно такое же определение можно дать термину модульное программирование. Да и все остальное в вашем тексте описывает именно необходимость выделения модулей для борьбы со сложностью. Я согласен, что это нужно и важно. Но это слишком общий взгляд на ООП.
Когда студент хочет понять ООП, он вряд ли хочет услышать рассказ смысле ООП в языке 60-70 годов. Ему нужно объяснить то, что большинство специалистов понимают под ООП сейчас. Потому что он хочет в итоге пройти собеседование и устроиться на работу. На этом собеседовании его скорее всего спросят "какие основные принципы ООП?" и будут выяснять понимание терминов: класс, абстракция, инкапсуляция, наследование, полиморфизм и т.п.
Поэтому материал для студентов должен содержать объяснение именно этих понятий. А для всяких интересующихся можно делать и исторический экскурс в модульное программирование на Simula, которое раньше называлось объектно-ориентированным.
Да хоть к процедурному. Концепция АТД существует почти везде, включая чистый С и некоторые диалекты sql.
В ООП, насколько я его понимаю, в дополнение дается возможность строить иерархии АТД (наследование+полиморфизм).
В полном понимании ФП я сомневаюсь, но оно вряд ли про то, что мы просто объявим четыре функции.
Достаточно большое и сложное надо долго писать. Но это наверное единственный работающий способ.
Для работы с матрицами ООП излишне. Достаточно описать абстрактный тип данных с пачкой методов: транспонирования, ранга, умножения, сложения ну и еще чего-нибудь.
Аналогия класс-чертеж, объект-изделие действительно намного лучше, чем попытки объяснить что "коты вообще это класс, а Матроскин — инстанс".
Как то странно объяснять абстрактные классы до того, как объяснены методы и понятие инстанса класса.
Далее возможные вопросы от слушателей:
Подход "дадим им лишние трудности сейчас, кто осилит — молодец" по моему опыту ведет лишь к отсеиванию людей. Причем у тех, кто не осиливает, появляется стойкое отвращение к программированию в целом и изучаемому материалу в частности.
Почему бы не изучить сначала один язык до уверенного использования, а потом только другой?
Ну и немного отвлеченный вопрос: действительно ли нужно всем учить (пусть даже один) ЯП на информатике?
Далеко не всегда. Заметное количество слушателей "приводит" служба занятости, родители, руководство предприятия и т.п.
У взрослых характеры тоже могут кардинально различаться. Плюс играют роль всякие приобретенные психологические особенности.
Алгоритмические конструкции до определенного момента для учеников/студентов выглядят именно как иероглифы. Где-то не тот символ написал — получил совершенно другой смысл. Только после множества решенных задач появляется понимание что к чему.
Наблюдал такое не только у своих студентов, но и у себя, когда изучал ФП на Scala.
Изучать второй язык есть смысл когда все идеи программирования поняты на примере первого языка. При этом помимо идеи "они все очень похожи" должна быть идея "каждой задаче свой инструмент".
При всем уважении к автору, я не согласен с этим тезисом. Если задача — научить пользоваться компьютером, и ваш материал построен так, чтобы развивать навыки пользователя, то будет неправильно все бросать и ради одного ученика грузить всех программированием, тем более если нет знакомого вам материала.
Такому умнику лучше дать хороший самоучитель. Раз он спросил сам, то сам сможет и научиться. Вот тут обсуждали книги по питону. По плюсам можно взять "Программирование, принципы и практика с использованием С++" Страуструпа. Лучшее, что может сделать преподаватель в этом случае — отвечать на возникающие вопросы.
Если же желающих изучать программирование большинство, то преподавателю невероятно повезло. Такой класс лучше сразу учить программировать, без извращений с "пользовательским программированием" и вводом тысячи значений в эксель.
Насколько я помню, еще существует ЕГЭ по информатике. В старших классах, я полагаю, желающим сдавать информатику лучше помочь именно с подготовкой к ней.
Вы упоминаете курсы профессиональной подготовки в каком-то негативном ключе. Как будто такие учителя ни внимания, ни уважения не заслуживают. А ведь им приходится проявлять настоящее мастерство, чтобы понятно объяснять простым людям весьма сложные и абстрактные материи. Это намного сложнее, чем объяснять высшую математику выпускникам-медалистам в универе. Отличники иногда и сами сообразят, если преподаватель не смог объяснить.
Автор — большой молодец, что на своей невысокооплачиваемой работе не зарос мхом и пробует что-то делать.
А почему бы и нет? В современности очень востребованы навыки набора текста, оформления текста, таблиц, изображений и писем. Где этому учиться, если не в школе? В вузе? Или тоже оставить на самообразование и специальные курсы?
При этом, я считаю, что содержание уроков труда и сейчас актуально в части работы с (острыми) инструментами, деревом, металлом, чертежами, а также с продуктами питания и рецептами, тканью и выкройками. Материальный мир вокруг нас все еще существует.
Знаю одного деревенского учителя труда далеко за Уралом. Он добился установки в мастерской современных деревообрабатывающих станков, чтобы мальчишки из его села умели работать руками. Золотой человек. Побольше бы таких.
Любопытно, что вместо одного сугубо профессионального навыка "десятипальцевая печать" предлагается уделять больше времени намного более специальному профессиональному навыку "программирование". А ведь простых пользователей пк с клавиатурой намного больше, чем программистов.
Поэтому если цель обучения — дать максимум полезных знаний и навыков, то рациональнее развивать более универсальный навык, т.е. десятипальцевую печать.
Другое дело, если цель — профориентация. В этом случае десятипальцевая печать является вспомогательным навыком, в который нужно вкладывать время для ускорения выполнения заданий.
Спасибо за статью. Интересное решение.
Можно ли прятать код, который отвечает за построение графика?
Как вы думаете, насколько трудоемкой будет реализация фичи: при нажатии на точке графика вывести детализацию по ней?
А вы уверены, что сами делаете правильно?
Останется ли ваше "правильно" таким же, если его перенести в другую прикладную область?
Если учить конкретным алгоритмам, то запросто можно получить на выходе человека, который всегда будет руками сортировки писать.
Именно поэтому целью обучения должен быть образ мышления. В том числе умение систематизировать информацию и дообучаться при необходимости.
В 1983 году именно по этой причине был создан C++.
Обработка показаний от множества датчиков (например температуры) и построение температурной карты в реальном времени.
Высокие нагрузки они относительны. При отсутствии денег можно ограничить процесс по ресурсам. Проблема только в поставщиках данных. Кто нагружать то будет?
Разговаривать предметно на одном алгоритме пузырьковой сортировки не получится. Какие еще алгоритмы вы считаете ценными? Какой критерий ценности?
В игре "морской бой" при реализации честного компьютерного противника (который не стреляет прямо по кораблям игрока) есть задача выбора цели таким образом, чтобы была наибольшая вероятность попадания в корабль.
Поначалу то все просто. Стреляй в каждую четвертую ячейку и все. А если потоплен хотя бы один корабль противника? Как выбрать из оставшихся такую ячейку, чтобы была наибольшая вероятность?
Какой классический алгоритм подходит для решения этой задачи?
Что именно вы считаете алгоритмами, которые нужно изучать?
Оформите конкретный список и можно будет предметно поговорить. Либо в морском бое найти применение, либо другую задачу выбрать.