
Teach Yourself Computer Science - kruse-tim
https://teachyourselfcs.com/
======
scandox
This is a really good list. I love the simplicity. I also agree that it is
both worthwhile and very interesting to learn the fundamentals of CS.

That said, I think it is a mistake to assume that lots of Type 2 developers
wander around in a perpetual state of under-achievement. Most of these people
are indeed a different class of developer (I think the word engineer is
positively abused), but many of them really have almost no professional
requirement to understand fundamentals. Any more than they need to understand
particle physics.

These developers are a class of systems integrators and they produce a lot of
usable systems, at a quality level that represents appropriate trade-offs to
the business case they are employed to address.

Yes, many will say this is a less elevated pursuit. It has its own challenges
and mindset. It lives at a particular level of abstraction and its very
existence assumes stability of that layer of abstraction. The fact that this
breaks down sometimes is besides the point.

The reality is most developers probably do Type 2 work, though very many may
have or aspire to have a Type 1 level of knowledge and insight. However I
think it's unfair to portray a contented Type 2 developer as lacking in some
essential.

~~~
taurath
Not frequently talked about - there's a fucking limit to how much one can
learn and experience in a lifetime. I'd rather have someone that appreciates
aesthetic, design, and people create a frontend for me than someone who can
write a compiler from scratch. If you try to look for someone who can do both,
you will be looking a very long time (and probably can't afford them).

There is no such thing in this day and age as a "best possible" developer for
all situations. Going through this list will definitely let you understand the
underlying principles and the implementations of the code you write, and the
systems its running on - I'm not downplaying the value of learning here. It
does frequently feel like its a high horse thing.

~~~
devnonymous
> Not frequently talked about - there's a fucking limit to how much one can
> learn and experience in a lifetime.

I agree with this sentiment and what's even more frustrating as a old (and
since I'm over 35, rapidly aging) developer I find it incredibly sorry state
of affairs that _even_ the Type 1 kind of engineers mentioned in the article
have to put in the _off work_ hours in learning the newest buzz word language
/framework /rehash of the day, to be able to keep doing what they love doing.

The other thing also is the frustration that those of us who actually love to
learn, love to learn more than just technology. One of my friends actually
choose to not give into the hype and not trading his time improving as a jazz
musician, graphic artist and whatever else takes his fancy for learning the
latest tech-du-jour. My own imposter syndrome keeps me from being able to take
that kind of a risk. This is sad.

~~~
irrational
This is so true. I love technology, but once I leave work I want to learn more
about woodworking, baking, languages, history, gardening, euro board games,
hiking/camping, fitness, landscaping, etc. etc. There are so many worthwhile
things to learn and do outside of programming that if I don't learn it on the
job I'm probably not going to find time for it outside the job.

------
ghufran_syed
For those who need the structure of a formal course, or who want a CS degree
for career reasons, the University of London's International program is a
great option - it's very flexible, so easy to combine with full-time work, and
costs around $2500 per year for 3 years. I'm around 2/3 of the way through,
and find it helps force me to learn things I know I need to know, but might
not make the time for otherwise

[http://www.londoninternational.ac.uk/courses/undergraduate/g...](http://www.londoninternational.ac.uk/courses/undergraduate/goldsmiths/bsc-
computing-information-systems-bsc-diploma-work-entry-route)

The creative computing has a slightly more art/graphics emphasis, but is still
rigorous:
[http://www.londoninternational.ac.uk/courses/undergraduate/g...](http://www.londoninternational.ac.uk/courses/undergraduate/goldsmiths/bsc-
creative-computing-bsc-diploma-work-entry-route)

~~~
no_wizard
Is this a BS that would be recognizable? I gotta ask. I also gotta ask: Is it
rigorous? Not just time wise. I want a program that will be stimulating (even
if brutal).

For clarity: when I say recognizable, I mean, we aren't talking some for
profit online uni like DeVry. I'm not exactly looking for Stanford level, just
something that would has a respectable reputation for actually teaching.

edit: I really don't know if I'm asking this question in a way that is non-
aggressive, so I apologize in advance. I'm very interested in this (I never
heard of it before) and I'm just wondering how much you like it.

