CSC302 2011S Programming Languages

Reading: Tate, Chapter 1

Reading: Tate, Chapter 1: Introduction

Please submit a question by 9 p.m. on Sunday, 23 January 2011.

I do not have any questions on the introduction that could not be answered by a quick search on Google.

The idea Tate tries to express in Chapter 1 is actually quite simple and can be boiled down to six words "I will show you the doors". To confirm my guess, after skimming through the first chapter, I instantly jumped to Chapter 2 as I am more familiar with Ruby. Unsurprisingly beside listing all the fundamental features and syntax of Ruby, Tate doesn't mention common Ruby slang at all even though we can tell Ruby is one of his most favorite languages. This is exactly what I expected this book to be. Just as Tate pointed out, nowadays most references can be googled online, there is really no need to turn this 300 pages book into a 2000 pages gigantic dictionary (Also no one will buy it). Knowing what fits us best, we will naturally go out and look for stuff we are interested in.

How much of the installation / configuration will we need to do for these languages? Will the basic setup already be running on the mathlan?

Yes, the basic installation should be done in MathLAN. (Io may be the one problem, but we're working on it.)

Somewhat trivial question: I've heard the terms procedural and imperative used to describe programming languages, but I can't recall both being used at the same time. Are they equivalent terms?


How complex will our assignments be for these languages? Should I plan on doing all of what the author recommends?

The labs will be the basic things he recommends. The assignments will build upon them.

Smalltalk is mentioned a few times here, and frequently elsewhere. Can you recommend a good overview of the language? Preferably one aimed at someone with a similar background.

Back in the day, I learned Smalltalk from the Adele Goldberg books (Smalltalk-80 ...). These days, the language is called Squeak and there are good online Tutorials. Of course, you could also make it the topic for your presentation.

I've read a fair bit of the book and I noticed that the performance of the languages isn't really discussed. That seems very relevant for some applications, so will we discuss that?

Not much. Our focus is on the language concepts. When you want them to perform well, you'll translate them to C.

On your plan (I think) you mentioned that you used to dislike the "programming language a week approach to a programming languages class. What was the rational for your previous belief, and why have you decided to teach the first half of the class this way?

I did not think that you could go deeply into any of the languages. However, my experience in the class suggests that students still learned a lot when we focused on a key aspect of a language. Tate seems to have been successful at focusing on interesting design aspects of these languages.

On page 21, after talking about the industry switching programming paradigms in the past, Tate says We may be in the midst of another transformation. This time, new computer designs will be the driver. Could you expand on this?

Now posted on Piazzza for your classmates to consider.

In the introduction the book claims that Erlang is a distributed language. What does it mean for a language to be distributed?

It's designed for distributed computing, computing in which different parts of the computation run on different processors.

I am intrigued by the "Don't Buy This Book" section of the chapter. There are a number of things the author isn't going to provide in this book, and while I have used google as a supplement to a textbook before I don't think I've ever been explicitly instructed to use it by a textbook. Since I don't have the rest of the book with me right now to see how the author intends to give a thorough introduction to each of these languages, I am wondering whether I might "be better served by seven different programming books," and if not then why. [Check Plus]

Well, seven different programming books would probably cost you more, and you might find that only some of them are interesting to you. For this class, you're better served by this book, because our focus is not so much on the whole language as on particular language design features.

What does Tate mean by strong typing (pg 20), and are there other languages that are both strong & static or weak & dynamic? Can all programming languages be described by one / some of these terms?

Strong typing generally means that the language places significant restrictions on what types can be used in certain situations. Weak typing generally means that the langauge places fewer restrictions. Static typing means that the type checking is done at compile time. Dynamic typing means that the type check is done at run time. One can shoehorn any language in to these terms (partially because they have multiple meanings), but I'm not sure that it's always appropriate.

As I read the introduction, I got the sense that the author intends for this text to be difficult. How do you as the instructor feel about these statements?

Which statements? (You've only given one.) I don't think that Tate intends this to be difficult, but I do think he intends to stretch your imagination.

I was surprised that C was not chosen. Why might this be? What makes Haskell a better choice?

I think Tate assumes that everyone knows C or a C-like language and that there's not anything new and surprising he could teach. Haskell really challenges you to think differently.

I don't have questions on the reading itself as much as questions about the class in relation to the reading. Will we be doing the programming projects the author mentions? Will we be following the seven week timeline it lays out? Will we review/learn differences among typing models and programming models and such or are we expected to have these down? If so, will the Tate book review these or will we use other texts/lectures? [Check Plus]

The small tasks will be in-class labs. The bigger tasks are likely to form the basis of homework assignments. We'll discuss the bigger-picture issues and also do some readings on them.

Given the choice, which languages would you choose to include in the list of seven?

Would you have picked these seven languages if you were writing this book? Why or why not?

Do you entirely agree with the languages the author has selected? Are there any you would rather see?

I'm not sure. If I was designing it, I would have focused more on languages I know or use regularly, like awk and Backus's fp. In the past, I've tried to do a wide range of functional languages. I think you'll see a broader range of ideas here. I do like the use of Ruby.

Are there any that stand out as either really good choices for this class, or as really bad choices?

Haskell strikes me as a great choice. Prolog is a great choice, and one I would teach in almost any version of the languages course. Ruby is a pretty good choice. None strike me as bad.

Disclaimer: I usually create these pages on the fly, which means that I rarely proofread them and they may contain bad grammar and incorrect details. It also means that I tend to update them regularly (see the history for more details). Feel free to contact me with any suggestions for changes.

This document was generated by Siteweaver on Mon Feb 7 08:49:15 2011.
The source to the document was last modified on Mon Feb 7 08:49:08 2011.
This document may be found at

You may wish to validate this document's HTML ; Valid CSS! ; Creative Commons License

Samuel A. Rebelsky,