I might also note that it'd be nice if we pinched some stuff from our neighbour professions. In chemistry you take lab class, in some engineering disciplines there's metalworking or assembly.
It would probably handy to have at least one "shop class", being a mix of tools (here's an editor, here's version control, here's testing) and craft (here's your copy of Code Complete).
Also ... where are the databases? A lot of damage is done in this industry by not understanding the concept of structured storage and querying. If you're going to take discrete maths (including graphs, sets and predicate logic), you'd be missing out if you don't get to apply it.
It's woefully missing the mathematics curriculum that all the reference institutions [and any accredited US program] require. Four semesters includ8ng threeof calculus appears typical. CS programs in the US also require the two semester physics sequence where calculus must be applied.
Like any technical degree, understanding the maths is one area where the educated differentiate themselves from mere graduates. All those hours spent thinking mathematically and procedurally are useful. Comfort with ciphering is essential.
That's because 1) calculus is taught in high schools and is generally taught in college regardless of whether you major in CS (so for example someone wanting to self-teach CS after college will have taken calculus). And, calculus is not particularly useful for most CS grads, except for specific areas (theoretical aspects of probability, machine learning, graphics).
Many great CS programs also don't require physics. From my observations, physics requirements in curriculum tend to tacked on solely due to CS being in the engineering school. To be honest, physics beyond a general overview is not really useful for most CS grads, even those doing complex CS-heavy work.
Discrete math, logic, proofs, and probability are all immensely useful in CS. However, they tend to be of a completely different flavor of teaching compared to calculus courses.
I'm not saying calculus is something that every computer science graduate uses in their daily professional life. But you're not going to meet a [US] computer science graduate who does not have it or a computer scientist who cannot perform it. And anything that says "here's what a computer science degree is" does a disservice by not mentioning it.
My criticism is based on the same assumption that underpins your argument, that the people looking at this list already have a sufficient background in mathematics, or more generally that people looking at the article have general STEM training.
Yet, just looking around HN, you'll see that many of those asking "Should I get a CS degree?" are people who just fell into programming, and in the larger world you have people moving into the field as a career change Think about all those bootcamps that market to liberal arts and business majors. These are people with degrees that correlate with a weakness in mathematics and science. A weakness which often shows up earlier in education and results in such people avoiding Calculus in high school and college.
As I take online courses, the limiting factor [after time] is the amount of mathematics I have at my finger tips. It is perhaps a common problem as even Einstein is said to have wished he had studied more mathematics.
In the end, if computer science education is basically vocational, then perhaps it makes sense to replace Calculus I and II with Rails I and II. But that's not really what 'Computer Science education' usually means. That's IT and CIS.
You are definitely correct that the traditional Computer Science education includes Calculus, but that does not mean that it should include Calculus. I would appreciate if there was empirical reasoning for why Calculus should be taught in Computer Science rather than the argument be "we need Calc because we're supposed to and every one else has it".
It is easy to argue that Calculus helps, but it would also be easy to argue that various other fields of study would help (physical education, journalism, English to name a few).
Full disclosure: I am a professional Full Stack Developer with Grad Level CS Education
The should I am shoulding on the article is that it ought to account for the facts on the ground. The question of whether computer science curricula in the abstract ought to include calculus is a different question than should something which purports to be equivalent to a computer science curriculum include it - particularly when four of the five reference degrees include calculus and the sort of person who might pursue this track is subject to Dunning Kruger effects.
Now my personal opinion is inclined toward calculus being part of a computer science curriculum in the absence of compelling evidence that it should not. My reasons are:
+ Calculus is where algebraic skills really get practised to the point of competence because there they are tool rather than an end in themselves.
+ One of the longer edges at the edge of computer science as a science encompasses signal processing and that entails calculus directly or indirectly via statistics.
+ If computer science is a branch of mathematics, constructing an argument is left as an exercise for the reader.
Against calculus the primary argument is vocational. But as with any science curriculum these days, the product is graduates not scientists. We with half of all graduates below average.
> I would appreciate if there was empirical reasoning for why Calculus should be taught in Computer Science rather than the argument be "we need Calc because we're supposed to and every one else has it".
(1) Research in Computer Science.
Don't expect to get very far in research in
any STEM field without good knowledge of calculus.
Calculus is a pillar of Western Civilization, one of the
all time crown jewels, and the root of the most important
part of math, 'analysis'. Discard 'analysis' at high
risk for the future of your career.
We're talking about the future here, right? That is, you are
in education to prepare for the future, right?
E.g., the last paper I published on computer science was heavily based on measure theory, that is, a grown up version
of calculus.
At present, commonly some of the best research
opportunities are to further 'mathematize'
computer science where calculus is just baby
talk broadly assumed.
(2) Keeping up in Computer Science.
To keep up, you will need to read,
and authors will feel free to use some
calculus.
E.g., maybe you are interested in models
of viral growth on the Internet.
Okay, you can quickly come to the
differential equation
y' = k y (b - y)
with y(0) known. Just for viral growth,
some calculus.
(3) Applications.
E.g., maybe you want to do some 'machine learning'
using, say, maximum likelihood estimation.
There need to solve a problem in non-linear programming.
A key part of that work is the gradient, that is,
calculus.
In robotics, drones, and other forms of mechanical
automation, well need some calculus.
That seems to be setting up an barrier for Calculus that nothing else has to face. Is there empirical evidence correlating an operating systems course to success in the field?
More generally,a lot of the value to the student in a degree is signalling -- not only the bare fact of the degree itself, but also culturally. Even if an online education can't provide the first part yet, it can provide the second one. Dropping a reference to the Church–Turing thesis into the conversation at an interview might get you the job. Such "success" is independent of whether or not knowing the lambda calculus is actually helpful day to day once you're there.
An OS course is directly under CS. Getting asked OS questions during a systems interview is normal. Getting asked calculus questions in most CS interviews (except the specific areas of machine learning and graphics, and even then pretty much never) is unheard of. When's the last time you were asked to differentiate something, integrate something, use Taylor series, double integrals, etc? Having to maximize/minimize some function might come up, but probably in an abstract sense.
I think CS really needs to be split into two paths; software engineering and (for lack of a better term) software development. I use math on a daily basis. Today it's statistics, yesterday it was calculus (motion control tuning), tomorrow it may be trig.
What I do is very different than what a web developer may do. Not better or worse, just different, and it requires a very different skill set. The fact that we not get roughly the same education is ludicrous.
> In the end, if computer science education is basically vocational, then perhaps it makes sense to replace Calculus I and II with Rails I and II.
Why do you bring up Rails? If it is in reply to what argonaut said, that is a straw man; argonaut seems more likely to want to replace calculus with logic, discrete math, etc. I.e., other branches of math.
His argument is that Calculus isn't used much 'on the job' and that these other things [which just happen to be maths] are better because they are used on the job.
It's an argument for vocational relevance. I simply extended it. It's 'slippery slope' not strawman.
However, slippery slope arguments are relevant for science education and we are talking about computer science. They become less relevant as
science -> engineering
because arches and bridges can be designed empirically. Which is fine if you're training Roman Legionnaires. But it doesn't produce an Omar Khayyám.
I see what you mean, but I don't quite agree. argonaut seems to be refering to relevance to CS ("even those doing CS heavy work"), not just the things that CS grads end up doing (which probably is more likely to be software engineering than CS). And when it comes to logic, discrete math et. al., the relevance of it refered to the relevance to CS, not to enterprise programming, web programming, or whatever it is that CS grads end up doing.
I wouldn't really say that to argue for having courses that are mostly relevant for CS in a CS course is to argue for vocational training - it would be more like arguing for a more specialized (to CS) education, as opposed to a more broad education (CS plus other things that might not be directly relevant or transferable to CS).
Comon calculus was invented in the 17th century. Thousands of literature has been written on them. It won't be hard for one to fucking pick a book from their neighborhood library and study it.
> That's because calculus is taught in high schools and is generally taught in college regardless of whether you major in CS (so for example someone wanting to self-teach CS after college will have taken calculus).
The depth usually required for a CS degree is not usually required in high schools (and often not available there), nor is it usually a requirement for non-STEM degrees, and people wanting to self-teach CS after college will very often be non-STEM majors.
and is generally taught in college regardless of whether you major in CS
I don't know where you got this impression. Most liberal arts students never take calculus. And those students who do probably don't continue on to take Calc II and III, or linear algebra, or additional math electives, all of which are required in a typical CS program.
Obviously, other engineering disciplines require these courses, but it's not correct to say that most college students know anything about math.
That's what I get for shooting from the hip. Physics is often required by the five programs referenced in the article, but not directly by current ABET criteria. Though the mission of the program could indirectly require it.
As I tried to imply, physics is the one physical science where there is an introductory sequence that requires calculus as a pre-requisite and it's application to pass.
If you are going to educate yourself broadly over the subject of software engineering it might be helpful to take a look at what a committee of professionals think the software engineering body of knowledge comprises:
If you're interested, a while back I took a list at the "Consolidated Reference List" for the SWEBOK:
"This is the first half of a none-too-serious annotated bibliography of the references that the IEEE Computer Society has identified as the most important sources for its Software Engineering Body of Knowledge (SWEBOK)."
My general conclusion is that, if you have an engineer who is intimately familiar with all of these references (and nothing else) then you shouldn't really expect much work out of them.
The goal of the post seems to be a curriculum for Computer Science, the chapters 13 and 14 in the list seem to cover most of this. Though I would approach the matter quite differently depending on if I wanted to learn all the CS in a certain degree or all the CS needed/useful for practical Software Engineering.
This is an excellent list. I've been coming at it a slightly different way and trying to figure out what the three semeseters of "computer science" would look like in at the high school level. The thought being that some amount of understanding of computers has become essential to everyday life.
I do think there will be a full CS curriculum from one of the MOOC providers soon, but I don't think such a curriculum will produce many "graduates" unless it is paired with in-person instruction of some kind.
I'm in it and it's awesome. They're doing some really cool things pushing forward the tech for online delivery and course management. And I'm happy to say that it is every bit as rigorous as you would expect from a Top 10 program.
I'm also currently enrolled in the program and agree 100% regarding the quality and rigor of the classes. To paraphrase the way another student put it, "it's one thing to make it into the program -- it's another thing altogether to make it out."
I'm looking into applying to this in the next year or so. How much time do you feel you have to set aside each week to keep up? How many courses at a time are you taking?
I took CS6300 - Software Development Processes and CS7641 - Machine Learning. I would not recommend two classes at once in your first semester, and never two classes with ML. (I've heard that Networking is comparable to SDP, and advanced operating systems is comparable to ML.)
SDP required 9-12 hours a week on average (many more some weeks) spent on group projects. It would have been less if I'd been working alone. The hardest part is working in a distributed team with no leader - especially because lots of people take this as an "easy" intro course; of the 6 people I worked with, 4 of them were not comfortable being asked to do any programming. O_o
ML required ~25 hours a week on average; I spent close to 100 hours on it during weeks with projects due - fortunately there are only 3 projects. The lectures are longer than SDP, the projects are hard, and there are exams that you'll have no idea how to prepare for. You will love it anyway.
Thanks for the input. If I do this (trying to talk some colleagues and friends into it, study buddies and drinking buddies if it gets too bad) I'll probably have to stick to one course a semester then. I figured that'd be the case.
Does anyone offer a Bachelor's equivalent of this? Last time I looked, most online offerings were more like Information Science and the like. I don't recall a full BS CS online.
There are several. The two that come to mind: University of Maryland, University College (UMUC) [1] and Oregon State's Post-bachelors program [2]. If you search /r/cscareerquestions, you'll find some posts about each.
I am currently finishing up semester two of seven at UMUC's program. It's okay. Why am I in it? It's free for me.
I'm not sure what GT's masters program delivers, but UMUC's online program hasn't changed since it's inception (the 90s, I think). There are no online lectures and little guidance from professors. I read a text book, do exercises, submit assignments, take tests. I do like the structure and pace (two classes a semester), and I'll have a bachelors in computer science.
It looks like the OSU program requires a bachelors degree in another subject and the UMUC program is $60,000 in tuition (for out of state students; $32,000 in state) - which is about 3x what I paid for my undergrad tuition 5 years ago. Not that it isn't worth the cost, but that price is a prohibitive barrier to lots of prospective students.
Maybe they need to update their site. At the moment, if you select US as your country of residence and go down to the fees section, it says it is not available in the US.
Over the last 10+ years my entire fortune has been made by directly countering this ignorance and other misconceptions associated with the connotations of accreditation. It's been brilliant! I am "set" for the rest of my life and as long as this naiveté is perpetuated, so will many others be.
I am arguing against the blanket statement, "accredited or GTFO." I'm not saying that accreditation doesn't have it's place. However, doing a little research on what accreditation actually is, who does the accrediting, and what the outcome is, statistically, for accredited schools will swiftly prove my point. We don't just have failing schools, we have a failing institution that is, for the most part, accredited.
Can you elaborate how a lack of accreditation lowers the effectiveness of any academic program? A lot of real-world learning that is useful is not via a "accredited" source.
At the time I went there, at least, UTCS at Austin wasn't accredited, although it was one of the top CS departments in the country. The general consensus was that accreditation was such a low bar it wasn't worth pursuing and that it would put requirements in place that would limit future flexibility. We were leading, not following, dammit!
On the other hand, accreditation is a pretty low bar and many of the courses that are not have, like this list, overwhelmingly massive chasms of missing fundamentals along with a heavy focus on things that are "trendy" and "relevant" and will thus be completely useless next year.
I couldn't disagree more. I went to an accredited college for four years and I've learned far more about programming through sources I've found online. It's embarrassing how little I was exposed to at such a high price.
Don't discount the possibility that you're learning more because you are now more experienced [and perhaps more mature] than during your undergraduate years - e.g. your current educational decision making is informed by your time in the field and your motivations are more likely to be internal than due to external expectations of the type younger people experience.
That definitely factors into it but I can still look back at my course curriculum and make an opinion based off of that regardless of how much I've matured.
Having had the experience of being both a traditional aged an a non-traditional aged student before I finished my undergraduate education, the qualitative difference between those experiences was that when I was older, I tended to treat my classes as a starting point, not as a step toward a grade.
That attitude was more common among my cohort in graduate school, and it's very common in those MOOC's which achieve an active learning community (i.e. courses that are not self paced self study).
http://aduni.org/courses/
I might also note that it'd be nice if we pinched some stuff from our neighbour professions. In chemistry you take lab class, in some engineering disciplines there's metalworking or assembly.
It would probably handy to have at least one "shop class", being a mix of tools (here's an editor, here's version control, here's testing) and craft (here's your copy of Code Complete).
Also ... where are the databases? A lot of damage is done in this industry by not understanding the concept of structured storage and querying. If you're going to take discrete maths (including graphs, sets and predicate logic), you'd be missing out if you don't get to apply it.