Pull to refresh

Comments 109

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

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

Но идея нравится. Спасибо за ссылку.
Руби, в отличие от паскаля или бейсика, дети в будущем смогут прекрасно пользовать.
возможно, всё поменяется к тому времени :)
Вы к тому, что Руби перестанут использовать или бейсик/паскаль начнут? Оба варианта кажутся мне сильно маловероятными.
ну конечно имел в виду, что Руби перестанут использовать, появится что-нибудь новое. Хотя может и наоборот — обретёт бóльшую популярность, сейчас пока Руби всё же не сильно распространён, насколько мне известно.
набирает популярность. Среди моих знакомых кто на php хоть чуточку кодил, слышали про руби
слышали-то слышали, но разработка реальных коммерческих приложений ещё долго будет оставаться в основном на php и java
Имхо, лучше какой-нибудь C++, C-ориентированные языки программирования всегда будут жить и пользоваться популярностью.
Легче — это одно, переучиваться — другое.
Пример? В детстве был ZX Spectrum, бейсиком на нём владел практически в идеале. Поступил в колледж — нужно учить паскаль, сложно было избавиться от этого отчуждения к другому языку программирования, но ничего, со временем привык. Перешёл на делфи без проблем (тот же паскаль по сути). На делфи проработал лет 6-8, начал изучать С++/С#. По сей день не могу избавиться от этого отчуждения, хотя прекрасно понимаю код на всех языках, аналогичных С++, кое-что по необходимости пишу, но если есть выбор — выбираю всё равно Delphi. И можете троллить что делфи — гавно, но на этом «гавне» мне по сей день привычней.
Мораль сей басни такова: переучиваться всегда труднее, чем учиться с нуля. Как-то так.
ИМХО Вы в корне не правы. Сужу по своему же примеру: начинал учиться с бейсика, потом в универе учили паскалю, после него перешел на делфи, затем по нуждам универа и собственного хобби изучал C++, потом немного программировал в 1С, затем по нужде выучил php, узнал про руби — перешел на него. Сейчас работаю с Руби и счастлив. Все дело в том, что учиться нужно программированию, а изучить новый язык — не проблема.
Изучить — не проблема. Проблема в том, что вместо того чтобы думать над реальными задачами много времени уделяешь контролю над синтаксисом. И ещё скажите что я не прав.
Вы не правы. Ну вот, я это сказал. В разработке вебов, например, приходится использовать два и более языков (ruby и js, например), и как-то это не является проблемой. Но вы ушли от сути. Вопрос был в том, насколько сложно переучиться. Вы начали с бейсика, работаете с делфи. Я начал с бейсика, работаю с руби и иногда php. Вывод — «переучиться» вполне реально.
Извините, Вы глухой? Я разве говорил что переучиться не реально? Я говорил, что переучиваться программить на другом языке — это более проблемно, чем сразу учиться программить на том языке, который необходим. Врубите логику, в конце концов. Возьмём число 1 как время обучения одному языку. Возьмём число 0,25 как время обучения второму языку. Сумма 1,25. Уже больше. Поехали дальше. А есть ещё такой фактор как переучиваться делать одни и те же вещи разными способами на разных языках (например, работа с сетью, работа с БД), это ещё +0,25. Есть ещё такой фактор как различия в синтаксисе и командах. Он не так много отнимает времени при обучении, сколько при отладке. Когда привычные мелочи одного языка вызывают проблемы в другом языке. Взять к примеру работу с указателями. Или sqr(), который в большинстве языков означает возведение в квадрат, в то время как в одном из языков (убей не помню в каком, вспомню — напишу) эта же команда означает извлечение корня. Подобные мелочи синтаксиса могут убить часы при отладке. Просто привычный синтаксис. Привычный для другого языка.
Насчёт «разработки вебов» сравнили тоже 2 совершенно разных языка. Ещё можно таким же образом сравнить язык запросов SQL с ассемблером. Тоже неплохо. Или телевизор с холодильником, а что, одно и тоже, и туда и туда можно смотреть, правда? =)
Складывается впечатление, что из перечисленных языков, __изученных до этого__ Вы ни на одном не программили _серьёзно_ более двух лет.
И Ваши 1Сы, пхп, и т.п. ну ни как не к месту. Мы тут не хуемерянием занимаемся, а сравниваем языки программирования одной категории, в данном случае разработка прикладных программ.
И Вы сильно ошибочно посчитали, что я работаю только с делфи. Как я и сказал, к делфи за долгие годы привык так, что если есть возможность выбирать на чём программить — я программлю на делфи. Этот язык для меня связан с комфортом, всё знаю, всё могу. Нету выбора — программлю на чём приходится. Привычку, сформированную за долгие годы так просто не изменить. Не верите — откройте любую книгу по психологии, описывающую формирование и закрепление привычек людей, для чего они формируются и почему от них так трудно избавиться.
И пока не посмотрите — даже не отвечайте, а то впечатление складывается что с троллем общаюсь.
Одним словом, зачем переучиваться если можно изучить сразу то, что нужно?
Затем, что лично я не ясновидящий, и я не знаю, на чем придется программировать завтра. 7 лет назад я предположить не мог, что займусь разработкой вебов, в про руби даже не слышал. Полгода назад я не знал про язык CoffeeScript. Узнал — изучил. Никаких проблем.
Ты не просто не ясновидящий. Ты вообще не видящий. Я предложил как основу взять C-ориентированный язык, по скольку его синтаксис был заимствован в большинстве современных языков программирования. Это не бейсик и не паскаль, которые уже сейчас сдают позиции. Не руби, синтаксис которого сильно различается от других языков. Это тот язык, концепции, принципы и синтаксис которого совпадают со многими другими языками программирования, что позволило бы куда проще переучиваться, если уж придётся.

