by Michael Lee Scott
ISBN: 0123745144
Buy on Amazon
Found in 3 comments on Hacker News
steve_g · 2015-12-05 · Original thread
Programming Language Pragmatics by Michael Scott

http://www.amazon.com/Programming-Language-Pragmatics-Third-...

I haven't read a lot of language books, but this one has good information on the various design choices one might make when building a language. Like the others listed in the comments, it's more implementation-focused than semantic design-focused.

stiff · 2013-09-30 · Original thread
If you are serious about programming and have any possibility of doing this at all, by all means get a CS degree at the best university you can access. I have worked with or interviewed a few programmers without any university degree and time and time again their confidence in how getting a degree is a total waste of time was directly proportional to their ignorance of basic facts from various areas of CS and inability to solve problems in a systematic way.

A lot of those people simply never get any external validation, have problems getting along with other people, and are unable to accept any kind of mentoring (while they desperately need it), in the end growing up believing in the greatness of their skills which in reality are not even mediocre. Since this seems to be the reason a large fraction of people does not finish their degrees, by this point as a recruiter I would just not hire a person without a degree.

For this reason, I would also ignore a lot of the testimonies that invariably will appear here of self-taught programmers proclaiming supposedly doing great, unless they have projects and code to back their claims up.

There certainly are exceptions, but do not start with the belief you will be one. Getting the same kind of wide perspective you get from a college degree from self-studying is several times as hard. I have self-studied mathematics after finishing my CS degree for a few years now and that's my practical experience. If you don't have the possibility to attend university, make sure to get as many opportunities as possible of verifying and testing your skills in different areas and stay modest.

This post by Notch of Minecraft fame illustrates all that I have said very well:

http://notch.tumblr.com/post/15782716917/coding-skill-and-th...

As far as practical advice goes, as soon as you are able to at all write working programs of non-trivial complexity (say, a platform game) MIT OCW is the place to be:

http://ocw.mit.edu/courses/electrical-engineering-and-comput...

http://ocw.mit.edu/courses/electrical-engineering-and-comput...

http://ocw.mit.edu/courses/electrical-engineering-and-comput...

http://ocw.mit.edu/courses/electrical-engineering-and-comput...

Taking those four courses in this order will provide a great basis, but I would be surprised if someone would be able to complete those in less than two years when self studying (I solved most exercises from SICP, learned a lot, but took me more than a year). To get the equivalent of a university degree, you would still need to heavily study at least four more topics: networking & security, compilers, operating systems and databases. Those two books might be a reasonable shortcut to learn some of this:

http://www.amazon.com/Programming-Language-Pragmatics-Third-...

http://www.amazon.com/Programming-Language-Pragmatics-Third-...

Source: I started working full-time as a developer when I was 19 and did it ever since, did a four year CS degree as evening studies after work (already having significant programming experience when starting the degree) and spent a significant amount of time self-studying (I worked through almost all of SICP, read the "Dragon Book", wrote a compiler etc.). I would never be where I am today (wherever it is) without teachers and colleagues from the university, there would be just lots and lots of gaps in my knowledge I would never get aware of.

stiff · 2013-08-20 · Original thread
What helps immensely in learning new programming languages quickly, but also in spotting tricky bugs and increasing general software engineering skills is studying programming languages as a discipline of CS: learning how languages are implemented, what are the core paradigms, what are the design choices invented so far for common issues etc. There is a fantastic book called "Programming Language Pragmatics" that is readable and very good in teaching the practical aspects of this:

http://www.amazon.com/Programming-Language-Pragmatics-Third-...