This link has been bookmarked by 290 people . It was first bookmarked on 13 Mar 2017, by alfred westerveld.
-
07 Jul 23
-
04 Dec 22
-
10 Sep 22
-
27 Nov 21
-
02 Jun 21
-
07 Mar 21
-
14 Jan 21
-
21 Jun 20New Capital Entrepreneur LLC Consultants
Frequently asked questions Who is the target audience for this guide? We have in mind that you are a self-taught software engineer, bootcamp grad or precocious high school student, or a college student looking to supplem… https://teachyourselfcs.com/
-
hanavy
Frequently asked questions Who is the target audience for this guide? We have in mind that you are a self-taught software engineer, bootcamp grad or precocious high school student, or a college student looking to supplement yo… https://ift.tt/2nxv4HI
-
duser01
Teach Yourself Computer Science via Instapaper https://ift.tt/2nxv4HI
Frequently asked questions Who is the target audience for this guide? We have in mind that you are a self-taught software engineer, bootcamp grad or precocious high school student, or a college student looking to supplement yo… https://ift.tt/2nxv4HIbest stories hacker news instapaper tenpla Teach Yourself Computer Science
-
druicifer
Frequently asked questions Who is the target audience for this guide? We have in mind that you are a self-taught software engineer, bootcamp grad or precocious high school student, or a college student looking to supplement yo… https://ift.tt/2nxv4HI
-
07 Jun 20
-
18 Dec 19
-
19 Aug 19
-
If you’re a self-taught engineer or bootcamp grad, you owe it to yourself to learn computer science.
-
If you’re a self-taught engineer or bootcamp grad, you owe it to yourself to learn computer science. Thankfully, you can give yourself a world-class CS education without investing years and a small fortune in a degree program
-
- Which subjects should you learn, and why?
- What is the best book or video lecture series for each subject?
You need answers to these questions:
-
There are plenty of resources out there, but some are better than others. You don’t need yet another “200+ Free Online Courses” listicle.
-
Study all nine subjects below, in roughly the presented order, using either the suggested textbook or video lecture series, but ideally both. Aim for 100-200 hours of study of each topic, then revisit favorites throughout your career
-
Structure and Interpretation of Computer Programs
-
Computer Organization and Design
-
The Algorithm Design Manual
-
Mathematics for Computer Science
-
CS is basically a runaway branch of applied math, so learning math will give you a competitive advantage.
-
Operating Systems: Three Easy Pieces
-
Computer Networking: A Top-Down Approach
-
Don’t be the person who “never quite understood” something like recursion.
-
Readings in Database Systems
-
-
Computer Systems: A Programmer's Perspective
-
If you don’t have a solid mental model of how a computer actually works, all of your higher-level abstractions will be brittle.
-
Compilers: Principles, Techniques and Tools
-
If you understand how languages and compilers actually work, you’ll write better code and learn new languages more easily.
-
If you don’t know how to use ubiquitous data structures like stacks, queues, trees, and graphs, you won’t be able to solve challenging problems.
-
Distributed Systems, 3rd Edition by Maarten van Steen -
Most of the code you write is run by an operating system, so you should know how those interact.
-
There are 2 types of software engineer: those who understand computer science well enough to do challenging, innovative work, and those who just get by because they’re familiar with a few high level tools.
-
The Internet turned out to be a big deal: understand how it works to unlock its full potential.
-
Crafting Interpreters
-
Both call themselves software engineers, and both tend to earn similar salaries in their early careers. But Type 1 engineers grow in to more fulfilling and well-remunerated work over time, whether that’s valuable commercial work or breakthrough open-source projects, technical leadership or high-quality individual contributions.
-
These days, most systems are distributed systems. Designing Data-Intensive Applications by Martin Kleppmann -
Type 1 engineers find ways to learn computer science in depth, whether through conventional means or by relentlessly learning throughout their careers.
-
If the idea of self-studying 9 topics over multiple years feels overwhelming, we suggest you focus on just two books: Computer Systems: A Programmer's Perspective and Designing Data-Intensive Applications. In our experience, these two books provide incredibly high return on time invested, particularly for self-taught engineers and bootcamp grads working on networked applications. They may also serve as a "gateway drug" for the other topics and resources listed above.
-
Currently, the number of people entering the industry is rapidly increasing, while the number of CS grads is essentially static. This oversupply of Type 2 engineers is starting to reduce their employment opportunities and keep them out of the industry’s more fulfilling work.
-
Both call themselves software engineers, and both tend to earn similar salaries in their early careers. But Type 1 engineers progress toward more fulfilling and well-remunerated work over time
-
Most undergraduate CS programs start with an “introduction” to computer programming. The best versions of these courses cater not just to novices, but also to those who missed beneficial concepts and programming models while first learning to code.
-
Our standard recommendation for this content is the classic Structure and Interpretation of Computer Programs, which is available online for free both as a book, and as a set of MIT video lectures. While those lectures are great, our video suggestion is actually Brian Harvey’s SICP lectures (for the 61A course at Berkeley) instead. These are more refined and better targeted at new students than are the MIT lectures.
-
Type 2 engineers typically stay at the surface, learning specific tools and technologies rather than their underlying foundations, only picking up new skills when the winds of technical fashion change.
-
We recommend working through at least the first three chapters of SICP and doing the exercises.
-
For those who find SICP too challenging, we recommend How to Design Programs. For those who find it too easy, we recommend Concepts, Techniques, and Models of Computer Programming.
-
and/or the corresponding book Composing Programs, which is “in the tradition of SICP” but uses Python. We think the DeNero resources are also great, and some students may end up preferring them, but we still suggest SICP, Scheme, and Brian Harvey’s lectures as the first set of resources to try.
-
Why? Because SICP is unique in its ability—at least potentially—to alter your fundamental beliefs about computers and programming. Not everybody will experience this. Some will hate the book, others won't get past the first few pages. But the potential reward makes it worth trying.
-
If you don't enjoy SICP, try Composing Programs. If that still doesn't suit, try How to Design Programs.
-
Finally, a point of clarification: this guide is NOT designed for those who are entirely new to programming. We assume that you are a competent programmer without a background in computer science, looking to fill in some knowledge gaps
-
Computer Architecture—sometimes called “computer systems” or “computer organization”—is an important first look at computing below the surface of software. In our experience, it’s the most neglected area among self-taught software engineers.
-
Our favorite introductory book is Computer Systems: A Programmer's Perspective, and a typical introductory computer architecture course using the book would cover most of chapters 1-6.
-
We love CS:APP for the practical, programmer-oriented approach. While there's much more to computer architecture than what's covered in the book, it serves as a great starting point for those who'd like to understand computer systems primarily in order to write faster, more efficient and more reliable software.
-
For those who'd prefer both a gentler introduction to the topic and a balance of hardware and software concerns, we suggest The Elements of Computing Systems, also known as “Nand2Tetris”. This is an ambitious book attempting to give you a cohesive understanding of how everything in a computer works. Each chapter involves building a small piece of the overall system, from writing elementary logic gates in HDL, through a CPU and assembler, all the way to an application the size of a Tetris game.
-
We recommend reading through the first six chapters of the book and completing the associated projects. This will develop your understanding of the relationship between the architecture of the machine and the software that runs on it.
-
The first half of the book (and all of its projects), are available for free from the Nand2Tetris website. It’s also available as a Coursera course with accompanying videos.
In seeking simplicity and cohesiveness, Nand2Tetris trades off depth. In particular, two very important concepts in modern computer architectures are pipelining and memory hierarchy, but both are mostly absent from the text.
-
Once you feel comfortable with the content of Nand2Tetris, we suggest either returning to CS:APP, or considering Patterson and Hennessy’s
-
Not every section in the book is essential; we suggest following Berkeley’s CS61C course “Great Ideas in Computer Architecture” for specific readings. The lecture notes and labs are available online, and past lectures are on the Internet Archive.
-
We agree with decades of common wisdom that familiarity with common algorithms and data structures is one of the most empowering aspects of a computer science education. This is also a great place to train one’s general problem-solving abilities, which will pay off in every other area of study.
-
There are hundreds of books available, but our favorite is The Algorithm Design Manual by Steven Skiena. He clearly loves algorithmic problem solving and typically succeeds in fostering similar enthusiasm among his students and readers. In our opinion, the two more commonly suggested texts (CLRS and Sedgewick) tend to be a little too proof-heavy for those learning the material primarily to help with practical problem solving.
-
For those who prefer video lectures, Skiena generously provides his online. We also really like Tim Roughgarden’s course, available on Coursera and elsewhere.
-
For practice, our preferred approach is for students to solve problems on Leetcode. These tend to be interesting problems with decent accompanying solutions and discussions.
-
Finally, we strongly recommend How to Solve It as an excellent and unique guide to general problem solving; it’s as applicable to computer science as it is to mathematics.
-
In some ways, computer science is an overgrown branch of applied mathematics. While many software engineers try—and to varying degrees succeed—at ignoring this, we encourage you to embrace it with direct study. Doing so successfully will give you an enormous competitive advantage over those who don’t.
-
The most relevant area of math for CS is broadly called “discrete mathematics”, where “discrete” is the opposite of “continuous” and is loosely a collection of interesting applied math topics outside of calculus. Given the vague definition, it’s not meaningful to try to cover the entire breadth of “discrete mathematics”. A more realistic goal is to build a working understanding of logic, combinatorics and probability, set theory, graph theory, and a little of the number theory informing cryptography. Linear algebra is an additional worthwhile area of study, given its importance in computer graphics and machine learning.
-
Our suggested starting point for discrete mathematics is the set of lecture notes by László Lovász. Professor Lovász did a good job of making the content approachable and intuitive, so this serves as a better starting point than more formal texts.
-
For a more advanced treatment, we suggest Mathematics for Computer Science, the book-length lecture notes for the MIT course of the same name. That course’s video lectures are also freely available, and are our recommended video lectures for discrete math.
For linear algebra, we suggest starting with the Essence of linear algebra video series, followed by Gilbert Strang’s book and video lectures.
-
Operating System Concepts (the “Dinosaur book”) and Modern Operating Systems are the “classic” books on operating systems. Both have attracted criticism for their lack of clarity and general student unfriendliness.
-
Operating Systems: Three Easy Pieces is a good alternative that’s freely available online. We particularly like the structure and readability of the book, and feel that the exercises are worthwhile.
-
After OSTEP, we encourage you to explore the design decisions of specific operating systems, through “{OS name} Internals” style books such as Lion's commentary on Unix, The Design and Implementation of the FreeBSD Operating System, and Mac OS X Internals. For Linux, we suggest Robert Love's fantastic Linux Kernel Development.
-
-
Given that so much of software engineering is on web servers and clients, one of the most immediately valuable areas of computer science is computer networking. Our self-taught students who methodically study networking find that they finally understand terms, concepts and protocols they’d been surrounded by for years.
Our favorite book on the topic is Computer Networking: A Top-Down Approach. The small projects and exercises in the book are well worth doing, and we particularly like the “Wireshark labs”, which they have generously provided online.
-
For those who prefer video lectures, we suggest Stanford’s Introduction to Computer Networking course previously available via Stanford's MOOC platform Lagunita, but sadly now only available as unofficial playlists on Youtube.
-
It takes more work to self-learn about database systems than it does with most other topics. It’s a relatively new (i.e. post 1970s) field of study with strong commercial incentives for ideas to stay behind closed doors. Additionally, many potentially excellent textbook authors have preferred to join or start companies instead.
Given the circumstances, we encourage self-learners to generally avoid textbooks and start with recordings of CS 186, Joe Hellerstein’s databases course at Berkeley, and to progress to reading papers after.
-
One paper particularly worth mentioning for new students is “Architecture of a Database System”, which uniquely provides a high-level view of how relational database management systems (RDBMS) work. This will serve as a useful skeleton for further study.
-
Readings in Database Systems, better known as the databases “Red Book”, is a collection of papers compiled and edited by Peter Bailis, Joe Hellerstein and Michael Stonebraker. For those who have progressed beyond the level of the CS 186 content, the Red Book should be your next stop.
-
If you're adamant about using an introductory textbook, we suggest Database Management Systems by Ramakrishnan and Gehrke. For more advanced students, Jim Gray’s classic Transaction Processing: Concepts and Techniques is worthwhile, but we don’t encourage using this as a first resource.
-
Finally, data modeling is a neglected and poorly taught aspect of working with databases. Our suggested book on the topic is Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World.
-
Most programmers learn languages, whereas most computer scientists learn about languages. This gives the computer scientist a distinct advantage over the programmer, even in the domain of programming! Their knowledge generalizes; they are able to understand the operation of a new language more deeply and quickly than those who have merely learned specific languages.
-
Our suggested introductory text is the excellent Crafting Interpreters by Bob Nystrom, available for free online. It's well organized, highly entertaining, and well suited to those whose primary goal is simply to better understand their languages and language tools. We suggest taking the time to work through the whole thing, attempting whichever of the "challenges" sustain your interest.
-
A more traditional recommendation is Compilers: Principles, Techniques & Tools, commonly called “the Dragon Book”. Unfortunately, it’s not designed for self-study, but rather for instructors to pick out 1-2 semesters worth of topics for their courses.
-
If you elect to use the Dragon Book, it’s almost essential that you cherry-pick the topics, ideally with the help of a mentor. In fact, our suggested way to utilize the Dragon Book, if you so choose, is as a supplementary reference for a video lecture series. Our recommended one is Alex Aiken’s, on edX.
-
Our suggested book for self-study is Martin Kleppmann's Designing Data-Intensive Applications. Far better than a traditional textbook, DDIA is a highly readable book designed for practitioners, which somehow avoids sacrificing depth or rigor.
-
For those seeking a more traditional text, or who would prefer one that’s available for free online, we suggest Maarten van Steen and Andrew Tanenbaum’s Distributed Systems, 3rd Edition.
-
No matter the choice of textbook or other secondary resources, study of distributed systems absolutely mandates reading papers. A good list is here, and we would highly encourage attending your local Papers We Love chapter.
-
When this guide was first written in 2016, the OSS guide had too many subjects, suggested inferior resources for many of them, and provided no rationale or guidance around why or what aspects of particular courses are valuable. We strove to limit our list of courses to those which you really should know as a software engineer, irrespective of your specialty, and to help you understand why each course is included. In the subsequent years, the OSS guide has improved, but we still think that this one provides a clearer, more cohesive path.
-
freeCodeCamp is focused mostly on programming, not computer science. For why you might want to learn computer science, see above. If you are new to programming, we suggest prioritizing that, and returning to this guide in a year or two.
-
Why are you still recommending SICP?
Look, just try it. Some people find SICP mind blowing, a characteristic shared by very few other books. If you don't like it, you can always try something else and perhaps return to SICP later.
-
Why are you still recommending the Dragon book?
The Dragon book is still the most complete single resource for compilers. It gets a bad rap, typically for overemphasizing certain topics that are less fashionable to cover in detail these days, such as parsing. The thing is, the book was never intended to be studied cover to cover, only to provide enough material for an instructor to put together a course.
-
This guide was originally written by Oz Nova and Myles Byrne, with 2020 updates by Oz. It is based on our experience teaching foundational computer science to over 1000 mostly self-taught engineers and bootcamp grads in small group settings in San Francisco and live online. Thank you to all of our students for your continued feedback on self-teaching resources.
-
We're very confident that you could teach yourself everything above, given enough time and motivation. But if you'd prefer an intensive, structured, instructor-led program, you might be interested in our Computer Science Intensive. We DON'T suggest pursuing a master's degree.
-
-
12 Jun 19
-
07 Jun 19
-
08 Aug 18
-
29 Jul 18
-
22 Jul 18
-
21 Jul 18
-
22 Jun 18nikerym
via Instapaper: Unread https://ift.tt/UvJzr1
This is interesting, I always realized there wasn’t a lot of education material specifically about databases out there but never understood why. https://t.co/YuM3G7M5EM pic.twitter.com/yS6E0stbvh
— Vicki Boykis (@vboykis) June 21, 2020
Teach Yourself Computer Science (2020) https://t.co/0eq82azfxa
— Hacker News (@newsycombinator) Nov 27, 2021 -
23 Apr 18
-
17 Apr 18yukoff
Frequently asked questions What about AI/graphics/pet-topic-X? We’ve tried to limit our list to computer science topics that we feel every practicing software engineer should know, irrespective of specialty or industry. via Pocket
IFTTT Pocket algorithms coding computer development learning math programming resources science
-
06 Apr 18
-
05 Apr 18
-
04 Apr 18
-
Nom DeGuerre
All the resources you need to give yourself a world class computer science education
All the resources you need to give yourself a world class computer science education
-
bropruitai
Frequently asked questions What about AI/graphics/pet-topic-X? We’ve tried to limit our list to computer science topics that we feel every practicing software engineer should know, irrespective of specialty or industry. via Pocket
-
03 Apr 18
-
28 Mar 18
-
12 Feb 18
-
13 Dec 17
-
09 Nov 17
-
02 Nov 17
-
08 Oct 17
-
01 Aug 17
-
15 Jul 17
-
02 Jul 17
-
27 Jun 17
-
23 Jun 17
-
19 Jun 17
-
higher-level abstractions will be brittle.
-
ubiquitous data structures like stacks, queues, trees, and graphs,
-
competitive advantage.
-
few understand how database systems actually work.
-
you’ll write better code and learn new languages more easily.
-
There are 2 types of software engineer: those who understand computer science well enough to do challenging, innovative work, and those who just get by because they’re familiar with a few high level tools.
-
Type 2 engineers typically stay at the surface, learning specific tools and technologies rather than their underlying foundations, only picking up new skills when the winds of technical fashion change.
-
the most neglected area among self-taught software engineers.
-
two very important concepts in modern computer architectures are pipelining and memory hierarchy, but both are mostly absent from the text
-
common algorithms and data structures is one of the most empowering aspects of a computer science education.
-
ogic, combinatorics and probability, set theory, graph theory, and a little of the number theory informing cryptography. Linear algebra is an additional worthwhile area of study, given its importance in computer graphics and machine learning.
-
It takes more work to self-learn about database systems than it does with most other topics.
-
most modern practices are just a sound application of well-established foundations, and the shortfall can be made up for with a few papers.
-
The most significant “pre-requisites” in our opinion are: computer architecture before operating systems or databases, and networking and operating systems before distributed systems.
-
suggests inferior resources
-
it should take you little more than a weekend to learn the essentials of a new language.
-
he trick is to work backwards from the particular technology to the underlying field or concept, and learn that in depth before seeing how your trendy technology fits into the bigger picture.
-
-
16 Jun 17
-
14 Jun 17
-
04 Jun 17
-
03 Jun 17Kyle Webb
"If you’re a self-taught engineer or bootcamp grad, you owe it to yourself to learn computer science. Thankfully, you can give yourself a world-class CS education without investing years and a small fortune in a degree program
-
23 May 17
-
20 May 17
-
17 May 17
-
09 May 17
-
01 May 17
-
10 Apr 17
-
cohesive understanding
-
cohesive understanding
-
In some ways, computer science is an overgrown branch of applied mathematics
-
discrete mathematics
-
calculus
-
set theory
-
cryptography
-
Linear algebra
-
intuitive
-
-
09 Apr 17
-
26 Mar 17
-
24 Mar 17
-
20 Mar 17
-
17 Mar 17saidsells4u
Great tips about computer science
-
16 Mar 17
-
15 Mar 17
-
-
There are 2 types of software engineer: those who understand computer science well enough to do challenging, innovative work, and those who just get by because they’re familiar with a few high level tools.
-
Type 1 engineers find ways to learn computer science in depth, whether through conventional means or by relentlessly learning throughout their careers. Type 2 engineers typically stay at the surface, learning specific tools and technologies rather than their underlying foundations, only picking up new skills when the winds of technical fashion change.
-
-
14 Mar 17
-
Tao Jonesin
" you’re a self-taught engineer or bootcamp grad, you owe it to yourself to learn computer science. Thankfully, you can give yourself a world-class CS education without investing years and a small fortune in a degree program
-
13 Mar 17
Would you like to comment?
Join Diigo for a free account, or sign in if you are already a member.