В общем, перестаю кормить тролля, это никогда не закончится.
Закончится, как только поумнеете… Вы просто несете какой-то эпический бред. А назвать оппонента троллем, когда начинаешь свою осознавать свою неправоту, проще всего.
*facepalm*
При чем тут прикладные программы? Мы говорим о языках и о программировании в целом. Чем отличается написание hello world на C++ от оного же на Ruby? Ничем (за исключением того, что 1 язык компилируемый, а другой интерпретируемый).
JS и Ruby — настолько же разные, насколько паскаль и C. Вплоть до того, что на JS тоже можно serverside писать. И ими приходится пользоваться одновременно. И никаких проблем это не вызывает, если владеть обоими на профессиональном уровне.
Всё ясно, тролль. А прикладные программы при том, что идёт обсуждение ЯП одной категории и сравнивать 2 ЯП разных категорий — это глупо, не логичный тролль.
ГДЕ идет обсуждение ЯП одной категории? Вы сами в тему про Руби влезли со своим С, а теперь пытаетесь всю ветку комментов сровнять под него.
Первый в жизни ЯП должен быть максимально простым в использовании и, разумеется, объектно-ориентированным.
Почему?
Классическая парадигма обучения звучит как «Составлять программу обучения на основе наиболее распространенных практик»
А т.к. ООП сейчас — доминантная парадигма, ответ на ваш вопрос очевиден.
Классическая парадигма обучения звучит как «Составлять программу обучения на основе наиболее распространенных практик»
[citation needed]
К сожалению, прямой цитаты не могу привести, т.к. подчерпнул это из бумажных источников.

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

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

Стоит только продраться через дебри сухого академического языка.

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

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

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

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

Я сам был таким, и понимание сути объектного подхода во мне воспитывали курсачи (которые, признаюсь, писал не только для себя)

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

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

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

P.S. Написанное выше — всего лишь частное мнение, я не педагог и пока что не профессиональный программист, так что могу ошибаться. :)
Буду краток: на протяжении последних 3-х лет я имею непосредственное отношение к обучению первокурсников ФизФака НГУ основам программирования. И я не представляю что было бы со студентами, не знающими ни одного языка программирования, если бы им сразу бы давали ООП, у них и так куча проблем со стилем, нежеланием разбивать программу на хоть какие-то модули. Думаю очень немногие из них осилили бы что же такое полиморфизм.

