I moved this into the general forum as I think you will get some more useful feedback there.
I moved this into the general forum as I think you will get some more useful feedback there.
I’m a sophomore in high school, but I think a lot of these still apply.
I’ve found that writing a program to do something helps me learn math way better than just listening to a teacher’s lecture or reading a textbook. For example, today I made one that will tell me if a point is on a circle or not, given the center, radius, and point. It just helps me lay out my thought process in a way that I understand, and I can revisit the code later and see what I do to make the math work.
Also, programming has made me improve as a team member, since I often run into a problem I just can’t figure out, and I turn to my trusty sidekick (kidding, I’m the sidekick) and he brings a new perspective and far more knowledge to the issue. By the same token, I’ve learned not to be embarrassed by needing help, or not understanding a concept fully, so I have become more involved in my classes. I have learned how to manage problems far better, and rather than either trying to force my way through it, or giving up and abandoning whatever I needed to solve that problem for, I now take a break, think about it for a little bit, and bring a new perspective. I have become far more persistent as a result, so I learn stuff better, and I put more of my own time into things like studying and memorizing random facts (thanks for that, AP Euro =) ). I have learned that success lies not with talent, or skill, or even luck, it lies in persistence, and recovering and learning from “failures,” and true failures occur only when you give up. Also, programming is one more thing some students have in common, and it offers another opportunity for students to bond and share their unique talents, like teaching and thinking outside the box. I know some of my best friends are on the robotics team. The neat thing about robotics is that it’s where the abstract thinkers (programmers), mechanical engineers (designers), and mechanically adept people (builders) work together and interact, and no one is superior or inferior, just different. Everyone has his/her own role, and everyone is accepted.
Overall, I highly recommend programming , for both robotics and computers, although they are not for everyone. It appears that the OP is a school administrator, or someone involved in setting the school’s curriculum. I would therefore recommend requiring basic programming, but VERY basic (C or C++ probably), and offering more advanced programming, such as perhaps HTML/CSS/JavaScript, and C# or Java. The only thing my middle school was missing was a developed robotics class/club. We spent about 4-6 hours in 8th grade with Mindstorms (including the graphical IDE). I knew I wanted to be part of a robotics team of any sort in high school, and I made that a requirement for any school I would even consider.
I’d personally say that HTML/CSS/JS would be a more basic programming language, over C, C#, C++, or Java. (For non robotics) RobotC is the easiest to learn, and has some great guides online for beginners!
I don’t have experience with elementary school kids. You’ll get better answers if you ask in the vex IQ forum, because those people work with kids in the elementary age range.
Extrapolating from my experience with high school and middle school kids, the expectations need to be set at the right level. Forget HTML, it’s much too complex for elementary kids to make meaningful progress when it isn’t a core subject. No HTML rules out CSS and JS. Java, C, C++, and C# are tricky at first even for adult beginners.
Elementary school isn’t the time to teach a true programming language. In my opinion (and I’m no education expert) programming, like maths only perhaps more so, is a field where it’s easy for kids to get left behind and then become convinced that they are no good at it. I think the goal should be to convince kids that programming is something they are interested in learning more about and something they can do. Things that Programming People might think of as “not real programming” are perfectly good ways to achieve those goals.
Both LEGO Mindstorms and VEX IQ are designed to be usable by young kids. They don’t need to be able to write looping, branching code that reacts to the environment. In my experience, younger kids are just as excited by deterministic one-track programs that say something like “drive forward; turn left; drive forward; spin; drive backwards”. They’re excited just by the fact that they can change something on a computer and see a corresponding change in the real world.
Personally my knowledge is limited to robotics, but there are plenty of programs for computers only that are aimed at elementary school age and teach programming. Just please DON’T START AN ELEMENTARY CLASS WITH C! I don’t know what lpieroni and Harrison are smoking. Doing that is a recipe for frustration and will discourage a number of the students from learning to program, perhaps permanently.
I agree that C can be really frustrating to learn, but I don’t know another language that’s easier to learn, but is still useful. Most languages are either C based or do things in really weird ways. For example, Python, not a C-based language, uses the amount of indentation for nested loops, which is really annoying. I guess stick with graphical languages for elementary school, and offer C-based languages and/or HTML/CSS/JS as extracurricular activities, maybe a club or team.
Also, I think that teaching programming is far more effective in 1-on-1 or small group (<5 people) scenarios, because you can teach at a pace that the slowest person can learn fully at, but the fastest person doesn’t get bored. In small groups, make sure everyone is starting at about the same level, so you’re not spending time playing catch-up, rather than teaching everyone new material. This is the same reason that many high schools allow incoming freshmen to test into higher math classes, rather than repeating a year.
I’m not entirely sure that programming you can effectively push on anyone at any age, since you won’t learn if you don’t want to. My team’s moderator has our programming team (currently 2 people, next year we will lose 1 and gain 2) teaching the other 10 or so members of the club RobotC, and I really don’t think it’s a good idea. First of all, we are not teachers, nor are we good at teaching. We have a few kids who really don’t want to be there, so they are really not trying to learn, and a few students who are really smart and already know C, so they are close to getting bored. The other kids are struggling, so we are going really slowly, but that means that those quick learners who already know C are no longer nearly as engaged as they should be.
I think Python is a good first language, but this is a neverending argument so let’s not get too deep into it. I agree that C is one of the better first languages. At engineering school our first language was MATLAB, which is useful in some contexts (I use it at my job) but pretty useless in others.
What you’re saying about 1-on-1 (or small group) teaching, and only teaching people who are keen to learn and ready to learn at that level, is true. My post was imagining programming being taught as a regular classtime activity, and not in a setting where it’s feasible to have a teacher to every 4 students.
In a small group extracurricular setting with highly motivated students, yes I think true programming languages can be used even for elementary school kids. But that’s a very resource-intensive thing for a school to be involved in. I’m also conscious of the “digital divide” here - I think a program that’s accessible to a greater proportion of interested students is preferable. If you’re not one of the best in your class at programming when you’re 8 years old, that’s no indication that you won’t find programming useful when you’re an adult.