lainchan / λ

CS Curriculum

Wirth · 2019-07-06 16:18
Could someone list all the topics a CS student should be familiar with? Books/Other resources are also welcome. I got my degree from a soykafty university and I'm trying to fill in the gaps of what I don't know by self learning online. I figure this would also help other people in the future trying to learn by themselves.
DEBUG-CONTENTS · 2019-07-06 17:05
what are you interested in?
Masami Eiri · 2019-07-06 18:54
>>14149 Firstly general knowledge and after that Ill worry about specifics. For example I haven't done Linear Algebra and Im sure it should be known by everyone regardless of what you're interested in.
Kay · 2019-07-06 22:56
>>14150 Graph algorithms, automata theory, and linear algebra have helped a lot when developing programs that have event driven systems like user interfaces and video games. A database course would also be very helpful for web development. Basic operating systems and networking classes helped a lot when designing distributed web services. I'm guessing that more information on distributed algorithms would help more with this. Some of the more useless topics for web development or game development are probably compiler design, advance operating systems, any "software development" course, or any machine learning courses. If you've ever heard of Introduction to Algorithms by Cormen, the following chapters are great. >3. Growth of Functions >4. Divide-and-Conquer >10. Elementary Data Structures >15. Dynamic Programming >22. Elementary Graph Algorithms >23. Minimum Spanning Trees >24. Single-Source Shortest Paths >25. All-Pairs Shortest Paths >26. Maximum Flow >29. Linear Programming >33. Computational Geometry >34. NP-Completeness Chapter 3 allows you to talk about algorithms methodologically. Chapters 4 and 15 give you an approach to solve a large body of common problems. Chapter 10 is basic knowledge for understanding most algorithms and comes up very often in daily development. Chapters 22, 23, 24, 25, and 26 might not come up in daily development, but, because graphs are so ubiquitous, you can surprise a large amount of people by applying a simple graph algorithm where they would have come up with a more complicated algorithm. Chapter 29 is very cool. In particular, 29.3 allows you to solve a large class of common optimization problems. Chapter 33 is very useful in video game development. Chapter 34 prevents you from trying to solve problems that are intractable. Also, if you don't already, you should try profiling the applications that you build. Once you start this process, you start to build and intuition, sort of like learning a language. If you start early, you will find yourself writing efficient programs effortlessly by using empirical data.
Chan Siu Ming · 2019-07-07 01:05
>>14148 https://teachyourselfcs.com/
car · 2019-07-07 02:49
>>14154 I wonder if you really need to study Computer Architecture if you aren't doing embedded development.
Unidentified · 2019-07-07 03:09
>>14156 You really don't need it, but the point of an education is to expose you to many things to study in graduate study.
Turing · 2019-07-07 04:38
>>14154 thank you
Drifter · 2019-07-07 10:27
>>14152 Okay thanks. Guess I will focus on Linear Algebra and Automata Theory for now and take it from there. I have done most of those Algorithm chapters but from another book. >>14154 Thanks will take a look
John Doe · 2019-07-11 18:06
This is a well known resource: http://matt.might.net/articles/what-cs-majors-should-know/
Motoko Kusanagi · 2019-09-23 03:21
have a look at these repos https://github.com/ForrestKnight/open-source-cs https://github.com/ossu/computer-science ive done alot of the ForrestKnight's one on the side of my degree imm doing atm just with the topics i want to learn more about
Cereal Killer · 2019-09-23 04:42
>>14196 I second this link. I used it to shore up my learning around the time I graduated. The operating systems section was of particular interest to me since I like the really low level stuff.
list · 2019-09-23 05:37
hi lainons, I am now doing programming in angular + java for a living and I dont know if CS stuffs is important for my career. I have read some topics of SICP and other CS concepts before and it quite helped me a lot to understand programming. but now that I'm on a beginner-intermediate phase, is it good? or I'll just study finance or banking because that's what the system we're building is all about. thanks
(λ x (David x (Gabriel))) · 2019-11-02 07:24
Here is another (and very interesting one) https://functionalcs.github.io/curriculum/
FILLER · 2019-11-18 20:32
I feel like i can learn all this things . can i get a job without a cs major degree . i am an electrical engineering undergraduate
Haruyoshi · 2019-11-19 02:12
>>15944 If you have a bunch of programming projects and a technical degree, you'll be fine. Some companies probably won't consider you, but there are a lot of companies hiring and many will not really care. If you could get a programming internship as an undergrad, that would probably be a plus.
Lady 3Jane.. · 2019-11-19 14:55
>>15945 Thanks lainon . i will work on it for the next 5years or so .
Lord Nikon · 2020-01-30 20:48
>>14148 do you perhaps know where i can find the full lecture from that gif? i've been trying to find it again for a while.
typedef · 2020-01-30 21:32
Linear algebra...
Anamika · 2020-01-30 21:42
Database systems, networking...
Frank Garza · 2020-01-30 21:53
OS and *nix sysadmin.
McCarthy · 2020-02-03 01:02
>>16712 https://youtu.be/2Op3QLzMgSY
Elliot Alderson · 2020-02-03 01:02
>>16712 Youtube /2Op3QLzMgSY
Lord Nikon · 2020-02-03 03:53
>>16713 There is a 3rd edition available for Linear Algebra Done Right, and it has a proper table of contents. Should be easy enough to find: MD5:4AFDEE453F85DB03F62BC28EF9ADA4DC SHA256:534A45AA8C49112813F469B3373A581142C1C3F2BBDB638058A207C4C898531A
quote · 2020-02-04 08:23
In terms of knowing the tools to get soykaf done, "The Missing Semester of your CS Education" has been doing the rounds of the mainstream tech sites lately. If you studied at Soykaf U, it might be worth looking over. https://missing.csail.mit.edu/
Jim Hilger · 2020-02-04 22:06
>>16759 I'll be fair, I was actually disgusted when I saw that. Call me Djikstra, but computer science has nothing to do with computers and them calling this a missing semester really lowers my opinion of their curriculum, in the same way learning they lowered their standards to use Python over Scheme did. I'll use the example of git, named after its creator and users. I don't use git because I can glance at it and the difficulties others have using it and tell I don't need or want it. To take something like this, only popular because the author's previous work includes copying part of an operating system from the early 1970s, and treating it as something important is insane. From the looks of it, this missing semester does away with any idealism it should have; don't focus on what things could and should be like, here's the broken tools you're expected to use; have fun. I almost went to MIT or Berkeley, but in the last few years I've grown somewhat glad I didn't.
Joey · 2020-02-04 23:27
>>16738 >>16739 thank you.
list · 2020-02-05 10:01
>>16777 They're just responding to the fact that a lot of employers won't be training new employees who are fresh from a university. Inevitably, a lot of students will simply not touch tools like Git or a Unix-like environment since theres no immediate motivation to do so, and they've been busy plowing away at whatever curriculum their university has which takes up a lot of their time. In America, where MIT is, the cost of education is absurdly high and must have a practical benefit in order to pay off those piles of debt. Originally, yes, this is not the university's job, but that era where that would be normal is long over and universities actively participate in ignoring that principle because they want buckets of money. MIT is certainly not cheap unless someone gets their way paid for them. >I don't use git because I can glance at it and the difficulties others have using it and tell I don't need or want it. I figure most users of Git who create a repository that never gets forked and never gets contributions could live without it. It isn't even necessarily the VCS desired for a small project among a few developers, it is made for distributed development of a large project with a small team at the top ultimately managing the project. Lobbing tarballs/zipfiles around or maybe using something like Fossil would probably suit these users better (but then again I have not given Fossil a try, it just claims to be the VCS for small teams). A lot of people simply make a Git repository because Git is popular and readily available with many frontends or they want to impress an employer by working for free. It is a bit absurd that its practically taken for granted that you will be diddling around with a distributed VCS by yourself in your spare time, it is like taking a chainsaw to slice your steak because there might be a slight chance that the steak will turn into a cow with wooden armor. Some employers require a NDA/"give me all your IP rights" clause anyway and you won't be able to work on those things anymore, if you're going into the commercial world. >To take something like this, only popular because the author's previous work includes copying part of an operating system from the early 1970s Linux is partially inspired by later Unix-like developments like Minix, but OK, the world is in a bottle and we're all in the 1970s, no further developments were made. Git is not from that time period either, other VCSes came before it. Theres certainly room for improvement in the operating system world and a lot of improvements that were implemented have been ignored, but practical changes are slow to come to most users due to needing to write lots of drivers for new OSes, inertia, and having closed off hardware.
pop · 2020-02-05 15:02
>>16777 You can spend all the time you want exploring what things could and should be like, and plenty of universities do; but the fact remains that a large portion of university students are there solely or almost solely to get a better job. So, when the university provides a more abstract education, these students go "well what about this or that tool that this or that employer wants new hires to know? this university is like kicking dead whales down the beach! I missed a semester!!@#@!@#" The employers are the ones saying "Here's the broken tools"; and people aren't using them because they think they're best, they use them because they're paid to (or think they will be).
Emmanuel · 2020-02-05 16:37
It might be a good idea to learn linear algebra before declaring yourself an elite, world-class computer scientist too good for MIT?
Ivan Horvat · 2020-02-09 23:16
>>16780 git is useful for a number of reasons. With git, you can: -undo some changes. -share & update code between multiple machines easily. -conveniently duplicate code to prevent data loss. -work on multiple features of your code independently. -check what changes you made since any previous version of your code. Sending zip files back and forth will quickly become more work than just learning the basics of git. There are only a handful of commands you actually need to know for it to be useful. >>16777 Most CS programs (pun unintended) are actually a mixture of CS and software development. Iff you've accepted this, things like "missing semeter of CS" are perfectly reasonable. git is popular because it was better than the other major version control systems at the time. It's not ideal, but its the best way i've found to be able to save and manipulate code history. If you know a more abstract system, i'd be interested, but maybe you just meant you aren't interested in version control generally.
Batou · 2020-02-10 00:14
>>16832 >git exists Oh, I wasn't aware. Whos this Linus guy anyway, and why's he putting penguins in my computers? There ought to be a law. Anyway, most of the those features can be either provided by a simpler VCS and by using a better filesystem (it would be great if the filesystem versioned the files too), or a database (in fact, Fossil utilizes SQLite for this). I'm not saying its the right idea to do that, its just that Git isn't being used just for those low hanging fruit features (except for preventing corruption which is more important). One of its real uses is to be a distributed VCS that works with a large amount of contributors who know nothing about eachother, and to meet the needs of the project that it was originally designed for, which is the Linux kernel. So, the immediate benefactor of using Git isn't necessarily you, and nowadays large Git hosts get whatever it is they want out of it on top of that if you use them. Theres a difference between Git being nice to have and you absolutely needing it, like I said, a lot of Git repositories out there have 1 contributor. Still helpful, but it isn't being used for its full potential at that point. Thankfully, Git is libre and free, and not an ill-performing pile of crap like some older VCSes, so most people don't have a dilemma of not using it other than laziness or ignorance.
null · 2020-02-15 01:59
I know that this has been posted already: https://teachyourselfcs.com/ I'd just like to add that I've tried it myself and it's going in a very strange and interesting direction. I've tried reading SICP but I couldn't get past the first couple of exercises. So I ended up checking out books on Common Lisp just to ease my way into the language. I'm still going through one of the Lisp books but I believe after I'm done with it that I'll be able to solve SICP problems with ease both in Scheme and inCommon Lisp. I'm not sure what I'll do after that, I'll either continue my journey with Lisp or I'll start looking into other subjects that teachyourselfcs suggests. Would recommend in any case.
Emmanuel · 2020-09-01 16:05
Just for the sake of history, I think it would be nice to share this.
Shogun · 2020-09-01 19:06
Version control definitely seems harder than it needs to be. I don't have much experience with it though. But git seems mandatory because everyone uses it. Still I bet 99% of people don't know how to roll back to an earlier version.
St. IGNUcius · 2020-09-01 19:46
>>20589 >Still I bet 99% of people don't know how to roll back to an earlier version. To be completely honest with you, I'm like 80% sure I know how but I'd still look it up to make sure I didn't fuarrrk it up haha. Assuming you're doing development that doesn't involve collaboration with other people, feature branches, etc. I still like using git for two main reasons: it makes sharing code between machines easier (especially since I'll develop software on one machine and then "deploy" it on my home server or a vps or whatever. dealing with that sort of thing with rsync gets messy), and it makes sharing my code online easy, since i can push it to gitlab and my vps at the same time, and have it in a form that makes it easy for other people to work with.
Sipho Nkosi · 2020-09-02 00:26
>>14152 > profiling the applications that you build What does this mean?
Technician · 2020-09-02 01:04
>>20596 use a tool to monitor which sections of your code are slow. it's good advice. i don't do it often enough but i feel like whenever i do i find some unintuitive reason why my code is less efficient than it could be. compilers are weird and things that seem like they should be fast sometimes aren't.
Arisu Mizuki · 2020-10-16 00:29
>>16780 >Some employers require a NDA/"give me all your IP rights" clause anyway and you won't be able to work on those things anymore Do you mind expanding on this?
Roger Pollack · 2020-10-16 01:40
>>21426 Anything made on company time or company equipment is usually company property, including your open source contributions. Some companies also have employment contracts that try to extend this to all software created while employed. There isn't a whole lot to expand on.
car · 2020-10-16 04:08
>>21426 >>21428 Worth noting there's quite a lot of countries where clauses extending to your free-time are completely unenforceable or illegal (and so don't apply).
Dox · 2020-10-16 19:21
You have lots of great suggestions here but I thought I'd throw in a one stop option that has an optional cert to put employers at ease when they see your horrible college on a resume. https://www.edx.org/xseries/harvardx-cs50-ap-computer-science-principles The above should fix your your horrible education more or less on it's own. https://www.edx.org/course/building-modern-python-applications-on-aws Something like this will give you enough real world style experience to do a bunch of overpaid real world jobs. https://www.edx.org/course/building-modern-python-applications-on-aws It'll still be hard to break into the market though. If anyone wants I'll make a thread about how to beat the system because it's such a dishonest clusterfuck.
William Holtzer · 2020-10-17 03:26
>>14148 This is a curriculum made by the IEEE, last revised in 2013, but it is pretty accurate as to what you're expected to know
Elliot Alderson · 2020-10-19 20:13
>>21440 I'd like to see a thread like that.
Nameless · 2020-11-02 12:18
>>21440 Go ahead man .
Arisu Mizuki · 2020-11-02 12:32
>>21440 Sounds nice. Patiently waiting for it lainon
William Holtzer · 2020-11-02 15:10
>>21440 Bump, i'd like that thread as well!
Project 2501 · 2020-11-03 01:50
>>21766 >>21767 >>21765 >>21500 Wow ok. I'll post my observations about the scam that is IT recruiting and how to duff the HR people and recruiter screening strategies that you'll run into. I am SO fuarrrking busy right now and I'll need to do some research and compose my thoughts.
Dox · 2020-11-03 23:23
>>21784 Looking forward to it.
bit · 2020-11-04 19:21
>>21784 I'd also love to hear your ideas.
Meddler · 2021-03-04 15:59
>>14159 >Automata Theory automata theory is the most useless pseudointellectual overcomplicated garbage subject of all time. the only reason this subject even exists in the first place is so that compiler books can spend LITERALLY HUNDREDS of pages jerking off about muh finitite automata garbage.
Unspecified · 2021-03-04 16:54
>>24752 lol imagine being this willfully ignorant
word · 2021-07-16 00:29
>>21784 godspeed lain!
Switch · 2021-07-16 02:42
>>24755 A funny question is.. how many automata he was using just to soykafpost in this site.
Undisclosed · 2021-07-16 03:02
>>26763 How many antomatas does one use when brewing soykaf online?
Tyrell Wellick · 2022-01-04 06:03
>>14156 yes, but not so in-depth. i've seen this site before and i'm not sure what it recommends but i can personally recommend Computer Systems: A Programmer's Perspective
Yamaoto Toshi · 2022-01-04 12:56
As a new computer scientist, you should be able to do things. Learn as little as possible to be able to do things. After you are comfortable doing things you can have a more informed foundation to seek understanding about how is it that you are able to do these things. Does it make sense? First you learn how to ride a bike, then you learn about how bikes are made if you care about that. But if your goal is to learn to ride the bike, it's kinda dumb to learn how they are made first. It will be weird and out of context trivia knowledge that isn't grounded in reality. For context, i spend years trying college, books, courses and it was all detached. After years of experience as a professional software developer, now these books and courses are digestible, because i have context for the information.
Cereal Killer · 2022-01-05 08:52
>>26764 Everytime a regexp is used.
Noodle Soup -1/7 · 2022-02-12 21:37
>>14152 Your comment reignited my desire of re learning algorithms. I Found the book, so, for anyone interested, here it is: http://139.59.56.236/bitstream/123456789/106/1/Introduction%20to%20Algorithms%20by%20Thomas%20%20H%20Coremen.pdf (i tried to upload the .pdf multiple times here. i don't know why, but after posting, it just disappeared from my comment)
null · 2022-02-24 17:20
>>14152 Don't forget elective credits, foreign language, humanities, and all the other stupid soykaf a 4 year college course puts you through