Java, and Python were the most frequently used FPLs,
with Python gaining more and more popularity (see,
for example, (Leping et al., 2009)). This latter trend
has been confirmed in the last three years, as wit-
nessed, for example, in (Guo, 2014), where the top
39 computer science departments (as ranked by U.S.
News in 2014) have been considered, and, for each
department, the CS0 and CS1 courses have been ana-
lyzed in order to determine which language was used.
In particular, 8 (respectively, 5) of the top 10 depart-
ments, and 27 (respectively, 22) of the top 39 de-
partments teach Python (respectively, Java) in intro-
ductory computer science courses. Python, Java, and
C++ turn out to be also among the most “lucrative”
programming languages, as stated in (Nisen, 2014),
where the author analyses the data compiled (start-
ing from thousands of American job ads) by Burning
Glass with Brookings Institution economist Jonathan
Rothwell, in order to determine which language might
get the worker the best salary.
A framework to evaluate several existing pro-
gramming languages, for their suitability as an appro-
priate FPL, has been proposed in (Farooq et al., 2014).
By applying this framework to Ada, C, C++, C#, For-
tran, Java, Modula-2, Pascal, and Python, the authors
show that Java obtains the overall highest score and,
thus, conclude that it is the most suitable program-
ming language (followed by Python and Ada). Even
by considering the “demand in industry” and “easy
transition” parameter more important than the other
parameters, Java turns out to be the language with
highest score (followed by Python and C#).
As observed in (Koulouri et al., 2014), even if Java
has been widely used as a FPL, its complexity “may
be overwhelming for learners”. In particular, one of
the main complexity sources of this language is the
fact that it is “heavily coupled with object-oriented
concepts”, thus making more difficult to implement
an object-later strategy. A typical example of such
complexity is the implementation of the well-known
“hello, world” program, which would require, in ad-
dition to the print statement, the definition of a class,
containing a main method (with its “strange” syntax,
both in terms of modifiers and in terms of parame-
ters).
Several tools have been proposed in order to deal
with the complexity of Java for novice programmers
(see Section 4). Some of them were designed in or-
der to teach basic programming concepts (such as
primitive data types, arrays, control structures, meth-
ods and recursion), before exposing the students to
classes and objects. An example of such tools is
JOSH (Diehl, 2003), which is a Java interpreter de-
signed to ease teaching Java to beginners. With JOSH
programmers can interactively evaluate simple ex-
pressions, execute program statements, define vari-
ables and methods, and invoke methods. Inspired by
JOSH, which was based on a command line interac-
tion, the Java-- application (see Section 2) has been
successively developed and used at the University of
Florence, along with an Italian text book (Crescenzi,
2015). This application allows the user to perform the
same tasks of JOSH through a simple Graphical User
Interface (GUI), which contains three tabbed panels
that allow the user to edit the code, see any mis-
takes that the Java compiler detected, and look at the
standard output (Cecchi et al., 2003). Successively,
Java-- has been extended with a self-assessment mod-
ule, which allows the user to implement one or more
methods solving simple problems, immediately veri-
fying the correctness of the proposed solution (Bettini
et al., 2004; Crescenzi et al., 2006).
As already said, the development of JOSH and of
Java-- referred to the “structured programming before
object oriented programming” teaching paradigm, as
described in (Gibbons, 1998). According to this
paradigm the first part of a CS1 course should be
taught in order to develop skills with the usual low-
level procedural mechanism, that will allow students
to gradually build up programs from primitive types
and basic control structures. Only at a later stage stu-
dents should implement object features and test ob-
jects, and, thus, be exposed to the conceptual load re-
lated to the new abstract data type issues. Moreover,
as stated in (Lewis, 2000), it is worth observing that
the object oriented approach does not abandon typi-
cal concepts of a procedural approach: indeed, it aug-
ments and strengthens them, since implementing an
object almost always requires a good knowledge of
structured programming. Finally, not having objects
in a language does not necessarily decrease its edu-
cational power and usability; for example, Process-
ing (Reas and Fry, 2014), a programming language
and a development environment initially created to
teach programming, allows the programmer to eas-
ily do professional computer graphic and animations
without object-oriented constructs.
Even though Java-- allows the programmer to in-
teract with a GUI, that includes some features, such as
syntax coloring, typical of an Integrated Development
Environment (in short, IDE), this application can-
not be considered an IDE, since it lacks many other
features, such as compiler and debugger integration,
build automation, code completion, and easy naviga-
tion to definitions. On the other hand, all existing Java
IDEs (such as Eclipse and Netbeans) require the pro-
grammer to deal, since the very beginning, with the
object-oriented programming paradigm. That is why,
ICSOFT-PT2015-10thInternationalConferenceonSoftwareParadigmTrends
32