Should I Learn Ruby as a First Language?

R

Rick DeNatale

As someone who learned UCSD Pascal first, and then went on to assembler,
then C, I disagree. :)

You don't have to be able to overhaul an engine to ride on a train. You
should always take the easiest way that fulfills your goals.

I was a Classical Studies major at university. People would always say, "Oh,
I wish I'd learned Latin!" Idiots. :) Yeah, learning Latin will help you
learn French, etc. But if you want to learn French, you should just learn
French.

And while learning Latin, might help some learn French up to a point,
I'd argue that knowledge of one language can also interfere REALLY
learning another, related or not, if one can't accept that the second
language really doesn't operate exactly like the other.
While Latin had a large influence on the evolution of French, it's
only one influence. This is true, I suspect to an even larger degree
to English, which was influenced by a long succession of native
tongues and the tongues of various conquerors and invaders.

There's a long history of English grammarians clinging to the myth
that English grammar must follow Latin grammar, leading to bogus rules
like the injunction against splitting an infinitive, which is common
in English usage, but impossible in Latin since the infinitive is a
single word. Yes, if Star Trek were translated to latin, something
would have to be done with "To boldly go,..." but in English it's
perfectly good and understandable usage IMHO.

The concerns when programming in a low-level language like C are quite
different than those when programming in a higher-level language like
Ruby. In C one must worry about issues like storage management,
ensuring that one doesn't copy the wrong kind of data from one
variable to another, possibly causing buffer overflow or underflow,
confusing a pointer with data, etc. All on top of (or perhaps
beneath) application level concerns.

It seems to me that people who start with a language like C are much
more likely to be overly concerned about the problems they've
encountered coming out of these low-level technical concerns, which
for the most part are handled by the language and its runtime rather
than the programmer in a language like Ruby leading to stilted,
chicken-typed code.

This is not to say that it's a bad think to learn C, or Latin. But I
firmly believe that for most people this should come later as a way to
expand understanding of how higher-level languages are implemented and
extended, not as a first step to inform how one should think about
higher-level languages.
 
R

Rick DeNatale

Kyle Schmitt wrote:

This is exactly why we chose C as the first language for electronic
engineering and information systems engineering students. Previously the
course had been given in Algol 68 (!), then Pascal, but it was decided
that C would be a much better foundation, and useful in the real world
too.

C is very hard to learn. Almost everybody comes unstuck on pointers and
memory allocation. But this trains your mind, and once you've learnt C,
you realise what other languages are protecting you from, and how they
work internally (since most are written in C, like Ruby).

But, many don't seem to realize that the other languages are
protecting them and carry unnecessary techniques from C to the higher
level language.
 
M

MRH

Dave,

Thank you for your post.
Once upon a time I used to teach C as a first programming language. In
some ways it's good, as it's close to the hardware (bits and bytes,
addresses and pointers etc) but in many other ways this can be a
disadvantage, as you can't see the wood for the trees. However, it
certainly makes you appreciate higher-level languages when you come
across them later on!

I see.
Java now seems to be the first language of choice for many universities,
but I would have to disagree with that.

Me too, that is a conclusion I reached after reading the internal SUN
memos that talked about the problems in Java/JVM . . .
Ruby is much nicer than Java and it will teach you plenty of OO
concepts.

Great to know this. I just recently learned that all languages do not
handle OOP the same way. I find it interesting that Ruby, according to
what I have read, features the possibility of using several paradigms
in addition to OO.
However, there's no such thing as the "best" language, so you should
concentrate on mastering one, then go on to your next.

I will keep that in mind.

Best,

Maurice
 
M

MRH

I'm new to this as well. Here's a link to a resource that can maybe
help you find/learn ruby info - (there are a lot of others up there if
you just search)http://www.yoyobrain.com/cardboxes/preview/103

I hope it helps! Let me know what you think about it too.

Best,

Elizabeth

Hi Elizabeth,

Thank you for the link! That is pretty interesting, and I believe it
will be very useful.

Regards,

Maurice
 
D

Dave Bass

