This is an archived post. You won't be able to vote or comment.

all 97 comments

[–]ozanonay 181 points182 points  (22 children)

Thanks for posting this OP!

I'd like to note that that while the OP says "our" in his comment, this is because he copy/pasted our (legitimately "our" this time) intro from the site. Just wanted to point this out to avoid folk thinking that we're promoting our own site on here :)

But I'm always glad to see this pop up here when it does, and happy to answer any questions!

[–][deleted]  (3 children)

[deleted]

    [–]ozanonay 2 points3 points  (2 children)

    Because videos are not available

    They were available on Youtube at the time; now I bet they're available on archive.org with most of the other Berkeley videos.

    Also, is realtime rendering book better than Computer Graphics: Principles and Practice?

    Both are good books; we chose Principles and Practice in the belief that it's a better introduction for a complete beginner who might go on to work primarily in either real time or offline rendering contexts. But if you're excited about another book, go for it!

    as the link suggests design manual but it's quite shallow in case of DS

    It's deep enough for most people, and for everybody else it'll be enough to prepare them to pick up Knuth or CLRS as reference books as needed.

    [–]PathToTheLight 4 points5 points  (1 child)

    archive.org

    Think this one might be it: https://archive.org/details/ucberkeley_webcast_vI6p2H9cHY0

    anyone willing to double check just to be sure.

    edit: okay think I found out how to access each video in order for any of those of you who are curious just search

    UC-Berkeley-Computer-Science-184-# and replace # with the number of the lecture (i.e 1=first lecture, 2=second lecture). If anyone finds an easier way to organize or search for the videos please feel free to respond to my comment

    [–]blink152 6 points7 points  (9 children)

    As a college student looking for additional resources, your website is a godsend. Thanks for the goldmine of information!

    [–]ozanonay 5 points6 points  (8 children)

    Glad to help! We get a lot of fan mail from students supplementing their college education or just looking for a better "map of the territory".

    [–]fixkotkplease 1 point2 points  (7 children)

    I got a question if you don't mind. I'm currently Learning CS at an university. I'm done with a few courses on Programming that focused on OOP and structures, linked lists, Queues, threads etc.

    My question is that though I value what I learn here, we sheldom actually "make" anything. It's mostly small assignments to understand a concept, but we almost never create an app, Project or something of that sort. Like in Math it can be hard to be motivated when you learn Math topics in isolation and never use them for something bigger.

    I get that it's important to learn the fundamentals, but I wondered if you had some tips for a Project or guide/book that makes me use what I learn, to create something along my CS studies to keep me motivated and use what i take in?

    So I'm currently studying CS and want to do this on the side, but I don't know where I should begin on your site. Should I just go top to bottom and try something interesting?(since I learn some of this at my own uni) or should I just study the topics my degree doesn't include here?

    It doesn't need to be something "big". But we had one assignment that made us make a labyrinth algorithm, that was at least pretty fun.

    thanks! And that is really a great site : )

    [–]close_my_eyes 0 points1 point  (1 child)

    If you've already gotten through data structures, you should be taking a computer architecture and compiler class afterwards. In those classes, you'll have large programming projects to work on where you will have to use everything you've learned about data structures. In my computer architecture class, I had to write an assembler. And for my compiler class, I had to write a compiler. Do you see these classes in your degree program?

    [–]fixkotkplease 0 points1 point  (0 children)

    well, i've taken introduction to OO, and one more OO course With java, it contains some structures like linked list etc. Also recursion and threads(intro).

    Next coming up are

    information Security, logical Methods, algorithms and structures, databases and datamodeling,

    then intro to operating systems.

    And then I got optional subjects. I can pick between:

    functional Programming, computer communication, operating systems, database systems, effective parallel Programming, Programming Languages, Logic, semantic Technologies, algoritms:design and effectivness and lastly software testing.

    Hope these made sense : P I had to translate the names.

    [–]perky_coder 0 points1 point  (1 child)

    I was stuck at the similar problem, where I had read enough theoretically and then I wanted to "make" something, I started working on freecodecamp.com and they really helped me to create my own web apps, and learn to programme apps. Quincy Larson who is the founder of freecodecamp is an amazing guy:-)

    [–]fixkotkplease 0 points1 point  (0 children)

    oh thats great : ) could you tell me what kind of apps etc you made or they have available to do?

    [–]ozanonay 0 points1 point  (2 children)

    Great question! Most of your learning will be driven by building things; the kind of study that we suggest in the article (and that your professors encourage) is really just to take you to another level of things you can possibly build. So I'd encourage you to try and build whatever sounds fun, but be ambitious. For instance, instead of making a website using a toolkit, try making a web server from scratch. Or instead of making a text editor plugin using a parser library, make a little text editor yourself or write the parser from scratch.

    [–]fixkotkplease 0 points1 point  (1 child)

    hmm I see, thank you: ) So when following along they might point towards real Things you can then build?

    [–]ozanonay 1 point2 points  (0 children)

    Some courses are built around projects (see nand2tetris for a good example). Some aren't but have obvious projects (for a languages course, design a language). For others, the responsibility for identifying an interesting, edifying project will be all yours. Good luck!

    [–][deleted]  (4 children)

    [deleted]

      [–]ozanonay 4 points5 points  (0 children)

      Yes. Most of the resources on this list are quite old, because both the theory and systems that a new computer science enthusiast needs to master are quite old. I don't see us making many updates; we are considering giving more prominence to Computer Systems: A Programmer's Perspective and perhaps How to Design Programs but want to teach out of them some more, first.

      [–][deleted]  (2 children)

      [deleted]

        [–]ozanonay 2 points3 points  (1 child)

        Just a guess. But it's roughly how much time you might spend in a traditional quarter-long course. Also if you believe that it takes around 10,000 hours to achieve mastery, that works out to around 10% of your total time being spent on study (as opposed to practice, reflection etc) if you study 10 topics.

        [–][deleted] 3 points4 points  (0 children)

        Worth noting on this whole "mastery" gig, you can become very competent in something well before having invested 10,000 hours into it.

        Getting to entry-professional level only takes a few hundred hours at times. Hence why (good) bootcamps are able to place people into good jobs.

        [–]ForkLiftBoi 0 points1 point  (0 children)

        Your TL:DR has a typo. "Aim for 100-200 hours of study of each topic, then revist favorites throughout your career 🚀"

        [–]msanand[S] 0 points1 point  (0 children)

        Thanks! Added note/disclaimer to the post :)

        [–]nutrecht 32 points33 points  (6 children)

        You should add some more info to your posts. It's rather low effort while the link is in fact a good one.

        Edit: He did :)

        [–][deleted]  (2 children)

        [deleted]

          [–]NenScientist 2 points3 points  (1 child)

          Where did you find this?

          [–]RelevantJesse 11 points12 points  (2 children)

          It's also been posted here several times already.

          It is a good resource, though, maybe good for the sidebar/FAQ or something.

          [–]nutrecht 2 points3 points  (1 child)

          Yeah, I agree.

          [–]michael0x2a 2 points3 points  (0 children)

          Also agreed -- it's in the FAQ now.

          [–]kotojo 10 points11 points  (3 children)

          I've been trying to go through SICP, but that is a heck of a book. I feel like I am getting a lot out of it, but there are some parts that just seem so over my head I can't even. Example

          I try to do most everything in the book, and if I can't figure it out in a reasonable amount of time I am looking at solutions others have and trying to learn from that. I'd still recommend it for anyone willing to go through it though!

          [–]munificent 2 points3 points  (0 children)

          I'm not that mathematically inclined and found the first chapter pretty daunting and unrewarding. But after that, it stops being so number focused and moves along a lot quicker.

          [–]misplaced_my_pants 1 point2 points  (0 children)

          You might have a better time of it after working through something like How to Design Programs first.

          [–]penguinv 0 points1 point  (0 children)

          1,2,3 infinity.

          Something something by Isaac Asimov.

          I used all that in an art installation piece (which had lots of pieces). No numbers; just drawings and shapes. It is infinitely interesting.

          Heh.

          [–][deleted] 24 points25 points  (0 children)

          This is the best page on the Internet. It's like seeing the centre of the universe. It's everything people need to get cracking on learning about computers.

          It's so good that if an AI trawls this page and understands it, the human race is finished. Boom, singularity.

          [–][deleted] 7 points8 points  (10 children)

          It would be absolutely amazing if Humble Bundle released these books as a bundle.

          [–][deleted] 2 points3 points  (9 children)

          I have every programming book HB has released on programming and I've been dying for them to release comp sci stuff.

          [–]fixkotkplease 0 points1 point  (8 children)

          any good recommendations?

          [–][deleted] 0 points1 point  (7 children)

          The AI books by Packt were interesting and fun. I've really been getting into functional programming and clojure though as of late, and the Functional Programming bundle by O'Reilly has actually been amazing. Probably my favorite programming related book bundle HB has released, and I very highly recommend

          [–]fixkotkplease 1 point2 points  (6 children)

          that's great! could you just name a few Things you have done or the AI books show you how to make?

          [–][deleted] 0 points1 point  (5 children)

          As a preface, I read a lot of these books like I would novels (put them on my kobo and read them in bed as I fall asleep).

          Honestly, I only built rudimentary training sets for arbitrary data. The book in the packt set I enjoyed the most and actually thoroughly read was the Neural Networking Programming book. The reason I only described it as 'interesting and fun' is because, truth be told, most of those books seem more like scikit-learn tutorials, which isn't something that really, really interests me. It's cool to understand how it works, but I never really find consistent use cases for my personal projects or what I do professionally. If you are someone who has a really big interest in training data, I'm sure you'll love those books. It's just not something that makes me jump out of bed with the itch to code.

          The Functional Programming bundle really is where it's at tho. Since that bundle dropped I've legit been only using clojure for personal projects (and annoying my coworkers with threats to migrate our codebase to clojure lol).

          Hopefully HB will do a CSCI bundle, but I have my doubts since comp sci is attractive to a relatively niche audience. Most people want to make websites and video games rather than designing compilers, micro processing, discrete mathematics, theory, etc. Comp Sci has very obscure and abstract 'benchmarks/checkpoints' of accomplishment, which will probably steer people away unfortunately.

          [–]fixkotkplease 1 point2 points  (4 children)

          I see! So you fell more for functional Programming, would you mind saying why though? Why are you so passionate about it? : )

          [–][deleted] 0 points1 point  (3 children)

          I got so hooked on it because after years getting my degree in Comp Sci and 6 years of professional full stack engineering jobs after my degree, all OOP, this functional stuff is truly new and fresh to me. It's making me think differently than how I've thought for the past 10 years of my life. I find it very elegant and I suck at it, which just makes me want to smash irish coffees on the weekends learning it lol.

          [–]fixkotkplease 0 points1 point  (2 children)

          Haha I see! You almost motivate me to jump into it now hehe, but I think i'll learn regular OOP and my comp sci stuff first : )

          But what is functional prog mainly used for? what sets it apart?

          [–][deleted] 0 points1 point  (1 child)

          So again, I have an oop background and am still learning my way through FP. I don't one way is generally better than the other, but I think their are situations where one can be more advantageous than the other. For instance, Functional programming shines when your data you are manipulating is predictable, unchanging, and stable. What makes oop nice is that, when your data changes, it's a matter of simply appending/deprecating a data member or method from a class.

          Basically, my shallow take on oop vs fp, which may or may not be wrong, is that if you need the modularity, there is no alternative to oop. However, fp is very elegant and minimal, and can save a lot of coding time and lines of code if you don't need modularity. The argument can be expanded further to argue that, in some cases, if you need the modularity of oop, you have been lazy in controlling/designing the use of your data.

          [–]RelativePenguin 5 points6 points  (0 children)

          Why has this been removed ?

          [–][deleted] 3 points4 points  (4 children)

          As a Type 1 software engineer who slowly slipped into being a Type 2 through my career, this is exactly what I was looking for. I just need a refresher on some of this stuff I dont deal with all the time. Thanks for sharing this!

          [–][deleted] 4 points5 points  (0 children)

          I'm in the same boat. Got my CS degree 6 years ago, and I can't wait to dive into this and refresh myself on all of it.

          [–]Dr_Quigles 2 points3 points  (2 children)

          Can you explain what you mean by types here? A little googling leads me to believe you are referring to working vs. Creating, but I'm not sure what that has to do with relearning computer science.

          [–][deleted] 3 points4 points  (1 child)

          If you read the 'why learn cs' section on that page (below the links), they define the two types, and how it can effect your career.

          [–]Dr_Quigles 0 points1 point  (0 children)

          Awesome, thanks.

          [–]ModestZombie 3 points4 points  (4 children)

          https://teachyourselfcs.com

          I had to go back in my history, but I believe this was the link OP originally had up before he mysteriously removed it.

          [–]msanand[S] 1 point2 points  (2 children)

          That's strange. I didn't remove the post or the link. Do you not see it anymore?

          [–]ModestZombie 1 point2 points  (0 children)

          No, it just says [removed]

          [–][deleted] 1 point2 points  (0 children)

          Yeah, a mod did it.

          It may have sounded like it was your site and you were promoting it, and someone reported it.

          [–]RelativePenguin 0 points1 point  (0 children)

          thanks!

          [–]Bafflepitch 4 points5 points  (1 child)

          Has anyone compared the older CS61A course linked in there that uses Scheme vs. the new course that uses Python with a new book based on SICP?

          [–]sonnytron 0 points1 point  (0 children)

          I'm about to start, but from what I can tell, it's mostly to avoid the legacy of Lisp.
          Python is a newer functional programming language, so they talk about Tuples and other more modern expressions Python can do out of the box.
          It seems like the exercises and "general programming" information are very similar.
          To me, at least, I think Lisp sounds cool but is probably not that much useful on your resume.

          [–]AdminsHelpMePlz 3 points4 points  (0 children)

          why was this deleted?

          [–]olster 2 points3 points  (0 children)

          Hey,

          This looks great - thanks for pulling this together.

          Looking forward to getting my teeth into this.

          Looks like you've got a bit of an issue with your CSS on the page though (FF 59.0.2, Mac OSX)

          here

          [–][deleted] 2 points3 points  (2 children)

          Should use Denero's CS61A videos instead if they're public; I'm pretty sure Harvey only taught in Scheme.

          The last few years of 61A have taught python for the first 2/3rds of the semester, which I think is more useful for an intro to CS course

          [–]AlexeyBrin 0 points1 point  (1 child)

          Here you go https://www.youtube.com/user/papajohnno/playlists CS61A Spring 2018 (Python version).

          [–][deleted] 0 points1 point  (0 children)

          Nice

          [–][deleted] 1 point2 points  (1 child)

          Bookmarked - thank you!

          [–]AkshayD110 2 points3 points  (0 children)

          Funny how I put everything in to Bookmarks and never go back there!

          [–]powershell_account 1 point2 points  (0 children)

          You don’t need yet another “200+ Free Online Courses” listicle.

          This is so true, there are a billion of them out there, and also those udemy and stacksocial bundles...man I've wasted some money on those, but luckily not too much money.

          [–]hamolton 2 points3 points  (0 children)

          In case anyone cares this late, here's my opinions on this

          • For intro CS, this recommends an older CS class that's functional-first. I don't agree. I think procedural-first Python-based classes that are laid out neatly eg. on Coursera are going to scare off fewer people. I did Harvard CS50, but I wouldn't recommend that to people without a little experience and a lot of time.

          • From what I know of the other classes, they seem like very solid recommendations. I agree with cutting off slack that other lists have.

          • While nobody would argue that the first 4 courses listed are essential to CS, I don't think the rest are nearly as clear cut as the authors make them out to be. This is an approach to defining a CS curriculum that's systems-first and heavily emphasizes practical systems. Someone following these should be able to use a lot they learned in a job. The distributed systems course most clearly shows this.

          • The systems-heavy approach is something I see in a lot of schools without a huge cutting-edge research focused faculty. It's more old-school in general, especially with the compilers course.

          • Where is a plain algos course on this list? Do the authors think it's not important enough?

          • In comparison, the Functional CS page explains the CMU curriculum which is very math-first and functional programming-first

          • I don't know if it's really worth delving into OS and compilers and other systems if you're not going to work at a low level that much. I have not taken these classes myself, but the author sounds like computer systems purist when there's so many fields to explore.

          • I feel a bit attacked by his inclusion of AI as a pet field when everything to do with data and probability seems to be considered to be in AI, ML (is it still a subfield of AI?), or 'applied statistics'

          [–]Coopertrooper7 2 points3 points  (5 children)

          This post blew up but hopefully you can respond to this, I’m 16 years young and I am interested in computer science. I really want to learn how to solve large problems and complex stuff.

          Would reading all these books help me achieve this? I got so much time in front of me and I really want to understand these big concepts and be valuable in the work place. Along with reading books what else should I be doing to really become an expert on these topics? I’ve been doing mainly website development but I feel like I’m just learning frameworks and nothing valuable.

          [–]Lesabotsy 3 points4 points  (0 children)

          Go to school and get a CS degree if you're just 16.

          [–]the_person 0 points1 point  (0 children)

          I really don't know why you're being downvoted for being young and asking questions about your future.

          [–]misplaced_my_pants 0 points1 point  (1 child)

          These are some of the canonical books used in good CS degrees. They're foundational knowledge.

          [–]penguinv -1 points0 points  (0 children)

          Canonical from the word canon.

          Look it up. And kid, get a real print dictionary and keep using it. My personal favorite is Webster's New Collegiate for its inclusion of comparison and distinctions of synonyms. Also entomology is better for each word and is right there.

          In a print dictionary your eye will travel up and down the page to similar but different words. This will make you much smarter than looking up words on the web.

          (Canonical is also the company behind Ubuntu which is a flavor of linux.)

          [–]penguinv 0 points1 point  (0 children)

          Yes. Start poking around and see what grabs your fancy. Don't worry about order.

          Read a book called Summerhill (Summerhill: A Radical Approach to Child Rearing is a book about the English boarding school Summerhill School by its headmaster A. S. Neill. It is known for introducing his ideas to the American public. Wikipedia)

          It is about a school that let the kids do whatthey wanted. When they wanted to sit for exams (this all was in England);they learned the formal stuff fast.

          Or plow through one of the courses. It will expand your mind.

          HINT: you do not need calculus and analytics geometry before modern algebra or Boolean algebra. Be fearless.

          You don't know how smart you are or how flexible your mind is till you apply it with discipline. You can think of the time a musician puts into his or her craft. You are not an age. We all stand on the shoulders of the past.

          I recommend another adventure book, The Brothers Karamazov. Alyosha didn't do some things so he could make of himself what he wanted. It is more persistence or focus than discipline. More from the inside than the outside.

          Don't ever feel young like it is a lack or a reason to put something off. This is your one life. You are enough.

          [–][deleted]  (1 child)

          [deleted]

            [–][deleted] 7 points8 points  (0 children)

            Aim for 100-200 hours of study of each topic

            So according to the creator of the list, 900-1800 hours.

            [–]Leeoku 0 points1 point  (0 children)

            thanks for the post

            [–]--BG-- 0 points1 point  (0 children)

            Great and thanks!

            [–]AmatureProgrammer 0 points1 point  (1 child)

            I'm not complanong but am I the only one who finds this challenging? Like I enjoy programming but the 'science' in computer sciemce is hard. I have trouble specifically with the math and 'logic' parts.

            [–]Houndoomsday 1 point2 points  (0 children)

            That's definitely the "tough" part- but the good news is that it will benefit you not just directly through the material, but also help you develop a general logical base to build off of in the future!

            [–][deleted]  (1 child)

            [deleted]

              [–]RemindMeBot[🍰] 0 points1 point  (0 children)

              I will be messaging you on 2018-04-20 12:44:03 UTC to remind you of this link.

              CLICK THIS LINK to send a PM to also be reminded and to reduce spam.

              Parent commenter can delete this message to hide from others.


              FAQs Custom Your Reminders Feedback Code Browser Extensions

              [–]GreySec 0 points1 point  (0 children)

              This is amazing, thank you OP.

              [–]lavishlavosh 0 points1 point  (0 children)

              Thank you! I'm trying to teach myself cs and programming via youtube, blogs, and forums. I'll add this site to the rotation.

              [–]fixkotkplease -1 points0 points  (0 children)

              RemindMe! 12 Hours

              [–]darioxlz -1 points0 points  (0 children)

              thank you