IB Computer Science Projects
Getting Started Dave Mulkey,
Germany 2007
Simply Getting Started (or getting started simply)
- Start with a simple idea - a possible simple idea.
For
example - a Tic-Tac-Toe game.
Is it too simple? That depends
on how you solve the problem.
- Improve the user's life.
Why would a person want to play
Tic-Tac-Toe? To win a trophy? No, probably not. Probably to
pass the time, play a few games out of boredom. If that's true, then it
needs to be :
- quick
- simple
- play at the right level of
difficulty
- Why is this better than the "old-fashioned" way
(e.g., playing on paper against a person)?
Don't need a person to
play against - I can do it any time, at the spur of the moment.
Can have a
"perfect" opponent.
More improvements coming...
But
what happens if the user gets tired of it - e.g .......
- How can it be made EVEN BETTER? Changeable?
Flexible?
In Tic-Tac-Toe, maybe you want it to play a really
"good" strategy. Maybe you want different levels of difficulty -
beginner, intermediate, advanced. Maybe you can play on a bigger
board. How about three dimensional?
- Put the user in control.
Good software lets the user change
the settings. For example, play with smiley faces and frowny faces
instead of X and O. Can you make "skins"? If you have
instructions, can the user choose a different language?
- But don't make the user do everything - something needs to be
AUTOMATED.
How about letting the computer play against itself, so the
user can just watch?
Can it remember games that were played? Keep
score over several days?
Can it give advice - teach me how to play
better?
* What automation makes all this
worthwhile?
- More, more, more.
How about organizing a tournament, with
several players, making sure everyone plays against everyone (round-robin) or
double-elimination? How about playing online against an opponent in
another country? On a 3D board? Connect it to an educational
quiz?
- Computer systems have Input, Output, Processing, and
Storage.
Make sure you spend time and effort in all these
areas.
- No - don't make it bigger and bigger - KEEP IT SIMPLE
Once you
have brainstormed all the clever ideas, throw some away and only
keep "enough" - whatever that is.
Here is a possible prototype.
Starting Over (?)
You have NINE MONTHS to complete this project. So you
could:
- wait 8 months and then start?
Bad idea!
- start one project, throw it away,
then start another? Maybe once, but only in the early stages.
Let's throw away the Tic-Tac-Toe game, and start over with a different
idea.
- Simple Idea - adding numbers (wow - that MUST be too
simple!)
- Improve the user's life
This will depend on the user. Who
wants to add numbers anyway?
Someone checking their bank account.
The
school's accountant, checking money for books, salaries, etc.
A student
calculating a grade-point-average.
- Better than paper or a calculator?
Computers make fewer mistakes
(?), making corrections is easy (or should be),
can save a copy of
every calculation, can reformat it and print it out or copy into a
word-processor
- Put the user in control
Make sure they can do "extra" things
like copy/paste, saving, corrections, pretty printing, etc
They should be
able to specify the format they want for the display - e.g. how many
decimal
places, do they want scientific notation, so they want numbers
printed in a row or column,
use a comma instead of a decimal point,
etc
- Automation
Can the computer be "smart" about this work?
Like can it "guess" what numbers I want to type, so I don't need to do
it? Here are a few ideas:
- Rather than typing 5,5,5,6,6,7,7,7,7 ,
type 5x3 + 6x2 + 7x4
- Accountants like to leave out the decimal point,
typing 650, 1400 instead of 6.50 , 14.00
- It could report the
highest and lowest values, as a common error is typing a double digit (thus
producing an unusally large number) or leaving out a digit (making a very
small number)
- Make it better
- save all numbers and results into data
file(s)
- don't permit round-off (truncation) errors, like 5.9 + 0.1
= 5.99999999999999
- write reports with rows and columns for "sets" of
numbers
- print nice reports on paper with headers and footers and nice
fonts
- More, more, more
If you get addition to work, how about adding
multiplication and division and subtraction
How about permitting the user
to type and print fractions
How about other strange types of numbers like
times and dates?
- Computer systems have Input, Output, Processing, and
Storage.
Make sure you spend time and effort in all these
areas.
- No - don't make it bigger and bigger - KEEP IT SIMPLE
Once you
have brainstormed all the clever ideas, throw some away and only
keep "enough".
Here is a possible prototype.
Enough is Enough
So what is enough? Consider the following:
- You probably want a good grade, so enough is something
that completely satisfies the IB Assessment Criteria
- The intended-end-user probably has specific
needs or wishes that you should try to
satisfy.
- Enough cannot exceed the amount of time, energy
and skills that you have. You have 9 months, but that is not 9
x 30 days x 24 hours! The IBO says 50 hours is
expected. Unfortunately 100 hours is more common. You need to
think ahead and make a reasonable estimate of how long the
work will take.
Setting Goals
You are required to write Criteria for Success (goals) as
part of the Analysis Stage in the IB Assessment Criteria -
A2. These must be:
- written before you start writing the program (A2)
- sensibly connected to your analysis (A1)
- agreed to by with the intended-user (A3)
- tested and achieved successfully by the finished program (C3, D1)
You must write clear, specific goals. These should be
performance features. They are NOT programming
goals. For example:
- using arrays is not a goal - it's a way to achieve a goal
- store names in a RandomAccessFile - it's closer, but it's
still about programming
- store a list of names and allow the user to change
them - that is a proper goal
Your goals must specify the features that the user needs in
order to solve their problem.
Who is the User? Why?
After choosing a topic/problem, the next big question is: "Who is the
intended end-user?" You really NEED an intended user. You might be
an expert programmer. You might be experienced in the problem domain (for
example, using a student planner). But that doesn't mean that you actually
know exactly what another person wants or needs.
You need to choose a user, and then talk to them to clearly
specify the goals of the program. They will have both reasonable
and unreasonable wishes. You need to AGREE with them on reasonable goals
for the project.
Once you have an intended end-user, you can start disuscussing
user-stories and specifying goals.