TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

Ask HN: How Sound Is the “Teach Yourself CS” Learning Resource?

360 点作者 rxsel超过 5 年前
I’m a SR. Dev at a big company we all know trying to rid myself of the insecurities that come from an informal education.<p>This is the resource in question: <a href="https:&#x2F;&#x2F;teachyourselfcs.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;teachyourselfcs.com&#x2F;</a>

32 条评论

ozanonay超过 5 年前
Hi there, I&#x27;m the author. Yes this list precisely constitutes the topics in computer science on which I believe a software engineer with an informal education should focus. It&#x27;s based on my experience of having taught computer science to over 1,000 junior to mid-level engineers, mostly bootcamp grads, in person in small classes over the last 5 years.<p>I&#x27;ve been meaning to update it slightly, to recommend _Computer Systems: A Programmer&#x27;s Perspective_ over P&amp;H (although P&amp;H is still excellent) as well as Martin Kleppmann&#x27;s book _Designing Data-Intensive Applications_ for distributed systems.
评论 #22287045 未加载
评论 #22287640 未加载
评论 #22289410 未加载
评论 #22286942 未加载
评论 #22287382 未加载
评论 #22290570 未加载
评论 #22306416 未加载
评论 #22286708 未加载
closeparen超过 5 年前
Looks great. But just to clarify: in the context of a CS program, it&#x27;s not about reading and retaining the entire books cover-to-cover, retaining everything, or doing 100% of the exercises. The professor will assign specific readings and exercises that track the lectures. Some will not use the textbook&#x27;s exercises at all, and instead build their own homework assignments. You can typically find a PDF describing the assignment on a course&#x27;s website, along with starter code. Typically there&#x27;s a test suite that does automated grading. If you&#x27;re lucky, you&#x27;ll be able to obtain that and run it locally without a university login.<p>I spent the vast majority of my time and effort on the programming assignments, and while I did the readings, I didn&#x27;t pore over the books that closely except when stuck. IMO, that&#x27;s the way to do it. You want to think of programming projects, not books, as primary.<p>The part of my CS education I loved and still cherish was the evenings in the library with project partners, triumphantly flushing out one last segfault moments before the 11:59pm submission deadline.
评论 #22286682 未加载
dilippkumar超过 5 年前
FWIW, when I was trying to rid myself of similar insecurities, I went through a bunch of courses like this one, but none of them worked out for me.<p>The challenge was that the textbooks and material that is popular among University CS courses leave a lot of unanswered questions that I couldn&#x27;t get over. For example, when I came to hash tables while studying data structures, I couldn&#x27;t figure out how the hashing functions did their magic. Every book or online lecture I came across showed how to use a generic hashing function and moved on to dealing with hash conflicts. I couldn&#x27;t move on because I kept coming back to questions like &quot;ok, but why this hashing function? If I change my data a little bit, is this still the right hashing function to use? How can I tell?&quot;<p>Somehow, people who had formal education managed to sail past these questions. I suspect that having someone to answer these questions when they came up played a crucial role in them understanding the material.<p>My point is, some of these materials are almost deliberately designed to be consumed with an instructor who can answer questions. Especially for the difficult courses.<p>In the end, when I was teaching myself the basics, I had to go hardcore and pick up TAOCP to keep up. TAOCP has a reputation for being a very dense reference book and being unsuitable for self study - but I found the opposite to be true. Prof. Knuth painstakingly covers every minor detail leaving nothing unaddressed. (His treatment on hash tables has several pages on hashing functions that gave me a clear understanding of how things work). I would recommend following that path if you are trying to study the basics without formal instruction. It&#x27;s a little harder, but you are more likely to end up successfully digesting the fundamentals and move on to more advanced topics.<p>Today, I have fully rod myself of insecurities, and I have developed a habit of going to the most comprehensive treatment of a topic if I&#x27;m trying to teach myself something difficult. For easy subjects, textbooks popular in Universities is usually good enough. For difficult stuff, I prefer going hardcore.<p>Be aware of textbooks designed to work with formal instruction.
评论 #22286700 未加载
评论 #22311614 未加载
评论 #22287042 未加载
评论 #22290119 未加载
bryanwb超过 5 年前
I think the books are very sound but that doesn&#x27;t mean following program will work for you. It really requires you to study well in isolation without anyone else to ask questions of or discuss ideas with. I tried to follow that same program but couldn&#x27;t stick to it. After failing to stick with it, I enrolled in Georgia Tech&#x27;s OMSCS. I am halfway through and I can&#x27;t recommend it enough. That said it is a shit ton of work. The real value that I get from the OMSCS are my discussions with fellow students and professors, something you can&#x27;t get from self-study.<p>I am currently taking the compiler course (CS-8803) and there is no way in the world I put this much work into a self-study project. I spend roughly 30 hours per week on it.
评论 #22290766 未加载
评论 #22291444 未加载
jshowa3超过 5 年前
CS graduate here.<p>Can confirm this site is legit. These are all standard recommended texts in CS curriculum.<p>You could probably substitute SICP with other modern language text books on programming, but you&#x27;re not really starting from square one so I&#x27;d skip to data structures and algorithms.<p>That being said, from my limited experience with SICP, it&#x27;s very good. Even the old MIT lectures are good. And it gives you exposure to a functional language.<p>The only thing glaringly missing is computational theory which you can acquire this by going here: <a href="https:&#x2F;&#x2F;ocw.mit.edu&#x2F;courses&#x2F;mathematics&#x2F;18-404j-theory-of-computation-fall-2006&#x2F;" rel="nofollow">https:&#x2F;&#x2F;ocw.mit.edu&#x2F;courses&#x2F;mathematics&#x2F;18-404j-theory-of-co...</a><p>Or reading this book: <a href="https:&#x2F;&#x2F;tinyurl.com&#x2F;rm6bgws" rel="nofollow">https:&#x2F;&#x2F;tinyurl.com&#x2F;rm6bgws</a>. It&#x27;s the one I used in my studies and it isn&#x27;t that great.<p>This book is apparently good because it&#x27;s less wordy: <a href="https:&#x2F;&#x2F;cs.uwaterloo.ca&#x2F;~shallit&#x2F;second.html" rel="nofollow">https:&#x2F;&#x2F;cs.uwaterloo.ca&#x2F;~shallit&#x2F;second.html</a><p>WARNING: This stuff is very difficult to learn on your own. It takes a considerable amount of time to master and it would be worth it to go to university for support. You will often find that many of this stuff is not directly applicable to the workforce unless you&#x27;re entering research positions. That being said, if you&#x27;re a genius, unlike me, and extremely dedicated and consistent (also not me) you probably won&#x27;t have any difficulty.<p>I&#x27;ve not taken the MIT course or read the second book so I can&#x27;t vouch for its quality.
agentultra超过 5 年前
I&#x27;m not sure what you mean by &quot;sound&quot; but it does cover a number of topics broadly which is usually what you get with a CS education.<p>Be aware though that you will get a vastly different CS education depending on which school you go to. It&#x27;s a very broad field and different approaches pick from different branches of mathematics along the way.<p>If <i>general</i> ability is what you&#x27;d like to improve I&#x27;d add a bit of the more general mathematics to your repertoire: set theory, logic and predicate calculus, discrete mathematics, category theory, and type theory. Dip into calculus, linear and abstract algebra, information theory, semantics, and other specialized fields when you find a subject and specialization that tickles your fancy.<p>My reasoning there is that while the languages and technologies change, the foundations of math don&#x27;t change as much, and it will help you reason about the problem you&#x27;re looking at.<p>Information theory, for example, will help you understand the limits of compression and transmission. If you&#x27;re working in networking or file storage this is useful stuff to know as there are lots of people who will make wild claims about a new compression algorithm that sounds way too good to me true. If you have a decent understanding of information theory there&#x27;s a good chance you won&#x27;t even need to see the code to debunk the claim. And it&#x27;s also useful if you&#x27;re working on some code and it&#x27;s not performing up to your expectations: you know, because of the theory, that the transmission rate isn&#x27;t what it could be and that gives a good start for debugging your algorithms points you to the design of your system.<p>Mathematics is your candle. It&#x27;ll help light the way in a dark room where the dark room is your lack of knowledge and experience in a particular problem domain.
评论 #22291489 未加载
stillmotion超过 5 年前
I&#x27;ve followed this curriculum for the past two years and I can report back that it will rid yourself of those insecurities. But I don&#x27;t recommend following it to the letter. I used it as a starting point for each topic and then found multiple text books, university curriculums and hands on projects that fit my style of learning. For example, everyone recommends SICP, but I had a hard time staying with the original text book. Both Berkley and MIT have great video lectures based on the book and updated lectures based on Python. Watching both of these gave me a good understanding of the core of what SCIP really was trying to communicate. I later went back and went through the book, but used Racket as the scheme flavor and became familiar with that world.
8589934591超过 5 年前
I really like the resource but some of the courses I prefer some alternatives.<p>1. Programming - IntroCS by princeton - available on coursera with videos and graded assignments. If you require a slightly easier course, then you can check out CS61A from Berkeley or MIT&#x27;s Intro course in python.<p>2. Algorithms and Data Structures - Princeton 2 courses in algorithms - coursera. Alongwith their book and booksite this was a very good resource for me with their graded assignments. I also would suggest CS61B from berkeley.<p>3. Databases - I started learning from Stanford Widom&#x27;s course, but now I actually recommend CMU&#x27;s course. I have heard good reviews for berkeley&#x27;s course CS186 as well.<p>Side Note:<p><a href="https:&#x2F;&#x2F;bradfieldcs.com&#x2F;courses&#x2F;" rel="nofollow">https:&#x2F;&#x2F;bradfieldcs.com&#x2F;courses&#x2F;</a> These are the makers of <a href="https:&#x2F;&#x2F;teachyourselfcs.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;teachyourselfcs.com&#x2F;</a>. I notice that there are many courses, but at the same time $1800 per course is a bit too much considering USD conversion. So, I am looking for reviews if anyone has taken it, and whether the cost is justified. On the fence of joining it because of the cost.
评论 #22289176 未加载
评论 #22290373 未加载
pritovido超过 5 年前
This is a good resource BUT nothing compared with the interactivity that having someone with decades of experience in the industry gives you.<p>At a University you have a constant feedback loop of your knowledge being evaluated by people with experience.<p>A good teacher can give you this global view of a subset of what is really important very fast, so you follow Pareto&#x27;s principle, you use it,you get more interested,you get deeper. This way you become continuously engaged.<p>Imagine you want to read &quot;Structure an interpretation of computer programs&quot;. It is a jewel book, but if you read it you will not understand 95% of it, or what this academic stuff has anything to do with the real world.<p>You need someone with experience that tells you: You spent three weeks making this project, let&#x27;s make it in two hours with this technology.<p>Of course it has taken years for this person to do in two hours what takes you weeks of work, and it will take you also years to be able to do that on the same level.<p>BUT if you read the most important content of this book, study and apply it over a week, you will be able to reduce the work from three weeks to a single week with one week of effort.<p>With a small effort you can get great rewards. That is pareto&#x27;s Principle.<p>But you can not study only the most important principles of a book if you don&#x27;t really know what is important and what is not. That is what a master knows.<p>Imagine that you study English as a foreign student by a book and you study words like &quot;persistence&quot; or &quot;clairvoyance&quot; at the same time you study &quot;make&quot;,&quot;do&quot;, &quot;he&quot; or &quot;she&quot;.<p>Worse, imagine that you study all the words but you don&#x27;t study how they sound, so you make an idea in your head of the sound of the words based on your native language. Now every new word you learn, you learn it with the wrong sound.<p>You need someone telling you: Stop reading the book and do this and then you will understand what the book says, then follow this other part of the book.<p>Having a mentor or master of course is expensive, and that is the reason Universities exist, so masters could be shared and prices go down.<p>If you dot have direct access to a master, I recommend that you follow lectures of masters before you read X book.
评论 #22291695 未加载
评论 #22289860 未加载
zelphirkalt超过 5 年前
&gt; Aim for 100-200 hours of study of each topic [...]<p>Well, for some of those books you might definitely need more time (for example SICP) to get through and do all the exercises plus the required thinking and post processing to understand the essence of them. For SICP 100h and even 200h might be only a quick fly through the 800 something pages, without really having done the exercises (oneself, without looking at solutions, plus perhaps writing tests, spending more time at an exercise when one does not get the solution right away ...) and really having understood the material. Sometimes, when I did not understand some part of SICP of the 40% of what I did of it, I spent a lazy day or two on one exercise, just to be able to understand better and not need to look at solutions online. Sometimes I would hunt bugs for a while too. From that point of view the list seems a bit dubious.<p>I don&#x27;t know many of the books or lectures listed, so I cannot say much about the other books or lectures. Just hope, that the other material in the list is not that voluminous.<p>Something that is missing in the list: Modelling languages and their semantics and all that goes with that. At least where I learned that was a major part of CS, because it is critical in analyzing software and modelling software for development. It is also something, which is often very much lacking in software projects found in the wild, making understanding of the software way harder than it needs to be on the conceptual level. We really ought to draw more diagrams! Also I am guilty of not often putting a diagram in my repositories as well, even if I drew some for myself. Sometimes a diagram pieced together from all the parts I do understand about some program is the only way for me to finally understand the whole program. Good to take this as a personal reminder for myself.
_wldu超过 5 年前
If I lacked a formal CS education and wanted to understand more, I would focus on algorithms. They are the foundation of everything at the software layer. The two basic questions you will learn to answer:<p><pre><code> Is a certain solution to a problem correct? Can we make it faster or more efficient? </code></pre> Understanding algorithms doesn&#x27;t really matter unless you need to scale or be very efficient, but when that is important, a good understanding of algorithms will be invaluable to you and your employers.<p>Also, this is the only major difference I&#x27;ve noticed between people with a good, theoretical CS degree and those without one. All the other skills are about the same.
gabrielrdz超过 5 年前
Posting this since I don&#x27;t see it mentioned yet.<p>Scott Hanselman and Rob Conery created the Imposters Handbook. I believe both of these guys are self-taught, and they are incredibly good at what they do.<p>They put it together precisely for self taught developers with no formal CS background.<p><a href="https:&#x2F;&#x2F;bigmachine.io&#x2F;products&#x2F;the-imposters-handbook&#x2F;" rel="nofollow">https:&#x2F;&#x2F;bigmachine.io&#x2F;products&#x2F;the-imposters-handbook&#x2F;</a> <a href="https:&#x2F;&#x2F;bigmachine.io&#x2F;products&#x2F;the-imposters-handbook-season-2&#x2F;" rel="nofollow">https:&#x2F;&#x2F;bigmachine.io&#x2F;products&#x2F;the-imposters-handbook-season...</a>
fergie超过 5 年前
It looks OK.<p>But:<p>teachyourselfcs.com has actually quite a lot of advanced reading and practical work buried in it. For the many thousands of hours that you would have to invest to do teachyourselfcs.com justice, you could quite easily complete a CS course at university.
评论 #22289583 未加载
bambataa超过 5 年前
It&#x27;s definitely a very good resource and it&#x27;s been a great help to guide my learning. It&#x27;s definitely still a huge commitment in time (and textbooks!).<p>I&#x27;ve been working on a single volume introduction to computer science. The first chapter (on theory of computation) is available free on <a href="https:&#x2F;&#x2F;thecomputersciencebook.com" rel="nofollow">https:&#x2F;&#x2F;thecomputersciencebook.com</a>. I&#x27;d be grateful for any feedback.
klundqist超过 5 年前
This is very good stuff. I&#x27;d also recommend CS50x, [1] the Intro to Computer Science from Harvard for those who need an intro before diving deeper, as it gives a solid grounding in most of these topics.<p>[1] <a href="https:&#x2F;&#x2F;www.edx.org&#x2F;course&#x2F;cs50s-introduction-to-computer-science" rel="nofollow">https:&#x2F;&#x2F;www.edx.org&#x2F;course&#x2F;cs50s-introduction-to-computer-sc...</a>
rcavezza超过 5 年前
It&#x27;s fantastic. I loosely followed it for a few years to get better at interviewing (Note: For interviews, you generally need data structures and algorithms knowledge).<p>Now I&#x27;m following it pretty closely while selecting classes for my software engineering master&#x27;s degree.
jupiter90000超过 5 年前
If the goal is resolving insecurities, I don&#x27;t know if the site will help. If the goal is to learn more about computer science topics that haven&#x27;t been studied previously, it will help. I can say this as someone who has used many of the resources on that site.
charlysl超过 5 年前
It is a great reference, but, IMHO, there are some alternatives that I prefer:<p><i>Programming</i>: I would instead prefer the combo <i>&quot;How To Program&quot;</i>, don&#x27;t be fooled by the name, this course is the business (which will give you a rock solid foundation in systematic program design, TDD, clean coding and recursion, but most importantly, you will understand exactly why you should design your data abstractions first, because they will structure your functions), followed by <i>&quot;Software Construction in Java&quot;</i>, which will give you a rock solid and principled software engineering foundation (writing industrial strength tests, specs, ADTs, mutability, grammars, concurrency, the works). Both are free in edx (also check out the latter&#x27;s ocw version, 6.005). As a bonus, check out Daniel Jackson&#x27;s approach to software design in ocw&#x27;s 6.005 from 2008, and how he explains three approaches to software design (state machines, functional and relational&#x2F;OO). The best and most systematic explanation that I know of how to properly use the much maligned Design Patterns, and a very useful in practice design technique called JSP (although the course is in Java, all the design techniques are universal, this JSP stands for &quot;Jackson Structured Programming&quot;).<p><i>Computer Architecture</i>: the MIT combo <i>&quot;Computation Structures&quot;</i> (on edx) and <i>&quot;Computer System Engineering&quot;</i> (on ocw and youtube) will teach you systems design all the way from atoms to the whole internet. Great instructors.<p><i>Algorithms and Data Structures</i>: again from MIT, on OCW (as <i>6.006</i>, with videos, recitations and assignments in Python), a good balance between theory and practice. The dark horse here is the TA Victor Costan, who won several European level coding competitions as a kid, and will teach you algorithm design in practice. Eric Demain&#x27;s lectures on Dynamic Programming should become the reference, his &quot;5 steps&quot; approach is amazing.<p><i>Operating Systems</i>: mit&#x27;s <i>6.828</i>, from 2011 (has videos for all lectures). You will have to read and understand all 10.000 lines of code of an old Unix (with support from the lectures), and write a large portion of you own OS.<p><i>Databases</i>: I would have a look at <i>CMU</i>&#x27;s inspiring Andy Pavlo course (on youtube), just watch his intro lecture from 2018 to get a taste. Also have a look MIT&#x27;s <i>6.813</i> from 2014 (some vids), created by Stonebraker, with substantial assignments based on SimpleDB (in Java, if you prefer it over CMU&#x27;s C++).<p><i>Distributed Systems</i>: MIT&#x27;s 2015 <i>6.824</i>, by Morris (of the worm). Great text notes, and many lectures on youtube. Assignments in Go, where you will implement your own Raft and a distributed key-value store.<p>Some extras:<p><i>Cryptography</i>: <i>Paar</i>&#x27;s explanations on youtube are crystal clear.<p><i>Data Science</i>: Berkeley&#x27;s <i>Data8</i> (2016, may seem basic, but the instructor is amazing and you will learn how to look at data), followed by <i>Data100</i> (summer 2019, more technical, with Python tools on Jupyter galore). Will give you good intuition if you don&#x27;t know much stats, and to really worry about your data samples (bias!) (<i>garbage in, garbage out</i>, not sure if this cliche is ever mentioned in these courses, but you will understand exactly how or why, and how to avoid it, or, at the very least, to tune your BS detector).<p>etc
评论 #22287222 未加载
评论 #22288733 未加载
mountainofdeath超过 5 年前
Related question: How can I assess my level of knowledge?<p>I am also a Senior SWE at a large, famous company with an Electrical and Computer Engineering background, so I had a substantial amount of overlap with the typical CS curriculum with the notable exception of a compiler class.
danbmil99超过 5 年前
For what it&#x27;s worth, I&#x27;ve had a decent career as a self-taught programmer. Over the years, I&#x27;ve absorbed most of a Cs education in the following way:<p>Whenever I approach a new problem that I don&#x27;t understand, I take the time to read up on the principles and original work that led to the standard approach to that problem. If the papers reference something I don&#x27;t understand, I look that up, and so on.<p>I was doing this before the internet became a useful resource (lots of Library time). it&#x27;s become much easier now.<p>It also helps to have a mentor or two who understand the area you&#x27;re interested in, and who don&#x27;t mind you taking their time with endless questions.
WheelsAtLarge超过 5 年前
Generally the hardest part of self teaching is the ability to stick to it. CS is generally complicated and long. It takes lots of self control to finish.<p>You should make sure you keep that in mind and make a plan so you will finish.<p>Good luck.
jspaetzel超过 5 年前
Pretty good! My CS degree focused most on math, algorithm, data structures, programming, and computer architecture.<p>The other topics I don&#x27;t really think of as computer science, more as electives a CS student might take.
danesparza超过 5 年前
Hint: Impostor syndrome is a thing (see <a href="https:&#x2F;&#x2F;www.hanselman.com&#x2F;blog&#x2F;ImAPhonyAreYou.aspx" rel="nofollow">https:&#x2F;&#x2F;www.hanselman.com&#x2F;blog&#x2F;ImAPhonyAreYou.aspx</a> for more information). Taking these courses probably won&#x27;t fix that.<p>But there is most likely nothing wrong with these courses. Just looking at the programming section: MIT and Berkeley are no slouches when it comes to CS!
commandlinefan超过 5 年前
All the books are great recommendations, except for Computer Networking (Kurose &amp; Ross). That was the textbook we used when I was in grad school, and it was terrible. The best book on networking I’ve ever read was TCP&#x2F;IP illustrated - it’s a bit out-of-date, but once you read it, you’ll understand the core networking concepts well enough to figure out the current state of modern computer networks.
评论 #22289989 未加载
mesaframe超过 5 年前
I must say all the book suggestions are really great. Except for P&amp;H. As mentioned in comment he now recommends CS:APP over it and I would do too.<p>Also, for compilers I would suggest C compiler design [1]. It provides both implementation and theory instead of just theory which the dragon book does.<p>[1] <a href="https:&#x2F;&#x2F;holub.com&#x2F;compiler&#x2F;" rel="nofollow">https:&#x2F;&#x2F;holub.com&#x2F;compiler&#x2F;</a>
评论 #22290269 未加载
lazamar超过 5 年前
I followed that curriculum and it sorted me out with regards to algorithms and networking. I recommend it very highly.<p>The idea is that once you have read these books you have the knowledge needed to identify what kind of problem you have in front of you, what tools are known to solve it, what are their disadvantages, and most importantly what should you search for to find out more about the problem.
martinesko36超过 5 年前
Looks about right. FWIW, I&#x27;m a CS student at a top CS school in US and we use all the same textbooks as the website recommends.
drfuchs超过 5 年前
None of the content seems to cover Turing Machines and The Halting Problem, and all the rest of the Automata and Language Hierarchy stuff in, say, Ullman&#x27;s &quot;Introduction to Automata Theory, Languages, and Computation&quot;? Computer <i>Science</i>, indeed!
terrycody超过 5 年前
This article is well structured and I can say its one of the best resource guidance:<p><a href="https:&#x2F;&#x2F;www.afternerd.com&#x2F;blog&#x2F;learn-computer-science&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.afternerd.com&#x2F;blog&#x2F;learn-computer-science&#x2F;</a><p>PS: not my own website
bfung超过 5 年前
Off topic: weird HN bug?<p>I see this item on front page as item #12 and on the second page as item #39. The latter was posted 14hrs ago and former 7hrs ago (10:35am PST) — both have the same item id.
atg_abhishek超过 5 年前
Looks like a fantastic resource and covers all the fundamental concepts to get you started on your CS path. Highly recommended!
ashhimself超过 5 年前
I am looking to read more about business; would love something similar for an MBA.