Еще короче: имхо процедурная парадигма – отличная парадигма для начала обучения, когда размеры проектов 200-300 строк, ООП нужен будет, но позже.
Единственный аргумент в пользу старинных процедурных языков (например, Паскаль), который я вижу — строгая типизация.
Поясните, каким отношением связаны процедурная парадигма языка со строгой типизацией? Язык C поддерживает процедурную парадигму и не имеет строгой типизации, Java является строго типизированным и в то же время поддерживает ОО парадигму.

p.s. строгая типизация != статическая типизация
Пардон, в случае с паскалем имеет место статическая, так?
Думаю, вы хотели сказать что в «новых модных» языка типизация динамическая (тип выражения определяется только на этапе исполнения), например, JS, Ruby. А в «старинных процедурных» типизация статическая (тип выражения определяется на этапе компиляции), например C, Java.

Я на своем опыте так и не понял, что лучше, ибо например меня и моих одногруппников сначала учили Python'у, а потом C. И вроде особых проблем из-за перехода на статически-типизированный язык не было ни у кого.
Не согласен на основе личного опыта.
Конкретизируйте, пожалуйста, с чем не согласны.
Что нужно начинать изучения программирования с объектно-ориентированного языка. Намного проще изучить процедурное программирование и уже на этой базе двигаться в ооп.
Расскажу про свой опыт обучения новичка без какого-либо знания программирования.

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

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

Данный личный опыт просто не позволяет мне согласиться с тем, что начинать обучение нужно с ООП.
Не думаю, что ООП следует изучать только оттого, что это «наиболее распространенная практика». Непосредственно программирование — это фаза реализации (implementation) в жизненном цикле разработки. И рассматривать ООП в отрыве от начальных фаз (сбор требований, анализ и объектно ориентированный дизайн) смысла не много. Вряд ли кто-то из учеников в состоянии понять почему стоит городить такой огород (ООП), не рассматривая жизненный цикл разработки продукта и различные способы декомпозиции сложных систем.
В свое время у нас один из преподавателей говорил — «невозможно по-настоящему объяснить ООП человеку, который ни разу в жизни не писал программы больше 1000 строк». Смотрю на пример многих своих бывших однокурсников, и думаю, что он был очень даже прав! =)
И еще, учитывая, что разговор про детей (школьников?) — есть смутное ощущение, что человеку, который возможно никогда в жизни не станет профессиональным программистом, важнее получить основы императивного мышления, чем представление о доминирующей парадигме в современной коммерческой разработке ПО.
Я признаюсь, не знаю Ruby и очень хочу этот язык. Скачаю себе, чтобы обучаться. Спасибо за новость!
Спасибо, ознакомлюсь
а на русском есть что-нибудь аналогичное и адекватное?
Rails for Zombies всё таки не совсем руби.
Например тем, кто перехходит с дугих языков, хеши часто непонятны. А в Rails For Zombies их тупо используют не объясняя. Итого есть умение читать код, но нет умения его писать.
Когда я смотрел на Ruby он мне показался странным (не плохим, а странным). Но идея прикольная, сейчас заценю))
Немного комбинаторики, теории автоматов и алгоритмов, несколько лет практического опыта и он вам покажется очень удобным.
Ну чтобы в свободное от работы время на что-то внимательно смотреть нужно чтобы это зацепило хотя бы в течение пары дней а не лет.
Полностью согласен. В институте был плохим студентом, и данные дисциплины «не зацепили»

Но недавно пришлось плотно оптимизировать один алгоритм, и этот пробел как-то сам заполнился.
так можно сказать не только про руби.
это для любого ЯП подходит )))
Сума сойти… скоро дети закончив школу будут иметь в своем портфолио пару CRM да интернет магазин в придачу )
>> В нём не должно быть каких-то двусмысленных концепций или странных особенностей синтаксиса
В руби нету особенностей синтаксиса? O_o Или они не «странные» просто?
На первом скриншоте древний, как сами компьютеры Лого :) Казалось бы, причём здесь Руби?
Это DSL написанный на Руби. Одна из самых сильных фишек языка.
Выскажусь, чтобы инициировать дискуссии и/или холиворы: Первый язык программирования должен быть функциональным! Намекаю на F#, конечно. Кстати, именно так (functional first) учили в MIT.
Напоминаю, что речь идёт о детях всё-таки :) Им ещё можно, наверное, объяснить объекты/свойства, но функции высшего порядка…
Тогда Lisp, Erlang, Ocaml. Почему F#? Microsoft?
Угадали :) LISP имхо очень хорош для студентов как концептуальный и классический язык (минимум синтаксиса, прозрачная семантика и т.д.), но способен убить в детях радость от изучения программирования. А вот на F# вполне можно оттолкнуться от школьной математики.

