Stories
Slash Boxes
Comments

News for nerds, stuff that matters

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.
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.

Resources for Teaching C to High School Students? 50 Comments More | Login /

 Full
 Abbreviated
 Hidden
More | Login
Keybindings Beta
Q W E
A S D
Loading ... Please wait.
  • Don't teach the language (Score:5, Insightful)

    by simm1701 (835424) on Friday December 15 2006, @05:47AM (#17252642)
    Don't try to teach the language, any more than you teach someone how to use a pen when writing.

    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.
    • Yeah, cause someone who has had 3 semesters of C really knows how to do teach about data structures...

      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
    • I'm not sure there is a standard in the industry - or atleast a single standard.

      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)

      by Bones3D_mac (324952) on Friday December 15 2006, @06:09AM (#17252754)
      I definitely agree with the parent post. Without understanding things like basic algebra or how to plan out an algorithm before even coding it, you won't get past "Hello, World" with most of them. You can't assume they'll already know this stuff or have any programming experience.

      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.
      [ Parent ]
          • Re: (Score:3, Interesting)

            If you go heavy on the pointers, you will either greatly improve their understanding of things, or completely scare them away. My girlfriend took a class once that essentially covered how to use computer programming to apply engineering concepts. The cours
    • In univeristy the text book I used was Data Structures and Algorithm Analysis in Ada - Ada was just picked by the university to ensure no student had an advantage from already knowning the language as it is rather obscure - it is also a very strict languag
    • Re: (Score:2)

      But if he knows C, that is a good candidate to teach them the algorithms with. There's a great book I read 10 years ago: Algorithms in C by Robert Sedgewick. You should really check it out. I mean it, if you're not an experienced programmer (as I was 10 ye
        • Re: (Score:2)

          I had a great time reading this book, especially the part about recursion. I wrote a program to draw a ruler recursively and some fractals. It's really not as boring as you think.
    • Re: (Score:2)

      give them an understanding of where the libraries they are suing will come from.

      SCO stop teaching our kids for pity sakes!!
  • Watch out, though... (Score:3, Insightful)

    by Channard (693317) on Friday December 15 2006, @05:48AM (#17252644)
    ... plagiarism is bound to be a possibility, especially with access to the internet. I know what when I was doing my C course years back at school, a lot of students ended up borrowing chunks of code from each other. And, in a few cases, taking one listing and just modifying it for their own purposes. And since they moved the code around a bit no-one really got busted. That was before we even had access to the internet, either!
        • Re: (Score:2, Informative)

          ...has promised to teach a few motivated students programming after school.

          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)

    by kestasjk (933987) * on Friday December 15 2006, @05:49AM (#17252656) Homepage
    But don't teach them C. Teach them a language that focuses on how to structure programs without bogging them down with memory management, pointers, etc, etc. A firm understanding of OO would also be much more useful and much easier to grasp.
    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)

      I wouldn't worry so m uch about the choice of language.

      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
      • by AlXtreme (223728) on Friday December 15 2006, @06:24AM (#17252844) Homepage Journal
        Remember that these are kids. More than enough time to learn the nitty-gritty malloc-details or pointer arithmetic. Programming should be fun in order to capture their attention.

        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.

        [ Parent ]
      • by iamdrscience (541136) <michaelmtripp.gmail@com> on Friday December 15 2006, @06:35AM (#17252906) Homepage Journal
        I disagree, I think Python is a spectacular first language. When you're teaching kids to program it helps to keep them away from the nitty gritty at first to keep their interest. Having to learn a lot of foreign concepts before being able to program something fun is what turns a lot of people off to programming, python gives the instant gratification but is also powerful and flexible enough to teach the concepts of programming. Once a student is in the programming mindset you can move them on to more complex/powerful languages like C/C++ and Java.
        [ Parent ]
        • 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

      • I was tought Pascal (allthough I allready know some stuff atvthe time, like BASIC and Z80 Machine code). And I would suggest teaching them Pascal using "Programming by design" by Miller & Miller.

        I found that to be an excellent course...
      • Re: (Score:2)

        What's wrong with Python? I never used to hack for a living, and my interest in programming is altogether academical. I am a LISP whore, for one. I really prefer Python over both c[++] and Java. It is very much OO and it looks cleaner than either of those.
        • Re: (Score:2)

          Nothings wrong with python, I think its a great language, though personally I prefer perl. However I do not think either perl or python are suitable first languages. They need to learn something with good in built discipline first. Both perl and python all
          • Re: (Score:3, Insightful)

            Both perl and python allow bad coding practices far too easily, whereas you can write very good code in them, but its better to learn the discipline first.

            This is a key point, I think. Python doesn't force you to do the things that good programmers do an

    • Re: (Score:2)

      Exactly, start them on assembly like the rest of us, and let them graduate to C once they've felt the pain. :)
      • It is more simple and straight forward than a higher level language. I taught myself using a free book online, Art of Assembly [computer-books.us], and later took the class. The book covers some basics of computers and programming that is useful for many languages. We were
    • C IS a learning tool (Score:2, Interesting)

      We had C during our Computer Architecture classes. The fact that it translates easily into assembly and machine code can be a benefit.
      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)

    by ForestGrump (644805) on Friday December 15 2006, @06:04AM (#17252714) Homepage Journal
    You need more of 3 things.
    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)

    by A beautiful mind (821714) on Friday December 15 2006, @06:05AM (#17252726)
    For example, did you know that 99.99% of high school students can't read Perl? [bbspot.com]. Shameful, shameful.

    [foot icon here]
    • Re: (Score:3, Insightful)

      I'm surprised it's as high as .01%, I've never been able to read any Perl I've written.
  • Memory (Score:2)

    If you want to teach basic C (such as function calling, variables, and basic expressions), probably any "Learn C in X days" book will do the job. But at that rate, there's not much point in learning C over a simpler language, like Java. Teaching memory o
    • Re: (Score:3, Insightful)

      Actually your points are all good reasons why C should not be the language taught. These are high school kids who are going to stay back after to school to persue an interest. Getting them bogged down in the nuts and bolts of pointers and memory mangement
  • When I learned C it was as an independant study in high school and I used primarily O'Reilly's "Practical C". I thought it did a pretty good job, but I also used variety of other books like K&R. The most useful book for me besides Practical C was "C: A
  • 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]

  • currently studiying Computer science So I could have forgotton how hard it was (is?) :)

    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)

    by Aladrin (926209) on Friday December 15 2006, @06:42AM (#17252954)
    Some posters have actually recommended that you teach from reference books, instead of books meant to teach the language. I'm amazed and appalled.

    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.
  • Use Koenig and Moo's Accelerated C++ [acceleratedcpp.com] to teach modern C++ rather than C. Modern C++ (meaning C++ written in a modern style) does not require much memory management or other "nitty-gritty" stuff, but it allows the students to learn in a framework in which su
  • in high school... (Score:4, Interesting)

    by defy god (822637) on Friday December 15 2006, @06:48AM (#17252994)

    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.

  • Berkeley Machine Structures first 8 lessons or so provide a quick and dirty intro to C.
    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
  • 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,

  • While we're on the subject, is there a brace style that is most standard in the industry?

    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)

        C wasn't designed as a language to teach you how to program. It was designed as a language to write systems software in. It is still perhaps the best language to write systems software in. However, it compares unfavorably to languages that were designed
  • The following lists of freely down loadable books contain a lot of useful material:

    • all C [computer-books.us]
    The Wikipedia article [wikipedia.org] on C lists some tutorial material.
  • 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)

    by Dareth (47614) on Friday December 15 2006, @08:48AM (#17253966)
    You have the basic experience to continue learning, and pass on the relevant parts to your students. Some resources I would recommend are the MIT Opencourseware [mit.edu] and the Berkeley Webcast [berkeley.edu].

    These resources provide two similar but different approaches to learning about computers and programming.

  • Consider Their Maths Background (Score:3, Informative)

    by miyako (632510) <miyako.gmail@com> on Friday December 15 2006, @08:58AM (#17254144) Homepage Journal
    I think that teaching kids to program in C is a great idea. I started out by taking C++ in highschool, and I'm now working as a professional developer.
    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)

    by ciggieposeur (715798) on Friday December 15 2006, @09:08AM (#17254276)
    I'm going to buck a trend and say that C is actually a GREAT first language to learn:

    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.
  • by Stradivarius (7490) on Friday December 15 2006, @10:34AM (#17255750)
    The industry group Association for Computing Machinery has a model curriculum [acm.org] for integrating computer science into K-12 education. You might find some helpful ideas in there.