ACM Urges Obama To Include Computer Science in k-12 Education
usacm.acm.org
usacm.acm.org
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.
Meanwhile, try finding a plumber or an electrician... Our physical infrastructure is quite literally crumbling around us while our heads are in the clouds.
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.
http://philip.greenspun.com/careers/
Also that's kinda nonsense; what's really lacking in robotics is a suitable power source.
Plus, a reasonable fraction of the academic positions are purely teaching.
http://www.ams.org/employment/2007Survey-DG.pdf
I know physics is similar.
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.
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).
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.
"Into the Eye of the Storm -- Assessing the Evidence on Science and Engineering Education, Quality, and Workforce Demand"
http://www.urban.org/publications/411562.html
Abstract:
"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."
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.
Our public school system taught Logo in third or fourth grade. That's how my friends and I got interested in coding.
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.
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?
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.
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.
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.
10 PRINT "HELLO, WORLD!"
Or (display "Hello, world!")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.
(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 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.
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:
http://www.amazon.com/Lets-Linguistic-Approach-Leonard-Bloom...
http://www.amazon.com/Language-Development-Learning-Read-Sci...
http://www.amazon.com/Overcoming-Dyslexia-Complete-Science-B...
So, yes, the problem with introducing programming into the K-12 curriculum is
a) figuring out how to teach it well to learners of that age of varying backgrounds and interest levels, and
b) figuring out what else gets crowded out of the curriculum.
Mind you, reading is totally different from teaching computer science.
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.
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.