--001485f1ec1e369cdb04915ea4c7
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

On Tue, Sep 28, 2010 at 7:53 AM, ˇÍvaro Bernart
<alvaro_bernart / hotmail.com>wrote:

> *Ruby's main uses as a code language.
>

Rails, because you can install Ruby on your server, your clients don't need
to have it. Also, with caching, speed of the app is less important. Also,
people cannot see your source code when it is running on a server. So this
addresses the biggest reservations to Ruby.


> *Tools used for coding Ruby
>

A text editor is sufficient, though there are some IDEs. If you search the
archives, you can find a google doc with an enormous list comparing
different IDEs and editors. I also keep a browser open, and reference the
docs often.


> *Ruby's pros and cons
>

Pros:
* Expressive yet terse syntax. There are some exceptions (File methods, for
example) but Ruby code has a tendency towards beauty, the Ruby community is
also largely dedicated to this.
* Its dynamic nature allows it to support very powerful abstractions. You
probably couldn't have a framework like Rails in a static language.
DataMapper, for example, will look at the state of your code at runtime, and
write SQL to update your database's schema to match. In ActiveRecord, if you
have a database table called "users" and users have an attribute called
"name" then ActiveRecord would give you a method User.find_by_name("Josh")
and it would look in the users table for the record with the name of "Josh".
You get that for free, because that is how your database is structured, you
didn't have to write any code for it. Whats more, in older versions (I don't
think they still do it this way), that method would not even exist until the
first time you called it, then ActiveRecord would go create the method for
you.
* Smalltalk like pure object oriented implementation (everything is an
object), you can say things like 5.times { puts "hello world" }, you can
pass around methods and classes as parameters, operators are objects,
numbers are objects, classes are objects.
* Operator overloading, namespaces, memory management, single inheritance
with mixins, useful built-in classes like regex and hash
* Built-in support for functional programming (Ruby's code blocks, the
source of so much power)
* Structured enough for large apps where purely scripting languages (ie
bash) are not
* It is fun to program in :) you will really get excited
* Though it has some problems, rubygems provides a standard interface to
third party gems, making it much easier to find and install libraries that
can provide huge functionality gains (Rails, for example, is acquired
through rubygems)

Cons:
* As a dynamic language, it is slower than static compiled languages, though
JRuby and MRI1.9 have speed on par with other dynamic languages.
* As a dynamic language, your source code is interpreted, which means it
must be present on the computer running it, so if you have proprietary
information in there, then to run your program, people need your code, and
therefore access to your information (it is possible that Rubinius addresses
this with its byte-code system, I'm not sure)
* As a dynamic language, people need the Ruby runtime installed, most
systems do not come with it (Mac does, but its an older version), and most
people are not going to install it. As Joel Spolsky says in regards to
installing the .NET runtime "If we asked our trial users, usually small
organizations and home users, to go through a movie-length installation hell
just to try our app, I think we'd probably lose 95% of them. These are not
customers *yet* (http://www.joelonsoftware.com/articles/PleaseLinker.html),
they're prospects, and I can't afford to give up 95% of my prospects just to
use a nicer development environment." Perhaps some tools can package it with
your app such that this is not the case, I am pretty sure Shoes does this,
but I'm not sure about that. Static languages don't have to worry about
this, because they get compiled directly to machine code. They also give up
a lot of power through this, though I'm not sure how much is due to being
static, and how much is due to culture. For example, the D programming
language looks like it has addressed a lot of the shortcomings of other
static languages, though at this point it is still unfortunately immature.
Mirah, a language with Ruby syntax that compiles to Java, has got my hopes
up too, though I suppose you could argue about whether JVM languages deserve
to be classified with static languages, and its unfortunately even less
mature than D.
* Green threads (JRuby uses Java's native threads, IDK about the other
implementations)

*Examples of programs coded on Ruby, aside from Rails
>

Rails isn't really a program (though, I suppose it technically has an
executable -- emasculated though it has been for most of its existence). It
is a framework that you can use, a bunch of libraries and conventions. In
that regard, Puppet for  and Metasploit are two well known frameworks
written in Ruby. If you are really wanting programs, then Rails' site (
http://rubyonrails.org/) gives examples of Twitter, Github, and Yellow Pages
(among others), though that is Rails. My text editor TextMate has
significant portions of it coded in Ruby.

--001485f1ec1e369cdb04915ea4c7--