Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!


Forgot your password?
Education Programming Robotics IT Technology

A High School Programming Curriculum For All Students? 214

jonboydev writes "I know there have been many postings on what kids should begin programming with, but I have a little different perspective: I am a software developer looking to help my brother, who is a high school teacher, develop a programming curriculum. The catch is that it is a class for all students to take, not just those interested in programming, and therefore will focus heavily on teaching problem solving. This class would follow after a class using Lego MindStorms, and we are planning on using Python. I'm sure many of you would agree that everyone can benefit from learning to program and any help would be greatly appreciated!"
This discussion has been archived. No new comments can be posted.

A High School Programming Curriculum For All Students?

Comments Filter:
  • How about Alice? (Score:4, Informative)

    by KingSkippus ( 799657 ) * on Tuesday March 10, 2009 @10:07AM (#27134023) Homepage Journal

    Disclaimer: I haven't actually tried this, so this isn't an endorsement, but...

    Have you considered taking a look at Alice [alice.org]? It's the free system worked on by the late Randy Pausch to teach programming without jumping straight into coding. From the site:

    Alice is a freely available teaching tool designed to be a student's first exposure to object-oriented programming. It allows students to learn fundamental programming concepts in the context of creating animated movies and simple video games...By manipulating the objects in their virtual world, students gain experience with all the programming constructs typically taught in an introductory programming course.

    • Re: (Score:3, Informative)

      by BigMike1020 ( 943654 )

      My father teaches a college course using Alice. It's sort of a programming for non-computer-science majors class. I've sat down with him a couple of times and played with the program. I suspect that for someone who doesn't have any programming experience Alice is really fun (creating movies, making things move onscreen), but for someone with any experience its all just a hassle. Too many mouse clicks and drags are needed to get simple things done, and sometimes the natural-language style of the program

    • by fermion ( 181285 )
      I have used Alice in an informal setting with about 2 dozen adolescents. It does teach some basic programming concepts like loops and conditionals. It is OO based, so students get into the habit It is very engaging. Average students will use it with minimal prodding. The two books that I use, Learning To Program with Alice and An Introduction to Programming Using Alice are very good. A motivated student can go through the book and learn a great deal about programming concepts.

      The Alice tutorials in

    • I work in a university environment and have been programming for...a while...so when my son's Boy Scout troop approached me about teaching programming to some interested boys, I did a ton of research and came up with Alice.

      If the goal is to teach programming concepts and logic, then it doesn't get much better than Alice. The course materials are already written, the language is easy to use, it's supported by Carnegie Mellon, and it's completely free.

      The greatest thing about Alice is that it's an entirely vi

  • JavaScript? (Score:2, Interesting)

    by mgkimsal2 ( 200677 )

    I'm a bit biased, but JavaScript might be something worth teaching in addition to Python. It's in everyone's browser already, so no need to download anything. Can more or less work well on server-side or client-side (I'm not a SSJS guru, so I don't know if there's any major gotchas). It has a moderately simple syntax, and whitespace isn't as important as in Python.

    • Re: (Score:3, Insightful)

      by grumbel ( 592662 )

      If the job is to teach programming to people who don't care about it, I'd probably start with plain HTML and CSS. Thats of course not exactly real programming, since not Turing complete and all, but it teaches you the basics of how a computer works, that data and presentation are seperate and all those very basic things.

      Understanding those basics about how a computer works is much more helpful in the long run then something very abstract like sorting a list, since it applies to almost all daily computer use

      • Re: (Score:2, Insightful)

        I totally agree. I do both JS and python programming.

        python for server side, JS for client side, and python errors are much more human-readable/understandable IMHO.

        And the interactive interpreter is a godsend for fiddling with a messed up class function (ie temporarily redefine it)

      • HTML and CSS do not teach you *anything* about how a computer works. At all.
        • by grumbel ( 592662 )

          They don't teach you the low level details about bits and bytes, they do however teach you the whole thing about structured data, which pretty much what any program today uses in one form or another.

          • Re: (Score:3, Informative)

            There is absolutely no need to teach about bits and bytes: they are only incidental in actual programming. Programming is reasoning about actions, evaluation and transformation. HTML and CSS simply do not help with that.
            • by grumbel ( 592662 )

              Programming is reasoning about actions, evaluation and transformation.

              Programming is in large part the manipulation of structured data and HTML/CSS can help quite a bit to get the 'structured data' part understood, add Javascript or Python when you want to go into the manipulation part of it. My point is simply that learning how to sort a lists has zero application in everyday life, understanding how pretty webpages you see on the screen are represented as structured data on the other side is quite a important thing, because thats how pretty much all software works and becaus

    • Re: (Score:3, Interesting)

      by mackil ( 668039 )
      I'm actually teaching a high school class on the basics of programming using Javascript for that same reason. I chose that language because their network is so tied down with restrictions, we never would've gotten the network admin to allow us to install a compiler, let alone an IDE.
  • If you're teaching them programming, and they might not all use it, maybe you should think about using MS Excel. It seems everyone uses Excel in some form, but the people who can really get into the nitty-gritty of it can do some really useful stuff. Excel is on just about every computer these days, or some similar spreadsheet, and while it's not a traditional programming language, it does require the use of logic to figure out how to set up a series of cells with different commands to give you the answer y
    • Most programming skills you learn in python you can use in any language, presuming you don't focus on teaching syntax and more of how to use basic programming constructs like loops and functions.
  • (All my hatred of Labview aside.) Don't the latest Mindstorms come with some hobbled version of NI Labview or did that fall through? It is both circuit-esq and programming-esq. It is also easier to understand to laymen because it is a gui, not text. I have colleagues that use Labview and VB for the sole reason their customer demands they be able to understand all the code they are paying for without formal training in CS.
  • by Jurily ( 900488 ) <jurily&gmail,com> on Tuesday March 10, 2009 @10:21AM (#27134223)

    The catch is that it is a class for all students to take, not just those interested in programming

    What the fuck is wrong with the educational system again? Teach those who are interested. Or those who have any chance of not being a retard at it.

    Teacher 1: "Hey, I heard that computer-thingie makes people smart."
    Teacher 2: "Okay, let's force it on every little prick we have here! That'll teach 'em to touch one ever again!"

    Christ. What's next? Quantum physics in ancient Sumer dumbed down so everyone can pass?

    • by cromar ( 1103585 )
      This idea that there is no call for well rounded education makes us, Americans as a whole, dumber. It would be better for us as a whole if high schoolers were exposed to subjects such as quantum physics or ancient history.
    • "Teach those who are interested."

      And what about those who'd rather go home and play Wii? Don't teach them anything?
    • Aww, a trendy dissenter. How cute. All the righteous indignation in the world won't make your points relevant.

      Guess what? Our educational system offers advanced placement classes for students who are so inclined to take them. No one is being forced to take a dumbed down class. Fortunately for those folks who are not as enlightened or smart as you, a dumbed down class might offer a more cushy introduction to a topic that can be a bit intimidating to a lot of people.

      There is no reason a introductory p
      • There is no reason a introductory programming course shouldn't be a mandatory part of a curriculum. Giving more students exposure to it would certainly not be a negative thing. Go take your nerd rage elsewhere.

        No reason, other than there is a finite amount of time. Teaching someone programming takes away from something else, such as history, math and science. Programming is a trade skill, like learning to arrange flowers. But most people would say that there are more important things to learn than arrangi

        • Considering our reliance on computing in every single industry, in our personal lives -- fuck it, literally EVERYWHERE, it could easily be argued that mathematics, history and science are more appropriatly considered trade skills than basic computer programming. A little bit of javascript knowledge or HTML, or the ability to write simple Excel macros is *far* more practical than understanding photosynthesis or finding the derivative of a function, because, ironically, the latter knowledge has a much small
          • Considering our reliance on computing in every single industry, in our personal lives -- fuck it, literally EVERYWHERE...

            You can say that out about a lot of things.

            "Considering our reliance on roads, everyone should know how to lay asphalt."
            "Considering our reliance on refrigeration, everyone should understand Freon gas."
            "Considering our reliance on integrated circuits, everyone should learn chip fabrication."
            "Considering our reliance on knives and forks, everyone should know how to forge metal."

            The fa

            • Re: (Score:3, Interesting)

              Your examples are terrible. A knowledge of asphalt, for example, won't allow us to utilize the road any better. The computer on the other hand is a multi-faceted tool. A very basic understanding of programming can segue into a variety of things that can make us more productive in both our personal and professional lives. You are robbing today's youth if you don't at the very least expose them to this.

              For me personally, I would be flipping burgers if it weren't for exposure to programming. It happened
            • Obviously you are not teaching these students about allocating memory in C or some other arcane task dealing with the nuts and bolts of a specific language. You would want to use a simple language and focus on using logical steps to write algorithms. Algorithms are one of the most basic and general things you can study. They were around long before computers, but computers happen to be an ideal playground on which to implement and test them. They are logic and problem solving in their purest form and comple
    • by ravyne ( 858869 )
      I agree on one hand, and disagree on the other...

      If everyone has to take this programming course, those students are going to get a whole lot less done, than if it were just those few students who were actually interested in the topic, and presumably, with more aptitude for the topic than the average Joe. If the majority... even half, of the class is disinterested, not paying attention, slacking off, making the teacher repeat material constantly, and ultimately not taking anything away from the course, t
  • by v1 ( 525388 ) on Tuesday March 10, 2009 @10:24AM (#27134281) Homepage Journal

    Programming more importantly is problem analysis, figuring out how to use the tools and information you have to build towards a solution.

    In most of my programming projects, there are myriad different ways to approach the problem, and the time taken to compare them I find to be the most important part of any programming project.

    Recent example: I just got done coding a utilization graph for a server. In bash. Obviously bash is not the ideal language but was required so a lot of thought had to go into how to approach the problem.

    After some consideration, I determined the way the utilization information was gathered and stored was the most important thing, because bash isn't particularly speedy and having to mow through 100,000 long log file isn't going to be pretty. So the main focus of the problem turned from one of "how do I display a graph in bash?" to "how do I record the information in a way that bash can quickly process it?" This requires understanding the limits of the tools you are provided with, more than understanding the actual problem. Only after you have this can you move toward a good solution to the problem. No matter how clever of an idea you have, or how "perfect" of a solution you come up with, picking the correct path to that solution is often just as important as the results.

    Most of the time when I am going to code something, I spend a good hunk of time just sitting and thinking about it, considering how things are going to progress if I try different approaches. Only after I'm satisfied I have a good "plan of attack", do I actually start working on a solution. My solutions aren't always optimal, but they're usually pretty close, and save me a LOT of valuable time which would otherwise be wasted in having to either make fundamental changes to the foundation late in the game, (every programmer's nightmare) or dealing with extremely topheavy already-written code that isn't producing results in the way that I need them and has to either be data-converted or be clumsily coped with as-is. (every maintainer's nightmare)

    I suppose you could sum it up by saying, "teach them problem analysis before you teach them problem solving.

    • Who came up with the requirement of using bash to do anything?
      • by v1 ( 525388 )

        challenge! I also write in assembly and occasionally microcode.

        Writing in lower level languages has certain advantages. For example, the optimal C++ code for doing something, when compared to assembly, is slower, a LOT larger, and requires more memory.

        Bash isn't a proper low level language because it's interpreted, but it does keep a polish on one's skills to build up complex things from simple things. You can always do a complex task using simple tools, but you cannot always do a simple task using compl

        • challenge! I also write in assembly and occasionally microcode.

          Writing in lower level languages has certain advantages. For example, the optimal C++ code for doing something, when compared to assembly, is slower, a LOT larger, and requires more memory.

          In 99.999999999% of the cases, those extra advantages you speak of are simply imaginary, more related to the rush of appearing to be among the mythical REAL PROGRAMMERS than to any requirements of real life.

          Bash isn't a proper low level language because it's interpreted, but it does keep a polish on one's skills to build up complex things from simple things. You can always do a complex task using simple tools, but you cannot always do a simple task using complex tools. (they are not general enough to do everything you could possibly want to do)

          This is not a matter of simple or complex tools, but of correct or incorrect tools. If when presented with the problem of doing boring filtering and manipulations with server logs the first thing you can think of is writing an assembler program to handle it, in the immense majority of cases you are makin

  • by SUB7IME ( 604466 ) on Tuesday March 10, 2009 @10:24AM (#27134289)

    I helped create a Java curriculum for a group of programming-naive high school students. I don't regularly use Java, but it behaves similarly to other languages (good for me and for them). There are plenty of tutorials out there that they can explore in their extracurricular time. Also, there are many sites and fora dedicated to java, allowing my students to get plugged into the broader community of programmers.

  • by Fished ( 574624 ) <amphigory@noSpam.gmail.com> on Tuesday March 10, 2009 @10:46AM (#27134575)
    My dad is a High School Physics/AP Math teacher who taught programming this year. I encouraged him NOT to use C++ (his original plan) and to use Python instead, and to use Python Programming: An Introduction to Computer Science as the text. He has been absolutely delighted both with Python and with the choice of text. Now, it has to be said that this doesn't really address your case, since all of his students are pretty much AP materials (and it's a private school, etc.) However, I would encourage you to take a really close look at that text.
  • by gandhi_2 ( 1108023 ) on Tuesday March 10, 2009 @10:48AM (#27134601) Homepage
    A good final project would be an Oregon TrailBot. A scripted user-agent that can buy oxen and die of starvation in pursuit of expansionism.
  • Processing (Score:3, Informative)

    by krilli ( 303497 ) on Tuesday March 10, 2009 @11:05AM (#27134869) Journal

    http://processing.org/ [processing.org]

    Clean, quick, cross-platform, can do pretty wild things right out of the box.

    Make it fun, get them hooked.

  • This is stupid (Score:4, Insightful)

    Not everyone is interested in programming, or any sort of engineering. Get over it. Forcing every kid to take programming (and "forcing" is the right word) is like forcing every kid to learn how to build an engine for their car (and NOT something useful, like changing the oil).

    With all the cutbacks in arts and general sciences that take a broad approach to education, why are you wasting their precious school time and especially-precious-now school money on such a specific skill?

    It's like someone who is passionate about embroidery insisting that every kid should learn embroidery for their own good ("Think about the problem solving skills they'll learn by figuring out what stitches they need to get to the pattern they want!") Whatever general skills they learn in this class, they can learn better by studying a more general subject.

    • by geekoid ( 135745 )

      I would argue that more kids would benefit from learning how to a build an engine becasue they wiklll all deal with cars, and that level of knowledge helps prevent them from being ripped off; where as programming has nothing to do with repairing or buying a computer. Computers are thriogh away appliances to most people.

      Now if I could buy a car for 1000 bucks and use it for 3-5 years. Then learning anything outside the operation of the vehicle would be a waste of time.

    • Actually, "Not everyone is interested in $X" is a true statement for all values of X. Are you proposing not to teach kids anything?
      • Actually, "Not everyone is interested in $X" is a true statement for all values of X. Are you proposing not to teach kids anything?

        No, as I said in my post, I'm advocating teach *broad* knowledge. Math, science, art, history, etc. Programming is a specific trade skill, utterly and completely useless to anyone who won't be doing it for a living. There are an infinite number of trade skills we can teach kids. How about how to change chemicals in a pool? That's a skill that's actually more useful than progra

        • by EEBaum ( 520514 )
          On the contrary. Programming is applicable in that much of it is applicable to a deeper understanding of math, as well as different approaches of such concepts as sorting, logic, optimization, planning, decision-making, etc. At more advanced levels of math, there becomes more overlap in relevance. Teaching concepts of programming can be very useful in unexpected ways.

          I agree that *some* programming skills are largely non-transferable trade skills... parsing markup languages, creating DLL interfaces, le
    • by EEBaum ( 520514 )
      I was forced to take history classes where we learned mostly folklore and propagandized stories that I then had to unlearn when I got to university level. I hardly see how programming is more of a waste of time.

      For what it's worth, I learned cross-stitching in 4th grade. Everyone in class did. I think it was largely a way to keep us busy and quiet when we finished our work early. And, given that it was more engaging than most of our lessons, I'd do my work more eagerly and enthusiastically because I k
    • Because every human that can't program is doomed to become the slaves of our robot underlings.
    • Yeah, teaching something that forces people to become more logical thinkers and better problem solvers is an utter waste.

      End sarcasm.

      Unlike you, I don't think of education time as precious. Schools -- even the best ones -- are as much about warehousing students as educating them. How much of a given day does even a good student spend truly engaged in the material being presented?

      I think programming shines as an educational task:

      * The students spend more time doing than listening to the teacher.
      * There is

  • I'm sure the board of ed will love the cost of a Lego Mindstorms set for every student in the school.
    Also, if you need Legos to teach programming then you're doing something wrong.
  • by doug ( 926 )

    While I don't personally care for smallTalk, it has a simple enough syntax and was designed as a teaching language.

    More important than language, you'll want to keep the kids engaged. Basically they'll need some results quickly, and printing strings to the tty isn't likely to count for much. That is one of the strengths of GUI programming, poping up windows, playing with colors, and stuff like are likely to keep the kids paying attention long enough to learn something.

    - doug

  • I took a half year Intro to Computer Science class as a senior in high school. The class was actually paired with a half year of Principles of Engineering. The thing I loved about these classes it that they were very broad based. We did just about everything in a very basic form. I am a second year CS Major and I am still seeing stuff I learned in the class. We were able to get so much because we used Python but we started with C-- then moved to C then we learned python. Originally the course had used java
  • In Soviet Amerika... (Score:3, Informative)

    by n6kuy ( 172098 ) on Tuesday March 10, 2009 @11:35AM (#27135341)

    ...public school programs YOU!

    • Oh shut the fuck up. That tired fucking meme...

      And you're absolutely correct.

      I've been teaching for 5 years, and this is my last one. It's become clearer and clearer to me that this is the entire point of public school in the US.

      Give all the kids the same (standardized) coursework, give them the same (standardized) test, and make them all functional cogs to work in this society. Teach them to turn on at the bell, and turn off at the bell. Teach them to bow to authority. Teach them that to fit in they m
  • As a high school teacher, I appreciate the opportunity you're trying to offer: not many schools have computer programming classes, so that's pretty neat.

    If your school is going to require this class, be very careful to think about different learning styles and learning disabilities. Programming goes well for very linear, sequential thinkers. It may not go well for abstract free-spirits. How about kids with dyslexia, dyscalculia, and/or dysgraphia? Will you have different levels of programming for differ

  • " I'm sure many of you would agree that everyone can benefit from learning to program and any help would be greatly appreciated!"

    No actually, that's not true. Your letting your bias make decsions for you.

    If you have a class for kids interested in programming, there are three goals.

    1) Concepts. You just need a language that teaches the concepts that will be used in programming. The Lego IDE works well, as does Java. Once you ahve concepts, every language becomes syntax.

    2) A language. You want something where

    • Stay away from script languages because they don't really do much long term wise. IF you can write in a language like Java, C++, you can write in Python. That is not true the other way around.

      That's like saying "If you can read The New England Journal of Medicine, you can read Dick and Jane. That is not true the other way around."

      You said that "once you have concepts, every language becomes syntax". Yet you want to start kids off with languages like C++, whose syntax is an abomination that would take the

  • learn INTERCAL.

  • squeak.org (Score:3, Informative)

    by sydbarrett74 ( 74307 ) <sydbarrett74@g3.1415926mail.com minus pi> on Tuesday March 10, 2009 @12:11PM (#27136059)
    Take a look at Squeak -- it's targeted at younger children (elementary and junior-high) but versatile enough that high schoolers can probably get something out of it as well.
  • Should have used Logo/Scheme/Lisp. You'll spend more time teaching syntax rather than programming/logic.

    Take a look at

    CompuSci without Computers [csunplugged.org]

    How To Design Programs [wikipedia.org]

  • This class would follow after a class using Lego MindStorms

    Well that's your problem - it should follow before it.

  • by DragonWriter ( 970822 ) on Tuesday March 10, 2009 @12:58PM (#27136765)

    While they use Scheme instead of Python, which you seem to have settled on, the TeachScheme! [wikipedia.org] effort and the book How to Design Programs [wikipedia.org] are aimed pretty much at the kind of thing you are trying to do: HtDP is designed for universal programming education (aimed at either high school students or lower division liberal arts students in college), and TeachScheme! is directly aimed at teaching in High School.

    (Linked Wikipedia pages because it seems like both websites -- and the main PLT website -- are down at the moment; the website links are on the wiki pages and I'd recommend going to those when they are up.)

  • Php, is fun,simple,advanced,and cool all at the same time, it is simple enough for the newbs,advanced enough to control pcs going unto your web page, quick enough not to overload the servers, and also web based, so as to allow more interaction by the students (all of the students today want a cool facebook page or myspace page).
    The best also about this is its free, and comes free with linux also free for those students who cant afford windows. Those who have windows, can install webserver1.0, and run php di

  • I can report on my own experiences.

    As part of my High School experience, one math lesson (or was it the good part of a day?) was carved out for programming our TI-83 calculators. Having already programmed it (hey, it's programmable; no, I didn't make it run Linux), this was fun and relaxing, and my program for solving second degree polynomials had more than just myself as a user.

    But I seemed to pick up a general attitude of "We don't like it".

    I can also report on being in their shoes; in my probability-and

Order and simplification are the first steps toward mastery of a subject -- the actual enemy is the unknown. -- Thomas Mann