Assisting Novice Developers Learning in Flutter Through Cognitive-Driven Development

Resumo


Cognitive-Driven Development (CDD) is a coding design technique that helps developers focus on designing code within cognitive limits. The imposed limit tends to enhance code readability and maintainability. While early works on CDD focused mostly on Java, its applicability extends beyond specific programming languages. In this study, we explored the use of CDD in two new dimensions: focusing on Flutter programming and targeting novice developers unfamiliar with both Flutter and CDD. Our goal was to understand to what extent CDD helps novice developers learn a new programming technology.We conducted an in-person Flutter training camp with 24 participants. After receiving CDD training, six remaining students were tasked with developing a software management application guided by CDD practices. Our findings indicate that CDD helped participants keep code complexity low, measured using Intrinsic Complexity Points (ICP), a CDD metric. Notably, stricter ICP limits led to a 20% reduction in code size, improving code quality and readability. This report could be valuable for professors and instructors seeking effective methodologies for teaching design practices that reduce code and cognitive complexity.
Palavras-chave: Cognitive-Driven Development, Software Design

Referências

2023. Dart documentation. Retrieved Dec 20, 2023 from [link]

2023. Flutter documentation. Retrieved Dec 20, 2023 from [link]

Caio Barbosa, Anderson Uchôa, Daniel Coutinho, Filipe Falcão, Hyago Brito, Guilherme Amaral, Vinicius Soares, Alessandro Garcia, Baldoino Fonseca, Marcio Ribeiro, et al. 2020. Revealing the social aspects of design decay: A retrospective study of pull requests. In Proceedings of the XXXIV Brazilian Symposium on Software Engineering. 364–373.

Leonardo Ferreira Barbosa, Victor Hugo Pinto, Alberto Luiz Oliveira Tavares de Souza, and Gustavo Pinto. 2022. To what extent cognitive-driven development improves code readability?. In Proceedings of the 16th ACM/IEEE International Symposium on Empirical Software Engineering and Measurement. 238–248.

Alberto Luiz Oliveira Tavares de Souza and Victor Hugo Santiago Costa Pinto. 2020. Toward a definition of cognitive-driven development. In 2020 IEEE International Conference on Software Maintenance and Evolution (ICSME). IEEE, 776–778.

Eric Evans. 2004. Domain-driven design: tackling complexity in the heart of software. Addison-Wesley Professional.

Ronivaldo Ferreira. 2024. Artifacts. [link]

Steven Fraser, Kent Beck, Bill Caputo, Tim Mackinnon, James Newkirk, and Charlie Poole. 2003. Test driven development (TDD). In International Conference on Extreme Programming and Agile Processes in Software Engineering. Springer, 459–462.

DM Hutton. 2009. Clean code: a handbook of agile software craftsmanship. Kybernetes 38, 6 (2009), 1035–1035.

Robert C Martin. 2000. Design principles and design patterns. Object Mentor 1, 34 (2000), 597.

George A Miller. 1956. The magical number seven, plus or minus two: Some limits on our capacity for processing information. Psychological review 63, 2 (1956), 81.

Marco L Napoli. 2019. Beginning flutter: a hands on guide to app development. John Wiley & Sons.

David Lorge Parnas. 1994. Software aging. In Proceedings of 16th International Conference on Software Engineering. IEEE, 279–287.

Jherson Haryson A Pereira, Alberto Luiz Oliveira Tavares de Souza, and Victor Hugo Santiago C Pinto. 2021. Cognitive Load Analyzer: A Support Tool for Cognitive-Driven Development. In Proceedings of the XXXV Brazilian Symposium on Software Engineering. 468–473.

Gustavo Pinto and Alberto de Souza. 2023. Cognitive-Driven Development Helps Software Teams to Keep Code Units Under the Limit! arXiv:2210.07342 [cs.SE]

Victor Hugo Santiago C Pinto, Alberto Luiz Oliveira Tavares de Souza, Yuri Matheus Barboza de Oliveira, and Danilo Monteiro Ribeiro. 2021. Cognitive-Driven Development: Preliminary Results on Software Refactorings.. In ENASE. 92–102.

Victor Hugo Santiago C. Pinto. and Alberto Luiz Oliveira Tavares De Souza. 2022. Effects of Cognitive-driven Development in the Early Stages of the Software Development Life Cycle. In Proceedings of the 24th International Conference on Enterprise Information Systems - Volume 2: ICEIS. INSTICC, SciTePress, 40–51. DOI: 10.5220/0011009000003179

John Sweller. 1988. Cognitive load during problem solving: Effects on learning. Cognitive science 12, 2 (1988), 257–285.

John Sweller. 2010. Element interactivity and intrinsic, extraneous, and germane cognitive load. Educational psychology review 22 (2010), 123–138.
Publicado
30/09/2024
FERREIRA, Ronivaldo; PINTO, Victor Hugo Santiago C.; SOUZA, Cleidson R. B. de; PINTO, Gustavo. Assisting Novice Developers Learning in Flutter Through Cognitive-Driven Development. In: SIMPÓSIO BRASILEIRO DE ENGENHARIA DE SOFTWARE (SBES), 38. , 2024, Curitiba/PR. Anais [...]. Porto Alegre: Sociedade Brasileira de Computação, 2024 . p. 367-376. DOI: https://doi.org/10.5753/sbes.2024.3473.