As a teacher of some computer programming languages and database for some time now, I cannot help but notice the difficulty of students during the initial learning of programming in Java. These difficulties are related to the amount of resources, rules and details of Java itself. However, once these main difficulties are overcome, the student has an excellent working tool to demonstrate their full potential and explore the almost endless possibilities only limited by his/her creativity.
This first part of the article presents some aspects regarding the learning process in the classroom as well as the types of learning styles that must be known by the teacher and the students to help the beginner in Java programming.
Learning in the classroom
To begin the discussion about learning in the classroom is necessary first to indicate that a classroom can be a computer lab, a simple room with a black board and chalk or even a virtual environment provided by an e-learning system.
The act of programming in a classroom is like a child playing in a sandbox on the playground: the student has some freedom to make mistakes and learn from it. A clear example is the use of comments, economical and typing rules for naming identifiers. In the classroom the use of these techniques is only mentioned and recommended. However, in a professional environment it is likely that the lack of comments or the creation of a non-standard variable naming has more severe consequences.
When the student is beginning to learn programming is common for him to take some introductory course in logic or foundations of computing that addresses, among other topics, what is a bit, a byte, boolean logic and related theoretical concepts. It is also common have some familiarity with programming logic in order to develop the thought as a series of steps to solve problems, to known the difference between an algorithm and a program, to know symbols used in pseudo-code, block diagrams or other similar notation that allows the representation of the algorithmic solution of a problem. These concepts and skills are important prerequisites for students who want to start learning to program in Java regardless of platform or application type (components, web, desktop, mobile devices, etc..).
Difference between an algorithm and a program: An algorithm is formally defined as a finite sequence of steps that lead to the execution of a task. We can think of it as a recipe algorithm: a sequence of instructions that give out a specific goal. These tasks cannot be redundant or subjective and its definition should be clear and precise. A program is the implementation of an algorithm using a programming languages (Java, C #, Pascal, C, C + +, Cobol, Fortran, Visual Basic and others) that is interpreted and executed by a machine that can be a computer, a phone, a video game or other device.
Nowadays it is common to find courses that are separated in modules that combine topics such as programming logic+introduction to Java programming+Java programming for desktop applications+Java programming for web applications. Although they are focused and have lots of content, to group too much information in a short space of time is potentially detrimental to learning, especially when the course is daily-based and do not allow students to reserve enough time to digest what has been taught during the course. By the way, it is worth making an analogy with regard to study and presence in the classroom: to put a person in a classroom does not make he/she a student as well as staying in a garage does not make anyone a car. It is necessary to understand that the presence in the classroom is one thing and to be a student is another. Many learners confuse this and think that just because they are in the classroom they do not need to study. The study is something that needs to be done both inside the classroom and outside, and the latter situation is recommended for the fixation of the content seen in the classroom.
The programming, no matter which language is used, is a task that is not manual as a person who tightens screws or mount iPhones or iPods in a Chinese factory. It requires concentration and dedication. In its most basic form programming is the task of solving problems. This is very similar to what we do in math class: the teacher usually explain some theoretic topics, do some simple examples, and then give to the students exercises in a gradual and ascending order of difficulty.
This type of approach to programming means that students should learn and know when to solve their own problems, when to refer to the documentation, when to ask a colleague and when to ask for the teacher's help. The student should not be frustrated when the teacher does not solve the problem or give the solution for the student at once, because the teacher may want to see the student's ability to solve their problems alone. After all, if the teacher would solve the problem without any student effort what is the usefulness of the teacher?
Another important aspect in the classroom relates to the dependence of tools employed for programming. Currently to known how to program in Java is basically known how to solve problems with a tool. But the tools, technologies and programming languages change. Today Java may be in evidence, but tomorrow another tool may be required, for example, the Ruby language. This means that when students learn the fundamental concepts and specialize in algorithms instead of programs they will adapter better to new tools required but the industry during his/her professional life.
I've seen some situations where the students were so addicted to tools such as Eclipse, NetBeans or some framework like Struts, that they believe that everything should be solved with these tools. While it is important to achieve productivity through tools, components, frameworks and the like, these resources only help the student to move faster and can cause some dependence. This fact is evident in situations where it is required to write a Java program on paper. In these situations it is possible to see when a student has a harmful addiction to the features of a tool (such as autocomplete or intelligence) when programming that without these features he/she is lost, limited and cannot resolve the problem at hand.
To illustrate this I will describe one example that happened in a recent Java training. It is common to explain early in the course operators +, -, * and / used in Java to perform the arithmetic operations addition, subtraction, multiplication and division, respectively. Most students do not ask how these operations are implemented internally, which shows how dependent of ready features some students are. In this particular case I mentioned that there is a multiplication algorithm computationally more efficient (in some cases) than the algorithm implemented by the operator * employed by Java and many other programming languages. The difference between the students who does not freely accept was taught and the student who just wants to know how to "play" with the resources of language shows how feature dependence can be harmful.
Another important aspect in learning is to choose the means and how to study. I get many emails asking about books, textbooks, courses, universities, training centers, video lessons and other resources. However, I believe that each one learns in one way and the material chosen should take into account one's way of learning. It is clear that the study material is important, but knowing how to choose what material is recommended for each type of person is crucial for learning. There is a classification of persons with regard to the learning style: visual, auditory and kinect. Each of us has some of the features of each style, however it is important to find the dominant style in order to obtain the means of study that will increase the learning speed and produce more positive results.
Visual learning style: The student classified with a visual style of learning has the following characteristics: enjoy reading and can usually spell the words correctly. However, the learning has some difficulty to receive oral instructions and do not pay much attention to speeches or presentations when the subject is not of interest. When a person is considered a visual learner he/she prefers to view the information in tables, graphs or drawings instead of plain text during the study.
Auditory learning style: A person classified with a auditory learning style prefer oral instruction such as lectures, conversations, and face-to-face or meetings. However, this person has trouble spelling words, show dificulties to understand written or printed material when reading, and tends to repeat in a low voice the text to better understand it. During the study is common to repeat several times what is being studied, creating rhytms, mnemonics, songs and rhymes to remember the content studied.
Kinect learning style: A person who is considered Kinetic according to their learning style does not like to sit still. Hardly this kind of person sits a good period of time without getting bored or napping and generally they show their excitement by foot tapping, gesturing or doing some other body movement repeatedly. Kinetic persons learn better in practice than in theory and prefer the technique of trial and error instead of the planning. They read and talk as little as possible and only the communicates what is required to do the task at hand.
As a teacher, some time ago I discovered that there are several ways to explain the same subject. Each one of the ways has a different degree of effectiveness depending on the person who is listening, and is up to the teacher to choose the correct way to the explaining in order to achieve better results. Obviously, the final results will depend on the skill and experience of who is transmitting the knowledge and also the dedication of the learner.
However, sometimes I meet people who do not have a welcoming attitude and present attitudes that compromise conversation, worse the learning process and make it very hard to receive knowledge. These people will rarely change their minds and they will surely find it harder to exchange information and learn.
Now that educational and behavioral aspects were discussed, we can focus on specific difficulties while learning basic Java programming. The difficulties discussed in this article are separated into two groups: conceptual and technical because these two groups reflect theoretical and practical aspects of programming. Also discussed here are some of the most common errors encountered by those who are programming. The goal is not to present an exhaustive list of difficulties and mistakes, but show only a few points in which the most novice users have difficulty when they are learning how to work with Java.
This article discussed some aspects related to the difficulty of beginners in Java programming. The focus of this article was to present what are the difficulties encountered by beginners as well as some solutions to facilitate the learning of Java programming.
This first part focuses in some aspects of the learning environment found in programming classes that teach Java, either virtual classroom of physical ones. We also talked about the students' responsibilities and learning styles.
In part two, see how overcoming conceptual difficulties