Explorable Discrete Mathematics: a Python-based undergraduate-level teaching approach
Resumo
Discrete Mathematics is a foundational yet demanding introductory subject for Computer Science curricula, where undergraduate students typically have difficulties grasping its concepts and applications. In this work, we describe our teaching approach, using a programming language in tandem with math notation, inviting students to explore and learn its main concepts. Our goal is to build intuition through experimentation: first, evaluating expressions and running code snippets, then linking the programming constructs to mathematical notation, and finally, formalizing the underlying theory. For this, we detail our methodology and course design covering four major topics: set theory, counting, combinatorics, and propositional logic, presented as a continuous progression. Compared to the traditional teaching of Discrete Mathematics, we have quantitatively measured an increase in grades and a reduction of students dropping out of classes while perceiving an overall smooth learning curve.
Referências
Duchesnay, E., Lofstedt, T., and Younes, F. (2021). Statistics and Machine Learning in Python. Université Paris-Saclay, France.
Giannakos, M. N., Pappas, I. O., Jaccheri, L., and Sampson, D. G. (2017). Understanding student retention in computer science education: The role of environment, gains, barriers and usefulness. Education and Information Technologies, 22:2365–2382.
Kado, K. (2022). A teaching and learning the fundamental of calculus through python-based coding. International Journal of Didactical Studies, 3(1):15006.
Kenett, R. S., Zacks, S., and Gedeck, P. (2022). Modern statistics: a computer-based approach with python. Springer.
Liu, Y. A. and Castellana, M. (2021). Discrete math with programming: A principled approach. In Proceedings of the 52nd ACM Technical Symposium on Computer Science Education, SIGCSE ’21, page 1156–1162, New York, NY, USA. ACM.
Lockwood, E. (2021). Investigating undergraduate students’ generalizing activity in a computational setting. In Proceedings of the 42nd Meeting of the North American Chapter of the International Group for the Psychology of Mathematics Education.
Mirolo, C., Izu, C., Lonati, V., and Scapin, E. (2022). Abstraction in computer science education: An overview. Informatics in Education, 20(4):615–639.
Nagpal, A. and Gabrani, G. (2019). Python for data analytics, scientific and technical applications. In 2019 Amity international conference on artificial intelligence (AICAI), pages 140–145. IEEE.
Pfitscher, R. J., Camargo, L. C., Moreira, B. G., Wang, C., Zedral, R., and Garcia, T. R. (2023). Análise de sentimentos em turmas de programação com vistas ao apoio à permanência estudantil. In Anais do XXXIV Simpósio Brasileiro de Informática na Educação, pages 1329–1340. SBC.
Power, J. F., Whelan, T., and Bergin, S. (2011). Teaching discrete structures: a systematic review of the literature. In Proceedings of the 42nd ACM technical symposium on Computer science education, pages 275–280.
Ramalho, L. (2022). Fluent python. O’Reilly Media, Inc.
Rosen, K. H. (2007). Discrete mathematics and its applications. McGraw Hill.
Suzuki, J. and Suzuki, J. (2021). Statistical Learning with Math and Python. Springer.
Vasconcelos, D. R. and Guerra, P. T. (2023). Ensinando teoria da computação com jupyter notebook. In Anais do XXXI Workshop sobre Educação em Computação, pages 9–19. SBC.
Zampirolli, F. d. A., Pisani, P. H., Josko, J. M., Kobayashi, G., Fraga, F., Goya, D., and Savegnago, H. R. (2020). Parameterized and automated assessment on an introductory programming course. In Anais do XXXI Simpósio Brasileiro de Informática na Educação, pages 1573–1582. SBC.