ArticlePDF Available

A qualitative study of major programming languages: teaching programming languages to computer science students

Authors:

Figures

Content may be subject to copyright.
* The material presented by the author does not necessarily portray the viewpoint of the editors
and the management of the Institute of Business & Technology (IBT)
© IBT-JICT is published by the Institute of Business and Technology (IBT).
Main Ibrahim Hydri Road, Korangi Creek, Karachi-75190, Pakistan.
A QUALITATIVE STUDY OF MAJOR
PROGRAMMING LANGUAGES: TEACHING
PROGRAMMING LANGUAGES TO COMPUTER
SCIENCE STUDENTS
1 Ghazala Shafi Sheikh : ghazala.shafi@indus.edu.pk
2 Noman Islam : noman.islam@iuk.edu.pk
Ghazala Shafi Sheikh1
Department of Computer Science, Indus University
Noman Islam2
Department of Computer Science, Iqra University, Karachi
Key Words: Programming Language, Teaching, Education, Computer
Science, Comparative Study, Introductory Programming Language.
INSPEC Classification : A9555L, A9630, B5270
ABSTRACT
Programming is a fundamental course that is taught to every computer
science during their initial semesters. The course introduces the students
to basics operations and architecture of computers, and also polishes the
problem solving skills of students. Besides these advantages, programming
language serves as a fundamental tool for analyzing, studying and
understanding advanced concepts of computer science that the students
are taught in later semesters of their undergraduate studies. Therefore,
the selection of a programming language for teaching to computer science
students is extremely important. During the past few years, there have been
numerous programming languages evolved such as COBOL, FORTRAN,
Algol, Miranda, Oberon, Ada and Java etc. With the passage of time, some
these languages have lost prominence while several new languages have
emerged. Therefore, the selection of a programming language for teaching
has always remained an important research question for academicians.
In this paper, a comparative analysis of contemporary programming
languages is performed. After a careful examination of current curriculum
and market demands, we have selected C/C++, C#, Java, Pascal, GW
Basic and JavaScript for comparison. The objective of this study is to
determine which programming language languages should be taught to
computer science students at introductory level. The paper analyzes the
selected programming languages based on different parameters and
provides recommendations on the selection of programming language.
Journal of Information & Communication Technology
Vol. 10, No. 1, (Spring 2016) 24-34
1. INTRODUCTION
Which programming languages should be taught to computer science students? This
question is raised often during the development of curriculum for computer science
and software engineering students. It has been found that programming languages have
the highest drop rate (Robin’s et.al, 2003). According to various studies, students have
problems in comprehending what is happening in memory, instruction cycle, and overall
picture of the execution of program (MILNE, I. and G. ROWE, 2002). As computer
science is a rapidly evolving field, the answer to this question varies with the passage
of time. In this paper, an updated analysis of major programming languages of recent
time has been performed. The selection of the programming language is based on
surveys such as of various introductory level programming courses taught at college/
undergraduate level (Davies, et.al, 2012). This paper compares C/C++, C#; Java, Pascal,
GW Basic and JavaScript based on different criteria and provide recommendations
(Schulte, C. and J. Bennedsen, 2006).
2. LITERATURE REVIEW
In literature, several studies have been reported that discussed merits and demerits
of various programming languages and the issues involved in selection of a programming
language for teaching. Schulte and Bennedsen gathered teacher’s opinion about what
topics should be taught in programming courses (Schulte, C. and J. Bennedsen, 2006).
Milne and Rowe analyzed what are the topics in introductory level courses difficult to
be comprehended by undergraduate students. Davies et al. provided a nationwide survey
of various languages and techniques being taught in introductory level programming
courses. According to the authors, Java is the most widely used language for teaching
programming. Mason et al. (Mason et.al, 2012) analyzed different introductory level
programming courses in Australian Universities to determine the trends in programming
language, Integrated Development Environment (IDE), paradigm and topics coverage.
Robins et al. provided a review on programming languages and identify topics related
to teaching novice users (Sebesta, et.al, 2014).
In various studies, different programming languages have been analyzed based on
their features for novice programmers. A brief discussion on various programming
languages of choices for beginners has been provided by (Lisa Eadicicco, 2014). An
overview of various programming languages of choices for modern days has been
provided in (Rebecca Hiscott, 2014). In some of the studies, specialized tools have
been developed for teaching programming to computer science students in more effective
manner. In a tool called SAUCE has been developed for students and educators to learn
parallel programming (Moritz Schlarb, et.al, 2015). A list of various tools to teaching
programming to kids has been provided in. According to, the prevalence of mobile
gadgets demands that programming should be taught directly on mobile devices. A tool
called Touch Develop has been developed realizing this need (Nikolai Tillmann et.al,
2012).
It has been concluded from literature review that research has not analyzed currently
popular programming languages for their aptness for introductory programming teaching.
Ghazala Shafi Sheikh, Noman Islam
25
Vol. 10, No. 1, (Spring 2016)
languages based primarily on their features as well as the support they provided to be
used in teaching various concepts of computer science (Rebecca Hiscott, 2014).
2.1 Criteria for Comparison
The criteria for comparison are based on the response of various computer science
teachers to adopt a particular language for teaching. We mainly adopt the criteria
provided in [6] and [5]. Following criteria have been considered for evaluation of
language:
Simplicity: In order to be taught as introductory level course, a language should be
very simple and closer to natural language. A language closer to human language is
readable and easier to be understood by a novice user.
Writability: A language should provide a comprehensive set of constructs and APIs
to be useful for general purpose as well as specific programming tasks.
Reliability: A language should have good reliability. In particular support for pointers,
union and aliasing etc. should be discouraged. Additionally, support for assertions, error
checking and exception handling should be provided by the language such that abnormal
conditions of the program are properly taken care of by the programmers.
Appropriate Data Structures: A language should have support for variety of primitive
data types and also have the provision to construct user defined data types as needed.
Availability/ Cost to students: The cost of development platform should be low.
Ideally, development tools, compilers, interpreters and Integrated Development
Environment (IDEs) should be freely available as open source tools.
Market demand: It is recommended that the language being taught to computer science
student should have high demand in market. There should be appropriate jobs available
for developers.
Community Support: The language should have documentation, tutorials, and
community’s support and developer forums widely available.
OS/Machine Limitations: The language should have minimum platform requirements.
In particular, it should be easily able to run on common operating system.
Extensions/Libraries available: The language should have extensions available in
abundance for specific tasks such as drivers for hardware interfacing, database connectivity
APIs, parsers, GUI libraries etc.
Coverage: The language should have sufficient coverage to be useful to teach computer
science concepts. These topics include: object oriented programming, multithreading,
I/O, mobile computing, databases, system level programming etc.
26 Journal of Information & Communication Technology
A Qualitative Study of Major Programming Languages: Teaching Programming Languages to Computer
Science Students
Ghazala Shafi Sheikh, Noman Islam
27
Vol. 10, No. 1, (Spring 2016)
3. A COMPARISON OF MAJOR PROGRAMMING LANGUAGES
This section compares the selected programming languages based on the criteria outlined
above.
A language should have a simple, easy to use syntax that is closer to natural language.
Pascal and GW Basic have a very simple syntax. It uses self-explanatory keywords
such as begin, end, to write blocks of code. JavaScript, C++, C# and Java has almost
similar syntaxes that have now been widely accepted for general purpose programming
language. Figure 1 compares sample Hello Word code for Pascal, GW Basic and Java.
Program Hello Word;
Begin
Write ('Hello World.');
End.
a. Pascal
10 print "Hello World"
Run
b. GW Basic
public class Test {
public static void main(String args[]) {
System.out.println(“Hello World”);
}
}
c. Java
Figure 1: Sample programs in Pascal, GW Basic and Java
3.1 Simplicity
28 Journal of Information & Communication Technology
A Qualitative Study of Major Programming Languages: Teaching Programming Languages to Computer
Science Students
The writability of a language stands for the availability of different types of constructs
to easily write different types of programs. All of the languages provide basic constructs
for looping, conditional statements, procedures etc. However, GW Basic, Pascal, C and
JavaScript don’t provide adequate support for data types. In C, for instance, it is very
difficult to operate on strings. Similarly, support for Boolean data type is not available.
User defined data types can be created in C language using struct, typ def, enumerations
etc. In JavaScript, user defined data types can be created using objects. Java and C#
provide good support for data types such as integer, long, float, double, character,
Boolean and String data types.
The availability of pointers in Pascal and C impacts its reliability as this can create
dangling references. C# also allows the use of pointers but in unsafe region. An unsafe
region provides the flexibility to the program to perform various restricted operations,
put it puts additional burden on programmer to handle various low level issues (such
as memory leakages, dangling pointers and type safety). C#, Java and JavaScript support
exception handling. Figure 2 shows exception handling code for Java.
try {
FileOutputStream fos = new FileOutputStream (“C:/data.txt”);
fos.write(“Sample data”);
}catch (IOException e) {
System.out.println(“IO Exception occurred”);
}
Figure 2: Exception handling in Java
try { myFun();
}
catch (e) {
document.writeln(“Exception occurred”);
}
Figure 3: Exception handling in JavaScript
However, JavaScript is not type safe language. The same can be said for language.
C language doesn’t provide support for exception handling; however, assertions can
be used. In addition, the global variable errno can be used to track the error. Figure 4
shows how error no can be used in C language. The use of go to in GW Basic also adds
to unreliability in program.
3.3 Reliability
3.2 Writability
#include “errno.h”
#include “string.h”
int o = read(ffd, buffer, 1);
if(o == -1) {
printf("Error! %s\n", strerror(errno));
}
Java provides eight basic data types i.e. byte, short, int, long, char, float, double and
Boolean. In addition, there is support for String and long range integers and real numbers
in the form of available classes. User defined data types can be created using classes.
C language has support for int, long, float, char and double, but doesn’t provide Boolean
data type. String variables are manipulated using character array or character pointer
where the end of the string is delimited by null character (‘\0’). User defined data types
can be created using structure, type def, enumerations etc. C# provides support for
various data types such as byte, short, and integer, long, single and double precision
real numbers, decimal, Boolean, date, char and string. User defined data types can be
created using structure, enumeration and classes. Pascal has support for string, integer,
and real, Boolean and character data types. User defined data types in Pascal can be
created using enumerations, sub-ranges, records and set. GW Basic provides support
for string, integer, and single precision and double precision real numbers. In JavaScript,
variables are not explicitly declared to be of any type, but their types are determined
based on the value they hold. A variable can hold numeric, string or Boolean value.
Java Development Kit is available free of cost. Different integrated development
environment such as Eclipse and Net Beans are available free of cost. However, some
development toolkits such as J-Builder are available with licensing fee. The IDE and
compiler for C, Pascal and GW Basic are available free of cost. The most widely used
development platform for C# is Visual Studio which is available free of cost for
developers. The .Net framework required to run C# program is also available free of
cost. JavaScript can be easily run on any standard browser. The most widely environment
used for development for JavaScript is Web Storm which is available with some licensing
fee.
3.6 Market Demand
According to a survey by Business Insider, Java is amongst the highly paid jobs in
the market. JavaScript developer gets less salary than Java but more than C while C#
is at the bottom of the developer’s salary. According to another survey, Java has the
Ghazala Shafi Sheikh, Noman Islam
29
Vol. 10, No. 1, (Spring 2016)
Figure 4: Using errno to handle errors in C language
3.4 Data Structures
3.5 Availability/ Cost to Students
maximum job market followed by JavaScript and C#. However, we don’t find any
details about job market for GW Basic and Pascal.
3.7 Community Support
The community support for each of the above language is available. Comprehensive
documentation for Java is available in the form of java docs. The community support
for Java is available at. Similarly support for C# is available at. JavaScript is an emerging
language and support for AJAX, j-Query, Angular Js is available at different forums
such as. Even though, support for Pascal, GW Basic and C language is available in the
forms of books, online courses, and some forums, but their support is not comprehensive.
3.8 OS/Machine Limitations
The IDE for GW Basic, C and Pascal can easily be run with low configuration
requirements such as on Pentium IV. JavaScript doesn’t require any specific platform
to run as it can be easily run on a browser. Java Development Kit (JDK) can be run on
small configuration, however, its IDE requires Core 2 Duo machine to run. The latest
version of Microsoft Visual Studio requires Windows 8 to run.
3.9 Extensions/ Library available
The extensions for Java and C# are easily available for general purpose task such as
web programming, Bluetooth communication, hardware interfacing and Graphical User
Interface (GUI). This includes Servlets, Java Server Pages (JSP), Asynchronous
JavaScript and XML (AJAX) toolkit etc. JavaScript is an emerging language and a
large number of extensions for it is available such as Angular-JS, Expres-Js, Socket.IO,
Node-Js, D3, Fire Base and Web-GL etc. C language has been used for many years;
hence, extensions for it are readily available such as OpenGL, NS2 extensions etc.
3.10 Coverage
For a primary language to be taught to students, it is essential that it extensively
covers various notions such as OOP, multithreading, databases, networking and mobile
computing etc. An introductory programming language once learnt by student can be
used primarily for demonstrating these advanced notions of computer science. This
section discusses how the major programming languages provide support for these
concepts.
3.10.1 Object Oriented Programming
The languages like C, GW Basic and Pascal don’t provide support for object oriented
programming. C++, an extension of C language can be used for object oriented
programming. Both Java and C# are 100% object oriented programming languages.
It has support for implementing concepts such as encapsulation, inheritance,
polymorphism, aggregation and composition. JavaScript can be regarded as an object
A Qualitative Study of Major Programming Languages: Teaching Programming Languages to Computer
Science Students
30 Journal of Information & Communication Technology
based programming language as it has support for basic concepts of object oriented
programming such as classes, association, and inheritance. However, concepts such as
encapsulation and polymorphism are not supported. Inheritance can be implemented
using prototypes.
var student = {
id: 2,
calmarks: function(b){
return marks;
}
};
var graduateStudent = Object.create(student);
p.dissertationTitle = “Data Mining”;
Figure 5: Inheritance in JavaScript
3.11 Databases
The concepts of database can be implemented in C# and Java using ADO .NET and
JDBC. In addition, database connectivity can be provided for document databases such
as MongoDB. JavaScript can be used to connect to any type of databases such as
MySQL, SQL Server, MongoDB etc. In C language, database connection can be made
using ODBC API. Interfacing with databases is a very trivial task in GW Basic and
Pascal language.
3.12 Operating System
C, C# and Java provide support for implementing different operating system concepts
such as multithreading, I/O, monitor, semaphores, memory management and process
management. In JavaScript, the concept of threads is slightly different. Worker threads
are used to implement multithreading. Figure 6 shows the example. File I/O can be
performed but in a sandboxed environment. Performing multithreading in Pascal and
GW Basic is not possible.
var w = new Worker("thread2.js");
w.postMessage(“Hello”);
w.terminate();
Figure 6: Multithreading in JavaScript using Worker threads
31
Vol. 10, No. 1, (Spring 2016)
Ghazala Shafi Sheikh, Noman Islam
A Qualitative Study of Major Programming Languages: Teaching Programming Languages to Computer
Science Students
3.13 Low Level Programming
In Pascal, C language low level programming task can be easily performed such as
using interrupts, process management, inter-process communication, protected operating
system calls etc. In C#, these operations can be performed in unsafe region. In Java,
system level programming can be done using native methods. GW Basic can interface
with assembly language by using USR function and CALL statement.
uses Dos;
procedure BORDER (color : byte);
var regs : registers;
begin
FillChar (regs, SizeOf(regs), 0);
regs.ax := $0B00;
regs.bh := $00;
regs.bl := color;
Intr ($10, regs);
end;
Figure 7: Using interrupts in Pascal
3.14 Network programming
Pascal, C, Java and C# provide support for network programming using Transmission
Control Protocol (TCP) and User Datagram Protocol (UDP) sockets. Figure 8 shows
an example of TCP sockets in Java. In JavaScript, socket communication can be
performed using Socket.IO API. Socket programming in Pascal and GW Basic is not
a trivial task. Import java.net.*;
try {
Socket s = new Socket(host,port);
OutputStream os = s.getOutputStream();
os.write(“Data”);
os.
close();
}catch(Exception e) {
System.out.println(“Error”);
}
Figure 8: Socket programming in Java
32 Journal of Information & Communication Technology
3.15 Web programming
In Java, web programming can be done using Servlets, Java Server Pagse (JSP),
Struts and Java Server Faces (JSF). In C#, Active Server Pages (ASP) .NET can be
used for web programming. JavaScript can be used for both client side and server side
programming. At server side, this can be done using Express-Js. At client side different
APIs such as j-Query, Angular-Js, Bootstrap etc. In C and Pascal language, web
programming can be done using Common Gateway Interface (CGI) programming.
Having said that, it should be noted that programming in CGI is a very cumbersome
job and that makes web programming in C and Pascal very difficult job.
3.16 Mobile Computing
Java provides support for mobile computing using Android and J2ME etc. In C#,
XARMIN can be used for cross platform mobile application development. In JavaScript,
mobile application development can be done using Phone Gap API or Win Js platform.
Pascal and GW Basic is not popular for mobile application development.
4. RESULTS & DISCUSSIONS
Based on the above discussion, it can be concluded that Java is the best general
purpose programming languages to be used for teaching computer science concepts.
It has good writability, reliability, market demand and can be used to teach any computer
science concept such as operating system, mobile computing etc. Besides Java, C# can
also be used to teach computer programming. Languages such as Pascal and GW Basic
had been used widely to teach introductory level course, but are no longer in demand
in market, nor can they be used to implement modern concepts of computer science
such as delegates, design patterns and object oriented programming etc.
CONCLUSION
In this paper, an analysis of major programming languages of computer science is
done. The paper compares the selected languages based on different factors such as
their readability, writability, support, market demand and coverage. It has been concluded
that Java is the most appropriate language to be used for teaching computer science
concepts.
ACKNOWLEDGMENT
The authors would like to thank Iqra University, Karachi and Indus University, Karachi
for their support in the completion of this research work.
33
Vol. 10, No. 1, (Spring 2016)
Ghazala Shafi Sheikh, Noman Islam
A Qualitative Study of Major Programming Languages: Teaching Programming Languages to Computer
Science Students
REFERENCES
Robins, A., J. Rountree, and N. Rooftree . (2003) Learning and Teaching Programming:
A Review and Discussion. Computer Science Education, vol. 13(2), Springer,
p. 137-172.
MILNE, I. and G. ROWE.( 2002) Difficulties in Learning and Teaching Programming—
Views of Students and Tutors. Education and Information Technologies, vol.
7(1), China, p. 55-60.
Davies, S., J.A. PolackWahl, and K. Anewalt . (2011) A Snapshot of Current Practices
in Teaching the Introductory Programming Sequence.beligin, pp.23.
Schulte, C. and J. Bennedsen. (2009), What do teachers teach in introductory
programming?, IEEE conference proceeing,pp.58-65.
Mason, R., G. Cooper, and M.D. Raadt.(2012) Trends in Introductory Programming
Courses in Australian Universities – Languages, Environments and Pedagogy.
in Proceedings of the Fourteenth Australasian Computing Education Conference
(ACE2012), Melbourne, Australia.pp.89.
Sebesta, R.W. (2014) Concepts of Programming Languages, USA, pp.60.
Moritz Schlarb , Christian Hundt and Bertil Schmidt.(2015) SAUCE: A Web-
Based Automated Assessment Tool for Teaching Parallel Programming”, Euro-
Par 2015: Parallel Processing Workshops.
Nikolai Tillmann, Michal Moskal, Jonathan de Halleux, Manuel Fahndrich, Judith
Bishop, Arjmand Samuel, Tao Xie, July 3.(2012) The Future of Teaching
Programming is on Mobile Devices, ITiCSE12 , Haifa, Israel,pp.25.
Lisa Eadicicco. Dec 6 (2014) The Best Programming Languages Every Beginner
Should Learn, Business Insider, pp.82-85.
Rebecca Hiscott. Jan 21(2014) Programming Languages You Should Learn Right
Now, Mashable, USA, pp.57.
34 Journal of Information & Communication Technology
... A language control structure that allows software engineers to express the program's behavior when an exceptional (surprising) event occurs is known as an exemption handling system [31]. When an exception occurs, the program stops preparing and ends, and the framework makes a mistake. ...
Article
Full-text available
Exceptional handling is a mechanism provide by programming languages to handle some unexpected scenarios/ errors during the program compilation and continue to precede program execution. Some semantic errors which can't be handled by exception handling produce inappropriate results after program compilation. However, in order to deal with this issue and obtain accurate results, programmers must develop a code to reduce error ration in likewise scenarios. In this paper we introduce an extended exceptional handling framework developed in Java programming language and define the flow of the developed model. Five classes namely Plus, Minus, Division, Multiplication and Remainder are addedin the extended model to handle respective arithmetic exceptions with eight data types such as Byte, Short, Int, Long, Float, Double, Char and String. For experimentation, the developed package i.e. ZAB is imported on two software programs. To measure the complexity of the developed package, we use Cyclomatic Complexity (CC) method and calculated it for all the five classes. The calculation show that CC for Class Plus, Minus and Multi is V(G)=6.ForClassDivision and Reminder,V(G)=2 and respectively. Comparative analysis is done on the calculated results of each class and acquired output of the CC during experimentation show less complexity of Division Class. The Compatibility of Package ZAB isolates and handles semantic errors to reduce compile/run time errors .commotion
... Amongst several miscellaneous studies, [13] has identified major issues of students in learning programming. [14] identified the first programming language to be used for used for students and the attributes of various programming languages. Based on the literature review, it has been found that very few studies have analyzed the MOOCs. ...
Article
Full-text available
Users and learners nowadays are seeking their education on online platforms such as Open edX, Udemy, Udacity, and Coursera. However, online learners are faced with cumbersome tasks and various challenges to search for the required courses matching their individual goals, knowledge, and interest. With the huge amount of data and material available over the internet for MOOCs, users often face the difficulty of making the right decision to choose the right course that perfectly defines their interest and fulfills their learning requirements. Hence, the lack of targeted recommendations for MOOCs can drive users to choose irrelevant MOOCs. Recommender System (RS) plays a crucial role in assisting learners to find appropriate MOOCs to improve learners’ engagements and their satisfaction/completion rates on the courses that satisfy their learning requirements. Basically, the aim is to visualize the student's areas of interest, which should not differ from the course recommendation and the overall structure of the course.
... In computer science, there are advanced concepts that need to be understood which come from the prominent role that programming language plays. Therefore, it is very important to ensure programming language is one of the key courses for computer science scholars as this will pave more ways for technological advancement [5]. ...
Preprint
Full-text available
In the decade of Internet of Thing, Machine Learning and Big data we are ready to accumulate lot of sensors and intelligent devices for making our real world environment more accessible, open, transparent and its records are manageable for future purpose i.e. either just for fetching or analyze for future perspective. In contrast, an institutional campus is also ready for fully automation where all the major participants like students, academician, management and others, should be observed as an entity with their different attributes. Meanwhile those campuses are not functioning in isolation, it depends and Interco-related to some other organizations and modules also, so that they have to synchronized and update their data accordingly. Here the whole scenario views from computer network perspective, where all the participating members observed like node and in whole it creates wireless mobile ad-hoc network i.e. MANET. First will understand the campus functioning in short then look at flow of data in this system, then observes the components and their responsibility to categorized and placing them in MANET based architecture. Finally we will select and design algorithm for the whole digital campus system. This is a concept of implementing intelligent technologies to transform any existing environment into smart, here not only institutional campus but many other also can be upgraded or transform into smart like villages, cities, sports or working flow like census, PDS, Disaster Management system etc.
Article
Full-text available
Traditionally, construction managers were considered more experienced in project management than off-site production management, although the latter is gaining importance with the renaissance of modular construction worldwide. Various Internet of Things (IoT)-enabled Building Information Modelling (BIM) platforms have been developed to facilitate production management by providing better information visibility, traceability, and a more collaborative working environment. Nevertheless, by and large, existing platforms suffer from two shortcomings: (a) the ‘single point of failure’ problem of IoT networks and (b) how to guarantee the provenance of BIM modifications from multi-sources. This research aims to develop a blockchain-enabled IoT-BIM platform (BIBP) for off-site production management in modular construction (OPM-MC) that can overcome the shortcomings. A design science research method is adopted to develop a three-layer BIBP system architecture. The system architecture is implemented and then compared with the existing IoT-enabled BIM platform. It was found that BIBP can avoid a single point of failure in IoT networks and ensure the provenance of BIM modifications with reduced storage costs in OPM-MC. The system architecture developed in our study can help the industry advance beyond the rhetoric to develop practical blockchain-enabled IoT-BIM applications. Future works are recommended to fine-tune the platform and test and evaluate it in various scenarios.
Article
Full-text available
From paper to computers, the way that we have been writing down thoughts and performing symbolic computations has been constantly evolving. Teaching methods closely follow this trend, leveraging existing technology to make teaching more effective and preparing students for their later careers with the available technology. Right now, in 2012, we are in the middle of another technology shift: instead of using PCs and laptops, mobile devices are becoming more prevalent for most everyday computing tasks. In fact, never before in human history were incredibly powerful and versatile computing devices such as smartphones available and adopted so broadly. We propose that computer programming, and thus the teaching of programming, can and should be done directly on the mobile devices themselves, without the need for a separate PC or laptop to write code. Programming on smartphones that we carry around with us at all times means instant gratification for students, as they can show their games and applications to their friends, and it means that students can do their homework or additional practicing at all times. We describe TouchDevelop, a novel mobile programming environment, and call out challenges that need to be overcome and opportunities that it creates.
Conference Paper
Full-text available
This paper reports the results of a study of 44 introductory programming courses in 28 Australian universities, conducted in the latter months of 2010. Results of this study are compared with two censuses previously conducted during 2001 and 2003, to identify trends in student numbers, programming language and environment/tool use and the reasons for choice of these, paradigms taught, instructor experience, text used and time spent on problem solving strategies in lectures and tutorials. Measures of mental effort experienced during the solution of novice programming problems were also examined.
Conference Paper
Many curricula for undergraduate studies in computer science provide a lecture on the fundamentals of parallel programming like multi-threaded computation on shared memory architectures using POSIX threads or OpenMP. The complex structure of parallel programs can be challenging, especially for inexperienced students. Thus, there is a latent need for software supporting the learning process. Subsequent lectures may cover more advanced parallelization techniques such as the Message Passing Interface (MPI) and the Compute Unified Device Architecture (CUDA) languages. Unfortunately, the majority of students cannot easily access MPI clusters or modern hardware accelerators in order to effectively develop parallel programming skills. To overcome this, we present an interactive tool to aid both educators and students in the learning process. This paper describes the “System for AUtomated Code Evaluation” (SAUCE), a web-based open source (available under the AGPL-3.0 license at https:// github. com/ moschlar/ SAUCE) application for programming assignment evaluation and elaborates on its features specifically designed for the teaching of parallel programming. This tool enables educators to provide the required programming environments with a low barrier to entry since it is usable with just a web browser. SAUCE allows for immediate feedback and thus can be used interactively in class room settings.
Article
In this article, we try to create a general, worldwide picture of teachers' opinion about what should be taught in introductory programming courses. We focus on the debate about restructuring CS1. The study explores what teachers believe is important to teach, what they actually teach, and what students find most difficult (according to their teachers). what is the general approach to teaching (programming language, IDE, object-orientation or not, type of institution), what topics are taught, and what role do the areas that novices find difficult play in introductory programming course.In addition, we explore how these specific topics fit into a larger conceptual classification: Earlier studies of topics taught in introductory programming focuses only on one dimension of a given topic - either relevance or difficulty. In this study, we evaluate each topic regarding three dimensions: relevance, difficulty and the cognitive level (according to Bloom's taxonomy). This allows giving a more faceted picture of teachers' beliefs in teaching introductory programming courses.Furthermore, we assess the role of findings from the eighties in today's teaching: The need to understand five different areas of programming. Are these areas still in focus; are they relevant, and what is the connection to the topics taught - especially object-oriented (OO) topics?A special focus is given on students' understanding of the execution of a (OO) program; one of the five areas. In order to connect the ideas of a notional machine to OO concepts we present a four levelled competence hierarchy for object-interaction.Teachers assessed the area 'understanding the notional machine' as least important. Despite this, they assessed the herachy of object-interaction - meant as basis for a notional machine for the OO-paradigm - as an important aspect.Although teachers stress the importance of teaching general abstract structures, teaching seems to focus on concrete programming issues. A conclusion for further research on teaching OO programming and concerning the hierarchy of object interaction is that teaching is not only a matter of topics, but also a matter of perspective on teaching the topics.
Article
We have conducted a web-based questionnaire on the various concepts and topics of object-oriented programming that students on introductory courses found most difficult to cope with. A statistical analysis of our results shows that those topics that rely on a clear understanding of pointers and memory-related concepts (such as copy constructors and virtual functions) prove to be the most difficult. In other words, we believe these concepts are only hard because of the student's inability to comprehend what is happening to their program in memory, as they are incapable of creating a clear mental model of its execution. These results would suggest that a clearer approach to teaching these topics would be beneficial to students. We are currently working on a visualization-based approach to address these issues.
Article
In this paper we review the literature relating to the psychological/educational study of programming. We identify general trends comparing novice and expert programmers, programming knowledge and strategies, program generation and comprehension, and objectoriented versus procedural programming. (We do not cover research relating specifically to other programming styles.) The main focus of the review is on novice programming and topics relating to novice teaching and learning. Various problems experienced by novices are identified, including issues relating to basic program design, to algorithmic complexity in certain language features, to the ‘‘fragility’ ’ of novice knowledge, and so on. We summarise this material and suggest some practical implications for teachers. We suggest that a key issue that emerges is the distinction between effective and ineffective novices. What characterises effective novices? Is it possible to identify the specific deficits of ineffective novices and help them to become effective learners of programming? 1.
Programming Languages You Should Learn Right Now
  • Rebecca Hiscott
Rebecca Hiscott. Jan 21(2014) Programming Languages You Should Learn Right Now, Mashable, USA, pp.57.
The Best Programming Languages Every Beginner Should Learn, Business Insider
  • Lisa Eadicicco
Lisa Eadicicco. Dec 6 (2014) The Best Programming Languages Every Beginner Should Learn, Business Insider, pp.82-85.
The Best Programming Languages Every Beginner Should Learn
  • Lisa Eadicicco
Lisa Eadicicco. Dec 6 (2014) The Best Programming Languages Every Beginner Should Learn, Business Insider, pp.82-85.