Improving the Effectiveness of an Introductory Programming Course for Engineering Students
Amy Biegalski, Engineering Fundamentals, University of TennnesseeMy course is an introductory level programming course for engineering majors at the University of Tennessee. It is one of the four core courses in our engage Engineering Fundamentals curriculum, which introduces engineering disciplines, computer tools, communication skills, and physics with a focus on problem solving through collaboration.
In this course, I face two main challenges: 1) providing an approach that is effective and enjoyable for both students that are intimidated by programming with little to no programming background and for high achievers or those with substantial programming backgrounds, and 2) demonstrating the applicability and importance of programming to every engineering student's chosen area of study. Although there are always constantly small "failures" when incorporating substantial changes to the course and new technologies, and constant evolution due to lessons learned, generally I feel my approach to the course has been successful and student feedback continues to trend to more and more positive as I evolve the course.
Central to my teaching philosophy is development of engineers who feel empowered with the skills and confidence to create the breakthroughs of tomorrow and to address societal challenges. In working toward this objective, I have incorporated applications from my industry experience and sought out professional development and collaborative opportunities that have helped me further contextualize the computer programming concepts being studied. In addition to adding real world details, I incorporate hands-on technology and enable students to work collaboratively in problem and project based applications, where all students are challenged to support each other and work together to achieve the goal, with the opportunity for high achievers to elevate the experience. These methods increase students' sense of accomplishment and confidence in their competence, thus building their engineering identity.
To work toward overcoming the challenges of teaching computational skills, I have focused on three principal areas of effort which I will further detail below, (1) adding context to problems, (2) incorporating hands-on technology, and (3) shifting the in-class pedagogical approach to collaborative practice of applications.
The mission of our Engineering Fundamentals curriculum is to obtain needed skills through student exposure to real engineering problems; my upgrades to the curriculum content have focused on incorporating even more context in engineering problems that include the various engineering disciplines. For example, programming problem topics now include the spread of contaminants in an aquifer, the change in the rate of photosynthesis due to increased CO2, conductive heat transfer, changing voltage in a capacitor, beam and culvert analysis, trends in mean sea level, a car suspension modeled as a spring mass damper, and analysis of Kepler Telescope data to study exoplanets. I also use semester-long projects with real world applicability such as development of a rover that can assist humans on Mars and using sensors and devices along with a GUI to help individuals make better decisions about energy usage. Tackling real world problems can connect students with their work, induce curiosity and excitement as topics merge with personal interests, make the learning experience meaningful, and help students gain confidence in applying their engineering skills to new or unfamiliar problems. I believe the thoughtful addition of context can increase retention and better prepare our future engineers to tackle the challenges ahead.
I am genuinely passionate about increasing the use of hands-on technology in classes; I truly enjoy every day that I am able to be with students as they learn to apply their skills to make technology work for them. In my programming course I have transformed the curriculum from a lecture based computer lab environment to a course where nearly half of the class sessions take place in our "hacklab" where students program iRobots, Sphero RVRs, Arduinos, and Raspberry Pi's and use camera and audio technology in introductory exercises and semester long projects. Instead of learning how to code "a loop" as demonstrated by an instructor in a computer lab, students can now program a robot to repeat movements. "Conditionals" are illustrated by students' programming and calibrating a photocell to measure changing light conditions and respond by blinking an LED. The constraints brought about by implementing real hardware in student projects, e.g. using sensors for obstacle avoidance, positions students to think more creatively and code more efficiently to mitigate challenges. Because the course is designed for engineering students who have not chosen computer science and engineering as their career path, I firmly believe that this hands-on approach can make logic and coding more approachable to those more hesitant or timid about their MATLAB or programming abilities. The high achievers are able to create really impressive projects with incredible breadth and depth. Anecdotally, I have seen a tremendous jump in students' confidence and ability to code and understand complex algorithms after a few hacklabs using the robots and Arduinos as compared to their abilities after their first taste in their first course in our sequence. Our graduate student and undergraduate instructors also are tremendously inspired by the transformation and fun that takes place in the course and as a result themselves become very enthusiastic and dedicated instructors. I am extremely proud of the learning that takes place in our "hacklab". The last two semesters we had to shift to virtual Arduinos and robots, and zoom breakout rooms instead of team tables for team projects. Though less ideal, given the current circumstances the switch has still met the intended goals.
With over 1000 students in our program each semester, increasing student engagement and my interaction with students is one of my primary objectives. Increased engagement results in increased student motivation and learning. There has been a pedagogical shift across the nation to transform traditional lecture style classes to "flipped" classrooms with collaborative learning environments. These classrooms have been shown to be beneficial to struggling students, they create friendlier, more welcoming environments for first generation students and underrepresented minorities, and allow high-achieving students to be challenged as teaching peers provides a deeper learning and understanding of a subject. As students discuss problems, the cognitive processes involved in learning by teaching (LBT) can build mastery of a subject. Moreover, this pedagogy emphasizes teamwork, and central to the development of engineers is the ability to work in teams. Therefore, I have flipped the programming course by developing pre-class learning activities and structuring the class time to focus on challenging problem solving applications of the material in a collaborative environment. Students are encouraged to work with their peers on the in-class problems as the instructional staff "floats" around the classroom answering questions and facilitating discussions. The team environment in the flipped classroom replicates the engineering workplace environment and provides students practice with both the benefits and challenges of teamwork. More engineers working together with diverse backgrounds increases learning and productivity and leads to better solutions, but also entails conflict resolution, compromise, and learning how to accept and validate ideas and contributions of others. Whilst students take a stronger role in their own learning in the flipped classroom, in the course I have more intentionally conveyed the learning objectives to students and communicated how each class day and assignment relates to the learning objectives using learning badges and standards based evaluation as part of a programming power meter.
I look forward to continuing to learn about new approaches, ideas, and activities to incorporate into my course.