Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Can reading SICP and doing its exercises get you hired?
10 points by milesstevenson on May 17, 2013 | hide | past | favorite | 6 comments
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.

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.

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?

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.

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).

"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.

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...) 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.

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

  (define (cons x y)
     (lambda (m)
           ((= 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.

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.

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