Участник:Rubynovich: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
Нет описания правки
Строка 5: Строка 5:


== Rubynovich ==
== Rubynovich ==
'''Rubynovich''' -- это прозвище дали первые студенты, своему преподавателю по предмету "Программирование на языках высокого уровня". Для демонстрации высокоуровневых алгоритмов преподаватель использовал язык Ruby, что и послужило предпосылкой для появления такого прозвища.
'''Rubynovich''' -- это прозвище дали первые студенты, своему преподавателю по предмету "Программирование на языках высокого уровня". Для демонстрации высокоуровневых алгоритмов он использовал язык Ruby, что и послужило предпосылкой для появления такого прозвища.


Rubynovich преподает предмет "Программирование на языках высокого уровня" в МЭТТ с 2003 года. За это время он сумел сформировать собственную программу обучения и свое уникальное видение сути предмета. Вот некоторые принципы программирования, которых должен придерживаться высокоуровневый программист:
Rubynovich преподает предмет "Программирование на языках высокого уровня" в МЭТТ с 2003 года. За это время он сумел сформировать собственную программу обучения и свое уникальное видение сути предмета. Вот некоторые принципы программирования, которых должен придерживаться высокоуровневый программист:
Строка 12: Строка 12:
* отстутствие условных конструкций if, case и т.д. (если они есть, то вы делаете, что-то не так);
* отстутствие условных конструкций if, case и т.д. (если они есть, то вы делаете, что-то не так);
* должны выполняться правила рефакторинга (код должен "хорошо пахнуть").
* должны выполняться правила рефакторинга (код должен "хорошо пахнуть").

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

a, b = 5, 6
if a > b
puts "a > b"
elsif a == b
puts "a == b"
else puts "a < b"
end

Казалось бы, все очевидно и по другому быть не может. Rubynovich же предлагает заменить результаты массивом вариантов:

["a == b","a > b","a < b"]

И использовать оператор '''<=>''' для получения индекса варианта. Решение для вышеуказанного примера будет выглядеть так:

a, b = 5, 6
puts ["a == b","a > b","a < b"][ a <=> b ]

Естественно, что пример был выбран искусственно, но сама по себе идея достаточно интересна.

Версия от 18:27, 24 мая 2006

Жил был программист. И писал он на великом и могучем языке Pascal. И считал он, что программа в несколько тысяч строк -- это показатель высокого мастерства программиста. Но шло время. Поступил он в институт. Первые курсовые работы пришлось ему сдавать на Java. Все бы хорошо, но выполнять курсовые приходилось в стенах университета, т.к. программы написанные дома не работали в университете. Но объектно-ориентированная концепция ему понравилась. И решил наш программист поупражняться. Начал переписывать свои программы на Pascal под C++ (язык Java ему не понравился). И был удивлен тем фактом, что ему удалось в несколько раз сократить размер исходного кода. Но язык С++ тоже не вызывал у него уважения... он искал.

Тем временем в университете преподавали Visual Basic, Haskell, Prolog. Самостоятельно он начал изучать PHP. Но тут один из учителей предложил ему посмотреть Ruby. И тут наш программист решил попробовать... написал один курсовой, второй, третий. Причем эти курсовые занимали все меньше и меньше строчек кода. По мере того, как он постигал тонкости языка, он все сильней понимал, что писать на других языках он уже не может. Ему не хватало их гибкости, выразительности, мощности. Но он не сдавался... Он изучил Perl (был поражен регулярными выражениями), Python (понравилась идея отступов), но все равно не получал того самого удовлетворения от написания программ, которое должно охватывать программиста. И понял тут он, что поиск его завершен... и не найти ему ничего более совершенного.


Rubynovich

Rubynovich -- это прозвище дали первые студенты, своему преподавателю по предмету "Программирование на языках высокого уровня". Для демонстрации высокоуровневых алгоритмов он использовал язык Ruby, что и послужило предпосылкой для появления такого прозвища.

Rubynovich преподает предмет "Программирование на языках высокого уровня" в МЭТТ с 2003 года. За это время он сумел сформировать собственную программу обучения и свое уникальное видение сути предмета. Вот некоторые принципы программирования, которых должен придерживаться высокоуровневый программист:

  • отсутствие глобальных переменных (чем меньше переменных, тем меньше ошибок);
  • отсутствие циклов (все циклы должны быть заменены на итераторы);
  • отстутствие условных конструкций if, case и т.д. (если они есть, то вы делаете, что-то не так);
  • должны выполняться правила рефакторинга (код должен "хорошо пахнуть").

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

a, b = 5, 6
if a > b
   puts "a > b"
elsif a == b
   puts "a == b"
else puts "a < b"
end

Казалось бы, все очевидно и по другому быть не может. Rubynovich же предлагает заменить результаты массивом вариантов:

["a == b","a > b","a < b"]

И использовать оператор <=> для получения индекса варианта. Решение для вышеуказанного примера будет выглядеть так:

a, b = 5, 6
puts ["a == b","a > b","a < b"][ a <=> b ]

Естественно, что пример был выбран искусственно, но сама по себе идея достаточно интересна.