2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
 
 Re: Преподавание программирования
Сообщение19.03.2019, 10:16 
Заслуженный участник
Аватара пользователя


01/08/06
3049
Уфа
Так он же там прячется, прикидывается совсем нестрашным. Пока детишки поймут, как жестоко над ними издеваются — а детство-то уже и прошло :D

 Профиль  
                  
 
 Re: Преподавание программирования
Сообщение19.03.2019, 10:19 
Заслуженный участник
Аватара пользователя


01/09/13
4318
ewert в сообщении #1382786 писал(а):
А я ещё и Матлаб накину.

Матлаб хорош, но:
1. платный
2. у него в основе матричные вычисления
3. отсутствует передача параметров по ссылке
4. множественность возвращаемых значений (что порождает неприятные ограничения по синтаксису)

-- 19.03.2019, 10:19 --

rockclimber в сообщении #1382789 писал(а):
Ну да, JavaScript только для набрасывания на вентилятор и годится (в рамках топика). :mrgreen:

С удовольствием выслушаю аргументы ;-)

 Профиль  
                  
 
 Re: Преподавание программирования
Сообщение19.03.2019, 10:31 
Заслуженный участник


27/04/09
28128
Munin в сообщении #1382768 писал(а):
Вы описываете себя, а не школьника.
Нужно ли сферическому школьнику понимать код на произвольном языке, а не том, который он собрался постичь?

Munin в сообщении #1382768 писал(а):
Можно, например, в массиве, но это извращение.
Я конкретнее про те языки, где объекты классов/структур/… — это неявные указатели на кусок памяти в хипе. Ну те же C#, Java, Python, Lua. Так что без явных указателей, но всё же их имея, мы вполне можем составлять разные ссылочные структуры.

Munin в сообщении #1382768 писал(а):
Они придуманы-то придуманы, но профессионалы как раз с ними предпочитают не соглашаться, вот примерно как вы сейчас.
Значит, не придуманы. :-) Ну или other way around, но об этом говорить не будем.

Geen в сообщении #1382781 писал(а):
Наброшу я на вентилятор JavaScript :mrgreen:
Не надо. :lol: Под влиянием его я хотел один раз в дельфийское время сделать язык, где как можно больше конструкций не вызывало бы ошибку при выполнении. Хорошо, что не сошлось.

rockclimber в сообщении #1382789 писал(а):
Ни одного языка не знаю, где было бы нельзя. В том смысле, что в тех немногих языках, которые я знаю - во всех можно.
Вот я тоже представляю только какие-нибудь эзотерические или по другим специальным причинам обеднённые языки даже для подхода с массивом. Чтобы и он не сработал… ну, впрочем, в тьюринг-полном языке всегда найдётся что-то, что можно будет назвать массивом.

rockclimber в сообщении #1382789 писал(а):
Это ж векторный формат. Вот от него у школьников точно мозг взорвется. Отложите до первого курса хотя бы :wink:
Ну можно и в растровом, просто такую картинку может быть труднее создавать (но из-за браузерности Jupyter покажет PNG и всякие другие так же легко как SVG), а для SVG есть как минимум один модуль, позволяющий описывать графику без лишней мороки. Явное текстовое представление SVG из кусочков строк собирать не придётся. Плюс в SVG есть преобразования координат из коробки, это может дать рисовать какие-нибудь геометрические фрактальчики — чем не повод разобраться в рекурсии.

Munin в сообщении #1382827 писал(а):
Lisp для обучения программированию - примерно столь же милосердно, как и C.
А давайте конкатенативщину! В детях великого Форта разбираться не будем, возьмём Factor (мне не нравится его подход к системе типов, но то мне).

