<div dir="ltr"><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div>Thinking of how I might design a robust computer<br></div><div>science learning thread using today's open source<br></div><div>tools.  See caveats at the bottom.<br></div><div><br></div>Python is oft circled as a great first language,<br></div>but then what?  From a practical standpoint,<br></div>I'd say:  leverage your Python to tackle a second<br></div>OO language: Java (not JavaScript yet).  Then<br></div>leverage your Java, which need not be super<br></div>polished, to tackle Clojure.  That'll be a first <br></div>LISP-family language and will start to formalize<br></div>ground covered, making the concepts more <br></div>clear.  Pick up concurrency concepts here.<br><br></div>Finally:  back to Python i.e. take what you've <br></div>learned on this circle tour to move into concurrency<br></div>with Python if you wish, and with new fondness <br></div>for a LISPish mindset.  From here you're ready<br></div>to branch to whatever your career calls for:  <br></div>more C family?  More Apache stuff (Tomcat?).<br></div>I'd say you've got even going on the language<br></div>side with this point to start tackling DB world and<br></div>its SQL/noSQL APIs.<br><br></div>In sum:<br><br></div>Python first<br></div>Bridge to Java<br></div>Tackle concurrency in Clojure (runs on JVM)<br></div>back to Python, add more layers and polish<br>===<br></div>DB stuff:  SQL + noSQL<br><br></div>In between all this comes installation and <br></div>simple sysadmin devops baby steps i.e. just <br></div>learning the above interactively will bring an<br></div>OS shell and perhaps an IDE into focus.<br><br></div>Speaking of IDEs, that's a good place to <br></div>introduce version control, where you can back<br></div>end your code plane (screens) straight into some<br></div>repository.<br><br></div><div>Caveats:<br><br></div><div>Note that I'm not talking about theory, not trying<br>to outline general principles, hardware abstractions, <br>parsing / compiling  (back to theory of data structures, <br>parse trees etc.).  I'm imagining all that as content <br>and/or background, while the above simply tracks <br>an evolving skills set in terms of language and <br>exposure to specific APIs.  An alternative would be<br></div><div>a more traditional LAMP stack approach, which <br></div><div>still works as a thumbnail guide:<br></div><div><br>L -- OS level on down to hardware<br></div><div>A -- All lower level server processes e.g. httpd<br></div><div>M -- Persistence Layer (keeping / updating state)<br></div><div>P -- Application layer (hosted processes e.g. PHP's)<br></div><div><br></div><div>i.e. it remains useful to break it down that way.<br><br></div><div><br></div>Kirby<br><br></div>