Rick said:
This is not to say that it's a bad think to learn C, or Latin. But I
firmly believe that for most people this should come later as a way to
expand understanding of how higher-level languages are implemented and
extended, not as a first step to inform how one should think about
higher-level languages.

It's a question of whether you learn top-down, or bottom-up. Different
people have different learning preferences.

Traditionally technical subjects have been taught bottom-up in academia
("building on a firm foundation"), but there are very good arguments for
the top-down approach too.
 
M

MRH

Actually, TinyCC has a C interpreter that you can use to test code, so
there isn't much need to compile when you are using it.

I believe there is a Windows and a *nix version, so there shouldn't be a
problem with platforms.

Hi forgottenwizard,

Thank you for that info, that is good to know, as I have concluded
that I will need to study C eventually, and something like this sounds
as though it will be very useful.

Happy Hacking,

Maurice
 
M

MRH

Hi Mike,

Thank you for this post.
I usually lump beginner programmers into one of two categories, (i) those
who want to become expert programmers for purposes of education,
profession, or hobby, and (ii) those who are interested in learning how to
program sufficiently enough to make work in their primary careers easier,
but don't necessarilly have a specific interest in programming itself.

I am a category (i) ;)
If you're of the former category, I would say it doesn't really matter what
lanaguage you learn first since you will inevitably learn multiple
languages anyways.

Yes, please see prior post. :)
Remember that a master programmer is not someone who
expertly understands the minutiae of any single language, but rather is
someone who is proficient in many languages.

A-ha! I had assumed the contrary - this is great to know, and it makes
sense.
That said, there are a lot of languages out there that are complicated or
even cumbersome because they attempt to be sufficiently general as to allow
any "style" of programming without enforcing too strict of rules as to what
code should look like. Perhaps the best example of this phenomenon is C++,
and to a lesser extent Perl. I express caution in learning these languages
as first languages, since, as a novice programmer you don't really have an
intuition for what code should look like, and the language doesn't really
help guide you in learning either.

I see
Ruby is guilty of a similar phenomenon which, in this context, goes by the
name of "expressiveness". While Ruby is certainly my favorite language, I
know that part of my appreciation for this expressiveness comes from over a
decade of experience in other languages and being able to place Ruby in
the context of this experience.

In other words, I'm not really sure if Ruby is the best, or even a good
language for beginners because I'm not sure how difficult it is to learn
without the benefit of experience. On the other hand, plenty of people
have learned Ruby as their first language and have gone on to recommend it
to others, so it's certainly possible, and probably not a bad choice
either.

