
Ask HN: Recommended path for self-study math and CS? - ryanwaggoner
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.<p>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?
======
michael_dorfman
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...](http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-
lectures/)

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.

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

------
zitterbewegung
I would recommend SICP <http://mitpress.mit.edu/sicp/>

~~~
dilanj
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.

~~~
mechanical_fish
_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.

~~~
rglovejoy
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.

~~~
mechanical_fish
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.

------
lallysingh
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." :-)

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

~~~
kaens
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.

~~~
eru
How many of the problems did you do?

~~~
kaens
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.

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

------
jacobscott
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

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

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

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

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

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

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

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

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

------
smanek
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/>)

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

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

------
rmk
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!

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

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

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

~~~
ryanwaggoner
Step 1: done

Step 2: in progress

Step 3: never ending :-)

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

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

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