А ещё есть подходы, когда предлагают детям писать функции для обработки более высокоуровневых объектов — например, геометрических фигур. Небольшая библиотека на F# — и мы можем сразу оперировать картинками (2D и 3D), строя сложные фигуры из более простых.
Не надо только отвечать на не заданный вопрос, да ещё в такой форме. Вы пытаетесь продвинуть свой, мелкософтовый, язык путём обливания фекалиями другого. Да ещё делаете это с искусством истинного демагога — говорите безапелляционно совершенно необоснованные вещи.

А вот на F# вполне можно оттолкнуться от школьной математики.
(+ x y)
Оба-на, оттолкнулся.

Внезапно и фигуры рисуются.
По-моему пока что обливать другие языки пытаетесь только Вы, я же написал, что LISP хорош, но для другого класса обучаемых. Кстати, к чему тут (+ x y), я так и не понял — это как раз LISP, а F# выглядит совсем по-другому. Посмотрите, для начала, несколько докладов по теме, например тут: www.techdays.ru/Search.aspx?Quick=F%23. По поводу использования F# в обучении, хорошие примеры есть тут: tomasp.net/blog/mono-teaching-qcon-talks.aspx

Кстати, а чем Вам не понравилась моя форма ответа на вопрос?
Первый язык должен иметь простую и понятную семантику. В какой парадигме он будет, не так уж и важно.
И Ruby, и F# имеют сложную семантику.
Я бы предложил смотреть в сторону таких языков, как Scheme, Go и т.п.
Тем более, что успех SICP, вполне показывает пригодность Scheme для обучение людей, которые раньше никогда не программировали.
Не согласен. На языке с простой но минималистичной семантикой сложно сделать что-либо осмысленное/впечатляющее, чтобы увлечь детей. Успех SICP показывает, что для лучших умов в computer science такой подход хорошо работает. Не очевидно, что он хорош для детей и для «среднего класса».

Парадигма имхо тоже важна, т.к. если говорить про первое знакомство с компьютером, то она определяет складывающееся в мозгу понимание процесса вычислений.
Ну я же не предлагаю им чистое лямбда-исчисление преподавать (хотя для понимания процесса вычислений это было бы весьма полезно).
Возможностей языков типа Scheme и Go достаточно, чтобы делать приложения любой сложности.
Кто это плюсуюет, мне интересно? Это же чистой воды демагогия, рассуждения без единого доказательства, просто домыслы.

Racket. Есть библиотеки для GUI, Web, графики и т.п. Простейшее GUI-приложение сделать проще простого.

Покажите всю крутизну своего F# и убожетсво Scheme на реальных примерах, если сможете. Пока я вижу, что у вас отлично получается говорить общими словами без фактов.
Цель данных обсуждений — не показать крутизну F# (она уже была многократно показана на разных конференциях, см.ссылки выше, по поводу простого приложения — вот habrahabr.ru/blogs/programming/53626/ и вот habrahabr.ru/blogs/personal/57056/ хорошие примеры на хабре), а понять, что же хорошо для образования. Применительно к Racket/LISP думаю вопрос стоит просто: что лучше детям, минималистичный LISP-синтаксис, или более естественный ML-синтаксис, используемый в F#. Пока я не вижу от Вас аругментированных доводов по этому поводу.
Насчет простой и понятной семантики +1. Тоже кажется, что обилие синтаксического сахара будет усложнять переход от подхода «ввел магическое заклинание и заработало X, какое магическое заклинание ввести, чтоб заработало Y?» к какому-то осмысленному пониманию — а это, как мне кажется, и есть главный «переключатель», который начальное обучение программированию должно переключить (ну и + заинтересовать, конечно).

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

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

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

