
Ask HN: I dropped out. How do I continue my CompSci education? - sthatipamala
I am a second year CS undergrad who is taking an (indefinite) break from school to start a startup. It's a great opportunity, things are looking promising, and I have no regrets about it.<p>But I don't want to remain stagnant in my knowledge. What are some topics in CS that I can self-learn? What are some great OCW courses/textbooks/resources I can use to continue learning about advanced CS topics?<p>Here's what I have taken already: Discrete Math, Data Structures and Algorithms, Intro to Computer Architecture, Intro to Artificial Intelligence.
======
stcredzero
"NAND to Tetris" will give you a good grounding in the basics of hardware
design, the low-levels of operating systems, implementation of languages.
Basically, you get a good overview and practical experience tinkering with the
whole thing.

[http://www.reddit.com/r/programming/comments/7s383/from_nand...](http://www.reddit.com/r/programming/comments/7s383/from_nand_to_tetris_in_12_steps/)

I got the same thing from my CS education, but by accident. You can get it
packaged neatly in one place from this course. This alone will put you in the
top half of the programming community with regards to knowledge and overall
understanding.

~~~
rick_2047
_This alone will put you in the top half of the programming community with
regards to knowledge and overall understanding._

Really? Is the bottom half really that dumb? Or people just choose to ignore
things which are not immediately of there need. I completed that book and
though it was a great read, I wouldn't say I know much more than a person who
has a CS degree.

~~~
stcredzero
_Or people just choose to ignore things which are not immediately of there
need._

A sentence that answers its own question! (Left as exercise.)

 _I completed that book and though it was a great read, I wouldn't say I know
much more than a person who has a CS degree._

The problem is that often the same material is covered in the process of
getting a CS degree, but in the wrong order and in a time-dispersed manner.
"NAND to Tetris" gives you an overview of the whole thing in a coherent way.
And yes, there are people with a CS degree who would get a few "Ah Ha" moments
out of doing the course. Also note that I said it would put you in the _the
top half of the programming community_ and not the top half of those who hold
CS degrees.

------
kabdib
I dropped out, too (it was to a programming job). This was quite some time ago
(1982).

I tried to finish school later, but work always won. I never had the
discipline to do both.

To keep up:

1\. Read CS textbooks and do small projects to make sure you understand the
material at a practical level.

2\. Join the ACM and keep up with interesting publications from their
electronic library. (The Usenix papers are free, but more limited in scope).

3\. Learn a new programming language, server technology or OS environment at
least every year. Keep your level of exposure to new things high and don't get
too comfortable in one thing. Don't be a zealot and don't get stuck.

4\. Read a LOT of code. (I read through the Unix sources, the source for TeX
and a bunch of other largish packages just because they were there).

More recent things that I didn't have access to: Publically available course
videos and material. My guess is that these are as good as the amount of time
you put into them.

~~~
shadowfox
Regarding point 2, it might be worth checking out if any local university has
a public library with journal access.

------
joshu
Finish school. Startups will wait. In the meantime, see me re an internship.

~~~
rumpelstiltskin
I disagree. If anything, it's school that can wait. Especially considering you
can get a decently comprehensive CS education w/o paying mid-5 figures a year
in tuition.

Rather than giving all that money away needlessly, spend a fraction of it on
room and board and spend the majority of your time teaching yourself. You'll
be done way ahead of 4 yrs.

And then jump into the startup world.

~~~
riledhel
You don't go to college _just_ to study.

~~~
shortlived
I can't agree with this more. I was a bit of an outcast at my school and I
still had the time of my life. I played in a few bands, went to a lot of
shows, worked at the college radio station, took classes in philosophy,
writing and photography _and_ got a degree in Comp Sci. I would argue that the
non-programming experiences are just as valuable to someone starting their own
company.

------
cgart
I might make me here unpopular, but I would say: No, you did it wrong! Let me
clarify on this: Yes, in CS you might not learn how to program well, this is
true. However, when you study you get knowledge about several interesting
computer science problems and how to solve them. You will see that problems
later in your programming carrier however now you have a good background to
solve them. Just a simple example: You given an array (let's say integeres).
How would you remove all duplicates? A naive solution would be to check for
every value, if there is more of this in the array. This has a running time
complexity of O(n^2). The better way would be first to sort your array and
then just iterate and remove all neighbours which are equal. This corresponds
to O(nlogn) + O(n) complexity.

What I try to say, as a young "coder" you might not see all the troubles (in
this case performance) you make when coding just straight away. You need to
understand what you are actually doing, for this CS study gives you a good
background.

The other really important point is: Startups fail with very high probability!
CS diploma (or whatever this is in your country) gives you a solid background
on which you can relay, when looking for a job position after your startup
time. So, complete with your study is maybe a very classic way, however this
is the most secure way for a long term.

~~~
bartonfink
You can do even better by inserting each element from the array into a
hashtable and either discarding or doing a deep compare on collisions.
Ignoring the probability of collisions, this is O(n) at the cost of extra
space.

------
ohyes
I know that some people will disagree with me violently, but you can self-
learn pretty much any topic in CS as long as you are willing to put in the
effort (any topic in any subject, really, the main factor is motivation). As
someone who skipped straight to a masters, I know it is certainly doable to
self educate.

MIT open courseware might be a good place to start, although I've never used
it myself.

[http://ocw.mit.edu/courses/electrical-engineering-and-
comput...](http://ocw.mit.edu/courses/electrical-engineering-and-computer-
science/)

I would personally focus on topics that are either historically difficult, or
pragmatic.

So stuff like compilers, computability and complexity, operating systems,
database systems, cryptography, machine learning, web applications, linear
programming, networking. Learning the basics of hardware is important too,
although it is more electrical engineering and math theory.

~~~
ksolce
Same for Stanford. <http://see.stanford.edu/see/courses.aspx>

Youtube lectures, download through torrents available on the site.

Some are good, and all have a lot of documents attached (all accept the book,
often)

------
petervandijck
Doing the startup will be an education in and of itself. Just follow the lead
of what needs doing. Need to scale? Learn about scaling? Need algorythms?
Learn algorythms. Etc.

------
brooksbp
Learn you some PLT. Specifically, study this:

<http://www.paultaylor.eu/stable/prot.pdf>

and this:

<http://folli.loria.fr/cds/1999/library/pdf/curry-howard.pdf>

and this:

<http://www.cis.upenn.edu/~bcpierce/tapl/>

very, very carefully.

------
anonymoushn
More algorithms and theory. In my experience the first algorithms course you
take glosses over a lot of things and outright omits a lot of other (very
cool!) things. I also enjoyed compilers and OSes, but I ended up doing high
level stuff so I haven't had to care about either since school.

These topics aren't strictly computer science, but I highly recommend studying
number theory, abstract algebra, and graph theory.

As far as resources go, I would use CLRS/OpenCourseWare/whatever you can find.
I don't think the texts I used to study the above topics were exemplary, so
anything you find on them will probably be as good.

Also, this place:
[http://www.topcoder.com/tc?module=Static&d1=tutorials...](http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=alg_index)

------
gawker
Congratulations on your startup!

In my opinion, you could check out what kind of courses they typically offer
in their curriculum at MIT/etc and check out their corresponding courses on
OCW. Since you're doing this out of sheer fun, don't be bothered getting too
caught up with the structure of it. If you see anything you like, just read up
on it.

Usually the ones you've mentioned are a good stepping stone towards more
advanced ones though you mentioned you don't want advanced ones. Here are some
you can look into:

1\. user interface designs (helpful with any startup I think) 2\. software
engineering (teaches you a little bit of structure in a development process)
3\. courses about testing, testing methods 4\. operating systems (not crucial
but it's fun to read, kinda helps with ideas about distributed computing)

Good luck!

------
patrickk
Links to free ebooks:

<http://news.ycombinator.com/item?id=1327632>

Which programming book you just couldn’t stop reading from start to end?:

<http://news.ycombinator.com/item?id=1944913>

------
jey
_> What are some topics in CS that I can self-learn?_

Any. Pick ones that interest you and start googling.

------
icandoitbetter
I'd suggest you look into machine learning. It's probably going to be the
single most important area of computing in the years to come. Start with the
Stanford course online.

Also, if you haven't already, learn functional programming.

~~~
reubenyeah
I hear this a lot: "learn functional programming", so I did a Haskell module
and I still don't understand what all of the fuss is about.

Can you attempt to explain it to me?

~~~
phamilton
I think PGs Common Lisp is a good book for functional programming. It really
forces you to solve problems in new ways. While it is not difficult to do the
problems in each chapter, doing them the "lisp" way will definitely challenge
a C programmer.

------
cmadan
An operating systems course and a compiler course are what would complete your
fundamentals. I have no idea how good the OCW courses are on these subjects
(or if they even exist at all), but if they sound something like "build your
own OS/compiler" then you're probably on the right track.

Bear in mind these two courses will contribute minimally (if at all) to your
startup but its a nice to have a basic knowledge of how these two things work.

------
slavak
Some familiarity with Numerical Analysis is, in my opinion, a must to a
practicing Software Engineer. The official course book where I took the course
was Dahlquist,G.L., Bjorck,A. Numerical Methods. I didn't use it too much so I
can't comment on readability, but it does cover the material well.

------
kleech
I would highly recommend iTunes University, its has many high quality
recordings of lectures from many of the top universities. I've been
programming for 10+ years and am self-taught, however I'm currently
'attending' the Programming Methodology course from Stanford University.

------
tomh-
Those seem atleast the core fundementals! Maybe pick up compiler design,
functional programming and software engineering/architecture

------
oliverkrystal
Go to your local community college and take some classes. Maybe not a full
load, but a few.

------
nika
Congratulations, you made absolutely the right choice, even if the startup is
a total failure.

As someone who has worked with many right-out-of-school CS graduates, I'd
strongly suggest you pursue a lot of code writing. I'm sure you'll be doing
this at the startup. But spend as much time as you can doing it, and learning
from errors in production, and in review.

The real thing that CS programs lack is teaching people how to program. I mean
that seriously. They focus on theory, but rarely on actual programming. If
your startup does not consume absolutely all of the programming energy you
have, then work on a cutting edge open source project on the side as well.

If you wish, there are classes in iTunes university, and you can surely peruse
the catalog of the university you left, find the classes you would have taken,
and buy the books, or comparable (cheaper) books on the same subjects and
study them. I've done this in the past, but found that books targeted at
practitioners in the field are generally more effective (and at the same cost
or less) than those targeted as textbooks. (Back when I was younger, when I'd
be going into a new area and wanted to research it, I'd wander into college
bookstores looking for things like machine vision, etc.)

The industry oriented books won't have tests and problem sets for you to do...
but you don't need them because you're pursuing this knowledge to help you
complete some goal, right? For instance, maybe you want to build a robot that
can compete in GPS Magellan and you need computer vision expertise for that?
(That's what I did.)

When you are excited about a project, you will go and devour what you nee to
learn, and you will learn it much more deeply and fundamentally than any class
can teach you.

So, find projects and pursue them.

