Stanford's experimental operating systems course[0], where you buy a Raspberry Pi and write your operating system on the bare metal by using the reference specifications.
"You should take this class if: 1. You write code well OR (you don't yet write code well AND have a lot of time to devote to the class); 2. AND you find these systems topics interesting.
The people that found the class valuable in the past were entirely drawn from this demographic. (In particular: I would not take this course if you were looking for an easier way to satisfy a cs140 requirement.) We are trying to go as far as possible as quickly as possible with a group interested in doing so." [emphasis mine]
Hmm, that actually seems to be an older version of the course? The page you posted is for the Winter 2018 semester, the page the parent posted is for Winter 2020.
This is going to sound dumb, but in case this is something you could possibly get excited about: research and build chess engines. There is almost no part of computer science that hasn't at some point intersected with chess computers, from early forays into game theory, through close-to-the-metal optimisations like bitboards and vector operations, right up to the state of the art in deep learning. I genuinely think you can get a fairly complete CS education just by building a series of increasingly complex engines (and UIs!) and you will find yourself in the company of basically all the greats like John von Neumann, Alan Turing, Donald Knuth, Ken Thompson etc etc.
I would check out Michael Genesereth's course on general game playing [1] -- I don't remember if we specifically implemented a chess engine, but it's more or less exactly what you're looking for. Once you've mastered that, I'd move on to Mykel Kochenderfer's series on decision making under uncertainty [2], which extends to more state of the art approaches to the problem (ie. MCTS + deep Q learning + better encoders, which is basically what got us AlphaGo, AlphaStar, Atari agents, etc.). Once you've got that down (or before), you should start reading whitepapers.
Genesereth and Kochenderfer also have books on the subject; Kochenderfer's is extremely good (I haven't read all of Genesereth's).
0. A function A(s) to generate actions (moves) A given a state s:
1. The state evaluation function v(s) to distinguish good from bad states. I would start by using only piece value, then add mobility, piece-field values, ... You can find a few simple elements of such a function
here: http://manual.freeshell.org/gnuchess4/HEURISTICS
With this you can generate s'=as (Successor state is action a applied to state s) and choose the action a=argmax(v(s))
But also think about all the potential projects that branch off this! Say you want to code your own eval heuristics... how can you find what's significant? Well, let's build a database of games and plug them all into a decision tree or something and see what rules are most important to work out winning or losing positions. Now, what if that database has 1.7B games and is 412GB, like Lichess's? And what if you want to search it fast? So many fun problems to solve!
And this only takes into account Chess. General Game Playing (referenced by a sibling comment) allows in its simplest version to encode all deterministic games with complete information (which is an infinite set but includes Rock Paper Scissors, Connect 4, Checkers, Chess, Go, ...).
Now finding heuristics there given only the game description is a completely different set of problem but for quite a few Chess-like games it boils down to valuing pieces (proving that something is a piece is a problem by itself), positions and combinations thereof which again all are derived of "mobility", i.e., the number of possible moves in a given situation.
In that sense, piece value is a mere "maximum mobility" indicator per piece. Positioning is a "real mobility indicator" but not only affecting your own mobility but also reducing your opponents. Check is then a mere reduction of your opponents mobility, promotion is a great enhancement of your piece value and castling a way of reducing the chance of "immobilizing your position" via check.
TLDR: Machine Learning aside, you could also deduce all Chess heuristics from first principles.
Yes... tries, suffix arrays, sketching, cache oblivious data structures and algorithms, splay trees, persistent data structures, etc. are used in a wide variety of places ranging from compilers to compbio to distributed systems, to give some examples. I know I've written applications for which I wanted to use some of these to get a nice speedup, but in most cases I just never got around to them. Of course you'll find ones that are more obscure too. I'm not sure how to give a more useful answer to such a broad critical comment though...
Tries are useful for IPv4 prefix lookup. Routers that don't have hardware acceleration use them. Indeed, some hardware devices map a s/w trie to analogous h/w structures (some use TCAMs). Also interviews...
This class isn't good interview prep. These are a mix of theoretically interesting and/or practical but somewhat difficult (not intro level) data structures/algorithms.
OMSCS by Georgia Institute of Technology is by far the best course I have come across. You get a degree too in the end. Caveat: It takes a lot of effort. It is like doing a full time course and the degree they award in the end is indistinguishable from a full time degree.
Not surprising for a program that is literally called Online Master of Science in Computer Science. It's a master's degree program, in computer science, delivered online, by a university.
I'm 6 classes through it. Classes vary wildly in difficulty and applicability.
Favorites so far for me were AI4R (Ariticial Intelligence for Robotics) which is a more rigorous version of Udacity's Self-Driving Car course, ML4T (Machine Learning for Trading) where you implement various algorithms to optimize trading strategies, and ISYE 6501 (Intro to Analysis), which is a survey of various analysis techniques and ML algorithms.
Still have to take the reputed hardest course in the program, the General Algorithms course, the ML course, and an elective.
Worth the money, though I have had to skip a couple of semesters due to burnout. Work and this program are hard (for me).
Piazza (forums) and office hours (bluejeans--think youtube livestreams but on a proprietary platform.
For me, this semester, I finished a group project where we coordinated over slack/google hangouts. After that project, I didn't have anything left to finish the semester. I felt like I was done because the reinforcement loops I get from work (virtual back-clapping) were done and I had a hard time separating that from the "here's the next task. Also no one is talking to you about what needs to be done."
I'm another dropout (loved some of the courses, especially the OS ones, have close-to-zero interest in machine learning, though, and that's maybe half of the class offerings), but to answer your question, all the courses I was in had a "participation" component to the grade where you were expected to ask/answer questions on the online forum thing for your class. There were also optional office hours, as I recall.
It was certainly nothing like just hanging out with colleagues in the cafe between classes, but for those (like me) who just can't go to a school like GT in-person, I'm glad the opportunity is available even though I'd say it's probably the hard-mode version of the program given the limited course catalog (not all courses are integrated into the program yet) and lack of in-person interaction.
Interesting. I would imagine that doesn't make you feel like your classmates are your peers, and it would be hard to make friends with them. Friendship or at least friendliness goes a long way towards motivating people to learn stuff. Moreover, networking is an important reason for going to grad school, but it seems like the school is not encouraging this.
MIT's 6.824: Distributed Systems (taught by Robert Morris, of both Morris worm and Viaweb/Y Combinator fame) is completely open and available online, and it includes video lectures, notes, readings, and programming assignments from as recent as Spring 2020 (including half of the lectures recorded from home as the pandemic strikes). The assignments even include auto-graded testing scripts, so you can verify your solution to the assignments.
Somewhat related, does anybody know any "beginner material for non-beginners".
Pretend I want to learn web development. I have been doing desktop programming and data analysis for many years, so I know all about programming but nothing about how a web-app works.
I would be looking for something that explained web apps assuming I know little to nothing about them, but not "how to program" because I don't want to sit through learning about loops or variables.
And pretend I'm also the type of person that wants concepts and not just tutorials.
Does anyone know of entire degrees/programs with the kind of rigour in these courses, especially with regards to assessments, and direct access to lecturers and tutors etc?
I'm going back to physical university and the driving factor was the inability to get help when I needed it. I tried a few coursera courses and many of my questions sat unanswered on forums for days and even weeks. I'd be happy to pay a reasonable premium for timely access to experts on the subject like you get at a real university.
I graduated from GA Tech's online masters in Computer Science and I felt like it was worth the time and money. Some courses were better than others, but it's constantly improving. I know a ton of people in the program too who are enjoying it. Think the entire program cost me a little over $8k USD. https://omscs.gatech.edu/
I applied for the CSI program and really hope I get to do it this coming year. I got a ton of value out of the above course ($1800).
The CSI course is 10-20 hours a week for the year.
Lastly, up to this point I've been self-taught through Udemy. The problem with that is, sometimes, if you're stuck on something, it might take you 8 hours or more to figure it out. Where if you have someone knowledgeable, they can explain it in 15 minutes. Bradfield seems to do the best at that.
I've tried hiring a tutor outside of a MOOC and asking them for help, but it wasn't quite the same as a teacher who is actively engaged with the material.
You could say that with some truth about nearly any course of study (modulo the price tag). What's the GWH quote? “You wasted $150,000 on an education you coulda got for $1.50 in late fees at the public library.”
That general cynicism about paid education notwithstanding...
Having looked over Bradfield's curriculum, I think they've made some very savvy choices, that would definitely benefit students. Also I know two Bradfield alumni, who were both quite pleased with their experience there (though neither went for long enough to spend 20k USD). I think you can probably do a lot worse than Bradfield.
- Coursera/Udacity/Edx. 10% of the cost, courses taught by first-rate universities.
- OCW: Totally free.
- FreeCodecamp: Totally free.
So this program has the cost of Ivy-League universities program with 0 of the benefits. If you think this is a good proposition for your career, I as a hypothetical recruiter, would highly question your common sense as a prospective employee.
If someone has a recommendation for how to build/architect large GUI applications like Photoshop. For e.g., how to think about Undo operation right from the get-go . I think that would be amazing to learn if there is a course like that.
Hey. Check out Juan Pedro Bolivar Puente's talks om value oriented design. He worked on Ableton which is a large application. He specifically speaks to Undo. He describes a much better pattern than the Command Pattern.
He also released his source for Value Oriented Data structures
Juan Pedro is a next level programmer who I think has pushed the craft forward through his work on bringing Value Oriented Design into the C++ world.
Undue can be fairly trivial if your data structure and controls are implemented correctly, for example a common undo redo pattern is to have an immutable structure in a vector, new operations clone the last good object, add an entry on top of the vector, and undo is to just move your reference to the previous object, redo you move it forward.
There are other patterns but this one works fairly well for simple time-travel undue / redo operations.
https://pwn.college/ (CSE466 at Arizona State University) is a great offensive computer security course. The lecture videos, slides, labs and lab infrastructure from this semester are all open to the public.
I was interested to see "Intro to Functional Programming" on the front page, but it is actually a link to a go course? Just a linking problem presumably. There is a stub about Purescript but no detail? https://qvault.io/2020/10/19/free-functional-programming-cou...
It feels like this site is pushing me very hard to "sign up". I immediately feel that I'm being conned in some way and feel an irresistable urge to close the tab. Bad vibes.
Hey is love to fix this, but I'm not seeing the same problem. The first link on the page you linked goes to the FP course page, and that page has a link to the demo (which doesn't require a sign in) and the demo is in JavaScript.
An advanced course is — almost by definition — not general, and geared towards a specialization within a context.
So an advanced course would be about data science, cryptography, machine learning, vector calculus, autonomous vehicles, object recognition or some other “vertical.”
Do you know which direction you want to go in and what you want to learn? Depending on that answer you might get a different recommendation.
"You should take this class if: 1. You write code well OR (you don't yet write code well AND have a lot of time to devote to the class); 2. AND you find these systems topics interesting.
The people that found the class valuable in the past were entirely drawn from this demographic. (In particular: I would not take this course if you were looking for an easier way to satisfy a cs140 requirement.) We are trying to go as far as possible as quickly as possible with a group interested in doing so." [emphasis mine]
[0] https://github.com/dddrrreee/cs140e-20win/