Можно считать, что ООП — самый православный способ писать программы, или функции и рекурсия — самый православный способ, но дети-то тут при чем, отдавайте себе отчет, что это во-первых только мнения, а во-вторых — что из них не следует, что дети лучше научатся, если с самого начала в них все это пихать (если, конечно, не считать, что «лучше научиться» = «думать как я любой ценой»).

Руби лучшая замена паскаля и бейсика школьникам и нвеньким студентам!
Сере5брянной пули НЕ СУЩЕСТВУЕТ!!!
Чем же особенность странная? Я думаю, это отличный пример «синтаксического сахара» (если не ошибаюсь в понятиях), «poetry mode».
А по-моему это отличный пример странного синтаксиса, коим и является весь сахар, я считаю, что первый язык должен быть максимально каноническим, и еще лучше процедурным, что бы ученик понимал, грубо что программа идет сверху вниз.
А что здесь странного-то вы нашли? Тут как раз всё абсолютно чисто и без сахара. Вам не привычно то, что число — такой же объект как и все прочие? Так это дырявость _ваших_ абстракций. Это _вам_ приходится запоминать совершенно нелогичную информацию о том, что «все животные равны, но некоторые — равнее».

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

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

Ваш вариант какой? Для «и» от нуля до десяти, инкремент «и», вывести «превед»? О чём это? Что за «и»? Зачем оно здесь? Что такое инкремент? Что такое это самое «для» и почему я должен «для», если мне надо просто «10 раз сделать: вывести „превед“»? Три(!) абстрактные сущности совершенно лишние для понимания процесса. С вариантом «пока» всё ещё хуже :).
А что за «конец»? :) Питон в этом отношении ещё лаконичней и каноничней получается.
Во первых, это сахар, так как по сути является альтернативной упрощенной записью классического цикла for.
Во вторых, мне абсолютно все равно число это объект или не объект.
В третьих, вы противоречите сами себе же говоря про каноничность. Не существует неправильной каноничности, она одна. Этот же сахар разработан в целях упрощения написания рутины.
В четвертых, объяснить человеку, что инкремент это операция прибавления единицы, так же сложно как объяснить, что число это объект.
В пятых, просто при переходе на классические языки у такого программиста явно возникнут трудности.
А в шестых, ему в любом случае придется изучать классический цикл, так что этот сахар является просто лишней нагрузкой на мозг ребенка.

Как еще пример, отсутствия странного синтаксиса

names.each do|n|
puts «Hello #{n}»
end

1. Ага, а классический цикл фор является упрощенной записью классического цикла while с обвязкой, который, в свою очередь, является упрощённой записью условного оператора и оператора перехода (или оператора условного перехода). И что теперь?

2. Тогда в чём ваша претензия? В ограниченности вашего мышления? В том, что вы не знаете языков возраста примерно фортрана в которых такого рода циклы были вполне каноническими и удивляться им могут только те, кто кроме явы ничего не знает?

3. И что это за «одна каноничность» такая? Ява? Семейство языков с алголоподобным синтаксисом? А чем вам лисп не угодил? Он ведь старше даже фортрана, если мне не изменяет память. Чем он не «каноничен»? И, это… вообще-то любые ЯВУ разработаны в целях упрощения написания рутины :).

4. Ну, что вы! Как раз засрать мозг человека совершенно не нужными сведениями о том, что число — это не объект, тогда как все остальные сущности — это объекты, гораздо сложнее. Вводится _дополнительная_ сущность. Вводить дополнительную сущность всегда сложнее, чем не вводить её. Таким образом, ваш подход с инкрементом, по сравнению с рубиновым — это ввод _двух_ дополнительных сущностей, которые _ничего_ кроме геморроя не прибавляют для целей решения этой задачи. Вот это и есть «сахар». Причём не тот, который даёт питание мозгу, а который ведёт к диабету :). Кстати, в руби нет операции инкремента :) в сишно-явском смысле.

5. С чего вы взяли? Если обученный руби ребёнок решит пойти в профессиональные программисты, то ему придётся изучить очень много всяких абстрактных теорий, на фоне которых отсутствие циклов типа loop в некоторых отсталых языках пройдёт совершенно незамеченным :)

