The changing face of Computer Science education
matt-welsh.blogspot.com
matt-welsh.blogspot.com
Where is the fun and easy intro to BioChem course so that we can entice more people to become doctors? How about an "Intro to Medicine" where we do fun stuff like play Operation and dress up in scrubs?
All you're doing is postponing the high attrition until the second year, when the students learn that you bamboozled them with a cute and fun intro course. You can, and should, offer that course to all comers, but don't pretend like CS is just a continuation of that.
If you visit a few military recruiters, the Air Force will try to dazzle you with technology and exciting job opportunities and the Navy will tell you how much money you can get for school but gloss over the "you're on a ship for six months at a time and your job is to sweep it" part. But the Marine recruiter will say, "The Marines aren't for everyone. It's really hard, but we're the best."
The Marines have no problem meeting their recruiting goals, and I'd argue this is a much more honest and effective way to get people on board who are going to be in for the long haul.
And I don't know about honest and effective, but it does I think target a specific type of person.
But:
Where is the fun and easy intro to BioChem course so that we can entice more people to become doctors?
Nobody dies when a literature major builds a PHP website in their spare time, or hacks together an iPhone app.
Moreover, there are fun and easy intro medical courses: They're called first aid courses, and everyone should probably take one.
Lots of majors have an intro class that emphasizes fun and higher-level perspective at the expense of the details. They often have demeaning nicknames ("Rocks for Jocks", "Physics for Poets"), which is unfortunate, because I'd far rather see people have one superficial course in a subject than know nothing about it at all.
This is called high school.
My high school didn't even teach calculus at the time. [2] And I was lucky that they had even had, e.g., a physics teacher who could actually teach physics. [3] Many do not. I know this because if you mention physics to a random college student they will generally tell you stories about their clueless high school physics teacher and how that teacher made them hate physics forever. ;)
---
[1] "Oenology for Poets", though it did not go by that name -- it was colloquially called "the Wines course" -- was the runaway favorite of all the intro courses at Cornell:
http://www.hotelschool.cornell.edu/research/facultybios/facu...
Needless to say, my US high school did not offer lectures on wines. I wonder if the situation is different in France or Germany. ;)
[2] Not that it mattered; My math teacher helped me convince the school to let me take math at the local university instead.
[3] Not that it mattered; My physics teacher was clueful enough to take me aside on day one, give me a copy of PSSC Physics and tell me that when I got bored I should read this book. I was a very lucky high school student to have such clueful teachers.
Maybe more people would remember their high school biology classes if this were slightly the case. Instead, the gen-ed level courses are more like weeding-out courses, and many simply flat-out forget everything because it was such a horrible experience.
You wrote it tongue-in-cheek but I would honestly be interested in such a course. Many (most?) students enter college without a clear course of study in mind, and while the sciences and math require more work and discipline than, say, the much maligned English degree, that doesn't mean that the introductory coursework must be so dry and tedious as to scare away all but the most ardent students. If we want to encourage more people to get technical degrees, some "fun" courses could be a good tool.
The course was mostly writing and discussions, with a lot of high-level talk about things like the factors (biological, chemical and social) that allow different diseases and ailments move, etc. Stuff like that. Quite fascinating, but not too technical.
It certainly lead me to buy more biology books. In fact, due to that course, two of my favorite books were written by biologists. Had I taken the class earlier, I might have become a biologist.
We have that: every medical drama on TV, Patch Adams, Awakenings, etc. Not to mention the massive cultural esteem associated with the medical profession.
> How about an "Intro to Medicine" where we do fun stuff like play Operation and dress up in scrubs?
Playing Operation and dressing up in scrubs is intro to medicine. By the time you're in high school, you have a mental image of what a doctor does and roughly what the job entails.
Most people on Earth have zero concept of what programmers do. I've had family members literally ask me if I type ones and zeroes all day. (A: yes. You should have seen their eyes.) People know that we sit in front of a computer. Beyond that... nothing. They don't have any of what's on screen much less what's in our heads. With mathematicians people at least think about whiteboards and equations.
So, yeah, I don't see any harm in a little "Hey, here's a fun intro to what programming is."
I totally agree with the part about making the curriculum fun and show the applications of the "arcane" theories of CS but I don't think we should abandon the teaching of classic CS.
(Also, it really bugs me the way he slams his own field -- discrete math is not exactly "arcane".)
We need the people who can advance the field to get the training to do that- and the people who just want to create the next great company should be able to learn those skills.
The people in the second group should be going to business school or starting their own startup. Either would give them more benefit than a CS degree. A CS degree, even if it's "development" focused, won't give them the skills necessary to deal with management or the business side of things. Ideally, it should give the student the technical and theory background to be effective at any coding job they take. Personal skills are better taught on-the-job or in non-class related, side projects.
I honestly disagree that there should be a separate track. A good developer should have a solid theory background. It should at least cover data structures, computer architecture, discrete math, and algorithm design and analysis. OS design should also be covered, because that takes everything else and combines it into a real-world application. Good developers are aware of all of that, even self-taught ones. In other words, a "software development" degree really requires a superset of what the current good CS curriculums have, because it also includes software engineering paradigms and team project skills.
The real problem with programming degrees is that the industry, as a whole, is still very young. It doesn't have a standard set of best practices to draw on, especially compared to traditional engineering disciplines. I graduated from UIUC in 2007, and the SE course there focused primarily on extreme programming and RUP. Agile wasn't covered at all(and is basically impossible to do in a college environment). So while it was a good course to take for team project experience, the actual topics covered weren't that useful. The other problem is that every development group has a different set of practices, and these almost never actually match the ones taught in school. So while a school might teach a certain set of development practices, the ones that the students actually use might be completely different.
The term "vocational school" sounds a bit derogatory but that might be more suitable for a lot students who are less interested in theory.
I do agree that the fundamentals are very important for those who are interested in pure academic pursuits. It is very unfortunate that college has become the goto place to get a job, not a place to learn. But the truth of the matter is that the vast majority are only in class because they are looking for future wealth. Colleges, being businesses, will naturally tend towards catering to their customers.
The good news is that with the proliferation of the internet, academics can now learn about CS fundamentals even if the formal CS programs go into decline. Of course it is not too late to fix the education system, we just have to get past the idea that college equals job and return school back to its roots of a place to research and study.
(Yes, I'm whining about my Comparative Literature degree again, but I pursued that field seriously and rigorously, unlike many of my colleagues, and I feel like I'm being judged unfairly because of it.)
There was a time when people thought about universities as not being a business. Of course, in the present age everything is a business so I shouldn't be surprised at all.
The conundrum we're in now didn't start with higher education catering to customers who wanted future wealth. It started with employers offering high-paying jobs realizing that higher education was a sign of all the qualities they wanted, so they started mandating it. Universities adjusted accordingly.
I'm pointing out the obvious, of course, but it's because I've seen a lot of people say things like "we need to get over this idea." That's not going to happen until there is a ready supply of high-paying jobs that don't require college degrees, or until someone finds a method for achieving a high-paying job that doesn't require college but is just as straightforward and successful.
The best I have been able to find on the matter is one study that shows a loose correlation between those who have a formal education tend to have a higher income. Which, of course, says nothing about the effect of the education on the resulting job.
My hunch is that the people doing this had already self-trained before taking this course. I'd be really surprised if someone with zero background in programming could take an introductory source like this, and start producing working software.
I taught an intro to comp sci summer course that was evenly split between over-achievers looking to get the intro course done before starting their freshman year, and demoralized post-freshmen who had failed the course during the regular year.
By the end of the 9 week summer session, they all had a working Minesweeper game written in Java. I set out levels of achievement they could attain, from very basic working mechanics (including a timer) up to marking a space questionable and revealing all blank spaces surrounding a blank. I demonstrated how to do that using recursion, which our curriculum doesn't even allow teaching until 3rd year, but which my students didn't seem to have any trouble with. I believe recursion is actually a very natural way of thinking, but we prime students to fail at it because all they hear before learning it is that "it's so hard."
I see our curriculum, at least, as one of the biggest hindrances to learning CS. The students who succeed do so despite the adversity of a hostile curriculum.
(I found that recursion made sense to me as well, but that seems like selection bias. When I try to explain it I emphasize thinking that the problem is already solved. This chunk is "somebody else's problem" even if it happens to be yours later. Ignoring the problem and breaking it down. Mixed success so far)
>I found that recursion made sense to me as well, but that seems like selection bias.
If you look at "describing", some things are naturally described in a recursive fashion. At least a significant part of thinking is encoding non-verbal ideas in natural language. These include the obvious factorial function, but also such things as the chain rule for derivatives, or the use of subordinate clauses in a sentence, such that a grammatically valid sentence may become arbitrarily long, this achieved by continually attaching further thoughts, the process of doing such being predicated on an underlying -- metahumor.
I think recursion is best explained by doing. This is the definition of the divisor function, you implement it like this, etc.
Assuming subproblems are solved is a more sophisticated way of thinking about some recursive algorithms, like sorting. I don't think that is quite as naturally easy for most people. But I think the difficulty there is in the layering of concepts, not because the algorithm is recursive.
For the "fun CS" part: Scheme really doesn't get in students way (no syntax to learn besides "balance the parenthesis) and since Racket come with "batteries-included" as they say, you can start drawing things and making little apps (web or desktop) very quickly. I'll also add that the documentation is examplary, which is really something important in this case.
For the "real CS" (lacking of a better word) part: first, there are really good introductory book which use Scheme like SICP, The {Little,Seasoned} Schemer and HtDP (which is written by the Racket team). Second, the Racket platform support many languages like C[2] and even ALGOL 60[3] which is very close to the kind of pseudo-code you'll find in algorithm books like the famous introduction to algorithm.
For everything that isn't directly programming-related, well, it doesn't change anything. Execpt maybe for the basics of lambda-calculus which students would grasp easier if they have used lambda expression before, so Scheme is still a win here.
[2] http://planet.racket-lang.org/display.ss?package=c.plt&o...
Their intro course teaches computer science in Python, which is one of the simplest fully-featured languages to learn. It goes through programming structure and syntax without getting too much into the arcane. It piques the interest without scaring the new student off. If they decide not to continue, they now know the first bits of Python and can start learning more on their own.
If they do like it, however...the next level (6.01) is taught in Scheme, as best as I can determine. (MIT students correct me if I'm wrong) It rehashes a lot of the same programming concepts taught in the Python course but adds more on top.
I think colleges would benefit by asking if their students just want to program, or if they want to learn computer science.
"Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter."
Perhaps this is changing? When I was still in school, I managed to outprogram all the CS majors in my elective programming and sys admin classes as an English major. They all wanted to program to earn the money, but never adopted the programming mindset or learned new skills outside of class.
It reminds me of parents who dump their kids at school, expecting teachers to simply cram reading ability into their kids in <50 minutes a day without any help from the parents.
Let this be the opening comment for that debate. Does it demean universities from teaching theory and structures and so on with Scheme courses, and turn them into industry-chasing Java schools?
However, most of the feedback I received was that "it would be boring" or "too much work", even when I gave them the chance to pick the project. Instead of making something they would rather host LAN parties and such.
I however, wanted to dabble and give students of all experiences real exposure to CS. Not have an official gathering of video games, but maybe, to create a game and show what CS is like.
http://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15251/Si...
It's better to start a whole new field that is more applied.
I'm sure I've left some areas out. I think how to unify a CS curriculum in light of such diverse interests is a hard problem worthy of study and debate, and dismissing the problem as "tenure" does not provide a useful frame for addressing the problems.
Having worked in an Electrical Engineering department I'd say they had the same problem - it's not so much they couldn't communicate but the hyper specialization that academia encourages means that they just aren't interested in each others domains.
I should also mention that the Intro to ME course was a very popular, hands-on course that let people build little mechanical gizmos with foam core and hot-melt glue guns. So perhaps that's not a bad way to introduce a subject like that.
I'm confused when you say that "ML / probabilistic AI people" don't talk to the statistics department, though. ML is all about statistics. Maybe the statisticians don't talk to the ML researches because statisticians care more about manufacturing, medicine, and math then they care about AI.
In my experience the "not talking" definitely originates from the ML side, although there's probably some of it in both directions.
The first course in the Stats learning sequence had a tongue-in-cheek listing of differences between it and the CS learning course:
I guess it's not perfect, but it seems to work.
Also, he actually addresses your criticism: Computer Science is not a vocational program, and it's important for students to graduate with a deep understanding of the field. It's true that you can do amazing things with existing languages and tools without learning much about the deeper theory and foundations. Still, I think it's great to attract students with a fun, application-oriented course that gets them excited about the field, and hit them later with the more abstract ideas that might seem less relevant at the outset.
I think part of his frustration was that, at Harvard, even though Computer Science sits in the School of Engineering and Applied Sciences(!), it has never been formally split into Computer Science and Computer/Software Engineering.
Many years ago, Computer Science split out of Mathematics in the university taxonomy. The "Java Wars" of the 2000s and the "Facebook Wars" of the 2010s are a manifestation of the fact that Computer Science has grown too large and needs to split.
We have Applied Math that sits between (but overlaps with) Math on one side and Computer Science / Economics / Science on the other. It's completely appropriate for our modern age to have Computer Science, Applied Computer Science, and Engineering as overlapping fields with separate centers.