On the making of a girl nerd
mathbabe.org
mathbabe.org
She speaks from personal experience. On a different post on her blog, she writes, "when I and two other girls (and, as it happens, no boys) in the 6th grade did well enough to go into a special, advanced 7th grade algebra class, my (female) teacher brought us up to the front of the room and told the three of us 'I don’t see why you would challenge yourselves like this anyway since you are girls, and you won’t be needing math when you grow up.' I was the only one of the three of us to actually choose that class, and I was the only girl in the algebra class."[1]
No wonder she thinks we can do much better!
My point was that that teacher either needs to take a different attitude towards life, or get weeded out of the system herself. Why? Because her attitude will get impressed not just on girls attempting to enter predominantly male spaces, but upon all students that she interacts with.
If we want more women programmers/mathemeticians/etc, we need to show female examples earlier on to let girls know it is possible and weed out the fools in the education system who espouse girl brains don't work as analytically as boy brains. I bet a lot of girls don't go to mathcamp not because they think it's "uncool" but because they either don't know it exists or don't think they would be good enough.
Actually there’s another reason I ultimately decided to call this blog “mathbabe,” namely when I googled it[...] there’s another site with a very similar name which simply shows nearly naked women next to cliff notes on basic math subjects. WTF?!? It is ridiculously obvious to me that math babes should be doing math, not adorning it. So I kind of had to call myself mathbabe after that.
But, as I said, you can still do this just fine in C++ or Java. I think that people tend to place way too much importance on the first language we teach students. What matters far more is the quality of the teaching itself, and the relevance and logical progression of the projects the students have to solve.
Neither of your claims is supported by either paper. Rather, they seem to support my claim: starting language isn't a predictor of success.
Conclusions from the first paper: When final exams were compared for a CS2 course offered before the Python transition with a course after the transition no statistical difference was found. The first CS2 course after the transition contained a mixture of Python-prepared and non-Python prepared students. There was no statistical difference in the performance between those two student groups.
Conclusions from the second paper: We conclude that starting students with Python has not had a negative impact within a C++ based curriculum. It would have been nice to conclude that the Python students did better in these courses, but the evidence does not appear to support that hypothesis.
With that said, I do agree with the authors that exposure to more languages, environments and tools is a good thing, and for that reason, I'd prefer using Python, then switching to C++.
And the hello world program for C++ is just as bad as the one for Java, in its own way. You're writing 'cout << "Hello World"' but how long will it be before you teach the students about operator overloading?
Each class must be in its own file, and the execution starts from "public static void main(String[] args)" inside it. Then you have to deal with complex data types very early: python's set of primitives is much richer, which is great when teaching. Also, doing IO in Java is a pain unless you distribute a library.
To those who think Python's significant whitespace is a problem, I think you need to watch an otherwise intelligent beginner struggle with an error on line 80 because they mismatched their braces on line 20. If you aren't properly indenting your code, it becomes an unreadable mess anyways, so why not enforce it at a language level? And if you think an IDE can do this for you, think again. People just complain that it does things wrong when it indents half their methods by 2 extra tabstops because they missed a brace. They don't really get it, they just get into a feedback loop where they say, "Oh, it won't compile. Let me scan the entire program counting braces" which is a waste of everyone's time. I've seen people go entire semesters without ever learning to write readable indented code.
Or like others have said we could hand-wave it away until later.
See http://apcentral.collegeboard.com/apc/public/repository/ap-c...
I'm not saying that's a good idea, just that the practice is fairly common. I think they're nuts.
document.write("Hello, world");
or:
alert("Hello, world");
Two lines of overhead counting the script tags.
For all its faults (and they are many) I think I'd argue for Javascript as a first teaching language (maybe focusing on Crockford's "good parts", or maybe some variant like Coffeescript). Minimal overhead. Support for reasonably advanced concepts like objects and anonymous functions. Will run on just about any device the student (or his or her friends own) without having to install anything. Trivial to distribute your creations. Has actual employability value (this, I think, is sole reason Java has become so popular).
I don't want to get bogged down in the argument over strong/weak/dynamic/static typing -- but also don't think it's necessary for a beginning course.
console.log("Hello World");
Fortunately I actually taught myself programming in HS by writing mIRC scripts so I could do cool automation stuff in my spare time, and I had learned a little earlier in some kind of Logo course targeted at elementary-age kids. If it were up to that high-school C++ course to get me into computers, though, I would definitely not have done so...
Personally, I think Pascal was a great choice for those high school courses.
One more point i'd add about the general immaturity and unfairness of school pupils, is that the smart boys are probably unkind towards to the smart girls, out of some sense of competitiveness. I don't have evidence of this but it seemed to be an abundant sentiment when I was at school.
The "javascript" variant is fairly straightforward and if you take it far enough can be quite powerful. At first the students can just hack things together, but as they go on they'll learn real programming.
Also, the basic IDE is free.
While getting something running quickly is great, I'm not so sure having your instructor fix stuff up in your project every couple of days is the best way to start a programming for beginners course.
It sets up the wrong mentality; that programming is complicated, stuff breaks even when you didn't touch it, or when you touch something completely unrelated, the best way to solve problems is to Google them or ask your instructor instead of think, and that learning the API more is the best way to get better at problem solving.
This is nothing against Unity in particular; it's amongst the best of its competitors, and I don't regret choosing it for my work; it's just the nature of the beast when dealing with massive existing code bases.
That said, I think getting started with graphics and sounds is a great idea; I'd just use something a lot closer to the metal and less complicated. Blitz2D would have been my choice 5 years ago; I'm not so sure now (how is PyGame?).
Unity3D is not what real programming is about, and you shouldn't sugar coat it. A student might have a blast with Unity3D then despise learning about heapsort.
I still don't like heapsort, but that's more of a general dislike with the "let's teach everything with sorting algorithms!" culture of CS curricula. I like other more-hardcore-than-sorting CS things much more. Edit: and I also have fun with them. Programming should definitely be fun.
Maybe you are right, but if someone was dangling a "Lets learn Unity3D" course in front of me, I would never ever attend that university.
Are sorting algos the best methods for helping students write code and learning about Big-O? I don't think so. Learning the fundamental data structures are a lot more useful for that purpose, I think. Of the standard crop, I think the binary search is a good algorithm to teach (though one must note its historical implementation problems in languages with fixed int sizes), and if you're going to do sorting then quicksort + insertion sort when N < 16 wouldn't be awful. At least mention the language's built-in sort so that open source projects like gnu flex don't inherit a DIY sorting function in the code (in their case, the evil bubble sort which should never be taught).
Instead of the cast of characters for sorting algos, I'd rather see something like this cast of maze generation algos: http://weblog.jamisbuck.org/2011/2/7/maze-generation-algorit... I think they would accomplish your goals better, plus they have shininess built-in.
>…"Lets learn Unity3D" course in front of me, I would never ever attend that university.
But you would probably still be doing programming and CS elsewhere. You're already set. This post is about trying to attract people into programming at the HS or college level who otherwise wouldn't be. But from the other comments it seems like I might agree with you specifically on Unity3D; I haven't used it myself but it doesn't sound all that rad as a teaching tool. I fully support mixing PyGame into a Python course, though.
I would fully support a Python w/ pygame course in high school. That would be pretty neat.
I cannot stress this strongly enough, _NO_.
You need to walk before you can run and it is of NO BENEFIT to the student to hide programming behind a fancy UI with fun results before they know what is going on.
Let's be clear here, I am not against Unity. But I'm definitely against Unity for teaching how to program.
The "strength" you exemplify about having unity doing physics in the first lesson is precisely why it's a terrible choice. Students without prior programming knowledge will not understand that this is javascript (a language) connected to a physics library (3rd party module) being represented by the UI (unity). You will introduce them to this mess of interconnected parts and they will have no idea who is responsible for what. Plus you will spend so much time teaching them Unity-specific concepts and fundamentals they will walk away with a crippled ability to program.
I know this because at my university they taught first year programming with java and used a book written by the instructor that showed you how to load an image with swing before teaching conditionals. The boilerplate code that allowed the students to load images did nothing but completely confuse them and negate the teaching aspects as he slowly introduced programming fundamentals. It was a complete disservice to try to "fancify" basic programming and all it did was confuse anyone who hadn't previously learnt to program.
Python on the other hand is a fast, interactive, forgiving interface that boils programming down to the basic nuts and bolts that you need to understand before interfacing with fancy UIs and physics.
I took a course in high school that started with the nuts and bolts. I did fine because I already knew some basics, but most of my classmates struggled. They learned that programming is hard and no fun and in the end you've pushed some lines of text around. Most of them barely passed and will never touch code again.
For a serious university level CS course? Sure, start with Python and explain how the basic nuts and bolts work. Trying to get young people excited? I think it's worth considering other options.
How many of us really started out programming learning the basic concepts in a structured environment? I understand your point, but I think that to be so dismissive of the enjoyment and excitement factor is inappropriate.
The issue with Unity is that it is a complex, fully featured 3D game engine. A lot of what you do and learn, as a beginner, has nothing to do with writing code and is more about how game engines work. Like what a mesh is, what a rigid body is, how to set up a particle system, etc. I can see students getting hung up on these details to the point where learning how to script is a secondary goal.
This comes from experience. I've worked with a game designer whose only real programming experience was inside of Unity and he was difficult to work with because he didn't have the ability to separate game engine (Unity) features\concepts from programming language concepts. So I'd get weird questions like "why doesn't Lua have 3D object parenting".
The same thing can happen in any complex environment where scripting can be secondary to the idiosyncrasies of the environment (Unity, Flash, web browser, etc.)
I also found this very annoying: "I have found an amazing correlation between women with math Ph.D.’s and women whose fathers are mathematicians...you wouldn’t be able to explain the statistics I have."
If you have this data, why not post it? Will mathbabe.org run out of bits?
These implications strike me as implausible. I think it would make more sense to create the for-true-beginners course with the expectation that the regular intro course comes after it.
https://stellar.mit.edu/S/course/6/sp12/6.00/index.html
This subject is aimed at students with little or no programming experience.
It aims to provide students with an understanding of the role computation
can play in solving problems. It also aims to help students, regardless of
their major, to feel justifiably confident of their ability to write small
programs that allow them to accomplish useful goals. The class will use the
Python programming language.I went to high school a town over from Lexington (Wellesley) and I will say everyone's parents are hi-end professionals or Ph.D.'s (actually It was a culture shock for me caused moved from Maine to MA when I started high school). High expectations bring high results.
If the set of less qualified people did not display a gender difference, would it be acceptable to let the weaker ones fail/quit/be intimidated?
Yes, but not by this particular change. Black isn't harder, it just covers more fun side topics, by skipping some intro material. This is better for everyone--more prepared students don't get bored, less prepared students don't get intimidated.
Mudd's general new philosophy of acquiring female students at any cost, however...that's another thing. Not to mention people who should know better subsidizing "research" positions for freshman women to build glorified websites.
What's changed? Well, computers are pretty cool now. The high school I mentor at has the hippest computer class I've ever seen, the teacher is an enthusiastic woman who drives the energy of the class and lets them focus on what interests them while directing them towards genuine learning towards what should be amazing careers for all of them. It's seriously encouraging and I have high hopes for a better gender balance in the years to come.
Python is probably a better introduction language, but Processing is a close second.
..here comes the white knights.