Google+ Badge

Sunday, June 3, 2012

Programming then and now


Is programming getting harder? I am not sure if the actual art of programming is getting harder but user expectations are growing so quickly it is much harder for a single programmer to keep up with all areas of expertise.

Let’s set the way back machine to the land of terminals. Your user got a color choice of white, green or orange and maybe they could toggle the foreground and background colors. Basic operation was CRUD – Create, Review, Update and Delete. You picked from a menu and acted on one item at a time. Screens appeared and you typed in data probably in all uppercase. Everything was done in 80x25 all text. If you needed more room you added another entry screen.

Next up we tapped into the PC as a smart terminal. That gave us more colors. Everybody stuck with 80x25 for a bit but some ventured out to 80x50. You could color menu items; required items could have a label in red etc. Still looked like a terminal in general.

The GUI came into play. Everyone tried to make each dialog box look like a terminal window at first. Then things started to change. You could have a list box of data and scroll through it. Not everything had to fit the physical screen. Not only did you have colors but you had images. The mouse drove things but most still used it just to click on buttons or to quickly get to a certain control on the form. Next tooltips, right button mouse menus and lots of custom controls started to appear. People also went nuts with fonts doing bold, italic, 20pt, etc. to make things nearly unreadable. Various mouse clicks came into play. Double click to add from this list box to that one. Drag and drop within an app became required and users started to demand drag and drop between apps. The clipboard was a cool place to put things to save on typing.

Once people got used to the GUI they wanted it to do everything for them and if one program did it they expected all programs to do it. I want spell checking anyplace I can type words. Drag and drop should always work. I can copy anything I want to the clipboard. If you want a patient name here I better be able to create it right here by bringing up the patient create dialog. When I search on something I should not just have to scroll through a huge list but I want to start typing and have it narrow down my selection. What you only narrow by things that start with what I type? I need it to find the text anywhere within the data! I want to export all my data, wait expect for that column. Why don’t you remember the last thing I did every time I come into this dialog box? I want to import an image and have it automatically do OCR and pull out the text. Hey, all I did was reorder fields on this form and now the OCR is doing it all wrong! How come I can’t see my contacts here? What about my web browser favorites?

Our current platform is the smart phone and tablet. Now they expect to hardly type anything. It is a data consumption device. But they want to display the data in a very pretty manner with all sorts of swiping gestures that should be natural. What happens on single tap, double tap, swipe left or swipe up? The screen is back to tiny, really back to the 80x25 days in a lot of cases. But the screen can be bigger. A tablet is a PC screen again so just porting the smart phone version annoys that group of folks. Touch screen devices have cameras and people want to use them. Just when we were elated with tons of RAM to store everything so they can search on it willy nilly we have been told you barely have any memory to play with again.
When you write a program you might have to do four versions of it.

#1 A full blow PC app with every bell and whistle allowing you to manage all the data with ease. Might need to run on a Mac too.

#2 Slightly trimmed down Web version available under every browser under every OS for data access on the go.

#3 Smart phone version that has access to all the data, is super pretty, supports the camera, speech to text and all sorts of touch processing

#4 A tablet version that does everything the smartphone does also supports shrinking / expanding sub-screens so you can not only see where you are but where you were. Still fit all of this into as tight as memory as you can.

As you can see a single programmer has to know and do a lot more than ever. Where once everything was text now there are text and graphics. May the user could hit a predefined function key but now you have a master menu item, right mouse button menu item, accelerator keystroke, mouse swipe and finger swipe to access each event. You must support data in as many formats as possible for Drag and Drop, export and “hey someone deal with this” such as tapping on a web or email link. You need to interact with other programs and their data that may or may not be on the device.

It seems similar to the games industry. At one time a single developer or maybe two could write a game it now takes a team. Now you have sound, graphics, core game engine and menu system folks. We are seeing a similar need for UI specialist, data export folks, core OS interaction and many others.
On my current projects I have worn every hat in the list. I wrote both the iOS and Android versions. I did all the graphics and designed all the screens and touch interactions. I wrote a custom control for a menu system that appears when you tap on certain items and did all the DBA work creating 25 tables under SQLLite on each device. I am at a very small company so this is pretty much expected. At my previous job I had a User Experience team to handle the screen layouts and all the graphics. I had a design team to decide on how things in general should work. If I had a question about how something should look or operate I pretty much knew who could answer that question.

For the main Java application we wanted to add export functionality. By the time I was done with that it was over 1,000 lines of code that I wrote in a just two days. Why so much code? The export part was easy, just take the data and write to disk in CVS format. But that is not what a user wants. They need to pick every field they want exported, the name of the file, should I append the date of the data to the file name, where should the required appointment ID go, how to write out multiple lines for multiple associated physicians. What if they export different data for different needs? I allow you to name your format and save as many named formats as you like. I need to load / save this to the server. Then we needed permissions for creating named filters but if you don’t have that permission you need to be able to do ad hoc exports and save that locally and not on the server. It is all up and running but there was a ton to do and think about. We want to release on Monday so I had to get it all coded up and ready for QA to give it a solid once over. This is what you do working for small company on a monthly basis.