Ruby /

General Information

Основное назначение Ruby - создание простых и в то же время понятных программ для решения задач, в которых время разработки, понятность и простота важнее, чем скорость работы.

Язык для человека, а не для компьютера

Приоритетом является удобство и минимизация затрат труда программиста при разработке программы, освобождение программиста от рутинной работы, которую компьютер может выполнять быстрее и качественнее. Особое внимание, в частности, уделено будничным рутинным занятиям (обработка текстов, администрирование), и для них язык настроен особенно хорошо. В противовес машинно-ориентированным языкам, работающим быстрее, Ruby — язык, наиболее близкий к человеку. Любая работа с компьютером выполняется людьми и для людей, и необходимо заботиться в первую очередь о затрачиваемых усилиях людей.

Просто, но не слишком просто

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

Принцип наименьшей неожиданности

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

Ортогональность важна, но естественность важнее

Избыточность допустима, если она удобна. Ruby унаследовал идеологию языка программирования Perl в части предоставления программисту возможностей достижения одного и того же результата несколькими различными способами. Люди различны, и им для свободы необходима возможность выбирать. «Я предпочитаю обеспечить много путей, если это возможно, но поощрять или вести пользователей, чтобы выбрать лучший путь, если это возможно»(Matz).

Не быть рабом производительности

Если производительность для конкретного случая недопустимо низка, то это требует исправления, а если заранее известно, что она будет существенна - необходимо изначально проектировать программу с учётом этого. Но следует предпочитать элегантность эффективности в тех случаях, когда эффективность не слишком критична.

Не бояться изменений во время выполнения

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

Следовать простым и строгим правилам, но не доходить до педантизма

В Ruby мы видим не «педантичную непротиворечивость», а строгое следование набору простых правил. Правила и соглашения (в частности, соглашения об именовании, принятые в языке) нужны для того, чтобы сделать понимание программы проще. Если отступление от правила в конкретном случае логично и понятно - оно оправданно.

«Не нужно с этим бороться»

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