Geen в сообщении #1382833 писал(а):
С удовольствием выслушаю аргументы ;-)
С ним трудно писать хороший код просто — кажется, до сих пор и несмотря на все нововведения. Придётся трудиться для этого лишнего, а школьники этого делать не будут (как минимум поначалу, пока не прострелят себе оба колена одним неудачным оператором). А если не будут, у них как минимум на некоторое время появится привычка так писать везде, ну или они просто получат не самое лучшее из возможных впечатление о программировании. А написание кода — самая базовая деятельность и меньшее из зол, так что вправе требовать, чтобы оно шло настолько легко, насколько это вообще может быть.

 Профиль  
                  
 
 Re: Преподавание программирования
Сообщение19.03.2019, 11:39 
Заслуженный участник
Аватара пользователя


30/01/06
72407
arseniiv в сообщении #1382835 писал(а):
Нужно ли сферическому школьнику понимать код на произвольном языке, а не том, который он собрался постичь?

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

А что там он собирался постичь - никого не волнует, включая самого этого школьника через 2-3 года.

arseniiv в сообщении #1382835 писал(а):
Так что без явных указателей, но всё же их имея, мы вполне можем составлять разные ссылочные структуры.

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

arseniiv в сообщении #1382835 писал(а):
В детях великого Форта разбираться не будем

Я за APL.

 Профиль  
                  
 
 Re: Преподавание программирования
Сообщение19.03.2019, 11:57 
Заслуженный участник
Аватара пользователя


01/09/13
4318
arseniiv в сообщении #1382835 писал(а):
С ним трудно писать хороший код просто

А что такое "хороший код", а тем более, безотносительно языка? И почему его трудно писать? (и даже без нововведений (пока они не поддерживаются всеми браузерами "из коробки")).
Я вполне серьёзно спрашиваю - а то может быть я что-то не понимаю и пишу ужасный код.

arseniiv в сообщении #1382835 писал(а):
А написание кода — самая базовая деятельность

Согласен, полностью.
arseniiv в сообщении #1382835 писал(а):
вправе требовать, чтобы оно шло настолько легко, насколько это вообще может быть.

Не понял - задача "что бы писалось легко" или "научить писать правильно"?

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

-- 19.03.2019, 11:59 --

Munin в сообщении #1382850 писал(а):
Не поучившись удалять за собой динамические объекты, человек не вырастет в программиста.

Согласен, но ведь задача не стоит из всех школьников сделать программистов...

 Профиль  
                  
 
 Re: Преподавание программирования
Сообщение19.03.2019, 13:45 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Geen в сообщении #1382853 писал(а):
Не понял - задача "что бы писалось легко" или "научить писать правильно"?

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

 Профиль  
                  
 
 Re: Преподавание программирования
Сообщение19.03.2019, 14:42 
Заслуженный участник
Аватара пользователя


01/09/13
4318
Munin в сообщении #1382874 писал(а):
Задача "сдать ОГЭ" или "ЕГЭ".

Ну тогда я ухожу со своим вентилятором :mrgreen:

 Профиль  
                  
 
 Re: Преподавание программирования
Сообщение19.03.2019, 14:59 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
Geen
Мой опыт общения на программерских форумах показывает, что ответы на ваши вопросы примерно такие:
Geen в сообщении #1382853 писал(а):
Я вполне серьёзно спрашиваю - а то может быть я что-то не понимаю и пишу ужасный код.
Если вы пишете код - значит, он ужасен.
Geen в сообщении #1382853 писал(а):
А что такое "хороший код", а тем более, безотносительно языка? И почему его трудно писать? (и даже без нововведений (пока они не поддерживаются всеми браузерами "из коробки")).
Хорошего кода не существует.

Хотите - воспринимайте как шутку, хотите - воспринимайте всерьез, но сколько я не участвовал в дискуссиях, я не видел случаев, когда один человек постит код, а другой говорит, что этот код прекрасен. Свой код, естественно, каждый считает самым распрекрасным. (Эта ситуация на воспитание детей смахивает, кстати :mrgreen: ) Поэтому здесь предлагаю закончить, не начиная.

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

 Профиль  
                  
 
 Re: Преподавание программирования
Сообщение19.03.2019, 18:21 


