Обучение программирования на Ruby/Python

    BASIC и Pascal давно стали стандартом при начальном обучении программиста. Для многих это первый язык со школы или первого курса университета. Однако за десяток лет ситуация практически не изменилась. Действительно ли Basic и Pascal подходят для обучения сейчас? Неужели за десяток лет не появилось ничего лучше?

    Подумайте, есль ли причины использовать BASIC и Pascal кроме исторических?

    В школе давно понятно — лучше давать не программирование, а основы использования компьютера. Максимум — Logo в среде типа KTurtle.

    Но для первых курсов института и усиленного изучения школьников я считаю, лучше использовать Ruby и Python.

    Конечно я не настаиваю учить только на Ruby. Но, например, базис дать на Ruby, а более сложное на Java/C# или С (включая управление памятью) — более правильно скажется на становлении программиста.

    Далее аргументы.

    Проблемы


    В начале давайте посмотрим — всё ли так гладко с Pascal и BASIC:
    1. Устаревшие IDE. Конечно консоль в TurboPascal — это круто, но почему бы не использовать более развитые и современные текстовые редакторы? Можно конечно использовать Delphi или Visual Basic.Net, но это профессиональные инструменты с кучей лишних элементов. В них нет просто кнопок Сохранить и Выполнить.
    2. Непрактичность. BASIC и Pascal сейчас всё реже и реже используются на производстве. Формально, 90 % профессиональных программистов так и не используют эти языки на практике.
    3. Сложность. Когда-то они действительно были очень простыми языками программирования. Но прогресс не стоит на месте.
    4. Устаревшее API. В TurboPascal и QBasic нельзя создать оконные приложения или сделать простой веб-сайт. Конечно, для обучения алгоритмам это не нужно — но ведь имея набор современных и «крутых» средств можно увлечь ученика гораздо больше.
    5. Одна парадигма. Одна из проблем современного IT-образования — студенты часто не знают о функциональном подходе, а ООП знаком только по модели C++. Надо ли говорить, что кругозор никогда не мешает. Тем более, что подход C++ далеко не идеален и много задач гораздо удобнее решать по-другому. Мы конечно же сталкиваемся с вопросом курицы и яйца, так как подход C++ часто используют только потому, что только его и преподают. Но пора выходить из этого порочного круга :).


    Улучшения


    Чем же Ruby и Python кроют эти проблемы:

    IDE

    Для Ruby и Python есть интерактивная консоль — вы вводите команду и тут же видите её результат. Идеальная площадка для экспериментов:
    >> 2 + 2
    => 4
    >> a = [1, 2, 3]
    => [1, 2, 3]
    >> a << 4
    => [1, 2, 3, 4]
    >> a.reject { |i| i % 2 == 0 }
    => [1, 3]
    

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

    Ну и конечно Ruby и Python интерпретируемые языки программирования — так что для работы с ними подойдёт любой текстовый редактор.

    Промышленное использование

    Промышленно используют Python такие гиганты, как Google, Yahoo!, CERN или NASA. Ruby же с помощью Ruby on Rails активно и агрессивно занимает веб-платформу.

    Думаю не надо говорить, что только со знанием Ruby или Python уже можно устроится на нормальную работу, в отличии от Basic (спрос на Delphi-программистов тоже падает).

    Кроме того, на Ruby и Python сразу уже можно рассказывать ООП по-серьёзному, без которого сейчас сложно.

    Лёгкость

    Ruby и Python за счёт множества парадигм, положенных в их основу, имеют много красивых и простых решений.

    Например циклы. В Pascal и Basic вам надо думать как реализовать нужный цикл, в Ruby вы указываете что вам нужно сделать:
    loop do
      # Бесконечный цикл
    end
    count.times do |i|
      # Выполняет цикл count количество раз
    end
    ['a', 'b', 'c'].each do |i|
      # Проходится по каждому элементу массива
    end
    

    А, например, механизм отступов у Python сразу учит соблюдать правильную «ёлочку».

    Применение функций высшего порядка (или делегат) позволяет сделать обработку массивов проще и понятнее.
    # Пройдётся по массиву и уберёт элементы, для которых будет возвращено true
    [1, 2, 3, 4].reject do |i|
      i % 2 == 0 # Убираем чётные числа
    end
    # Итог будет [1, 3]
    

    Поскольку на Ruby легко создавать DSL (как бы мини-языки для конкретной задачи), то можно за красивым API скрыть многие тонкости, чтобы преподавать последовательно.

    Например, так выглядит определение GUI в Ruby библиотеке Shoes:
    Shoes.app {
      button("Push me") do
        alert "You click on button"
      end
    }
    

    API

    Для Ruby можно снова упомянуть Shoes, так как там просто делать «крутые» интерфейсы с графикой, эффектами и анимацией. Например, код рисует звезду и двигает её за курсором:
    Shoes.app {
      @shape = star :points => 5
      motion do |left, top|
        @shape.move left, top
      end
    }
    

    Так же ученики смогут написать свой небольшой сайт на Ruby on Rails или более простой Sinatra.

    Про стандартные API типа доступа к простой БД SQLite я уже и не говорю.

    Мультипарадигмость

    Изучение Ruby или Python правильно скажется на развитии ученика :). Ему сразу на одном языке можно показать подходы множества разных школ. Бегло познакомить с функциями высшего порядка и лямбдой из функциональных языков программирования. Взгляд на ООП не будет закрыт только методом C++, а покажет лёгкость и возможности утиной типизации.

    Плюшки

    Кроме того Ruby и Python гораздо более кроссплатформенны. Они постоянно развиваются сообществом, в отличии от QBasic и Borland Pascal. В них ест поддержка Unicode (так что дети могут вводить свой родной язык в тесты).

    Можно сразу научить писать тесты с помощью простой и красивой RSpec:
    count.should == 10
    array.should include(item)
    


    И много ещё полезных вещей, которые есть у современных языков программирования.

    P.S. Статья конечно больше Ruby-ориентированная, но только потому, что я лучше знаю его плюсы и минусы.

    P.P.S Вообще-то Python и Ruby дело тоже не ограничивается. Для задач обучения также прекрасно подходят языки типа Groovy или Lua. Просто я с ними широко не работал и отвечать за слова не могу :).

    См. также


    Hackety Hack — инструмент для обучения программированию на Ruby.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 257
    • +4
      Классная статья, хорошие аргументы, но кто сейчас сможет из готового или готовящегося преподовательского состава преподовать или даже просто сам по себе начать инетересоваться руби вместо того что им втыкали в голову в их вузах… Так что это конечно прекрасно все, но не реализуемо пока
      • +3
        Ну можно начать с молодых кадров, сидящих на Хабрахабре :)
        • +2
          На Хабре, благо, можно изучать новые языки каплями, ведрами и унциями. А вот в школы и вузы сложно сейчас внедрить что-то новое, хоть и хотелось бы…
          • +3
            Причём даже если государство сделает под это очередной «портал» на бейсике за немалые бюджетные денежки, это делу не поможет. Как толкали по инерции привычное, так и будут. Да и собственно чему удивляться? Сначала надо сделать профессию учителя привлекательной с финансовой точки зрения, иначе преподавать будут только те «специалисты», которым не хватает знаний чтобы работать программистами. Ну и те немногие, перед которыми я готов снять шляпу за их безвозмездный труд на благо детям.
          • +2
            Побольше бы преподавателей читали такие статьи.
        • +8
          При действительно начальном обучении программиста, мне всё-таки кажется, PASCAL до сих пор остается идеальным решением — человек только начинает знакомиться с программированием и многие вещи из Ruby для него будут казаться непонятными волшебными пузырьками.

          Андрей, о каком ООП и функциональном программировании может идти речь, если человека впервые в жизни посадили писать программу =)

          Это всё уже можно начать преподавать потом, ну пусть даже спустя семестр или два
          • +1
            ООП само собой преподавать уже потом. Но для преподавания не надо будет учить другой язык программирования.

            Обычные алгоритмы на Ruby выглядят точно так же как на Pascal :).
            • 0
              видимо Pascal человек узнает, где-то раньше? И для него всегого рода декларации переменных не кажутся волшебными пузыриками?
              Вообще все зависит от преподавателя, если он не будет говорит «def name do… end — так мы пишим потому что так НАДО», то и волшебства не будет.
            • +5
              Pascal, Basic…

              Нас в вузе в первом же семестре окунули с головой в ассемблер :) Затем был чистый С, и это было классно!
              ООП начали преподавать только со второго курса. В прочем, многие уже знали C++, хоть и не в совершенстве.
              • НЛО прилетело и опубликовало эту надпись здесь
                • –1
                  Ну не любой язык, а только с такой же парадигмой, как и у Pascal ;). В любом случае изучение Ruby/Python даст столько же, сколько Pascal если не больше.
                  • –1
                    Кроме того, у Python/Ruby есть не только IDE, а и интерактивная консоль. Да и зачем иметь лишний язык программирования, который не нужен сразу после обучения?
                    • НЛО прилетело и опубликовало эту надпись здесь
                      • 0
                        Она позволяет экспериментировать быстрее. Конечно преимущество не на 100 раз, но всё равно удобнее.
                        • 0
                          Ну а без интерактивности студент экспериментирует медленнее, зато больше думает.
                      • –4
                        Зная Паскаль, нетрудно обучиться программированию в среди Delphi.
                        А Дельфи — идеальная вещь для написания стандартных виндовых прикладных программ.
                      • +4
                        После Паскаля Ерланг за неделю вы не выучите.
                        • –2
                          Ерланг другой язык, а вот в C/C++ можно будет достаточно быстро разобраться.
                          Все таки нужно изучать языки программирования с низкого уровня на высокий. Чтобы человек потом не воспринимал код на Ruby, Python или Javascript как магию вуду, а понимал как это работает на низком уровне.

                          Я когда-то начинал с основ ассемблера, после него паскаль казался просто сказкой.
                          • 0
                            Именно об этом и говорят. Языки одной группы да, можно изучить за неделю, зная один из них. Но языки бывают разные.
                            По поводу того, что нужно понимать, как это всё работает на низком уровне, абсолютно согласен.
                            • +1
                              Проблема в том, что нет единого пути с низов на вверх. Общее только одно — asm, но его преподавать тяжело. А C++ — это не низ, это уже одна, далеко не идеальная ветвь.
                              • +1
                                Ну вот Форт — уровня ниже некуда, а после Паскаля все равно будет трудно.
                          • –3
                            ага начни c python/ruby или явы и все, ппц приехали…

                            нащот кроссплатворменности и актуальности (современности) -> откроте для себя: free pascal, zonnon, bkackbox (component pascal)
                            • +2
                              FreePascal — это просто свободная реализация TurboPascal. Как минимум тот же консольный интерфейс. Zonnon — это вообще новый язык, так какая разница переходить ли на Ruby или на Zonnon? Кроме того, как я понимаю free pascal, zonnon, bkackbox всё равно не используется в промышленности и вопрос только одной парадигмы не решён.
                              • НЛО прилетело и опубликовало эту надпись здесь
                                • 0
                                  Неплохо выглядит, но опять же вопрос — почему именно Pascal? Вот, например, такая же среда обучения для Ruby — Hackety Hack.
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                    • +2
                                      Есть ещё Python, Groovy, Lua. За последние 10 лет было создано много новых лёгких языков. Python вообще создавался учителем в рамках проекта языка именно для обучения.
                                      • НЛО прилетело и опубликовало эту надпись здесь
                                        • 0
                                          Python с паскалем перепутали.
                                        • 0
                                          Prooflink or didn't happen.
                                          • 0
                                            Википедия: «Гвидо начал писать Python на досуге, позаимствовав некоторые наработки для языка ABC (Гвидо участвовал в разработке этого языка, ориентированного на обучение программированию
                                      • 0
                                        это психоделика сполшная.
                                        знакомить детей с творениями whytheluckystuff — нельзя. это чревато неверным пониманием процесса.
                                        творения замечательны, но для взрослого программиста. не для новичка.
                                    • –3
                                      обероноподоюбные езыки всетаки ближе по структуре к паскалю.
                                      руби и питон покалечат мозг юного хацкера своей скриптовой сущностью.
                                      • +3
                                        Мозг юного хацкера калечится чем угодно. Хоть паскалем, хоть обероном, хоть схемой с питоном. Вопрос в том, как преподавать, и в каком комплексе. Одним языком все равно не отделаться.
                                      • +1
                                        Freepascal очень похож на Delphi, как минимум в нем есть нормальный ООП. Не для консольных приложений есть Lazarus
                                      • –2
                                        вообще начинать с python/ruby думаю лучше, чем начинать с Basic :)
                                        • +1
                                          а я открыл для себя Turbo Delphi :) Сижу и решаю консольные задачки, ну и книгу Вирта «Алгоритмы и структуры данных» изучаю… Мне пока хватает…
                                        • +3
                                          Что-то мне спомнились школьные годы…
                                          Как я на Дельфях писал визуализатор алгоритма Беллмана-Форда.
                                          Наверное, мне просто повезло со школой)))

                                          А вообще было бы круто начинать изучать программирование с Си++. Не знаю, благоговею я перед ним…
                                          • 0
                                            в институте — да. хорошо.
                                            в школе — согласитесь, не всегда стоит :-)
                                            • +1
                                              С C++ не стоит — лучше с C, а ООП модель C++ — это уже одна, не самая лучшая ветка.
                                              • –1
                                                блин, чем вам так не угодила ООП модель в с++? за этот тред уже наверно раз третий вижу ваш пост про это;)
                                                • +1
                                                  Потому что он воспринимается как де-факто стандарт ООП — хотя первая модель была именно Smalltalk. В общем личные счёты :D
                                                  • 0
                                                    а более конкретно? просто когда вы говорите что ООП в с++ кака лишь из-за того что вам обидно за смаллталк это не серьезно…
                                                    • 0
                                                      Ну я говорил только то, что ООП модель C++ — только одна из возможных и неплохо было бы дать и модель Smalltalk.
                                                      • 0
                                                        а смаллталк еще жив? я думал он сейчас где-то рядом с паскалем по вотсребованности
                                                        • +1
                                                          Ruby, Objective-C (Mac OS X, iPhone) используют его модель. Если говорить формально, все языки с утиной типизацией — это больше подход Smalltalk.
                                                          • –2
                                                            обж-С это вообще жесть на мой взгляд… я его так и не понял и преподовать его в вузе точно не стоит (в виду сильной нишевости)…
                                                            а вот языки типа руби/питона легко изучаются с++-программистом (на своем опыте говорю)…
                                                            • 0
                                                              ООП модели Ruby и Obj-C одинаковые кстати. Вообще я не думаю, что Obj-C более нищевый, чем Delphi :).
                                                              • 0
                                                                ну я думаю что даже менее нишевый чем дельфи… но я вроде про дельфи ваще молчу
                                                              • +1
                                                                на самом деле ObjC довольно простой язык, просто иногда трудно понять концепцию посыла сообщения объекту, вместо вызова его функции. Некоторые считают что это одно и то же, хотя на самом деле идея намного лучшая.

                                                                А учить в университете ЯП нужно не исходя из того насколько они востребованы, а исходя из того, какие концепции в них заложены.
                                                                • 0
                                                                  и поэтому надо преподавать на основе ЯП, который практически уникален по своей концепции? Я всегда считал что надо преподавать более общие языки, чтобы новые похожие можно было легко понять (что дает больше возможностей, чем на основе уникальных языков)
                                                                  • 0
                                                                    C++ вряд ли более общий :) Множественное наследование — это чисто его прерогатива. Pascal тоже довольно самобытен.
                                                                    • 0
                                                                      а так обязательно использовать множественное наследование?
                                              • +1
                                                Ну у нас на МатМехе в первом семестре чистый си. Для зачета заставили написать прогу для расчета алг. выражений. Во втором семестре будет хаскель и будем писать что-то вроде интерпретатора асемблера. Конечно, своей очень упрощенной виртуальной машины.
                                                • +1
                                                  Повезло, но везет не всем. Матобез учит haskell всем потоком на 5ом курсе, а остальные как придется — в программе его нет, а язык на котором проходит практика выбирает преподаватель каждой группы самостаятельно, поэтому у нас в группе была Java, а у соседней группы haskell.
                                                  • 0
                                                    А вы где учитесь(учились)?)
                                                    Я про ИТ говорю
                                              • +8
                                                Мне кажется, что надо начинать обучение с более строгих языков, чем Python/Ruby, потому-что на первых порах у многих работает принцип «если компилируется, значит работает». И в коде таких студентов может быть много скрытых ошибок, которые могут быть пойманы компилятором в языках типа C++/Java/C#.
                                                • +3
                                                  Тоже вариант, но тогда надо начинать с C. C++/Java/C# — это уже обвесы и парадигмы.
                                                  • 0
                                                    Да, совершенно верно, начинать обучать нужно именно с компилируемых языков. Без базовых понятий системного программирования, совершенно неправильно начинать изучать интерпретируемые языки.
                                                    • 0
                                                      А какая принципиальная разница между компилируемыми и интерпретируемым. Python и JRuby тоже между прочим компилируются ;).
                                                      • +1
                                                        Ой, что-то я не в ту ветку попал :) Тогда перефразирую: «Нет, начинать обучать нужно именно с компилируемых языков… »

                                                        И повторю, сказанное markshevchenko, что интерпретируемые языки не дают понять, как выполняются некоторые операции на уровне системы.
                                                        • 0
                                                          Python и JRuby тоже компилируются ;) Вопрос, наверное, в ручном управлении памяти. Но на Pascal тоже нельзя увидеть всё на уровне системы. Я предлагаю Ruby/Python только как замена Pascal для обучения вкупе с asm/C.
                                                      • +1
                                                        Спорный вопрос. Смотря чему учить. Алгоритмику на algol/pascal довольно удобно преподавать. Системное программирование — на С. ООП — на Java. Веб — на Python/Ruby. Распределённые вычисления — на Эрланге. Каждому языку — своё место
                                                      • +6
                                                        Нельзя начинать обучение с компилируемых языков — я в этом уверен.

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

                                                        Основательное образование — это здорово, но не надо торопить события. Это как с детьми — от преждевременных родов пользы будет мало. Лично я вижу две стадии:

                                                        1. Сначала дайте человеку научиться алгоритмически мыслить. Пусть он заинтересуется, пусть поймёт, что компьютер может быть умным и хорошим помощником, и что он полностью в его власти. И на этой стадии категорически нельзя морочить голову вопросами «сколько байт надо зарезервировать под массив», или «какой размерности переменная нужна для этого цикла». Python или Ruby — идеальны для этой цели. В дебри, вроде DSL или метаклассов лезть совсем не нужно — это для профессионального использования языков в больших проектах. Зато очень удобно отлаживать, экспериментировать… словом, учиться!

                                                        2. Дальше уже зависит от людей. Как правило, заинтересованный человек начинает расти, задачи становятся всё сложее — вот тут самое время переходить к объяснению низкоуровневых понятий. И эти понятия лягут в благодатную почву — потому что костяк алгоритмического мышления уже сформирован, и человеку будет легче «увидеть лес» за кучей низкоуровневых деревьев-мелочей, а накопленный интерес даст сил справиться с любыми трудностями.

                                                        Кого же не удастся заинтересовать на первой стадии — это «балласт», он всё равно выше не поднимется, чему его ни учи. Но с правильным стартом количество этого «балласта» можно сильно сократить.

                                                        «Студент — это не гусь, которого надо нафаршировать, а факел — который нужно зажечь.» :-)
                                                        • 0
                                                          Я не имел в виду, что начинать надо именно с компилируемых языков, я написал, что надо с более строгих, чем Питон/Руби, а компилируемость — это как пример строгости.

                                                          Давайте рассмотрим пример.
                                                          Задача: Создать массив со значениями елементов 7.4, 8, 5, 4.3, 1.6, 7. Вывести через пробел числа этого массива, разделенные на 2.

                                                          Возможное решение ученика на Python:

                                                          a = [7.4, 8, 5, 4.3, 1.6, 7]

                                                          for x in a:
                                                            print x/2,


                                                          * This source code was highlighted with Source Code Highlighter.

                                                          Возможное решение ученика на C++ (на Паскале будет похожее, только с немного другим синтаксисом):

                                                          #include <iostream>
                                                          using namespace std;

                                                          int main()
                                                          {
                                                            float a[] = {7.4, 8, 5, 4.3, 1.6, 7};
                                                            
                                                            for(int i=0; i<6; i++)
                                                              cout << a[i]/2 << ' ';
                                                              
                                                            return 0;
                                                          }


                                                          * This source code was highlighted with Source Code Highlighter.


                                                          Тепер вопросы:
                                                          1. Где тут 2+2, а где тут шестеренки арифмометра? (При этом учтите, что include, using namespace, main, return — это просто шаблон, который «просто надо»).
                                                          2. Почему ученик на С++ и Паскале удовлетворится результатами, и будет работать дальше, а ученик Питоне будет думать, где же тут ошибка? Если же начать обьяснять в чем ошибка — то мы опять-же возвращаемся к «шестеренкам арифмометра».

                                                          > «Студент — это не гусь, которого надо нафаршировать, а факел — который нужно зажечь.»
                                                          Спасибо, хорошая фраза :)
                                                          • +4
                                                            Вы хоть сами попробуйте теперь посмотреть на эти исходники отстранённо, взглядом новичка. В Python-варианте мне видна самая суть алгоритма, и я знаю, что этого минимума достаточно для работы!

                                                            А теперь вернёмся к C++-варианту. Попробуйте полностью объяснить ваш пример начинающему. Т.е. так, чтобы не осталось никаких «это вы потом поймёте», или магических «просто так надо» (если вы действительно хотите научить человека понимать, а не выполнять странные заученные операции). Вам понадобится (сверху-вниз) объяснить:

                                                            1. что такое директивы компилятора
                                                            2. как программы разбиваются на модули, и назначение директивы #include
                                                            3. что такое пространства имён (это когда ученик только-только переменные-то усвоил?!), и зачем именно понадобилась строка «using namespace std;»
                                                            4. зачем в конце каждой строки стоит ";", когда её надо использовать, а когда — нет. Интуитивно это не всегда понятно — почему, например, после «for» этого знака нет?!
                                                            5. типы данных, и зачем конкретно нужен float. Даже великий математик прошлого не понял бы типы данных сразу, потому что переменная — это всегда просто переменная, и люди решают математические задачи не задумываясь о каких-то там форматах представления данных.
                                                            6. Синтаксис оператора «for», что такое переменная цикла, как она инициализируется и меняется по шагам, что такое условие цикла, что такое инкрементация, и почему именно вы тогда написали «i++», а не "++i", «i = i + 1»?
                                                            7. что такое потоки ввода-вывода (и не забудьте увязать это с include).
                                                            8. что такое функция вообще, и зачем понадобилась функция main. Попробуйте разъяснить начинающему про «точку входа» в программу, про значение, возвращаемое операционной системе после завершения работы и зачем оно нужно. К счастью, в вашей программе функция main без аргументов, вроде «int argc, char...» — а ведь некоторые компиляторы на это ругались бы!

                                                            Вам не кажется, что это всё просто кошмарно сложно для примера «Вывести через пробел числа этого массива, разделенные на 2»?! И не надейтесь, что ученики так вот сразу всё это усвоят. Не усвоят, а испугаются. Так, вместо того, чтобы сформировать у них мнение
                                                            — Программирование — это довольно понятная штука, и я со временем всему научусь.
                                                            можно сформировать другое:
                                                            — Программирование — это какие-то страшные дебри непонятных условностей, через которые продираются только полоумные психи. Ни в жизнь я его не смогу освоить!

                                                            Согласитесь, очень похоже на то, как многие дети (и взрослые) относятся к математике, физике и прочим точным наукам.
                                                            • 0
                                                              п. 1-3. Ну совсем не вижу необходимости рассказывать это сразу. Во-первых, если для вас это критично — используйте Pascal, там ничего из этого не надо. Во-вторых — вспомните, что в Python тоже надо будеть пояснять, что такое import, для такой «простой» функции, как, скажем, синус.

                                                              п. 4. А на Питоне на той же программе учителю придеться бегать по класу и пробелы расставлять — чем лучше точки с запятой?

                                                              п. 5. Во-первых не надо сразу вываливать на ученика все типы данных. Почему просто не сказать, что float — действительное число? Неужели так сложно?
                                                              Во-вторых даже вы, судя по тому, что хотя я и спрашивал, но вы нигде так и не ответили, не заметили, что в примере с Python — ошибка! А каково будет ученику? Эта ваша «простота» Питона выливается в состояние ученика «Почему у меня такая простая программа и неправильно работает?». А это состояние куда хуже чем пару строчек, на которые учитель сказал пока-что не обращать внимания.

                                                              п. 6-8. Согласен, тут С++ слишком сложен, но я привел С++ просто в качестве языка, который строже чем Питон, и показал в чем преимущество его строгости. Для обучения нужен более строгий, чем Питон язык, с более простым синтаксисом, чем в С++. Тот же Паскаль, например.

                                                              Но попробуем вернуться к сути моего поста. Зря я написал пример на С++, надо было выбрать более простой язык со статической типизацией (сообственно С++ действительно сложный язык — и я тоже считаю, что начинать сразу с него не надо), поскольку вы так кинулись мне доказывать что С++ слишком сложен, что забыли ответить на вопрос, ради которого я вообще писал эти примеры — почему ученик на Питоне будет искать ошибку, а у ученика на С++ (подставте сюда любой другой статически типизирований язык) будет все работать?
                                                              • +1
                                                                п. 1-3. Ну совсем не вижу необходимости рассказывать это сразу.
                                                                И я о том же. Не нужно всё рассказывать сразу и забивать раньше времени мозг шелухой. Но, в то же время, я уверен в необходимости избегать «магических заклинаний». Ведь все эти «using namespace std;» для новичка ничем не отличаются от «чтобы заклятье заработало — брось три горсти песка через левое плечо, повернись на левом каблуке и подожги сушёную лапку летучей мыши»".
                                                                Во-первых, если для вас это критично — используйте Pascal, там ничего из этого не надо.
                                                                Вот я и использую питон :) Там это точно не надо :)
                                                                Во-вторых — вспомните, что в Python тоже надо будеть пояснять, что такое import, для такой «простой» функции, как, скажем, синус.
                                                                В принципе, можно неделями учить человека, и так и не столкнуться с import'ом — есть куча интересных задач, решаемых и без него. Особенно классических — на базовые алгоритмы. А придёт время — человек будет достаточно подготовлен, да и не такая это сложная штука — import.
                                                                п. 4. А на Питоне на той же программе учителю придеться бегать по класу и пробелы расставлять — чем лучше точки с запятой?
                                                                Просто выберите нормальный редактор. «Проблемы с табуляцией» — исключительно надуманны. Попробуйте сами — поймёте.
                                                                п. 5. Во-первых не надо сразу вываливать на ученика все типы данных. Почему просто не сказать, что float — действительное число? Неужели так сложно?

                                                                Потому что встаёт вопрос «а зачем понадобилось какое-то отдельное „действительное число“»? Если этот вопрос не поставили, значит, человек просто кивнул, соглашаясь с вашим авторитетом, и запишет float в свою «книгу заклинаний».
                                                                Во-вторых даже вы, судя по тому, что хотя я и спрашивал, но вы нигде так и не ответили, не заметили, что в примере с Python — ошибка! А каково будет ученику? Эта ваша «простота» Питона выливается в состояние ученика «Почему у меня такая простая программа и неправильно работает?». А это состояние куда хуже чем пару строчек, на которые учитель сказал пока-что не обращать внимания.
                                                                Читаю, и не могу понять, а при чём тут статическая типизация? При ней нельзя допустить ошибку? Компилятор всё всегда поправит и подскажет?
                                                                п. 6-8. Согласен, тут С++ слишком сложен, но я привел С++ просто в качестве языка, который строже чем Питон, и показал в чем преимущество его строгости. Для обучения нужен более строгий, чем Питон язык, с более простым синтаксисом, чем в С++. Тот же Паскаль, например.
                                                                Да, вы привели пример более строгого языка. Но я всё ещё не вижу преимущества в обучении, обусловленного этой строгостью. Пока только утверждения что «строго»=«хорошо». Ну да… а если пороть ремнём за двойки — тоже будут учиться гораздо лучше…
                                                                Но попробуем вернуться к сути моего поста. Зря я написал пример на С++, надо было выбрать более простой язык со статической типизацией (сообственно С++ действительно сложный язык — и я тоже считаю, что начинать сразу с него не надо), поскольку вы так кинулись мне доказывать что С++ слишком сложен, что забыли ответить на вопрос, ради которого я вообще писал эти примеры — почему ученик на Питоне будет искать ошибку, а у ученика на С++ (подставте сюда любой другой статически типизирований язык) будет все работать?
                                                                Я всё ещё в недоумении, и не могу понять вашей логики. Ученики, пишущие на языках со статической типизацией не допускают ошибок?! 8-) Или допускают их меньше? Если второе — тут можно развернуть очень большой спор. Ибо, насколько я знаю, очень большое число ошибок «растут» именно из статичности типизации — выход за границы зарезервированных массивов (вспомните переполнение буфера), некорректные выбранный тип (вспоминается неудачный запуск космического аппарата, который взорвался из-за того, что программа блока управления попыталась сложить два однобайтовых целых и результат поместить в такую же переменную).

                                                                Ни строгость, ни типизация не являются панацеями для «более качественного» обучения. Качества не будет, пока человек не начнёт любить программирование. Я не говорю, что нельзя привить любовь, обучая C++ или Pascal — всё можно. Просто динамические языки, более близкие к традиционному мышлению человека, позволяют сделать первые шаги более простыми и приятными — не отпугивая, а маня человека в этот увлекательный мир… :)
                                                                • 0
                                                                  Не буду отвечать по пунктах, а то размеры постов разрастаются в арифметической прогрессии.

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

                                                                  > Но я всё ещё не вижу преимущества в обучении, обусловленного этой строгостью.

                                                                  Вы внимательно примеры прочли? Или отсутствие ошибки при внешне «кажущейся» одинаковости — это не является преимуществом? Я не говорю, что если мы используем строгий язык мы вообще избавимся от ошибок — но некоторые скрытые ошибки, от которых порой хочется ученику головой об стенку биться, могут ищезнуть. У меня лично были такие ошибки, когда я учил языки типа Python/PHP, что потом оставляло сильное впечетление «коварности» языка.
                                                          • +1
                                                            Как вы всё правильно пишете. И разбор примера из С++ ниже — великолепен. Вы — преподаватель? :)
                                                            Цитата классная.
                                                            • +1
                                                              Если бы… :) Нет, профессионально я преподаванием не занимаюсь. Но хотел бы, если честно, только материальное положение не позволяет. Опыт обучения азам программирования у меня был (в разное время). Пробовал начинать обучение и паскаля, C — оказалось, что всё это не то… так что я тоже переболел этим «начинать обучение с более строгих языков», «нужна дисциплина» и т.п.

                                                              Сам начинал шестиклассником, с бейсика, без компьютера — на бумажке, по старой советской книжке…

                                                              Я так понимаю, отвергают обучение программированию на Python/Ruby те люди, которые сами никогда на них не писали. Они думают, что хорошо представляют, что это такое. Они уверены, что это почти тот же бейсик…

                                                              С такой позиции вообще кажется диким, что на этих языках пишут что-то серьёзное, коммерческое… Как же так?!!! А как же строгая типизация?! Как же проверка кода на стадии компиляции?!!! Что значит «Этот метод был создан динамически уже после создания объекта, и не содержится в декларации класса» или «атрибут может быть, а может и нет» — это безобразие и раздолбайство! Это вообще «не полетит»!.. Я сам через это прошёл…
                                                              • 0
                                                                может быть в общем вы и правы насчет людей, но бывают и неподходящие случаи… например мне очень нравится Руби (Питон смотрел мельком, поэтому не могу ничего сказать) и я не спорю что на нем можно писать достаточно большие программы. Но я все равно считаю, что учить надо с менее засахаренных языков, чтобы не допустить вот этого самого разгильдяйства.
                                                                • +1
                                                                  Беда в том, что вам только «нравится Руби». И не спорите вы с тем, «что на нем можно писать достаточно большие программы» только потому, что эти большие программы — у вас перед глазами. Они существую объективно, и с этим не поспоришь. А вы попробуйте серьёзно на Руби писать! Иначе разговор походить на беседу дальтоника с фотографом об оттенках заката.

                                                                  Поймите, нет никакого «разгильдяйства»! Осознание того, что «скрипач не нужен» (я про типизацию, строгость и прочие низкоуровневые детали) приходит далеко не сразу. Мне понадобилось около двух лет, т.к. ранее я занимался коммерческой разработкой на Delphi, С# и Java. Все эти два года меня буквально «плющило» от питона!

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

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

                                                                  К сожалению, я повально сталкиваюсь с примерами, когда программисты пишут на каком-нибудь C# или Java, словно даже не понимая, что они делают. Пишут какими-то шаблонными, заученными кусками. Без интереса. Без любви к искусству. Мне кажется они и есть — те самые «нафаршированные гуси» нашего образования. Обучить их обучили, как обезьян можно научить управлять космическим кораблём, но развилось ли у них глубокое понимание и соответствующее алгоритмическое мышление — это большой вопрос.
                                                                  • 0
                                                                    В силу недавнего знакомства много использовать руби в деятельности банально не успел… ну написал нейросеть с ГУЕм… ну использую рельсы… но особо много не написал еще… я не спорю что это очень хороший язык, не спорю что на нем можно эффективно писать, НО на нем можно эффективно писать опять же только если понимаешь что находиться behind the scene, если понимаешь какая примерная сложность вот у такого алгоритма, а какая у такого. Иначе же программы будут писаться неэффективно, но не спорю быстро и возможно даже безглючно.
                                                                    Я не говорю про разгильдяйство в языке, я говорю про разгильдяйство в мозгу… когда человек осознает что такое динамическая типизация, чем она хороша, чем она плоха то динамика полезна, но когда человек только начинает программировать он это банально не может осознать и начинает лепить такой ужас…

                                                                    И да… я не говорю как ПРОЩЕ научиться… учеба она всегда сложна… я говорю как научиться КАЧЕСТВЕННЕЕ… в нашей стране образование и так слишком простое… а вот качество иногда страдает

                                                                    По поводу шаблонных кусков. А вы не подумали что после обучения на том же руби с его большим объемом магии (я знаю что это не магия, а просто хорошо продуманная платформа, но постороннему человеку это все кажется именно магией) человек будет писать теми же самыми заученными кусками, только эти куски будут изобиловать кучей всяких мапов, инъекций и прочего, когда на самом деле это можно решить не таким красивым, но гораздо более эффективным вложенным циклом?
                                                                    • +1
                                                                      … НО на нем можно эффективно писать опять же только если понимаешь что находиться behind the scene, если понимаешь какая примерная сложность вот у такого алгоритма, а какая у такого. Иначе же программы будут писаться неэффективно, но не спорю быстро и возможно даже безглючно.
                                                                      Вы абсолютно правы! Но мы говорим о руби в контексте начала обучения программированию вообще, а не профессиональной разработки.

                                                                      И да… я не говорю как ПРОЩЕ научиться… учеба она всегда сложна… я говорю как научиться КАЧЕСТВЕННЕЕ… в нашей стране образование и так слишком простое… а вот качество иногда страдает
                                                                      Не понимаю. Простота учёбы и качество не всегда связаны между собой. Почему вы считаете, что учёба обязана быть сложной?! Вот я, например, не считаю, что на школьных уроках математики дети должны решать задачи с использованием римских цифр — «для расширения кругозора». Или что надо отказываться от образовательных видеофильмов, чтобы у учеников «лучше развилось собственное воображение». Нет смысла отказываться от инструментов, способных увеличить эффективность обучения. Ruby/Python — это такой же инструмент. Удобный, простой, интуитивно понятный. Он не мешает вам обучать эффективному программированию. Зато может уменьшить «балласт», о котором я писал выше.

                                                                      … человек будет писать теми же самыми заученными кусками, только эти куски будут изобиловать кучей всяких мапов, инъекций и прочего, когда на самом деле это можно решить не таким красивым, но гораздо более эффективным вложенным циклом?
                                                                      Вам надо обучать алгоритмам и структуры данных — пожалуйста, изучайте! Руби вам не помеха, а только подспорье! Как вы научите — так и будут писать. На C++ я тоже могу использовать «всякие мапы» — это несложно, так что ругать Руби просто за их наличие не стоит. Более того, в подавляющем числе задач скорость выполнения не играет такой колоссальной роли, как простота, ясность и компактность кода! «Меньше кода — меньше багов».

                                                                      Поймите же! Обучение должно быть интересным! Должно!!! Чему бы вы ни учили! Заинтересуйте человека — и ему всё станет по силам! Что, по вашему, интереснее для начинающего — Ruby или C?
                                                                      • 0
                                                                        Вы абсолютно правы! Но мы говорим о руби в контексте начала обучения программированию вообще, а не профессиональной разработки.

                                                                        А что не надо учиться писать эффективно? Мне казалось что в этом и состоит основная задача программиста… или я заблуждаюсь и сейчас эффективность не в моде?

                                                                        • 0
                                                                          чорт нажал ctrl-enter

                                                                          • 0
                                                                            Вам надо обучать алгоритмам и структуры данных — пожалуйста, изучайте! Руби вам не помеха, а только подспорье! Как вы научите — так и будут писать. На C++ я тоже могу использовать «всякие мапы» — это несложно, так что ругать Руби просто за их наличие не стоит. Более того, в подавляющем числе задач скорость выполнения не играет такой колоссальной роли, как простота, ясность и компактность кода! «Меньше кода — меньше багов».

                                                                            На плюсах не те мапы которые в руби как бы… я говорил про метод map у массива.
                                                                            Чем меньше кода тем меньше багов, но и меньше понимания того что делает этот код у обучающегося.
                                                                            Поймите же! Обучение должно быть интересным! Должно!!! Чему бы вы ни учили! Заинтересуйте человека — и ему всё станет по силам! Что, по вашему, интереснее для начинающего — Ruby или C?

                                                                            Мне было вполне интересно изучать С. Если человеку неинтересно программирование, то ему будет неинтересно ни С, ни Руби, ни что угодно.
                                                                            А если человеку нравится потому что это просто, то это нехорошо. Программирование это еще и достаточно тяжелый труд, и это надо понимать с самого начала.
                                                                            • 0
                                                                              Давайте закруглятся со спором :). Спор высоко-/низкоуровневые идёт ещё со времён asm vs. C (кстати к C предъявляли те же претензии, что сейчас к Ruby ;) )
                                                                              • 0
                                                                                Отвратительно писать можно на любом языке. А вы отклонились от темы, ударившись в «священные войны» о сравнительных качествах языков вообще.
                                                                                • 0
                                                                                  начинающий всегда пишет отвратительно… и я не пытаюсь сказать что руби/питон/любой-другой-язык это плохо, я просто говорю что эти языки лучше оставить для тех кто уже понимает в чем суть…
                                                                                  как выше сказали давайте закругляться со спором, а то уже вроде на второй круг пошли
                                                          • +2
                                                            скажите, вам нравились уроки информатики в школе и пары программирования в институте? Вероятно да, если вы продолжаете этим заниматься. Мне тоже нравились. А 90% одноклассников их терпеть ненавидели (в инсте у меня специальность системное ПО, так что пошли туда только те кому интересно). Они и с паскалем/делфи с трудом справлялись в большинстве, несмотря на то что школа продвинутая (лицей), математический класс и отличный преподаватель. И мне кажется им было бы совершенно без разницы какой язык изучать, учитывая что из параллели (80 человек) по программистской стезе пошло человек 5
                                                            • +1
                                                              Если бы в школе преподавали на Лого с черепашкой, то нравилось бы большему кол-ву учеников :).
                                                              • +2
                                                                классе во втором-третьем было что-то из этой серии. Действительно, всем нравилось :)
                                                              • +1
                                                                А вот мне и всей группе не нравились :)
                                                                — вся группа плевалась (одни сознательно, другие за компанию :) ), когда первым языком (по сути для обучения собственно программированию и алгоритмизации) нам дали Fortran
                                                                — ассемблер дали поверхностно, кто его не знал до этого, толком ничего и не поняли, кто знал поверхностно (как я) знания не углубили
                                                                — TurboPascal + TurboVision и параллельно TurboC++ + TurboVision — первый, имхо, был излишен, он назывался что-то вроде «Алгоритмы и численные методы», второй «ООП». Стоит ли говорить, что половину курса алгоритмов мы изучали собственно TurboPascal и TurboVision, изучая параллельно практически тоже самое, но на С++ (возможно, конечно, что сыграло свою роль то, что читали курсы нам разные кафедры)
                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                • 0
                                                                  Кстати, быть может для школы вам стоит приглядеться к Лого и KTurtle (или другой «черепашке»)? В программировании будут шарить больше.
                                                              • +1
                                                                бэйсик не использовал, но на паскале всетаки можно писать оконные приложения — для этого существует библиотека Turbo Vision :)

                                                                а вообще в целом я согласен с автором, что необходимо внедрять в программу универа знакомство с такими языками как ruby/python/bash/php/perl

                                                                но с другой стороны, если студент будет учитсья на более сложных языках (например С/С++, asm и т.д.), то в будущем ему будет очень легко изучить любой из более легких языков. тяжело в учебе — легко в бою как говорится :)
                                                                • 0
                                                                  Это справедливо только для C и asm — потому что это фундамент. C++, Pascal, Java — это уже обвесы. Да и функциональные языки учить так же сложно, как и C++ ;)
                                                                  • 0
                                                                    С и асм — зыбкий фундамент. ИМХО, люди, которые считают, что начинать изучение С++ нужно с фундаментальных С — глубоко заблуждаются. Если кого заинтересовала эта мысль, комментируйте, дам расширенные примеры.
                                                                  • 0
                                                                    TurboVision есть и для C++, мне сишная реализация больше понравилась :)
                                                                  • +1
                                                                    Эх как было прекрасно писать программы в девятом и десятом классе на паскале!!!
                                                                    Мне так нравилось придумывать различные алгоритмы…
                                                                    А потом я перешел в 11класс и появился ворд с экселем, которые извратили мой мозг.

                                                                    Сейчас дружу с С++ и знакомлюсь с питоном, большего мне и не надо!
                                                                    • 0
                                                                      А почему бы ещё не присмотреться к функциональному программированию? Например, на Erlang? На С++ сложно писать многозадачные приложение, а на Erlang ты можешь писать хоть под 1024-ядерный процессор! :D
                                                                      • –1
                                                                        Думаю знание Erlang мне не помешает. Как время высвобожу поизучаю!
                                                                    • +1
                                                                      Обучение подходам, абстракциям и пр. — возмонжно. Но C/Паскаль и ассемблер исключать из программы нельзя. Иначе получится как в фильмах про магию )
                                                                      • 0
                                                                        Поэтому в начале я написал, что надо преподавать и C. А зачем Pascal я не знаю — Ruby и C покрывают все его задачи.
                                                                        • +1
                                                                          Вот полезность в обучении программиста (не факультативный курс информатики, не обязательный курс программирование для строителей, например, а именно профессионального программиста) конкретно Паскаля лично для меня под большим сомнением. Овладение связкой asm/C/C++ и в консоли, и в современной IDE даст ему куда больше, по-моему, в профессиональном плане
                                                                          • +2
                                                                            Согласен, только мне кажется, что в связке asm/C/C++ С++ нужно заменить на язык другой парадигмы.
                                                                            • +1
                                                                              Заменить не стоит, дополнить :) На первых трех курсах мы изучали: ассемблер, паскаль, си, сипэпэ, фортран (это, видимо, вместо бейсика :D может не было его на СМ1420 (все таки не для начинающих «машинка»), может фортран обязательный язык в программе тогда был, может еще что ). Согласился бы заменить паскаль и фортран на руби :) Правда его еще тогда не было, да даже на smalltalk или lisp, согласился бы, самостоятельно я их не осилил. Но вот С++ это святое :)
                                                                              • 0
                                                                                Святое — это C :) C++ — это уже ООП настройка, а С++ модель ООП наверное лучше учить по языкам чистого ООП типа Java/C#.
                                                                                • 0
                                                                                  Спорить о религиях — моветон: Р
                                                                                  • +1
                                                                                    Хренассе у вас чистое ООП.
                                                                                    • 0
                                                                                      > Хренассе у вас чистое ООП

                                                                                      Да там хоть у «вас», хоть «не у вас». Что такое «чистое ООП» и почему — никто толком не скажет (и вряд ли есть возможность отнести какую-то конкретную реализацию объектно-ориентированных систем под это словосочетание)
                                                                                    • 0
                                                                                      > чистого ООП

                                                                                      Весьма сомнительное словосочетание.
                                                                            • +1
                                                                              Сейчас Паскаль лучше хотябы тем, что под него тонны книг и другой литературы. По питону и руби литературы намного меньше.
                                                                              • 0
                                                                                Это уже вопрос курицы и яйца. Только по Pascal мало практической литературы ;).
                                                                                • 0
                                                                                  Заглянул сегодня в ближайший книжный магазинчик. В отделе компьютерной литературы — один книгохлам. Удивительно, покупает ли это кто-нибудь и зачем занимать этим место. Жаль, на Белорусской магазин закрылся — там действительно был выбор актуальных книг. Не представляю, как выглядят аналогичные магазины в провинции — боюсь что там компьютерных книг две — «windows для чайников» и «паскаль для школьников»
                                                                              • 0
                                                                                Я только начал знакомиться с Ruby, но составил уже кое-какое мнение. Если начинать изучение программирования вообще на Руби (во всем его многообразии, а не «процедурно-ооп-сишном» стиле), то потом, на стадии изучения более простых языков, это может сыграть злую шутку — он начнет плеваться в сторону «обычных» языков :) где надо писать for(i=0; i<count; i++) {...} вместо count.times {|i| ...} — Не это ли является целью, пускай и подсознательной, вашей агитации обучения программированию на Руби? ;)
                                                                                • 0
                                                                                  :D сейчас точно такая же ситуация — люди плюются на count.times {|i| ...} так как их учили for(i=0; i<count; i++) {...} (теоретически оптимизировать оба алгоритма можно одинаково).
                                                                                  • 0
                                                                                    Да, но переход от for к times куда проще, чем обратно, особенно если не знать как внутри, скажем при полноценной компиляции (ведь мы к ней придем на пределе оптимизации, если считать что над аппаратными средствами у нас власти нет? ;) ), реализуется этот цикл.

                                                                                    Я вот, в известных вам «каплях», так и не врубился во все эти блоки. То есть я просто принял, что each это просто другая запись оператора цикла, что, грубо говоря, где-то там внутри интерпретатора он преобразуется к тому же for. Мне не в первой привыкать к различным синтаксисам, так что даже не плевался (плевался и плююсь :) из-за @ перед членами класса, почему-то мне проще набирать даже $this-> :) )

                                                                                    Но только прочитав в книге про yadl понял что это не синтаксическая конструкция для замены for, а действительно обычный метод. Причем в рамках С++ я не могу пока представить как его реализовать. Что-то похожее, с передачей методу each указателя на функцию, в которой исполняется тело цикла… или шаблоны как-то прикрутить Но громоздко это будет и… не красиво

                                                                                    То есть если студент просто выучит методы times upto и т. п., то ему нужно будет просто привыкнуть к другому синтаксису, а вот если он поймет как это работает, и будет активно этим пользоваться, то скорее всего будет плеваться глядя на С++, а тем более С. Я бы не плевался, если бы начал изучение программирования с Ruby, но слава богу начинал с «ассемблера» «Электроники БЗ-34» :D
                                                                                    • 0
                                                                                      Ну кстати синтаксис for и у Pascal другой ;) Я кстати тоже сначала плевался, когда переходил на Java :)
                                                                                      • 0
                                                                                        Там синтаксис другой, но та же процедурная основа, я в школе чтобы от меня отвязались с информатикой написал «компилятор» Паскаля в Си, 99% его работы find & replace :D Что примечательно .com файлы получались меньше и работали быстрее, больше ко мне учитель информатики не подходил с задачами и прочим учебным процессом :D
                                                                                        • 0
                                                                                          У нас это обычное задание по информатике в забыл как называется группа, где готовят злобных программистов, криптографов и тд.
                                                                                          • 0
                                                                                            По идее, это стандартное задание в курсе системного программирования, который включает в себя основы синтаксического анализа и трансляции. Только, естественно, при выполнении ожидается не find & replace, а полноценный разбор. Сам писал на втором курсе с ANTLR :-)
                                                                                            • 0
                                                                                              Мне надо было, чтобы от меня отвязались учителя со своим Паскалем, я хотел Си :)
                                                                                              • 0
                                                                                                Мы такое писали на Прологе в рамках изучения логического программирования и конкретно — разбора текстов на естественном языке.
                                                                                              • 0
                                                                                                Это была все-таки школа, причем школа еще советская, а не российская :)
                                                                                          • 0
                                                                                            в рамках С++

                                                                                            std::for_each же! :)
                                                                                          • –1
                                                                                            Для меня привычней for i to n do, while do, repeat until!!! Хоть убей, но для меня это песня.
                                                                                        • +2
                                                                                          Преподавал группе студентов основы Си, затем Java, затем C++.
                                                                                          Пожалел о таком решении: многие с трудом понимают что такое стек (имеется ввиду тот что в x86) и где лежат локальные переменные, как на низком уровне работает вызов ф-ций -> отсюда трудное понимание механизмов работы C++ (таблица вирт функций и т.п.), отсюда проблемы с применением ООП.
                                                                                          Следующей группе устрою семестр ассемблера, чтобы затем знали хоть как оно всё работает…
                                                                                          Насчёт питона: после Cи предложил самим студентам выбрать из Python, Java, C#, C++, описав вкратце возможности языков, область применения и популярность. Выбрали Java…

                                                                                          После Питона научить чему-либо более низкоуровневому, мне кажется, сложно. А в условиях института (по крайней мере нашего) им значительно чаще потребуется Cи, чем Питон (на старших курсах у многих есть MPI, вычматы и прочие расчётные штуки на базах, хотя база ИСП РАН меня порадовала, там алгоритмы по крайней мере прототипируют на Питоне).
                                                                                          • +1
                                                                                            Ну статья была больше против Pascal :). Именно чтобы объяснять, что такое алгоритм, цикл и т. д.
                                                                                            Для выч. мата конечно лучше начать с asm и C. Но преподавая дальше Java вы делаете плохо показывая только одну ветвь языков. Как я понимаю многие расчёты и выч. мата можно распареллировать — тут гораздо лучше подойдут функциональные языки.
                                                                                            • +2
                                                                                              Приходится что-то отсекать: 3 семестров института (2 подряд идущие пары информатики в неделю) мало чтобы в охватить и императивные, и ОО, и функциональные языки до уровня, достаточного для применения. 4 семестр у нас занимают т.н. проекты: студенты разбиваются на группы по 2-3 человека и весь семестр делают что-то значительное. Поэтому за три предыдущих семестра надо кроме языков и алгоритмов рассказать ещё как реализовывать GUI, использовать cеть, потоки и синхронизацию, прочие средства ОС. Вот времени и получается очень мало…
                                                                                              При выборе курса я основывался на том, что ООП скилы на данный момент значительно более востребованы на рынке труда, чем знание функциональных языков. Ну и ещё одним фактором послужило то, что я сам не знаю ни одного чисто функционального языка :) Кроме того, у нас в институте есть дополнительные курсы по Питону и Руби, так что все желающие могут ознакомится с этими языками. Были начинания и с FP (на примере Scheme), но благополучно загнулись, т.к. на первое занятие пришло 2 человека…
                                                                                              Насчёт функциональных языков для параллельных вычислений: я только за, но у древних дядечек из ниститутов РАН, которые их приподают, глаза на лоб полезут от вида эрланга и прочих… Вся эта академическая среда довольно инертна, к сожалению.
                                                                                              • 0
                                                                                                В США я слышал успеваю прочитать и то и то :)
                                                                                                • 0
                                                                                                  одно дело прочитать, а другое чтобы студенты въехали
                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                            • +1
                                                                                              Я поэтому в начале статьи и написал, что лучше преподавать 2 языка (разной парадигмы) — например Ruby и C
                                                                                              • 0
                                                                                                Согласен, Python или Ruby не помешало бы включить в программу изучения, хотя если знаком с базовыми понятиями, то переход не составит особого труда.

                                                                                                По себе заметил, что переход на Python вообще не вызвал никаких проблем, т.к. язык понятный и удобный, единственное, что мыслить начинаешь несколько по иному, когда есть возможность использовать генераторы списков и т.д.
                                                                                            • 0
                                                                                              за Shoes спасибо. показалось интересным, попробую на досуге поковыряться. на первый взгляд прозрачнее чем wxRuby
                                                                                              • 0
                                                                                                Язык = стиль мышления.
                                                                                                Когда говорят про Паскаль, забывают о корнях. Они в Алголе, который много лет был не только языком программирования но и языком описания алгоритмов.
                                                                                                Можно не любить Си-стиль (я его не люблю), но деваться все равно некуда. Время диктует новый стиль мышления и новые языки.
                                                                                                • +2
                                                                                                  Я сейчас учусь в 11 физ-мат классе. Изучаем Pascal. До этого два года изучали QBasic. Параллельно для себя изучал Visual Basic и продолжаю изучать php (как, по моему мнению, основной язык web-программирования). И я полностью согласен с автором. Из 20 человек, учащихся в моём классе, лишь 5 хотят продолжить изучение программирования в ВУЗе. Остальная часть грезит об экономических и юридических специальностях. Так зачем этой части изучать синтаксис языков, алгоритмы? Нет, я согласен, что изучение алгоритмов, попытки придумать свои алгоритмы очень неплохо развивают умственные способности, но как это объяснить человеку, который при виде синего экрана Pascal'а начинает бить в конвульсиях? Те, кому программирование интересно, сами, по собственному желанию, изучают различные языки и, как правило, это языки, действительно востребованные. И Pascal в этот список точно не входит.
                                                                                                  Так что же получается? В школе мы изучаем на данный момент Pascal. Люди, которым программирование интересно, прекрасно понимают, что этот язык им не нужен и что те же самые основы построения алгоритмов они могут выучить и на других языках, более востребованных. А те, кому программирование абсолютно неинтересно, просто напросто забудут этот Pascal через неделю после выпуска.

                                                                                                  На счёт самого языка Pascal: теорию построения алгоритмов, основы, прекрасно понимаются при желании и на примере других языков. Мой первый язык так вообще был JavaScript. Я тогда (классе в 7ом) экспериментировал над созданием html-страничек и как раз узнал про JavaScript. Приобрёл книжонку и начал потихоньку учить. Со временем (учитывая мой тогдашний возраст) начало приходить понимание, как вообще устроены алгоритмы, что такое условие, цикл, функция и т.д. Появился интерес, а следовательно, и прогресс.
                                                                                                  Это я всё к тому, что понять устройство алгоритмов можно на разных языках и, поняв, на другие языки переход не представляется сложной задачей.
                                                                                                  • 0
                                                                                                    Люди, которым программирование неинтересно, забудут через неделю любой язык ;)
                                                                                                    • 0
                                                                                                      не забывайте, что многое зависит еще и от учителя. и если вы поняли что такое цикл из книжки, а не со слов педагога — то можно только вам посочуствовать, что вам попался такой педагог.
                                                                                                      • 0
                                                                                                        А если просто не было педагога? Если в 85-м информатику в школах вообще не преподавали, афаик, и уж точно не в 4-м классе :( Да и книжек не было, были журналы ЮТ, ТМ, Радио :)
                                                                                                        • 0
                                                                                                          В 85-ом в учебнике алгебры за 9-й класс в приложении ещё был расписан алгол-60 :).
                                                                                                          Книжки были даже в нашей глуши, но крайне мало, конечно :(
                                                                                                          В 86-ом информатика в школах уже была, чему там учили я не в курсе, тк не ходил на эти уроки — я уже с пяток языков тогда знал. Помню, что школьных учителей учили фортрану-4 — они учились на «наших» компьютерах и чтобы быстрее нам места освобождали, методом тыка выучил этот фортран и помогал им писать зачётные программки :). А ещё был язык Е — специально разработаный для обучения язык, но он был какой-то безумный, хотя разрабатывался и под руководством академика Ершова — умного мужика. Ключевые слова там были русскими, если не ошибаюсь, но, по сравнению с другим тогдашним «русским» языком — рапирой, сливал по всем статьям.
                                                                                                          • 0
                                                                                                            В 85-м я в 4-й класс ходил, нам точно алгол не давали :) А какой-то «русский ЯП» для «Агата» я изучал по статьям в «Юном технике», оттуда и понял, что такое цикл, ветвление и т. п., ну и понеслась…
                                                                                                            • 0
                                                                                                              В 4-ом классе информатики по программе, вроде бы небыло. Алгол никому не давали, он просто был в учебнике. Я его из любопытства изучил :) после Б3-34. В более старых изданиях в этом приложении было описано как пользоваться логарифмической линейкой, потом линейку за неактуальностью выкинули, а на её место почему-то вставили алгол. Собственно, кроме себя, я не встречал до сих пор никого, кто бы обучился программированию на языке высокого уровня по школьному учебнику Алгебры :).
                                                                                                              Русский ЯП для Агата — Рапира, отличительная особенность языка — «обратный» оператор присваивания:
                                                                                                              a + b -> c
                                                                                                              И ещё там были «кортежи» — то, что сейчас называют динамическими массивами.
                                                                                                              А статьи эти были не в ЮТ, а в Кванте. В ЮТ по программированию на моей памяти ничего небыло. Были статьи про калькуляторы в ТМ (технике молодёжи), потом в Науке и Жизни, потом там бейсик. Ну, вот в Кванте ещё Рапира была описана… Ассемблер для 8080 в журнале Радио.
                                                                                                              • 0
                                                                                                                Не было, даже в 90-м она была только с 9-го (по старому с 8-го) класса, но и Алгола в учебника алгебры в 90-м точно не было, учились по учебнику пользоваться калькулятором (простым, не программируемым), видимо ввели адекватную замену логарифмической линейке :)

                                                                                                                А по-моему все же в ЮТ за 85 год были статьи именно по Рапире (или еще чему-то для «Агата»), Квант я тогда не читал. А так да, БЗ-34 (у меня МК-61 был) в ТМ (в НиЖ тоже кое-что встречалось, пока они на БК-0010 не «съехали» почти целиком). В Радио ассемблер и немного бейсик-микрон, помню экстаз, когда наконец совпала crc после ручной набивки 8кб hex-дампа :) ) А литература в нашей областной библиотеке большей частью была немного экзотическая, например по Forth было много книг :)
                                                                                                                • +1
                                                                                                                  Погуглил, в ЮТ за 85 номер 4 была большая статья про Агат. Но никакой ЯП там не описывался. Кроме этого в 85 в ЮТ были две статьи «ЭВМ в твоих руках» про калькуляторы и 2 статьи «Клуб Алгоритм» — вот там описывался некий «русский ЯП» без названия (я бы сказал, что какой-то аналог Лого, правда как раз Лого я не знаю) для совершенно абстрактной «ЭВМ Поиск» (это не тот Поиск, который вышел годы спустя на 8088 процессоре, а совершенно умозрительная ЭВМ).
                                                                                                                  Но это не язык для Агата. В 85-ом я ездил на хм… Всесоюзную Летнюю Школу Юных Программистов (10-я! была по счёту, то есть проводили их аж с 75-го года!) под Новосибирск, программировал там на Агате и там же были практически все участники софтового агатовского проекта (система Школьница) — пообщался и, поэтому, кое что знаю по теме. На Агате можно было запустить Рапиру и, с помощью такой-то матери, иногда удавалось запустить бейсик от Эппла (Агат — кривой клон эппла второго, кажется).
                                                                                                                  • 0
                                                                                                                    Сорри, за введение в заблуждение, видимо спутались за 20+ лет (а может я их тогда так воспринял) статьи про Агат и «русский ЯП без названия на Поиск», с них и началось мое увлечение программированием. А Агат я никогда в глаза не видел, мой первый «настоящий ПК» был клон Радио-86РК от совпрома «Микроша» :)
                                                                                                    • +1
                                                                                                      Был бы безмерно рад если бы меня учили программированию на haskell, а кодированию на C.
                                                                                                      • 0
                                                                                                        1. Смогут ли ваши студенты устроится на работу со знанием Ruby?
                                                                                                        2. Достаточно ли современной информации на русском языке по Ruby&Rails&Rspec?
                                                                                                        3. Большое ли рускоговорящее сообщество?
                                                                                                        4. Каковы перспективы языка(сервер начинает уступать Web клиенту: JavaScript, Flex)?
                                                                                                        5. Насколько стабилен язык(к примеру с сайта Python мне предлагают скачать 3.0 под которую сейчас практически нет софта)?
                                                                                                        • 0
                                                                                                          А смогут ли студенты куда-нить устроится со знанием Pascal или Basic? ;)
                                                                                                          • 0
                                                                                                            Ну скажем уже во многих вузах с них перешли на C++/C#/Java.
                                                                                                            • 0
                                                                                                              Так я и предлагаю учить программирование на C и Ruby/Python. Всё равно наше образование не имеет никакое отношение с практикой. Обучение только одной парадигме неправильно. Кстати, вакансий по Ruby/Python тоже много и они в основном сдерживаются отсутствием кадров.
                                                                                                              • 0
                                                                                                                На специальностях для программистов учат разным парадигмам — посмотрите гост для 230105 к примеру.

                                                                                                                Наше образование учит думать — процент закончивших ВУЗ по специальности и умеющих посчитать сложность алгоритма O(n) куда больше, чем у Ruby/Python программистов — встречались и такие, которые даже не знают, какой тип сортировки использует стандартная библиотека.

                                                                                                                Или вы предлагаете учить Ruby/Python вместо C++/C#/Java?
                                                                                                                • 0
                                                                                                                  Почитайте ещё раз — я предлагаю учить Ruby/Python вместе Pascal. И отдельно C — чтобы понять основы, так как C++, C# и Java — это уже надстройки.
                                                                                                                  • 0
                                                                                                                    Ок, скажите, чем отличается принципиально С от Pascal?
                                                                                                                    • 0
                                                                                                                      C чаще применяется по жизни и считается более низкоуровневым.
                                                                                                                      • 0
                                                                                                                        «применяется», «считается» — это всё субъективные и временные факторы, не находите?

                                                                                                                        Если не вдаваться в подробности Pascal = C. И редко дают оба этих языка на одном курсе, а если и дают, то изучение одного после другого занимает пару дней. Так что бессмысленно говорить о замене Pascal чем-то другим кроме С.

                                                                                                                        Что касается Python/Ruby, то их разве что можно добавить в список к Java/C++/C#, так же как и JavaScript/PHP/Haskell/LISP.
                                                                                                                      • 0
                                                                                                                        тем что с помощью С я могу написать нормальное многопоточное приложение, работающее предположим на СПАРКе, а на паскале даже работающее на x86 не могу
                                                                                                                        • 0
                                                                                                                          Школьники и первокуры вряд ли будут писать многопоточные приложения на SPARC. Как я уже выше написал, я тоже согласен, что Pascal(как и Basic) надо заменять, но на С, а не на Python/Ruby.
                                                                                                                          • 0
                                                                                                                            Но изучив мультипарадигмовый Ruby первокурснику будет проще перейти на Erlang, чем с C.
                                                                                                                            • 0
                                                                                                                              блин, вот мультипарадигмы, мультипарадигмы…
                                                                                                                              во-первых в курсе обучения в России программисту даются азы функциональной и логической парадигм (у нас это были пролог и хаскель)
                                                                                                                              во-вторых неимперативные парадигмы — крайне нишевой продукт и следовательно разработчики на этих парадигмах нужны не так сильно
                                                                                                                              так нафига делать основной язык обучения мультипарадигменным? чтобы запутать студента?
                                                                                                                              • 0
                                                                                                                                Ну крайне нищевые они в том числе из-за недостатка кадров. Кроме того, например, ООП модель Smalltalk используется на Mac OS X и iPhone (очень не нищевой продукт). Прототипный подход JavaScript тоже теперь очень не нищевой.
                                                                                                                                • 0
                                                                                                                                  в России очень нишевой продукт, так как маков у нас крайне мало
                                                                                                                                  в остальном мире примерно пополам маки/кросс с маком