

Ask HN: Can reading SICP and doing its exercises get you hired? - milesstevenson

I'm reading SICP and want to complete most of its exercises. Seeing never got a chance to be in a functional programming type of course, I feel like it would be beneficial for to learn more about the paradigm along with compilers and interpreters -- the last two exercises in the book particularly have my interest in the long run. I worry that it could be a waste of time, and that I should be focusing on more practical projects before looking for a first job.<p>Every review I've read on the book has talked about how wonderful it is in really giving the reader a rigorous general foundation, and having a good foundation in a variety of topics is what makes a great programmer, right? I feel that most prospective employers don't really care about that, though.<p>So my question to you is if one doesn't have many OSS projects, but rather one or two on github along with having finished SICP's exercises and a blog for explanations to complement those, do you think said candidate would be a decent first job prospect? In otherwords, is SICP worthy of a CV bullet point?
======
polymatter
Unfortunately, it depends on what sort of job you're going for, and I would be
surprised if there wasn't regional differences too. Plus some people have
negative preconceptions about the sort of person that would go through SICP
(happily, they are exactly the sorts of people you don't want to work for). If
you're looking to join a larger company or looking to enter the job market in
the next 12 months or so, then probably experimenting with more frameworks and
getting some code up would be better bang for your time. Even better if you
have contributed to existing OSS projects.

But for your own general longer term career development, SICP is a very good
bet. But SICP wasn't really designed for home study so it will be hard going.
Personally, I would be very impressed if an interviewee made it halfway
through SICP by themselves. I have tried multiple times and never got very far
before .. er ... reprioritising.

If you want to learn more functional programming, I highly recommend learning
Haskell with Learn you a Haskell (<http://learnyouahaskell.com/>). This is a
much easier start to functional programming and get you productive quickly.
Haskell will force you to really learn functional programming as there isn't
an easy imperative backdoor (not to say you can't write imperative code in
Haskell - see ([http://www.haskellforall.com/2013/05/program-imperatively-
us...](http://www.haskellforall.com/2013/05/program-imperatively-using-
haskell.html)) for example, just its not particular easy how to get there). My
current project is writing a web app in Haskell and its a very interesting
experience.

If you want to learn functional programming, but still be attractive for jobs,
then I would recommend learning Scala ideally with the 'Functional Programming
in Scala' coursera course and then working through Odersky's "Programming in
Scala" book. Scala is a JVM language so it can interoperate easily with Java
code, and I've seen companies in London using knowledge of Scala as a signal
of a good quality Java developer. It is also (successfully in my view) a
multi-paradigm language which can be used both as a functional language, and
as an imperative one without feeling too much like a compromise on either
side. Though in my view, its harder to learn functional programming properly
when you have an "easy out" back into the imperative world.

Also, check out communities you can join such as (<http://lambda-the-
ultimate.org/>) or Haskell Cafe or local Meetups with others interested in
functional programming.

Good luck.

------
santu11
"I worry that it could be a waste of time"

It's education. If you want to stay 20 years in this industry, you have to
invest in your education. Don't worry, just do it. Solving the problems would
make you a better problem solver.

"I feel that most prospective employers don't really care about that, though."

That's right. Most prospective employers don't care. Don't work for them. If
you have to, read my last answer.

"In otherwords, is SICP worthy of a CV bullet point."

Yes, really good developers would appreciate the effort. Employers won't care
but the senior developer taking your technical interview may appreciate it.

"I should be focusing on more practical projects before looking for a first
job." Yes, you must do that. Nothing beats showing a perfectly operational
website. And depending on the profile you are targeting it can be a Android
game or Web game or scraper or anything. Don't worry your github profile yet.
Once you start building stuff it will come alive.

You can also check out <https://www.udacity.com/> for some practical courses.
They are taught by awesome people and are free. All these courses focus on a
project to teach you basics of computer science. And you get real world
skills.

1\. Building a Search Engine - Introduction to Computer Science -
<https://www.udacity.com/course/cs101>

2\. Building a HTML5 game - HTML5 Game Development -
<https://www.udacity.com/course/cs255>

3\. Building a Blog - Web Development - <https://www.udacity.com/course/cs253>

4\. Building a Browser - Programming Languages -
<https://www.udacity.com/course/cs262>

5\. Building blocks of any non - trivial software project - Design of Computer
Programs - <https://www.udacity.com/course/cs212> .

All the best learning CS, building things and contributing to the world.

------
laaph
I work in embedded software, but I've always been a bit weak on the hardware
side of things (I know quite a bit about hardware, but I always had to drag
out an electrical engineer for problems they deemed trivial). I took the MITx
Electronics and Circuits class, and so far it seems that I haven't found an
employer who cares one bit. I hadn't put it on the resume/CV, but I have
mentioned it in cover letters and such for employers that it seemed relevant.

I wouldn't let this point of pessimism stop you (it's not stopping me, I'm
taking Machine Learning now). As others have indicated, this will probably let
you pass job interviews others can't. But in my experience with regard to the
job application process, it will likely be something they ignore, and I would
try to get them to talk to you about it in another fashion (bring it up in the
interview, cover letters, etc).

Note that this is from an US perspective, I know the ideals behind a CV and a
resume are quite different so you may want local advice. However, if I were
making a CV for an academic position in the US, I'd probably still leave it
off.

------
zenbowman
I used to conduct interviews at my previous company. We asked a programming
question that nobody was able to fully answer in the first go, so seeing how
far a candidate got and how well they explained their thought process was a
gauge of their ability. My suspicion is that someone well versed in SICP's
exercises would do very well on that exercise, as it involved parsing text
into an appropriate data structure and subsequently performing operations on
that data structure.

SICP will serve you well in interviewing, and don't worry so much about OSS
projects, most people aren't involved with OS S when they are just out of
school (I think older programmers make the best OSS contributors, but that is
a personal opinion).

------
brudgers
This morning I listened to the latter part of Lecture 2B:

    
    
      (define (cons x y)
         (lambda (m)
            (cond
               ((= m 0) x)
               ((= m 1) y))))
    
      (define (car z) (z 0))
      (define (cdr z) (z 1))
    

As Ableson says, it's made of air.

SICP is not a functional programming course - changing values and creating
state comes in Chapter 3 [2nd Edition]. It is a course in the creative use of
wishful thinking.

------
chrisa
I would be more interested to read what you had to say about the exercises in
your blog. If your posts were thoughtful and relevant to the job opening, that
would have more weight than just a bullet point saying you had finished the
book.