~~~
peteretep
There's also:
[https://www.cs.ox.ac.uk/softeng/](https://www.cs.ox.ac.uk/softeng/)

A lot more expensive (£25,000 all-in, part-time over four years), a reasonably
well-known university, it's an MSc, flexible curriculum, no undergrad degree
needed.

~~~
niuzeta
> reasonably welly known university

I know it's partially tongue-in-cheek, but how is comp sci in Oxford? I
thought all big names in engineering/compsci were MIT, CalTech, and so on.
Please correct me if I'm wrong.

~~~
peteretep
The Software Engineering department, via which the course is offered, has a
strong faculty from functional programming and formal methods perspective.
There are some interesting names here:
[https://www.cs.ox.ac.uk/people/faculty.html](https://www.cs.ox.ac.uk/people/faculty.html)

However, from a prestige point of view, the parent university is sufficiently
lofty that it's hard to go wrong; similarly, Judge is a questionable business
school, but telling people you went to Cambridge will open any doors that need
opening.

~~~
sah2ed
Very interesting names indeed.

Some notable ones:

\- Tim Berners-Lee

\- C. A. R. Hoare

~~~
niuzeta
Tim Berners-Lee? Wow, I am happily corrected.

------
Impossible
This is a solid list, but its a shame that no computer graphics resources are
even mentioned. Although the reason for the omission is mentioned in the FAQ,
I'd argue that computer graphics basics (images, basic rasterization, color
spaces, etc.) are as fundamental as networking or databases. A link to
Computer Graphics Principles and Practice ([https://www.amazon.com/Computer-
Graphics-Principles-Practice...](https://www.amazon.com/Computer-Graphics-
Principles-Practice-3rd/dp/0321399528)) would have been nice.

I understand that most graphics resources out there focus on real-time 3D
rendering for games or writing raytracers, which I agree are currently
industry specific topics. Your average developer isn't going to write a vector
graphics library as part of their day job, but the browser abstracts computer
graphics in the same way it abstracts networking or compilers, so if the goal
is to understand the underlying principles of software platforms you'll be
working on every day I think computer graphics is a strange, biased, omission.

~~~
ozanonay
Hi! It was hard to draw the line. And then, it was an omission to not even
make a suggestion in the FAQ. Now fixed, thanks :)

~~~
niuzeta
Heh, heh, _draw_ the line.

...Sorry.

~~~
smnplk
best pun of today :P

------
rezashirazian
Great list that covers the basics. For anyone interested to expand I would
suggest the following:

(the description is taken from the corresponding courses I took in college
which I found super helpful)

Programming paradigms: Examination of the basic principles of the major
programming language paradigms. Focus on declarative paradigms such as
functional and logic programming. Data types, control expressions, loops,
types of references, lazy evaluation, different interpretation principles,
information hiding.

Textbook on Haskell and prolog would be recommended.

Computability: An introduction to abstract models of sequential computation,
including finite automata, regular expressions, context-free grammars, and
Turing machines. Formal languages, including regular, context-free, and
recursive languages, methods for classifying languages according to these
types, and relationships among these classes.

Introduction to the Theory of Computation by Michael Sipser

Explorations in Information Security: A broad survey of topics in information
security and privacy, with the purpose of cultivating an appropriate mindset
for approaching security and privacy issues. Topics will be motivated by
recreational puzzles. Legal and ethical considerations will be introduced as
necessary.

Someone already mentioned computer graphics which I excluded. I personally had
the most fun in college in my graphics courses. They were hard but super
rewarding and a ton of fun!

