• No results found

Summary of Section 2

2.3.1 The components of programming courses

Conventional format for teaching programming

Most introductory programming courses are taught by a format of weekly lectures accompanied by laboratory sessions (Barker et al. 2002; Kolling & Barnes 2008; Kolling & Barnes 2004). Programming concepts and language constructs are typically presented in the lecture (Kolling & Barnes 2004: 1) and the students then work on related exercises and assignments during accompanying laboratory sessions.

Whilst most computer science departments continue to deliver introductory courses in this format, there are other components of course content, supporting materials, teaching style and assessment which do vary from institution to institution.

Class size

Lectures are typically delivered to all students at once for larger classes (typically 100 students or more). Some institutions do divide the cohort into smaller classes and assign tutors to teach each group and supervise their laboratory sessions. Interestingly, Bennedsen and Caspersen (2007: 34) discovered that small classes (less than 30 students) tended to have a higher pass rate than larger classes. The average pass rate for smaller classes (representing 23% of the total number of classes surveyed) was found to be 82% whereas large classes (77%) had an average pass rate of 69%.

Curriculum design: order concepts are taught

Introductory programming course curriculums have evolved considerably over time. The recent focus on employability has increased communication between universities and industry to inform course content, programming styles, languages and popular programming techniques (Shadbolt 2016). Nevertheless, there is a lack of consensus amongst employers and academics regarding which topics should be included in the curriculum (Hertz 2010; Hertz & Ford 2013; Shadbolt 2016: 5). Generally, instructors make the final decision and tend to allocate time on each topic based on student performance (Hertz & Ford 2013).

2-51 The order in which concepts are taught is commonly discussed in literature and particularly the placement of object-oriented concepts. Traditionally, procedural and functional curriculums would adopt a bottom-up approach (Meyer 2003; Pedroni & Mayer 2006) for teaching concepts such as variables and control structures first before data structures, recursion and functions. However, some educators (Kolling & Barnes 2004) started teaching object-oriented concepts first (top-down

approach), because the object paradigm maps closely to real entities in industry and the workplace. Despite an ongoing debate, Bennedsen and Caspersen (2007: 33) noticed that there was little variation between the student pass rate for objects-first courses and imperative-first courses, amongst those that they surveyed.

Programming language

Currently, Java, C family languages (C, C#, C++) and Python are the most commonly taught languages on introductory programming courses in the UK (Murphy et al. 2016: 3) and internationally (Guo 2014). These specified languages are also the five most commonly used by globally leading organisations to develop applications for their business and other services (Bouwkamp 2016). Python recently overtook Java as the most commonly taught language on the computer science courses of the top 39 American universities (Guo 2014). Ateeq and colleagues (2014) preferred Python to C++ because the syntax is closer to the English language (pseudocode) and the

development environments that accompany it are more accessible. Less time spent on navigating syntax errors also means that students can devote their time to problem-solving and algorithmic thinking (Yadin 2011).

Endeavours to reduce the confusion caused by learning syntax have led to the development of ‘drag- and-drop’ programming languages (also known as ‘code blocks’) - which involve dragging and ordering pre-written code from menus (Hundhausen et al. 2009). However, the same criticisms made of older ‘learner-friendly’ languages are applied to these recent innovations. Jenkins (2001a: 43) refers to earlier discussions about languages developed mainly for teaching, such as BASIC, LOGO and Pascal, and asserts that few universities “would seriously consider using them due to their lack of industrial application” (ACM 2013). It should be noted that, whilst industry standard languages and environments are desired for increasing employability, their complexity can be overwhelming for novice programmers. Despite this tension, industry currently emphasises the importance of generic skills (such as computational thinking and complex problem-solving skills) and is less concerned with a person’s experience of specific languages and platforms (Shadbolt 2016: 72).

2-52 Integrated Development Environments

Some Integrated Development Environments (IDEs) are designed for developing specific applications (games, web development, mobile platforms) but most support a wide range of languages and applications. IDEs are preferred for their features such as IntelliSense (Microsoft’sTM facility for auto completion of programming code in the Visual StudioTM IDE) and the automated production of design documents and test cases, which are not present in basic text-based and command line code editors. Nevertheless, the complexity of industrial IDEs can confuse students and hinder learning. Novice programmers are reported to find error messages generated by industrial IDEs confusing, because such messages assume more advanced levels of understanding and knowledge (McIver & Conway 1996).

IDEs are regularly updated in accordance with rapidly changing market demands. However, changes to established and familiar functionality can cause confusion and frustration for students and tutors alike. Despite this, computer science departments and individual instructors tend to utilise those IDEs (and programming languages) they have greatest experience of (Pedroni & Mayer 2006). The cost of licensing of commercial software also limits choice for many CS departments.

Supporting textbooks and materials

For previous generations of university students, textbooks were the primary source of programming knowledge outside of lecture and teaching materials. In similarity with other ‘static’ materials, such as slide presentations, lecture notes and blackboards, any utilised textbooks communicate concepts and code snippets in a specific language (Kolling 2003; Robins et al. 2003; Norvig 2001) but often fail to adequately convey the “dynamic processes” used by experienced programmers to solve programs (East et al. 1996: 1). Soares and co-researchers (2015) offered the same introductory course to two groups; one group was required to read the course textbook, but this was not a compulsory activity for the other group. There was no noticeable difference between the assessment performances of either group.

Even though students continue to buy and read textbooks prescribed by reading lists, many utilise internet learning resources such as online courses and MOOCS, YouTube videos and recorded lecture videos, as well as blogs and forums. Educators and employers alike observe that the first instinct of student or commercial programmers is to search for a solution on Google (Utting et al. 2013: 25). Students and commercial programmers frequently read forums such as StackOverflow to inform their own solutions. StackOverflow is a question and answer site that also publishes previous discussions and code solutions.

2-53