6. Лишнее — это ввод сущностей, которые не нужны для непосредственного решения задачи. Например, в обсуждаемом примере это переменная цикла и её инкремент. Вот когда появится в них необходимость, тогда они совершенно естественным образом и будут введены. Подчёркиваю — естественным образом. И без напряга. И _если_ понадобятся. Что для пожарного далеко не факт что понадобится :). Классический же for — это _сначала_ проитивоестественно долго и нудно впихиваем в голову ребёнка совершенно абстрактные и ни к чему не привязанные понятия, а когда-нибудь потом ему, может и встретится случай, когда нужно воспользоваться именно циклом for.

7. Не вижу ничего странного. Вы и явский цикл foreach считаете странным синтаксисом? И вообще идею итераторов?

ЗЫ. Мне, вообще, попадались такие как вы экземпляры. Однажды паре людей отдали в откуп часть проекта. И были эти люди воспитаны именно на таких классических циклах for, массивах и прочем. Они и сделали свою часть на циклах фор и массивах. И это на яве! Со всеми её коллекциями и итераторами! После чего посчитали себя неимоверно крутыми и ушли в другую контору. Ёёёёё. Это была бомба. Вернее — мина. Замедленного действия… К этой их части вообще ни кто не хотел прикасаться со всеми этими бесконечными копированиями массивов из одного места в другое и необходимостью помнить что за хрень хранится в a[4] и чем она отличается от a[7]. А, ну да, оно даже как-то работало, конечно (пока эту часть не выпилили из проекта вовсе). Но радости не доставляло :). Даже к самой идее вернуться к реализации такого функционала вернулись только лет через 5. Видимо, сильно это дело тогда всех впечатлило :). Подозреваю, те люди где-то рядом с вами учились :). И, определённо, не тому, чему следовало бы :) :).
А я вот встречал таких как вы, не знающих, что циклы нужны то не только для обходов списков, оба на! Бьющихся лбом о стену в попытках доказать что-то при этом противореча самому себе, действительно давайте под каждую конкретную задачу введем кукую нибудь специальную структуру и будем ими пичкать детей. Ведь оно там надо, а значит и им надо! Просто даже не пытающихся понять, что обучение программированию и профессиональная практика программирования это разные вещи, что изучив основные виды синтаксических конструкций, которые являются общими для практически всех языков высокого уровня, ты сможешь в кротчайшие сроки изучить синтаксические особенности любого другого, в том числе и итераторы. Даже не задумывающихся, что если на языке пишет пол процента программистов планеты, то не стоит приводить в пример его практики, это я о фортране.

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

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

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

>действительно давайте под каждую конкретную задачу введем кукую нибудь специальную структуру и будем ими пичкать детей

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

>если на языке пишет пол процента программистов планеты, то не стоит приводить в пример его практики, это я о фортране

Опять какие-то сексуальные фантазии. Вы меня победили. Придумали за меня какой-то бред и успешно его опровергли. Ай, да молодэц!
Я говорил об языках _возраста+ фортрана. А не о фортране. А то, что сейчас среди определённой аудитории стали модными странные поделки, вроде шаблонизаторов хоумпейджей, так это пройдёт :).

>Вообще кстати парадоксальная у вас логика учить человека циклам на итераторах, и перед этим не объяснить хотя бы, что такое итераторы, да и вообще циклы

То есть, вы таки за то, чтобы перед обучением ЯВУ надо сначала попариться с ассемблером, я правильно понял? Иначе, как понят откуда берутся циклы и что вообще такое переменная?
Вообще-то, итераторы более естественны, чем циклы. Что у нас ближе всего? А, во — пальцы. Вы в пальцах как ориентируетесь? Какой из ваших пальцев имеет индекс 4. А индексация у вас с какого числа начинается? Зачем, чтобы перебрать последовательно пальцы (карты в колоде, игрушки на полке) знать что-то о каких-то индексах и прочих низкоуровневых абстракциях? Они совершенно не нужны в подавляющем большинстве случаев. Раз вы так за них держитесь, у меня возникло совершенно естественное предположение о том, что вы где-то на них и застряли. Уровнем чуть выше фортрана.

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

