
Why and How to Start Your SICP Trek - limist
http://hackerretreat.com/why-how-start-sicp/
======
kenferry
If folks are interested in having a person to talk to while doing SICP, we're
doing it in the iPad app we released last Thursday. We were going to do a Show
HN, but hey, HN's already talking SICP!

Understudy:
[https://itunes.apple.com/us/app/understudy/id782635884](https://itunes.apple.com/us/app/understudy/id782635884)

The setup is basically like private music lessons. We pair you with a somewhat
more advanced student also doing SICP. The deal is to

(1) Work on SICP by yourself during the week

(2) Once a week, discuss the material with your more advanced partner. The app
builds in a videochat + whiteboard communication tool (you can see it in the
app screenshots).

(3) When you get about a month in, also start discussing with someone who is
just starting out. When you help that person understand, it very much improves
your own understanding.

Basically, it gives you good discussion with people who are genuinely
interested in SICP.

We've been running it in beta for a while – see
[https://twitter.com/understudyapp](https://twitter.com/understudyapp) .

~~~
Orangeair
Sounds like the learning equivalent of a Ponzi scheme ;)

In all honesty, though, this sounds like a really cool idea. I may check it
out.

~~~
kenferry
Yup, kinda! Except in a Ponzi scheme, value only flows down. Explaining
something really straightens it out for yourself.

Conversation isn't zero sum.

------
erokar
For a gentle introduction to functional programming and Scheme/Racket, check
out
[https://class.coursera.org/programdesign-002](https://class.coursera.org/programdesign-002)
and the How to Design Programs book [http://htdp.org/](http://htdp.org/)

These can be good precursors before starting on SICP. I have to say, though,
that I have never felt comfortable with LISP's syntax. The parentheses and the
prefix notation are convenient for the parser, not the programmer. Pyret
[http://www.pyret.org/index.html](http://www.pyret.org/index.html) might be a
step in the right direction.

~~~
brudgers
I am a big fan of HtDP, and Felleisen's in-progress 2nd edition of HTDP is
here:
[http://www.ccs.neu.edu/home/matthias/HtDP2e/](http://www.ccs.neu.edu/home/matthias/HtDP2e/)
. It contains many improvements over the first (completeness however is not
among them).

That said, HtDP's focus is very different from SICP, and I would not sequence
one before the other. HtDP focuses on a methodology for writing robust
maintainable software. It emphasizes specifications and testing and functional
procedures.

SICP is focused on computer science and emphasizes much higher levels of
abstraction - e.g. the *nix signal processing model, logic programming,
constraint programming, stack machines and dealing with concurrency. It is
more directly an introduction to Computer Science [despite Ableson's
questioning the utility of the term 'computer science'] whereas HtDP is more
of an introduction to the practice of programming.

Philosophically, SICP is ok with the idea of placing the student in over their
head, e.g. the digital logic simulator and various mathematical examples treat
digital logic and mathematics and banking as domain knowledge that the
programmer might not have, but does not need in order to create sound
abstractions.

[And Kickzales's course on Coursera was I awesome, I took the first version
last summer.]

------
JackMorgan
For anyone interested, Paul Snyder and I are running a SICP study group going
on right now. We also have online and in person meetings in Philadelphia and
King of Prussia. We are currently doing one minor section every month, which
averages out to roughly one homework question every 3 days.

For anyone interested we will help you get setup and started, no prior
programming needed.

We are running section 1.3 this month, so there is not much to catch up! Also,
anyone who wants to work it their own pace is welcome too!

[http://www.meetup.com/Clojadelphia/events/172933722/](http://www.meetup.com/Clojadelphia/events/172933722/)

Paul hasn't put up the info for the 1.3 online session yet, join the
Clojadelphia group to get updates when he does.

------
ludicast
When I first read the title/url I got excited. I remember on the thoughbot
podcast, Ben Orenstein spoke about going to Cape Cod with some people to go
through SICP in a nice but isolated setting. I thought something like that was
being organized on a larger scale...

Still a very good article, with great arguments for why the book is a must-
read. Great links too. I would also include something easy like Realm of
Racket (or Land of Lisp) as a good first-date before shacking up with SICP.

Hacker Retreat does look great though. Wish I had the free time to give it a
try.

~~~
limist
Can't say Berlin is an isolated setting, nor does it feel/look like Cape Cod,
but it is nice - if you like cities, it's got something of everything. :) And
the summer here is fantastic.

SICP is always "on" at Hacker Retreat - I've always got SICP buffers open. If
you're able to work remotely from Berlin, consider coming to Batch-02 this
summer.

------
limist
Author here - happy to answer questions and address feedback. I suspect I
didn't explain Lisp-in-Lisp as well as I need to, but maybe it's enough to get
non-Lispers intrigued. :)

~~~
wizard_class
what about the people who did not do a math major. Is this a book they can get
through? I tried once and saw that I had to read two other books before I
could even read chapter one. one for discrete mathematics and the other for
calculus. do you have any tips for the people in my situation?

~~~
limist
Not sure without knowing more of your background - provisional answer is
"maybe." Some parts of Ch.1 are certainly math-heavy. The video lectures are
quite accessible. Did you study, say, ~1 year of calculus?

~~~
wizard_class
yes, 1 year of calculus. differentiation and integrals were the only two
calculus topics that I recognized from that chapter. at the time when I was
trying to get through sicp I wasn't sure whether the pay off was worth the
effort of covering all those math topics and I wanted to learn other
programming related topics as well with my time.

~~~
limist
At least up to 1.3.3, if you've already done single-variable calculus, the
math isn't bad - it's stuff you likely saw before (if a while ago).

It seems heavier on math than it really is because (I believe) the authors
want the reader to see the parallels between math notation (functional,
declarative, concise) and Lisp implementation (also functional, declarative,
and quite concise).

~~~
brudgers
I agree, math is used as a domain for black box abstraction for the same
reason banking is used for the example domain for concurrency and graphics for
data abstraction - the domain provides good examples for trivial
implementations.

A person no more needs extensive understanding of mathematics than they need
such understanding of accounting or image processing.

------
jnbiche
Does anyone know of anything like SICP, but that integrates more type theory
into it? Like an SICP for OCaml or Haskell?

Something challenging yet doable for a determined independent student.

~~~
jcurbo
This isn't quite about OCaml or Haskell, but might be relevant.

I've been looking around for a good way to learn type theory via self-study,
and my current plan is to go through these courses on my own:

1)
[http://www.cs.cmu.edu/~rwh/courses/typesys/](http://www.cs.cmu.edu/~rwh/courses/typesys/)
2)
[http://ttic.uchicago.edu/~pl/classes/CMSC336-Winter08/](http://ttic.uchicago.edu/~pl/classes/CMSC336-Winter08/)

1 uses Robert Harper's _Practical Foundations for Programming Languages_ (and
was taught by him) and 2 uses PFPL plus Benjamin Pierce's _Types and
Programming Languages_. Both courses have lecture notes and readings for each
session as well as homework assignments with solutions which ought to make
them straightforward to go through on your own.

There's also these Type/Category/Proof Theory Foundations videos (with Robert
Harper as well):
[https://www.youtube.com/playlist?list=PL8Ky8lYL8-Oh7awp0sqa8...](https://www.youtube.com/playlist?list=PL8Ky8lYL8-Oh7awp0sqa82o7Ggt4AGhyf)

I found these by doing some Googling and evaluating various forums/Stack
Exchange posts; if anyone has any better suggestions I would love to hear
them. (I haven't done SICP in depth and now, of course, I'm considering
putting this plan on hold and doing SICP instead...)

~~~
jnbiche
Thanks for the links -- wish I could take those courses in person.

I haven't found anything like SICP (thus my question), but I feel compelled to
mention two great practical repos I discovered yesterday thanks to HN, both of
which are teaching me a lot about practical type systems:

1\. [https://github.com/tomprimozic/type-
systems](https://github.com/tomprimozic/type-systems) (great practical intro
to Hindley-Milner and variations)

2\. [https://github.com/typeclassy/plzoo](https://github.com/typeclassy/plzoo)
(collection of mini languages implemented in OCaml, many of which feature
different type systems)

Edit: Can't reply to jcurbo yet, but I'd be really interested in that Haskell
link if you can remember it.

~~~
jcurbo
Thanks, those are good links too. I seem to recall seeing something similar to
the first link, except in Haskell, but I can't seem to find it right now.

------
shunter
Totally on a tangent, but I'd love to see a 'Hacker Retrete' style session
targeted at hackers / devs that have jobs.

Something on the order of 1 or 2 weeks in length, super compressed that gives
working devs a chance to learn something new or explore something outside of
their normal job. I'd love to do something like this, particularly in an
exotic location, but against a set amount of time that doesn't require me to
quit my job.

~~~
limist
As a coding-vacation? Or as something that blends well with remote work?

We've adjusted the format of the current Hacker Retreat to accommodate people
working (remotely, on their startup, etc) - 20% of your time is committed to
learning, the rest of the time is up to you. The time-span is over 2 months
minimum. We're currently taking applications for the Batch-02 starting in
May/June.

Super-compressed, 1-2 week retreats are something we've thought about,
especially for advanced topics like data science and functional
programming...may do it later, but not this summer.

~~~
shunter
I was thinking coding vacation. I perform improv on the side, and it's not
unheard of to have intensive 'improv camps' for adults over the summer where
performers go for up to a week at a location to focus on improving performance
skills.

I love the hack camp idea and chance to fully dive into something with like
minded people, it just needs to fit into something I can spend my vacation
days on.

~~~
limist
Yep, it would be fun to do that for code - we're thinking of different models
and timings for Hacker Retreat. Consider sub'ing to our email list to stay in
touch, thanks.

------
zenbowman
Our group, the LA Computer Science Reading Group has been interested in doing
SICP for a while. For those in Los Angeles who are interested in joining us,
here's the link to the meetup group: [http://csrg.org](http://csrg.org)

------
Strang
I have a very specific question about starting out on SICP. A few months back,
I worked through roughly half the exercises in the book. I got stuck on 2.2.4
(a picture language)[1] and was unable to run any of the examples or test any
of the exercises.

Is there some prerequisite library for these exercises? Or am I missing the
point and these are not actually intended to be run?

1\. [http://mitpress.mit.edu/sicp/full-text/book/book-
Z-H-15.html...](http://mitpress.mit.edu/sicp/full-text/book/book-
Z-H-15.html#%_sec_2.2.4)

~~~
jwdunne
I believe there is a language for Racket which has what you need in it, I used
that when I got to the picture language bit.

Check it out here:

[http://www.neilvandyke.org/racket-sicp/](http://www.neilvandyke.org/racket-
sicp/)

~~~
kenferry
This works great, with one caveat: the picture language in SICP has built-in
primitive images such as "wave" and "rogers".

The DrRacket SICP package has only one primitive image, "einstein".

~~~
jwdunne
I had to make do with Einstein. I also discovered afterwards you can copy and
paste images directly into DrRacket and pass them round like anything else -
you might (very big guess) be able to create the wave and rogers primitives
this way.

------
msluyter
The article recommends mit-scheme. Anyone know how to get that working as a
Sublime Text build? From what I can tell, to invoke mit-scheme on a file, you
redirect stdin, a la:

    
    
      mit-scheme < foo.scm
    

This doesn't play so nicely with the ST2 build system, which seems to assume
the input will be simply be a filename arg. E.g., it's assuming you can do:

    
    
      mit-scheme foo.scm

~~~
epsylon
Perhaps create a script that does just that?

#!/bin/sh

mit-scheme < $@

~~~
msluyter
Well, that seems obvious in retrospect... ;) Yes, that works.

------
rquantz
As someone with fine arts background, does anyone have a suggestion for a text
to get me quickly caught up on the math required for SICP?

~~~
kenferry
It doesn't really require any math… some exercises and examples do require
math, but you can just skip them. The first chapter has a lot more of that
than the rest. It's very much not essential.

To give an example, the hardest math I can remember is one exercise where they
ask you to _prove_ the equation listed if you search for "closed form" at
[http://en.wikipedia.org/wiki/Fibonacci_number](http://en.wikipedia.org/wiki/Fibonacci_number)
.

I'm relatively sure that the point of this exercise was just to drive home
that performance characteristics of a problem can be non-obvious. We just
finished making an O(n) implementation of Fibonacci numbers and feel pretty
good about it, but oh wait, you can actually do it in O(1).

However, to literally answer your question, the math used in exercises mostly
tops out at polynomial algebra (like, adding X^2 + 3 _X + 1 to 3_ X^2 + 3),
with a little bit of calculus - namely taking derivatives (and maybe
integrals? I forget) of polynomials. The calculus is not used to solve a
problem - rather you're implementing a program that lets the user take
derivatives of polynomials.

~~~
limist
I'd have to disagree - the math is important, and lays a foundation for
functional/declarative programming. One major lesson of Chapter 1 (where the
math is most evident) is conceptually tying math (and its notations) with
functional, declarative programming. Math still shows up in Chapters 2 (e.g.
generic operations, polar vs. rectangular coordinate system math) and 3
(streams). It can't be skipped over without missing a lot of lessons.

------
zodiac
Shameless plug - I'm making an interactive version of SICP where you can edit
and run the code in your browser.

xuanji.appspot.com/isicp/

------
simonebrunozzi
Seems like a good idea, but it's horribly presented :-)

You should consider adding a TL;DR at the beginning, to explain what it is all
about.

~~~
chiachun
And the author may consider to keep the "quotes of famous people" part near
the end or as an appendix.

------
brown9-2
Has anyone ever tried to read through SICP on a Kindle or other e-reader?

Or would it be pointless to read through the book without a REPL/command line
next to it?

~~~
limist
Much better to have a REPL handy - like order-of-magnitude better. :) The
further in the book you go, the more you need to write, run, tinker and test
to check your understanding(s).

------
mebassett
if you're in London and looking for someone to share in your SICP adventure,
check out the London SICP study group: [http://www.meetup.com/London-SICP-
Study-Group/](http://www.meetup.com/London-SICP-Study-Group/) we just simmered
down for the time being, but parallel groups are planning to start soon.