I will consider this.
That said, keep in mind that Ruby is a bit unique compared to other popular
languages. For example, the idiom of using internal iterators and blocks
as looping constructions (e.g., Enumerable#each) is unlike the usual
approach of using a for loop and/or external iterator as you would use in
C, C++, Java, or Python. While I think Ruby's approach is better, it is
not the norm in other languages. Another example is Ruby's idiom of
automatic allocation and deallocation of resources by passing them to code
blocks (e.g., File#open). In other languages, one typically has to
explicitly deallocate the resource (close the file) and the code for
writing this safely is not intuitive.

I get the gist of what you are saying. Will remember.
This brings up another advantage/disadvantage of learning Ruby first: code
safetyness. One example of this is the resource allocation/deallocation
idiom I mentioned above that ensures that resources are always properly
cleaned up when the program is finished with their use. Another is that
most methods raise an exception upon encountering an error, forcing a
program to abort is an unexpected error happens.

Exceptions are good, and they're prominent in other languages (Java and
Python) and behave, more or less in the same way. Unfortunately some
popular languages implement exceptions (C++ and Perl) but don't use them
universally in library functions, and other languages (C) don't implement
them at all. In these languages, you must (or at least should) check
return values of any function you call to make sure that the desired action
performed successfully. Often times people forget to do this, and the
result is code that continues on ignoring error conditions, usually blowing
up somewhere else where it's difficult to debug.

So, while I regard these features as advantages of Ruby, they are, in some
sense a disadvantage when you attempt to learn a different language that
doesn't take care of these issues for you, as you must be diligent in
taking care of them yourself and it's not something you're used to.

This resonates with my earlier research as well. Will also remember
this.
Anyways, the crux of my advice is this: Any language that you're
enthralled by, and can't get enough of, is a good (first) language to
learn. On the other hand, any language that you find bewildering,
confusing, or just plain unfun to learn is probably not a good first
language candidate. If you find youself becoming disinterested after
spending a week or two learning whatever language you choose, skip it and
move on to something else. It may take a while to find the language that
fits, but trial and error is better than giving up on programming
entirely--especially when the language that clicks with you is right around
the corner.

Will do.

Regards,

Maurice
 
S

Srijayanth Sridhar

My two cents worth:

Ruby is a good first language to learn if you are really really young
and you are just learning something, because ruby is designed in a way
that lets us apply regular thinking methods. If you are a child,
5.times do something makes more sense than for (i=0; ....). However,
if you are a little older and are able to grasp concepts, then you
might be better off learning C.

One reason C is advantageous is it forces you to learn algorithms and
the inner working of "methods" in ruby for instance. It is entirely
possible for a person who has only learned ruby to never bother about
how a sort is implemented. This may or may not matter to you in the
end, but learning C, as someone else said earlier, really makes you
appreciate Ruby, Java etc. Also, going from Ruby to C might be hard
because it might seem like you are always writing code for tasks that
are so trivial in Ruby. So I suggest you learn C first.

Hope that helps.

Jayanth
 
M

MRH

Hello Kyle,
Since nobody's posted it...http://xkcd.com/409/

I see what is meant there.
I don't think you necessarily should program your first projects in C,
but you should learn C as a first language, even if you don't use it
for your first projects. Even if you never use it outside of studying
it.

That resonates with what I had considered in relation to C. I have
also concluded that I should read "Write Great Code" I & II, as those
address becoming acquainted with the bare metal from a programmer's
perspective.

Cheers,

Maurice
 
M

MRH

As someone who learned UCSD Pascal first, and then went on to
assembler, then C, I disagree. :)

You don't have to be able to overhaul an engine to ride on a train.
You should always take the easiest way that fulfills your goals.

I was a Classical Studies major at university. People would always
say, "Oh, I wish I'd learned Latin!" Idiots. :) Yeah, learning Latin
will help you learn French, etc. But if you want to learn French, you
should just learn French.

We only have a limited amount of time in our lives. Any time spent
learning a bad language like C is time we can't spent learning
something else - like how to write maintainable, well-tested code.

Taken to its logical extreme, you should really know how to design
digital circuits before you jump into C. Would it make you a better
Ruby programmer? Absolutely! What would make you an even better Ruby
programmer, however, is learning Smalltalk or Scheme or TDD or Rails.
Limited time means you can't learn everything. Make sure what you
learn is actually useful.

Learning C means not learning something else.

///ark

I agree, although I will devote some time to becoming acquainted with
the lower level, just enough to broaden my perspective I think.
 
M

MRH

I *strongly* disagree with this opinion. If the goal is to start
closer to the hardware, then why isn't assembly language even better?
It's like saying to learn sociology you first need to learn
psychology, but before that neurology, preceded by neurochemistry, but
only after biochemistry, which of course follows chemistry, but which
can only come after physics....

Just as there are useful concepts and abstractions within sociology, a
high level programming language provides you with abstractions (loops,
objects, exceptions, iterators, closures, etc.) that are useful in
their own right. You do not have to learn what's happening behind the
scenes first to understand or leverage these concepts.

You can't learn everything at once. You have to learn things
incrementally, and given human psychology, it tends to work best if
along the way you are able to do useful and interesting things.

Now does learning C or assembly language at some point make you a
better programmer? Absolutely! But it doesn't have to be first, or
even second or third. Why make learning unnecessarily painful when it
can be coincidentally fun?

Eric

Hi Eric,

I agree. Thank you for your post.

Cheers,

Maurice
 
M

MRH

And that's the point, really. Some say assembler. You say C. I say neither, or
it depends.

I would say, start with something like Ruby or Python. There's a minimum of
busywork between you and what you actually want to make. It'll get you in,
and get you hooked.

