Found in 8 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-...

tokenadult · 2012-04-27 · Original thread
This is a simplistic restatement (on a rather ugly webpage color scheme) of the strong version of the linguistic relativity hypothesis ("Sapir-Whorf hypothesis"), which is surely wrong. My native language is General American English, and I grew up in what was essentially a monolingual immediate family and neighborhood of English speakers, although both of my parents had had some instruction in other languages. All of my grandparents were born in the United States, but three of the four spoke languages other than English at home, and my two maternal grandparents had all of their schooling in German.

German as a second language was mandatory for all elementary pupils in fourth, fifth, and sixth grade in my childhood school district, very unusual for the United States. I had more German in junior high and senior high (in two different states) and then Russian in senior high. I entered university as a Russian major and immediately began taking Chinese, switching my major to Chinese as I grew in delight for that language. I have had formal instruction as an adult in Modern Standard Chinese (a.k.a. Mandarin), Cantonese, Biblical Hebrew, Literary Chinese, Attic Greek, Biblical Greek, Japanese (first in the medium of Chinese, then in English), Taiwanese, and Hakka, and various courses in linguistics (also in the mediums of both English and Chinese). I have engaged in self-study of Biblical Aramaic, Mongolian, Spanish, French, Latin, Hungarian, Malay-Indonesian, Esperanto, Interlingua, etc., etc., etc.

I have to respectfully disagree with the strong version of the linguistic relativity hypothesis. Within each language grouping, people differ far more in their personal thinking along the dimension of visual thinker or not, or auditory thinker or not, than people differ from one another in thought patterns based on language background. But it is useful to learn another language and to live in another culture for exposure to new basic assumptions, and the same applies to learning computer language paradigms. People who program for a living, or who program just for fun, may like the books

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

or

http://www.amazon.com/Essentials-Programming-Languages-Danie...

among other books on programming languages mentioned here on HN as examples of overviews of different approaches to high-level computer programming languages facilitating different kinds of programming problem-solving.

The case of human languages is quite a bit different. All human languages are constrained by the biology of the human brain, and human ear and human vocal tract (or hands and arms, in the case of sign languages for the deaf), and all human languages, without exception and even if they are constructed languages, have ambiguities and illogical features inconsistent with other features of the language. Many of the faults of Esperanto are very well documented,

http://www.xibalba.demon.co.uk/jbr/ranto/

and the Lojban promoters I have met online since 1994 have repeatedly demonstrated lack of logical capacity (at least in our common language of English) in a manner that puts me off from learning Lojban.

Learning a new cultural perspective by living in a new culture and learning the predominant language there is a very good idea, and highly educational. But the incidental features of one language as contrasted with another have no necessary relationship to how speakers of each language think, or how they can think.

Maro · 2012-03-26 · Original thread
There's a book called "Programming Language Pragmatics", which is a very readable presentation of PL ideas, how to parse them and how to write compilers for them. I actually read 2/3 of it.

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

tokenadult · 2011-05-11 · Original thread
You received another interesting answer. My native language is General American English, and I grew up in what was essentially a monolingual immediate family and neighborhood of English speakers, although both of my parents had had some instruction in other languages. All of my grandparents were born in the United States, but three of the four spoke languages other than English at home, and my two maternal grandparents had all of their schooling in German.

German as a second language was mandatory for all elementary pupils in fourth, fifth, and sixth grade in my childhood school district, very unusual for the United States. I had more German in junior high and senior high (in two different states) and then Russian in senior high. I entered university as a Russian major and immediately began taking Chinese, switching my major to Chinese as I grew in delight for that language. I have had formal instruction as an adult in Modern Standard Chinese (a.k.a. Mandarin), Cantonese, Biblical Hebrew, Literary Chinese, Attic Greek, Biblical Hebrew, Japanese (first in the medium of Chinese, then in English), Taiwanese, and Hakka, and various courses in linguistics (also in the mediums of both English and Chinese). I have engaged in self-study of Biblical Aramaic, Mongolian, Spanish, French, Latin, Hungarian, Malay-Indonesian, Esperanto, Interlingua, etc., etc., etc.

I have to respectfully disagree with the strong version of the linguistic relativity hypothesis. Within each language grouping, people differ far more in their personal thinking along the dimension of visual thinker or not, or auditory thinker or not, than people differ from one another in thought patterns based on language background. But it is useful to learn another language and to live in another culture for exposure to new basic assumptions, and the same applies to learning computer language paradigms. Besides the book mentioned in another reply, I like the books

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

http://www.amazon.com/Essentials-Programming-Languages-Danie...

too as overviews of various programming languages.

1331 · 2010-06-30 · Original thread
I recommend _Programming Language Pragmatics_ by Michael Scott as a good book to get you started: http://www.amazon.com/Programming-Language-Pragmatics-Third-...
hga · 2010-01-02 · Original thread
Programming Language Pragmatics by Michael L. Scott: The explanations of many things I'd read in other sources are no less than fantastic, I now understand a bunch of things I had only superficially "got" previously. http://www.amazon.com/Programming-Language-Pragmatics-Third-..., check out the overview and reviews.

Coders at Work by Peter Seibel: By far the best of this type of book (well, not counting the '80s classic Programmers at Work which I haven't read since then), one of the best Lisp authors interviews in depth a lot of really interesting and/or important people, from James Zawinski to Donald Knuth, with Javascript, static FP and PARC people, Guy Steele, Peter Norvig, Ken Thompson, Fran Allen (really important interview which points out how C/C++ to the exclusion of truly high level languages have been a disaster when used beyond their proper niches), etc. All are masters who've gotten their hands dirty, many are theory people as well. http://www.amazon.com/Coders-at-Work-Peter-Seibel/dp/1430219...

Garbage Collection by Jones Lins: Pretty much the only book in the field (except for the forthcoming Advanced Garbage Collection sequel in the middle of this year), covers the territory as of the mid-90s. Much more fun than trying to track down 100 individual papers and trying to make sense of it all. Exposition is clear and you get a real feeling for the subtleties of the field (especially when you try fun things like generational and/or concurrent GC). http://www.amazon.com/Garbage-Collection-Algorithms-Automati...

Fresh book recommendations delivered straight to your inbox every Thursday.