Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

When I started to study programming, one of the languages we used was a dialect of Lisp. It didn't make much sense to me at the time because it only allowed me to do boring things, not cool things. Programming only started to make sense when we switched to C, I did some simple tasks first, then paired off with a classmate and we implemented a simple raytracer for a summer project. Graphics is neat.

So I'm skeptical of the idea that programming education needs to be even more hardcore than Scheme and we need to use a lazy functional language instead. I think the right way to teach programming is to give students a simple procedural language (perhaps not even OO) that makes the computer do cool things, like graphics or webpages. The ones who are curious for more hardcore stuff can always discover it afterward, like I did.



I think it comes down to whether you want to teach programming, or computer science. If it's the former, just teach to POKE with BASIC. If it's the latter, I think you'll quickly find yourself in want of a more sophisticated language, in order to teach any of the non-trivial concepts.


I think that's more a libraries thing that a language thing. For example, you can do very cool, HTMLy things using Racket's web-server/servlet and Scheme continuations, which would be incredibly hard to do in C.

But I agree with your suggestion that C should be teached first. If anything, because C's "computational model" is very simple: you know what executes when; it encourages a more common, procedural way of thinking, and it's easy to do side effects in single-threaded C.


IMO what you call the "computational model" of Scheme is also a poor fit for beginning web programmers. The most straightforward model is exemplified by PHP: put a file on the server, type its path into a browser, get the page. Change the code, refresh the page. I'm not defending the language design choices PHP made, but it nailed rapid development and deployment. Every environment that requires a recompile or restart feels like a huge step backward in comparison. I want to see my changes instantly, dammit, we had it in 1995, why can't we have it now? :-)


You can do it in Lisp... even in a long-polling application you can change a class definition and all instances are immediately updated without restarting the image or anything.



Well, forcing me to do Lisp when I was busy figuring out the graphic card registers to do cool things could have turned me from IT altogether. But I also think that if you got to the point when SICP is taught (basically university level CS), you have to do the hard things.


The preface to SICP (http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-7.html) says it was an entry-level course and introduced many students to programming.


Wow!!! If this was intended to be an introduction to Programming then what would a special/advance topic in programming be??


Operational & denotational semantics, for example...

Dana S. Scott. Outline of a mathematical theory of computation. Technical Monograph PRG-2, Oxford University Computing Laboratory, Oxford, England, November 1970.

Dana Scott and Christopher Strachey. Toward a mathematical semantics for computer languages Oxford Programming Research Group Technical Monograph. PRG-6. 1971.

Gordon D. Plotkin. A Structural Approach to Operational Semantics. (1981) Tech. Rep. DAIMI FN-19, Computer Science Department, Aarhus University, Aarhus, Denmark


I don't wanna sound off-topic but I liked your suggestions, they're great actually... Can you please provide me with some suggestions on the following topics? An introduction to Programming Languages Design theory. Computer Science Mathematics, introductions and advanced topics.


If you're interested in books, I like these.

Intro to programming books:

Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurthi. How to Design Programs: An Introduction to Programming and Computing.

Daniel P. Friedman (Author), Matthias Felleisen (Author), Duane Bibby (Drawings), Gerald J. Sussman (Foreword). The Little Schemer.

Programming language principles & implementation books:

Daniel P. Friedman, Mitchell Wand, and Christopher T. Haynes. Essentials of Programming Languages.

Shriram Krishnamurthi. Programming Languages: Application and Interpretation.

Matthias Felleisen, Robby Findler, and Matthew Flatt. Semantics Engineering with PLT Redex

These are all by pretty much the same group of people (but distributed across the US: http://racket-lang.org/people.html) so the books all go together really well.


our of curiosity, have you read "Types and Programming Languages", and if so, what is your opinion?


I haven't, but I should. Everyone I know who's read it says it's great.


Intro to Computer Science, not programming. Different subjects.


I almost agree with you that programming can be approached from a Scheme mindset... It can be really mind-opening. But I think teaching programming from C++ or Python perspective can be of (almost) equal greatness... You can do many cool things here and there... It only depends on the level of the course. I mean, if you are going to take an advanced course in programming languages design, learning Scheme, Lisp and other languages can be of great help; but if you want to give an introduction to programming - to people with no programming-related experience - C, C++ and Python are very good choices, I think.


C++ is an immensely complicated language. I don't think it's a good idea to throw beginners into that.


When I was in uni I got my introduction to programming in C. And it was the most funny and mind-opening course in my first year. So, I think it's subjective.

I agree that C++ is a complicated language, specially when you use Boost or Tools.h++, or the even make things worse. But when you teach beginners to code in C++ and only utilize STL, I believe it would be an interesting and challenging course. Plus, in an entry level course, you only need to introduce the basics of programming, which are (in an abstract sense) general logic principles and language agnostic.


C is actually a relatively simple language and a good choice for beginners.

I agree that you need to teach general logic principles which are language agnostic, but if you do this in the context of C++, the beginner is bound to waste a lot of his time fighting irrelevancies in the language.


I got your point. I agree with you actually.


Sorry, you seem to be agreeing with the opposite of what I was trying to say in my comment :-)




Consider applying for YC's Fall 2026 batch! Applications are open till July 27.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: