Teaching Basic Problem Decomposition and Algorithm Design Skills
Mandoye Ndoye, Electrical and Computer Enngineering, Tuskegee UniversityWith the advent of the data science era, there is a great and immediate need for the training of engineers that can use principled methods and algorithms to extract useful information from large sensor measurements. The importance of these skills to the national interest is evidenced by the NSF's Harnessing the Data Revolution (HDR) initiative, which is a "national-scale activity to enable new modes of data-driven discovery that will allow new fundamental questions to be asked and answered at the frontiers of science and engineering". For such an initiative to be fully realized, efforts must be taken to introduce and develop computational thinking at early stages of the engineering curriculum. It should be pointed that Computational Thinking is not programming although the latter is a conduit for teaching it. Computational Thinking is a problem-solving process that encapsulates a collection of skills; namely
- Decomposition – ability to break down a problem into smaller/simpler components that can be easily implemented and tested.
- Pattern recognition – ability to identify similar pieces from decomposed problems
- Abstraction – ability to identify general principles underpinning patterns
- Algorithm Design – ability to develop the step-by-step procedure that can be implemented in some programming language to solve a task.
Although these skills are typically taught through computer science courses, they are readily applicable to solving problems in various other disciplines.
Due to the importance of computational thinking skills, we have strived at the Tuskegee University ECE department to introduce these concepts at the Freshmen level. We have implemented this initiative using two courses: Introduction to Engineering (EENG 0192) and Introduction to Python Programming (EENG 0210). In EENG, a basic overview of Computational Thinking concepts is provided using the MATLAB programming language. I teach the EENG 0210 where Python used. In this course I have focused primarily on skills development in Decomposition and Algorithm Design. In the early part of the semester, after covering the fundamentals of Python students are given reasonably complex problems, which are presented in such a manner that simpler individual components can be easily identified and implemented as functions. Moreover, the implementations of the sub-problems are devised to relatively simple. Students can learn by experience that problems can be readily solved by judiciously combined the implementations of their sub-problems. As we advance through the semester the level of difficulty of assignments is gradually increased by giving problems where (a) how to decompose larger problems is less obvious and (b) the implementations of the identified sub-problems are incrementally more challenging. I have also used a similar approach to teach Computational Thinking to my undergraduate research assistants using MATLAB. I hope that the workshop will be an opportunity to learn novel pedagogical approaches on teaching Computational Thinking using MATLAB.