Design of a Programming Paradigms Course Using One Single Programming Language
Abstract
Undergraduate students of a Software Engineering degree must be able to select the appropriate paradigm to solve a problem. They must also be able to know the foundations of concurrent and parallel programming. In the Software Engineering degree taught in the University of Oviedo, both competencies were assigned to the Programming Technology and Paradigms course. In this article, we present the approach we followed in the design of that course to teach object-oriented, functional, concurrent and parallel programming to second year undergraduate students with basic knowledge of Java. Due to the time limitations of the course, the proposed design uses one single programming language besides Java. We describe the most important challenges we faced and how we addressed them.
Keywords
Programming paradigms Functional programming Concurrency Parallelism Object orientation Meta-programming C#Preview
Unable to display preview. Download preview PDF.
References
- 1.ACM/IEEE-CS: Computer science curricula 2013: Curriculum Guidelines for Undergraduate Degree Programs in Computer Science (2013)Google Scholar
- 2.Barnes, D.J., Kölling, M.: Objects First with Java, a Practical Introduction using BlueJ. Prentice Hall (2012)Google Scholar
- 3.Ortin, F., Labrador, M., Redondo, J.M.: A hybrid class- and prototype-based object model to support language-neutral structural intercession. Information and Software Technology 56(2), pp. 199-219 (2014)Google Scholar
- 4.Oracle. Restrictions on Java generics, https://docs.oracle.com/javase/tutorial/java/generics/restrictions.html (2015)
- 5.Bracha, G., Odersky, M., Stoutamire, D., Wadler, P. Making the future safe for the past: adding genericity to the Java programming language. In: ACM SIGPLAN conference on object-oriented programming, systems, languages, and applications (OOPSLA), pp. 183-200. Vancouver, British Columbia, Canada (1998).Google Scholar
- 6.Warburton, R: Java 8 Lambdas: Pragmatic Functional Programming. O’Reilly Media (2014).Google Scholar
- 7.CS107: Programming Paradigms course, Stanford University, https://www.udemy.com/draft/2462 (2015)
- 8.ECMA-334, C# Language Specification, http://www.ecma-international.org/publications/standards/Ecma-334.htm (2015)
- 9.ISO/IEC 23270, Information Technology, Programming Languages, C#, http://www.iso.org/iso/home/store/catalogue_ics/catalogue_detail_ics.htm?csnumber=42926 (2015)
- 10.Tiobe index for September 2015, http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html (2015)
- 11.Goetz, B.: JSR 335: Lambda Expressions for the Java Programming Language, https://jcp.org/en/jsr/detail?id=335 (2015)
- 12.Dean, J., Ghemawat, S.: MapReduce: Simplified data processing on large clusters. In: Operating Systems Design and Implementation, pp. 137–149. San Francisco, California (2004)Google Scholar
- 13.λ#, Functional C#, http://functionalcsharp.codeplex.com (2015)
- 14.Almeida, F., Giménez, D., Mantas, J.M., Vidal, A.M.: Sobre el papel de la programación paralela en los nuevos planes de estudios de informática. In: Jornadas sobre la Enseñanza Universitaria de la Informática, pp. 99-106. Barcelona, Spain (2009)Google Scholar
- 15.Albahari, J: Threading in C#. O’Reilly Media (2011)Google Scholar
- 16.Amdahl, G.M.: Validity of single-processor approach to achieving large-scale computing capability. In: AFIPS, pp. 483—485, Reston, Virginia (1967)Google Scholar
- 17.Lea, D. A Java fork / join framework. In: ACM Conference on Java Grande (Java), pp. 36-43. San Francisco, California (2000).Google Scholar
- 18.Ortin, F., Mendez, S., Garcia-Diaz, V., Garcia, M.: On the suitability of dynamic languages for hot-reprogramming a robotics framework: a Python case study. Software: Practice and Experience 44(1), pp. 77-104 (2014)Google Scholar
- 19.Bierman, G.M., Meijer, E., Torgersen, M. Adding Dynamic Types to C#. European conference on object-oriented programming (ECOOP), pp. 76-100. Maribor, Slovenia (2010).Google Scholar
- 20.Ortin, F., Quiroga, J., Redondo, J.M., Garcia, M.: Attaining Multiple Dispatch in Widespread Object-Oriented Languages. Dyna 186, pp. 242-250 (2014)Google Scholar
- 21.Ortin, F., Diez, D. Designing an adaptable heterogeneous abstract machine by means of reflection. Information and Software Technology 47(2), pp. 81-94 (2005)Google Scholar
- 22.Ortin, F., Cueva, J.M. Implementing a real computational-environment jump in order to develop a runtime-adaptable reflective platform. ACM SIGPLAN Notices 37(8), pp. 35-44 (2002).Google Scholar
- 23.CodeDOM reference, https://msdn.microsoft.com/library/f1dfsbhc(v=vs.100).aspx (2015)
- 24.Van Roy, P. Paradigms of Computer Programming, Université Catolique de Louvain https://www.edx.org/course/paradigms-computer-programming-louvainx-louv1-1x-0 (2015).
- 25.Mozart Consortium. The Mozart Programming System. http://mozart.github.io (2015)
- 26.Allen, S. C# Programming Paradigms Course. PluralSight. https://www.pluralsight.com/courses/csharp-fundamentals-2 (2015)
- 27.Bernardy, J.P. Programming Paradigms. Chalmers University of Technology, Göteborg, Sweden. http://www.cse.chalmers.se/~bernardy/pp/ (2015)