10/03/16
3864
Aeroport
Geen в сообщении #1382833 писал(а):
Матлаб хорош, но:
1. платный
2. у него в основе матричные вычисления
3. отсутствует передача параметров по ссылке
4. множественность возвращаемых значений (что порождает неприятные ограничения по синтаксису)


1. Да, это да.
2. Так разве это не крутейшая фича?
3. Параметром обычно является поле объекта (на самом деле класса, но можно я так буду говорить?), у которого есть дескриптор, хэндл. Через этот хэндл, а в более поздних версиях так вообще через точку после имени объекта, можно менять значение самого параметра. Тем более если я правильно понял, у всех классов поля исключительно public
4. Ненужные параметры можно забить тильдой, главное в явном виде показать функции, что её вызывают с заданным числом выходных параметров

-- 19.03.2019, 18:23 --

rockclimber в сообщении #1382893 писал(а):
Свой код, естественно, каждый считает самым распрекрасным.


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

 Профиль  
                  
 
 Re: Преподавание программирования
Сообщение19.03.2019, 19:00 
Заслуженный участник
Аватара пользователя


01/09/13
4318
ozheredov в сообщении #1382934 писал(а):
2. Так разве это не крутейшая фича?

Для школьников?...
(а про пункт 3 Вы что-то странное написали... впрочем, тут это всё равно оффтоп)

 Профиль  
                  
 
 Re: Преподавание программирования
Сообщение19.03.2019, 19:19 
Экс-модератор
Аватара пользователя


23/12/05
12046
ИМХО:
Школьников надо научить базовым вещам, таким как составление алгоритмов с использованием циклов, ветвлений, использование функций. На каком конкретно языке они будут реализовываться - вообще не принципиально - подойдет любой язык, желательно с более низким порогом вхождения. Нет ни цели, ни возможности научить школьников (не каких-то конкретных, одаренных, а средних сферических школьников) писать продакшн код. Сформировав какие-то основы алгоритмического мышления, кому надо будет, потом сможет освоить любой язык.

У Матлаба, имхо, достаточно простой синтаксис, и можно показать все базовые вещи, не прибегая к его матричности, а потом показать, что "а в этом языке еще можно и вот так". Но я считаю, что это плохой выбор языка для обучения: 1) Матлаб сильно платный, а его бесплатный аналог Octave - убог и неудобен; 2) Матлаб не приучит следить за типами переменных и памятью, а, пожалуй, это важная составляющая для начала обучения.

-- Tue Mar 19, 2019 19:06:15 --

Geen в сообщении #1382833 писал(а):
3. отсутствует передача параметров по ссылке

Она отсутствует в том виде, в котором она есть, например, в C, но категорично утверждать, что вообще нет, я бы не стал:
1) Есть же handle classes
2) По сути, при вызове функции с аргументами-не-хэндлами, вы тоже передаете ссылки, только вернуть по ним ничего нельзя: Матлаб не проводит копирования до тех пор, пока вы не попытаетесь менять значения аргументов.

 Профиль  
                  
 
 Re: Преподавание программирования
Сообщение19.03.2019, 20:14 
Заслуженный участник


27/04/09
28128
Munin в сообщении #1382850 писал(а):
Выражусь яснее. Не поучившись удалять за собой динамические объекты, человек не вырастет в программиста. GC в этом плане медвежья услуга, потому что на самом деле ресурсы к памяти не сводятся. Открытые файлы, транзакции, сеансы связи, мутексы...
Как связаны обязательность GC и неявность указателей? По-моему они бывают (а если не бывают, то представимы) и не одновременно в обоих комбинациях.

Munin в сообщении #1382850 писал(а):
Я за APL.
Интересно. А J? Не знаю в точности их взаимоотношений, но где-то говорили, что, огрубив, J был создан, чтобы всунуть алфавит APL в ASCII. (Наверняка и по другим причинам и отличий должно быть больше.)

