Computer Science Education
in Secondary Schools
Computer Science is a relatively young area of study and as a result,
has a much less developed educational backbone in high school.á From our research and personal experiences,
weÆve found that the Computer Science curriculum in high school is disorganized
and non-standardized across school and even within schools.á Often there existed no hierarchy of classes
from grade 9 through to grade 12.á
Students with programming experience and who had taken Computer Science
courses previously were mixed together with students who had never written a
program or even used basic applications.á
This makes it extremely difficult from both the teacherÆs and the
studentÆs perspective.á How can the
teacher design a curriculum to suit the needs of a class whose knowledge is
spread over such a wide spectrum?á
Imagine a teacher attempting to teach a math class where half the class
knew calculus and algebra and the other half had never learned simple
multiplication.
Another fundamental problem with Computer Science in high school is the quality and background of the Computer Science teachers.á More often than not, Computer Science teachers in high school donÆt have the proper background to adequately teach Computer Science courses.á These teachers are seldom Computer Science majors from university.á TheyÆre not even teachers whose teachables include Computer Science.á We believe that there is a lack of existing education and resources for teachers who want to teach Computer Science as well as a lack of initiative and motivation for new teachers to choose Computer Science as an area of specialization.á This results in an overall decrease in the quality of Computer Science courses offered to high school students.
We realize that the shortage of teachers with a strong Computer Science
background is a problem that requires a fairly long-term solution.á However, that does not mean that current
Computer Science teachers canÆt make do with what is available.á Although our research for this paper doesnÆt
adequately represent all Computer Science curricula and all Computer Science
teachers, we found that teachers were putting too much emphasis on the problems
they were faced with rather than coming up with creative solutions given their
limited resources.á A few teachers complained
of limited hardware, a lack of good textbooks or spacious classrooms.á We believe that these problems are trivial
compared to the disorganization of the curriculum, which takes almost no
physical resources to fix.á These issues
will be discussed further in this report.
Lastly, we believe that the Computer Science curriculum in high school
suffers greatly because students just donÆt know what Computer Science is.á From our own personal experiences, we found
that there was general confusion about the nature of Computer Science from the
average high school studentÆs perspective.á
Often, the high school curriculum offers ôComputer Scienceö courses
ranging from courses teaching students how to use Microsoft Word, to Object
Oriented Programming.á These courses are
all offered with the same ôComputer Scienceö title, and in no particular
order.á We believe that the size,
breadth, popularity and growth of Computer Science courses in high school
suffer because of a lack of information and confusion about the nature of
Computer Science.
Generally, the Computer Science curricula begin with introductory
courses in Grade 10.á Basic concepts
such as data types, selection, and loops are taught in a variety of languages
such as Microsoft Visual Basic and Turing.á
More advanced data types are presented in grade 11, in addition to
concepts such as file input/output, searching, and sorting.á It is sometimes the case that simple
concepts in Object Oriented Programming are taught at this level.á One problem identified for the grade 11
course is that it often has to be taught assuming no student has taken the
grade 10 course. For grade 12, concepts in Object Oriented Programming are
discussed with greater detail.á Students
are also given the opportunity to learn simple Internet publishing concepts
such as HTML.
For the most part, the current curriculum for high school Computer
Science classes does not prepare anyone for first year Computer Science at the
University of Waterloo. It is our contention that if CS131 was not provided as
a starting point then many students would be discouraged by the sharp learning
curve. It should also be noted that thirty percent of first year Computer
Science students begin with CS131. Current grade 12 high school curriculum for
math and science courses prepare students for their equivalent first year
university courses. This is not the case with Computer Science, especially at
Waterloo. Some students entering the university ôdon't know that using
applications on a computer does not necessarily prepare them for the study of
Computer Science.ö Also, schoolÆs that teach programming usually teach concepts
on a high-level which can fool students into thinking they understand concepts
when in fact they do not (see Appendix B, Interview with Sandy Graham).
Generally, the computer equipment available to schools
is relatively equal to the number of students taking Computer Science courses.
Moreover, students are fortunate to have hardware and software that reflect
industry standards.á That is, students
have access to Intel Pentium-based hardware, with substantial RAM, and they are
privy to popular development software such as Microsoft Visual Basic, Microsoft
Office, and the Java programming language.áá
In general, students do have access to computers outside the classroom,
for instance at home or in the library.á
However issues, with software licensing and at home usage arise due to
the varying nature of computer usage at home, and different educational
licensing policies by software vendors.
Budget cutbacks are problems for teachers in that
often there may be a wealth of hardware available to them, but not enough
qualified people around to configure the technology.á Moreover, budget cuts have also been tied to reduced availability
of computers outside class time.
The present curriculum entails assignments that progressively get more
difficult and are based on the topic being covered.á We find that these assignments do a good job in allowing students
to grasp key concepts.á However, assignments
are not consistent across the hierarchy of the curriculum in that all courses
are independent.á Assignments in one
course may overlap other courses, or higher-level courses may offer easier
assignments than lower level courses.
The final projects are sufficient in preparing students for entry into
the University of Waterloo Computer Science program.á They teach students to define problems and develop ways to solve
these problems. Examples of assignments are included in Appendix C of this
report.
There is an unquestionable shortage of high school teachers with a
strong enough Computer Science background to teach a solid Computer Science
course.á This is a problem that may not
have an ideal short-term solution.á
Ideally, this problem could be remedied by increasing the popularity of
Computer Science as a teachable for teachers.á
I think the majority would agree that Computer Science majors are not
typically motivated to obtain their degree to teach Computer Science in high
school.á I also think that many would
agree that those who aspire to teach for a living are not always inclined to
choose Computer Science as one of their teachables.á We believe that there should be more
marketing and education for aspiring teachers to choose Computer Science as a
teachable.á Maybe the university should
offer Computer Science courses geared specifically for students taking the
teaching option.á These courses would
not be nearly as gruelling as core Computer Science courses, but would teach
all the fundamentals required to teach at a high school level.á This way, Computer Science is not as
intimidating for aspiring teachers.á
There were many issues brought up by teachers regarding a lack of
resources, materials, hardware, software and equipment.á These deficiencies are attributed to a
shortage of funds and expertise and, in the opinions of the teachers: result in
the inability of the academic material to be taught efficiently.á
Textbooks are an integral part of any curriculum.á They allow students to review, verify and
comprehend topics demonstrated in class by the teacher.á Introductory textbooks in the field of
Computer Science do exist that allow students to gradually grasp important
concepts.á Due to the immense content in
many Computer Science textbooks, the material they cover could be spread across
more than one course. For example, the first introductory half could be covered
in grade 11 and the second and more advanced half could be covered in grade 12.á
A search on Amazon.ca provided some very useful titles:
1)
ôAn Introduction to Programming and Object Oriented Design Using Javaö áby Jaime Nimo
2)
ôJava 2: A Beginner's Guideö
by Herbert
Schildt
3)
ôKarel the Robot: A Gentle Introduction to the Art of Programmingö
by Richard E.
Pattis, Jim Roberts,
Mark Stehlik
An analysis of book descriptions as well as reader reviews (some by
school teachers) demonstrates that the above books are ideal for a high school
class environment.á Also, the cost of
the textbook may be shared between the budgets of the two courses that are
using it.
An issue regarding the lack of classroom teaching equipment was also
raised.á Such equipment included
projectors, writing boards and computer monitors.á However, the use of such equipment is independent of the quality
of instruction.á University classrooms
that are used for teaching complex and advanced theories and techniques of
Computer Science and programming mainly only use a blackboard and well prepared
lectures to illustrate ideas.á A large
part of problem solving in Computer Science does not involve the direct use of
computers (i.e. Analysis, design, documentation, etc.).á We find that computers do not even need to
be in the classroom where the teaching takes place.á This will reduce distracting factors such as games, the web and
instant messaging.á Computers should be
situated in dedicated labs (preferably 2 or 3 per school) where students are
able to use labs after class time as well as during specified class lab
time.á This also allows for multiple
classes to use the computers while other classes are learning theory.á If budget problems exist with regards to lab
size and number of students, then the lab can be used on a rotational basis
among students in the class, such that a number of students are in the lab
while others are learning theory during one period and they switch during the
next period.á Teachers can also
encourage the very useful practice of peer programming where students share a computer
and work on projects in partners or groups.
The final issue with respect to resources involves the performance and
quality of computers used by students.á
We find that effective illustration and understanding of proper
development techniques and theories can be accomplished with the use of a
compiler and text editor.á These minimal
software requirements can be acquired at relatively low cost or free, and can
run on modest hardware.á Schools with a
moderate budget should be able to teach the same techniques and theories as
schools with large budgets.
á
The curriculum for every math and science course within high school is
designed to prepare you for the equivalent first year university course. The
same must be true for Computer Science curriculum. In order to do this,
curriculum should become standardized. The major issue raised against
standardization is the drastic discrepancy in lab equipment from school to
school. With our proposed changes to refocus the curriculum on in-class
teaching with less concentration on physical lab time, schools will be able to
standardize their Computer Science classes. Currently most high school courses
focus on simply producing code and flashy graphical interfaces. In general we
believe that lecture, assignments, and exams should incorporate problem
solving, design analysis, and pseudo code abstraction to accompany actual
coding.
Curriculum should also clearly build on previous grades and allow for a
general introduction to computers. Our proposed grade 9 curriculum should
assume students have no previous computer experience. This class will provide
an introduction on how to use computers in general and applications like
Microsoft Office. The class will also provide an introduction to how computers
and the Internet work. Grade 10 will become the first step in preparing
students for university programs. This course could incorporate tasks like
building a simple web page and should move on to programming concepts like
variables, differences in data types, and condition/loop statements. The most
important part of this course should be to teach concepts and not be language
specific. These concepts could be taught with JavaScript which requires no
compiling and only a modern web browser to execute.
Grade 11 should build on these concepts while focusing on procedural
abstraction and file input/output. If possible, this class should use a
compiled language like Java or Turing. As well, this class could introduce
database concepts and SQL. We believe that databases can be an excellent tool to
develop problem-solving skills and provide a further understanding of data
types. The Grade 12 class should, again, continue on previous courses but
should be primarily focused on students entering university Computer Science
programs. This class should introduce object oriented design as well as
non-programming topics like testing and documentation. We all found that
universitiesÆ attention to documentation and testing is completely overlooked
in high school. This class should also contain an independent learning project
so that students with advanced skills can progress faster.
For many of the more traditional courses such as Math,
History, English, or Music, students have the ability to gradually progress
through high school.á That is, courses
may be extensions or continuations of previous courses, therefore giving
students the ability to obtain increased amounts of knowledge for each
additional course.á As already
mentioned, Computer Science curriculums unfortunately do not follow such a
regimented format.á Instead, Computer
Science courses at the high school level often overlap excessively, increasing
the potential for students to become uninterested with the curriculum.á As such, a standardized curriculum was recommended
where each successive class is complementary to its predecessor.á We believe that with such a curriculum,
students will be able to learn Computer Science progressively, similar to Math,
History, English, Music, etc.
A common problem for high school students entering a
Computer Science program at university is their misconceptions about what the
program entails, the type of courses and assignments offered, and what sorts of
careers are available for computer scientists.á
It is therefore important to help address all these issues before high
school students actually venture into university.á Specifically, students should be enticed with big and challenging
projects, and it should be made clear to them that Computer Science is not
simply assembling and using high-tech gadgets û but rather, that Computer
Science involves mathematics, problem solving skills, software development
skills, and teamwork skills.á Moreover,
it would be very advantageous for students to meet with industry visitors for
them to get a good sense of the role of Computer Science within academia, and
within the workforce.
The last, and perhaps most important aspect of
improving studentsÆ impressions, is giving them opportunities to reap the
benefits of self-reward.á For example, students
may take a proactive role in their education by conducting weekly seminars,
where students are required to present new and relevant topics in front of the
class.á That way, students may have a
more informal way of learning new material.á
Another powerful tool is the Internet.á
By maintaining personal Web pages, students have the opportunity to feel
satisfied that they are actually published on the Internet, and they will also
be challenged to learn about Web technologies related to publishing their documents.
As Computer Science is a relatively young and dynamic discipline,
educators are having a tough time preparing students for university.á Problems with inconsistent and incomplete
curricula, books, equipment, and a lack of fully qualified Computer Science
educators are further challenges facing educators and students alike.á Consequently, students start in Computer
Science programs at universities with misconstrued beliefs about what the
programs entail, and where they may end up in the future.á
To remedy these problems, we recommend several changes in the ways that
Computer Science is presented at the high school level.á First, we suggest that curricula be
standardized across schools, and that courses should be progressive û building
upon earlier courses.á Second, the focus
should be shifted to concepts of Computer Science as opposed to simply
programming.á Consequently, students
would have a better understanding not only of Computer Science, but also of
where it may lead them in the future.á
Third, we have found several high quality books that may be used by
educators to assist with presenting the material.á
We found that the schools interviewed had fairly good hardware and
software resources.á However, in cases
where schools are not as fortunate, classes may be staggered, teaching theory
to part of the class, while having lab time for the other part.á Moreover, presenting theoretical Computer
Science as mentioned can easily counterbalance deficiencies in hardware and
software.
Students may also take some of the learning initiative into their own
hands.á They may be made responsible for
presenting new topics in class, and/or they may be challenged by big
assignments or by maintaining a Web page.á
These projects could be both enjoyable and rewarding for students.
The education of teachers is another important to properly developing a
Computer Science education system at the high school level.á Specifically, we found that teachers are
teaching Computer Science having a wide variety of backgrounds.á We therefore recommend that universities and
teacherÆs colleges should place additional incentives for aspiring teachers to
take Computer Science teachables.á
Moreover, providing teacher certifications and introducing pay scales
based on qualifications may ameliorate the delivery of Computer Science
education at the high school level.
Finally, we have developed a curriculum û beginning in grade 10 û that
is progressive and challenging.á
Students are first taught the basics of computers and Computer Science,
then are presented simple programming techniques.á Once students reach grade 11, more advanced skills are discussed,
and finally in grade 12, students are introduced to Object Oriented concepts,
as well as topics such as testing and documentation.
Although we concede that there is no short-term solution to problems
with the delivery of Computer Science education in high schools, we are
confident that our recommendations will better prepare students for entry to
Computer Science at the University of Waterloo.á
Appendix A û Teacher Interviews
Michelle Vidberg, Galt CI.
Summary of
program
¸In what grade does the Computer Science
curriculum begin?
In the grade 9
Integrated Tech course (TTI) there is a unit on Introductory Computer Programming.á At many schools this is not taught
though.á I'm now working on developing
this unit using Tcl/Tk for this semester's classes.
Otherwise, it
begins in Grade 10 with the Open level TIK course.
¸What are the programming languages taught?
This varies greatly
from school to school.á At GCI, we teach
Turing and VB6 in Grade 10 (TIK course) with Turing first to emphasize the
basic concepts then VB6 second because the kids like the ôbells and whistlesö
In Grade 11
(ICS3M) we used to use VB6 but as of this year now concentrate on Turing.á In the future this may also include some of
the O-O features built into Turing, but right now we just use the procedural
functionality.
In Grade 12
(ICS4M) we use Java, specifically with Holt Software's ôReady to Programö Java
IDE.á (Check out Holt Software at www.holtsoft.com û they are also the
ones who distribute Turing)
In addition, we
intersperse some HTML/JavaScript into some of the courses to break things up a
bit and apply some concepts like repetition, selection and arrays to a new
setting.
¸What are the key concepts presented?á (i.e. data structures like arrays, data
types, loops, if statements, etc.)
Variables,
repetition (conditional and counted loops) and selection (if..then..elsif..else..end
if)á first.á (Grades 10, 11, 12)á
Then arrays.
functions/procedures, some types of searching/sorting (Grades 11 and 12).á
Records, arrays of
records, other data types, more searching/sorting, recursion, object-oriented
programming (some in grade 11, mostly grade 12)
¸How much attention is devoted to pure
theory? (i.e. Object-Oriented Programming, Algorithm design and analysis,
Testing)
We always dedicate
the start of the course to problem-solving methods, software development models,
data flow.á As we start programming we
talk about algorithm design, do pencil/paper code walkthroughs (which the
students HATE!), effective debugging, types of errors (syntactical vs. logical)
and designing good test data.
In the Grade 12
course I spent the first 2 weeks with ôKarel the Robotö to introduce O-O
programming and found I returned to Karel quite often to reinforce
concepts.á Lots of theory focus in grade
12...
¸What do [weekly] assignments entail?
I'll try and send
some examples later.á Several small
programming tasks, increasingly challenging.á
Perhaps one small-group task and a larger multi-faceted question.á One or two large projects throughout the
year û including the final project.
¸Describe a typical final project.
This year's Grade
11 project û design a system to keep track of books in your personal
library.á Each book's information is
stored as a record, with the library being an array of records.á Write subprograms to enter/delete books,
search/sort by field, display information in a variety of formats, etc... ,
create a user interface and design a logo using pixel graphics.á (Individual project)
This year's Grade
12 project û which is really a procedural problem in an O-O language û I have
work to do with this course still!
Read in employee
records, including age, salary, etc....
Write Java
subprograms to manipulate the data and display it in a number of ways,
including a scatterplot of age vs. salary using pixel graphics. (Group project)
(Yes these
assignments are quite alike û in terms of concepts, I probably got almost as
far with this group in the revamped Grade 11 course as I did with my first
group of Grade 12s (because they had done VB in grade 11)
¸How many hours of class per week?
76 minutes per day
times 5 days.
¸How much time is spent in class for
lecture, as opposed to independent learning, working on projects/assignments?
We typically spend
15 minutes at the start of class for review, questions, etc.á On days when I am introducing a new topic
(about once a week) I may spend up to an hour doing an interactive lesson with
them.á (I teach, they try it out, we
discuss, etc...)á Apart from this
ôformalö teaching, I am working individually or with groups of students,
students are working on assignments, critiquing their peers' work, discussing
problems, etc.á I try to facilitate an
environment where students communicate with each other û not all students are
keen on this though.
¸Does the course offer any field trip
opportunities, industry or academic visitors?
Occasionally we
have a ôreal-lifeö programmer come to share his/her career with us.á We do not currently have any field trips but
we may in the future.
¸Describe the ratio of computers to
students.
Usually 1 to 1 but
that is just luck and numbers. áIn
theory I could have up to 27 students with only 20 computers.
¸Describe the typical hardware specs. (CPU
speed, RAM, etc.); and, are all machines the same?
Hmmm.... I'll have
to check on that.á They are about
equivalent to decent Pentium 3s with plenty of RAM for our needs.á We are not slowed down by the hardware
anymore û a few years ago this was a problem.
¸Describe all the software used for the
classes (i.e. Administration software, Development software, Teaching software,
Testing software, etc.)
Grade 10 û Turing
and VB6
Grade 11 û Turing
(by Holt Softwareá - www.holtsoft.com)
Grade 12 û Java
(using Holt Software's ôReadyö Java IDE)
throughout û HTML
and JavaScript using Notepad and a browser (usually IE)
Marks
Softwareá - MarkBook (used in most Waterloo
Region schools currently)
OS û Network runs
on StudeNT Vista (based on Windows NT) and machines run Windows 98
¸Are school computers (labs) accessible
outside of class time?á What other
facilities are available to students?
Yes, labs are
available at lunch and on students' spares, however they are in high
demand.á I am working on purchasing a
school student license for Turing and Ready Java so that they can (legally)
work at home too.
¸How many students are in a typical CS class?
20-25, although
the max is theoretically 27.á (By the
way, with classes over 20/23 we are doubling up students on computers.)
¸How many students pursue further education
involving computer programming?
Of my 20 Grade 12
students this year, about 15 are headed for CS or Computer/Electrical/Software
Engineering, or college-level computers or robotics.
¸To your knowledge, are there any students
who pursue CS after high school who do not take any CS courses in high school
(for whatever reason)?
Yes.á I think this happens with students who
considered themselves ôartsyö in high school and weren't interested in
computers.á They may get into
college/university studying something different, say law, and get really
interested in the CS applications of the subject.á I don't think this is a bad thing.á However, I do try to encourage all types of people to at least
try CS.
¸What do students tend to think of the
class? Is it considered too easy/too hard/only for CS people/etc.?
I think students
expect it to be harder than it is.á I
tell them at the outset that if they come to class, do their best and complete
assignments they will pass, and I have yet to be proven wrong.á The students who fail the courses do not
make an effort,complete assignments or accept offers of extra help.á There is also a stereotype of the type of
person who enjoys CS û I try to avoid reinforcing that stereotype even though
many students may fit the profile (and I probably do too!)á This means assuming students are not
familiar with all the computer lingo, do not necessarily have computers at
home, are not all strong math and science students, and do not all watch the
Space channel!á It also means providing
a variety of assignments, some math-based, some socially/ethically based, some
graphical/artistic, etc.á Hopefully this
will avoid some CS stereotyping and encourage a wider variety of people
(including more young women) to take the courses.
¸Describe the gender demographics of a
typical CS class.
About 30-40%
female.á However, those females who do
sign up are sometimes hard to hang on to.á
I find they need a lot of encouragement to stick with it and not give
upá - especially young women who come
into the Grade 11 ICS course without the Grade 10 course and are a bit
overwhelmed at the start.
¸What is your education and background?
B.Math (Teaching
Option) from U.Waterloo, B.Ed. from UWO. (both 1994)
¸Do you perform any IT tasks within your
school (i.e. network support, troubleshooting, architecture/infrastructure,
etc.)?
I'm the CATC
(Computers across the Curriculum Committee) representative for our school's
Tech. Dept.á CATC develops IT plans for
the school, prioritizes hardware/software requests, implements appropriate
professional development.á
We are very
fortunate to have a full-time computer support person in our school who deals
with all networking, installation, repair, etc. types of issues.
¸It was mentioned during the in-class
presentation that recently there has been a slight drop in the number of
students taking CS courses in high school.á
What may be some reasons for this trend, in your opinion?
As students are
completing high school in 4 instead of 5 years, they have less room for
elective subjects.á Some would say that
because CS now falls under the Tech. Jurisdiction instead of Math or Business
that it has become less popular û I tend to disagree with that view however.
¸What do you think is the optimal way of
teaching CS to students?
Hmmmm... my answer to this changes constantly!á Currently I introduce a topic every week or so, do a few examples, and let students spend several days working individually and in small groups, going through related problems.á This allows me to interact more with the students who need more direction, while those who can take off on their own.á I try to encourage a lot of peer interaction and support within the class.á We tackle a few larger projects through the year, including a final project which I now think I will keep as a group effort.á I try to evaluate in a variety of ways û both written and programming tests, small homework problems, code design and walkthrough, larger tasks.á I also try to incorporate reading assignments, watch and report on videos, critique websites, etc. (particularly in social/ethical topics).á I'm still working on this though...
¸Where would you like to see CS education in
5 years? 10 years?á (i.e computes at
every desk, virtual learning, online courses, etc.)?
I think there will
continue to be a need for personal interaction with a teacher (I hope so or I'm
out of a job!) at least for the majority of the students.á I would like to see opportunities for
students to supplement their in-school learning with online courses and
projects though.á I would like to see in
5 years that the curriculum across Ontario is being taught fairly consistently,
so that universities and colleges will attach some credibility to the
course.á I hope that the level of
hardware and software available at schools will be sufficient that it does not
cause a hindrance to education.á
Currently some schools deal with very slow equipment that slows down
learning.á (Not that I'm complaining
about my own situation however)
Summary of program
Appendix B û Interview with Sandy Graham
What percentage of entering CS students take CS131, CS133, CS134?
Rough numbers have approximately 30% of the student starting with CS131,
65% of the student starting with CS133, and 5% of the students starting
with CS134.
This may change next fall since we have increased the prerequisite
knowledge for CS133 to include experience with subprograms and
parameters. Previously students were only expected to know loops and
selection.
What would you consider the biggest problem (or problems) with high
school CS curriculum? (Funding, training, standards, etc)
The biggest problem I see with the high school CS curriculum is that
there are not enough people who want to teach CS in high school. Many CS
teachers did not study CS in university; many feel unprepared to teach
the courses in high school. The second biggest problem is that CS is an
elective course, and elective courses are struggling to survive in the
new curriculum. I think small schools in particular will have trouble
offering a section of the grade 12 courses for example.
What would you consider the biggest problem first year CS students
face with UW's CS program?
I think students would tell you that the biggest problem they face is
the pace at which things are taught. I think the biggest problem
students in CS133 face is that there is an incredible diversity of
experience in that group of students. Most students think the pace is
too fast or too slow, and not many think we are teaching at their level.
Lectures, rather than a high school classroom experience, tends to make
students passive learners and they can be fooled into thinking they
understand concepts when in fact they don't. I also think that some
students are not as computer science literate as they think they are -
for example they don't know that using applications on a computer does
not necessarily prepare them for the study of computer science.
Do you get the majority of your questions from high school students or
teachers? What do the questions usually pertain to?
I probably speak with more students annually than teachers. The forums
in which I speak with with students simply have a larger number
associated with them: the university fair in Toronto and Campus Day for
example. Students want to know what marks they need to get into the
program, and what kinds of jobs they can get with a CS degree. Teachers
want to know what they should be emphasizing in their courses so that
their students are more prepared for first year, what language they
should teach, and if I have any suggestions for text books for their
courses. Parents who email me often want to know if Waterloo has some
kind of enrichment program for their child (usually son) in CS.
Name_________________________
ICS
4MI Test û Strings & Input/Output
ááááááááááá Username:á
test
ááááááááááá Password:áááááá winsock
Please save all programs in the MyDocuments folder of your test account.
The following code fragments may (or may not!) be useful as you write your programs:
ááááááááááá BufferedReader input
ááááááááááá input = new BufferedReader(new
FileReader (fileName))
ááááááááááá PrintWriter output
ááááááááááá output = new PrintWriter (new
FileWriter (fileName))
ááááááááááá output.close()
ááááááááááá throws IOException
ááááááááááá import java.io.*
ááááááááááá number=Integer.parseInt (line)
¸Read a pair of strings from a file called wordpairs.dat (strings are saved one per line) and prints them on the screen in alphabetical order, or says that they are equal. You should deal with the possibility that some strings may contain capital letters, however the output on the screen should show the strings in their original case.
eg. If wordpairs.dat contains:
hello
Fred
summer
Summer
The output on the screen would be:
The word Fred comes before the word hello.
The word summer is equal to the word Summer.
Save
this file as IOCompare.java
[8
marks]
¸Declare String s1 and set it equal to the word happiness.á Use String methods to print the following on the screen.
a)ááá The number of characters in s1.
b)ááá The result when all letters in s1 are changed to capital letters
c)ááá The result when every letter a in s1 is changed to a letter o.
d)ááá The third-last character in s1.
e)ááá The first 4 characters in s1.
f)áááá The location of the first letter p.
Save
as StringMethods.java
[7
marks]
¸Ask the user to enter a word.á State the word and whether or not it contains the phrase ôingö.á Program repeats 5 times or until the user enters ôstopö as the word.á Print results on the screen and output to the file called ing.dat.
e.g. If user enters the word ôparachutingö,
Print out ôThe word parachuting contain the phrase ing.ö
e.g. If user enters ôhallucinogenicö,
Print out ôThe word hallucinogenic does not contain the phrase ing.ö
Save
as IngWords.java
[5
marks]
Name___________________
¸Circle
either True or False. [6 marks]
oThe Turtle class must be instantiated before its methods can be used.
oThe word ôvoidö appears in the signatures of all methods that do not return values.
Trueááááááááá False
oClass methods belong to non-instantiated classes.
Trueááááááááá False
oA subclass inherits only private methods and data.
Trueááááááááá False
oThe methods of the Math class contain the word ôstaticö in their signatures.
Trueááááááááá False
oWhen you call a method from an instantiated class, the name of the method must be preceded by the name of the object.
Trueááááááááá False
¸Why
does the Turtle class have 2 constructors?á
Explain a situation where each might be used.á [3 marks]
ICS 4MI û Final
Project
This part of your final assessment is worth (approximately) 10% of your final mark.á It is a team-based project, and marks will be assigned both for planning, communication, documentation efforts and for actual Java coding.á Efforts should be made to divide the workload up equitably, to communicate effectively with fellow team members and to resolve problems at the team level.á Any irresolvable problems or questions should be directed to your CEO (Mrs. Vidberg) through your team leader.
Specifics:
¸Each team
consists of 2-3 members
¸One team
member will be given the title ôTeam Leaderö
¸Team Leader is
responsible for time management, conflict resolution and communications with
CEO.
¸All aspects of
project must be completed by Wed. Jan. 22/03
¸All team
members are expected to be present in class on Wed. Jan. 22/03 for project
show-and-tell and peer/team evaluations.á
Any student absent (without a very good reason) will receive zero for
that portion of the project.
Problem:
Read in a set of related arrays from a file, perform various
operations on the data, and print out a graph of the data.á Do error-checking and debugging on your Java
code.á Add internal documentation and
create a user manual file explaining how to use the code.
Problem
Specifics:
¸Save as FinalProject.java
Ûarray.dat
contains name, age and salary information for 10 employees, with one piece of
data per line.
e.g. áááááááááá name1ááááááááááááááááááá
age1
salary1
name2
age2
salary2
à
ÛRead data from
array.dat into 3 arrays nameArray, ageArray, and salaryArray.
[readData method]
ÛPrint
information in a neatly formatted table.[printData
method]
ÛSort the array
by name using a sorting algorithm.á
(Details available from your CEO) [sortData
method]
ÛPrint a chart
of employee names and whether they are Students (<=18), Adults (19-59) or
Seniors (>=60) [categoriseData
method]
ÛPrint a graph
(scatterplot) of age vs. salary.á
Include a title, labeled axes, scale, etc. [graphData method]
¸Main method
calls the readData method, then gives a menu of choices of other methods.
¸Thoroughly comment your code, including a complete header and comments in each section of code.
¸Create a user
manual, describing how to use the program, any known bugs or limitations,
future upgrades, etc.
¸Other (extra
marks)à
Name:___________________
ICS
4MI û Final Written Test
1.ááááááááááááááááá Explain briefly the 3
programming paradigms we discussed in class.á
Give an ááááááá example of one
language which fits into each paradigm.
[6 marks]
2.áááááááá In computer
science, what do each of the following terms mean? [12 marks]
ááááááááááá Constructor
ááááááááááá Superclass
ááááááááááá Protected
ááááááááááá Class
ááááááááááá Object Method
ááááááááááá Instantiate
3.áááááááá List 2 advantages to
using the Console class provided in our version of Java.á [2
marks]
4.áááááááá What do we mean by
ôcastingö?á Give an example of its
use.á [2 marks]
5.áááááááá List 6 of the basic
data types used in Java.á [3 marks]
6.ááááááááááááááááá Give 2
examples of calculations for which there are Java ôshortcutsö.á Give the full version and the shortcut.á [2
marks]
7.áááááááá Turn each of the
following sentences into one line of Java code: [5 marks]
ááááááááááá a)á if word is equal to the String ôYesö (assume word was declared as a String)
ááááááááááá b)á while counter is equal to 5 (assume counter was declared as an int)
¸while line is not equal to the null String (assume line was declared as a String)
ááááááááááá d)á if the square root of x is less than or equal to y.á (assume x,y were declared as doubles)
¸Give an example of a recursive method that can be used to find the sum of the first n numbers.
[5
marks]
¸Describe 2 different ways to determine whether a method is of function-type or procedure-type.
[2
marks]
¸Draw a
diagram to represent the iterative model of software development. á[6
marks]
¸Explain why the iterative model of software development (drawn above) is more realistic/applicable than the waterfall model.á [2 marks]
¸What is the difference between overloading and method and overriding a method?á Give an
example of each
from the work done in this course.á [2 marks]
¸Who
developed Java? [1 mark]
14.á Thinking Question!á List 3 ways in
which this course could benefit someone in their future work/schooling, even if
they do not continue on in the
computer science field.á [3 marks]
15.áááááá What will be
the output when the following program is run?á [4 marks]
//
The "FinalTest" class.
import
java.awt.*;
import
hsa.Console;
public
class FinalTest
{
ááá static Console c;áááááááááá // The output console
ááá public static void main (String [] args)
ááá {
ááááááá c = new Console ();
ááááááá int numbers [] = new int [10];
ááááááá for (int x = 1 ; x < 10 ; x++)
ááááááá {
ááááááááááá numbers [x] = x * 5;
ááááááááááá if (x % 4 == 0)
ááááááááááááááá numbers [x] = x / 4;
ááááááá }
ááááá ááfor (int y = 0 ; y < 10 ; y++)
ááááááá {
ááááááááááá c.print (y, 10);
ááááááááááá c.println (numbers [y], 10);
ááááááá }
ááá } // main method
} //
FinalTest class
Name_________________________
ICS
4MI Test û Methods & Classes
ááááááááááá Username:á
test
ááááááááááá Password:áááááá javatime
Please save all programs in the Handin folder in the Test class on your
desktop!!
¸Create a new class called Triangles.á Make a triangleShape method which draws a green equilateral triangle using an object from the Turtle class.á The method has the following signature:
ááááááááááá triangleShape(int xc, int yc, int size)
...where (xc,yc) are the co-ordinates of the bottom-left vertex of the triangle and size is the length of each side of the triangle.
Please note:á an equilateral triangle has 3 equal-length sides and 3 equal angles! (each is 60 degrees).
Now create a main method that draws a pattern of 6 triangles on the screen, with
a side length of 20.á Choose pattern a)
or pattern b), but note that pattern b) is worth 1 mark more than a).á Save
as Triangles.java. [5 marks for a),
6 marks for b)]
a)áááááááááááááááááááááááááááááááááááááááááááá b)
¸á Create a new class called RandomSquares.á In the main method, instantiate 2 FatTurtles, one red and one green, of width 6 pixels each, at random points on the screen.á Have each one draw a square of random size.á The squares should be drawn simultaneously.á (i.e. Red draws one line, then Green draws one line, Red draws another line,...)á
Note: you do not have to make a square method, everything can go into main.
Save as RandomSquares.java. [5 marks]
Name:________________
ICS
4MI û Arrays Test
Log in to your assigned test account to create your solutions:
ááááááááááá username: test
ááááááááááá password: final
¸Save all your solutions in the Hand-in folder of the TST class on your desktop.
¸Save your work often!á System crashes can and do happen at the worst possible times!
¸Keep your eyes on your own monitor.
¸Include a brief header at the top of each program with your name, date, ICS4MI and program name.
¸If you complete 1 and 2 thoroughly you will receive 20/24.á To get a perfect mark you would also have to complete 3 and 4.
You may (or may not) find the following I/O-related phrases useful in your coding:
ááááááááááá BufferedReader input
ááááááááááá input = new BufferedReader (new
FileReader (fileName))
ááááááááááá PrintWriter output
ááááááááááá output = new PrintWriter (new
FileWriter (fileName))
ááááááááááá output.close()
ááááááááááá throws IOException
ááááááááááá import java.io.*
ááááááááááá number = Integer.parseInt (line)
1.áááááááá Write a Java Program that reads in a list of 10 names from the data file array1.dat and stores them in an array.á It then reads in a list of 10 Math ááááááááááá marks from another data file, called array2.dat and stores them in another áááááá array.á Create a method called printArray which takes these 2 arrays as ááááááááááá parameters and prints out a chart of names and marks.
ááááááááááá Another method called averageArray takes the marks array as a parameter, áá calculates the average (using a loop again) and returns the average value to ááááááááááá the main program where it is printed below the chart.
ááááááááááá e.g.áááááá Nameá Mark
ááááááááááááááááááááááá Amyáááá 98
ááááááááááááááááááááááá Bobááááá 34
ááááááááááááááááááááááá ...áááááááá ...
ááááááááááááááááááááááá The average of the 10 marks is 67%
ááááááááááá Save
as MarksArray.java. [10 marks]
2.áááááááá Write a Java program that generates a random integer between 1 and 4. áááááááááá Repeat this process 1000 times.á Create an array to keep track of how many áá times each integer came up.á Print a chart with each number (1 to 4) in the ááááááá first column, the number of times it occurred in the second column and the ááááááááááá percentage of the time it occurred in the third column.
e.g.áááááá Integerááááááááááá Number
of Timesáááááá Percentage
ááááááááááá 1ááááááááá 317ááááááááááááááááá 31.7%
ááááááááááá 2ááááááááá 256ááááááááááááááááá 25.6%
ááááááááááá 3ááááááááá 212ááááááááááááááááá 21.2%
ááááááááááá 4ááááááááá 215ááááááááááááááááá 21.5%
ááááááááááá Save as RandomArray.java.á [8
marks]
3.áááááááá Do this only when 1
and 2 are completed.á Modify MarksArray.java to áááááááá output the final chart and average to a
file, arrayout.dat, as well as the ááááááááááá screen. [2 marks]
4.áááááááá Do this only when 1 and 2 are completed.á Modify RandomArray.java to ááááá ask the user how many random numbers they want to be generated, instead of using 1000. [2 marks]
¸Define the following terms: [8 marks]
ááááááááááááááááááááááá a)áááááááá Message Passing
ááááááááááááááááááááááá b)áááááááá Recursive Method
ááááááááááááááááááááááá c)áááááááá Superclass
ááááááááááááááááááááááá d)áááááááá Overloaded Method
¸Explain the difference
between ôpublicö and ôprotectedö methods and data.
á [4 marks]
¸Explain the differences
between ôfunction-type methodsö and ôprocedure-type methodsö.á [4 marks]