Assisting Novice Developers Learning in Flutter Through Cognitive-Driven Development
Ronivaldo Ferreira, Victor H. S. Pinto, Cleidson R. B. de Souza, Gustavo Pinto
TL;DR
This paper investigates Cognitive-Driven Development (CDD) as a method to teach software design to novices learning Flutter and Dart. It proposes Flutter-specific Intrinsic Complexity Points (ICPs) and evaluates them through an in-person workshop with 24 participants, followed by a CDD-guided refactoring that reduces total lines of code by about 20% and increases modularity. The study provides qualitative and quantitative evidence that CDD improves code readability, structure, and learners' engagement, while highlighting challenges such as early-stage impact and the need for tooling. Overall, the work demonstrates CDD's potential as an educational technique to teach design practices that curb cognitive and code complexity in UI-focused frameworks, with implications for software engineering curricula and instructor practices.
Abstract
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.
