Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Ask HN: Recommended path for self-study math and CS?
40 points by ryanwaggoner on Sept 7, 2008 | hide | past | favorite | 37 comments
I've been programming since I was 12 or 13, all self-taught, but I went to college for Business. I've been a full-time freelance developer for a little over a year now, and I've been inspired by a lot of the deep technical stuff I've read here on HN. I've always really enjoyed math and programming, and delving into more rigorous CS and/or Math really interests me.

I'm just wondering if people would recommend seeking a grad degree at this point, or going more of a self-study route. And if the self-study route, are there any particular books or online courses you would recommend to start?



I'd definitely recommend trying some self-study before grad school-- better to find out on your own if the work really interests you enough for the required investment.

As to recommendations, I second the recommendation for SICP, but I'd also suggest the video lectures: http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussma...

Then, I'd move on to various online courses (with video)-- besides the MIT OCW resources, there are some good CS courses from UC Berkeley. Specifically, for someone getting started, I'd recommend MIT 6.046J (Introduction to Algorithms), and the Berkeley CS 61A/B/C and CS162, but your interest may vary.

Naturally, there are a lot of good video course for mathematics as well-- I enjoyed Gilbert Strang's Linear Algebra from course from MIT as a nice brush-up in Linear Algebra, for example (and as a companion to his textbook).

But the guiding thread has got to be your own interest.


Just to add to my own list: don't forget the Knuth "Computer Musings" video lectures at Stanford!


I would recommend SICP http://mitpress.mit.edu/sicp/


Ok this is a great book, but also boring as hell esp for self study. The MIT course also has switched to using python. For algorithms this one http://en.wikipedia.org/wiki/Introduction_to_Algorithms is a pretty awesome read.


The MIT course also has switched to using Python.

I've always assumed that was because of the Feynman effect [1]: The freshmen (of all engineering majors) who were the ostensible audience of SICP were getting more and more frustrated by Scheme, a language that feels impractical to the average know-it-all first-year mechanical engineer.

In my experience, if you name-drop SICP in front of the average MIT student, there's a good chance that they will cringe and mutter some rude word about Scheme. Not everyone is born to love computer science.

But if you want to self-study math and CS then you should seek out SICP in Scheme, just as (given the choice and the ability) you should reed Dostoyevsky in Russian instead of in English translation. Use the language the authors really want to use.

[1] Which I name, of course, after the Feynman Lectures on Physics, a series of legendary lectures that is beloved by physics grad students but is rumored to have been a failure as an actual first-year physics text. Though accounts differ, the legend is that the lectures were just a bad fit for the average Caltech freshman -- for one thing, Feynman puts relatively little emphasis on solving math problems, which he did as easily as breathing but which the average freshman needs lots of practice in -- and the course was only taught once. Does anybody know of another first-year course that tried to use these as texts? I've never encountered one. But they have certainly been used for self-study by many people, including bright high-school students.


All engineering majors at MIT were not required to take SCIP, just the EE/CS majors. Back when I was a student, the rest of us either took 1.00 (C as taught by civil engineers) or 2.10 (Fortran, by mechanical engineers), or we simply learned a language on our own time.

That being said, the purpose of 6.001 (SCIP) was not to learn Scheme, but to use Scheme to introduce students to some of the fundamental concepts of computer science.

As for Feynman, the reason he only taught the class once (over three semesters, I believe), is that there was only one Feynman, and he had a pretty full plate of other things to work on. The "Feynman Lectures" were never meant to be textbooks. They were what they were: lectures, to be read by students seeking additional insights in physics.


Thanks for the clarification. This is why I like posting random scuttlebutt on the web; I get authoritative corrections from people who were there!

Yeah, the Feynman lecture analogy should not be taken too far. Like SICP, the Lectures were aimed at the very interested majors, possibly at the expense of others -- but perhaps that's as far as the analogy goes. The Lectures were indeed a special event, whereas SICP was designed as a proper textbook: It was used for many years and by many teachers besides its authors.


