6 ms·
I hope what will eventually happen is that a semester of CS in high school because normalized. Then we can just dispense with pretenses and admit that CS 1 is m
by throwaway729 10y ago
I hope what will eventually happen is that a semester of CS in high school because normalized. Then we can just dispense with pretenses and admit that CS 1 is most properly an introduction to Computer Science, not an introduction to computer programming; that some programming experience is required in order to learn the basic data structures and algorithms typically covered in a top department's CS 1 course.
Then there can be a pre-100 level course which assumes zero background/experience. Like a CS equivalent of pre-calculus "college algebra" courses offered by many American Mathematics departments. The idea would be that most majors should've already learned basic programming skills in high school, but there's still an option for people who fell through the cracks for whatever reason.
But importantly, this issue is independent of the "geek gene" hypothesis the article is about.
- jdmichal 10y agoI'd rather teach generalized sequential logic and reasoning in high school. Then the programming will naturally fall from that, if they decide to learn. However, if they don't decide to learn, then at least the class will still have some applicability to their life. EDIT: Think of teaching at the level of what's in this Atwood post, and the related paper: https://blog.codinghorror.com/separating-programming-sheep-from-non-programming-goats/ https://blog.codinghorror.com/separating-programming-sheep-f...
- pbhjpbhj 10y ago>'d rather teach generalized sequential logic and reasoning in high school. // Isn't teaching programming one way to do that? Interesting codinghorror link. What struck me was the ineptitude of the question in their example assessment "intended for students who have never looked at a line of code in their lives" ("int a= ..."). It's testing syntax primarily without having taught the syntax, it seems really worthless - all you're really going to test for is who has actually seen some programming and knows that "=" is not equals but is being used as an assignment operator. Surely a proper test for ability in programming would be to write it out in pseudo code like: integer value a is set to 10 integer value b is set to 20 a is assigned the value of b what are the values now of a and b. Supremely facile. Surely they're not really trying to test ability to guess arbitrary syntax? If they were then they'd be better with nni a :-# 10 nni b :-# 20 a :-# b what are the values of a and b? At least that's not giving a free ride to those who know the previous syntax, they also have to impute meaning on unlearned symbolic strings. Mind you how do you decide to do CS at Uni and not ever have programmed anything??? Sure there's not the degree of crossover that people imagine between the two, but it seems like choosing to do maths without ever having proved a theorem.
- jdmichal 10y agoI'd consider programming to be a specialized topic, as it has domain issues and limitations. As an example, think of things like integer datatypes. Is it really important that we teach people that there's several "flavors" of integers based on how much memory they consume, which is directly related to how many distinct values they can represent? Obviously that's important to programmers, but I think the general populous is safe throughout their life without that information. Also, the assignment test is interesting, even with your rewording. The barrier is in the sequential part of the topic. In something like proofs, which is the closest I remember getting in high school to logic, those statements are simply invalid together, because there is no time domain. If `a` is 10, it is 10 throughout the entire construct. Seeing `a` is `b` means that an impossible conclusion has been reached. Finally, the last point is, well, curious. How many people decide to go into aerospace engineering without ever having engineered an airframe? I'd guess the vast majority. Requiring prior exposure to succeed in a degree is an oddity, so what is is about CS education that causes this?
- throwaway729 10y ago> The barrier is in the sequential part of the topic pbhjpbhj's point still stands -- the question is "supremely facile" once you get past matters of syntax. For example, most third graders could solve the problem when you make the time indexing explicit: a(1) = 10 and b(1) is undefined. a(2) = a(1) and b(2) = 20. b(3) = b(2) and a(3) = b(3). What is the value of a(3) and b(3)? We can go a step further for students still struggling by associating to each variable at each time step a fresh variable (bonus: when they see SSA it'll be a breeze): Q = 10 W is undefined R = Q T = 20 Y = T U = Y What are the values of Y and U? I've had students for whom even this didn't work, so I definitely don't believe "everyone can code". But still, if 30 - 60% of your students can't solve this problem, then there's something very wrong with the way the course is being managed, because I don't even get close to that percentage with sixth graders. Of course, I take the time to explain in excruciating detail what the symbols mean. So if I had to bet, it means that no one is sitting down and taking the time to help students get up to speed on the meaning of the syntax for this huge engineered system that was just thrown at them. Which is a real shame, because having these sorts of difficulties early in an intro course is, IME, completely uncorrelated with how the student will do throughout the rest of the curriculum. You see the same thing when tutoring for early mathematics courses -- most students in the bottom of the distribution are having difficulty because some historical-cruft syntax is presented and not properly explained in lecture. Unsurprisingly, if no one bothers to explain what the hell the symbols mean, three more weeks of using the symbols to do more complicated stuff isn't particularly useful. So lack of movement among the groups isn't surprising, but reading off from that anything other than lack of sufficiently differentiated instruction is a fool's errand. > Requiring prior exposure to succeed in a degree is an oddity 1. This is obviously not true for any of the natural sciences or for mathematics. It's also not true for English -- students have already done a lot of reading and essay writing by the time they get to college. Maybe it's a little more true for engineering fields, but at least there students are expected to have some background in math and physics. Oh, and also, typically take some university-level science and math alongside or prior to their serious engineering courses. 2. Requiring the mastery of large engineered systems during the first week or day of a course is also an extreme oddity.
- throwaway729 10y ago"generalized sequential logic and reasoning" sounds like a pretty specific skill set, actually. I can't imagine wanting to teach that to high schoolers in an alternative history where lisp takes off and becomes the lingua franca of software development. For example. I could get on board with teaching mathematical logic or combinatorics and discrete mathematics, for example. But "generalized sequential logic and reasoning" is hard for me to get too excited about because it's not a particularly useful concept outside of understanding and using imperative models of computation. And if the only substantial motivation for teaching something is its application to some particular useful skill (programming in an imperative language), why not just teach that skill?
- moyix 10y agoBy the way – the study that the Coding Horror post is based on has been retracted: http://retractionwatch.com/2014/07/18/the-camel-doesnt-have-two-humps-programming-aptitude-test-canned-for-overzealous-conclusion/ http://retractionwatch.com/2014/07/18/the-camel-doesnt-have-... But I think it's what spurred all the interest into the "bimodal hypothesis" that the current work explores.
- mcguire 10y agoThen we can push the introduction to Computer Science into high school so that we can get directly to what's important in semester 1: databases and web UIs. :-)
- throwaway729 10y agoAs opposed to trigonometry, which was gifted to us from the Gods without any connection to work-a-day tasks. :-) Efficient computing machines are an important invention. Probably one of the most important inventions of the 20th century. The fundamental principles of computation are deep mathematical discoveries. Teaching some programming isn't an unreasonable way to teach about computation.
- tjl 10y agoThe problem with what you're asking is that it's one more course you're trying to fit into a curriculum. My engineering department already gutted their first year calculus course by making most of it (about 3/4) pre-calculus after finding out that a majority of students weren't prepared. I was asked to tutor a first year engineering student in programming as she was failing. I ended up spending most of the time helping her conceptualize the problem and breaking it down into steps. Once she learnt that, she could manage the syntax aspects of C++. She ended up with a grade in the 60s which isn't bad considering she had a grade in the low 40s after the midterm. When I was a TA for thermodynamics, I noticed that we would get a bimodal distribution on the midterm exam. Thermodynamics isn't hard once you understand it. We'd get the people who didn't understand with grades in the 40s, but the people who did had grades in the 70s and 80s. The prof said that was pretty common. The objective was to get as many people from the lower curve to the upper curve by the end of the term. You'd typically have around 3 to 5 of a class of 80 fail by the end. Those were the people who just didn't get it. I'm sure that thermo is one of many courses like this.
- throwaway729 10y agoAt the high school level or the uni level? At the high school level, I remember taking a lot of required BS courses in high school, including public speaking, cooking/child care, a business course, and PE. No one suggested gutting core areas to make room for CS. Or at least, I didn't. At the uni level I really don't think this would add significant overhead. Take your N sections of intro and switch one or more to intro-intro. Then get other departments to allow either one to fulfill a CS breadth requirement. Students who start with intro-intro can stuff an extra CS course in at some point after the intro sequence bottle neck.
- tjl 10y agoI had none of those required courses in high school aside from one PE course. In grades 7 and 8 we had combined shop and home economics courses (in each year) which I thought was a good idea since everybody learnt to cook, sew, and do some basic carpentry. I saw so many people who couldn't cook at university. That would have been different if people learnt to cook in school. This was at the university level. The problem is that my engineering department has a hard time fitting in courses. If you need an additional CS course that's one course covering something else that doesn't get included. We already merged our separate probability and statistics courses into a single course to make room for more intro materials. For accreditation, all of our courses are broken down into having some of: Math, Intro Science, Engineering Science, and Engineering Design (and possibly none of these). You need a set amount in each category to get accreditation. Other departments have the same requirements, but their programs are designed to meet it. My department lets the student decide most of their upper year courses from across the university. So, if you decide to take a bunch of CS courses, you'll miss out and need to make it up on other courses. By the end, you need more Engineering Science and Engineering Design which isn't hard to do if you have mostly engineering courses, but pure CS courses basically give you nothing on these. Until you actually participate in these kinds of discussions you don't know how carefully the overall curriculum is planned. Students going through my program have had a number of excellent suggestions, but it's hard to make changes and still meet all the requirements. My department used to have more courses per term. Originally, there was 7 a term (I think), then there were 6. They've since moved to 5. That means you get 40 courses instead of 48 or 56.