James Toomey
4/13/2005 7:08:00 PM
In my experience, the motivation comes from choosing something that you
really think would be neat and want to accomplish, not just a pretend
goal. If you just play the "what if" game and pretend that you're, say,
designing a grocery store inventory system, you'll peter out rather
quickly. You'll hit some difficult problem and say to yourself, "this
is dumb--why am I bothering with this? I don't work for a grocery store
and I find inventory rather mundane, plus there are thousands of great
programs that could do this better." Also, making something you want to
see, rather than following through tutorials, works better in my
opinion because you seek out knowledge that you know you need; with
tutorials, you're given knowledge and left to decide whether and when
that knowledge will be helpful.
Therefore, I've found that you should do one of two things:
1) Create something that's very personal and enjoyable;
2) Create something that helps you do a needed task.
What I mean by #1 is to make something that you'd love to see,
something like writing your own video game or making an interactive
website. Making a website is perfect because you have a built-in
audience of the entire world. When I was learning ASP programming years
ago, I built a hiking website where you could choose the difficulty of
the hike you wanted, and the site would then query a database to
retrieve the results. Had I chosen to design a pretend-Ebay with
auction bidding, or some other fake e-commerce site like you learn in
so many tutorials, it would've taught me the same skills, but I
wouldn't have been motivated enough to struggle through the hard parts
to accomplish anything, and thus wouldn't have learned. It just
wouldn't have meant enough to me to create a bidding site because
auction-bidding doesn't interest me. However, hiking does interest me,
so I struggled through those parts and learned. It's those dead-end
points where you really learn, because that's when you web-search, and
ask questions, and web-search some more, and drop by Barnes & Noble to
browse the books, and stay late into the night taking "just one more
crack at it," and eventually you get it right, it feels great, and
you've learned a lot.
The other neat thing about designing a website is the minimal cost. You
can find a webhost who is Ruby-enabled and it probably wouldn't cost
more than $10-$20 a month, plus $10 for a domain name, and that's it!
You can make an interactive website on any topic you love, learn a lot
of Ruby in the process, and millions of web surfers in the US, Italy,
Russia, England, Argentina, etc. can see it. How cool is that?
Now, regarding #2, I agree that many tasks can be done by existing
tools if you search for them. For example, you could write a Ruby
script to find/replace in text files, or you could find a freeware
program like "fgrep" to do the same thing, so you probably feel like,
"why should I bother writing code when I have a tool that can do
this?". In my experience, there will eventually be some annoyance or
wrinkle even with the tools that requires weird maneuverings on your
part--like a tool that requires files to always be put in a certain
folder, or doesn't search subfolders, or must be secondarily processed
by a subsequent program after the first one. A good example is photo
resizing. My 6 megapixel digital camera takes large photos which must
be sized smaller to be emailable. Adobe Photoshop does do batch
resizing, but it costs $700. There are freeware programs like
ImageMagick to do this, but you need to memorize lots of confusing
command-line switches. There are freeware GUIs built on top of the
freeware resizer, but they're frequently as confusing as using the
command-line. I faced this dilemma and finally wrote a Ruby GUI on top
of ImageMagick that just includes the parts that I need, so it's simple
to use and customized to exactly what I want. 3 weeks from now, when I
want to do more image resizing, I don't need to relearn all the
command-line switches, I can just use my nifty little program.
Designing your own Ruby tool can be frustrating if you're starting from
knowing nothing, because there are so many "gotchas" to get past and
disparate things to learn; it's one of those situations where you
"don't know what you don't know," so you're not even sure where to
start. If this is the case, try looking for some text-based task that
you do repeatedly and is somewhat cumbersome. Do you ever have a list
of names that you need to sort and remove the duplicates from? Or do
you ever have 2 lists of names and you want to find out the
intersection of the lists (that is, which names are in common)? Or a
list of numbers formatted as 3101234567 and should be formatted as
310-123-4567? These are things that can certainly be done with
Microsoft Word or Excel, but they can require an awful lot of manual
steps like sorting, replacing, sorting again, etc. These are tasks that
are great for learning Ruby because Ruby's arrays are powerful and easy
to use (far easier than VB and other languages), and only require 3 or
4 lines of code to do useful things. It can take longer the first time
because you're learning how to write the code, but once you've written
the code it will save you time everytime after that.
Sy wrote:
> Hey all. I wanted to dive into a topic that's been on my mind for
> years. I've been interested in programming for a very long time and
> yet somehow I've only ever dabbled.
>
> * I've never been forced to learn anything through school (a
half-year
> of turing and another half of ms access 1.0 does NOT count).
Frankly,
> I do not respect school for learning real programming skills and
would
> never pay someone money to teach me something I could learn by myself
> for "free" (buying books, taking the time, searching for answers
> myself).
>
> * I've never used such skills at work (batch files don't count). I
> don't think I'll ever do anything programming-related until _after_ I
> learn the skills and choose to use it. Honestly, I have an
> opportunity to sneak in Ruby in my (small) business.. if it does the
> job. Ruby on OSX gives us extra motivation too.
>
> * I've never had motivation to program as a hobby (batch files and
> 4dos scripting doesn't count, vague interest in c or asm/machine
> language doesn't count). I have no problems which I see solved by
> programming myself more than using someone else's tool. So instead
of
> developing the programming skills, I have developed effective
> researching and troubleshooting skills.
>
> And yet where I see that my problems can be solved by other people's
> tools.. I feel as though I could make better tools myself. I
> especially want to be able to create scripts and software solutions
> for some of my stranger issues. I already know that I can be
valuable
> to the community being who I am and having the skills I do, but I
> yearn to do more.. to solve problems MY way.
>
> ---
>
> And so after a lot of thought I ended up looking seriously at Ruby.
> Lots of time passed and I revisited the subject to learn that a
> community had self-organized, that issues with documentation and such
> were being solved, that entertaining tutorials were being written
> (props to wtls on that one).
>
> Fine. I like Ruby. I want to learn Ruby. How do I work on the
> problem of motivation?
>
> Hack a little every day? Read a little every day? What books, what
> tutorials, what news channels? I am not overwhelmed by the amount of
> choices.. but I am confused at what order to do things in and why.
> The biggest challenge to a complete nubie is the number of tools Ruby
> uses..
>
> I had a hand in resurrecting my local RUG. We had our seventh
meeting
> this month and every time feels like a real success. I did all this
> knowing that I wasn't a "real programmer" and that.. I don't know
> Ruby! I look back and wonder where all the time went.
>
> I'm a smart guy, so I am making do.. I am learning what I can but I
> don't feel _effective_ or _motivated_. I don't want my hand held, I
> just need a guiding light.
>
>
> Has anyone thought about founding a "Ruby nubie" mailing list or
> creating nubie-sized short-tutorials, quizzes and challenges? I'd be
> very interested in participating.