Какое знание Ruby мне нужно?

Я только что обнаружил что мне нужно знать о значении С#? и задавался вопросом о том же, но для Ruby. Я считаю, что Ruby является моим любимым языком программирования, и помимо изучения основ, по крайней мере, того, что я выбрал из многочисленных проектов Ruby on Rails и нескольких скриптов Ruby, я пытался научиться читать блоги, например Gluttonous, O'Reilly Ruby, Ola Bini и Полировка Ruby. Я также читал в таких книгах, как The Ruby Way.

Тем не менее, я не чувствовал себя полностью подготовленным, когда меня брали интервью о моих навыках Ruby. Однажды меня спросили, знаю ли я о закрытии, и сначала я ответил, что не знаю, но потом спросил, имеет ли интервьюер код блоков кода, таких как лямбда и do... end, и он это сделал. Как я проработал около 3 лет программирования Ruby и пытаюсь выучить язык, не узнав, что замыкания = блоки кода?

Итак, мой вопрос к вам - это то, что знания должны иметь программист Ruby на языке Ruby? Что бы вы ожидали, как интервьюер для позиции Ruby, мне знать? Просто перечислите некоторые темы, и я расскажу о них. Листинг Ruby-специфические инструменты, такие как Ruby on Rails, Rake, Rack и т.д. Тоже хороши, если вы считаете, что это необходимо.

Ответ 1

Это как бы от головы; Я уверен, что я скучаю много. Разумеется, помимо упомянутых здесь вопросов понимание программирования и объектно-ориентированного программирования является обязательным.

Несколько важных функций языка:

  • Поймите, что в Ruby все это выражение, и сможете применить этот принцип, даже если вы считаете, что он делает ваш код нечитаемым.
  • Закрыты; Я также ожидал, что рубисты узнают разницу между блоками и procs (и лямбдами) и знают, как конвертировать между ними. По моему мнению, умение "закрыть" важно для того, чтобы писать красивую рубину.
  • Перегрузка оператора: узнайте, что происходит, когда вы определяете методы с именем [], []=, ==, +, << и т.д. на объекте.
  • Удостоверьтесь в большинстве методов экземпляра Массив, Перечислимый и Хэш (даже если вы не знаете точное определение наизусть), Ваш код Ruby будет гораздо более подробным, если вы не используете такие методы, как collect, inject, join, zip и т.д., Если это необходимо.
  • Тщательно понять, что Символы, и когда вы должны использовать/избегать их.
  • Понять, что метаклассы, знать разницу между переменными переменных класса и переменными экземпляра класса.
  • Знайте, как атрибуты объекта работают в Ruby, как вы можете определить их с помощью attr_accessor и друзей, и как вы можете сами определить их.
  • Уметь использовать модули, как mix-ins, так и инструмент для размещения имен. Вы также должны понимать, как смешивать методы экземпляра и методы класса (или иметь возможность выяснить, как вы могли это сделать).
  • Знайте разницу между повышением/спасением и throw/catch и сможете использовать оба варианта правильно.
  • Понимайте, как работает метапрограммирование, и, по крайней мере, имеет общее представление о всех методах, которые позволяют выполнять метапрограммирование (в основном скрытые в классах Module и Object).
  • Можете использовать аргумент метода Hash как замену именованным аргументам (даже если это только потому, что это общий шаблон).
  • Знать, как concurrency работает и не работает в Ruby.
  • Continuations, даже если они редко используются.

Некоторые важные инструменты:

  • Знать и понимать драгоценные камни Ruby
  • и рейк
  • и RDoc.
  • и YAML.

Некоторые базовые знания:

  • Было бы полезно использовать базовые знания Rails. Даже если это только потому, что внешний мир иногда, похоже, не знает разницы между Rails и Ruby.
  • Знайте, что существуют другие веб-фреймворки, чем Rails: Merb, Sinatra, Camping,...

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

Ответ 2

Вероятно, вы могли бы заполнить любые пробелы в знаниях, которые у вас есть, будучи настоящим программистом, а не академиком, прочитав Язык программирования Ruby создатель Руби, Юкихиро Мацумото. Он охватывает множество неясных деталей, таких как капризы множественного назначения в разных видах лямбда, и является относительно новым, охватывающим новую семантику в Ruby 1.9.

Один мой босс однажды сказал мне, что долгосрочный программист, которого он знал и которому доверяли, обратился к нему и спросил: "Я забыл... сколько бит в байте?" Мораль этой истории заключалась не в том, что этот парень был идиотом, а в том, что иногда можно писать честный грамотный код в течение длительного времени и пропускать то, что кажется другим, как будто они должны быть элементарными.

Ответ 3

В список @molf я бы добавил:

DSL - как их использовать и как их записывать. Копание во внутренностях грабли и capistrano может быть действительно полезно для этого.

Rack - ключевое преимущество использования Ruby (в отличие от Python, в частности) для создания веб-приложений. Поймите, почему это преимущество, как оно работает и как оно обычно используется.

Передача сообщений против вызовов функций - еще одно ключевое преимущество Ruby над чем-то вроде Java. Использование method_missing и то, как это делает возможности ActiveRecord и DSL.

Ответ 4

закрытие ключей (знайте об их области охвата), eigenclasses (или метаклассы или все, что вы хотите их назвать), mixins (оба включают и расширяют и все глупые трюки, которые вы можете с ними делать), а метапрограммирование - это Ruby вещи, которые приходят на ум. Стандартные методы OO и функционального программирования также будут честными.

Ответ 5

Похоже, вы ищете какую-то общую теорию. Я не читал в последнее время, но может быть полезной книга на тему "Принципы языков программирования" (посмотрите на тот, который обсуждает как объектно-ориентированные, так и функциональные языки).

Также вы можете найти иллюстрацию, чтобы посмотреть, как работает Rails или Rake (в отличие от того, как использовать его). Это может помочь вам получить более глубокое понимание того, что может сделать Ruby.