Teaching Programming Technique
Teaching Programming Technique
Digital WPI
Interactive Qualifying Projects (All Years) Interactive Qualifying Projects
May 2009
Christopher J. Trufan
Worcester Polytechnic Institute
Repository Citation
Mendelbaum, A. J., Trufan, C. J., & Edwards, I. C. (2009). Teaching Programming Technique. Retrieved from
https://digitalcommons.wpi.edu/iqp-all/2799
This Unrestricted is brought to you for free and open access by the Interactive Qualifying Projects at Digital WPI. It has been accepted for inclusion in
Interactive Qualifying Projects (All Years) by an authorized administrator of Digital WPI. For more information, please contact digitalwpi@wpi.edu.
Project Number. GFP0810
by:
___________________________
Isaac Edwards
Andrew Mendelbaum
Christopher Trufan
Approved:
______________________________
1. Teaching
2. Programming
3. Technique
i
Abstract
This project was created with the goal of increasing basic knowledge of
programming and increasing interest in programming in high school and middle school
aged children. To achieve this goal, we designed a program to teach the user some of the
basic concepts of programming and object oriented thinking and created a study to
This report outlines the goals of our Interactive Qualifying Project Teaching
Programming Technique. It covers existing program based teaching aids, the strengths
and weaknesses of the existing programs, and the features we were looking to develop in
our own program. It details the goals and purposes of our initial project and how we
adapted our goals based on our research. It explains how we went about designing a
program to teach object oriented programming without the steep learning curve many
existing methodologies have, and the processes by which we tested the effectiveness of
the program. It details our testing procedure, and concludes with a critical evaluation of
the results, whereby we elaborate on ways our program could potentially be improved or
ii
Acknowledgements
This project would not have been possible without the help of the following people:
• Jeanine Skorinko, who provided access to a large group of test subjects and
• Billy Hnath and the ACM, allowed us to use their room for our study
• Sarah Goodwin, who helped make sure that the script was understandable
• Sarah Tung, who helped make sure that the script was understandable
iii
Table of Contents
This project was designed as an interactive program to introduce basic object oriented
school and high school aged children. There is a written portion on the right panel that
introduces the concepts and explains them via written text as well as providing a few
examples in actual code. On the left panel there is a playable RISK game. Rules and
playing instructions are provided, and the game is simplified so that users can focus on
learning object oriented programming rather than the rules of a game. The user is also
presented with samples of code that they can modify and witness the results of their
modifications in the playable game panel. With the code sections carefully chosen, the
results are very noticeable and help to visually connect the more abstract code to the
objects of the RISK game. This helps the user to think in terms of objects, a key
requirement to learning object oriented development. After the user gets used to editing
existing code they are asked to start writing their own. The RISK game is replaced by a
game of Blackjack. Aided by prompts, the user must write sections of the code for the
Blackjack game. This allows the user to feel as though they are writing the actual
program and not just doing minor changes, as well as testing the applicable knowledge
they have gained by running through our program. Throughout all this the accompanying
text helps the user so that they do not get lost or frustrated, even if they do not have
someone (such as a teacher) to help guide them. At the end of the RISK game and
Blackjack there is a test that asks questions related to the general programming concepts
that we determined were the most important for a foundation in object oriented
programming.
1
The reason that this project is important is twofold. The program we developed can
be used to create an interest in computer science early on. Being able to think in terms of
objects is very important to a lot of modern day programming, but is often not taught
until AP or college level classes. Many existing programs either do not focus on object
oriented concepts. The few programs that do provide too much of a disjoint between the
objects and the actual lines of code a programmer will eventually be working with. Our
program bridges that gap by introducing object oriented thinking while slowly
acclimating a user to actual programming languages. Using this program will help a
student to develop and cultivate an interest in programming earlier, while providing them
with the object oriented foundations that will be necessary as they learn more about
computer programming.
With this project, we designed a program to educate users on the basics of object
study to test the effectiveness of our program. The results of the study indicated a average
20% increase in knowledge relating to key areas of programming and object oriented
design.
In the remaining portions of the paper we will go further into our background
research of the existing field of educational programs. We will explain the different
portions that we felt were good additions and the portions that we wanted to approach in
a different way. We will also explain the method that we used to build and test the
program. After that we will show an analysis of our results. Based on those results we
will determine the success of our program as well as postulate changes that may improve
2
3
Background
When we first started the project we began to look into the current state of programs
that are being used to teach. We found programs that used their own simplified
languages such as Scratch, Greenfoot, Karel, and Small Basic. These programs are all
very similar in their approaches. They are all object oriented, but do not actually walk a
user through any tasks. In essence, they make programming simpler, but do not actually
teach what it is the user is to do. The next group of programs that we found was Robo and
Alice. Both of these took graphical approaches, but essentially hid the actual coding
portion.
Scratch- This program provided an interesting learning environment. There was a focus
on animation to create a program rather than coding. As a result there was a large focus
not a real focus on the programming portion. (Scratch - Imagine - Program - Share)
4
BlueJ- This program used normal java just like actual coding. The difference it made
was that it visualized the object oriented design aspect. You would design each part and
the visual area would be how to integrate it. Again there was no part that walked the user
through what to do. The user was left to read a book to act as the tutorial or have a
teacher plan a course using the program. (BlueJ - Teaching Java - Learning Java)
than beginners. It provided the most realistic environment of all the programs that we
looked at and just used Java as its language. It is clearly not aimed at beginners since it
seemed to be more of a last step before actual programming than a way to introduce
5
Karel- This program provided many interesting ideas. It used a simplified language and
actually highlighted what line of code was being executed. This would let people
understand what line of code is causing the problem. The program’s idea was simple,
you controlled a robot that you gave simple commands; left, right, up, and down. This
idea allowed people to quickly learn a lot, but not necessarily anything that is applicable
6
Small Basic- This program was a very simplified language that was essentially just a
coding environment. To understand how to use it there is a large document that explains
all the commands and then leaves the user to discover ways to utilize the commands. The
part of this program that makes it easy to learn is that it will auto-complete commands for
you and provide a description of what that command will do in case you were to forget.
(Microsoft Corporation)
Robo- Robo is one of the more graphically oriented programs. It is actually very similar
to Karel in that you also control a robot on the screen and have the same simple types of
commands. The difference is that Robo focuses more heavily on the graphical portion.
There are puzzles that people can make and they are forced to program their way out.
(Robomind)
7
Alice- Alice is probably the most famous of the “learn to program” programs. It is also
the most graphically focused one. Programming is done with 3D images that you drag
and drop around the screen. This makes it extremely easy to use, but at the same time
limits it. Also when a person moves on to a coding environment they are not really used
8
Overall the existing field leaves something to be desired. The offerings will
educate and even stimulate the subject matter, but each one on its own isn’t really
complete. Some don’t use real code, which creates a hard learning curve. Others focus
on object oriented design to the point where they don’t use code at all. Then there are
those that are only code and offer very little to emphasize objects and object oriented
concepts. There does not seem to be anything that combines real code with ease of use
and visuals. Also many of these programs seem to be ones that would assist in a class
Some useful papers we looked at were written regarding BlueJ, but also had a lot
paper goes through creating a blackjack program using BlueJ and explaining how it
orders the topics. It starts out focusing on the graphical environment since that is the
easiest part to understand quickly. It then goes into editing syntax by changing pre-
existing code. This offers the idea of typing actual code, but without the challenge of
doing it from scratch. There is also the idea that by choosing blackjack as a game people
will better understand what is going on. The lesson was able to make connections to
ideas in the program with ideas in the actual game. This helps the user learn it more
quickly by making these connections. The overall ideas that we got from this paper was
that using games that users may already know will likely allow for faster learning as well
as making the topic more interesting. The emphasis on starting off with a visual
The other paper that we read was mostly out dated, however it did provide a
focused idea on how to deal with object oriented design. It talks about it as the main
9
starting point. The paper brings up the idea of starting with giving the user objects that
the user is able to move around and interact with to see how everything changes. This
focus on object oriented design was much more prevalent than many of the programs we
looked at and brought up some interesting ideas. The goal of the paper however was to
teach object oriented design to users who already knew some code. In this way it offered
an interesting way to approach the problem, but didn’t apply directly to what we were
trying to do.
programming. Many used a graphical approach to simplify things for beginners. The
paper that focused on creating a blackjack program corroborates the idea that a graphical
approach can be a good idea. The downside to many of the graphical programs was that
they often created a significant disjoint between the objects and the actual program code.
The ones that did show real code examples, on the other hand, typically had little to no
graphical element. The programs focused on one extreme or the other, with none
connection to actual program code. Programs like Alice used only a graphical
environment whereas programs such as Greenfoot only really offered code. While not all
these programs are geared towards beginners, there is nonetheless a lack of middle
ground. Some approaches used custom programming languages while others used Java.
10
2. Methodology
program would need in order to teach “object first” programming. Before designing a
program of our own, we looked at existing programs to see if there were any that fit our
purposes or could be easily modified to fit our purposes. We constructed a table of the
object oriented concepts that we felt were important, as well as other features a program
needed (such as ease of use) and assigned a weight scale to each number. Concepts that
were not as important (like the ability to model particularly complex object oriented
principles that were beyond the scope of what we were teaching) were rated fairly low,
while the ability of a program to represent fundamental object oriented principles was
rated very high. We went through each of the programs we were looking at and assigned
them numbers according to the weight scale, to figure out which one we wanted to use.
After calculating the values of each program, we looked at the ones which had done
best (according to our weighted scale), to figure out whether it was a program we wanted
to use. We looked at whether there were any key features we felt were missing, and how
difficult it would be to add those features in. We determined that there were no programs
that could be modified to fit our needs without significant effort, and that our time would
11
Karel/Karel++/Karel Small
Categories Sub-Categories Alice Greenfoot J Robot Robo Scratch Basic WEIGHT
Usage Tutorial 5 2 1 1 2 1 3
Variables 7 10 0 2 5 10 10
Loops 10 10 10 10 10 10 10
Functions 0 10 10 10 0 10 10
Control Structures 7 10 10 10 8 10 10
Similarity to Actual
Code
Structure and
Code Flow 5 10 7 8 6 10 5
Commands 1 10 1 6 4 10 2
Flexibility 7 10 4 4 5 10 1
Error Output 0 -5 5 8 0 6 5
Debugging/Stepping 0 2 10 10 6 2 6
UI
Complexity 5 10 3 -4 -2 -2 -3
Intuitivity 5 -7 5 6 6 3 6
Modifiability 1 2 2 6 2 0 8
Graphical Representation of Code 10 3 8 7 5 2 7
Object Oriented Concepts 6 10 4 0 5 7 6
Actual Teaching (done by *program*) 6 3 6 6 3 0 10
Pre-created World? 5 3 1 8 3 0 4
User Editable World 7 6 7 4 5 0 2
Variety of Scenarios 8 6 2 3 6 6 7
Ease of Editing 1 2 2 6 2 0 10
Looking at possible programming languages to use, the choice was fairly simple.
Java is one of the most popular object oriented programming languages, and would
provide an excellent foundation for later high school programming classes (most of
which are taught in Java, thanks to the AP Exam using Java). We did look at the
possibility of using another programming language, but felt it would be easier to design
an intuitive program when using a language we were already familiar with – the last thing
12
we wanted was to be learning the same language we were trying to simplify to teach
others.
With the programming language decided, we began to construct a script for the
teaching part of our program. We looked at existing programming books and tutorials, as
teach (variables, loops, etc.) and the best order to teach them in. While we wanted to give
users some hands on experience programming, we also wanted to simplify what they had
to do. Since our goal was to teach users to think in an object oriented fashion above
traditional linear programming, we wanted the focus to be on objects rather than lines of
code. To serve this purpose, we designed our tutorials to only display small sections of
We separated the concepts we wanted to teach into separate chapters, intending each
chapter to be a standalone introduction to the topic, and organizing the chapters in the
order we felt would best teach object oriented programming concepts. We designed
simple examples to demonstrate concepts, and designated certain sections of the tutorial
One topic that had come up repeatedly in the reading that we had done was the idea
that people tend to learn programming better when there are observable results to changes
they make. To take advantage of that we decided to design our program so that it would
have two primary sections displayed. There would be an area where they learned new
programming concepts and applied them, and another area where they could see the
results of what they had changed. This kind of visual, instant feedback would help to
reinforce the concepts they have learned, as well as help them to think of programming in
13
an object oriented fashion. One of the drawbacks to many current introductory
programming courses is that they don’t teach the programmers to think in terms of
objects – seeing the graphical results of changes that they make helps users of our
program to conceptualize programming in terms of discrete objects that interact with each
other.
Since the target demographic of our program was middle and high school aged
children, in order to be effective at teaching it was necessary that the program not be
boring. If we truly wanted to have a positive impact, the users needed to find the program
at least somewhat fun. To this end, it was decided to make the pane of the window where
they observe the results of their program into some sort of game. Making it a game would
also have the side benefit of further reinforcing the idea of objects, since the user would
be able to interact directly with their modified program. We brainstormed possible games
that we could have the user be creating and playing, and decided that a game similar in
basic concepts to the classic Risk game would be effective. One of the primary reasons
we chose it was for the effective way we could tie object oriented concepts into it. With
countries that grouped together formed continents, and discrete players, it would make it
easy for a user to visualize the way objects can interact with each other and be part of
other objects. We simplified the rules of the game down so having to learn complex rules
would not detract from the actual programming. Rather than have a user build a program
from scratch (we deemed it too daunting a task for a users first exposure to
programming), we designed the Risk game ourselves, planning on having the users make
modifications and be able to observe the results. Being able to see how the game played
out unmodified, and then how it would change when they modified it, would help a user
14
to grasp how the software code they wrote was actually working. We used design
patterns so that our Risk game could be adapted to other uses, or expanded easily as our
needs expanded. In sections of the code we planned on allowing the user to modify, we
made sure to use very clear variable names. When actually constructing our examples, we
simplified the code where necessary to make sure the user was only exposed to the code
brainstormed existing ways that we could have the user utilize their newfound knowledge
of the chapter to make noticeable changes to the Risk game. We then narrowed our
knowledge, focusing on the ones that could be easily focused on the particular concept
Once we had created our list of examples, it was necessary to determine how we
were going to have the user modify code. We thought about using an existing IDE, such
as Eclipse or Netbeans, but that introduced a whole new problem. We would need to
spend a fair amount of time teaching the user how to use the IDE. On top of that, even if
we only wanted the user to be able to use very simple features of the IDE, they would
still be presented with a lot of buttons and features they would know nothing about – and
when looking at the code would see large chunks of code that was well beyond their
current knowledge level, further confusing and overwhelming them. We wanted the focus
to be on the objects, not on dozens of lines of code. We determined that the most
effective way to allow the user to modify code would be for them to modify it in the
program they were already running, where they could see real time results of their
15
modifications in the other pane of the window. To allow their written code to interact
with the Risk game, we created hidden code to encapsulate their written code – they
would only see and work with a handful of lines of code, but that code was actually
analyze their code, figure out what is happening, and then pass parameters into the Risk
game indicating what their code was doing. We discussed having their code be compiled
directly into the game, but decided that it would be best if errors in their edited code were
not able to keep the program from working. Our program wraps the code that they edit in
our hidden wrapper code (based on the particular example they are working on), and then
compiles it when they select the “check example” button. It tells them if it successfully
compiled, and indicates whether or not the code did what the instructions wanted it to do.
Whether it does or not, as long as it compiles the Risk game on the left will change to
show them the result of their changes. The problem code that they modify is also saved to
a temporary variable, so the user can go back to look at other examples or other sections
of the chapter without losing any modifications they have made. We also put in a button
to reset the example code, in case a user modifies so much that they forget how it started.
Once our program was fully constructed, we wanted to be able to test its
knowledge of the concepts that the program was designed to teach. We constructed these
textbooks and online programming courses to see what kind of questions those sources
thought were good indicators of how well someone knows object oriented programming.
16
Once we had test questions, we wanted to find people to help test our program. This
was needed for a variety of reasons – the most important was to simply gauge the
effectiveness of our teaching techniques to determine whether there were ways we could
improve our program. Another, secondary reason was simply to reveal any bugs in the
program, or any ways it might not be intuitive. While to us, the program seemed to work
backgrounds already, and even the member with little previous programming experience
had been working so extensively with the program that he couldn’t provide an objective
viewpoint. What makes sense to us might not be what a typical user would expect of the
program, and as our program was design for people with no programming experience, it
was exceptionally important that it seem intuitive to people who have very little or no
We approached Professor Skorinko about obtaining test participants for our program,
and after obtaining the necessary permissions, began to have volunteers test our program
to determine its effectiveness. Since we could not guarantee what level of computer
science knowledge participants will already have, we have them answer our test
questions both before and after they run our program, so that we could compare their
answers and look for improvement. We also included open response questions in the
second quiz, so that they could explain where they felt the program could be improved or
what difficulties they had with the program. One limitation we unfortunately ran into due
to time constraints (as well as the difficulty of finding participants willing to participate
in a lengthy test) is that our volunteers were restricted to one hour timeslots, which is less
time with the program than our original design purposes intended.
17
3. Results and Analysis
The final program is different from the original idea. The ideal program was to be a
game that taught. The target demographic was also middle school and high school aged
children. Overall the program still accomplished the goal of educating and creating an
interest as shown in the graph below. We were able to get a total of 25 participants
which allowed for a large enough sample size to come up with some general results. It is
important to note that we were restricted to approximately 1 hour timeslots to test our
volunteer participants, so not all participants were able to run through our entire program.
18
100%
90%
80%
70%
60%
50% Before
40% After
30%
20%
10%
0%
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Analyzing the knowledge scores of the results, the average scores increased 20%
after running the program. increase between the test before and after with all the data was
20%. We decided to remove the three users who scored above an 85% on the initial test,
since they already had significant prior knowledge and our target demographic is people
who don’t already know programming. After removing these outliers the average
increase in scores was a 22% overall increase. This adjusted data is what we used to
work with for all the numbers since it better represents our target demographic.
The starting average of the scores was 48% correct in the initial test, increasing to
an average of 70% after running our program. The largest individual result we had was
someone who jumped from a score of 28% to 80%, a change of 52%. On the other hand,
several individuals only increased their average score 4% after running our program. To
19
Increase
After
Before
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
Looking at the ‘before’ and ‘after’ on the box and whisker chart a noticeable clear
increase in people’s scores. While many of the lower scores did not show a significant
increase, those who were already scoring in the top quartile showed a substantial
increase. An important point to look at is that the middle 50% of test scorers not only
increased significantly, but with less deviation in the results – the increases were fairly
reliable among people with middle range initial scores. A chart showing the actual
One of the more interesting things that we found was that there was no correlation
between the time taken to finish and the change in scores. While most people took the
20
full time that we allowed them to, many took 30 minutes or less and still increased their
The rest of the information gained came from the survey section of the test. One
issue with our results is that about 13 of the 25 participants had prior knowledge of some
kind of programming. While depending on our goals that may seem to invalidate some
of our results, it is important to keep in mind that our goal was to teach object oriented
concepts. The reason we felt object oriented concepts were an important thing to teach to
all. Subjects who claim to have prior exposure to programming but are still scoring in
middling ranges on the test have likely not been exposed to object oriented concepts.
Since only three people started off with scores above 85% it would seem like most
people’s prior knowledge of object based programming was not that extensive – a
People seemed to find each part of the program equally useful. Both RISK and
blackjack were overall ranked equally, and the usefulness of our text receiving equal
One of our secondary goals was to help increase interest in programming. We did
not receive as positive results here as we had hoped. While no one indicated decreased
interest in learning to program, one person did say they were less comfortable with
programming than when they started. About half the people felt more comfortable with
programming after going through the program, and about a third of the people were more
interested in programming. Even some of the people who had prior knowledge before
running our program claimed to have an increased interest after the program.
21
The largest problem participants brought up was the time. Half the people felt
that it took too long. There was also a number of people who felt that they needed help to
complete some of the examples. These results indicate that our program might work best
in an environment where an instructor was there to help walk people through examples,
or if the program was improved to better guide the individuals through errors. There
were a lot of positive comments in the responses, as well. Many people felt that they
really understood the sections that were covered in chapters 1 and 2. The fact that people
did not say the same for the later chapters may be a function of the limited time people
had to work with our program. Several people indicated that they felt some improvements
could be made to the user interface, often in areas that we agreed with.
computer science interest, though that particular statistic may be somewhat skewed due
22
Future Work and Conclusions
The original concept for this project was very different from the program we
eventually produced. The time constraints that were placed on the project led to us
deciding on a different vision of the teaching program. Despite being effective in the
goal of teaching programming, the program produced could be improved in several key
The first area that could show improvement is overall presentation. While a
simple text interface with a few pictures is sufficient for transmitting information to the
learner, it would be more effective with a wider variety of presentation media. More
visual learners could be reached by add more visual based textual clues such as coloring
and font changes. Adding more pictures and perhaps sound and video would serve to
reach a broader variety of learners and also provide more reinforcement for the concepts
Combined with the improved overall visual presentation, the incentive for
learning could be improved. Creating a more entertaining structure for learning could
improve learning and retention rates. This could be accomplished with methods such as
providing small games which use the learned knowledge to converting completely to a
more game-like presentation. The participants in our study were not entertained while
using our program, and while that was not the intent of the program, if it is possible to
entertain the user without sacrificing teaching utility, we believe that that would be a step
forward.
23
The original vision for the program was a much more game oriented approach,
perhaps a top down 2D puzzler with some sort of story to further engage the user. This
would be even more important to reach our target demographic of high school and middle
school age children as they tend to have a shorter attention span, especially for flat text.
Our testing was mainly done on college age students who may have a longer attention
A smaller section that could be improved upon is the program’s responses to user
input. Some of the examples we provided in the program asked for the user to input a
solution and provided a button which would check to see if the answer was correct. This
button simply copied the code they provided into a small prebuilt framework of code,
compiled it, ran it and looked for correct functionality. While this is usable and many
people were able to successfully complete these examples, a better system could be
created. Most obviously, incorrect syntax was determined and displayed by the compiler,
which is notoriously hard to understand, especially for people who are new to
programming. Some method of returning more clear messages and perhaps even hints
about how to correct the syntax error would help greatly those who make mistakes of
syntax. Mistakes of syntax are common for new programmers especially because of the
ease with which they occur. A single misplaced character or capitalization can break an
entire program and an inexperienced user would have very little chance of finding the
error. In light of this, for the user input examples to be effective, some sort of hint
system is almost required. However, in this case, due to time restrictions, we believed
that the current system would be acceptable, especially since the user input examples
were deemed auxiliary to the learning and would simply supplement the text.
24
If the user input examples were to be deemed more important, additional
problems would also arise. In its current form, the program violently thrusts the user into
the syntax of the programming language, in this case Java. While we attempted to
provide a lot of similar examples with correct syntax in the hope that the user could learn
the key points by repetition, some users in our tests were still having trouble with minor
syntactical errors. Future work in easing the user into the syntax of the language or
removing syntactical requirements as much as possible would improve the quality of the
learning experience, especially for those who are less detail oriented.
In the similar vein of user input, programs such as Scratch have a system whereby
the user can create a program and share it with the community. This is an interesting path
that could be explored with future work on this project. For example, a user could
actually create their own Blackjack game and have others play with it by sharing it with
some sort of community, either within the classroom or on a larger scale such as the
internet. One of the things that fueled my interest in programming was the ability to
easily share my creations with a large audience. Adding the ability for a user to share
their creations from within the program may help increase interest in programming and
One of the things that could definitely be improved on is the experiment itself. We
were under a time constraint and had limited people so we could not thoroughly test how
effective our program would be with our target demographic. In addition, our initial test
contained the same questions as the ending test, which could have biased the user’s
learning, since they would know what questions they needed answers to. The ideal way
to fix this would be to separate our test groups into two distinct groups of people who do
25
not know any programming. One group gets the test without using the program and the
second gets the test after using the program. We were not able to get enough subjects to
The time slots that were allotted created a large problem for many people. A good
portion of people claimed that it took too long, but this was likely a result of the nature of
the experiment. The program would be more effective if completed at a users own pace,
but people likely felt that they needed to complete the program within the hour, so felt
Generally speaking the tests allow us to make several different conclusions. First,
the experiment was not as comprehensive as would have been ideal. This was a
combination of time constraints and the fact that testing college age students is not
necessary a good indicator of how middle and high school aged children would test.
Given the fact that many of the college students testing the program felt it could have
used someone to help explain examples, it is reasonable to conclude that for a younger
age bracket, it would be necessary to have an instructor helping students run the program.
26
References
(n.d.). Retrieved 11 2008, from Greenfoot - The Java Object World: http://www.greenfoot.org
(n.d.). Retrieved 11 2008, from BlueJ - Teaching Java - Learning Java: http://www.bluej.org
Balagurusamy, E. (1998). Programming with Java: A Primer. New Delhi: Tata McGraw-Hill
Publishing Company Limited.
Deitel, H. (1999). Java How to Program. Upper Saddle River, NJ: Prentice Hall.
Palmer, G. (2003). Technical Java: Developing Scientific and Engineering Applications. Upper
Saddle River, NJ: Prentice Hall PTR.
Tyma, P. M. (1996). Java Primer Plus. Emeryville, CA: The Waite Group Inc.
27