The audience of SICP was just the people who were planning to major in EECS at MIT, making it only impractical for, at best, the subset of the major that was interested purely in hardware. Having not been privy to the internal discussion that came before the decision to drop SICP at MIT, I can't say I understand why they did it, but my best guess is that it was too hard. It serves as an excellent separate-wheat-from-chaff type of class, but at the cost of decreased enrollment in the major.

As far as I'm concerned, though, you can basically ask someone how they liked 6.001, and if they have any positive words, you can pretty much hire them on the spot for any programming job you've got.


This helps explain it: I've encountered quite a few MIT-trained EE hardware engineers. Perhaps that's where I heard the grumbles about 6.001.


I did not find SICP boring for self-study at all. Quite the opposite, really.


I read it during summer break back in school.

"People who like this sort of thing will find this the sort of thing they like."


One of my favorite things about graduate school is that you can be a complete information glutton. Go as ridiculously far as you want in your research, and then justify some of it later with a degree :-)

If you've got the time, money, and diligence to do it, it can be a lot of fun. By fun I mean lots of hard work and suffering, but yeah, "fun." :-)


I'd recommend grabbing a book on Discrete Mathematics. It's the foundation for much of CS theory and will get you into the terminology there. MIT Press's Introduction to Algorithms should be penetrable if you've had some basic calculus at some point. It's worth its price tag. I'm not sure that I'd recommend the Discreet textbook we used at it's going price of $130 now though...


I found "Concrete Mathematics" to be a great read for maths relating to CS. I don't have a strong math background (took "calculus" in high school...) and haven't had a problem while reading it yet.


How many of the problems did you do?


All the warmups and homework excersizes, most of the exam problems. Research problems not so much.

I'm still working my way through it. I'm not trying to say it isn't challenging - just that it's approachable. It's extremely challenging.


Challenging, but approachable. That's a good characterization of 'Concrete Math'.


MIT OpenCourseWare is a valuable resource for college curriculum type stuff. You can get a cursory overview of the ugrad/grad CS courses, and pick which ones interest you. Some courses have audio/video.

ocw.mit.edu


ArsDigita University still has all their lectures online in RealMedia video format: http://aduni.org/courses/

Here is the direct link to all the Discrete Math lectures, for example: http://aduni.org/courses/discrete/index.php?view=cw

Much more is up there, including SICP, Algorithms, some AI etc.


My favorite is Sipser's book on theoretical cs: http://www-math.mit.edu/~sipser/book.html


I was in the exact same position you are now. I went to the University of Florida and received a degree in finance. I have always had an interest in computers, physics, and mathematics.

It took me three years to finally make the decision to go back to school. I am now pursuing a second and third BS (mathematics and physics), however, I am applying to grad school for 2009. I am hoping that the work I have done since returning to school will be enough to get me into a program for which I don't have an undergraduate degree.

My recommendation is this: If you are really interested in mathematics and computer science, pick up a copy of How to Prove It by Daniel Velleman. Work through every single problem. If you don't enjoy doing the proofs, scratch mathematics off of your list. I can't speak about the computer science side of things, but maybe someone could add a respone to mine for a suitable computer science book.


At this point I've learned a little bit about exactly this. If you work at a large company, grad degrees are somewhat essential. On the other side, no one can take an education away from you.

Having said that, I know many cs grad students who know little and couldn't bootstrap a startup like self taught autodictacts.


Oh yeah Logic in Computer Science: Modeling and Reasoning about Systems by Huth and Ryan. We used this as a textbook in a formal methods class. The book teaches techniques for developing proofs and for specifying and proving properties about systems. All the way from basic logic, to proofs for structured programs, to using model checking for verifying properties of distributed systems. These techniques will allow you to call your work engineered when you can apply them.

What I appreciate most is the consistent structure for teaching each logic. Each logic is taught by introducing the syntax with the BNF and parse trees. The semantics are then introduced. Then there is a mix of relevant algorithms and toy examples of how to specify systems. This is book you could teach yourself formal methods from.


