Slashdot Log In
Resources for Teaching C to High School Students?
Posted by
Cliff
on Fri Dec 15, 2006 05:43 AM
from the best-time-to-learn dept.
from the best-time-to-learn dept.
mctk asks: "I'm a high school teacher who, disappointed with the lack of computer science in school, has promised to teach a few motivated students programming after school. As an enthusiastic novice with three semesters of C under my belt and a few side projects worth of experience, I feel competent yet ignorant. I would really appreciate suggestions for resources on C that are written to be accessible to high school students and contain lots of ideas for activities. Perhaps you've had success with a series of books that spans beginner to advanced? Do you have any activities you would recommend? How would you map a student's first year of coding? I welcome any and all suggestions. While we're on the subject, is there a brace style that is most standard in the industry?"
This discussion has been archived.
No new comments can be posted.
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
Full
Abbreviated
Hidden
Loading ... Please wait.

Don't teach the language (Score:5, Insightful)
Teach the mentality, the methodology of problem solving.
Teach basic algorithms, data structures and coding theory - give them an understanding of where the libraries they are suing will come from.
More importantly for modern world working teach colaberation, give them a real group project to do, each of them writing different interfaces or different parts of an interface for a whole program (something like a simple game such as tron is ideal for this)
By doing all of this the language becomes almost incidental - which is really what you want, who knows what the demand for C, C++, javam C# will be in a few years time, but learning the right methodology and colaberative practices will stand them in good stead for years to come.
Re: (Score:2)
Pretty much every popular language around uses similar syntax to C, so I'd say just get them to make something trivial, and then correct the obviously ugl
Brace style (Score:2)
On your brace style question, about the only agreed thing in the industry is that each dev team/company should pick a standard. Preferably with reasons for each decision.
Its no
Re:Don't teach the language (Score:4, Informative)
Try a few exercises away from the computer where the students can learn without the pressure of a blinking cursor demanding some kind of input from them right off the bat. Look at things that are popular in their culture such as games and have them try to break the rules of each game down to instructional steps, as well think about the thought process that goes into planning a move, and then explain it in instructional terms... all of it in plain english.
Another good one, is learning how to sort various forms of data, along with the numerous ways one can achieve a sort (such as the bubble sort). A great physical example of sorting are things like the Towers of Hanoi puzzle (the one with the disks and three pegs), or a deck of playing cards.
Pushing an entire programming language on someone before they know the basics of how programs function will only scare or frustrate them... especially when they have the prospect of a failing grade looming overhead.
Get them thinking outside the box before putting them *in* one.
Re: (Score:3, Interesting)
Text book (Score:2)
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
SCO stop teaching our kids for pity sakes!!
Watch out, though... (Score:3, Insightful)
Re: (Score:2, Informative)
It's an after school program. I really don't see cheating as a problem. They're kids who want to learn something: not just get their ticket punched. In a normal school class, thoug
I know I'll get modded down for this: (Score:5, Interesting)
There's a reason there are so few resources on teaching C to high school students; it wasn't meant to be taught to high school students.
Re: (Score:2)
As long as its a relatively strict langauage that doesn't encourage lazy coding styles then its useful to teach it. Having a good understanding of pointers, passing by reference, memory management and
Re:I know I'll get modded down for this: (Score:4, Informative)
I agree with the OP, C would be a terrible choice for first-time programmers IMHO. You need to keep them motivated, and that works best when the reward-to-effort ratio is high. Python would be a great choice: learn them the basics (forced indenting! \o/), and introduce them to stuff like pygame which allow nice results with very little code. At the end of the semester they would be able to make small stand-alone games. Kids like flashy things.
For a follow-up course, you could choose to go C/C++. But it would only be of use to those who will eventually get a CS/EE degree, which already (should) have enough courses on C.
Re: (Score:2)
Re: (Score:2)
The availability of libraries is totally irrelevant to the question, only the syntax matters. And, speaking of C++, you can dig up a class for nearly anything. A good first language should have a clear syntax for implementing the vanilla CS concepts, that'
A free book to learn CS using Python (Score:5, Informative)
If you want to teach basic programming skills using Python, there's a very nice free book which can help: How to Think Like a Computer Scientist: Learning with Python [greenteapress.com]
Re:I know I'll get modded down for this: (Score:4, Insightful)
Re: (Score:2)
Never programmed professionally, never taught CS, but really want to agree with you. Python is awesome in that it allows you to start writing simple yet very instructive programs, like sorting, without worrying about #include and other such nonsense (I lo
Pascal... (Score:2)
I found that to be an excellent course...
Re: (Score:2)
Re: (Score:2)
Re: (Score:3, Insightful)
This is a key point, I think. Python doesn't force you to do the things that good programmers do an
Re: (Score:2)
Assembler is beautiful (Score:2)
C IS a learning tool (Score:2, Interesting)
One of the coolest things we did was to write an asm method, write a C program that uses it, compile them with -O0 and de
You need more... (Score:4, Funny)
1. Funding to buy letters.
2. A better lesson plan so you can aim for something higher than a class of C students.
3. A tech savvy room of students.
1. For a class of 30, I would suggest 10 As, 20 Bs, 10 Cs, 5 Ds and 2 Fs. Yes, it doesn't add up to 30, but you should give mostly As and Bs, a couple Cs for those seniors who just want something, anything to take and pass while they transition from HS to college, and the D/Fs are for those who are truly slackers and just don't even give you the half effort.
2. Sorry, I hate to shoot down others, but you seriously want a class of C students? I'm sure administration wouldn't be too happy with that.
3. I hate to lay it to you, but I've seen average college students have a hard time dealing with scripting, and teaching programming is thinking differently to a higher level. You said you want to teach a few motivated students, yet you need to be open to everyone who enrolls. I would suggest you have lower and upper level classes. Lower level will teach the basics of how a computer thinks, and how to write a basic program. Those in the upper level, is more independent study and you're there as their troubleshooter, adviser, and teacher for when they need new concepts and get stuck. And while you're at it, make writing a short paper (maybe 300-1000 words) on the project they did. It's good for them to learn documentation, communication and know you're boss.
Ok, 1 and 2 were a joke, but 3 was serious. If anyone is upset, laugh. it's meant to enlighten your day. god its 3am, and i have a final in 5 hours and i'm only 50% prepared.
Grump.
I share your sentiment (Score:3, Funny)
[foot icon here]
Re: (Score:3, Insightful)
Memory (Score:2)
Re: (Score:3, Insightful)
Practical C (Score:2)
K&R2 (Score:2)
1. Realize that you are only qualified to do so much with this. Your job here is to facilitate these students' independent learning, rather than to try to teach them C programming, since you barely understand that yourself.
2. Get a few copies of The C P [amazon.com]
Re:K&R2 (Score:2)
use K&R's book (2nd ed) (Score:2)
Anyway... K&R's The C programming Language
1) Cheap
2) Most importantly it's clear,short and to the point.
This is believe, suits motivated students better than crappy
Teaching books, not reference. (Score:3, Informative)
http://www.deitel.com/books/chtp5/ [deitel.com]
Deitel & Deitel books are amazing. The professor I had in college used them to teach, even though the college didn't actually approve them. Even the worst of the students was able to understand the examples and follow along. I was amazed that he managed to teach the worst few the basics and they could actually write programs. Seriously, they had NO business trying to learn programming, and they were learning.
But don't just hand them the book and tell them to have fun. Take each chapter and make a lesson from it, as if it wasn't in the book and you had made it up yourself. (Obviously, don't read from the book.) You'll automatically say it differently than the book did, and when they go back to the book, they've got a second way of looking at it automatically.
And make them type in the code. Don't let them copy it from the CD. If sounds stupid, but it definitely helps them remember what's going on, and the mistakes they make in typing will help teach them to debug.
My suggestion (Score:2)
in high school... (Score:4, Interesting)
In high school, I took an AP Computer Science class that taught C++. If I understood then what I understand now, learning C++ would have been a whole lot easier. My teacher focused too much on the language instead of concepts.
After several failed attempts at trying to learn how to program, I finally understood basic concepts such as variables, integers, arrays, etc. I then took a more basic computer science class, "Algorithm Design/Problem Solving," that used the book Programming Logic and Design [amazon.com]. This book does not use or concentrate on any specific programming language. All our assignments were done in pseudo-code and we had to show the logic of what we wanted accomplished. I have to admit it was a lot easier trying to convey the logic without having to worry about the syntax.
It's been a couple semesters since I've taken that class, without any programming in between, and now I've picked up The C Programming Language [amazon.com]. I am currently half way through the book and ,I must say, I finally understand and appreciate the concepts being taught. I wouldn't quite recommend this book to the pure beginner, because it assumes knowledge about basic concepts such as variables, compiling, etc. The book, at a little less than 300 pages, is written and presented much better than the 1000+ page programming books I've run across.
If I were back in high school, I would love to have these concepts introduced at a gradual progression. Basic programming concepts -> Logic & Design w/ pseudo-code -> the actual language of choice using an easy to learn (30 minute intro) compiler. Of course, hindsight is 20/20 and I'm not too sure if I would have paid as much attention to the first two concepts. Since you are teaching in a high school, I take it you have 2 semesters to teach the class. Perhaps dedicate the first half of the first semester with logic. You can have them play different logic games and tie that in with the lessons.
Creating a good foundation makes learning and teaching a whole lot easier.
Webcast (Score:2)
http://webcast.berkeley.edu/courses/archive.php?s e riesid=1906978347 [berkeley.edu]
Yeah it might be over their heads, but you should be able to watch it ahead of time and glean enou
Newsgroups (Score:2)
In addition to the book recommendations, you might also like to introduce your students to the relevant Usenet newsgroups, particularly alt.comp.lang.learn.c-c++. There are a lot of people on these groups willing to help out newbies with genuine questions,
Flamebait? (Score:2)
First, C is a horrible language to learn on. Try something like Python or Ruby. There's a book out there that teaches Python where every project is some type of ga
Re: (Score:2)
A short list of resources (Score:2)
- a poorly presented [halfvalue.com] list.
The Wikipedia article [wikipedia.org] on C lists some tutorial material.The language doesn't matter (Score:2)
I realize I'm probably beating a dead horse here, but I'm feeling compelled to contribute my two cents' worth. (Save up the change for a root beer or something.)
You could teach C, C++, Java, Perl, Smalltalk, Fortran, or any number of other programming l
Educate the Educator - Resources (Score:3, Informative)
These resources provide two similar but different approaches to learning about computers and programming.
Consider Their Maths Background (Score:3, Informative)
I've seen a lot of comments saying that you should focus less on the language, and more on things like datastructures, algorithms, analysis, and design. I agree that it's important to give some instruction on the basic concepts behind coding, but I think that you're going to have to remember that these are Highschool kids, and it is highly unlikely that they will have the mathematical background to really dig into algorithms.
I also disagree with people who are encouraging you to teach them languages such as Python. While it's true that there are languages that are much better than C at allowing you to get something impressive from a small amount of code, I think that it's detremental to students in the long run. After all, you aren't trying to specifically get these kids interested in programming, rather they are students who were interested enough to come to you.
The biggest thing that I think you can probably do to give the kids a leg up is to focus on the lower level aspects of C. Do a good bit on memory allocation and debugging, and spent a lot of time on pointers. If these kids are interested in going on to become programmers, then making sure they have a solid grasp on pointers is probably one of the best things you can do.
One of the most amazing things about kids is that, when they are cooperative, their minds are incredibly malleable. Take some of the hardest parts of programming, and start getting them to adjust their thinking toward it at an early stage, and you will find that they will become incredibly skilled programmers if they stick with it. Remember that given their mathematical background, there probably isn't a lot of point in trying to get too deep into analysing algorithms, and keep in mind that there is a lot of benefit to learning close-to-the-metal programming and they might not get it in a university (which seem to be focusing on Java more and more). Be sure to keep the assignments fun and challenging, and taylored to the things that they are interested in.
The last bit of advice is that you should focus on more than just teaching them to code. Get them into the culture as well. In my programming class, for example, we used to have a weekly assignment to read and post to two stories on slashdot. We watched Revolution OS and Pirates of Silicon Valley. Get the kids into the hacker subculture and they will go much further as developers as well.
C is an excellent choice (Score:3, Informative)
1. It has a simple way to do console and file IO (scanf, printf) that will enable students to write and test simple programs.
2. It is used everywhere. As students learn more of C, they will be able to access and use the vast array of libraries available to C and go as deep as they want. When I was 16, it was common to learn C in order to start writing games, and then assembly language to make the fast loops faster. Another student learned assembly language in order to debug DOS viruses.
3. It is completely deterministic when run in one thread.
4. Its syntax is very simple. There are very few gotchas, most of which can be resolved with extra parenthesis.
Everyone else saying "pointers suck", "use a simpler language", etc. are forgetting two things about that first programming language. First, no matter what language you start with, it will be difficult to begin programming. The learning curve for Lisp/Python/Java/Ruby/etc. will be at least as steep as that for C for new programmers, and additionally there is little point in teaching OOP to people unfamiliar with structured programming and the problems OOP is meant to address. Second, it is frustrating to learn a language that has little use elsewhere, especially when it is because someone else claimed that it was better to know general concepts than to know a useful language.
Check out the ACM K-12 model curriculum (Score:3, Informative)
Re: (Score:2)
Re: (Score:2)