Pull to refresh

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

Reading time4 min
Views37K
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.
Tags:
Hubs:
+34
Comments256

Articles

Change theme settings