What are your goals? General success? A flourishing startup? CEO of Google?

Regardless of your end-goals, the steps you take to achieve them depend largely on your personality. Are you a natural born entrepreneur? Do you enjoy networking moreso than coding? Are you prone to take risks? Would you rather improve an existing project or jumpstart a new one?

The only advice I can give you is not to grow too comfortable with the educational arena. If you're interested in pursuing a career in education, it's a different story. But I've met quite a few bright individuals who've grown too accustomed to life at the university to do anything else.


Keep the suggestions coming. I'm currently kind of in the same situation, except I just started Business School and I have been full-time developer and occasianally a entrepenuer over 4 years.

What happened to me was that I got tired of hacking little things. I never kind of had the time or motivation to learn any advanced cs or math(since I suck even in basic math).

I didn't choose CS school since I got quite a variety of intrests(like business, economy, arts, cs...) and I'm not sure that I have such a burning desire to be a hacker, or work as one, but I still want to learn more.


Well if you consider learning what you want to learn or grad school as a middle step, what do you want your destination to be?

If you want to go into research or teaching, then a higher degree is probably a very good idea. If not, it might not be the best. That is not to say that you can rule it out with certainty.

If you're doing it purely to satisfy your curiosity and desire to learn new things, I would (and did, and am) just pick up some recommended books on the topic and try to absorb what you can. I find if you force yourself down a path on what you currently find interesting, it can begin to feel like a chore.

Find some like-minded people, join a community, start a project and never stop learning.

In terms of recommending books, you'd have to be more specific what interests you. If you don't know, which is fine too, you can read about general things you find interesting on Wikipedia and crawl links starting there. You're almost guaranteed to stumble on something interesting.


For Math, I'd really recommend The Road to Reality and Beardon's Algebra and Geometry. TRtR is ostensibly a physics book, but it is one of the best math lessons I've ever read. (I have a bit of a review of those two up at http://arantaday.com/blog/the-new-classics/)


Look at the course outlines for the math dept. at a few good uni, make a list a the most used textbooks, then head off to your local uni's library.

That's what I would have done if I'd known better. I regret getting into the B.Sc.


For me it's easier to put in hours each week if you have a professor to go to -- instead of sitting at home.


hello,

if you are in california, you have a way of measuring your interest in cs before you commit. i would suggest you take a course or two at a community college in your area. i know that there are many in the bay area that act as feeder institutions to berkeley etc. community college is usually less demanding than a university, so it is an excellent way to find out if you can handle the demands that will be placed upon you if you decide to do cs (undergrad/grad).

best of luck!


On the topic of reading SICP and other things. I find the exercise of porting programs/concepts from the presentation language to one I use helps me reinforce what the book/paper says. It also helps me honestly contrast my tool choices with what is out there.


Work through Spivak's Calculus, then Springer Verlag's Undergraduate Texts in Mathematics

SICP is as foundational as Spivak, however Comp Sci still doesn't have the equivalent of UTM, you have to target what you're interested in and go from there....


Uh courses! Just install visual studio and start hacking some c#, its super easy to build something cool. A lot of tutorials out there. Start with a screen saver!

Then, 1. Get a mac 2. Look around MIT open courseware stuff. 3. Keep hacking.


Step 1: done

Step 2: in progress

Step 3: never ending :-)


There are some good things you can do to learn on your own (like SICP), but some CS grad courses or even high level undergrad courses will be more effective if you are interested in theory.


Well... If you would like to go into CS a little with some rigor, a book on compilers would actually be very helpful, if only because compilers have to deal with some of the most complex problems in CS today. I would advise starting with the purple dragon book and then moving on to research paper to get a feel for the current state of the field. The dragon book is a bit outdated imho (I don't think it even covers SSA and advanced value partitioning, etc...)


Compilers are an excellent choice to deepen your knowledge. I fared well with 'Modern Compiler Design' (http://www.cs.vu.nl/~dick/MCD.html).




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

Search: