[In 1997, 59 students announced that they had zero background in programming. Four people said they knew C++, 18 knew C and 20 knew Pascal. Others knew BASIC, Fortran or other languages. Twenty two people said that they were very familiar with OO Concepts. At the end, when students were asked to rate their programming experience, 42 said that they had no experience, 40 said that they had very little and 76 said that they had experience.]
The difference in difficulty causes problems for CS15. Beginners think that they are far behind because they see their counterparts quickly create code while the advanced students tend to think that the OO paradigm makes no sense (and in some cases, turn in procedural programs for the first couple assignments). Often the beginners do not realize that the advanced students also have tremendous issues in CS15 (although Andy says it from the start). In addition, the advanced students often do not realize that they need to quelch their ego and past knowledge and try to view CS15 from a fresh mind. Those who are capable of doing so from the start are able to succeed in CS15 from day one.
Although frustration exists for both groups at the beginning, the beginners are usually behind by the time Tetris hits. Both groups have figured out the OO paradigm by Tetris. Advanced students already understand loops, ints, and operations while the beginners have to struggle with a new syntax issue. This struggle continues into Final Projects. No longer are either group dealing with OOP. Instead, they both have to use OOP knowledge and create working syntax to solve a problem. This discrepancy needs to be alleviated.
The confidence gap is often greater than necessary because, while those who are frightened by the course have close to zero confidence of their ability, those who have experience with procedural programming have confidence that supercedes their ability. Even as the semester ended, many of the beginners felt that they knew far less about programming than they should (although their grades did not show this same attitude). The average grade for the semester was 91%, which demonstrates that most students had a solid understanding of the material. Eliminating the confidence barrier would greatly help the discrepancy between newbies and experienced students.
In addition, the over-confidence of experienced students frustrates beginners, both in section and in class. During the final questionnaire, one student wrote:
Finding ways for experienced students to learn is as important as finding places for new students.I disliked the little egos who interrupted valid questions in order to show everyone what hot shit they are.
Here are some of the results of the drop questionnaire which back up the confidence problem as well as the reputation problem:
Some of these issues can be dealt with immediately. We propose that an advertising document about CS15 be sent to all Meiklejohns, RCs and advisors that gives a frank impression of CS15. This would explain what issues different students would have and who to get in touch with regarding CS15.I asked around and was told that the course was ridiculously time consuming. I am interested in taking the course but as an athlete I would not have the time needed to put into it. Reputation as a really hard class. Didn't want to be overloaded first semester freshman year. I had registered to take cs 15 as a fifth class. Everyone who heard this fact told me that I was crazy. When a cs 15 ta also informed me that I was crazy, I decided to drop it. I guess this response really isn't a help. Sorry. I decided to drop the class because I felt it may be too difficult without having any programming experience. My Meiklejohn lied to me and told me CS15 requires 50 hours of work per week. So I dropped it without even turning up for the first lecture. I felt REALLY frustrated in the class. First of all, I have absolutely NO experience, and was just slightly intimidated coming into the class. The fact that everyone kept asking these hot shot questions didn't boost any of my confidence. I heard that the class is VERY demanding, and i had no prior programming experience, I would like to take graphics courses, but i need to take CS15 to get to them. I wasn't sure I was ready for CS15 when I hadn't already programmed... anything. It seemed like a lot of other people knew a ton of programming already for an introductory course.
Where design checks can be the most useful are for the students with little or no programming experience. For someone who has never had to write a program before, the task can seem very daunting. Design checks provide a way for students to get feedback on their thought process, and they allow those students who are headed in the wrong direction to be steered back on track. Design checks could be made more useful, however, if their format was slightly altered.
Students should be encouraged to ask questions on their design checks and they should expect to get those questions thoroughly answered. This year the TA's did not always address the questions posed in the design checks, and it might help to make answering questions a mandatory procedure. If design checks are made more interactive, students will get more out of them. Also, when TA's notice serious design flaws they should recommend that the student rethink, or even resubmit, their design. Simply stating that the design is not good, without giving ways to improve it, is not helpful. For students with little experience, having someone point out different ways that their design could be improved would be very helpful. Overall, design checks are necessary everywhere, not just in CS15. Teaching students how to design early will help ensure that later in their CS careers they will know how to tackle larger, more complex problems.
Beginner sections provided those students who wanted section to re-explain basic concepts and act as an extra-lecture with a place to get help. Most of the people in these sections were new to programming, and as a result the complex, personal interest questions didn't usually come up. The real problem came in other sections, where very advanced students and students who would have liked a slower pace were mixed. There has been much argument as to whether or not an advanced section would work, the issues of tracking, egos, and reputation make it a less than pleasant subject. The idea, however, about offering an extra section on an advanced topic sounds very good. By having a section once a week that dealt with a predetermined topic, that went above and beyond anything in lecture, those students who felt that their regular section was too slow would have a new forum for learning. The desired affect would be to keep other sections more focused on topics pertinent to the course, and questions would hopefully be more focused on course material. By getting rid of many extraneous questions, it would be easier for sections to focus on reviewing complicated topics, further explaining assignments, and dealing with questions that apply to a broader group of students.
In addition to making sections composed of a more cohesive group of people, there are also many other ways that would increase the value of sections. For instance, sections could be based on what students wanted to discuss. Students could email their section leaders with topics for discussion, and the topic of the week could be posted. Those people who understood what was being discussed would be discouraged from coming, and those who needed a review would tend to show up. This would help to focus the questions coming from the students on the topics at hand. If everyone is confused about the same thing it is much easier than trying to explain six different things to six different people. Another way to make sections more useful would be to have the section leaders announce the goal of their sections on the first day. It needs to be made clear that sections are not a place for ego trips, to hear yourself talk, a substitute for TA hours, or a place to discuss what's on your mind. Section is a place to go when you are confused about what is being taught, how to attack the assingment at hand, and a place to brush up on fuzzy topics. In essence, sections should be geared more to those with less experience so that they can be on equal ground with those people who already have some experience. This is not to say that there should be no regular sections, but rather that the goal of section is to further explain topics that confuse a large number of students.
The reason that we decided an advanced topics grouping would be helpful is because we feared the idea of having an "advanced section" that broke people down into three groups (beginning, average, advanced). This way any enthusiastic student could be helped, and a forum could be developed for advanced students to voice their questions.
Some students did feel that an advanced section should exist:
There should be a "hot-shit" section for students who think that they know everything, so that these students don't waste everyone's time in normal sections with their inane questions.
(Experience is a disadvantage) at first because i was so used to procedural shit it took me a long time to get used to object oriented concepts, but then it was an advantage because all the stuff we learned in the second half of the class was review. I don't think that my background gave me much of an advantage. I had very little experience with C and object oriented programming. Perhaps my understanding of loops did give me a slight advantage, but not much else. My experience hindered me. Early projects were just too easy for me to care about. When i got to more complicated projects, i was still in that mind set and didn't do as well.
I feel that my generally strong background in computers helped me a lot. I knew a lot of the concepts that were discussedd in the class in an abstract way, and eveyrthing fit together very well for me. Yes, I think it (experience was an advantage) did in a way. Most of my friends already did some programing before and the thinking process was a lot easier for them than it was for me. I used to take longer than all those people who had some experience in programing before. I could solve my problems, but not as efficiently as they did. Because they always got better grades than me. Absolutely (experience was an advantage). Especially at the beginning, I had a hell of a time following the lectures. It was just very unfamiliar. I think that the course description should stress the fact that no prior programming experience is necessary, because a lot of people are intimidated by the course, and a lot of people think it is only for prospective c.s. majors.
A little disadvantage, yes, because people came in already knowing Java, already being adroit at the loops and algorithmic stuff that I had more trouble with, etc. However, the course felt like it was very doable for anyone at any experience level, and was balanced and clear enough so that I could do well, and learn a ton. Yes (no experience was a disadvantage), because i was unfamiliar with the mindset of coding. i think if i had had more years of experience i would have started out more easily. It was not until the end that i began to feel comforrtable programming Yes, very much so because those with experience not only had a grasp of the concepts but also knew about syntax. Therefore, they would be done much faster than us beginners, so not only did I feel like a moron, but also was confused about so much for so long. On the whole, no--the only time I felt disadvantaged was during lecture, when those with a strong background in programming wasted class time asking very specific questions about very detailed points or subjects we were not even close to covering....
Overall, it seemed like those who had programming experience found it most useful once they were able to put it use. The first half of the course concentrates on learning OO concepts, not on syntax. When Tetris hits, however, those with prior experience can use what they know about loops, integers, and everything else to their advantage. Conversely, OO makes more initial sense to those people without a background. These students don't have to unlearn bad habits, and they don't get in the mindset of things being too easy. Those without experience are also scared by some of the more experienced students, and they need to be told that while they might not have as much programming experience, they are on a level playing field. Unfortunately, this may attribute to a higher dropout rate amongst beginners. [In 1996, 23.74% of those with experience dropped while 53.33% of the begginers dropped CS15. In 1996, the rates were 26.05% experienced and 60.00% of the begginners.]