A small footnote (didn't proofread too carefully before submitting) - I was left unprepared primarily in the AP-AB topics that weren't covered in our book, that I attempted to understand from listening to my teacher. Most of my classmates who alternated between the book and the teacher noticed a similar trend.
Personally, I'm trying to figure out why the College Board decided to ditch AP Computer Science AB. It covered more advanced CS topics (by high school standards, anyway,) that, ideally, should have served as such screening.
I was fortunate enough to attend the best-funded public school in my state and graduate from it several months ago (though one can easily argue much of the funding simply went to and from the football program, that's a topic for another post) and was also fortunate to get to experience AP-AB CS the last year it was offered. Whereas AP-A CS focused on the basics of Java (perhaps a controversial choice of language, but certainly not the topic of choice here; it worked for me and for those of my classmates interested in learning the basics of programming,) I found that AP-AB introduced more advanced concepts - algorithm efficiency analysis via Big-O notation, the exploration of various data structures, etc.
I feel the class left me unprepared in terms of what it set out to accomplish, but not because of its curriculum - I feel that the blame lies, quite frankly, in the incompetence of the teacher (for future reference, until the AP-AB course was discontinued in 2009, our school offered AP-A and AP-AB CS as consequent courses taught by the same teacher.)
While I am by no means myself an excellent programmer by any stretch of the imagination, perhaps due to some predisposition for the topic matter, I had an easier time understanding the material than many of my classmates. I believe that one factor contributing to this was an immediate dislike of my teacher, which led me to largely ignore the lectures and simply read the corresponding material in our book (if I recall correctly, it was Fundamentals of Java by Lambert and Osborne). I noticed many of my (otherwise very bright) classmates struggling with what seemed to me basic concepts and they began turning to some of my other classmates, who were either already familiar with programming or simply had a knack for picking it up quickly, and myself for help.
The teacher did not only fail to encourage having the kids actually learn something, she actively began to *stop* them from asking for help - both from each other AND from her!
This sort of attitude, combined with a very, erm...'interesting' grading scale (you could easily pass the class if your code was formatted exactly as she specified in terms of white space but didn't work at all the entire year) and, judging by the few lectures I did listen to and the complaints of my classmates, a grip on Java that was tenuous at best, guaranteed that a large number of my classmates who were bright in other subjects and sought to learn basic programming skills turned away from the area for good. (About the one thing fully everyone got from that class was that the teacher was, by all accounts, full of hot air.)
I think the problem lies in that, to weed out unsatisfactory teachers in programming, you'd need to have someone who actually understands the topic at hand involved at the screening, which, given the school I came from, seems unlikely.
TL;DR (because not everyone enjoys a long-winded and rambling essay): I just graduated from high school and took the CS courses available; both the basic and more advanced courses were held back less by their content than by the several levels of incompetence of the teacher (and it's a total shame.)
there's a lot less focus on lower-level development and hardware interaction in schools/colleges than there were in the 80's and 90's
I'm a high school student headed to a top-10 engineering university next year. From the information that I've gathered from current students and tours, while the CS department at this school focuses more on the higher-level abstractions, the CE curriculum in the School of Engineering stresses low-level development, including assembly and direct work with hardware.
Just my two cents, as I by no means claim to be an expert on the topic, nor do I know if similar things happen at other universities, but maybe the departments have simply shifted focus somewhat.
The teacher will probably be relieved to get the help. Be gentle about it though. If the teacher feels threatened by you, your grades will suffer.
I got about 10% of my grade taken off for helping other people understand in the first grading period. Then, about a week ago, she lectured us for about 20 minutes on how we shouldn't be bothering her and we should be consulting with each other for help. Go figure.
I honestly doubt the "scripts" are prepared by anyone even in the district; we've got one of the richest schools in the district and only one CS teacher who I believe does not know what the hell she is doing.
The only reason many of my friends are passing that class is because I try to explain the problem to them when they get stuck, rather than just throwing in code without explaining what it does (as the teacher tends to do).
To the OP: I stand by my original comment. Emphasize the importance of pseudocode and debugging, and make sure to provide plenty of practical examples when teaching an abstract subject.
I'm a high school student who has previously taken AP-A Computer Science and is currently taking AB CS (this is the last year they're offering it, I believe), and I have never been more dissatisfied with any teacher that I have ever had.
Programming is an outside interest for me; while we do Java in class, I experiment around with C, C++ and Python outside of school (and I am planning on trying to pick up PHP and Perl soon). I've found that many of my classmates, including friends who I know are quite competent with computers in general, are quite lost when trying to learn or apply many of the concepts we use in CS.This is understandable. However, my teacher has inexplicably continued to introduce many of these abstract concepts at the same time, without really explaining even the basic purpose and logic behind each one. As a result, I've seen many people new to CS but genuinely interested in it just give up, because it made little sense to them. Personally, I know someone who is quite talented with C, and it is thanks to his help that I can understand basic C concepts (memory management, etc.) and not be overwhelmed. This friend of mine, I believe, is quite a good teacher, and this is largely due to the fact that he a) does not assume that I know things incredibly well and b) utilizes the Socratic method to great effect.
I agree with the parent's comment. Our current project in AB CS is to write a program that sorts an array using several different algorithms. It is supposed to help us understand Big O notation and the logic behind writing more efficient algorithms, but the teacher hasn't said a single word about Big O, instead opting to hand out papers (which my friends have told me they don't understand at all). The concept of Big O notation seems to be too abstract without practical examples.
Encourage asking questions...you'd be surprised at how many people are afraid of asking questions because they feel they will sound stupid (at least in high school).
Pseudocode is a necessity for some of the assignments we have, and yet many of my friends fail to see the point (they just see it as a waste of time). Make sure to emphasize its importance, because they will feel that they do not need it early on.
Also, make sure to emphasize the importance of debugging your own code early and often. Since my "teacher" does not actually teach, I often end up having to help out my friends who are absolutely stuck, only to find that they had a small debugging issue that they could not find because the teacher never bothered explaining the necessity of debugging.
I don't claim to be an expert in CS or teaching whatsoever, so take this response with a grain of salt. However, I do like to think that my experiences in these courses lend at least some credibility to my reply.
A small footnote (didn't proofread too carefully before submitting) - I was left unprepared primarily in the AP-AB topics that weren't covered in our book, that I attempted to understand from listening to my teacher. Most of my classmates who alternated between the book and the teacher noticed a similar trend.
Personally, I'm trying to figure out why the College Board decided to ditch AP Computer Science AB. It covered more advanced CS topics (by high school standards, anyway,) that, ideally, should have served as such screening.
I was fortunate enough to attend the best-funded public school in my state and graduate from it several months ago (though one can easily argue much of the funding simply went to and from the football program, that's a topic for another post) and was also fortunate to get to experience AP-AB CS the last year it was offered. Whereas AP-A CS focused on the basics of Java (perhaps a controversial choice of language, but certainly not the topic of choice here; it worked for me and for those of my classmates interested in learning the basics of programming,) I found that AP-AB introduced more advanced concepts - algorithm efficiency analysis via Big-O notation, the exploration of various data structures, etc.
I feel the class left me unprepared in terms of what it set out to accomplish, but not because of its curriculum - I feel that the blame lies, quite frankly, in the incompetence of the teacher (for future reference, until the AP-AB course was discontinued in 2009, our school offered AP-A and AP-AB CS as consequent courses taught by the same teacher.)
While I am by no means myself an excellent programmer by any stretch of the imagination, perhaps due to some predisposition for the topic matter, I had an easier time understanding the material than many of my classmates. I believe that one factor contributing to this was an immediate dislike of my teacher, which led me to largely ignore the lectures and simply read the corresponding material in our book (if I recall correctly, it was Fundamentals of Java by Lambert and Osborne). I noticed many of my (otherwise very bright) classmates struggling with what seemed to me basic concepts and they began turning to some of my other classmates, who were either already familiar with programming or simply had a knack for picking it up quickly, and myself for help.
The teacher did not only fail to encourage having the kids actually learn something, she actively began to *stop* them from asking for help - both from each other AND from her!
This sort of attitude, combined with a very, erm...'interesting' grading scale (you could easily pass the class if your code was formatted exactly as she specified in terms of white space but didn't work at all the entire year) and, judging by the few lectures I did listen to and the complaints of my classmates, a grip on Java that was tenuous at best, guaranteed that a large number of my classmates who were bright in other subjects and sought to learn basic programming skills turned away from the area for good. (About the one thing fully everyone got from that class was that the teacher was, by all accounts, full of hot air.)
I think the problem lies in that, to weed out unsatisfactory teachers in programming, you'd need to have someone who actually understands the topic at hand involved at the screening, which, given the school I came from, seems unlikely.
TL;DR (because not everyone enjoys a long-winded and rambling essay): I just graduated from high school and took the CS courses available; both the basic and more advanced courses were held back less by their content than by the several levels of incompetence of the teacher (and it's a total shame.)
there's a lot less focus on lower-level development and hardware interaction in schools/colleges than there were in the 80's and 90's
I'm a high school student headed to a top-10 engineering university next year. From the information that I've gathered from current students and tours, while the CS department at this school focuses more on the higher-level abstractions, the CE curriculum in the School of Engineering stresses low-level development, including assembly and direct work with hardware.
Just my two cents, as I by no means claim to be an expert on the topic, nor do I know if similar things happen at other universities, but maybe the departments have simply shifted focus somewhat.
The teacher will probably be relieved to get the help. Be gentle about it though. If the teacher feels threatened by you, your grades will suffer.
I got about 10% of my grade taken off for helping other people understand in the first grading period. Then, about a week ago, she lectured us for about 20 minutes on how we shouldn't be bothering her and we should be consulting with each other for help. Go figure.
I honestly doubt the "scripts" are prepared by anyone even in the district; we've got one of the richest schools in the district and only one CS teacher who I believe does not know what the hell she is doing.
The only reason many of my friends are passing that class is because I try to explain the problem to them when they get stuck, rather than just throwing in code without explaining what it does (as the teacher tends to do).
To the OP: I stand by my original comment. Emphasize the importance of pseudocode and debugging, and make sure to provide plenty of practical examples when teaching an abstract subject.
I'm a high school student who has previously taken AP-A Computer Science and is currently taking AB CS (this is the last year they're offering it, I believe), and I have never been more dissatisfied with any teacher that I have ever had.
Programming is an outside interest for me; while we do Java in class, I experiment around with C, C++ and Python outside of school (and I am planning on trying to pick up PHP and Perl soon). I've found that many of my classmates, including friends who I know are quite competent with computers in general, are quite lost when trying to learn or apply many of the concepts we use in CS.This is understandable. However, my teacher has inexplicably continued to introduce many of these abstract concepts at the same time, without really explaining even the basic purpose and logic behind each one. As a result, I've seen many people new to CS but genuinely interested in it just give up, because it made little sense to them. Personally, I know someone who is quite talented with C, and it is thanks to his help that I can understand basic C concepts (memory management, etc.) and not be overwhelmed. This friend of mine, I believe, is quite a good teacher, and this is largely due to the fact that he a) does not assume that I know things incredibly well and b) utilizes the Socratic method to great effect.
I agree with the parent's comment. Our current project in AB CS is to write a program that sorts an array using several different algorithms. It is supposed to help us understand Big O notation and the logic behind writing more efficient algorithms, but the teacher hasn't said a single word about Big O, instead opting to hand out papers (which my friends have told me they don't understand at all). The concept of Big O notation seems to be too abstract without practical examples.
Encourage asking questions...you'd be surprised at how many people are afraid of asking questions because they feel they will sound stupid (at least in high school).
Pseudocode is a necessity for some of the assignments we have, and yet many of my friends fail to see the point (they just see it as a waste of time). Make sure to emphasize its importance, because they will feel that they do not need it early on.
Also, make sure to emphasize the importance of debugging your own code early and often. Since my "teacher" does not actually teach, I often end up having to help out my friends who are absolutely stuck, only to find that they had a small debugging issue that they could not find because the teacher never bothered explaining the necessity of debugging.
I don't claim to be an expert in CS or teaching whatsoever, so take this response with a grain of salt. However, I do like to think that my experiences in these courses lend at least some credibility to my reply.