Given the power tech has over the daily experiences of billions and how many questions of values and ethics it is now directly confronting in society, I'm a little surprised there's just one ethics course and one law course that cover these subjects, and they're electives [1].
We all know much of the learning in engineering is on the job anyways, so the role of formal education is less about particular job skills and more about building foundations for understanding - exactly the time and place to teach ethical frameworks and other critical interfaces with society.
Ten years later you may not remember the details, but at least you'll remember there's some kind of ethical framework or lesson that explains why a course of action your boss is considering might not be right or has implications they're not considering. The world needs more of this kind of awareness from CS grads. Not suggesting this be a major part of the curriculum, but just maybe we could go from 0 required courses covering this to 1 or 2.
FWIW, I've never seen any value whatsoever in these ethics classes (note: I'm not saying it's not an important topic, it's extremely important).
The hypotheticals and situations presented and discussed in many of them are very similar to yearly mandatory classes we have to take at FAANG (and many other workplaces I assume) and it boils down to having a checkbox that says "I'm not stupid".
Real world ethics is much more subtle and difficult to teach imo. Like how do you do trade-offs around cost/societal issues/potential financial consequences and do it under pressure with your job on the line.
In Canada, we have the iron ring given to engineers to remind them of their duties to society, I think that serves as a good reminder even if it's symbolic.
Sounds like you just haven’t taken a good ethics class. I was required to take one in grad school (comp bio/biost at) taught by a law professor. Every week we were assigned a case study on a real-world ethics problem, such as the Duke/Potti scandal [1]. We wrote up answers to 5-6 discussion questions ahead of class, then spent the class time in small group discussion rather than lecture. I think it was one of the most valuable courses I took in grad school.
I don't understand, what's the controversy with Potti? The dude was a piece of shit - what else is there to discuss? I'm not being condescending I genuinely don't see any nuance like you're stating. When is it ever okay to fabricate data?
When you want to deliberately sabotage something. What may have its place, but obviously not in such case (obviously not applicable in cancer research like in this case).
I think you're right the problem is the course. For example I also had a great ethics class, but it was bioethics, not technology.
Part of the problem is you think that software engineers should take a course in software engineering ethics. The problem here is like the GP says, it boils down into a class of are you dumb enough to pick the obviously unethical answer and fails to teach any ethics.
I wonder if requiring an ethics class that focuses on an orthogonal topic, for example requiring software engineers to take a course in business ethics, might be more effective since they can focus more on the actual system process of ethics and less on how it effects their own personal career, and thus be more willing to honestly evaluate ethically grey scenarios.
I had a required ethics course for my CS degree. I can't recall anything from it. I also took a one day ethics course at a FAANG that was excellent. Far better than a "I'm not stupid" checkbox. I think both of these are true:
- Ethics should be a required course for CS.
- CS classes in general do a poor job of tracking well with the industry. Fine for some things (eg, theory), but awful for others (eg, any Software Engineering course which touches on waterfall.)
For those who have missed out, here's an ethics course in the size of a paragraph:
Most engineering ethics focus on life and death, such as making sure your bridge doesn't collapse; Most software is not a matter of life and death, so ethics may seem irrelevant. However, the incredible power of technology means your design choices will have an impact on the lives of many. Seeing red lines where you need to tell your employer no is important, but everyday ethical thinking will find problems other approaches to design will be blind to. This in turn will make better products, and increase your value to your employer. So throw an "ethics" section in your design doc, and ask the question "Does this technology as designed hurt any groups of people with specific characteristics?" You might find that your camera app needs better calibration for dark skin tones, that your UI elements are too hard to use for women with large fingernails or people with minor motor disabilities, or perhaps that one of the JS libraries your considering is very large, and will make a much worse experience for people with rural and slow internet. So simply stop, think, and approach your design from the perspective of different cultures, races, religions, ages, genders, and life circumstances.
I like your approach here. As strange as it sounds the path to ethical action in tech requires cultivating the kind of imagination required to think of all the ways tech can be used for ill (sometimes called 'design noir'). I'd hope a curriculum would have a hefty dose of this.
Gone are the days we can just build something and act naive about what ways tech can be abused or think we can solve those issues as they come up.
Most of the time, it's not even in companies interest to look too closely at the negative implications of their products, because then they'd have to act.
Hence, its better to anticipate problems at the design phase than deal with them after the thing is built and corporate inertia and sunk costs demand it stay the same or only get band-aid fixes to those problems.
The one ethics course I took as an EE undergrad taught me exactly one lesson - that the whistleblower always has their life ruined, and even ones who (in the US) have received significant payments typically regret it.
I think it's the reverse of the lesson they were trying to teach.
Not directly related to tech, but I really recommend the movie The Insider for a look at how whistleblowing goes. It’s about the tobacco industry but can likely be generalized to any situation.
Hacker One's business model is creating a pen for all the whistleblowers (security researchers doing bug bounties) so they are trapped inside it and can't escape unless they want to lose their ability to get paid in the future.
I agree that most ethics courses aren't well done and scream 'mandatory training' rather than 'interesting subject'. The required two week one I took at Stanford GSB was pretty weak, despite business ethics being extremely important. I think they've made it better since I took it; it was a sideshow when it should have been much more central to the business curriculum.
Pedagogically, going purely book- and reading-based like most courses is a bad idea, as that can't capture the paradoxes and nuances involved in ethical decision making. I think the field would benefit from more decision-oriented approaches including a review of past ethical dilemmas perhaps as case studies, more embodied/situated formats like simulations, and practical advice on how to identify and/or avoid getting into ethically compromised situations in the first place. But you do need to couple those with the foundational frameworks that you'd use in those situations, and ideally contextualization with much broader ideas like the social contract in society.
Ethics guidelines from professional engineering societies can help with some amount of ongoing ethical awareness, but I do think it has to start in the formal education system.
This list is also a bit incomplete, or more likely just refers to classes taught in the current school year. I co-teach a different ethics-focused class in the Stanford CS department (CS 181, which in this incarnation started in 2017). I think it's a pretty good class too, although as you suggest, there are limits on how much a quarter-long class can realistically accomplish. (We try to push the envelope with our project -- some of our students have protested outside Apple HQ or Robinhood, given presentations to the Palo Alto School Board, interviewed farmworkers and U.S. congresspeople about automation, handed out leaflets about net neutrality to tourists, etc.) The reading list and goals, etc., are up at https://cs181.stanford.edu.
In addition to the new "embedded EthiCS" program you mentioned, the CS program also offers a bunch of more focused classes on, e.g., trust and safety engineering (CS 152); law, order, and algorithms (CS 209); race and gender in Silicon Valley (CS 80Q), fair, accountable, and transparent deep learning (CS 335); computational social choice (CS 366); digital technology and law (CS 481); the Modern Internet (upcoming). And, of course, a much bigger range of classes about engineering, ethics, and public policy offered by colleagues across the university.
The truth, though, is that neither CS 181 or 182 is required per se. All Stanford undergrads have to take at least one course in ethics, and all undergrads in the School of Engineering have to take at least one course in Technology in Society, and both CS 181 and 182 fulfill both of those requirements. But many of our students do fulfill them by taking other classes.
Thanks for the practitioner perspective Keith, this makes me feel a lot better about the approach Stanford is taking (and makes me want to return to the farm!)
Honestly the ethical questions being brought up are some of the most interesting things happening in tech right now. Society & the human API is like the next abstraction layer for tech, and the dust has hardly settled. It's really created a lot of opportunities to ask ourselves what kind of society we want to live in. Your CS181 syllabus looks great!
Having the computer science department, specifically, offer more ethics classes is controversial and has gone different ways at different universities. It may seem like an obvious win if you care about society, but many people interested in tech ethics (esp. those who don't consider themselves computer scientists) think it pushes in the wrong direction as far as systems and institutions go.
At one place I've taught, there was quite a bit of pushback from ethicists against the CS department expanding ethics education in its departmental courses. They viewed this as part of a "CS eats everything" trend that would hollow out humanities and social science departments, as well as diminish the role of a broad liberal education codified in the core non-major-specific curriculum. Instead, they preferred CS to stick to more technical classes, but simultaneously were pushing to include at least one ethics course as part of the gen-ed requirement that all students have to take, with ideally a 2nd course more tailored to type of major. In any case, courses taught by social scientists or philosophers, not by CS profs with a CS course number.
Some of this is just university turf warring, but I think some reflects real differences in opinion on how to structure things. Particularly in the U.S. version of university education, where majors are not as dominant a proportion of total course requirements as in some countries. (Depending on the university, courses in your major are something like 35-60% of the total.)
Interesting, thanks for the context. I get that its tough to find the right dividing lines on these in a university context, though I admit I'm partial to more integrated approaches. Like, I can't help but imagine teaching ethics within a tech context would be far more stimulating for CS students than a general ethics course.
I guess the good part about a general ethics course would be exposure to students in other majors that think a bit differently, which would hopefully open up CS students perspectives.
On the other hand, a CS specific course would be able to do something like assign students a project to build something, and then follow it up with questions of whether that should be built at all, because the thing in question was ethically problematic.
From my personal experience, the introductory ethics classes taught under philosophy often feel like "philosophy of ethics", with tenuous connections to anything taught elsewhere. Classes taught under science and technology studies are more useful, because the field is empirical. Even if none of the case studies are from your field, the ways STS approaches them are widely applicable.
CS 181W/182W is pretty close to a required class for a Stanford CS major. There are "Technology in Society" and "Writing in the Major" requirements, and taking one of those classes is the simplest way to satisfy both.
Stanford student here. You’re right that there aren’t a ton of dedicated ethics classes within the CS department (though there are many tech-oriented ethics courses around the university).
That being said, there has been a major push recently to _embed_ ethics inside the intro sequence.[1] All of the major intro classes (106A, 106B, 107, and 109, to name just a few) have dedicated ethics components.
Thanks that's really good to hear, embedding and repeating the theme throughout different courses really is the best way to build ethical awareness and mindset.
When i was at uni (definitely nothing as high powered as standford) we had one ethics class. It was the most useless class i have ever taken.
The prof seemed very uninformed about the computer side of the material (it was taught by someone from philosophy dept). Examples were from like the 80s (cyberstalking people logged into the mainframe via finger and w) and just generally had nothing relavent to any actual ethical conundrum.
Ditto moral philosophy, civics, epistemology, logic. The earlier, the better.
Started binging History of Philosophy Without Any Gaps during the apocalypse. So grumpy that I missed all this stuff. If nothing else, I would have learned that most of our debates in society are truly ancient, maybe save myself some angst.
When I was at university (mathematics; not so long ago) there was basically no ethics course in the curriculum[1] at all. Common career paths were:
- academia
- intelligence agencies
- teaching
- various “data science” or “AI” type things (could include eg pricing insurance or selling/targeting ads amongst other things)
- computer programming
- finance (investment banks, quant shops, etc)
[1] A few lecturers started trying to do a few lectures in ethics topics while I was a student but I think they weren’t really a proper part of the curriculum
I've been asked to do things I was ethically conflicted about. What I learned is that the best way to be ethical is to be rich, because telling your boss you refuse to do things is easier said than done when you have a family to support.
I have found when it comes to money/career; 99.99% of people look the other way, or rationalize their cowardness, or greed.
In college, 1 out of a 1000--10000 (I'm pulling these numbers out of the air) students ever publicilly questioned a teacher who wrong, or unprepared. Yea--I get it. They can ruin your life, esecially the bloated senile fools with Tenure.
And yes--it's easy to be ethical if your are wealthy.
I walked out of a Chiropractic School because Subluxations are maybe 1 in a miiilion, and any success in Chiro is based Placebo.
So many in health care are absolute ethical frauds that fall back on The Art of Medicine in order in order to make more money.
My elderly mother has pain in both shoulders. He doctor's office said the doctor can only exam one shoulder per visit. Just rediculious bill padding. I'm not worried because the pain in in both shoulders, and related to movement.
I won't get started on my Psychiatrist who demands I see her monthly in order to get a prescription refilled. And yes--the rediculious meetings are me giving her $159 cash for a 5 minute session with someone I despise personally/professionally. Why--because I'm addicted to the two highly addictive drugs, and I've been on the drugs for decades. I figure why put my body through a detox at this point. I have to play the charade.
This problem has been the basis of my own studies.
I’m studying computer science in an interdisciplinary build-your-own major style program, focusing on AI ethics. I’m not in any position to make these kinds of claims but I do think that, as you’ve mentioned, these issues will only become more serious in the near future.
At first I was a little worried that not having the traditional CS degree on my resume would hinder me from career opportunities but learning about problems within this space has been incredibly inspiring in its own right.
I'm a lawyer and now developer, I'm not sure how many classes would be enough? Ethics in the technology sense is not the same as legal ethics and may be closer to philosophy?
Looks really good. I still remember the curriculum of my CS degree in Europe:
- first year: Mathematics I, Mathematics II, Mathematics III, Electronics I, Electronics II, Digital Circuits, Statistics I, Physics I. The rest was about software and programming (at least!)
- second year: Mathematics IV, Statistics II, Physics II. The rest was about software and programming (nice!)
- third year: software and programming only (very nice!)
So, about 80% of the students didn't pass the first year because of its heavy mathematics + physics content.
Extra:
- mathematics I = logic, Boolen algebra
- mathematics II = calculus
- matehmatics III = Multivariable calculus and something else I don't remember
- mathematics IV = Complex analysis/complex variable calculus
That looks like a CompEng degree, something of a mix of CS and EE content. The physics and digital circuits courses don't seem very typical of pure CS degrees.
In Spain for example, there is historically no such thing as a Computer Science degree. Before the implementation of the EU-wide Bologna Process (mid 2000s), 5-year bachelor degrees were classified into either ordinary “Licenciaturas“ or “Ingenierías“ (=Engineering), with computing being an engineering degree (“Ingeniería Informática“) and treated as such. I'm not sure how it works now, but I think it's still a degree in engineering at least by name.
In my opinion, this being the only option has had a lasting negative impact on the IT culture in Spain, with many people who worked their way through (i.e. suffered their way through) getting their Computer Engineering degree feeling defensive about "professional intrusion" from people who work in the field without having taken Computer Engineering at university. However, being as I am one of those intruders, I am of course biased.
There was “ingeniería informatica”, which was kind of CS, but focused highly on software (databases were a significant part of the curriculum).
Then there was “licenciatura informatica”, although it was rarer to find and a lot of colleges woudn’t offer it. It should be the CS equivalent, but it was generally seen as very heavily related to math, and computation was seen in “general terms”. There were 2 or 3 programming courses at best, with most of the curriculum being similar to pure maths degrees.
Then, if you wanted to focus on hardware (like I did), your best path was “ingenieria de telecomunicaciones” (telecom engineering?) and then do a 2 year “superior engineering in electronics” (which just meant you need a previous engineering to acces).
Nowadays the scheme is similar, but instead of 3 and 5 year plans, they’re 4 or 5.
To be honest, in Europe, when talking about universiy degrees, there was no hard distinction between Computer Science, Computer Engineering and Software Engineering 20 years ago. It was all the same. Nowadays there is (I have been told).
A lower lever digital circuits and physics class both seem common in CS degrees. Digital circuits is foundational to how computers work. I wouldn't expect required classes after the into ones though.
It was similar for me (no physics but 2/3 of the courses were math) about 20 years ago. I suspect they do it because way more people sign up to study CS than the university can afford to have graduating every year, so they need a way to "filter out" a lot of students.
They already filter out a lot in terms of admissions (you need quite good grades in high school to be able to attend the first year) so I'd wager if the purpose was to train as many people that are capable of being trained in programming we'd see a lot more students graduating every year.
It's a fair point that CS is not the same as "programming vocational school" but seeing what companies use as criteria for hiring junior programmers you can't really blame the students.
> It's a fair point that CS is not the same as "programming vocational school" but seeing what companies use as criteria for hiring junior programmers you can't really blame the students.
True. I don't regret attending (and passing!) all those math+physics lectures to be honest. All the stuff I missed in uni regarding software engineering and programming I learnt them quite fast and easy in my own time (e.g., at least for me after passing an exam full of Cauchy-Riemann Equations and friends, it was quite easy for me to learn Java or to go through books like TCP/IP Illustrated or The Art of Unix Programming in my own time).
I managed too, but the problem is a lot of people who didn't could have been great developers. Your ability/tolerance to math/physics isn't proportional to your ability to become a good programmer (not any more than any other mentally taxing activity at least).
I suspect it is a distinction in the common names of things. Eg to me “logic, Boolean algebra” feels like something that ought to fit into a lecture or two (assuming here that logic doesn’t mean formal logic full of things like tautologies and modus ponens and some ZF set theory). So I have to assume that there’s more to it.
Another example is that in my education I think of analysis as being the “pure” thing with a first course consisting of 0. epsilon-delta; 1. sequences, series, limits; 2. Continuity, limits; 3. differentiation, Riemann integration. And calculus is the application of integration and differentiation and probably involves physics and integration by parts and things like Stokes’ law or Green’s theorem and maybe differential equations (unless they go in a separate course). But I understand that at other universities these might all be called calculus.
US colleges often don't even do that. They just learn differentiation and integration rules but none of the actual math, hence why it's called "calculus" and not "real analysis" which the math majors take.
We can thank Dijkstra for that I guess... He was very pro theory and anti practice. Most CS folks from that era had a math or physics background. At Eindhoven University of Technology they still have a Department of Mathematics and Computer Science. So your literally part of the same department as math students.
You need this? Damn the students who could trough through this must be good. IMO only real analysis and complex analysis in that list are real math that deal with a lot of proofs.
Same in Romania. For a 4 year curriculum:
first 3 semesters (1.5 years): a heavy blend of math, physics, electronics. general programming and numerical methods (matlab) on the side.
4th semester: a programming heavy semester with lots of coding: algorithms, functional programming, network programming, FPGAs. It is this semester that filters the most.
Mirrors my own uni years, plenty of physics and mathematics (bool logic, analysis & calculus) on the first year, though I also had classes on digital circuit design and the internal hardware design of a standard Turing computer.
I remember really enjoying designing the circuits, then writing machine code for them and seeing it all work at such a low level.
It’s somewhat similar in India. First year has introductory courses from all other engineering streams. Mechanical, civil and what not and is common for all the students. The specialization beings from the second year.
I hope this is a required course. I wish it was a freshman year course for me. I had to pick Unix up on my own (and fell in love while doing so), but a lot of my classmates didn't, and it made group work in the future a bit of a pain. Not that it is there fault, but it would have been nice to lay down an OS framework for students instead of focusing solely on writing algorithms and leaving what SSH is to mystery for a lot of students.
Not to be nit-picky, but I wonder if it shouldn't be "Practical Linux"? How many people work with Unix vs Linux these days? I would guess amongst the graduate demographic Linux is also probably a more recognizable and attractive term than Unix.
On the general point though, I totally agree. Even after nearly 30 years of working on Windows, learning Linux has been one of the best investments I've made over the past decade. No matter what OS you run locally, doing anything with the cloud, Android, Docker, etc. means understanding the basics of Linux.
as a self taught individual I always find it outstanding how much things they are able to pack in a CS degree and how fast people forget all this stuff after graduation.
Like how many of your coworkers from top CS schools remember most of the material in their compilers, cryptography, comp bio courses?
EDIT: To clarify, I'm not criticizing this approach, I think it's great to expose students to as many subfields as possible.
The key point isn’t that CS grads need to remember the stuff they learnt. What they need to remember when facing a real life problem is that they had studied about something that was similar to the problem they were solving, and have the ability to look up and easily grok the solution they had studied a decade ago.
As someone who is not a CS grad, it’s often difficult to Know where to even start looking for a solution until many years of experience, something that CS grads I’ve worked with and mentored were able to do as interns.
Of course, there’s always the flip side that CS grads need to learn to not always apply the fanciest and “coolest” algorithm that they learnt in college because it isn’t always the best approach to a problem, but that’s a much easier skill that can be learned anywhere within months to a few years given the right mentors.
Agreed. I think it’s primarily reference material. I took an Organization of programming languages course once, and even though I don’t use Prolog everyday, I’m able to jump and think about it if I ever have a case where I’m working with Boolean logic. Alternatively, I don’t know much about semaphores in the OS, but when I think about locks, it’s something I can refer to for more ideas. I wouldn’t say it dramatically improves my life, but it’s just random knowledge that I wouldn’t be intimidated by if I stumbled upon it in the real world
I switched into Software Engineering following a physics undergrad and had to self-teach the majority of what I know.
10 years in, I find that many individuals fall into a trap of having forgotten many concepts while also thinking that they weren't useful in practice and a bad memory of having to learn/crunch the topic.
This was a significant difference from my experience where most concepts I only picked up as I found them useful/interesting to my work. As such I generally have a sense of pride/enjoyment from seeing an optimal algorithm or simplification of a problem based on concepts in the literature.
I think the 4 year CS curriculum could be revamped to focus on semi-practical projects with less focus on individual topics. Crunching algorithms for 2 semesters probably makes aspiring engineers feel that they are simply memorizing pages from a book which are trivially indexed by google.
> Crunching algorithms for 2 semesters probably makes aspiring engineers feel that they are simply memorizing pages from a book which are trivially indexed by google.
I realize that the majority of engineers will never need to use any of the more advanced topics taught in an algorithms class, but I hope you recognize the irony in this comment; the “trivial indexing” performed by Google is anything but, and, in fact, is only enabled by those very algorithms, implemented dozens of times, in multiple languages, with subtle variations and optimizations and under non-obvious reinterpretations, at every level of the stack.
For the uninterested, it's easy to think or claim that a library or service will do the heavy lifting for you. If someone's goals with a comp-sci program are SaaS apps, web development or other topic which they perceive as [Not Hard], then it's easy to fall into the trap of thinking these topics don't matter.
I've generally found that most new or novel projects require a strong understanding of the fundamentals.
Yea, I kind of took a similar route. I was so bored near the end of my business major and tacked on a comp sci minor at the end. Those few classes I took were amazingly interesting then and most are still with me now. I was lucky enough to have a business internship while in school where I was exposed to the tech side of things and that got me extremely interested in and motivated by computer science. I'm often curious about what a full degree would have given me or if I would have had a better career if I went the comp sci route from the start. At least for me, I feel like I've learned close to 99% of what I know now from work and from learning in my free time after school. I feel so lucky to genuinely enjoy my job and be interested in learning more and expanding on my skills even to this day.
The best parts of education is not primarily the material you remember. It's the effect on your thinking patterns as a result of studying and the familiarity with a school of thought.
For example, I studied Greek before software engineering. I've forgotten quite a bit, but theres an entirely different set of thought processes I have access to while doing software engineering because of it.
I see this type of like used to justify whatever it is the speaker enjoys being forced on everyone else. Something like "everyone should learn philosophy because it trains the mind" usually means "I like philosophy and wish it was taught more at schools".
I think it depends on what you think education is : if you believe that education is going to an elite university then I think it is elitist. If you think education is being exposed to a wide range of ideas and perspectives - a range beyond which you would have found by yourself - then I don't think it is. A kind Aunt with three bookshelves and an open mind can give you an education that you couldn't buy. Would that make you part of the elite? It would be difficult - it could take years - but it's not elitist.
Every discipline (academic, artistic, practical, even athletic) deal with certain types of problems and have develop their own heuristics for dealing with those problems. And because most discipline involve not a single skill but a set of skills, some disciplines will have skill overlap.
If you play music, run your own business, study (or practice) engineering, or become involved in an academic discipline you develop a set of skills you can carry to other domains. Don't really see how the dispute here
I’d say the best part of education is familiarizing yourself with the domain. You may forget the details but the familiarity and know how about what a Sobel edge filter is useful the next time you encounter such a thing in professional life.
Analytical thinking and pattern recognition is indeed also a key benefit of education.
Can you expand a bit on how Greek helps? Are you talking about Ancient Greek? I know a few latin derived languages but I never taught about the relation to computer languages.
I’ve recently been trying to translate a book my dad wrote from modern (‘demotic’) Greek into English. It’s a very slow process for me, as English is my first language and my Greek is very poor. I have to constantly look up a lot of words and puzzle over some sentences repeatedly. I did notice though that Greek (or my dad at least) seems able to communicate ideas in very few words that when translated into English, as directly as I can manage, I find require longer and more ‘flowery’ sentences to achieve the same effect, at least with any degree of elegance or conventional tone. I’m not sure how much of that is due to his writing style (or mine! :) and surely it is a very qualitative, subjective impression, but it does seem to me that Greek is quite an ‘efficient’ language.
I’m a terrible, entirely self-taught programmer/copy’n’paste script kiddy, but I would imagine that learning any new language helps with programming on some level (and perhaps maths/logic even more so?): dealing with different symbolic representations, grammars, alphabets, logographs etc.
Here’s an article I found on the subject of formal grammars/Chomsky and their influence on computing:
https://exaud.com/noam-chomsky-computer-science/
Yes, ancient greek. And I think the connections are mostly indirect. In interpreting literature in another language (Latin, Greek, etc) you spend time analyzing syntax and grammar looking for the idea or intention. Programming is very different, but code does still express and idea or intention.
Also, really helps with reading and written communication.
If you understand a concept well enough you can never really forget it. I did a very similar 4 year CS curriculum and a decade and a half later can still recall pathfinding algorithms, Diffie–Hellman key exchange, red black trees, big-O notation, OCaml, half vs full adders and lots more with a very brief glance at reference material.
What university has taught me is to not give up and to keep looking for the solution, no matter how hard the problem is and how little I know. Sometimes there was no choice but to crunch hard math problems for endless hours. Most people give up too easily when they have no natural interest for the type of problem they are facing.
Do I make use of all the material I was shown? No. But it is really nice to have that universal background which, for the majority, I would never have studied on my own. You could ask the same question about middle school or high school - do you really need to know about biology, language or arts to be successful? Do you remember many details? Of course not; general knowledge is still incredible valuable.
People will forget stuff over the summer before the next school year even begins. Much less waiting until after they graduate.
Material has to be covered repeatedly in a series of courses building on each other. E.g. first you learn basics. Then you apply it in subsequent classes. This is how mastery in learning works for anything. One class on an isolated topic is probably a waste of time in the long run, unless it really makes an impression on you for some reason (e.g., you really love it).
Some programs, especially overseas, let people mash together a broad range of classes on disparate topics with mastery in nothing (except perhaps for skill at cramming itself). Those are almost worthless degrees.
Indeed most CS graduates will forget the content after the exams, but after the process of working through the courses, they are much faster in picking up the knowledge when needed later in their career (and they are also more confident and comfortable about the subject compared to those who are never exposed before)
> Like how many of your coworkers from top CS schools remember most of the material in their compilers, cryptography, comp bio courses?
Nobody forgets a compilers course.
A "compilers" course is probably the first CS course where debugging is real--and terrifyingly hard. A compilers course converts a programmer from a "null pointers are bad" person to a "null pointers are evil" zealot.
Compilers courses are probably the closest that a CS person will get to PTSD.
I've taken a compilers course, at Stanford no less.
I've written a couple of compilers and some near-compilers. (A very fast simulator can be a lot like a compiler.)
I don't think that null pointers are evil. In fact, I like null pointers.
My beef with null pointers is that very few languages support multiple null pointers. (No, mocked objects or sentinels are NOT a good substitute.)
Yes, I want multiple isNull values that can be distinguished but can't be used. (Python's "lots of things are false and you can create more" is arguably the closest.)
Looks like something you'd find at some no-name technical college in Germany and not a top university. Where's the linear algebra, multivariate calculus, real analysis, differential equations, graph theory, abstract algebra, numerical mathematics, stochastics, etc.? Those are all required courses in my degree with additional options in complex analysis, functional analysis, topology, measure theory and so on. How are they planning to do those robotics or machine learning classes without the mathematical prerequisites in linear algebra, differential equations and optimization? It looks more like a vocational training program to me. No self-respecting university here would offer courses on "mobile development" or "web development". Even for analysis of algorithms you need basic calculus which apparently isn't part of the high school curriculum in the US (although we can assume that everyone who makes it to Stanford would've taken AP classes).
When I browse around these courses, I see a couple of high-profile names teaching them, but it's interesting to see how the overwhelming majority of the teaching work is done by brilliant people who almost never make it to the spotlight. I hope they are getting the recognition they deserve at least in their inner circles.
I wished there was a list that maps these classes to it's equivalent on Coursera / edx (if they exist).
I've noticed that interesting classes like SICP cs61a from Berkeley still take place online (their material is available), but are no longer available on the MOOC platforms. The same goes with some interesting MIT classes (Introduction to Computational Thinking)
(Although a certificate from such platform doesn't mean that much to me, it does help somewhat with motivation and looks better on a beginners resume than nothing. )
Actually if you go looking for these courses, you won't find most of them. You won't even find equivalents. Sometimes you can find Coursera courses which are watered-down and combined versions of multiple courses, but they're usually entirely entry-level and useless.
List of classes. Only a subset are required for a degree. A bachelor's degree from the School of Engineering looks like it requires these CS classes [1].
• CS 103 and 109
• CS 106B or 106X
• One of CS 181W, 182W, 191W, 194W, 210B, or 294W
• One of CS 107 or 107 E
• One of CS 110 or 111
• CS 161
• A senior project, which seems to fall under any of several course numbers
• It looks like you have to pick a "track" (AI, Biocomputation, Graphics, and a few others) and take 4 or 5 classes from that track.
(That is just CS classes. There are also some required math and physics classes).
(I specifically said from the School of Engineering because I don't happen to know if all Stanford CS bachelor's degrees come from that. Some schools offer a degree from more than one school/college, sometimes with different requirements).
It's a list of classes. At least the way it worked when I attended, CS students chose a particular track (Theory, AI, Systems, Graphics, HCI, etc.). The core curriculum was 3 theory classes and 3 coding classes. Each track has 2 or 3 mandatory classes (for systems it was operating systems, and either compilers or computer hardware). And on top of that there's general requirements.
undergrads takes about 5 classes per quarter, 3 quarters per year, for four year. So 60 classes, but including all the other stuff that is non CS related. So yeah, its a list, not a curriculum.
Am I missing something, or is there supposed to be something special about the curriculum? Everyone knows the only reason to go to a top school is for the peer group/positive eugenics aspect of it.
Would be interesting to see if someone could make a one-year bootcamp from this classes (not all of them, but cherry picked) and what the result graduates would look like.
Why OO? Why C++ so early in the curriculum? These seem like very specific/opinionated tools. I got a degree in math without ever taking a “HP 48GX” course.
There's a history of teaching C++ to novice programmers, with some success. It even used to be a language of choice for AP intro-to-programming classes. Teaching Swift or Rust would be far more opinionated. As for OO, while old-fashioned it's something that new grads should at least know about, and it can still be useful if you avoid the big footgun - namely, implementation inheritance.
I love how each course has a unique web page. Do the teachers make them themselves? Almost feel like browsing their personal websites and have that sense of exploration going through them.
I'm a adherent to the idea that nothing teaches system design except experience and having to fix your own mistakes in sufficiently large systems.
In most software development courses, the student is learning how to make something (and then after that is done, its thrown away for the next homework assignment).
System design is often about writing the glue between different constraints - frequently through another constrained component... and then having to live with the consequences of that design for a year or more (possibly trying to fix it).
Take the "I've got a relational database here with mixed transactions and record updates and a document database there that I want to reflect the current state of an object in the relational database." And so you get to figure out how to use GoldenGate ( https://docs.oracle.com/goldengate/c1230/gg-winux/GGCON/intr... ) or Postgresql to amqp ( https://livebook.manning.com/book/rabbitmq-in-depth/chapter-... ) and then write something that consumes that and writes it into CouchDB or MongoDB (which do you chose? why?)
Once you've got that working... keep it working for a year or two.
I think I agree with you almost fully but not quite. Systems design in the sense of 'designing systems' means that a lot of the time you are dealing with glue, but perhaps quite a bit of time is spent on the 'blueprint'. A good system design means that you can synthesise your learned knowledge with that of the body of knowledge to produce a new solution. So sure, you from experience know that a doesn't go with b, but if you include c, you can z. But sometimes you need to break things down further, to components you have haven't used, have never seen before, and only barely understand. This is where your CS first principles come in. You need a URL shortener. Should you create a hash of the url on demand when requested? Well maybe not, because you could get collisions, how about pre generating and picking them up at request time? Oh look, someone has written an article on this problem!
So much of system doesign is understanding what your 'actual' problem is, and then thinking it through, looking for what others have done, and then bringing it together with your team knowledge.
How did you like 6.824 specifically? I haven’t taken any systems courses as I’m not too interested in it, but I realize distributed systems is important in the industry as a SWE and was thinking of watching the videos. Any other courses you recommend on the topic?
This course is incredible. It's short, and it's a course aiming to teach people how to ace their systems design interview, yet (perhaps unknowingly) teaches you almost everything foundational you might need to know about systems design and the reasons behind each choice.
The courses go by a certain order after the core intro courses. For example, the 140's courses are more systems-y than say, the 150's which are theory courses.
Intro core systems include 106B, 107, 110, and the newly introduced 111.
I believe this list was compiled by Andrej Karpathy (director of AI at Tesla).
I thought it would be useful to the HN community given its high signal-to-noise ratio:
1) You can get a quick birds-eye view of the general trends / topics that are currently being taught at the Stanford CS department.
and
2) You're one click away from learning more about each topic if you wish to do so, considering all of the courses listed have publicly accesible websites.
We all know much of the learning in engineering is on the job anyways, so the role of formal education is less about particular job skills and more about building foundations for understanding - exactly the time and place to teach ethical frameworks and other critical interfaces with society.
Ten years later you may not remember the details, but at least you'll remember there's some kind of ethical framework or lesson that explains why a course of action your boss is considering might not be right or has implications they're not considering. The world needs more of this kind of awareness from CS grads. Not suggesting this be a major part of the curriculum, but just maybe we could go from 0 required courses covering this to 1 or 2.
[1] https://web.stanford.edu/class/cs182/ and https://5harad.com/mse330/ Yes, STS (https://sts.stanford.edu) exists, but again that's elective and thus involves sacrificing opportunities to take those courses.
EDIT- see epoch_100's link here about Stanford CS embedding ethics throughout the curriculum, which seems to address this concern: https://hai.stanford.edu/news/building-ethical-computational...