Must Read CS Books For Self Self-Taught Programmers
51–60 of 63 posts
Re: Must Read CS Books For Self Self-Taught Programmers
#52It really depends on what you feel you're missing and what you're hoping to do (definitions of "daily work" vary widely). If you're looking to get up on theory by doing your own program of sorts, you could do worse than start with these (in roughly this order): Structure and Interpretation of Computer Programs - Abelson, Sussman, and Sussman Introduction to Algorithms - Cormen, Leiserson, Rivest, and Stein The Art of…
Re: Must Read CS Books For Self Self-Taught Programmers
#53http://www.reddit.com/r/books/comments/ch0wt/a_reading_list_...
Re: Must Read CS Books For Self Self-Taught Programmers
#54One book that I would suggest to anyone is Introduction to Automata Theory, Languages, and Computation - HMU. It is very approachable and presents some very interesting topics (so you won't write a regex for matching HTML and will learn what P vs NP means). On a more practical side, I think that a must read for machine learning is Tom Mitchell - Machine Learning . Another book that from what I've heard is easier to d…
The Mitchell book is definitely showing its age these days. It's not terrible, but anyone thinking of buying it should be aware that it is a broad but shallow tour of machine learning as it stood 15 years ago, and machine learning as a field has changed significantly since then. Most notably, there has been something of a Bayesian revolution that Mitchell basically ignores (understandable since the book predates it).…
This is the first time I hear about Marsland's book, so I can't comment on that.
Re: Must Read CS Books For Self Self-Taught Programmers
#55I 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]…
Great 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-comput...
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/
- Linux Documentation Project: http://tldp.org/LDP/
- Linux Command Line and Shell Scripting Bible: 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
- Learning UNIX (also O'Reilly): http://www.amazon.com/Learning-UNIX-Operating-System-Fifth/d...
* Bash:
- http://bash.cyberciti.biz/guide/Main_Page (better, and v good)
- Learning the Bash shell: http://oreilly.com/catalog/9780596009656/
- Advanced Bash Scripting (online): http://tldp.org/LDP/abs/html/
- YouTube playlist: 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
* sed/awk/grep etc.
- sed & awk (O'Reilly): http://oreilly.com/catalog/9781565922259
* Vim/Vi:
- vimcasts (screencasts): http://vimcasts.org
- more screencasts (these are great): http://vimeo.com/user1690209/videos
- learning vi: 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.
Re: Must Read CS Books For Self Self-Taught Programmers
#56- Ruby Best Practices - Javascript, the Good Parts - Higher Order Perl
I recommend picking these up after you've done work in the languages they're about. They assume that you're already comfortable with the language, but then go back to show how that language uses CS concepts. They highlight how functional programming, and other classic introductory CS concepts, but stays practical. None of them are long reads, and there are clear take aways that make you better at programming.
Re: Must Read CS Books For Self Self-Taught Programmers
#57My vote goes for The Little Schemer. It's short (but don't read it all in one sitting), entertaining, and will teach you some important concepts. http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/02...
FYI: it is the first book in a "trilogy" -- but your next book could be either of the other two (their only prereq is The Little Schemer). Listed below:
Reasoned Schemer: http://www.amazon.com/Reasoned-Schemer-Daniel-P-Friedman/dp/... Seasoned Schemer: http://www.amazon.com/Seasoned-Schemer-Daniel-P-Friedman/dp/...
Re: Must Read CS Books For Self Self-Taught Programmers
#58While books are certainly valuable in someone's education, I think we are forgetting about the projects. It is very instructive, not to mention very satisfying, to implement an operating system, a compiler, or a transport layer (that interoperates with real TCP!). Moreso than reading the books of a college course, I recommend doing its projects.
To get started, I recommend the Pintos operating system, designed for Stanford's operating systems course, CS 140, traditionally thought to one of the more difficult programming courses in their undergraduate curriculum.
Some links.
http://www.scs.stanford.edu/11wi-cs140/ http://www.scs.stanford.edu/05au-cs240c/
Re: Must Read CS Books For Self Self-Taught Programmers
#59Elements of Programming (by Alexander Stepanov and Paul McJones) takes a mathematical approach to programming. Since its only prerequisite is a basic understanding of high school algebra, the book is very accessible and easy to follow.
Digital Design and Computer Architecture (by David Harris and Sarah Harris) is a great book on computer architecture that starts with digital logic design (i.e. gates and transistors) and ends with a subset of the MIPS instruction set. Though, it probably won't help you much in 'daily work'.
Re: Must Read CS Books For Self Self-Taught Programmers
#60I was (am?) a self-taught programmer, I guess I am transitioning away of that label. I am a bit less than halfway through the MSCS program at the moment. I really cannot recommend it enough.
I think I was a pretty good software engineer prior to getting some formal education, but I cannot tell you how often in class the light from heaven just shines right down.. "oh so that's why x is y". If you enjoy the work, its a real pleasure (albeit a painful amount of work at times).
So finally I get to the point. I can see that you have already received a lot of good recommendations. I think most of them are quite good. However, I have a couple of observations about specific books.
Intro to Algorithms - Cormen etc. If you feel you need a discrete math course, then this book is probably not a good place to start with algorithms. It is a rigorous treatment of the subject. However, if you lack mathematical sophistication, this book can be tough. I aced my discrete course prior to taking an algorithms course taught with this book, and I struggled mightily to get an A-. I found the proofs in the book difficult to understand on many occasions.
Modern Operating Systems - Tannenbaum This book is very easy to understand and provided me with so many "A HA!" moments. A real pleasure. I am not sure what your current work is, but the only pre-req on this book is a modest amount of C/C++ programming. The reason I say this is because I found that having that, this book allowed me to finally understand what is happening from compile time down to the CPU at runtime. A really rewarding journey.