22 ms·
Teach Yourself Computer Science
- dang 6y agoSee also: 2018 https://news.ycombinator.com/item?id=17581589 https://news.ycombinator.com/item?id=17581589 2017 https://news.ycombinator.com/item?id=13862284 https://news.ycombinator.com/item?id=13862284
- hejja 6y agonot op, but i think it's good enough to warrant reposts so new people can find it.
- grzm 6y ago‘dang is saying “see also”, not “this doesn’t need reposting.” From what I’ve seen, reposts after a year or so are fine.
- brudgers 6y agoAlso past comments are sometimes better (and other times not) than average. Just depends on who chimes in and their mood and what else is happening in their world at the moment.
- dang 6y agoAs grzm and brudgers pointed out, the goal of such comments is simply to point curious readers to related threads they may find interesting. If there were a problem with the repost we'd mark it a dupe instead. Reposts are fine on HN after a year or so, or if a story hasn't had significant attention yet. This is in the FAQ: https://news.ycombinator.com/item?id=23150065 https://news.ycombinator.com/item?id=23150065. I've been looking for a brief, unambiguous phrase that can point people to related threads without having to spell all this out every time. A reader suggested "See also" which seemed like it would hit the spot: https://news.ycombinator.com/item?id=23150065 https://news.ycombinator.com/item?id=23150065. I guess not!
- Wowfunhappy 6y agoHmm, "see also" strikes me as pretty unambiguous phrasing. I wonder if the problem is that when people are skimming, they're going to to miss a pair of short words in favor of the larger URLs (and by "larger" I mean the physical space the text occupies on screen). A bunch of links to the same post will always seem damning if you don't know better.
- flyingfences 6y ago> Note: this guide was extensively updated in May 2020. Prior discussion may not be exactly relevant on some points.
- 29athrowaway 6y agoI like Algorithms by Robert Sedgewick. It's a great book. He also has free online courses based on the books that are of excellent quality: - https://www.coursera.org/learn/algorithms-part1 https://www.coursera.org/learn/algorithms-part1 - https://www.coursera.org/learn/algorithms-part2 https://www.coursera.org/learn/algorithms-part2 There's a website for the book as well, that has code that is well organized and commented. Unfortunately excellent books like "Programming Pearls" have code examples that use weird naming conventions that just make me just want to punch the wall. For competitive programming and interviews, Antti Laaksonen's books are fantastic: https://www.cses.fi/book/index.php https://www.cses.fi/book/index.php
- M5x7wI3CmbEem10 6y agoI’ve heard that Part 1 of the algorithms course is sufficient for new grad interviews. Can you verify?
- 29athrowaway 6y agoI got an interview that involved part 2 (substring search), which I solved using KMP.
- M5x7wI3CmbEem10 6y agosenior interview or new grad?
- 29athrowaway 6y agoPhone interview for a senior role, not onsite.
- M5x7wI3CmbEem10 6y ago> I’ve heard that Part 1 of the algorithms course is sufficient for new grad interviews
- 6y ago
- NotSammyHagar 6y agoLooks like a decent start, great to put these various sources together. Under algorithms, I found discussions of big o time complexity, one of the real killers for the non-cs majors in terms of interviews and career growth. Under algorithms I found it on the Coursera course by "Tim Roughgarden ... available on Coursera and elsewhere".
- miguelrochefort 6y agoAs a 30 year old software developer who's now considering going back to school for the next 3-4 years to get a degree, I wonder if I should blame these kinds of resources for making me believe that I could learn everything on my own and that a degree was unnecessary. Having learned this material in school would have made my life so much easier... For context, I recently received a lot of pressure to get a degree, despite years of experience and good knowledge of CS fundamentals.
- wincy 6y agoWhere is the pressure coming from? Your employer? I’d guess it varies widely between companies.
- miguelrochefort 6y agoThe pressure comes from everywhere: - Current employer: "Your salary is already good for someone without a bachelor's degree" - Current employer: "We're sorry but this promotion requires a bachelor's degree" - Future employer: "We're sorry but we hired someone with a bachelor's degree for this job" - Date: "You don't have a bachelor's degree?" - Friends: "You're the only one without a bachelor's degree" - Meetup: "What did you study in college?" - Country: "We can't grant you a work visa without a bachelor's degree" - Family: "You will have more opportunities with a bachelor's degree. We'll even pay for it." (offer expired) - School: "Here's a scholarship" (offer expired) - 80,000 hours: "You basically don't exist" - Brain: "Maybe I'm not a superstar coder and job security is important" Perhaps some of these are hypothetical, but they feel the same as if they had been concretized.
- M5x7wI3CmbEem10 6y agodoes similar pressure exist for a Master’s Degree? I’ve considered OMSCS for this reason.
- miguelrochefort 6y agoAsk me after I get my bachelor's degree. I suspect the pressure never really goes away.
- jgwil2 6y agoMain updates as of May 2020: Computer Architecture: added Computer Systems: A Programmer's Perspective as first recommendation over nand2tetris. Compilers: Crafting Interpreters added as first recommendation over dragon book. Distributed Systems: added Designing Data-Intensive Applications as first recommendation over Distributed Systems. Online availability of some video lectures has changed as well.
- kyawzazaw 6y agoMy school actually use the same book for Computer Systems (similar to CMU's 15-213) but less intensive. I wonder what parts the 400-level course use for Computer Architecture.
- arcturus17 6y agoHarvard also uses the CS:APP for their first systems course, CS61.
- mesaframe 6y agoCS:APP is recommendation over Computer organization and design.
- seven4 6y agoWhenever i have someone ask me where to get started on CS - i give them a few options tiered to try and ensure some stickiness/higher utility for them specifically. ~Some Existing Touch Point With CS Teachyourselfcs.com is definitely in the conversation - in general I recommend it to friends who have a pre-existing "gateway" to the field (software engineer or otherwise). The page talks about progressing from "type 2" to "type 1" software engineer - a deeper understanding affording a richer career/experience. ~Relatively Fresh - but have strong intent For people who are more "virgin" and fresh but are willing to put in the work - I recommend OSSU ("open source curriculum") - and i've found for whatever reason that structure has let them gradient in with more success. (https://github.com/ossu/computer-science https://github.com/ossu/computer-science) ~Intrigued/Engaged - but intent is still nascent For people who have a fleeting interest but don't necessarily have the time or intensity about their interest i usually recommend a starter python course - 90% of these people will fall off the path unless there is a more permeable access-point to the space that offers a positive feedback loop. The university of Michigan has some engaging options.
- kovek 6y agoI remember telling people to read "The Python Tutorial" on python.org , if they wanted to write Python. It takes a few hours for an experienced programer, and a couple of days for a beginner. People had difficulty starting.
- visarga 6y agoA beginner might have trouble assimilating this information - too few examples, not enough entry level drilling on data types, operators, flow control and functions. For example they might forget to put quotes around a string or not know how to use two for loops, one inside the other, even if they know how to use one in isolation. It's hard to grok how to compose things even if the student saw how to use them in isolation. And for the teacher, it's hard to keep the lessons easy enough at that entry level.
- kovek 6y agoQuotes to indicate strings have been a problem, definitely. It's odd because it's so clear for me. Yes, I was lucky to dabble in all this a lot when I was younger.
- hliyan 6y agoThough it doesn't cover programming directly, I've always loved Computer Science from the Bottom Up - https://www.bottomupcs.com/ https://www.bottomupcs.com/
- ipnon 6y agoI am planning on returning to university for a CS PhD after discovering that studying this curriculum is consistently the highlight of my day. Studying CS is the most interesting thing I do on a regular basis. I owe my thanks to the authors.
- joddystreet 6y agowhat topic would you be pursuing for rnd?
- xmprt 6y agoWhat field are you going into?
- pretzell 6y agoI'm self-taught too, and strictly interested in research-focused CS masters or PhD programs (as opposed to industry-focused cash-cows). I think I'm mostly interested in studying PL or program synthesis, but I'm also open to other ideas. How did you make that jump from self-taught to qualified for a PhD program?
- throwawaygh 6y agoI made this exact jump. The answer, for me, was a four year bachelor's degree. I was a self-taught software engineer, not a self-taught computer scientist. I was writing production code for fairly normal stuff, not proving theorems or implementing research prototypes of new ideas. So YMMV. If you can make it through TAPL or PFPL on your own, then you probably know enough to be useful to some random grad student somewhere. Latch onto an implementation effort, get authorship on a popl/splash/pldi paper or two, and that's probably enough to convince some faculty somewhere to take a chance on you. But most good graduate programs still require a regionally accredited degree. Getting an exception to that rule will likely require a publication record. (Getting into good graduate programs often requires a publication record in any case. I recommend against attending not-good graduate programs.)
- deleted 6y ago
- 627467 6y agoI wonder if anyone here has tried this (or other) self taught CS successfully while not being a "self-taught engineer or bootcamp grad". What if you are a designer or PM type with several years experience in software industry? Is it productive to skip real experience or actual classes to get into CS/engineering?
- jgwil2 6y agoYou could certainly try to start learning to code with SICP and go from there, but for the most part these resources will be much more valuable to those who have some prior background in programming.
- bigasscoffee 6y agoSICP sounds like a big waste of time when you can follow another guide in a language like Python and make applications along the way.
- stormdennis 6y agoYeah! Yeah! I'd say your onto something here buddy!
- bigasscoffee 6y agoAgree/disagree, but after doing SICP myself, following other methods and making projects at the same time (or working on things I was interested in) forced me to learn a lot more than just doing some assignments in a language I would never use again.
- arcturus17 6y agoI'm a PM turned programmer, I did both. I started with Harvard's CS50 and web programming in Node independently, and I ended up with a masters in software engineering and can now push production-ready code (mostly in React/Node by choice, although studying university-level classes has exposed me to different paradigms and languages: C, Java, OCaml...) I whole-heartedly recommend concurrently studying first principles and a couple of applied technologies. They serve different purposes but are ultimately connected in the big picture. University courses very rarely teach how to make real-life projects. Conversely, learning real-life technologies rarely shows you the theoretical principles that fuel them, at least not explicitly. React/Redux for example have really interesting ideas on managing state drawn from functional programming. To churn out React code, you certainly don't need an FP course or formally studying the pains of managing state in programs, but I found it to be immensely helpful. Same with many other areas: studying systems and networking will help you with many back-end technologies, compilers can help you understand many different programming languages, etc. I don't think there's a program that teaches both, because it's probably impractical to design it. Simply pick one theoretical route like Teach Yourself CS and a couple of applied technologies, and work on them simultaneously.
- sjperez 6y agoHas anyone ever found a guide of similar format and quality for data science? I would love to find a similar collection of resources for learning data science fundamentals (math, statistics, programming, etc.)
- mathnmusic 6y agoYou can find resources (including learning plans or "syllabus") at LearnAwesome.org . For eg: Machine Learning: https://learnawesome.org/topics/d6e39f8d-1ba0-4d46-9fbe-771c89700ebf-machine-learning https://learnawesome.org/topics/d6e39f8d-1ba0-4d46-9fbe-771c...
- hckr_news 6y agohttps://github.com/ossu/data-science https://github.com/ossu/data-science
- paulcarroty 6y agohttps://online-learning.harvard.edu/subject/data-science https://online-learning.harvard.edu/subject/data-science
- ithrow 6y agoShouldn't the Math for CS come before the Algo book?
- bigasscoffee 6y agoIn most programs, you take 1-2 programming classes before taking DS/Algs. There really isn't much of a prereq other than 1 year of programming classes.
- alexashka 6y ago> If you’re a self-taught engineer or bootcamp grad, you owe it to yourself to learn computer science. No, you don't. I know all these topics and I don't recommend anyone working in a corporate environment to learn any of this. It'll likely result in you resenting your job, your peers and the entire software industry. --- I gave my heart to know wisdom, and to know madness and folly: I perceived that this also is vexation of spirit. For in much wisdom is much grief: and he that increaseth knowledge increaseth sorrow. 1:16-18; King James Version
- thewarrior 6y agoWhat does it say about our industry if learning all this makes workers hate what they do ? By this logic we should cut down on advanced education so people stay content in dull jobs.
- hugey010 6y agoIsn't reduced education a method for keeping people content in most situations?
- deleted 6y ago[deleted]
- alexashka 6y agoI've included a Biblical quote concerning this matter to point out that this is an old human problem, not merely an industry problem. > By this logic we should cut down on advanced education so people stay content in dull jobs. This would indeed be the case, if corporate jobs were an inescapable necessity.
- peferron 6y agoThat's just FUD. Recommending ignorance while quoting religious text is so over the top that it makes me wonder if you're just trolling.
- mesaframe 6y ago
- panic 6y agoHas anyone here learned a subject by going through one of these "teach yourself" lists? I've learned most of what I know about computers on my own, but it wasn't from following a list of textbooks. And when I've tried to follow a course like this for other subjects, despite my initial interest, I've found myself unable to make it through more than a couple chapters of the first textbook before running out of steam. But somebody must be getting some value out of these things, right? Am I just bad at studying? Or not as interested in the subjects I'm trying to learn about as I think I am?
- hckr_news 6y agoI graduated with a degree in BioSciences a few years ago, and elected to not do grad school like my peers. I saw no point of losing thousands of dollars to do a master’s in Bioinformatics/Data just to get a jr level job. That summer after graduation from undergrad I attempted to learn CS and go through OSS Computer Science program and TeachYourSelfCS to break into the industry. The problem was a lot of it wasn’t job relevant and it felt very rigid, and sometimes even more complex than it needed to be. These University level courses aren’t really necessary. I like to view coding as a trade and skill, something that can be learned and applied right away rather than a mechanism for research, feel free to disagree with me. In any case, I just wanted to code and build software (sorry CS purists...). I slowly found myself less interested in CS theory and more in software engineering. Feeling disenchanted with CS, I decided to spend a few months learning web and software development fundamentals through online courses on Udemy and Frontend Masters. After that I did a certificate in fullstack development at my alma matter (cost me a couple thousand dollars, much cheaper than grad school). I will say I was pretty lucky that as soon as I finished the full stack program, I was hired by a small software shop.
- pretzell 6y agoI think that CS vs SWE thing happens with a lot of people, and I got caught there, too. Luckily, I ended up really liking CS and it introduced me to the field, whereas otherwise I would've gone for SWE. There really needs to be a 'teachYourselfSWE' for people who are into that.
- M5x7wI3CmbEem10 6y agohow much of this curriculum is necessary for a FAANG job? I’d love to go through all of them, but I’m constrained with work as well, so I’ll have to prioritize.
- hckr_news 6y agoHonestly, start with web or mobile development and start working on projects. Start with the fundamentals and go from there. CS theory is great but it’s not gonna pay the bills.
- M5x7wI3CmbEem10 6y agoFAANG interviews do cover DS, algorithms, math, and OS, though.
- voz_ 6y agoPretty necessary, I cant imagine working at a FAANG without at least having read and understood "Designing Data-Intensive Applications" cover to cover.
- hckr_news 6y agoReally cover to cover? Don't think that's necessary unless you have deep interest in the subject. There are folks who can barely walk and chew gum at the same time, working at FAANGs.
- M5x7wI3CmbEem10 6y agojust to get through the new grad interview, I mean.
- throwawaygh 6y agoMore than all of it, but also none of it. You can always just hack the interview process if your primary goal is a job at a particular Big Co. In that case, learning all of the material is probably an extraordinarily inefficient path toward your goal. But "any dumbass can hack can hack mega-corp hiring processes" is sort of obvious. If your goal is to do the real thing, as opposed to knowing how to hack the American Corporate Tech Giant mechanism for determining whether you know the real thing, then the answer is "teaching yourself the content knowledge in this list sort of misses the forest for the tress". I think a lot of low-cost/open source/self-directed programs sort of miss one of the points of education. The reason for learning all that stuff in CS courses is more than just the content knowledge. It's also the intellectual history of the field, the problem solving approaches, how people in this field communicate, etc. If you think of fields like Econ or Law or Medicine, it's easier to see. There's some raw content knowledge (the rules of evidence, human anatomy), but also there's the huge amount of stuff around that content knowledge. Like, yes you need to know the rules of evidence and the names of every bone. But... there's also a bunch of other stuff you're supposed to be picking up as a result of going through the process of learning that material. The self-study approach somehow misses a lot of the "stuff you're supposed to learn as an effect of learning the material", especially in CS.
- bpatel576 6y agoJust going to drop this link here:https://news.ycombinator.com/item?id=23564832 https://news.ycombinator.com/item?id=23564832
- paulcarroty 6y agoSave you a click: TeachYourselfComputerScience Slack channel https://join.slack.com/t/teachyourselfcs/shared_invite/zt-f80pmv4z-bdeyPwQq2DH9I4_Ya9IMnQ https://join.slack.com/t/teachyourselfcs/shared_invite/zt-f8...
- cel1ne 6y agoI like to compare CS to medicine. Most topics of it aren't difficult to understand, but overall it's just a lot of information. If you want to get a comprehensive CS-education, you have to accept that it takes years of studying, learning and practise.
- drchiu 6y agoAgree with this. I’ve got a medical degree as well as self taught developer for 15+ years. The longer you do it, the easier it becomes as the knowledge just kind of seeps through immersion. But I can imagine for a mind that’s new to either topic can feel quickly overwhelmed without significant motivation to overcome that learning inertia.
- jimmaswell 6y agoWould you say CS is generally easier, with a smaller body of fundamentals, and a front-end JS dev could swap places with a back-end C# dev and the two would get up to speed a lot faster than an orthopedist and cardiologist, with all the specialized information in those two fields? Medicine just comes off like a lot more memorizing of an enormous volume of disparate information compared to programming.
- diffrinse 6y agoFrom a frontend dev perspective a complex system like a living human being is nature's monolith of legacy hacks on top of legacy hacks, but you're damn right it holds up under millions of requests per second
- drchiu 6y agoI'd say that in CS, there's a lot more transferrable knowledge. In medicine, there's a lot of specialization and niche knowledge. The cardiologist would know very little about orthopaedic specialist, for instance. I was a GP myself, and likely knew more about medicine & surgery in general. Although I had less specific knowledge, I could integrate information better (eg. Project manager, if you will, vs database specialist). So yes -- in CS, if you work in an area with a lot of general knowledge -- you are likely to get up to speed faster. In medicine, if you're a GP, you can probably undergo additional specialist training much quicker than someone who first pursued a single specialty first.
- sergiotapia 6y agoWhere would one go if they had money but minimal time to get a formal online education in CS? Syllabus, other students to discuss ideas with, etc?
- mcguire 6y agoSend me $1000. Where do you want the diploma to say you got your Ph.d.?
- sergiotapia 6y agoGood Programmer and Code JS where do i send it?
- brainless 6y agoAre you thinking or debating if getting a deeper understanding of CS will help you or your career? I am thinking of the same. Even though I have a Bachelor of Science (BSc) in Computer Science, it has been 14 years that I actually used any of it. I regret it sometimes since I know what it is to know how things work underneath the high level languages (PHP, JavaScript and Python for me). Lately I have started taking more interest in CS and I think part of the reason is Rust. You could be learning Go, Swift or any similar language and come to similar feelings. In Python (my language of choice for the last 7 years along with JavaScript) I do not really have to care about pointers, stack or heap allocation, how memory gets create or cleaned, etc. I also do not need to know if there is a virtual machine, a garbage collector, etc. Data types and how they are handled are somewhat important but I rarely get slapped by the Python interpreter for mistakes. To me it seems that a lot of developers are choosing to go into more typed and lower level (closer to metal) languages. My gut feeling says this is happening because we can not crank up core speed from 2GHz to 3Ghz to 4Ghz and beyond as easily as we did pre-2Ghz era. Yes we hit ceilings of per-core power. But we have more users than ever before and the world seems to be eager to bring computing to even larger audiences. All this is great, but it means developers need more refined and powerful set of tools that can work in low-power environments, boot up fast and deliver more computing throughput. The high levels of abstractions that most of us have enjoyed will stay but there will be new territories where you want to push code that is way, way more efficient. If we want to work with them, we need to know not only how to push a Template into an `<H1 />` but about the metal that is underneath. From how browsers work internally to how networks work, how processes work or communicate, how memory is allocated and so forth. So this is a choice we have to make individually. I choose to learn and I am going with Rust and spending time to learn CS again. It is a slow process though, I have full time commitment to my product as a solo founder. Cheers!
- ozim 6y agoOf course everyone should learn because otherwise they will be left behind with pay or life in general. Just setting it up in a negative way should not be there like "type 1 vs type 2". There is much more to be achieved when you are nice to people and learn to cooperate in a helpful way than when you are master of algorithms and low level operating system details.
- ilaksh 6y agoThis is a pretty good website. But I have a huge problem with the premise as stated at the beginning of the website: "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" .. They then go on to list various categories of information and skills in each high-level topic. First of all, it implies that someone who is "self-taught" may be basically equivalent to someone who just finished a bootcamp. That is ludicrous. A "self-taught engineer" might have been programming and studying computer science topics for 30+ years, whereas someone who only attended a bootcamp may have only had four months of training or something. Secondly, it implies that self-taught engineers do not have computer science knowledge or skills. This is also a ridiculous belief. Now, examining the specific list of topics. 'Programming. Don’t be the person who “never quite understood” something like recursion.' -- This implies that self-taught engineers do not understand recursion. If someone calls himself a "self-taught engineer" or "bootcamp graduate" and does not understand recursion, then he should not call himself an engineer and/or should not have been allowed to pass the bootcamp. Again, this description shows that the creator of the website assumes that "self taught engineers" and "bootcamp graduates" in fact have virtually no useful skills and knowledge. Its asinine and quite insulting. 'Algorithms and Data Structures. 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.' The ridiculous implication here is that self-taught engineers don't know what a stack, queue, or tree is. Another general criticism I have is that the creator of this website seems to think that watching videos and reading books is a good way to learn. Unless the books or videos have exercises (and the book recommendation I saw did not have exercises), that is horrible advice and a huge waste of time. If you are just looking for something like a survey or reference, passively watching the videos or reading the books could be useful. However, there is nothing so special about these books or topics that they cannot be learned about from many different websites.
- dlhavema 6y agoSome people learn great by watching videos. Some people learn great by reading books. I personally learned the best by taking an example ripping it apart and changing it to do something new.
- t3rmi 6y agoI would recommend http://www.bottomupcs.com/ http://www.bottomupcs.com/ if you're looking for a quick crash course. It's a bit out of date but its the shortest book I've found which covers most of the computer science stack.
- Aperocky 6y agoHow I as a mechanic major started in CS: My lab had a project that nobody tended to, an evangelist at the lab told me all the good things about linux and git so I bought a burner laptop for $250, wiped the disk, installed ubuntu and wrote 3000 lines of the crappiest code you can ever imagine. But it worked. So now when someone ask me for advice to start fresh in software engineering, I always tell them you just have to wipe your computer and install $DISTRO. And start from the terminal, everything else will just come naturally (with deadline pushing it might get faster).
- thundergolfer 6y agoAt 200 hours per subject, it would take 2 years to complete if studying part-time (20hr/week) during only the working weeks of the year (92 weeks). If you're uncomfortable working+studying 60-70hrs a week, it would probably take 4 years. Are there blog posts around where people share their experience of undertaking and completely this endeavour?
- mcguire 6y agoHeck, I don't know of any blogs with people sharing their experience of an undergrad CS degree.
- thundergolfer 6y agoGood point. I’ve been meaning to write up my experience, because I feel that it was really poor and Australian students need to be more aware of how sub-par our CS education system is.
- danielscrubs 6y agoIs this computer science books? Seems like great computer engineering books but I have only read a few of the suggested ones. Is there any math or science in those books (aka, could I write a paper from it)? Anyone that have read them that care to chip in?
- mcguire 6y agoI think you have a very strange definition of computer science. There isn't enough math, but there's nothing in the undergrad CS curriculum most places to "write a paper from".
- niklasd 6y agoI really liked "The Computing Universe" by Tony Hey. It's a book which covers most of these topics on a higher level, but I felt it was (very roughly) an abstract of what I learned in the first CS semester. So I find it a very good introduction into the field for interested non-CS people.
- stormdennis 6y agoI'd like to know the reasoning behind replacing the very approachable, concise, hands-on and doable Nand to Tetris course with what looks like an enormous textbook.
- RobertKerans 6y agoAre you reading a different article to the one being linked?
- thundergolfer 6y agoCan anyone with a CS undergrad from an elite US college (Stanford, Berkeley, MIT, Carnegie Mellon) comment on whether they feel their undergrad covered 100-200 hours worth of these subjects? As someone with an Australian CS degree, I feel like my curriculum covered less than half of this properly.
- tinco 6y agoThat's definitely strange. I studied at a university in the Netherlands which implemented what I think was a European standard curriculum, and what this article mentions is a subset of the first two years of the undergraduate degree if I remember correctly. Some elective courses are missing, and AI though it is mentioned. We also used many of the books mentioned here. Also back when I did it there were more seperate math courses that we shared with the maths undergrads. I know that they stopped doing that after I graduated.
- thundergolfer 6y agoI feel like a lot of my coursework was overstuffed with learning and re-learning waterfall vs agile, and fluff subjects like 'user-centred design' and 'professional computing practice'. The latter was basically 'how to make a resumé' and 'how to not be an arsehole in email'.
- tinco 6y agoThat sounds like I might have been a professional education instead of a scientific education. Nothing wrong with that, you could get a full computer science degree from our university and not be able to code for shit. You definitely can't hire university grads blindly. You often see developers act tough about how knowing how a CPU works is important for being a developer, and it is, but knowing that doesn't make you a good developer. It just makes a good developer better.
- mcguire 6y agoWhere was this?
- 6y ago
- magnusmagnusson 6y agoThis site has been an amazing resource for me. Easily the best 'self-learning' way for me.
- kang 6y agoWithout formal language study, how is this computer science? This is computer engineering. Please fix the title atleast on HN.
- deleted 6y ago[deleted]
- ascotan 6y agoHaving gone through all of these course myself, I'm wondering if this stuff is really relevant to today's workforce? Compiler Design? How to build an Operating System? I remember in a job writing my own BNF grammer and a a parser for it to optimize something or other and I got back basically "WTF" on the code review. I would say database fundamentals is a must, so is networking. But honestly the rest is iffy. When was the last time you needed to build a red-black tree? I think programming should be a larger part of CS. And no, not in Lisp. I also think ML needs to be more of a thing as well.
- kulig 6y agoCS is CS. Software engineering is a different thing.
- proto-n 6y agoI think ML should be included mostly just the fundamentals to understand what's happening, and to give an accurate radar to students for spotting bullshit.
- pieteradejong 6y agoLooks like the fundamentals of ML would be covered by the Math for CS section.
- deleted 6y ago[deleted]
- dreary_dugong 6y agoTo be fair, this isn't "teach yourself the skills necessary to be successful in a development job," it's "teach yourself computer science."
- pdxandi 6y agoI'm being sincere when I ask: what would you do with a self-taught CS background? I understand many of the larger companies require an understanding of CS principles, but, if not to be a successful developer, how useful is a self-taught CS education? What do you do with it if not software development? In my somewhat limited experience, the more CS-focused folks hold PhDs, and sometimes I feel it's more about the credentials than the education.
- stockstreaks 6y agoHa - super ironic that this would be atop HN today. I've recently decided to dive back into this journey as well. Anyway - I was watching the final lecture of David J. Malans CS50 course yesterday and found this awesome slide he shared. I screengrabbed it and now I share it with all of you. It's essentially "where to go from here and beyond" (by course) https://gyazo.com/919d9deef0d1767f685fab9b4bfc12fc https://gyazo.com/919d9deef0d1767f685fab9b4bfc12fc
- justaj 6y agoI re-uploaded that image to a host that doesn't require JS to view an image, because requiring JS to view an image is peak JS stupidity. https://i.imgur.com/yvA5Eiz.jpg https://i.imgur.com/yvA5Eiz.jpg
- justaj 6y agoWow, apparently Imgur is now redirecting their plain image links to pages which _do_ require JS for viewing. Thus, Imgur has now been removed from the list of image hosts that I use (and I suggest others to do so as well) Instead, here's the actual image, without any the JS: https://i.postimg.cc/hjzXvrNc/yvA5Eiz.jpg https://i.postimg.cc/hjzXvrNc/yvA5Eiz.jpg
- matt_LLVW 6y agoCS50 is how i started to learn CS. The fact that it's freely available worldwide is crazy. I could never follow a Harvard class otherwise, and the content is great.
- natural219 6y agoThis is very good. I would recommend this to anybody considering a career in software. My only problem is that it's not very pedagogical; I don't think "read and study the foundations for 1000 hours, you twerp" is really the best approach to ease people in. I would recommend starting small, making a webpage or some simple fun programs that you enjoy working on. MDN is a good resource (https://developer.mozilla.org/en-US/docs/Learn https://developer.mozilla.org/en-US/docs/Learn) for this, but there are probably better guides / tutors out there that can personalize an approach based on where you're at. Glitch is also cool (https://glitch.com/ https://glitch.com/)
- Iuz 6y agoDoes anyone have a github 'awesome' type of page with aggregated teach yourselfs? I would love to have it for other subjects.
- SMAAART 6y agoThis is nice, simple and essential.
- karmicthreat 6y agoOne thing I'm always amazed by when casually talking to people about what I do is how they don't think they can do it. Many people think that software engineering and programming are some inscrutable thing. Sometimes I try to tell them that it is nothing special, it doesn't take a mega genius or math expert to do it. That the most important skill is just being able to solve real problems, soft skills and breaking problems into parts. As well as the ability to self learn and research. I get the idea that most people don't believe that though. Or they think its a humblebrag. Rant done, it's just frustrating that people limit themselves like that.
- rozularen 6y agoFor me it's exactly the same. Usually I try to explain them saying something along those lines but halfway through and I already find them distracted or confused
- gonzo41 6y agoA lot of jobs are very linear, like taking a task though some steps and wrangling people to help along the way. I think programming in a professional context is a very unique job in how much fresh thinking is required most of the time. Even at low levels you really work in a very independent way and have to make serious choices. Having a ticket rock up for a JBoss 4 app written in Seam and Rich Faces becomes a challenge because yes I know the big topics like Java, App Servers etc but there's all this new old framework knowledge I have to reacquire to solve the issue. Most jobs are not like that.
- bonoboTP 6y agoThere are two sides to this. On the one hand, yes, software needs fresh thinking because reuse is simpler than in other industries (not perfect, sure, maintainable/extensible/modifiable/modular code is really hard to write). In a lot of jobs people have to physically manufacture or process something and it requires effort for each new item. In software, if you write yourself a script that does the weekly maintenance on the server, then you won't have to type it every week. You still have to fix any new problems that inevitably pop up, but you don't have to do the exact same stuff over and over. On the other hand, I think this attitude of programmers is too smug. Many jobs that seem simple have to solve difficult problems and require engineer-like thinking. Sure some low-skill jobs, like cashier or mail delivery or truck driving don't require a lot of novel thinking on a daily basis. The bulk of the job is carrying out what you know. But take for instance event organizers: no two events are the same. You need to negotiate the requirements from the client just like in software, you need to split up the work, plan it all out, execute together etc. Constraints often force you to be inventive. Or how about lawyers? Even in mundane affairs, like divorce, no two cases are the same. There is probably more in common between one corporate mobile app or CRUD system and the other, than the circumstances of two divorce cases. How about doctors? Sure some of it is routine, like much of a GP's work. But in complex surgeries they need to come up with a specific strategy and plan for the individual patient. In fact, I think most jobs paid at the level of software engineers require a similar amount of novel thinking. The contrast is not software vs rest, but well-paid professional jobs vs low-paid, low-skill repetitive jobs (physical and mental as well, like office paper pushing). Furthermore, many software jobs are really 9-5 "manufacturing". Not every dev is John Carmack. There's a huge demand on really simple business stuff and the very same functionality gets built over and over again by different companies for different business clients. These may be lower paid than the fun Google-level research-like creative software jobs, but they are out there. So top software jobs should be compared to the top of other professions, not just to any "white collar" job (because in the latter case you also have to include the "code monkeys" in the software jobs).
- ellsthrow 6y agoI don't understand why so many programming jobs require a comp sci degree when very rarely do they require anything more than "programming"
- zvmxczxvmcz 6y agoIMAO this Type 1 and Type 2 comparison is ridiculous. And in this context Type 2 seems to me being more related to continuous and more pragmatic learning. I have done CS and I can't remember using any of it to make money. Do CS because you love the subject and crave for more knowledge about it. Do the Type 2 stuff if you need a job/money.
- mcguire 6y agoOne of my favorite interview questions was "What happens when you type a URL into a browser address bar and hit return?" My answer went into opening a TCP connection and DNS lookups because I'm a networking guy. And I've had the fun opportunity to explain to someone that "no, the application is fine. No one can reach it because NASA has a split-DNS monstrosity that is currently broken. Again." And then there was Friday, when I was helping someone get set up in our development environment; she was able to get to the web interface of Gitlab, but not check out a project. I haven't heard back because she had a meeting, but I'm betting it was because she was on the wrong VPN configuration. The problem with "type 2" stuff is that building a system is easier than debugging the same system, and "it works on my machine" isn't always an appropriate answer. (But resigning and getting a (hopefully better paying) job before the excrement hits the rotary impeller is always an appropriate answer, I guess.)
- bor100003 6y agoOK, great books, I haven't read any of them. Please, can someone share experience reading the recommended books? When did you do it?
- doctorsher 6y agoComputer Systems: A Programmer's Perspective: around 2012 / 2013, I went through this book because I took a coursera course based on it. In fact, many universities base their systems courses around this book. It is really well written, has a great choice of topics, and phenomenal exercises [0] for practice (some are legitimately fun). Operating Systems: Three Easy Pieces: In 2013, I found this book because I was frustrated with the textbook assigned for my operating systems class (Silberchatz). OSTEP has incredibly clear and concise descriptions without skimping on necessary details. It's wonderfully written. I was so jazzed up about this book that I ended up sending a lot of edits / improvements, and the authors gave me a very kind shoutout in the acknowledgements section. Computer Networking: A Top-Down Approach: In 2013, this was the assigned textbook for my computer networking class. I already owned Tanenbaum & Wetherall which is good, but preferred this book. It is a more approachable treatment of networking (without sacrificing any crucial topics), so better for a first course. I've heard glowing reviews of The Algorithm Design Manual, Designing Data-Intensive Applications, and Structure and Interpretation of Computer Programs over the years, but I haven't personally gone through them. For the TeachYourselfCS categories that I know the textbook landscape, I find their selections spot-on and pretty refreshing. [0] https://csapp.cs.cmu.edu/3e/labs.html https://csapp.cs.cmu.edu/3e/labs.html
- fouric 6y agoI feel like the hardest part of modern software engineering is systems architecture. I've pretty easily picked up everything on this list that I've touched, but I still don't know how to organize systems. Is this just me? (if not, then I feel that this site misses the most important part of the discipline)
- neatze 6y agoAfter my first prototype(s) of system I start reviewing design patterns with goal to identify how my prototype(s) are similar to various design patterns, then I start looking at opensource projects with similar design patterns, eventually I see the righteous path.
- travmatt 6y agoThis is my approach. Except three days later I suddenly realize a cleaner approach and I wonder why my original plan was so ugly.
- bootloop 6y agoBecause that is the the part of software engineering which needs the most experience and general knowledge. There is no way around it. After all you need to know the constraints around a system before even building it and that is only possible if you have seen it before. It can help to study others people work before starting a project in a similar domain.
- travmatt 6y agoThese types of problems, ones which can only know how to solve by solving them, are known as wicked problems. Software design is well known to be a wicked problem.
- tha1es 6y agoEquivalent “X guide for practitioners with deep knowledge” for any of these (X=)fields: Probability Statistics Finance Deep learning and AI
- mcguire 6y agoThat list is...not bad, as far as it goes. I would suggest Essentials of Programming Languages by Daniel P. Friedman and Mitchell Wand instead of (or even better, in addition to) Crafting Interpreters. The former is about languages, the latter compilers (or rather interpreters). They are complementary. A couple of things I would add: Logic Rather than saying it is "applied math", I prefer to view programming as "applied formal logic". Everything from fancy type systems to Fowler's refactoring to Dijkstra's "weakest precondition" semantics for normal human being programming languages are simple applications of formal logic. Logic for Computer Science by Steve Reeves and Mike Clarke seems a good choice. Automata theory Ok, if you're going this far, you might as well go all the way and learn what all that "finite state machine", "universal Turing machine", and "incomputablity" crapola is about. Introduction to the Theory of Computation by Michael Sipser is pretty good. Old-school Artifical Intelligence Games. Plus, what can I say but, it'll come back again. Artificial Intelligence: A Modern Approach by Russell and Norvig. (Oh, there it is down towards the bottom.) Sorry, I don't have video suggestions. And yeah, some of those aren't free. But they're not horribly expensive either. Maybe there are alternatives. "Still too much? If the idea of self-studying 9 topics over multiple years feels overwhelming..." I'd have some snarky comment here, but I'm bitter.
- YeGoblynQueenne 6y agoThere is a distinct lack of Hopcroft and Ullman from this list: Introduction to Automata Theory, Languages, and Computation, 2nd Ed. https://www.amazon.co.uk/Introduction-Automata-Theory-Languages-Computation/dp/0201441241 https://www.amazon.co.uk/Introduction-Automata-Theory-Langua... Which is basically all the goodness in Structure and Interpretation... and any book on compilers and interpreters. Basically, though I don't reckon that any modern courses teach from Hopcroft & Ullman, it's a major textbook in the field (unfortunately the 2nd ed is easier to find but the 1st has the works). Another foundational text is Andrew Tennebaum's book on Operating Systems: Operating Systems Design and Implementation https://www.amazon.co.uk/Operating-Systems-Implementation-Prentice-Software/dp/0131429388 https://www.amazon.co.uk/Operating-Systems-Implementation-Pr... To be honest I don't how it compares with the book proposed in the article, since I haven't read that book. Finally, two personal recommendations for anyone interested in AI (as a study of advanced CS concepts and not just as a way to make a quick buck with a shallow understanding of a few machine learning tutorials): Artificial Intelligence: A modern approach (Russel & Norvig) http://aima.cs.berkeley.edu/ http://aima.cs.berkeley.edu/ And the free pdf of AI Algorithms, Data Structures, and Idioms in Prolog, Lisp, and Java: https://www.cs.fsu.edu/~cap5605/Luger_Supplementary_Text.pdf https://www.cs.fsu.edu/~cap5605/Luger_Supplementary_Text.pdf Which doubles as a good textbook for programming languages in general.
- ducaale 6y agoThere is ArsDigita University Curriculum[1] which is an interesting one [1] http://www.aduni.org/courses/ http://www.aduni.org/courses/
- dzonga 6y agoas someone with a degree in CS, they're subject matters out there like logic, philosophy, algebra & writing. that will definitely help you out in CS. because first and foremost you need to be good at abstract thinking, then cs will click. and once abstract concepts click, you'll see the nonsense that the current software engineering industry is.
- musicale 6y agoThese are all good courses actually!
- musicale 6y agoOf course an MS - which they recommend against - would likely cover additional topics (computer graphics, AI/machine learning, formal methods) as well as follow-on material to the introductory courses listed on the page.
- SZJX 6y agoThe recommendation of "Crafting Interpreters" is pretty weird. I would argue that more important than the specifics about compilers is a high-level understanding of various ideas in programming language design, and be able to understand the building blocks of different languages and compare the trade-offs of using one language compared with another. Dan Grossman from the University of Washington has an excellent course Programming Languages on Coursera: https://www.coursera.org/learn/programming-languages/ https://www.coursera.org/learn/programming-languages/, which I think would be far more relevant to modern programmers than studying compilers specifically.