------
gravypod
I wish there was a way to include "What could have been" or "What could be"
into the "What is" of an "education" in Computer Science.

Distributed Systems, Databases, Networking and Architecture all have a past
with much better solutions that were never adopted because of patents, cost,
or some such other that grow fainter with every coming day.

If courses like these cosnsited of "History" in parallel I think I'd be a more
well-rounded graduate.

------
partycoder
Personally I think one of the problems with self-learning are gaps in
knowledge.

As a part of a formal education you get to learn what you like, as well as
what you do not like much.

My advice to self-learners is: never engage in "cargo-cult programming". This
means: do not touch or reuse code that you do not understand. Force yourself
to understand. If you lack the time, write it down and follow up later.

~~~
ZGF4
Great advice to everyone, not just self-learners

~~~
partycoder
True.

But when you are just taught to use libraries and technologies without having
some exposure to he principles behind their inner workings, it's easier to
fall in cargo cult.

~~~
jamescostian
I can't speak for every student at every university, but my university is in
the top 50 of csrankings.org and yet even in my junior-level courses there are
loads of cargo-cult programming students. They think they understand things
like compilers, operating systems, and so much more, and they delude
themselves into having those beliefs based on things like "I'm in CS; of
course I understand $THING" or "I'm at $UNIVERSITY and we've learned so much,
so I definitely understand $THING". In reality, if you mention "ELF", most of
them would probably think you're talking about a special type of new line, and
the only thing they think "IR" could possibly stand for is "infrared"

It gets even worse when you get on the topic of "Computer Architecture" \- so
many people think they can talk to their computer on a deep level, without
realizing that what they're learning in class (MIPS) is actually _not_ what
their computer understands!

~~~
partycoder
Well, you can ask over 50% of software engineers: explain in 1 phrase what
engineering is, or what software is.

Many people cannot give you the correct accurate definition.

------
hackermailman
The best way I found was to go through the CMU BSc requirements (or other
university), look up the public course pages and pair the lecture notes (and
occasionally lecture vids) w/TAoCP series looking up the same topics but
getting a thorough drilling in the topic by trying the problems in the book.
Before I started doing this I kept forgetting material after taking it a few
weeks later like when I had to rewatch a lecture on floating point to remember
what the bias was.

