I am taking up programming again. Aside from trying out a few IDEs, it has been nearly seven years since I last did any real programming. I have done data modeling and some database work, but very little programming. More than anything else, I am excited about learning new languages. Programming has always been a creative activity for me. I suppose that I look at programming languages the same way that an artist looks at paints.
My fascination with computer languages began with an introductory FORTRAN programming course in 1973. Once I left college, I had to wait for the invention of personal computers before I could get back to programming for fun. By December 1983, I had saved enough for an Apple IIe. For the next few years, I experimented with Apple BASIC. When I became frustrated with the limitations of BASIC, I sold my Apple, bought a PC clone, and moved on to Turbo Pascal. Turbo Pascal was a real turning point for me because using it I learned how to use pointers. The first time I managed to create a working linked list, I was on cloud nine. Later, finding cheap Borland compilers to be irresistible, I picked up Turbo Prolog and Turbo C. When I heard about Modula-2, I was eager to try it since it was supposed to be the next step up from Pascal. TopSpeed Modula-2 (which started as a Borland product) was a great package with a quality IDE. Unfortunately, Modula-2 never became popular. I experimented with C, but never used it for anything substantial.
In the mid-‘90s, I began using FoxPro when I needed database capability. I still regret that Microsoft, after acquiring FoxPro, kept Access as its desktop database. Because even though FoxPro was the better product, it was allowed to die. For the 1917 EHR project, I coded the demographic module in Visual Basic and the rest of the EHR was coded in C#/.NET by my team. Java and PHP also found their way into a few smaller projects. That, in brief, is my programming pedigree.
Recently, when the programming bug bit again, I started researching languages and development environments. What I found amazed me! The open-source movement has produced so many top-notch tools that it is hard to believe they are free. After looking around for the last few months and considering all the possibilities, here is what I have decided to investigate.
I’m already familiar with C#, having used it in 2005 when trying it out for a project bid. C# has evolved quite a bit since then. It has a great IDE and many new features. It will be my main object-oriented programming language. Since June, I’ve made good progress, so I’ll deinstall my Express editions and move up to Visual Studio Professional and a full MSDN subscription.
I have three desktop computers and a server, only one of which is being used. At least one of these will be converted to Ubuntu Linux and become my Python workstation. I have never worked with Linux and I look forward to learning its features. If things work out I’ll give Django a spin. I chose Python over Ruby because of its increasing use in scientific programming. I will use Python mostly for experimenting with algorithms.
PHP made it on the list purely for pragmatic reasons. Increasingly, I use and recommend both WordPress and Joomla–knowing PHP is becoming a necessity.
At some point, I hope to have time to play with more exotic languages such as Scala, Clojure or F#. I still have a fondness for Prolog and I was delighted to discover that there is a free version for Windows that is the great-great grandson of Turbo Prolog.
It is hard to know where to get started. Most likely, I’ll use the same approach as in the past when learning new languages. That is, create a small, but representative project and replicate it across each toolset. First, I will work on my OOP programming chops by creating a desktop application using C#. I will use this project to start exploring design patterns and object oriented analysis/design. Next, I will attempt to migrate this to the web using ASPNET MVC. Finally, I will try to move the application to either PHP or Python on the Linux machine. It will be interesting to see how much of this I am actually able to achieve.
In doing all of this I hope to accomplish two goals. First, I want to bring my coding skills up to date and get a better understanding of current software design methods. The second goal is more long-term and exploratory. I hope to use the skills I develop to test a few ideas that I have about EHR design and clinical decision support algorithms. If all of this works out, I may try my hand at another little EHR project in a year or so. Needless to say, I am more than a little excited to get started!
I’ll keep you posted…