A while ago, I decided to start programming. I really, just jumped into a language (Perl) and went from there. What I regret is that I just jumped in:

I didn't learn the basics (if you would call them basics).

I didn't learn about Computer Science.

This issue, I believe, is holding me back from my true potential. Where should I "restart"? Are there any books, articles, etc. that I should read? Are there any topics an experienced programmer should know? What's your advice?

  • I'm not clear on your question. So when you decided to start programming was it to get a new job or just to accomplish some admin tasks in your work or just for fun? I need to understand where you are coming from in order to help with why you regret starting this way and what that issue has with holding you back? I don't like to make assumptions.
    – user39741
    Nov 8, 2011 at 20:03
  • @JamesDrinkard: It was just for the sake of learning! I do not do this for a living.
    – Dynamic
    Nov 8, 2011 at 20:05
  • What is your background? Do you know anything about science? Math? Engineering? Wood working? :-) What sort of programming are you interested in? Without those details it's hard to give a useful answer. Also, don't regret jumping in - that's great!
    – Guy Sirton
    Nov 12, 2011 at 7:21
  • @GuySirton : I am a middle-school student. I really don't have a reason to program, I just do!
    – Dynamic
    Nov 12, 2011 at 17:27

4 Answers 4


I'd do this:

Path A: The Semi-Typical Method

  1. Learn a language with a more regularized syntax like Java, C#, or Python. Perl is an insanely useful tool but it's also very very freeform in terms of how it lets you do things. The other languages I listed are much, much less so.

  2. Get a book about Data Structures in said language.

  3. Get a book on Algorithms in said language.

  4. Get Code Complete and Effective Java/C#/Whatever Python's version is.

Path B: Joel Spolsky's Path of Enlightenment(or Death, take your pick)

  1. Get the book "Code"

  2. Get K&R's "The C Programming Language"

  3. Get the Structure and Interpretation of Computer Programming

As far as the method's go, method 1 will teach you programming in a more regularized way. Computer Science concepts to an extent (no complexity theory yet, trust me) and provide you with a language that's better for working in projects with other people and for making bigger applications.

Method 2 is more hardcore, it's much more of a fundamentals approach with "Code" explaining the basics, K&R introducing the machine level stuff and the SICP introducing the higher level concepts. It's a much harder but more focused path.

In either case, give yourself time. Rome wasn't built in a day and neither are programming skills, even if you are a genius at it. Peter Norvig's Programming in 10 years is the usual essay I point people to.


As far as available free stuff: Python the Hard Way as listed below is a good start, from there, How to think like a Computer Scientist is a reasonable continuation.

There are a number of resources on Algorithms out there and honestly you probably could switch steps 3 and 4 without issue. Keep in mind, this is where the math really starts to show up so never be afraid to ask for help when you get to this stage. This seems to be a reasonable free guide.

There really isn't a cohesive free equivalent to Code Complete per say though Code like a Pythonista seems pretty solid. The big thing is to concentrate on making your code readable once you've got the fundamentals down pat. It's not "necessary" in the same way that having all your code syntax correct is but it makes live a lot easier once you get beyond small programs or work on something over a long period.

You might find that I've focused mostly on Python, that's because it is the easiest of the three to find well written free stuff. I think Java's tutorials by Oracle are fine but they are a little dry and not great for beginners. C# is in a similar situation though neither suffers from lack of documentation.

Also, your first CS joke/pun: you want to "Refactor" your education, not Backtrack.

  • Thank You! Would you happen to have any free online books to read? Other than that, this is an amazing answer!
    – Dynamic
    Nov 8, 2011 at 2:09
  • 5
    + 1 for Structure and Interpretation of Computer Programming (SICP) it can be found online here: mitpress.mit.edu/sicp
    – NWS
    Nov 8, 2011 at 12:16
  • Knowing Perl, will Python give me a lot of trouble to get used to?
    – Dynamic
    Nov 8, 2011 at 14:33
  • 1
    After Perl, most languages are gonna be a bit of a rocky transition. Python is fairly easy because there's essentially 1 way to do any 1 thing rather than 50 ways to do 1 thing like there are in Perl. The big trick to Python is to determine which version of the language to use: 2.7 or 3.x. I'd use whatever the tutorial you pick uses and go from there. Once you're better at it you can adjust to the other as projects come along.
    – user28988
    Nov 8, 2011 at 14:37
  • 1
    @kevincline : Actually, after doing some of the Python exercises, it is giving me tons of trouble. IMHO, some of the things that are extremely simple in Perl, are difficult(er) in Python.
    – Dynamic
    Nov 8, 2011 at 21:08

I'd say aim at Learn Python the Hard Way; it's a good approach. Go from there; it'll take long enough to give you time to find other resources.

In my opinion, "path B" mentioned in another answer isn't appropriate at this stage.


Well, I started out for the same reason as I had some knowledge on the hardware side and was intrigued with programming. I like to learn new things.

I started with DOS Batch files, then QuickBasic, then Visual Basic, VBA, MASM, with Access for database work before landed my first job. For me, that was the best path, starting simple and then building from there.

I would say decide what you like best about programming and go with that route, scripting, web development, windows programming, etc... If you don't know, then start working with some languages to see what you like. You will need time though. It takes about 5 years to get really good with a language like Java or maybe C++, IMHO.

As a language to help learn web development, JavaScript definitely, PHP is popular, and Python, but that is IMHO. It's assumed you will know or learn HTML/CSS. I really underestimated javascript, even though I've used it since 2001. I did the same thing with CSS and didn't think it was important. I've changed my opinion on that as well.

When I try to determine a trend, I go to http://www.indeed.com and click on the trends link in the upper left part of the page. Then I put in keywords like PHP and Python and see which are being put down for actual job positions that are out on the internet.

This is from a career perspective though and based on what brings me the most value to the clients (employers). Not just from a learning perspective.

  • If I said I want to learn a language that will help me with Web Development, but is still able to do a lot more, what would you recommend?
    – Dynamic
    Nov 8, 2011 at 21:15

Learn about algorithms in it's most basic form, forget about languages for a while. Sorting vectors, words, etc. Freepascal is a nice language to start with these things, i love Perl but with all it's shortcuts and cool stuff, you'll often be neglecting the inherent algorithm of the program.

Not the answer you're looking for? Browse other questions tagged or ask your own question.