4 ms·
Right I always wondered if my opinion of it stemmed from the fact that I read it relatively late in my career. Never having fresh eyes on it, I suppose it's eas
by banachtarski 10y ago
Right I always wondered if my opinion of it stemmed from the fact that I read it relatively late in my career. Never having fresh eyes on it, I suppose it's easy to take things like syntax and such for granted. That said, is Scheme really a good language for "not getting hung up on syntax?" It has an admittedly simple grammar but I can't help but feel that with the prevalence of ALGOL style languages, an intro student is better off just just biting the bullet and learning something more traditional.
If I was going to teach things like type systems and such and was ok with exotic syntax, I might teach Haskell or something.
- yoz-y 10y agoAt my university the introductory programming was taught using scheme and I found it weird at first as I knew the more traditional approaches (personally I have taught myself programming first in Basic and Pascal). Later I have been assisting a professor during python classes and I have come to appreciate the benefits of a purely functional language for introductions (our teachers have strategically chosen not to talk about the `begin` keyword in Scheme). Many students have had really hard time grasping the idea of variables and scopes.
- Latty 10y agoBecause so many of us learn imperative programming first, then find functional a big shift, I think we forget that everyone learns maths, which has no mutable state in the traditional maths classroom written style, and so functional actually resonates pretty well with people who have never touched programming at all, provided they've been exposed to enough maths.
- banachtarski 10y agoThe weakness to this approach is that learning the functional approach is all well and good but you can't learn this at the expense of learning what the machine does. Learning a traditional ALGOL like C exposes you to memory access, the stack pointer, and other such concepts. You're also a small hop away from assembly where you learn about RISC/CISC architectures, CPU caches, etc. I wish there was a book as popular as SICP that people would read so that the understanding of what the hardware is doing is better across the industry.
- throwaway7645 10y agoI think the book shown with nand2tetris (maybe called the elements of computing) is pretty good going from logic gates to building Tetris. Also "CODE" and "Computer Architecture with the Raspberry Pi" are great.
- yoz-y 10y agoAll of that comes in but I think it is better to introduce an overview of what a computer can do and later explain how it is done. Motivation has a great influence of how well you can learn something. Swamping people with technicalities is a great way to lose them.
- pg314 10y agoChapter 5 of SICP actually goes into the details of how to implement a register machine to execute Scheme, including a simulator, assembler and compiler.
- brlewis 10y agoI used Scheme a lot in the past and currently help people get up to speed on JavaScript. I definitely think the IIFE syntax makes more sense in Scheme, and higher order functions are a lot easier when you end a block with ))) instead of )}; }) )};
- gumby 10y agoIt's funny you contrast it with ALGOL since ALGOL was explicitly cited as one of the predecessor languages used when designing Scheme (the other being Lisp) as Scheme is a block-structured language with lexical scope. And the programming style of SICP is procedural, not a functional or logic approach. Remember the kids for whom this course was designed were going to be doing circuit design concurrently or the following semester. So the point was to learn composition, abstraction, modularity, algorithms etc, not syntax. And Sussman was not the only one who used scheme to do a lot of engineering computation as well. I have never considered Lisp syntax exotic. In any case, remember SICP was the text for a fundamental CS and Engineering class, not a programming class.
- wsy 10y agoIt is particularly good for an introductory programming course to use something 'exotic', because that levels the field. Students who did some Basic/Pascal/PHP/Ruby/... in high school, who often think they already know what programming is, are forced to take a fresh look. So the steeper start pays off.