Hello,
I noticed that SICP isn’t mentioned in Racket documentation near the other textbook like PLAI and EOPL.
I wonder why.
I’m guessing because it doesn’t have
(define scribblings '(("scribblings/plai.scrbl" (multi-page) (teaching -20))))
in https://github.com/sicp-lang/sicp/blob/master/sicp-doc/info.rkt ?
S.
Did PLAI make SICP obsolete?
I don’t know what makes a book obsolete but HTDP and DCIC are good alternatives in the role of introduction to CS. Many more good books are listed at https://racket-lang.org/books.html
I’m guessing the respective/common authors would also acknowledge an influence.
I think PLAI has a different audience in mind:
PLAI is designed for upper-level courses that introduce the main ideas of programming languages. - https://www.plai.org/
Best regards
Stephen
I don’t know DCIC. Do you think SICP is too difficult as an introduction to CS?
I don’t know DCIC.
Do you think SICP is too difficult as an introduction to CS?
I don’t know. I suppose it depends on your background.
If I remember correctly SICP asked for a lot of background domain knowledge that was reasonable for an engineering student at MIT? but not expected for a CS student?
If you want to learn Racket I think the advice at https://docs.racket-lang.org/getting-started/index.html is good.
Best regards
Stephen
I studied engineering and I really loved SICP, because it gave me a strong mindset and changed the way a think about computation.
SICP was my introduction to scheme. I did not study computer science or engineering in college and I thought it was very approachable and well-written, especially the first few chapters.
That being said, I had several years of programming experience in C, Fortran, and Python as well as a few useful undergraduate math courses prior to reading it. It probably also helped that I read it by choice rather than being forced to.
Imo, it’s up there with K&R for the C language. That’s just my personal bias though
A PR is welcome.
I wonder if the fact that HTDP (co-authored by Felleisen, Flatt etc) was meant as a "better" SICP has anything to do with it. https://cs.brown.edu/~sk/Publications/Papers/Published/fffk-htdp-vs-sicp-journal/paper.pdf
HTDP (co-authored by Felleisen, Flatt etc) was meant as a "better" SICP has anything to do with it.
On Jul 1, 2023, at 11:58 AM, Bernardino Sassoli wrote "HTDP (co-authored by Felleisen, Flatt etc) was meant as a `better' SICP.”
As is, this statement is a misinterpretation of the article and HtDP.
-
The very beginning of the article says that SiCP is a revolutionary introduction to Computer Science. I stand by this characterization to this day (even after Gerry went for a JS version :-). It also clarifies that SiCP introduces many of the central concepts of Computer Science. Gerry agrees to this when he says during his talks that Scheme is the computational sketchboard for explaining the landscape. (I think it’s also fair to say that he considers programming “easy”.)
-
And that’s why and how HtDP and SiCP differ and where we disagree with Gerry and Hal. SiCP does not teach how to create programs in response to a problem statement when a student stares at a blank screen (back then, equally likely, a blank piece of paper). So HtDP intentionally does not introduce the central concepts of computer science but teaches how to proceed systematically. (It teaches a few CS concepts on the side.)
Why is SiCP not listed on the page titled "All Racket Books”? SiCP isn’t a Racket book and all books listed explicitly use Racket/DrRacket (or DrScheme from the olden days, before Racket transcended Scheme).
FWIW, my understanding is that the SiCP online version is created with Dorai Sitaram’s slatex, running in Racket (but technically it might run in MIT Scheme). This isn’t acknowledged (last time I checked) but it is the only connection to Racket so far.
If someone makes a full-fledged #lang sicp
and people start teaching with this language, we would and should list SiCP too.
Should we now? — Matthias
I wonder ...
I find this in bad taste.
As far as I know, the SICP authors never asked to be included.
Besides, if Stephen's explanation at the thread start is correct, just submit a PR.
My understanding was the SICP Collections was full fledged and even includes both a #lang sicp
and the picture language used in SICP.
I believe the SICP collections should be listed in category “Other Languages in the Racket Environment”, rather than in Miscellaneous Libraries at https://docs.racket-lang.org/
This can be done by a pull request to set the third parameter(category) to (language)
in https://github.com/sicp-lang/sicp/blob/master/sicp-doc/info.rkt to
#lang info
(define scribblings '(("sicp-manual.scrbl" (multi-page) (language))))
(I can’t right now I’m travelling)
Stephen
I apologize for any misrepresentation, which was clearly unintentional. And thanks for the clarification.
@soegaard and I welcome a PR to SICP collections.
But re: organization in general, I made a quick pass at https://docs.racket-lang.org/ and found:
Teaching:
- How to Design Programs (for HtdP)
- How to Design Programs Languages (for HtdP)
- How to Design Programs Teachpacks (for HtdP)
- (gap)
- Essentials of Programming Languages Language (for EOPL)
- Programming Languages: Application and Interpretation (for PLAI)
- Picturing Programs Teachpack (for Picturing Programs)
- Sprachebenen und Material zu Schreibe Dein Programm! (for Schreibe Dein Programm!)
Other Languages in the Racket Environment:
- The Pie Reference (for The Little Typer)
- The Pie à-let-mode Reference (for The Little Typer)
- PLAI Typed Language (for PLAI)
- Plait Language (for PLAI)
- Plaitypus Language (for PLAI)
- ProfessorJ: Java in Racket (for HtdC)
- (gap)
- How to Design Classes Languages (for HtdC)
- PLAI Lazy (for PLAI)
Teaching:
- Regex Machine Language
Miscellaneous Libraries:
- DSSL: Data Structures Student Language (for a course at Northwestern)
- DSSL2: Data Structures Student Language (for a course at Northwestern)
- Malt - A minimalist deep learning toolkit (for The Little Learner)
- SICP Collections (for SICP)
Perhaps it's worth making a plan on how to organize them all first, before making any changes.
Some further thoughts:
-
I do not know what "gap" signifies.
-
There are two "Teaching" sections.
-
There are three more axes that should be taken into consideration for organization.
- Whether the package is shipped with the standard distribution of Racket (I assume this is what the first "Teaching" section is for)
- Whether the package is accompanying a book.
- Whether the package is officially used in an educational institution.
Thank you Matthias, very interesting.
How about organising by the related book with the first item linking to the book itself, and gap after - as is currently the case with HTDP.
This has the advantage of the gap being an existing mechanism - and the disadvantage that I am yet to divine how to use it.
Books
* How to Design Programs
* How to Design Programs Languages
* How to Design Programs Teachpacks
* Essentials of Programming Languages
* Essentials of Programming Languages Language
* Programming Languages: Application and Interpretation
* PLAI Typed Language
* Plait Language
* Plaitypus Language
* PLAI Lazy
* Picturing Programs
* Picturing Programs Teachpack
* Schreibe Dein Programm!
* Sprachebenen und Material zu Schreibe Dein Programm!
* How to Design Classes
* How to Design Classes Languages
* ProfessorJ: Java in Racket
* The Little Typer
* The Pie Reference
* The Pie à-let-mode Reference
* SICP
* SICP Language
* SICP Picture language
(and all the other books listed at https://racket-lang.org/books.html)
Not sure about Regex Machine Language because it appears to be a set of blog posts https://swtch.com/~rsc/regexp/ - but real libraries also struggle with ephemeral material, no matter how valuable.
* Regular Expression Matching: the Virtual Machine Approach by Russ Cox
* Regex Machine Language: An implementation of Russ Cox's regular expression machine language
a duplicate category created by defining a string category "Teaching"
The category is set by the third parameter of (define scribblings
in the info.rkt
Note: the title on the index page https://docs.racket-lang.org is set by @title{
in the package scribble file https://github.com/a11ce/actual-real-racket/blob/main/actual-real-racket.scrbl
Best regards,
Stephen
(define scribblings
(list (list "main.scrbl"
empty-list
(list "Teaching")
"regex-machine")))
Matthias:
SiCP isn’t a Racket book and all books listed explicitly use Racket/DrRacket
I agree with you Matthias, but Racket is based on scheme. I think that SICP is a good start.
Do you think SICP is too difficult for ICT students?
I think this is the wrong question. If someone say's 'I want to learn to program' or 'I want to learn lisp' we should understand their context and background before suggesting any text.
There many people who sing the praises of SICP because it worked for them, and there are also lot's of people who were recommended SICP as the only way to learn programming (or lisp) and didn't get past the second or third chapter.
This is even sadder if this left them feeling 'I'm not good enough/smart enough'. to program.
One of the things that attracted me to HTDP was the assertion that 'everyone can design programs' - made me feel that I can too.
To me this attitude of inclusion is a shining light that gives me and others the confidence to understand in a world where almost every device and service you interact with is programmed. It's not magic, but something that could be understood by me.
Best regards,
Stephen
I’m sorry Stephen, I didn’t want to offend anyone.
Probably a better question can be:
- Do you think SICP is not recommended for ICT students?
or: - Do you think SICP is not suited for ICT students?
or: - Do you think SICP covers topics almost useless for ICT students?