Hacker News Comments on
Advanced UNIX Programming
Hacker News Stories and CommentsAll the comments and stories posted to Hacker News that reference this book.
You might find the following useful.
* Network Algorithmics,: An Interdisciplinary Approach to Designing Fast Networked Devices - https://www.amazon.com/Network-Algorithmics-Interdisciplinar...
* See MIPS Run - https://www.amazon.com/Morgan-Kaufmann-Computer-Architecture...
* UNIX Systems for Modern Architectures: Symmetric Multiprocessing and Caching for Kernel Programmers - https://www.amazon.com/UNIX-Systems-Modern-Architectures-Mul...
* Advanced UNIX Programming - https://www.amazon.com/Advanced-UNIX-Programming-Marc-Rochki...
Well, even not half-decent schools (the good ones) accept non-cs folks, but with the stipulation that it would serve you better if you came from a math background (engineering, etc.)
What the admissions folks want to know is whether you can handle the workload and can contribute something of significance in the form of a thesis or a project. As about workload, you will invariably encounter systems programming, operating systems, compiler construction and some theory class. Of course, this may not be true everywhere but is an indication of a good grad program's basic requirements. To succeed in those classes (and beyond), you would be advised to have a good grasp of at least C, Java or C++, data structures and algorithms.
Now, if you really want to go through with this, you can succeed if you spent some time studying. Start with MIT OpenCourseWare. Master the intro class with python as a gentle intro (checkout Google's Python class for great intro). Then write those some programs in Java. Then, write those same programs using Object Oriented Programming.
Then look into data structures (arrays, lists, hashes, trees) and the big algorithms (start with path finding - dijkstra, other shortest paths, sorting, and if you have time - strongly connected components, suffix tries, etc.) Another big concept you need to understand is Big O notation - something that tells you how complex a given program or algorithm is (it's nice to know sometimes to compare one algorithm to another on basically how fast it can run - e.g a big O of n^2 O(n^2) is worse than O(n))
Now, all of the above is just good preparation for the fun parts you will do in a Master's. You should spend some serious time hacking around with C (get this book - http://en.wikipedia.org/wiki/The_C_Programming_Language_%28b...). The best way to play around with C is to mess around with Systems Programming in UNIX. Get Systems Programming book (http://www.amazon.com/Advanced-UNIX-Programming-Marc-Rochkin...)
Having said all of the above, do you know what you are interested in doing with a degree in C.S? There are some nice interdisciplinary programs where you may not have to do all the hardcore stuff I mentioned above but still dabble into as much detail as you'd like. Look into programs like Michigan's School of Information, for example.
Hope that helps.
⬐ ryanb1_98Thanks for the thorough advice. I really appreciate it. I think my main goal is just to get a credible degree for the web development job market. It will be a complete career switch for me. My thought process is that going back and getting another BA is too time consuming. I am motivated right now and I have a lot of free time, so I'm wondering if it is possible to teach myself most of the basics taught in undergrad and get into a grad program, which would be worth much more in the job market anyways.⬐ djb_hackernewsI'd say a masters in computer science isn't exactly what you want if you want to go into web development.
There really is nothing stopping you from starting to build a portfolio now. Start simple, some well designed static html/css pages. Then get some jquery in. Then get on a shared host and start with php/python/ruby.
I assume if you've made it to hackernews you are slightly technically competent. And if not I don't think a masters program will even admit you and if they did I don't think they'd be teaching you the things you need to learn.
If anything I'd suggest a web design program.⬐ adoraOne of the best programmers I know (became VP of Engineering at a major company at one point) was an English Lit major with no formal CS training.
He started off consulting and worked his way up through a lot of hard work. Point is, I actually think it would be faster to do this (assuming you're willing put in the effort) than to aim for a master's program with the hope the end result is a better opportunity. After your first programming job, experience and recommendations matter much more than a degree.⬐ samratjpWell, in that case, in the next year learn by doing what you want to do i.e. web development. You still would benefit going through the exercises. At the very least, go through Google's Python tutorial and get some decent coding skills from the MIT intro class (http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Compute...)
After going through that exercise, you should be able to build some non-trivial apps.
For web side, you can benefit from learning at least one web framework (yes, HN folks will flame throw you with framework do's and don't, but for learning sake, just pick one and stick with it). Ruby on Rails is a pretty popular framework and some Ycombinator startups have built extremely impressive sites (scribd, justin.tv, Loopt to name a few).
So, assuming you put in work on the python tutorial or even if you didn't, I highly recommend this online ruby tutorial in 15 minutes. http://tryruby.org/
I'd recommend this Ruby on Rails online tutorial - http://www.railstutorial.org/book#top. It is very new-comer friendly and dips into industry-relevant points that other tutorials don't necessary cover; by that, I mean this tutorial touches base on version control (a program to keep track of what you added or changed in your code) and unit testing (you need this when your code gets ridiculously huge).
And, even though this may sound too early (it's not), look at job boards of places where you may want to work for (this would and should change as your learning progresses). In those places, look at skills required and the tools they use. You'd be surprised how often some jobs care about what you have built and how smart you are rather than your impressive educational credentials (though that can help).
This post only contains non-aff links
While I'm certainly good at C, and have been the guy people asked the C and C toolchain questions at a couple places I've worked, I'd say you're in for more than 1 book to grok the topics you've expressed interest in, and haven't met the single book that does all you want.
1: If you're a python programmer, I do suggest staying with pure C and AWAY from C++. You have little use case for it if you can mix python and C and it is literally pain incarnate while you do not know every little bit of it and/or work with people who do not know every little bit of it.
2: Secondly, a single book on C will not get you where you're going. You will need several.
3: I'd stick with K&R for reference, but then go to the following two books for threading and all the other stuff like networking:
You need these two books to get down C and it's ecosystem (make, autotools, etc): Advanced Unix Programming by Rochkind (Really good explanation of signals especially): http://www.amazon.com/Advanced-UNIX-Programming-Marc-Rochkin...
Gnu/Linux Application Programming by M. Tim Jones (Recovers some of the same stuff as AUP, but does better with the toolchain): http://www.amazon.com/GNU-Linux-Application-Programming/dp/1...
If you want to go more advanced, this is likely the correct book: Advanced Programming in the Unix Environment: http://www.amazon.com/Advanced-Programming-UNIX-Environment-...
Although if you're diving deep into networking, this is likely the correct book: Unix Networking Programming: Vol I by Stevens: