3 ms·
I am also self-taught, although I dropped out of University two years into a CompSci/Engineering double major, so I will recommend some resources to you that he
by nikcub 16y ago
I am also self-taught, although I dropped out of University two years into a CompSci/Engineering double major, so I will recommend some resources to you that helped me immensely. Each of these books has an associated MIT course with lecture video, notes, etc. available online.
First is Structure and Interpretation of Computer Programs[1], which you can read online, and the associated course at MIT, which is 6.001[2]
Second is the famous 'Dragon Book', Compilers: Principals, Techniques and Tools[3] and the associated course which is 6.035[4]
Extras would be the Python book 'How to think like a Computer Scientist'[5]. MIT course 6.00[6] uses the book as a reference, and the courseware is again available online.
Other than that - the usual suspects on learning C (K&R), UNIX (TAOUP[7]), the bash shell along with grep, sed, awk, more algorithms(CLRS[8]), functional programming and machine learning. Take your time, it takes years to build the relevant experience and knowledge and you are never done.
I love the MIT courses. Work and learn at your own rate. I feel that it is important to implement all the code yourself even if it looks easy in a lecture - there are little things you pick up as you write algorithms out.
Even though I had worked through SICP I still watched all the lectures again and implemented all the examples with benchmarks and unit tests. I usually set aside one day on the weekend to work on study, and usually an extra evening or two mid-week to read papers and books. Once you get into the routine it is great.
It might be the best approach to set yourself a timetable and weekly schedule, just like in UNI (ie. every Saturday plus Tuesday and Thursday nights) and work through the MIT courseware and associated books in order (6.00, 6.001, 6.035). The more advanced MIT courseware is an excellent bonus.
[1] http://xrl.us/sicp http://xrl.us/sicp
[2] http://xrl.us/6001 http://xrl.us/6001
[3] http://xrl.us/dragonbook http://xrl.us/dragonbook
[4] http://xrl.us/6035 http://xrl.us/6035
[5] http://xrl.us/thinkcs http://xrl.us/thinkcs
[6] http://xrl.us/6000 http://xrl.us/6000
[7] http://xrl.us/artunix http://xrl.us/artunix
[8] http://xrl.us/clrs http://xrl.us/clrs
- drp 16y agoThat's a great collection of books, but when I see a list of link-shortened URLs to what context dictates are book web pages, I automatically assume they are affiliate links. Please just use the real URLs so people know what they're getting into. For the record the shortened URLs are not affiliate links, and I'm not trying to make any statement about affiliate links. Here are the original URLs: [1] http://mitpress.mit.edu/sicp/full-text/book/book.html http://mitpress.mit.edu/sicp/full-text/book/book.html [2] http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/ http://ocw.mit.edu/courses/electrical-engineering-and-comput... [3] http://dragonbook.stanford.edu/ http://dragonbook.stanford.edu/ [4] http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-035-computer-language-engineering-sma-5502-fall-2005/ http://ocw.mit.edu/courses/electrical-engineering-and-comput... [5] http://greenteapress.com/thinkpython/ http://greenteapress.com/thinkpython/ [6] http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00-introduction-to-computer-science-and-programming-fall-2008/index.htm http://ocw.mit.edu/courses/electrical-engineering-and-comput... [7] http://www.faqs.org/docs/artu/ http://www.faqs.org/docs/artu/ [8] http://www.amazon.com/dp/0262032937/ http://www.amazon.com/dp/0262032937/
- nikcub 16y agoAhh sorry - I am usually totally against shortened links but: 1. Didn't know that HN would trim the long links 2. Remember the shortcodes/aliases used at xrl.us (such as the MIT course names), although browser smart address bars and Google is just as easy. Thanks for putting the links up, I don't need to update my comment.
- achompas 16y agoGreat list. Two things: (1) MIT has also posted lectures for "Intro to Algorithms" taught by Leiserson (one of the authors of the famous textbook). The course number is 6.046J[0]. (2) You mention shell scripting and sed/awk/grep...can you recommend any resources for those? [0] http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/ http://ocw.mit.edu/courses/electrical-engineering-and-comput...
- tjr 16y agoawk: http://www.gnu.org/software/gawk/manual/ http://www.gnu.org/software/gawk/manual/
- nikcub 16y agoThe best way to learn the UNIX tools is in the context of shell scripting and using the combination of tools to achieve a purpose (such as parsing log files, setting up shortcuts as part of your dev toolchain) 1. Understand the philosophy behind UNIX. ie. everything is a file and it is small apps that are very good at a single task that can be combined through pipes etc. to process larger tasks (this has lost its way somewhat in Linux, but still holds true) 2. Look at your computer usage through development, sysadmin, etc. and find parts that you want to automate, and then set out to write scripts to complete these tasks. for eg. in each one of my projects I have a script called start.sh which has a bunch of tasks implemented (eg. backup, serve, dns (to update dyndns for callbacks), push, diff, deploy, stage (run remote commands) etc.). Remember that git is itself a set of shell scripts, as are most server management commands. Take a peak inside each of these to learn how they are implemented. 3. Once you have a good understanding of what you want to implement, just go for it. Learn along the way by using Bash scripting, regular expressions, an understanding of UNIX/Linux, sed, awk, yacc/bison (to analyze code and extract info). You will end up building your own collection of shell scripts, environment variables, .vimrc, ssh, curl (you can do almost any API request and auth with curl and a shell script - automate tweets, RSS feeds) etc. (I have been meaning to publish my own, the most recent one I wrote greps my code for TODO's and pushes them to a simple webapp where I can view them, sort them, etc. along side my 'personal' todo list) 4. You need two sets of resources, one is for learning, the other is for reference which you keep handy. Here are my own recommendations: Learning: The learning style book comes down a lot to personal preference. You can go wrong, so get a feel for each topic by reading online tutorials and then scan the TOC and sample chapters of books that look good. A subscription to O'Reilly Safari comes in handy. There are now also a lot of screencasts online, try searching YouTube for the topic with 'screencast' or 'tutorial', once you find a good screencast publisher look at the rest of his/her videos. You can also get the O'Reilly books on special in bundles sometimes, check their website There is no book that really introduces UNIX and then covers most of these topics as I described. ie. 'UNIX for Developers'. * UNIX: - FreeBSD handbook: http://www.freebsd.org/doc/handbook/ http://www.freebsd.org/doc/handbook/ - Linux Documentation Project: http://tldp.org/LDP/ http://tldp.org/LDP/ - Linux Command Line and Shell Scripting Bible: http://www.amazon.com/Linux-Command-Shell-Scripting-Bible/dp/047025128X/ http://www.amazon.com/Linux-Command-Shell-Scripting-Bible/dp... - UNIX In a Nutshell (I haven't read this in a while but it is on my shelf): http://oreilly.com/catalog/9781565924277 http://oreilly.com/catalog/9781565924277 - Learning UNIX (also O'Reilly): http://www.amazon.com/Learning-UNIX-Operating-System-Fifth/dp/0596002610 http://www.amazon.com/Learning-UNIX-Operating-System-Fifth/d... * Bash: - http://linuxcommand.org/ http://linuxcommand.org/ - http://bash.cyberciti.biz/guide/Main_Page http://bash.cyberciti.biz/guide/Main_Page (better, and v good) - Learning the Bash shell: http://oreilly.com/catalog/9780596009656/ http://oreilly.com/catalog/9780596009656/ - Advanced Bash Scripting (online): http://tldp.org/LDP/abs/html/ http://tldp.org/LDP/abs/html/ - YouTube playlist: http://www.youtube.com/view_play_list?p=2284887FAE36E6D8 http://www.youtube.com/view_play_list?p=2284887FAE36E6D8 * Regular Expressions: - Mastering Regular Expressions (this is such a great book. I didn't like regexp until I picked this up eons ago): http://oreilly.com/catalog/9781565922570 http://oreilly.com/catalog/9781565922570 * sed/awk/grep etc. - sed & awk (O'Reilly): http://oreilly.com/catalog/9781565922259 http://oreilly.com/catalog/9781565922259 * Vim/Vi: - vimcasts (screencasts): http://vimcasts.org http://vimcasts.org - more screencasts (these are great): http://vimeo.com/user1690209/videos http://vimeo.com/user1690209/videos - learning vi: http://www.amazon.com/dp/1565924266 http://www.amazon.com/dp/1565924266 Reference: On my browser toolbar, I have a folder called '_ref', it has around 70+ bookmarks (online documentation, cheatsheats) in it each titled what the link is a reference for (ie. 'vi', 'bash' etc.). I will publish it online, and will post the links here. I have collected the links over years.
- jerf 16y agoIf you did not tell me that SICP was actually made for something else, I would think that it was custom-designed for self-taught programmers to fill in their gaps, at least the ones that matter. If you actually finish that book you'll be ahead of the vast bulk of programmers who graduated with computer science degrees in terms of practical software engineering.