Geen в сообщении #1382853 писал(а):
А что такое "хороший код", а тем более, безотносительно языка?
Безотносительно языка можно многое сказать: легко ли его читать (когда язык уже умеренно знаком), легко ли поддерживать (сюда входит куча, но в том числе появляются ли сообщения об ошибках в очевидном месте, если что-то сломалось (динамическая типизация и распространённость неявных преобразований типов ухудшают положение, и в JS есть оба), есть ли удобная документация в коде и способ её быстро получить для интересующей штуки — тут вижу JSDoc, вроде достаточно нормально). Ещё я не знаю как классифицировать конкретные показательные черты JS:
(1) До ES5 можно было присвоить undefined какое-то другое значение (это могло бы получиться и случайно). ← Это в редких случаях может приводить к совершенно мистическим ошибкам.
(2) Хитрое поведение «целых» чисел (как минимум когда для побитовых операций доступно меньше разрядов, чем может хранить такое «целое»). ← Это как минимум затрудняет иногда написание, хотя наверняка у кого-то давало и непонятные ошибки тоже.

Munin в сообщении #1382874 писал(а):
Поэтому вы будете ограничены ровно теми языками, которые используются там.
Кстати да. А как с ними ситуация сейчас?

rockclimber в сообщении #1382893 писал(а):
Если вы пишете код - значит, он ужасен.
Кстати сюда в какой-то мере относится better code is less code, хотя к школе это уже не относится. Там мало того что часто обязательно писать велосипед, так там ещё и нет времени на написание или рассмотрение длинного кода, а требования, к счастью, надеюсь, точные, и потому не нужно раздумывать, должна ли программа делать ещё и это и сё или не должна.

ozheredov в сообщении #1382934 писал(а):
2. Так разве это не крутейшая фича?
Не, это ужасно — что для школы, что абстрактно (потому же я стараюсь воздерживаться что-то делать на R). Это хуже неявных приведений, по-моему.

 Профиль  
                  
 
 Re: Преподавание программирования
Сообщение19.03.2019, 20:39 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
arseniiv в сообщении #1382947 писал(а):
Как связаны обязательность GC и неявность указателей?
Если у вас есть возможность получить адрес объекта и наоборот, зная адрес, получить доступ к объекту, становится невозможным правильный подсчет ссылок, поэтому GC не сможет правильно определить, какой объект можно удалять, а какой нет. Вроде бы так.

Хотя, с другой стороны, еще в турбо паскале, кажется, был прото-GC (существовал подсчет ссылок на строки). Ну если и не в TP, то в Delphi точно был. А еще заявлялось, что Delphi/Freepascal ведут подсчет ссылок для интерфейсов, и это почти GC, но мне в то время не удалось обнаружить нужный эффект. Я использовал какую-то библиотеку, которая показывала размер используемой на данный момент памяти, она честно увеличивала счетчик после каждого Create и уменьшала после Free, но потеря ссылки на интерфейс проходила незамеченной. Но это было 10 лет назад, я все забыл и ничего не помню, не спрашивайте подробности.

 Профиль  
                  
 
 Re: Преподавание программирования
Сообщение19.03.2019, 20:48 
Заслуженный участник


27/04/09
28128
rockclimber в сообщении #1382957 писал(а):
Если у вас есть возможность получить адрес объекта и наоборот, зная адрес, получить доступ к объекту, становится невозможным правильный подсчет ссылок, поэтому GC не сможет правильно определить, какой объект можно удалять, а какой нет. Вроде бы так.
Вот например GC для C и C++. Если не позволять делать с указателями что попало — например, смещать их или образовывать их из произвольного целого числа, то вроде жизнь должна улучшаться. Кроме того, как помню, не все GC используют подсчёт ссылок.

 Профиль  
                  
 
 Re: Преподавание программирования
Сообщение19.03.2019, 21:19 
Заслуженный участник
Аватара пользователя


01/09/13
4318
photon в сообщении #1382941 писал(а):
Есть же handle classes

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 93 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.

Модераторы: Модераторы, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group