First off, I love ACM as an organization (not to say I get along with all of the members of our chapter). I volunteer time every year at our conference. And I like education, sort of.
But it's bad enough that drop out rates are >50% for engineers in the US. You think you're going to figure out how to teach it to younger students if you can't even understand why half of everyone loses interest in higher education?
I have a hint: don't take Vannevar Bush so damn seriously. Yes, math + science + analysis == good. Especially when most of our CS and engineering programs were designed during the Cold War. But we also got rid of our practice and drawing coursework.
I'm not buying the iPhone because it's the "best engineered device." Somewhere along the lines, our engineers forgot what the hell art, design, and usability was. It's one of those things you don't want to take to the extreme. People wonder why the CS jobs go to India, it's because CS is not difficult. Creativity and innovation is, I don't see many companies outsourcing that (ok I realize I just made a really vague generalization, but if you look into my comment history, I do go into more detail).
I will say that it's extremely rare to find the guy who can not only code, but design too. I have only met a few in my life, and they're always the most respected people at a company who are incidentally the most desirable to all the others.
You seriously need to appreciate the distinction between CS and coding. Let me break it down: computer science is really difficult. It's not the CS jobs that go to India. It's the coding jobs.
Also, here's something you many not know. K-12 CS education in India is actually pretty good. My school started computer science in the fifth grade. Internalizing the Turing machine (even if it is not formally explained) at that age gives you a huge advantage should you decide to become a computer scientist later.
So how come India doesn't produce good computer scientists? Actually we do. If you look at the top CS conferences, the proportion of Indians is pretty high compared to the number of people we graduate. It's just that Indians choose to move to the U.S. to do research because there are no good government funded research programs in India.
Next up, innovation and design. I think PG pretty much answered that one. It doesn't matter if you have talented people, if you don't have a nurturing environment like Silicon Valley, it's just not gonna happen. There's not much incentive for an Indian firm to innovate because our business climate is just so bad. Success depends more on how well you can bribe government officials than on innovation.
That leaves coding jobs. If you teach everyone how to code, of course you're going to have a lot of coders who aren't particularly good designers or computer scientists. That's what we have. Many of my friends who are actually good tried to kick it in one of the outsourcing firms, couldn't take the boredom, and left to go to grad school or do something else. It's a self-perpetuating cycle.
To summarize: K-12 CS education is not hard, and it's important for producing good computer scientists. You just have to be prepared to accept that not every kid will be interested.
Computer Science is a discipline applied to something, such as doing coding at a startup. Most CS students turn out to be coders. Not many people, for example, are going to go off and write new compilers and program in MIPS assembly. Most will end up doing the typical Java and C/C++ development stuff. My roommate for example doesn't have any interest in AI or machine learning or data mining (although I'm not necessarily referring to those fields as being easily outsourced).
The complaint I'm making is one that has been voiced already by many universities, including my own (Illinois.edu). It's the reason schools like Olin College are getting built and considered by Newsweek and Kaplan as "one of America's next Ivy League schools." It has nothing to do with computer science being difficult, it's because it's not interesting. This isn't about how to distinguish CS from coding, it's about fixing the outdated curriculum from the Cold War when we basically said "forget drawing and practice in the Computer Science and Engineering degrees, we're strictly math science and analysis now."
Java and C/C++ development is what most CS students will end up doing (coding). Those are the people I'm talking about; I think you misunderstood what I was trying to say. If you think success is all about bribery, you (as defined by Michael Arrington) have a losing attitude and have no place in Silicon Valley. Not my words, but Mr. Arrington's. And I for one side with him in saying that hard work produces more results than flattery.
My point is this: nobody wants to learn coding with zero application. I'm saying that higher education doesn't have it right because 50% of students dropout, so you're going to try and move it into k-12 and expect better results? How on earth do you propose to do that exactly?
The focal point of the argument seems to be whether CS "education" and "vocational training" should be separated.
P.S. Nice to see another UIUC student. I've been accepted there and would possibly end up enrolling unless I get into some long shot universities. How is the scene there?
You are coming in at a good time, actually. We are just now launching the iFoundry program, keep your eyes on it. E-mail me sometime, I'm always interested in meeting people from HN at school. Check out my profile.
CS isn't about coding. I understand where you are coming from, but high level governament educational initiaves shouldn't focus on consumer products. Smart people are meant to build great things. The United States would have never come on top of things if it had focused on shiny stuff.
Maybe I am old school, maybe I want the next mission to Mars to work instead of looking good on TV. And maybe I haven't slept today so I am bitter. But you have to thing bigger than Ipods.
"You think you're going to figure out how to teach it to younger students if you can't even understand why half of everyone loses interest in higher education?"
Our public school system taught Logo in third or fourth grade. That's how my friends and I got interested in coding.
The problem with graduates in the Western world is: there are too many of us already. Even in the "hard" disciplines of science and engineering, there are too few jobs. How many physics graduates go on to become full-time physicists? How many of all graduates go onto jobs where they need what they learnt in undergrad? Not many.
Meanwhile, try finding a plumber or an electrician... Our physical infrastructure is quite literally crumbling around us while our heads are in the clouds.
Do you have any numbers or stats on this? I haven't heard that theory before.
I just watched a video interview with Bill Gates yesterday and he said that we're now behind in software. The entire robotics industry (according to Gates) is behind not because of hardware, but because we don't have the software. He went on to say that software will continue to be a field where we need even more people involved, where we have most of the hardware we need.
Here are stats on math. In short: 1157 PhDs given out, and 761 have academic positions (the main place to get a job as a mathematician).
Actuaries, quant finance (it's not dead yet), crypto-related programming, logistics... there are lots of non-academic jobs (most of which pay better than all but the best academic appointments). It may be the case that giving up four years of earnings is not worth it from a purely pecuniary standpoint, but I seriously doubt that there is an overabundance of math PhDs given the jobs they can take.
The private sector is, of course, much less visible than academia.
One assumes that a math PhD went to the trouble of writing a dissertation so they could do something with it. I know little about the other fields you mentioned, but a PhD isn't needed for actuarial work. A bachelor's (heavy on the statistics) with some finance courses covers you, and after that it's self-study for the seven (7!) exams you need to be a fellow.
A math PhD in an actuarial setting is out of place, like a CD grad working at Geek Squad (a hypothetical Geek Squad with pay comparable to programming).
Most of those jobs don't require a PhD. Perhaps a few of the quants, a few crypto programmers and a few operations research people. But certainly not all of them. As I noted, even many academic jobs (teaching positions) don't really need it.
While having the degree helps you get the job ("omfg you have a PhD you must be so smart!"), it isn't necessary. The number of jobs where PhD level mathematical knowledge is necessary is actually quite small. Producing more PhDs will probably not be as helpful jmtame seems to think.
Agreed. A PhD is an apprenticeship to become an academic. It doesn't actually say anything either way about how smart someone is (i.e. most people smart enough to get a good first degree could probably complete a PhD if they chose to). In industry a PhD is only of value when hiring into the R&D group (or in the case of investment banks, wanting to impress unsophisticated clients).
"Recent policy reports claim the United States is falling behind other nations in science and math education and graduating insufficient numbers of scientists and engineers. Review of the evidence and analysis of actual graduation rates and workforce needs does not find support for these claims. U.S. student performance rankings are comparable to other leading nations and colleges graduate far more scientists and engineers than are hired each year. Instead, the evidence suggests targeted education improvements are needed for the lowest performers and demand-side factors may be insufficient to attract qualified college graduates."
I would say taking personal finance would be a higher priority. I think we should require a proven understanding of compounding interest before giving out a credit card, car loan, or mortgage.
Understand pure CS seems to me less exciting for most students (especially for those that can't pass algebra) than getting into some engineering, where they can build real stuff. You have to mix theory and practice to maximize (and compound?) student interest.
"A chorus of voices exhorts kids to study science. No one stops to ask whether it is inhumane to force adolescents to spend the bulk of their time studying subjects most of them hate."
-- Unabomber Manifesto, Ted Kaczynski
(Personally, I think that the notion of a core curriculum is mistaken,, but so is much of public education, and I don't know which small concrete steps would be best to move it forward.)
On the one hand, I think it would be great to live in a world where some basic level of "code literacy" was expected of all adults--just like today, every adult in the industrialized world is expected to be able to read and write, and Ph.D.s in education have put a great deal of effort into figuring out how to teach that skill to the kids who Just Don't Get It.
On the other hand,
(1) as jmtame says above, we don't seem to have a clue (yet) about how to teach programming to college students who Just Don't Get It
(2) if we put CS in to the K-12 curriculum, then something else needs to be taken out, and I'm not sure what deserves the boot.
"Ph.D.s in education have put a great deal of effort into figuring out how to teach that skill to the kids who Just Don't Get It."
Actually, Ph.D.s in education have done a generally appalling job of researching how children learn to read. There are a few happy exceptions, but I would look more to Ph.D.s in linguistics or psychology (harder disciplines, and more evidence-based, than education in general) for advice on how to teach children to read.
Here are some sound resources on reading instruction:
I don't want to get into a debate here about what the best techniques for teaching reading are (not to mention how to get teachers in the classrom to actually use the techniques); my point is just that everyone in the system agrees that the schools have a duty to teach literacy to every kid who is biologically capable of it.
150 or even 100 years ago, I don't think this was the case; if a child didn't learn to read in primary school then it was considered the child's failure, not the school's, and the kid just dropped out and got some job that didn't require literacy.
My ancestors 150 years ago and even more recently learned to read before they started school, as is noted in their diaries or recalled by my oldest living relative. And Horace Mann noted BEFORE he started campaigning for compulsory school attendance in Massachusetts that by his estimate most inhabitants of Massachusetts were literate in English. (He wrote articles in the journal he founded, the Common School Journal, which I have looked up, saying that.) The origin of the compulsory-attendance school system as we know it today in the United States was not to ensure literacy but rather to accomplish other social goals promoted by Mann.
One of my friends (my major client) is doing his Ph. D. in speech pathology and designed a program to combat children with learning disabilities. We commercialised the program some time ago and it's selling well, as well as becoming a major tool amongst the local and interstate education sectors.
Mind you, reading is totally different from teaching computer science.
K-12 curriculum should be weighted more towards programming practice than theory. Understanding the craft of programming, good UI design, and how the web works will be relevant to kids for their whole lives. Turing machines, big O notation, and discrete math are all interesting, but emphasizing them over coding would be like learning number theory without knowing how to add and subtract.
I'm a highschooler (junior now), and I took an intro Java class freshman year, AP Comp Sci soph year, and I'm TAing a Java class right now.
There is very little learning of Java going on in any of those classes. Part of it is that the teacher doesn't make it a very hard class, but also even among the people who try and do all of the assignments the majority just don't get it. They don't get the simplest things.
And it's not that my school gets a lot of people who just are "stupid" or unmotivated. It's a charter school that you have to apply to and take a test to get in. Its focus is math, science, and tech, and it's like 42nd (something close at least) public HS in the nation according to US News and World Report.
But a lot of them just don't understand programming. They have functions explained to them, and they're shown some examples like areaOfSquare(int side) and areaOfRectangle(int length, int width), and half of them ask me for help on the first one areaOfTriangle(int base, int height). And most of the rest ask the people that I helped for help.
Or I fix a curly brace issue (I hate Java, for the record (ok, hate's too strong)) for the same person almost every day, but she can't figure out that maybe she should try adding a curly brace to the end of the file before calling me over.
This incompetence is even more true now that Java is offered to all freshmen. For my freshman year, unless one did a very long, annoying, inane set of assignments to show that you know how to use MS Office, freshmen had to take a class teaching them how to use Office freshman year, and only after that could they take Java. So the people in Java were people who actually wanted to take it, not just people trying to fulfill their graduation requirements.
Back then, about half of the people in Java actually tried (the rest were basically the seniors who had stopped caring), and around half of the nonseniors who took Java would go on to take AP CS.
The ratios have tilted a lot more towards incompetence now.
Programming is something that not everyone understands, and teaching those that just don't understand programming is a monumental task.
All schools should offer at least one programming class, but making it a "Core Component Of Science And Math Education" is a mistake. A lot of people would just do badly and not learn anything.
Programming is something that not everyone understands, and teaching those that just don't understand programming is a monumental task.
I've taught basic programming to a lot of people, and I find that the problem is on the other side:
Teaching programming is something that not everyone understands, and learning from those who just don't understand teaching programming is a monumental task.
Students come in with different views of the world - some of them have the metaphorical analogies in place to understand scope and curly brackets as "boundaries" or "bags", others don't. Explain it to them.
We had this discussion on another thread and concluded that Java's a very bad introduction to programming. To understand even Hello, World requires an enormous amount upfront:
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
What's a class? Why does the name of my class have to be the same as the name of the file (and why do I have to rename it on the disk if I change it?) What's "public", "static" and "void" mean? What's an array? What're arguments? Why is String capitalized when main isn't? What is this System business, why can't I just print? Why do I have a semicolon on the end of that line?
If you want to teach people you've got to start from the freedom of using a suitable language, which means to all practical purposes LOGO, BASIC or Scheme.
that could well be the case, but do you think that schools around the nation will be able to find great programming teachers that understand teaching programming?
isn't that already included, or was it just my district? Wouldn't put it past them, very rich town, so the school district had money coming out of it's ass.
Maybe it was just an elective. But my high school did offer 2 different "computer science" classes. The basic one was pretty much intro, and taught Visual Basic. And then had an advanced class where they taught us Visual C++. Basic stuff forms, calculations(accounting stuff) and then for final had a project to make a game.
Personally I don't think they need to teach it as a core requirement...CS is a class for the geeks, do you really want people who barely pass basic Algebra, to start wrapping their minds around C++? Especially when they have 6 other classes to stretch their mind.
I wonder if programming might not be an easier introduction to symbol manipulation than algebra. They could get the feel for variables and algorithms in a more concrete way. The transition to algebra would not be so mind bending for a lot of the kids.
But it's bad enough that drop out rates are >50% for engineers in the US. You think you're going to figure out how to teach it to younger students if you can't even understand why half of everyone loses interest in higher education?
I have a hint: don't take Vannevar Bush so damn seriously. Yes, math + science + analysis == good. Especially when most of our CS and engineering programs were designed during the Cold War. But we also got rid of our practice and drawing coursework.
I'm not buying the iPhone because it's the "best engineered device." Somewhere along the lines, our engineers forgot what the hell art, design, and usability was. It's one of those things you don't want to take to the extreme. People wonder why the CS jobs go to India, it's because CS is not difficult. Creativity and innovation is, I don't see many companies outsourcing that (ok I realize I just made a really vague generalization, but if you look into my comment history, I do go into more detail).
I will say that it's extremely rare to find the guy who can not only code, but design too. I have only met a few in my life, and they're always the most respected people at a company who are incidentally the most desirable to all the others.