Why Computer Science Doesn’t Matter is an essay about the lack of computer science in the educational curriculum today, and what can be done about it. They’ve come up with an interesting, and successful, approach.
[I want] to place computing where it belongs: in the hearts and minds of every single student.
To paraphrase a quote attributed to Avinash Meetoo’s unnamed professor in the comments section in this wiki article:
A programmer should be studying that which prepares him for his last job; not just his next, or current one.
— Grant Rettke
If you were trapped on a desert island, clearly you would choose C as your only programming language!
A meme consists of any unit of cultural information, such as a practice or idea, that gets transmitted verbally or by repeated action from one mind to another.
Whether or not you agree in the validity of memes as a science (I don’t); the term is often used in authoratively in pop culture. They typically represent some bit information, usually in the form of a frequently repeated phrase, that spreads around and around the community. In the programming community, there are plenty. For example, here are a few: “convention over configuration”, “don’t write code just to make the compiler happy”, or “every developer must learn how to program concurrently: it is the future”.
The interesting things about memes are that they often have an element of truth behind them. For example:
- “Convention over configuration”: Abstract away often repeated work
- “Don’t write code just to make the compiler happy”: Use the right language for the task at hand
- “Every developer must learn how to program concurrently: it is the future”: Use the right problem solving approach for the task at hand
- “[My programming language] is purely functional“: For the type of program I am writing, side-effects are not welcome
The idea of memes is to pass around the interesting idea so that we can all benefit from it. The problem with them, though, is that they don’t. Instead, they sort of pass around a half-truth whose only intention is to further, most probably, some individual’s agenda. For example:
- Lisp is convention or configuration taken to the extreme, but you never hear anyone saying that (If you hear me saying it, slap me), and they shouldn’t. Ruby on Rails is to Ruby as Struts was to Java; the only and therefore best of its time.
- “Don’t write code just to make the compiler happy” is pretty silly. Use a statically typed language for a reason. Use dynamically typed language for a reason. There is a difference. You should understand the difference and its impact to your development process.
- The IEEE, ACM, and nearly every presenter at JavaOne 08 preached fear of the multicore future without expounding on why every developer needs to master multi-core programming (solution looking for a problem?). That said: if every programmer learned how to program really well in the first place, we might not need 64 cores.
- “Haskell is purely functional, so it is better than all other impure languages”: Please help me, the reader, understand why!
Because memes are half-truths, people often don’t get to the meaty goodness of the truths behind them. Perhaps at some gut-level they know there is a very good truth hiding back there. If, like most people, though, they don’t explore it further, then they will instead assume the meaty truthful goodness to be the ugly, half-truth of the meme. Since the community largely supports the meme; it becomes common knowledge that the individual must accept it in order to keep his place in the community.
Therein lays the danger of memes, whenever the meme is reintroduced, the individual sort of experiences the behavior modification reaction much like a Skinner pigeon; they have to buy into nonsensical statements about which everyone agrees. Sprinkle any article or blog post or discussion with any number of such memes and you have instant gold for making your point unbeatable. It is a strange and disappointing phenomenon that draws into question much of what is written in the tech world today.
Today I fixed typos, revised the grammar, and altered the content to reflect what I actually meant. As such, I believe this to be a “good faith” modification that didn’t merit change-tracking for the reader’s sake.
A pervasive attitude among programmers today is that their language is “good enough” and that whatever their language lacks in expressiveness they can make up for with brute force.
Be forewarned: pretty soon you will just end up realizing Greenspun’s Tenth Rule!
Anyone new to Lisp will quickly find that among certain folks there is very much an “us versus them” mentality when it comes to Scheme and Common Lisp.
Is it just human nature that drives the mentality? Is it boredom?
Since Scheme and Common Lisp are both Lisp dialects, in some ways they are very similar; but in other ways they are quite different. The thing is that every language decision is a trade off from which we can learn. Most students of programming would look to both the similarities and differences in each language and recognize their function and beauty!
One thing that I can guarantee that you will notice pretty quickly once you start hanging around Lispers (in general) is that there is a noticeable difference in attitude and demeanor among folks that have studied and appreciate both Common Lisp and Scheme, and the folks that have not.
The folks that have studied and appreciate both languages are simply a much more pleasant group of people to be around. Perhaps that is how the expression about “the haves and the have nots” came to be?
Never trust “a thought leader”: they are supposed to teach you how to think, not tell you what to think!
Now of course you can trust them, but it is your duty never to just “take their word for it”.
It is true what people say about Lisp, it changes how you think. In particular, it changes how you think about yourself!
If you pursue the “Road to Lisp”, it will serve as an elucidative experience as to whether or not you are “good” at programming. You see, I used to confuse “doing” with “learning”. All the “greats” tell you to learn a new language each year, but they don’t really tell you why, just that something good will happen. Now I can tell you from experience that I have had great fun and learned a lot jumping from language to language, but that strategy for learning is poor use of time and you’ll probably just end up being an average programmer in more languages after it is all said and done. There are better, much better ways to study the fundamentals of programming.
Lisp is one of those ways.