The End of the Beginning

Today, I come to the end of a four-week course named “Computer Science for Engineers”. I found the name fascinating, because I have thought of myself as an engineer for years.

I’ve studied Computer Science before, but this time was different. The standards were higher, for one thing. As a graduate-level course, I had to pay more attention to details than I had in undergraduate courses. The time constraints were also more difficult to manage. I could easily spend all of my time working on this course and not be satisfied that I spent enough, but instead I had to balance it out with the task of finding a job and my annual and quarterly visits to the Veterans’ Hospital. I settled by using my waiting time at the VA to read course materials on my eBook reader, and decided to forgo leisure activities, for the time being. It helps that I enjoy programming.

Some of this course covered basic Computer Science topics, such as algorithms, algorithm complexity, and techniques like as recursion. All of this was covered in my undergraduate studies, but I believe it was covered more completely here. I also have had more time since graduating with my BS degree to gain familiarity with the subjects, so I feel I got more out of if this time.

Another topic in this course was mobile programming. I have programmed computers from the old TI-99 and Tandy 102 systems to more recent high-end PCs and low-end SGI boxen, but one area that I really wanted to explore is mobile programming. I had familiarity with Java, but mobile programming involves so much more. Any books I had tried to learn from were out of date by the time I found them, but the way the projects in this course were presented worked quite well. I also felt that the fact that so much of each project was left to me to research and create helped me learn more. I know I have a lot to learn, still, but I feel much more confident about mobile programming.

I’m also a lot more comfortable with Java. Although I used Java in getting my BS, and my capstone was an application written in Java, I felt that the courses in that degree program actually involved too little programming. This was a topic I brought up with my school, after I was elected to the Student Body Senate, but I doubt that the curriculum was changed based on my commentary. In this course, I worked on three projects, each involving different concepts, and with each I was able to build on what I learned on the previous project. I definitely feel that I’m getting enough programming experience here.

I’ve also noticed another change in my attitude. When I tried setting up a small tablet as my car’s GPS device, I noticed that the tablet wasn’t connecting to the car’s BlueTooth receiver automatically when I came into range with the tablet. I considered installing Tasker, which I’ve used in the past for automation, but then I considered that I’m supposed to be learning to develop my own Android software. I doubt my skills are quite up to replacing Tasker, but surely I could construct something as simple as a service that checks for my car’s BlueTooth receiver and connects to it. I noticed a similar change with other things. When I was pondering home screen widgets for my tablet or automated notifications for my phone, I realized that I could probably figure out how to create those myself rather than try to find something that would match my needs. This would not only allow me to use smaller, more specialized apps, widgets, and services, but would also provide me with more experience in those areas of programming.

The thought of creating services for my devices also made me consider my capstone. The game I want to produce would require programmable intelligent agents. According to a research paper I reviewed, the script language built into Unreal Engine, my current 3D engine of choice, is insufficient for the task. The paper proposed creating the agents within Unreal but controlling with with an external process, or “controller”. This is something I can do. I still need to learn some details, but I believe it will work better than trying to automate entirely from within the 3D engine. Also, if I write the controller in native C or C++, the performance will be greatly improved. Even if I use a separate Java process for the service, it should still be faster than writing it within the 3D framework.

This is what I have so far. It was a tough month, on multiple levels, but I survived. Some people say, “What doesn’t kill you makes you stronger.” These people are wrong. Still, some things that don’t kill you can make you stronger, and I dare say I’m stronger now than I was four weeks ago.

Knowing I’m Willing

Knowing is not enough; we must apply. Willing is not enough; we must do.

(Goethe, Trunz, Einem, & Schrimpf, 2005)

References

Goethe, J. W., Trunz, E., Einem, H. v., & Schrimpf, H. J. (2005). Goethes Werke : Hamburger Ausgabe in 14 Bänden. 12, Schriften zur Kunst ; Schriften zur Literatur ; Maximen und Reflexionen. München: C.H. Beck.