If you look up 15-213 and get the book CS:App that accompanies the course it
will more than prepare you to understand the MMIX fasicle (or orig MIX if you
want)
[http://www.cs.cmu.edu/afs/cs/academic/class/15213-f16/www/sc...](http://www.cs.cmu.edu/afs/cs/academic/class/15213-f16/www/schedule.html)

------
calcsam
Ozan and Myles also teach this stuff in-person in SF:
[http://bradfieldcs.com/](http://bradfieldcs.com/).

I just finished their databases course and it was excellent.

~~~
bogomipz
The blog is good reading, amongst interesting technical insight and commentary
you have wonderfully humous passages such as"

>"Everyone “has been meaning to” learn Rust or Go or Clojure over a weekend,
not C. There isn’t even a cute C animal in C’s non-logo on a C decal not stuck
to your laptop."

Brilliant.

------
mamcx
About the part on databases:

    
    
       "but we suggest just writing a simple relational database management system from scratch"
    

This part is the one I'm more interested, but also the most hard to get.

As explained there, is very hard to get information about databases (all is
hunting material here and there). So, how do this? How build a "basic RDBMS"?

Probably looking at sqlite will be the default answer, but that is not the
ideal. Is hard to see how was the thinking process after a materialized and
realized piece of code.

~~~
busterarm
What I found from some quick googling.
[http://infolab.stanford.edu/~ullman/dscb.html](http://infolab.stanford.edu/~ullman/dscb.html)

[https://www.amazon.com/dp/0321197844](https://www.amazon.com/dp/0321197844)

[https://www.amazon.com/dp/1558605088](https://www.amazon.com/dp/1558605088)

[http://www.wiley.com/WileyCDA/WileyTitle/productCd-
EHEP00071...](http://www.wiley.com/WileyCDA/WileyTitle/productCd-
EHEP000711.html)

------
esfandia
I love this. It has a Back to Basics, no BS approach to CS that appeals to me.
I agree with all the recommendations. A couple of tiny comments:

\- I know that learning C is not strictly speaking part of Computer Science,
but it is a nice counterpart to SICP, ties in with other topics (such as
computer architecture and OS) and should definitely belong to this curriculum.
The authors of this site themselves have defended C in another blog post. Like
pg would say, all you need is Lisp and C.

\- IMO a better option for learning databases is Jennifer Widom's MOOC:
[http://cs.stanford.edu/people/widom/DB-
mooc.html](http://cs.stanford.edu/people/widom/DB-mooc.html)

~~~
zerr
Isn't that DB MOOC more about using DBs rather than implementing them?

~~~
aerioux
It's more about relational algebra rather than implementation (at least when I
took it)

~~~
zerr
Yes, but what we need is more materials about actual implementation - how ACID
is implemented (e.g. in C++), how query parsing/optimization/execution is
realized, etc...

------
gerry_shaw
FYI... The video content for SICP seems to be going away in a couple of
days...
[https://www.youtube.com/playlist?list=PL3E89002AA9B9879E](https://www.youtube.com/playlist?list=PL3E89002AA9B9879E)

~~~
busterarm
Thanks for the heads up. I'm grabbing these all to a HDD now for review later.

~~~
BlackjackCF
Could I bug you for these since you're grabbing them?

~~~
busterarm
Not to worry:
[https://archive.org/search.php?query=subject%3A%22UC+Berkele...](https://archive.org/search.php?query=subject%3A%22UC+Berkeley%22)

Some folks organized and grabbed it all. Even the manual-download iTunesU
stuff. Should be available in the near future.

------
javajosh
I strongly feel that Erlang really, really needs more visibility in the world.
It is an important language for distributed systems, but the language itself
is startlingly spare, using recursion and pattern-matching in lieu of
conditionals. There are two resources that I like, a 3 week Future Learn
course [1] and Learn You Some Erlang [2].

It is my belief that the Erlang "process" is a true object, as opposed to
Ruby/Java/C++ etc object which is, ultimately, a thin easily-torn veneer over
global spaghetti.

WhatsApp's acquisition for $1B for a 57-person team that could run a large,
world-wide messaging system with Erlang should also be considered a resounding
endorsement.

Last but not least, I personally have come to see the overall trend toward
statelessness is a coping mechanism to deal with bad technology.

(If I could change my name to ErlangJosh, and if it sounded good, I would.)

1\. [https://www.futurelearn.com/courses/functional-
programming-e...](https://www.futurelearn.com/courses/functional-programming-
erlang)

2\. [http://learnyousomeerlang.com/](http://learnyousomeerlang.com/)

~~~
Francute
What about languages like Smalltalk and Lisp? ... Well, Lisp at least have
some acknowledgments, but Smalltalk can be compared to Erlang in lot of
aspects.

------
busterarm
The book that I recommend for Networking, and that has been recommended to me
by every fulltime NetEng I've ever asked, has been Interconnections.

[https://www.amazon.com/Interconnections-Bridges-Switches-
Int...](https://www.amazon.com/Interconnections-Bridges-Switches-
Internetworking-Protocols/dp/0201634481)

Yes, the material is a bit dated. Yes, it won't give you the ins and outs of
what you need to know. What it will give you is the why and from there you can
figure out everything else you need to know.

~~~
signa11
for networking, my _personal_ favorite is 'network algorithmics' by george-
varghese. basically, i find it to combine topics from a variety of cs
disciplines including (but not limited to) computer architecture, algorithms,
data-structures and to some extent, compilers as well.

~~~
busterarm
That's usually the second book recommendation I would get.

~~~
signa11
:) indeed.

the trouble with books like these is that, you get sucked into it/them, and
can spend literally months on end going through them, working the exercises,
reading reference papers etc. etc. it is megafun ;)

to me at least, the books might _appear_ to be dated, but the vantage point
they offer to inspect the networking landscape is invaluable. in some ways, as
john-barth says in 'chimera':

"the real magic is to understand which words work, and when, and for what; the
trick is to learn the trick. ... and those words are made from the letters of
our alphabet; a couple-dozen squiggles we can draw with a pen. this is the
key! and the treasure, too, if we can only get our hands on it! it's as if -
as if the key to the treasure _is_ the treasure!"

------
rhizome31
They recommend to put 100-200 hours in each topic. That would require to give
it 8-10 hours a week for three years. Sounds feasible even with a day job
actually.

------
johnhenry
I kept two text books after graduating college -- one was Structure and
Interpretation of Computer Programs. I also remember going back through
Harvey's videos online whenever I missed lecture... are those being taken down
too?
[https://news.ycombinator.com/item?id=13768856](https://news.ycombinator.com/item?id=13768856)

~~~
pjmorris
Maybe OT, but what was the other book?

~~~
johnhenry
Rudin, Principles of Mathematical Analysis:
[https://notendur.hi.is/vae11/%C3%9Eekking/principles_of_math...](https://notendur.hi.is/vae11/%C3%9Eekking/principles_of_mathematical_analysis_walter_rudin.pdf)

~~~
pjmorris
Thanks. Spivak is staring at me from my bookshelf, waiting for me to do the
exercises, but Rudin seems like a worthy goal.

------
psiclops
I know of the people behind this, who founded a CS school. I've heard good
things, but I hadn't seen this before!

------
barking
Are all those CS61 lectures from Berkeley shortly going to disappear from
youtube?

~~~
movedx
They've been there for three years coming June. Not sure why they would
disappear now?

If it's legal to do so, you could use a YouTube video downloading platform to
grab them? :)

EDIT: Didn't know about the whole legal case thing. Thanks for letting me know
(and down voting me... lovely.)

I've snatched a copy of it all.

~~~
ribosometronome
Berkeley lost a lawsuit saying their courses were not in compliance with the
ADA. They're taking a lot down in response. The people over at /r/datahoarder
were working on getting them archived on Archive.org, though.

~~~
toomuchtodo
Archive Team is archiving everything.

~~~
barking
That is fantastic. I never heard of that site before!
[http://www.archiveteam.org/index.php?title=UC_Berkeley_Cours...](http://www.archiveteam.org/index.php?title=UC_Berkeley_Course_Captures)

------
crench
This could do without the "Why learn computer science?" section entirely.

~~~
jbenn
It might seem obvious to you, but the bootcamp crowd really underestimates the
impact of computer science on their day-to-day work. I know because I used to
be among them.

At least in my case, I was indoctrinated by my bootcamp to put a standard CS
undergrad degree into the same bucket as the rest of our broken education
system. So at my first job I focused on keeping up with the trends, trying to
master web development by becoming hyperproductive with my day-to-day tools. I
was trying to emulate the most visible engineers I saw at conferences,
figuring that to shape the trends I'd have to be on top of them. Very naive of
me, but then again, I didn't have much exposure to the world beyond web
development, and you don't know what you don't know.

I wish I could have seen this post years ago! Would've saved me a ton of time.

~~~
taurath
Can you give an example of a time when having more knowledge in CS would have
helped? I'm finding anecdotes extremely difficult to come by.

~~~
seaknoll
I think the problem with asking for anecdotes is that people don't necessarily
separate their decision-making-due-to-CS knowledge from decisions they make
due to experience. But if you don't have CS knowledge there are many types of
projects you'll probably never be assigned or might not even try for, so you
won't have the chance to use-or-not-use it.

~~~
taurath
I can totally see that, but it clashes a bit with self learning and research
towards figuring figuring out whatever the problem is, or the domain space.
Surely, a self taught web developer wouldn't want to take a job building a
compiler for a DSL if they didn't have that skillset, but maybe they know or
can learn enough about compilers to be able to track down a crazy bug?

I've always gone towards projects which may need a lot of research on my part,
and I've had plenty of trusting peers and managers with hard CS educations who
believed I could do it.

If I wanted to change problem domains to something much more grounded in CS
(say operating system schedulers, robotics or microcontroller programming) Id
read these books.

I'm trying really hard to see what the value is of learning this pattern or
that pattern, and what sorts of worlds it can open for me, but so far (for me)
it's usually been roads I don't want to go down professionally. Maybe my
imagination itself is stunted by my lack of formal education, I don't know.

------
mettamage
Couple of things about the distributed systems course.

1\. Maarten van Steen -- one of the authors -- recorded screencasts in 2012
(see [https://www.distributed-
systems.net/index.php/books/distribu...](https://www.distributed-
systems.net/index.php/books/distributed-systems/) ).

2\. Maarten van Steen released an updated version of the book this year about
distributed systems.

Full disclosure: I followed Maarten van Steen's lectures back in the day :)

------
BeetleB
You know, as a former academic, I was reading this list and I _immediately_
knew: This is written by someone in academia (and sure enough, you find out at
the bottom it is).

I don't have a problem with this list per se. For all I know, it may be a good
list and the designation of Type 1 and Type 2 engineers may be accurate.

But I _wish_ I read a post from a Type 1 engineer in industry that mirrored
what academics often write. I hardly find one. Why the disconnect? If the
academics are so right, why is it mostly academics who preach this? There are
more Type 1 engineers than academics, I'm sure.

Take my story: Was pursuing a PhD in physics/engineering and dropped out.
Heavy on mathematics. And programming was always a hobby/passion. Went into
industry in my discipline (not programming). Then decided to change careers
into software.

Going in, I had the impostor syndrome. I had read quite a bit of CLRS in grad
school on my own, but remembered little. So I took a bunch of Coursera courses
to review all the basic algorithms, graph theory, etc.

My goal was that this was the bare minimum to survive, and I would work for a
while and figure out what to focus on next (architecture? networking, OS?
databases?).

Well, I've been working a bunch of years now, and there is no "next thing".
Even the algorithms courses I took, while a lot of fun and interesting, play
little role _beyond what most Type 2 engineers will know!_

That's just the reality: Most software jobs do not require you to know much
beyond the basic data structures (hash, sets, lists, etc) and the complexity
of their storage/operations. I _looked_ for ways to use all the extra stuff I
had learned (in essentially introductory algorithms courses), and did not find
opportunities. I'm facing the inverse problem: Someone who knows some of this
(or wants to), and having trouble finding a job where this knowledge actually
leads to more robust systems.

And it's hard to find the jobs where these things matter, and it is _rare_
that they are paid more. Difficulty and complexity does not equate to higher
pay. Market rules do. Trust me, I know. I was doing more challenging work
before I became a software engineer, but I get paid more now because there
were few challenging jobs.

I know people say it often, but I'll say it too: Communication and negotiation
skills are more valuable than the topics on the page. Why spend your nights on
diminishing returns when you can get pretty far with just the basics of
negotiation? Most engineers are overeducated in terms of what they _need_ to
know when it comes to technical skills. But other important skills? We're very
undereducated. Why work hard to be even more overeducated, while ignoring the
deficiencies?

~~~
usaekcndwi
Thank you for sharing, it's a very useful prospective for me as a CS
undergrad.

~~~
aerioux
^ I've posted a decently long question, but my 2c are I think it's useful to
know those things - as a previous CS undergrad :)

------
mattfrommars
Which demographic do these compilation of computer science books target
people? Considering the number of votes this post got on HN, it must be some
importance. I already have plenty of resources gathered up with time which
right now working on the first one, but really, who are they targetting at?

From the threads [slashdot, HN] I read yesterday which related to me quite
well [26 year old trying to enter the software development field], all seem to
conclude, 'you're a dinosaur if you're coding past 30'. Which drew a really
grim picture of where my future is heading. To me, there is vast amount of
knowledge and learning which I don't know if I can do within 4 year span.
There are numerous books, theories and fields to work in.

How can someone around 30 stop coding and move to more management type
position when there is so much to learn in this space?

~~~
vehementi
> you're a dinosaur if you're coding past 30

Don't let your mind get poisoned by this absurdity

------
paradite
SICP is a great resource for learning functional programming paradigm, but is
it a suitable resource for CS beginners?

There is only a few universities that still use SICP or its variants in CS
introduction modules.

I think a book on imperative or OOP paradigm might be better and more relevant
in today's context.

------
hackermailman
This list is short on programming language theory, here's a rigorous book I
enjoyed if interested in the formal definitions of such things as Abstract
Syntax Trees or Types.

Robert Harper's Practical Foundations of Programming Languages. (free draft
copy, also take the notation guide)
[http://www.cs.cmu.edu/~rwh/pfpl.html](http://www.cs.cmu.edu/~rwh/pfpl.html)

There's videos for this book (and for Category Theory) @ OPLSS
[https://www.cs.uoregon.edu/research/summerschool/summer16/cu...](https://www.cs.uoregon.edu/research/summerschool/summer16/curriculum.php)

~~~
aerioux
Do you have suggestions for PL reading lists? I nearly never see PL mentioned
on them, and have been looking for alternatives for some time as PFPL offers
one approach + style to many of the problems they address, but I would love a
broader survey.

Thanks!

~~~
hackermailman
If you understand PFPL you can probably just attend or look up previous years
tutorial tracks, lecture videos and research papers from the The Programming
Languages Mentoring Workshop (PLMW), which encourages students to take PL
theory, or Principles of Programming Languages conference (POPL 2017), or PLDI
[http://conf.researchr.org/home/pldi-2017](http://conf.researchr.org/home/pldi-2017)
if they are paywalled there is of course sci-hub proxy.

This year's OPLSS looks interesting as well
[https://www.cs.uoregon.edu/research/summerschool/summer17/to...](https://www.cs.uoregon.edu/research/summerschool/summer17/topics.php)
which will use this book as an introductory
[http://www.seas.upenn.edu/~bcpierce/tapl/index.html](http://www.seas.upenn.edu/~bcpierce/tapl/index.html)

I mainly follow Dan Licata and Matt Fredikson's personal pages for
presentations/lectures as my specific interest is verification and Type
Theory.
[http://dlicata.web.wesleyan.edu/index.html](http://dlicata.web.wesleyan.edu/index.html)

------
intrasight
A good list of topics. But there are many others. A CS undergrad now has many
more options than the four or five available courses that I had when I was at
Carnegie Mellon.

Next item: "Print yourself a computer science diploma" ;)

~~~
aerioux
What did you have when you were at Carnegie Mellon if I may ask!

~~~
intrasight
First, understand that there was no Computer Science degree back then - it was
called "Applied Math". I think the courses available to undergrads were:

1\. programming [A]

2\. algorithms

3\. operating systems

4\. compiler design

If you were lucky like me, and a graduating student bestowed upon you a
coveted key to the graduate terminal room, then you could hack on those
excellent DEC VT-100 terminals besides James Gosling, and buy bottles of Coke
from what was perhaps the first vending machine connected to the internet.

[A] Interesting in that it was a school-wide class that you were required to
take and to pass. Programing was done in Pascal on a mini-computer-based IDE.

~~~
aerioux
Ah interesting :)

You may be interested to know that (1) is still required, even for CFA people

~~~
intrasight
And of that I approve

------
autorun
That's a good list of books, but it's terrible to start with. I'm pro-reading,
pro-book, but I mean, you can't be motivated on learning computer science
knowing that you SHOULD read all those books.

------
ousmanedev
I loved this list so much that I created a public Trello board that summarizes
it, and helps you track your progress if you're following the curriculum.
[https://github.com/ousmanedev/teach-yourself-computer-
scienc...](https://github.com/ousmanedev/teach-yourself-computer-science-
trello)

------
grexe
What is the best book or video is always hard to say, but it's always
interesting to see such collections, having studied CS myself and working in
the field for 20 years. I'd appreciate proper quotations though, missing the
books authors. Also a short reasoning why this title was selected would be
helpful. Thanks for putting this together!

------
epigramx
> Computer Architecture

I found it fascinating to learn about the basis of computing on memory that is
manipulated by a processor. It takes only 10 minutes to realize the basic
concepts of it. Meanwhile, the majority of popular technology Press still
treats processors as mystical machines disconnected from memory, that
mysteriously make your game run faster.

------
rerx
As a physicist breaking into software engineering, but lacking education in
CS, this list is extremely welcome to me.

------
sudeepto
Getting this message : The webpage at
[https://teachyourselfcs.com/](https://teachyourselfcs.com/) might be
temporarily down or it may have moved permanently to a new web address.
ERR_TUNNEL_CONNECTION_FAILED

------
eaguyhn
Don't forget the Scientific Method (it is Computer _Science_ , after all)

[https://blog.makersacademy.com/scientific-method-in-
programm...](https://blog.makersacademy.com/scientific-method-in-
programming-3b729c0b3fc3)

------
gigatexal
Having bombed the programming interview for a Google cloud position and like a
kid seemingly suffering from stockholm-syndrome I think the value to having
arbitrarily abstract and difficult interviews are overall a good thing --
getting through one is like getting through basic training, it shows you have
the grit to persevere. And in the case of programming you at least can
understand data structures well enough to answer the canned questions. I know
the initial reasoning behind it all was to show people who could think
analytically but also be competent in the role. The downside I think is the
process biases people who might be valuable members of a team who don't care
about implementing a linked list but understand the pros and cons of one
having used such a data structure or a similar one in production applications.

------
deepaksurti
Two subjects that I think are missing yet important though in the practical
and not theoretical context:

10\. Software Engineering

11\. The Art of Shipping

Shipping is a crucial skill to learn, if you don't know how to ship, then
learning everything else is really moot!

------
willbw
Appreciate the short list and not hundreds of links to resources.

------
aqibgatoo
Wow awesome list first time i have seen some explaining why they gave
preferences to particular things over others in such a lucid and simple way
...

------
andychong1996
This list is awesome, as a student, I really doubt a computer science will
worth the money spend... Degree is expensive in most places nowaday.

~~~
aerioux
I will have to respectively disagree :)

------
philbarr
Does anyone know of a different decent networking book that's available on
Safari?

------
james_niro
ITunesU have great computer science classes which is offered my major
universities

------
sidcool
I am a self taught programmer with 10 years experience. Would this help me?

~~~
unix
if you learn CS, I think you should not be a programmer for your next step.
You can be better then now.

~~~
sidcool
I somehow did not get what you intended to convey. Can you please elaborate?
Would going back to Algos and OS etc. help me grow as a hard core programmer?

------
leog7
Very strange nothing on computer security

------
jaddood
Great website! Thanks for sharing!

------
mzzter
THANK YOU.

------
palavsen
Read good compilation! I agree with almost everything on the list.

------
suyash
There are almost dozen blogs and websites promising to teach yourself CS -
great initiative but most people are either saying the same things or missing
few key points here and there. Everyone seems to tell it as if they know it
best.

~~~
derrickdirge
Do you have any specific criticisms of this site?