It also means you'll have a solid grasp of a few core concepts before moving
on to C. You won't spend the whole time learning what a variable is, or what
a function is, because you'll already know how to program. Instead, you'll
spend your time learning all that depth knowledge you're talking about -- how
to allocate memory, what a pointer is, etc.

But it's not really a closed debate, by any means. I started (barely) with
QBASIC (multiple choice quizzes with if/then/else) -- didn't really learn to
program until I got a good book on C++. So I pretty much did the opposite of
what I'm advocating here.

And I stand by, whichever has the best book. Once you know one language well,
learning another is much easier -- it's those first baby steps that are
difficult.

David,

Thank you for this post. I also agree.

Is it just me or is the web interface for posting here actually
PAINFUL to use?

Best,

Maurice
 
M

MRH

I'm not convinced someone should learn C *before* ruby,
however I find C to be an extremely vaulable language to
know.

Regards,

Bill

Bill,

I will keep this in mind, thank you.

Best,

Maurice
 
M

MRH

Although I learned (and earned my living with) assembly language many
years ago, I don't think it's particularly necessary to learn it now
unless you're working in a very specialized area, like compilers,
graphics drivers, etc. But C is still hugely popular and widely used and
having it in your toolchest will be useful for many years to come.

However, even though C is a small language (compared to Java or C++) I
think it's harder to learn than Ruby, and learning it will be more
frustrating since it takes so much more code to get results and it's so
easy to make mistakes that are really, really hard to fix. I've been
doing it for 25 years now and I still spend more of my time finding and
fixing bugs than I do writing code.

Hi Tim,

I will remember this information. Thank you.

Cheers,

Maurice
 
M

MRH

This is exactly why we chose C as the first language for electronic
engineering and information systems engineering students. Previously the
course had been given in Algol 68 (!), then Pascal, but it was decided
that C would be a much better foundation, and useful in the real world
too.

C is very hard to learn. Almost everybody comes unstuck on pointers and
memory allocation. But this trains your mind, and once you've learnt C,
you realise what other languages are protecting you from, and how they
work internally (since most are written in C, like Ruby).

Recently some ex-students of mine contacted me via a social networking
site to thank me, saying that C had been very valuable to them in their
careers.

If the OP wants a good foundation in programming, C will provide it. But
Ruby would be gentler. :)

Hi Dave,

Thank you for your post. As I have mentioned, I believe I will study C
and those texts so as to become acquainted with the lower level
concepts.

Best,

Maurice
 
M

MRH

And while learning Latin, might help some learn French up to a point,
I'd argue that knowledge of one language can also interfere REALLY
learning another, related or not, if one can't accept that the second
language really doesn't operate exactly like the other.
While Latin had a large influence on the evolution of French, it's
only one influence. This is true, I suspect to an even larger degree
to English, which was influenced by a long succession of native
tongues and the tongues of various conquerors and invaders.

There's a long history of English grammarians clinging to the myth
that English grammar must follow Latin grammar, leading to bogus rules
like the injunction against splitting an infinitive, which is common
in English usage, but impossible in Latin since the infinitive is a
single word. Yes, if Star Trek were translated to latin, something
would have to be done with "To boldly go,..." but in English it's
perfectly good and understandable usage IMHO.

The concerns when programming in a low-level language like C are quite
different than those when programming in a higher-level language like
Ruby. In C one must worry about issues like storage management,
ensuring that one doesn't copy the wrong kind of data from one
variable to another, possibly causing buffer overflow or underflow,
confusing a pointer with data, etc. All on top of (or perhaps
beneath) application level concerns.

It seems to me that people who start with a language like C are much
more likely to be overly concerned about the problems they've
encountered coming out of these low-level technical concerns, which
for the most part are handled by the language and its runtime rather
than the programmer in a language like Ruby leading to stilted,
chicken-typed code.

This is not to say that it's a bad think to learn C, or Latin. But I
firmly believe that for most people this should come later as a way to
expand understanding of how higher-level languages are implemented and
extended, not as a first step to inform how one should think about
higher-level languages.

Hi Rick,

Thank you for this post.

Coming from a self taught background in Languages, and being
bilingual, I can see what you mean, and will keep this in mind.

