Making the programming leap
March 11, 2011 6:04 PM   Subscribe

Making the leap from familiarity with a programming language to actually making things with it?

I've found that, no matter what programming language I learn, I always hit the same wall: I get familiar enough with the language to know all the material in the beginners' books, but not familiar enough with it to actually _do_ anything. I want to work with HTML, CSS, and Ruby, but I don't know enough to do anything beyond a basic page. Are there any good tutorials on this leap?
posted by LSK to Computers & Internet (14 answers total) 6 users marked this as a favorite
 
first of all, HTML and CSS are not really programming languages.
Second, you need to have a goal first. A web page, or a program that does something.
After you have a goal, you can start trying to code. You can google for examples or ask on forums when you get stuck.
posted by spacefire at 6:08 PM on March 11, 2011 [2 favorites]


The only way to get from familiar to comfortable is to try to do things. Set a goal for yourself, and try to achieve it, and when you stumble, turn to references, or StackOverflow, or whatever, to help you figure out the things that are confusing.

As for resources, I'm a fan of old-fashioned books for getting into new things for the first time. There are lots of good ones for web stuff, and you'll probably want one for HTML/CSS, and another one for Ruby/Rails (if that's the direction you want to go). Read them cover to cover. It will take you longer than a tutorial you'd find on the Internet, but those won't really get you to the point of being comfortable.

You may also want to try out some programming puzzles that get you thinking like a coder, trying to solve problems, etc. Particularly if you're comfortable with math, try Project Euler.
posted by andrewpendleton at 6:14 PM on March 11, 2011


Build something. Have a goal, not too hard to start out, and figure out how to build it. You might end up throwing your code away and starting over multiple times, but you'll learn as you're doing it.

Learn concepts, not just a language. If you have a strong understanding of data structures, algorithms, etc, you can figure out how to implement them in whatever language you're presented with.

(And HTML/CSS aren't programming languages.)
posted by jjb at 6:19 PM on March 11, 2011


Response by poster: Guys, I KNOW that HTML and CSS aren't programming languages. They're still what I'm working with. And Ruby is. No need to be pedantic, I honestly know what I'm talking about :P
posted by LSK at 6:21 PM on March 11, 2011


Have you tried scaffolding with rails? That helped me understand so much how an entire web app works, just iterating with working code.

I find it much easier to write stuff from scratch now that i've done that.
posted by empath at 6:24 PM on March 11, 2011


LSK, if you're going to be programming, you will probably have to talk to programmers. And they (well, we) are the most pedantic group of people I have ever met. My boyfriend and I (both programmers) can easily spend an entire car-ride debating the exact semantics of a casual comment one of us made getting in to the car. We even think it's fun!

But, to answer your question...

I think most of the other commenters are on the right track. You need to have a project that you really want the finished product of. That's the best motivation to work through the blocks you encounter.

One technique I find helpful when working on a new project that's larger than what I've attempted before is something a friend calls a "tracer bullet." Identify the smallest possible set of functionality of the finished product that would be useful, and only worry about building that. It can help distill something that seems insurmountable into something achievable.

A few years ago when I was learning Ruby and Rails, online resources were somewhat lacking. I think things have improved now, but I'm not sure what the best resources are. It depends partially on what libraries you're using with Ruby. Rails? ERB or Haml? Test::Unit or Rspec?

When you say you can "make a basic page", what exactly do you mean? Is that page dynamic at all? How's it being generated? If you can add some specifics, I'm happy to try to search out some good resources.
posted by duien at 6:34 PM on March 11, 2011


Pick a goal and do it. Don't dwell on what the "right" or "perfect" way to do it is. Just bash it out.

That's how you learn.

I recall a friend , a late-bloomer programmer who juts kind of fell into it in his spare time building an enterprise app at his workplace, and at one point he asked me for help - he was having trouble with queries hitting a table in a database while that table was busy being refreshed with new data.
His solution was to build two tables, and then a third table that kept track of which one was active, and then basically double-buffer the two.

In the end, I said "Here, let me show you how transactions work" and he got all sad and said "man I didn't know that, I'm stupid..... dunno why I do this"

I told him "Dude, you aren't stupid - your'e the opposite of stupid. Using what you knew of the tools, you understood the problem and came up with a working solution - so what if there was a better way. There's always a better way.

10 years later he freelance programs full time, and he understands transacitons.
posted by TravellingDen at 6:53 PM on March 11, 2011 [4 favorites]


I'm a programming newb, too. I've been learning PHP + MySQL, and I'm pretty happy with what I can do with them so far. I've done a couple small projects the way that everyone suggests: imagine what you want to make, then figure out how to make it.

I've also approached the same "leap" from the opposite side, especially when I was just starting to learn: sometimes I learn a skill and try to think, "What can I make with this?" Then I make it. So for example, at one point early on, I learned how to use PHP operators to do basic arithmetic. So I wrote a microscopic little program that calculates how many eggs you have if you bought ____ dozens. You put in a number, it multiplies by twelve and announces how many eggs you have. That's it. I'm writing more sophisticated things now, but the sophisticated things are made out of combinations of simple things. Practice the simple skills one at a time, and you'll start to think of useful ways to combine them.
posted by Orinda at 7:08 PM on March 11, 2011


Also, I don't want to beat a dead horse about HTML/CSS != programming languages, but different languages are made for different purposes, and I wonder if your expectations are in line with what the languages you're learning are good for. Do you know about server vs. client scripting, for example? Can you explore a website and guess where database calls are being made, where javascript is being used, how the stylesheet is structured, etc? I apologize if the answer is a resounding "yes, I told you I honestly know what I'm talking about!!!" I'm just remembering that this was part of my learning process—I knew that there had been changes in the way the web worked since my friends and I were coding lists of "hotlinks" and trading GIFs for "cool" tiled backgrounds in 1996, but up until recently I didn't have a clue how PHP and javascript were different from each other.
posted by Orinda at 7:23 PM on March 11, 2011


Do you know anyone with similar interests? I learned tons by just talking to people, either in a formalized code review setting or just sitting around arguing about whose pet language is better. It pushes me to learn more, and prevents me from fooling myself because my partner won't let me get away with incorrect claims.
posted by d. z. wang at 8:00 PM on March 11, 2011


Not sure where you're located, but be sure to head to the nearest Ruby user group, too. We love helping people get started!
posted by cdmwebs at 8:49 PM on March 11, 2011


Filmmaker Robert Rodriguez said, "If you want to make movies, then make movies." Don't talk about it, don't wish for it, don't wait for somebody else to pay you to do it.

Same with programming. If you want to program, then program...something. Start small, start simple then iteratively increase the complexity. Use the "hey how would I do that?" mentality to drive research into new corners of the language and programming principles.
posted by trinity8-director at 10:39 PM on March 11, 2011


I had always heard that why's (poignant) guide to ruby was the classic Ruby tutorial.
posted by bendy at 2:04 AM on March 12, 2011 [1 favorite]


Nthing "pick a goal". 2 years ago I got stuck with a problem at work and turned to AskMefi for advice. The second answer was to use a Python library. I didn't know Python but afters a few hours spent reading online manuals and tutorials I was able to turn that knowledge into something useful. Having a goal forces you to focus on the practical aspects ("how am I going to do that?") than on the more theoretical ones, which can be a little overwhelming for newbies. Of course, to become a truly professional and efficient Python programmer I would have to learn the theory but that would be easier now that I know the basics.
posted by elgilito at 4:49 AM on March 12, 2011


« Older Chili Pepper Identification   |   Specific Ideas for Meeting Like-Minded People in... Newer »
This thread is closed to new comments.