There is little I enjoy more than a fabulous night with my head against my pillow in a blissful silence or with a white noise generator to keep me from thinking too damned much when I should be resting. I love it because of the warm waves of sleep as my body goes in and out of consciousness. I love it because of the silly thoughts that flood my mind as I do so – I mean who would ever want to try to plug their computer into a WIFI elephant that is swimming in the sun?
Occasionally I like to watch a movie off of Netflix and just bathe in the glow of my television as it tells me a story or shows some silly antics going on in the gulf of mexico (Seriously, taking till August is atrocious and you deserve your stock price).
What I hate is when I get those same waves in the classroom, and even more when I get them in a programming course. I have no problem admitting to anyone that programming is not glamorous, nor do I have to hide the fact that it takes a certain type of person to be able to do what I do. I happen to find the type of problem solving that I deal with quite enjoyable and energizing when it goes well, and I’ve discussed as much before.
It is quite disappointing to sit down in a class and be perfectly interested in a subject only to be asked to do something stupid to show it. Below is a chronicle of the labs I had to accomplish in two courses that I took, one is so called Advanced Java, the other is Advanced Assembly. One of them was interesting and the other absolutely killed me to even focus on the assignments. The time in parenthesis is the time expected to work on each assignment.
Lab 1: Inner classes IO & Serialization (3 weeks)
We were charged with creating, and processing a series of classes that would load a text file, of our own design as well, into itself following OO Standard practices.
Lab 2: Interfaces, Abstract Classes & Exception Handling (2 weeks)
Build off of the previous lab, creating a set of abstract classes and interfaces to define API. Implement 5 exceptions and make sure they are able to make your application robust.
Lab 3: Collections (2 weeks)
Build off of the previous lab, changing an OptionSet to an LinkedHashMap and the array of Options into an ArrayList.
Lab 4: Multi Threading (3 weeks)
Build off of the previous lab, create a wrapper for the Automobile class that extends Thread or Runnable. Use this new class to demonstrate the issues you may run into with Unsynchronized code.
Lab 5: Socket Programming (3 weeks)
Create a server client connection. The server keeps track of all automobiles and handles the creation of them. The Client only processes files in a passive way, handing off the processing of everything other than configuration to the server. We were also introduced to the Properties object.
Lab 6: JSP/Servlets (2 weeks)
Create a web interface that allows a client to select an automobile, configure it and see a report of their chosen configuration.
For each of these labs I was expected to provide sample output, the code, and updated UML diagrams of the current state of the application. To say the least, this class has been a disappointment. Compare this with my assembly course labs.
Lab 1: GCD & Refresher on ASM Basics (1 week)
Write a program that calculates the greatest common divisor of two integers. The GCD of two integers with no remainder is the largest positive integer that divides them both with no remainder.
Lab 2: String Processing (2 weeks)
Using INVOKE and sub procedures, prompt the user for a string, upper case it and print it out centered on the terminal. Remove all reliance on built in libraries, write your own routines for all printing to the console.
Lab 3: Windows API calls for IO and Dynamic Memory Allocation (2 weeks)
Prompt the user for a file, read it in to a dynamically allocated array of dynamically allocated strings, print them to a second file in reverse order. Continue expanding personal library of function calls. Keep track of registers because WinAPI doesn’t care about you. Keep expanding on the String and API Procedures.
Lab 4: Floating Point Arithmetic (2 weeks)
Prompt the user for a file of student scores. Calculate the Mean and Standard Deviation of the scores and pipe the output back to the user. Write a procedure to round a floating point number to a certain number of digits, user specified, and write that out to the terminal.
Lab 5: Integrate C and ASM, Multi module projects & Structures (1.5 weeks)
Prompt the user for a 24bit BMP, prompt the user to convert the file to Greyscale, Sepia and a third processing type that would be output to the same directory, with the conversion type appended to the end. Only use C to do the user interaction opening the file initially and opening the output file.
Lab 6: 16 Bit programming, Interrupts (1 week)
Read a file directly on to the console that scrolls up circa Star Wars, and has the same yellow text as well.
Not only are the labs for ASM more involved when compared with Java, but compare the time we were able to spend on each assignment. Even at its best this class has been more of a course in how not to teach, which brings us to the actual topic i wanted to discuss.
A teacher is not just someone who informs. You don’t learn complicated subjects by reading a book and moving on. You learn from doing the work and experiencing it, even on the small scale – like the labs that we have been asked to do. I walked in on week two of this Java course after reading about the labs we were going to be working on and flat out said these were boring. But what makes them boring?
Java is a language that revolves and exists because of abstraction. Everything interesting about programming has been abstracted away and duct taped and wrapped with padded foam, so we cant hurt ourselves as well as we used to. Pointers and passing by reference don’t exist; building my data structures is now a matter of simply choosing whether i need a hash or a set and whether the input number needs to be dynamically created; Everything is wrapper classes; Eclipse does most of the heavy lifting for you.
I miss my registers =(
It is the job of an instructor to do more than just inform, they are also responsible for inspiring me to want to learn these subjects. Academia would have you believe that Java is the catch all language capable of doing freaking everything and anything. I have a hard time writing the wrapper around my head to make this mentality clearer to understand. My instructor dry heaves whenever we discuss any of the P languages (Perl, Python, PHP). He minimizes and ignores the depth of programming understanding required to be able to program games and instead rants for hours about cloud computing. I know more about HDFS/Hadoop and MapReduce than i would ever wish to know, and yet i don’t find this course interesting.
No one in his classes does, in fact.
Waxing poetic about instructors who have touched me and my life is something i can do endlessly. I am very appreciative of the instructors that have bee
n there to save me from my own confused thoughts and helped point me in the right direction, and they all know i love them and likely owe the majority of the success i now hold to them. It is likely that this is not just a problem in the programming field either, considering the experiences that i have heard from others in the Maths and Sciences.
The utter ridiculous nature of being a boring teacher is beyond me.