As I mentioned in a blog post a few weeks ago, I have been given the privilege to create a course at the University that teaches Programming Design Patterns using Java. In Software Engineering, a Design Pattern is a general repeatable solution to a commonly occurring problem in software design. It is a description or template for how to solve a problem that can be used in many different situations. One of the first things I did in designing this course, was decide on the appropriate Course Structure. Design Patterns are categorised according to the groups below and the patterns listed are covered in the course.
- Creations Patterns – These patterns are all about class instantiation.
- Abstract Factory
- Structural Patterns – These patterns are all about Class and Object composition.
- Behavioural Patterns – These patterns are all about objects communication among classes.
- Chain of Responsibility
Secondly, I acquired soft copies of reference texts for the students to be used throughout the course. So far, I’ve been using Design Patterns Explained Simply by http://sourcemaking.com/ as well as the Design Patterns in Java Tutorial from http://www.tutorialspoint.com/.
Thirdly, I focused on assessment preparation. I’ve completed Creational and Structural Design Patterns with the students at one campus and I should complete those Patterns with the students at another campus by next week. Finally, we would complete the Behavioural Design Patterns and prepare for the final exam. While I do wish I had more time to prepare all the material for the course, things are going great. For each pattern taught, I will give multiple examples in class for the students to grasp the practical side of it with the hope that they’ll read the notes from the books to solidify the concept with the theoretical side of things. This course has three assignments, one for each Design Pattern Category, a Mid-Term Exam as well as a Final Exam.
This morning, I submitted the final draft for the Final Exam and I hope it’s approved. There are some changes to be made to the Mid-Term Exam, which will be given in two weeks and the assignments for the Structural and Behavioural Design Patterns will be issued within this coming week. I hope the University is pleased with the work I’ve done and will be interested in delivering this course again at the Bachelor’s level next year. Since I’ve been back at the University part-time, I’ve seen opportunities to deliver more courses at the the Diploma and Bachelor level and I hope I’ll be given to opportunity to do so in the near future. Currently, the University teaches Android Mobile Application Development, so it would be indeed an honour to develop a course teaching iOS Mobile Application Development at the Bachelor level. Until then, I will make suggestions for the courses I would like to deliver, that I think would be of value to the students, with the hope of it being approved.
The new semester at the University began last week. For this second semester, I’ll be lecturing three courses, one on Design Patterns using Java, another on Databases with MySQL and lastly the programming language C. This will take four classes with a total of 16 hours per week, with four 4-hour classes, for a period of 12 weeks, with an additional week if needed. I’m most excited to lecture the Design Patterns course as this is the first time it will be delivered by the University. I know that my ability to successfully deliver the content will affect the likelihood of the course will be delivered again. Thankfully to sourcemaking.com‘s book on Design Pattern and James W. Cooper’s book on Design Patterns in Java, there will be no need for me to prepare course notes. I’ve also been fortunate to find a C Programming Tutorial from tutorialspoint.com which also eases me up from preparing notes for the C Programming course. I’m yet to find the perfect handout for the Databases course. The students in the class have no database experience and very little database knowledge, so finding notes with very simple explanations is proving to be a challenge. For the next 11 weeks, I will be managing my full time 8-4 job and my lecturing. This will be an exciting challenge as this schedule is a 6 hour increase from the lecturing I did last semester, so it will definitely test me and take me out of my comfort zone. Seeing that my classes end at 9PM, Monday to Thursday and I usually go to bed after 11PM, I’ve decided that it would be best that my morning wake up time be moved from 4AM/4:30AM to 5AM to allow some additional time for sleep. On weekdays, I aim for 5-6 hours sleep but that never really happens, so hopefully this can be attained with my 5AM wake up call. The next 11 weeks will be quite busy but it all contributes to a greater plan and purpose.
Yesterday I completed marking all the coursework and final exam papers for my Java class from this semester. I’m very thankful that all my students passed, some with higher marks than others. One of my students scored a disappointing 25% on one of his assignments simply because he had too much going on at the time and was not motivated enough to complete the coursework. Despite the number of exercises given and the fact that I prepared a mock exam, some students did not answer the questions in the final exam as well as I’d hope. The lowest mark for the final exam was 50% and the highest was 90%. I can accept this but sometimes no matter how much information you provide to students to aid in the preparation of examinations, it’s up to them to make that effort.
Today is my last C++ class as well as my last class for the semester. It is indeed a bitter sweet feeling. I’m sad it’s over because I really enjoyed this class and the interaction with the students but no classes for the month of December means a little additional rest for my body even though I’ll be busy marking assignments and papers. I look forward to classes in the next semester. I haven’t finalised my courses just yet but I’ve discussed lecturing Design Patterns with Java and Computer Logic. I’ve never lectured these modules before so I’m really excited, more so for the Design Patterns course as I’ve covered these in my MSc using C++ and Objective-C. It’s going to be so much fun teaching design patterns using Java next semester.
Yesterday in the Java class, I revisited the concept of Threads with the students and I am so glad I did. I prepared a class exercise that initially focused on the theory aspect of threads then we moved gradually into the coding, increasing difficulty with each question. For all the exercises in the past, the students used Eclipse to compile and run the code but yesterday I asked them to do everything on paper. The final examination set by the University is written and this approach while practicing will best prepare them for what to expect for the exam. The theory was pretty easy and straightforward but when we got down to the practical exercises some students struggled. Only one student remembered to define the run( ) method in the Thread subclass and she executed one of the questions so perfectly, that I asked the other students to take a look at her solution. I later thanked her for doing such a great job and to keep up the good work. The next class will be the quiz and for the rest of the semester I will be focusing on the topic of files then exercises to prepare for the final exam.
Yesterday I wrapped up the topic of Threads in Java covering thread basics, the 2 ways to create a thread, the activities of the thread’s life cycle, writing multithreaded programs, sharing access to data, synchronisation and the use of monitors and semaphores. I was not comfortable with the response from the class while lecturing the topic, so for tomorrow’s class, I’ll postpone the Quiz to next week Tuesday and do a repeat of the Threads concepts with some more examples and exercises. At this point, I do not feel comfortable about the way the topic was received by the students. It is extremely important to me to ensure that the students understand the concepts before I move on. We have 10 more sessions scheduled, 7 regular sessions and 3 make-up classes. One of those sessions will be used for the reviewing threads, another session for 2 quizzes and the other 8 sessions for file access and exam preparation. I also found a really great handout from IBM that I’ll be using to guide the class tomorrow which I believe flows through the concept quite well, so that should be helpful.
Yesterday I received an email from one of the students from my Java class expressing gratitude for some work done in the previous class which greatly contributed to helping him understand the concept of the Observable Class and the Observer Interface. I try as much as possible to get the students to understand the concepts before the class ends, even if it means not completing the entire planned lecture. When I receive emails or messages from students commenting on how they enjoyed the class and how they have grasped the concepts taught, it really makes me happy and makes all the work done before class worth it. In the Java class yesterday, we started looking at Threads. We looked at processes, then the main reasons for threads and the two main ways to create a Thread in Java…using the Thread class and using the Runnable Interface. Throughout the class I reiterated the fact that since Java only allows single inheritance, the Thread class cannot be used to create a Thread if you would like to inherit from another class and in such an instance the Runnable Interface should be used. I gave the class a few examples on creating threads but for some reason they were having some problems grasping the concept. So I started the topic again from the top and ended the class with them creating two basic classes for the two ways to create a thread as shown below.
For the next class, we will look at the life cycle of a thread, thread synchronisation and multithreaded programs.