Вот, вроде умные вещи говорите, но дальше…

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

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

>да и вообще циклы, это наверное как учить ядерной физики не сказав перед этим, что такое ядро

Вы, вероятно, совершите харакири, если узнаете, что в руби эти ваши циклы с параметром — это разновидность итератора в некотором смысле :). Нет ничего проще объяснить цикл с параметром, обхяснив перед этим как перебирать колоду карт. Заменяем карты числами и — вуаля! for i in 1..10 do puts i end

>Вот так вот и выпускаются болванчики

Это вы про себя? Что ж, самокритично, самокритично. Так и не ушли от уровня блок-схем, ага.

>которые не понимают как работает даже пузырьковая сортировка

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

> не знающие что такое рекурсии и деревья

Что касается рекурсии, я не уверен, что этому стОит учить детей. По крайней мере, _если_ учить их в императивной парадигме (а мы сейчас о ней). Деревьям — практически уверен, что нет. Накуа?

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

Как вы сказали? Блок-схем??? Я, конечно, из тех людей, кто ещё помнит это древнее окаменевшее дерьмо мамонта, но не думал, что в природе остались ещё люди, всерьёз предлагающие учить программированию с использованием блок-схем. Если вы не шутите, закопайте его сейчас же обратно! А то я решу, что у вас однозначный вывих мозга… :(
Использование блок-схем в обучении детей программированию — самый лучший способ привить им глубочайшее отвращение к предмету. Это я вам, как программист, чудом прорвавшийся через эту ущербную методику, утверждаю. Просто заглянув в соответствующий период памяти и углядев там остывшие виртуальные трупики тех у кого склада ума было достаточно, а настоийчивости не хватило… :(
Бедные детишки-дальтоники. Сочувствую им.
я школьный учитель с 5 годами пед вуза и 4 годами преподавательской деятельности.
Профессиональный преподаватель школьной информатики.
Рубист с 2008 года.
Ни разу не считаю, что руби следовало бы давать в качестве первого языка.

Видимо ребята из гибрида знают то, чего не знаю я. Удачи им.
Общался с одним из разработчиков kidsruby. Основная фишка проекта, это то, что находятся волонтеры, готовые уделять свое время бесплатному обучению детей программированию на руби. Сама же программа используется больше как удобный инструмент, чем как самоцель проекта.
На правах самоубийцы.
Когда мне в универе пытались забить в голову различные паскали и си (безуспешно), я задавал себе постоянно один и тот же вопрос. Ну нахрена!? Нахрена, все эти точки-запятые после каждой строки, нахрена объявления переменных, нахрена мне соблюдать весь этот бесполезный синтаксический мусор. Писать на php было вообще сплошным мучением, взглянув, утром, на простыню кода написанного на кануне ночью, я приходил в ужас, потому что не понимал что это. Когда я намучавшись с php наткнулся на ruby, для меня это было как прозрение. Все можно делать так просто и красиво!? Так что, если ребенок начнет изучение программирования с Ruby, у него будет только одна проблема, он потом не захочет видить ничего другого.
более того, хоть отступы научатся ставить там, где надо!

А вообще — С очень даже полезный язык для обучения, но уже в институте, параллельно с ассемблером. Для понимания происходящего в железе.
UFO just landed and posted this here
Если уж и учить детей программированию — то функциональному и в связке с другими предметами. Все эти профессиональные ООП и прочую боль нечего тащить в незамутненные детские головы.

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

Впрочем, ООП тоже поддерживается другими школьными курсами, например биологией.
Функицональщина и только функциональщина. ООП по мне как и Угги. Модно, но не панацея от всего!

И самое главное зачем детям засорять мозг? Возможно ваш ребенок будет пожарником и Ruby будет нужен как собаке 2 хвост. Прикольно, но зачем?
Мой вам совет, проводите с ребенком больше времени, а не придумывайте отмазку, что бы им не заниматься.
С функциональщиной _ещё_ хуже в этом плане. У вас всего лишь для пожарного руби — 2-й хвост, а тут _даже_ если ребёнок вырастет в программиста, ему ваша функциональщина будет как той же собаке 5-я нога. Это я вам говорю как человек, которому в детстве примерно в одно и то же время попали книжки про алгол-60 и лисп. Обе я прочитал с интересом и ни в одной не нашёл трудностей. Но алгол мне удалось «попробовать» на ЕС-1055 (и до сих пор процедурщина с ооп-ностью находят применение), а вот лиспу ни тогда, ни до сих пор не нашёл применения в окружающей меня действительности :). В принципе, я читал, что есть такие, но вживую ни одного не видел.

А, не, было дело, правил емаксовые конфиги! Раза два :)

