Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>There are many approaches to learn how to program. Some opt for what's currently being used in the market. I prefer to suggest an approach that'll teach you how to create programs that are structured, malleable and understandable. For that, start with SICP (get a used version to save some bucks). Obviously you won't get a job programming in Scheme or Lisp, but that's not the intention behind my recommendation. The idea is to learn the methodical thinking process that goes about breaking problems down and creating composable and maintainable solutions for them.</p> <p>Once you work the bulk of the book, get an introductory book on either Python or Ruby. Work the main concepts (procedures, control structures.) At the same time, search for Bohm and Jacobini's "Structured Program Theory" and Jackson Structured Programming.</p> <p>Notice that I've made no mention of object-orientation. The fact is that OO is excellent for analysis and implementation, but difficult for the design phase. Procedural, modular and structured programming are more tractable, and to be honest, it is extremely hard to learn and properly utilize object orientation without fully understanding structured, procedural and modular programming concepts.</p> <p>Once you get that done, take a dive into C (use the good old Kerninghan and Ritchie's C Programming Language book.)</p> <p>Once you get that done, then jump into Java or C# to your heart's content. Then, read this paper:</p> <p><a href="http://sdg.csail.mit.edu/pubs/2009/hoare-jsp-3-29-09.pdf" rel="nofollow noreferrer">http://sdg.csail.mit.edu/pubs/2009/hoare-jsp-3-29-09.pdf</a></p> <p>As a real-world Java developer, I would find it unconscionable to suggest anyone who <em>is serious</em> about learning how to program to start with Java or C#. They are a great tool for work, but not a great language for teaching (not unless the person already has substantial experience or exposure to procedural and structured programming.)</p> <p>Even if it is done for leisure, programming is a lot more than coding with a marketable language. You want to develop lessons and habits that will help you program cleanly and efficiently <em>in any language</em>. I strongly suggest you follow the outline I presented here. Good luck.</p> <p>== EDIT - 2011-11-22 ==</p> <p>In addition to Hoare's seminal paper mentioned above, I would strongly suggest you get Mitchel, McKim and Meyer's <a href="http://rads.stackoverflow.com/amzn/click/0201634600" rel="nofollow noreferrer">"Design by Contracts, by Example"</a>. In fact, I would say to read this book first, and then read Hoare's paper.</p> <p>== EDIT - 2013-01-21 == When I say the following:</p> <blockquote> <p>The fact is that OO is excellent for analysis and implementation, but difficult for the design phase.</p> </blockquote> <p>I mean to say that, for the <strong>uninitiated</strong>, the design phase is much more difficult to understand and grasp when using OO and OO-related technologies. The design phase encompasses the prescriptive elements that map the "what" (from analysis) into a concrete "how" (the implementation), and the implementation ultimately boils down to imperative or functional elements.</p> <p>Obviously, for the <strong>non-initiated</strong>, this does not hold.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload