The teaching of functions as the first step to learn imperative programming

  • Carla A. D. M. Delgado UFRJ
  • João C. P. da Silva UFRJ
  • Fabio Mascarenhas UFRJ
  • Ana Luisa Duboc Colégio Pedro II


The literature on teaching programming covers a wide discussion regarding the approach to be adopted in an introductory course. While the objectoriented paradigm requires a high level of abstraction and can overshadow basic concepts, the structured imperative paradigm lacks a guideline to motivate and drive the process of building programs. In this paper we present a modularization based approach for teaching programming to the novices using the imperative paradigm. The construction of self contained modules of code - programming functions in Python - is worked with the students from the very first class until the end of the course. We describe our experience and report the results obtained from the implementation of this approach in a scenario of more than a dozen courses offered each semester over three years.


Abelson, H. and Sussman, G. J. (1996). Structure and Interpretation of Computer Programs. MIT Press, Cambridge, MA, USA, 2nd edition. ACM and IEEE (2013). Computer science curricula 2013: Curriculum guidelines for undergraduate degree programs in computer science. Technical report, ACM Joint Task Force on Comp. Curricula ; IEEE Comp. Soc.

Agarwal, K. K., Agarwal, A., and Celebi, M. E. (2008). Python puts a squeeze on java for cs0 and beyond. J. Comput. Sci. Coll., 23(6):49–57.

Bieniusa, A., Degen, M., Heidegger, P., Thiemann, P., Wehr, S., Gasbichler, M., Sperber, M., Crestani, M., Klaeren, H., and Knauel, E. (2008). Htdp and dmda in the battlefield: A case study in first-year programming instruction. In Proc. of the 2008 Int. Workshop on Func. and Decl. Prog. in Education, FDPE ’08, pages 1–12, NY, USA. ACM.

Bruce, K. B. (2005). Controversy on how to teach cs 1: A discussion on the sigcsemembers mailing list. SIGCSE Bull., 37(2):111–117.

Celes, W. and Ierusalimschy, R. (2012). Apostila de programação i.

Delgado, C., Xexéo, J. A. M., Souza, I. F., Campos, M., and Rapkiewicz, C. E. (2004). Uma abordagem pedagógica para a iniciação ao estudo de algoritmos. In Anais do XII Workshop de Educação em Comp. (WEI).

Downey, A. B. (2007). Python as a first language: Pre-conference workshop. J. Comput. Sci. Coll., 22(6):3–4.

Ehlert, A. and Schulte, C. (2009). Empirical comparison of objects-first and objects-later. In Proc. of the Fifth Int. Workshop on Comp. Education Res., ICER ’09, pages 15–26, NY, USA. ACM.

Felleisen, M., Findler, R. B., Flatt, M., and Krishnamurthi, S. (2001). How to Design Programs: An Introduction to Programming and Computing. MIT Press, Cambridge, MA, USA.

Felleisen, M., Findler, R. B., Flatt, M., and Krishnamurthi, S. (2004). The structure and interpretation of the computer science curriculum. J. Funct. Program., 14(4):365–378.

Goldwasser, M. H. and Letscher, D. (2008). Teaching an object-oriented cs1 -: With python. SIGCSE Bull., 40(3):42–46.

Grandell, L., Peltomäki, M., Back, R.-J., and Salakoski, T. Why complicate things?: Introducing programming in high school using python. In Proc. of the 8th Australasian Conf. on Comp. Education - Vol. 52.

Guo, P. J. (2013). Online python tutor: Embeddable web-based program visualization for cs education. In Proc. 44th ACM Technical Symposium on Comp. Science Education, SIGCSE ’13, pages 579–584, NY, USA. ACM.

Ierusalimschy, R. (1997). Apostila de introdução `a ciência da computação.

Koulouri, T., Lauria, S., and Macredie, R. (2014). Teaching introductory programming: A quantitative evaluation of different approaches. Trans. Comput. Educ., 14(4):1:28.

Mannila, L. and de Raadt, M. (2006). An objective comparison of languages for teaching introductory programming. In Proc. of the 6th Baltic Sea Conf. on Comp. Education Research, Baltic Sea ’06, pages 32–37, NY, USA. ACM.

Mcgettrick, A., Boyle, R., Ibbett, R., Lloyd, J., Lovegrove, G., and Mander, K. (2005). Grand challenges in computing: Education—a summary. Comput. J., 48(1):42–48.

McKeown, J. and Farrell, T. (1999). Why we need to develop success in introductory programming courses. The Journal of Computing in Small Colleges, 14(3):241–250.

Nikula, U., Gotel, O., and Kasurinen, J. (2011). A motivation guided holistic rehabilitation of the first programming course. Trans. Comput. Educ., 11(4):24:1–24:38.

Reges, S. (2006). Back to basics in cs1 and cs2. SIGCSE Bull., 38(1):293–297.

Robins, A., Rountree, J., and Rountree, N. (2003). Learning and teaching programming: A review and discussion. Comp. Sci. Education, 13(2):137–172.

Sperber, M. and Crestani, M. (2012). Form over function: Teaching beginners how to construct programs. In Proc. of the 2012 Annual Workshop on Scheme and Functional Programming, Scheme ’12, pages 81–89, NY, USA. ACM.

Vilner, T., Zur, E., and Gal-Ezer, J. (2007). Fundamental concepts of cs1: Procedural vs. object oriented paradigm - a case study. SIGCSE Bull., 39(3):171–175.
DELGADO, Carla A. D. M.; DA SILVA, João C. P.; MASCARENHAS, Fabio; DUBOC, Ana Luisa. The teaching of functions as the first step to learn imperative programming. In: WORKSHOP SOBRE EDUCAÇÃO EM COMPUTAÇÃO (WEI), 24. , 2016, Porto Alegre. Anais [...]. Porto Alegre: Sociedade Brasileira de Computação, 2016 . p. 2393-2402. ISSN 2595-6175. DOI: