I have had the opportunity to develop and instruct the PH4390 class at Michigan Tech. for two semesters. The course is designed to give senior level undergraduate students and new graduate students an introduction to the Unix/Linux environment, basic coding practices and the skills necessary to solve problems using numerical techniques. My personal goal of the course was the give the students the basic understanding of modeling and provide them with a basic toolkit to get some started on any problem. I am not an expert in numerical methods or teaching, but I was assigned the task and I put my best foot forward and put together this course using my past experiences and an immense amount of optimism.
The class was assigned to me as a fourth year graduate student and given the task to develop the course from the ground up. Having some prior experience with taking the class and being a teaching assistant, I put together the following framework to the best of my abilities and each student was able to acquire new skills from the course. This course provides unique challenges with the varying levels of students that take this class. I had a wide range of students, many have never compiled a program before, while others were writing multithreaded programs in C in the first few weeks of the course.
Choosing the language of the course is something I have put a great deal of thought into, but I have not had much insight into the matter. I have spoken to other instructors and experienced other classes where the instructors will have a dogmatic view on the language of choice. Others have had not language preferences at all. While I think keeping a uniform language through out the course benefits the weaker students in the class, I do not think it is the only way to teach this course. In the two semester I have primarily used C as the language of instruction. For the first few assignments I require the students to use C as well. There are many struggles associated with using a compiled language at first. Many students are accustomed to “simple” interfaces and languages, such as python and Matlab.
Here is the link to the syllabus that was used in the past semester of instruction. With this document I try to build a course that is structured and the expectations are clear to the students.
Here are a few assignments that were used in the course. There are many improvements that can be made, but this is the current state of the course. These were written with a simple task in mind, to allow the students to learn an objective quickly. I strive to leave the constraints of the assignment to a minimum to leave the students with room for creativity. Some students would be able to complete the assignment with the bare minimum amount of effort, while other students took the time and crafted well thought out modular programs. In the end the students would obtain a similar grade, due to the nature of the rubric (if the task is accomplished it receives full marks). It can be deemed as unfair, but I think it is an acceptable method in the modern academic environment.
1). Assignment #1
2). Assignment #4
3). Assignment #8
If you have any questions or comments please contact me.