Regards,

Maurice
 
K

Kyle Schmitt

And while learning Latin, might help some learn French up to a point,
I'd argue that knowledge of one language can also interfere REALLY
learning another, related or not, if one can't accept that the second

There's a long history of English grammarians clinging to the myth
that English grammar must follow Latin grammar, leading to bogus rules
like the injunction against splitting an infinitive, which is common
in English usage, but impossible in Latin since the infinitive is a

To the first point, I'd actually argue that learning the second
foreign language, or a second programing language teaches you more
about the first than you'd even imagine. Maybe it's a mindset, or
maybe it's what languages you're working with, I'm not sure.

Contrary to what I advised, I learned BASIC first. I was OK in it,
then I learned C++ in school (It took quite awhile for me to be able
to write straight C after that). Learning in that order I've often
felt was not good for me.

But after learning C++, I was so much better in BASIC than I was
before, that I ended up tutoring/teaching it to business students
(this was way back in the day). The only way I could do that was
because learning that second language taught me so much more about
programming.

Although perhaps that makes an argument for learning BASIC (really
really basic, not this VB/business basic junk) or shell script first,
_then_ delving into C, then an abstract language.

There really are so many ways to think of it. Humm.

I still believe that people should learn C though, before embarking on
programming projects, much less careers, even if they don't use C for
it.


As for English and it's horrific grammar, it's a Germanic language
that was busy absorbing Latin, Franco and the occasional Greek words
for 10 centuries. I've heard, but can't find references anywhere
right now, that the grammar itself was latinized shortly after the
advent of cheap printing. Apparently there was an underlying motive
to make it more difficult, since that would make it easier to
distinguish between the educated and the non educated. Evil isn't it?
Just wish I could find a reference.....


--Kyle
 
D

David Masover

Hi David,

Thank you for your post.


I want to program for myself, for clients, and contribute to FOSS
projects, and take it all as far as I can.

Still depends -- for example, if you just want to be able to contribute to the
most FOSS possible, learn C. The vast majority of FOSS projects are in C,
among them some of the better known. It might be nice to know some value of P
in a "LAMP stack" -- Perl/PHP/Python/Ruby -- but pretty much the entire rest
of the stack will be written in C. Maybe a bit of shell scripts, but the
shell itself is written in C.

If, on the other hand, you want to write brand new apps, from the ground up --
or you want to interface with all these existing apps, but not actually patch
them -- then Ruby is as good a choice as any.

But these don't matter as much, since you've indicated a more academic
curiosity -- you'll probably learn both anyway, and more.
I hear you, I am mostly interested in web applications, yet also want
to explore desktop applications for Mac OS X . . . and the more I read
about Lisp, the more interesting it becomes . . .

I suspect that Ruby has more LISPisms than Python. Either would be good for
GUI OS X apps and web apps.
 
M

Marc Heiler

Woot, i love those questions :)
I'm not convinced someone should learn C *before* ruby,
however I find C to be an extremely vaulable language to
know.

C definitely is valuable. I dont like C, but there is,
in the long run, not really a way around C.

But Ruby is about 1000x nicer than C and I hope one
day we can use nice languages rather than ugly ones. ;)

What you should also keep in mind is that if you already
know Ruby well, learning C can be boring, because 95% of
what C does, Ruby does too - shorter and nicer for the
human being.

I have seen that the more credible sources recommend either
Python or Ruby, and I am personally leaning quite heavily
toward Ruby, yet I would very much like to read
the thoughts of the group on this question.

I think both will be a good choice and fill almost the same
niche. I think people that use python or ruby are much
more in the same boat than other languages (i.e. than
in java). The amount of static languages, and the code,
is monumental. I am afraid of the day an autonomous
space ship with robots that colonialize other planets is
empowered by java....


So my personal recommendation is, if you have no time pressure
etc... is that you should learn C first, even if ruby is
a lot more fun (because you will learn ruby a lot easier
anyway and it doesnt matter much when you start learning it IMO.) :)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,743
Messages
2,569,477
Members
44,898
Latest member
BlairH7607

Latest Threads

Top