Кстати, в руби с ограниченной в некотором смысле функциональщиной всё в прорядке.

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

Э-э-э? Полагаете, что образование детей — это не более, чем отмазка нерадивых родителей, лишь бы не заниматься с ребёнком? Пожарному-то 99% школьных знаний как собаке третий хвост, ага? Бред какой-то. Зачем мешать тёплое с мягким?
Если вы мне дадите определение «образование» то имеет смысл продолжить дискуссию, а иначе всё сведётся к отрывистым высказываниям, которые по сути ничего не значит.
От себя скажу что у меня ребенку 1,3 года, в нашей семье уже 4 поколение учителей, и про образование я знаю не по наслышке.
Выход на более менее воспринимаемый английский подходит к годам 12-14, до этого ваш руби ерунда, ничего не значащая, как и ООП. Ланный пост идет под хзаголовком «для детей»… я могу судить что как автор так и создатели пукнули в воздух, со своим KidsRuby
>Если вы мне дадите определение «образование» то имеет смысл продолжить дискуссию

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

>От себя скажу что у меня ребенку 1,3 года

Ну, у меня двое и один старше, а другой ещё старше. И что?

>в нашей семье уже 4 поколение учителей, и про образование я знаю не по наслышке.

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

>Выход на более менее воспринимаемый английский подходит к годам 12-14

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

>до этого ваш руби ерунда

То есть пары-тройки поколений выросших на черепашках лого для вас не существует? Ну-ну. Плюну трижды через левое плечо, чтобы ни один из вашей педагогической плеяды не попался на жизненном пути моих детей. :)… им всё божья роса, как говорится.
Кстати, разве вам предлагают засадить за этот KidsRuby вашего 1,3 годовалого ребёнка? В 14 моими игрушками были БЭСМ-6 и ЕС-1055. В 11-12 — Б3-34. Это куда сложнее рубикидса :).

>как и ООП

А и не надо употреблять термины ОПП и прочую теорию. Не нужны они в данном случае. Потом, если понадобится, человек узнает и про ООП и про SOLID и тд. И с удивлением обнаружит, как тот классический герой, что оказывается, всё это время «говорил прозой» :)

>я могу судить что как автор так и создатели пукнули в воздух, со своим KidsRuby

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

Я вот постоянно ощущаю профит от понимания ФП, даже не трогая ФП-языки. От него мозг выворачивается в правильную сторону.

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

Для школьника — ???
И для школьника полезно, там же математика внутри.
Никогда не понимал глубокий смысл подобных вещей. Речь все-таки идет о детях, а не об идиотах, им нужны не искуственные упрощения, а интересная сфера приложения. Ванильный руби не сложнее в обращении того же QBasic или TP, если ребенок захочет, то разберется быстрее взрослого, если нет, то и на 3 курсе программу со скриншота сам не напишет.
ИМХО детей учить нужно яваскрипту, так как он немного си-подобен, отчего в дальнейшем они получат профит в виде более лёгкого освоения си-подобных языков.
Я именно так и учу. Ява-скрипт и С как подготовка к ЕГЭ.
Я сам так учился :)
Сначала HTML, потом JavaScript, потом C++, потом PHP, потом опять JavaScript в виде нехилого опыта написания юзерскриптов.
Cкажите недалекому человеку, на руби можно разрабатывать веб-приложения, подобно тому, как это делается на пхп?
Скоро появиться подборка сайтов на руби made by child less then 10 years old.
Sign up to leave a comment.

Articles