Newbies and Advanced Students

by Danah Beard and Matt Amdur

Who is in each group?

There are two major groups of students taking CS15. They can be labeled as "beginners" (or "newbies") and "advanced students." Most of the beginners have had little to no experience (some students have seen Logo or BASIC). Advanced students have programmed for at least a semester/year in a higher level programming language such as Pascal or C. Although some advanced students have seen C++ or Java, very few students know anything about Object-Oriented Programming beyond separating things into classes. There are some students who are more advanced but they are outside of our scope. Those students tend to have no problems with CS15.

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

Different Groups / Different Problems

Aside from a few tremendously advanced students, most people have some form of difficulty in CS15. For those that truly understand OOP, CS015 serves mostly as a refresher course. Otherwise, "advanced students" tend to struggle accepting object-oriented design, learning concepts before syntax, and using libraries/support code. Based solely on observations and questionnaires, beginner students have very little difficulty picking up the idea of seeing programs as groups of objects that interact. The difficulty that most begginers have is translating their world view into a program with valid syntax. On the contrary, syntax is simple for advanced programmers; thinking in OOP is not.

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.

Confidence and Over-confidence

One of the major concerns regarding the gap between the two groups is confidence. Most first years entering CS15 (and some upper classpeople) are told about how horrible CS15 is and that passing is virtually impossible. This type of stigma is instigated by Meiklejohns, advisors, RCs and various other people who never took the class. Quite a few people never take the course because of this stigma and others drop it early in the semester.

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:

I disliked the little egos who interrupted valid questions in order to
show everyone what hot shit they are.

Finding ways for experienced students to learn is as important as finding places for new students.

Here are some of the results of the drop questionnaire which back up the confidence problem as well as the reputation problem:

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

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

Using design checks effectively to combat the experience gap

There is no question as to the value of design checks. Those design checks that showed a lot of thought tended to result in cleaner, better programs. Sitting down and designing code before trying to write it not only makes the resulting code easier to write, but it ends up producing more elegant solutions to programming problems. Those students that come into CS15 with a background in programming tend to dismiss the value of these design checks. They assume that the programs are trivial, and that they need not think them through before trying to write them. This becomes especially true of those students who have had procedural programming experience. Most high school CS courses taught in procedural languages do not emphasize design, and the result is spaghetti code. The problem is that for whatever it may be, this code still works. Experienced students bring this philosophy of no design to CS15, and the result is design checks that are poorly thought out, reflect little work, or focus on code and syntax. For those students that can get around their preconceived notions of designing before programming, these design checks become very useful. For those with egos that are too large to see where change can be good, a better design check that forces them to design first might help. The current design checks they submit not only waste their time, but they also waste the time of the TA that has to review them. It is plainly evident when a student has just written something to get credit. By requiring, and enforcing, that students turn in a diagram of their classes as well as an explanation of every method used, students will have to design their programs first. While these requirements were in effect this year, they were not strictly enforced, and many of the design checks turned in were complete wastes of time. The only way to fail a design check, however was not to turn one in; anything else, regardless of quality, recieved at least half credit.

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.

Sections and how they play a role in educating both groups

Students entering CS15 have very diverse backgrounds, some have already done object oriented programming, while others have never sat in front of a computer before. Problems arise when experienced students and beginning students are put together and taught in an interactive setting: section. The most common problem is that the experienced students demand more of the teaching time; they tend to ask more complex questions that rarely apply to the topics at hand. In many cases these questions concern matters of personal interest; it is not to say that we should stifle personal interest, but sections are designed to help people who need a little more of an explanation. If experienced students dominate the section, beginning students don't have the opportunity to have concepts taught in class reviewed, assingments fully explained, or their "less advanced" (but generally more applicable) questions answered. In order to make sections more effective students could be separated somewhat by ability.

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.

Advanced Topics

In addition to section, an "Advanced Topics" section could be held each week. This section would be open for anyone, beginners or experienced students. The topic would be announced and any interested students could attend. Advanced Topics would include sections on: Unleashing the "Magic" (Cloud/Street), UNIX, Advanced Emacs, the workings of GP, AWT, advanced Java (including multi-threading, sockets), JavaBeans, File I/O, and Procedural vs. OO.

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.

TA Hours

One big concern is TA Hours. What is the intent of TA Hours? Should experienced students who are asking advanced questions receive as much attention as beginners? With long TA Waitlists, part of me feels that extra credit should be earned on one's own. Waits of up to an hour the night before a program was due were not uncommon. If one cannot figure an extra credit problem out, (s)he should post to the newsgroup but not come to hours. TA hours are a place for people to get help so that they can finish the assignment, hence answering extra credit questions should not be a primary concern.

Student Comments

Below are some student comments about experience and inexperience. These come from the final questionnaire.

Question: Do you feel that your background (or lack of background)put you at a disadvantage?

Those who thought their background hurt them:

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

Those who thought their background helped them:

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

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.

Those who felt that having no experience put them at a disadvantage:

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