From: James Toomey Date: 2005-04-14T04:09:38+09:00 Subject: Re: On motivating a Ruby nubie 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.