I've been programming very lightly for a few years, and not making much progress. It's something that definitely interests me, but I just haven't gotten motivated. Then, I think I figured out what's killing me. All the books I've read, all screencasts I've watched, seem to have missed out on one important thing:

How do I go from print statements, variables, etc., to doing more complicated stuff?

For example, let's take a site like Posterous. For those who don't know, it's a blogging platform that accepts blog posts via e-mail. The author of the blog has a special @posterous.com e-mail that they send blog posts to, and they are automatically formatted and posted.

How would a developer use their toolbox of functions and statements to accomplish something like this on the back end?

I'm sorry if this question seems really broad, it's just been frustrating me. I feel like I have a decent grasp of basic concepts, but have no idea how to actually do anything.

They would parse the email and keep the encoding and INSERT the text it into a database. Then its a simple effort to Select all posts and display them on a given page. As to explain your own lack of programming ability you can improve that from just doing it more.
–
RamhoundJul 19 '11 at 18:29

10 Answers
10

The key is to break down the task into discrete steps that you know how to do (or can find out how to do). What you know how to do is based on your experience level.

Let's take your Posterous email example:

Requirements: Accept @posterous.com emails, format and post them on website.

Task 1) Accept the email.

The emails will most likely have to be retrieved from a mail server. You will have to research the API calls to retrieve the emails from your particular mail server. You will also have to figure out how to extract the content from the body of the email (probably another API call).

Task 2) Format the email.

From task 1, you probably have the content sitting in memory somewhere. Format this so it is compliant with step 3...

Task 3) Post the content on the blog.

If you are adding this email2blog feature, you probably already have a mechanism for posting blog posts. Use that mechanism and instead of accepting input from a textarea on your website somewhere, replace it with the content from your step 2.

Now, how do we get from print statements, if statements and functions to accomplish each of the tasks.

Notice how in task 1, I mentioned API calls twice? API calls are essentially functions that someone else has wrote so you can use their functionality. If you know how to call functions, then you can research the correct API call you need to retrieve mail from the mail server.

I didn't discuss much about formatting but if you know how to do String manipulation, then you know how to format. Formatting an html page is an exercise in adding tags such as the <b>bolded text</b> within your string somewhere.

In Task 3, I mentioned that there was some sort of mechanism to post blogs. If this is an existing blogging platform, you would be familiar enough with this. But if not, then you need to learn about HTTP Post and other web framework related stuff.

If after reading all this you still have no clue what I'm talking about, then I hope I've convinced you that there is no substitute for experience. So just go out there and build something! Don't worry too much about making noob mistakes because every developer was once a noob.

Twitter? Dorsey was passionate about simplicity, and you don't get much more simple than 140 characters.

Stackoverflow? Joel & crew were passionate about answers.

Languages, like PHP, Perl, Python, and Ruby were all designed the same way. So was GNU/Linux. Someone had a scratch, and started itching that scratch, and then released their tools for general consumption.

So take a look around and decide where your itch is, and then start writing a program to scratch that itch. Maybe you like to play games, so you could write some games. Maybe you have a problem with the ID3 tags on your mp3 collection and need to fix that. Or perhaps you're interested in family history and want to crawl the web looking for references to people or places in your history. Or perhaps you want to interact with the real world somehow. Or maybe you want to develop FLOS Software - take a look at GitHub, Gitorious and Sourceforge.

Find something you're passionate about and start programming, and pretty soon you'll have huge programs before you realize it. And that's why planning of some sort is a good idea ;)

Usually for large projects, you don't start off by just diving in a writing code. Someone somewhere has to have a plan. They write something down, the features of the system they want. Then they start with the first page/window/whatever. Then they add another. All the while slowly adding feature after feature, fixing bug after bug. It doesn't just spring into being, there needs to be a big picture, an overall design.

To get better, you need practice! Start with a small project. Something simple and that also interests you. Plan what you're doing before you do it, you'll see it's not that hard to "actually do anything".

You can watch as many screencasts, read as many books, and follow as many tutorials as you want but never feel like your going anywhere. You have to figure out something you are interested in creating. Then break it down and try creating it. You will come into a lot of things you may not know. But you research them and learn the more complex tasks as you go.

I encountered this challenge too, and by and large I found my solution: I needed an external source to drive me to be more productive.

You can be as fascinated by technology as anyone, as excited about programming as anyone, and as intelligent and quick to learn as anyone, and it will only mean so much unless you get your hands dirty and do stuff. But it can be hard to know where to start, and even if you have an idea of where to start, in can be hard to get the ball rolling.

If you're a good self-starter, you probably just need some ideas. Try some programming puzzles or look at simple utilities that you use regularly and ask yourself "Could I make this? If I did, what would I change?"

It's really daunting to sit down in front of an open editor or a blank piece of paper and say "Okay, brain, create!" But if you break it down, think about what kind of thing you might have a reason to make, and drive yourself from there, you can get farther.

And, if you find that you just can't make yourself code, get someone to give you a job to do, with a deadline and requirements and all. It'll kick you into gear.

The fact that you have basic knowlegde is good - I am not a pro myself, but I can sell what I make, so I must be doing something right. I recommend learning the basics about your language, and the platform you are developing for (and it appears you have).

First map out what you are trying to do, and get somewhat of an idea of how you are going to do it, its all about boiling stuff down to specifics, as it helps you figure stuff out faster. Then just Google what you are trying to do in the language you are using if you're stuck - even ask questions on Stack Overflow (I myself have asked over 70 questions already, hehe)!

Personally I learned by googling, I didnt even pick up the basics at first, which I should have done, however already by the time I was making some pretty good stuff, I still didn't know what an "array" was. ;)

If your really curious how to do something go research it! If you want to know how Posterous works try starting with something small like researching what kind of tools you need, how to get information from a text box to a website. Then you gradually build on that. The next question might be setting up an email connection to a website and a database.

Apart from breaking down the project into tasks, the key also is to learn code reuse. Divide your code into modules that you can reuse in other projects where you need to do the same thing.

E.g in this example project, you'll likely be doing database work for storing the blog posts. You could write a database class for connecting to the database, doing queries, getting the results, etc. Then in all future projects you could use that same class and be able to work with the database easily.