Is Building Apps for Everyone?

picture of Harry KellerBy Harry Keller
Editor, Science Education

[Note: This article was prompted by an email exchange initiated by Lynn Zimmerman on 1.13.13. -Editor]

This sort of question seems to be on my desk daily in many different guises. I began writing software in 1960 and never really stopped.

There’s no simple answer. Also, the “philosopher’s stone” of software, a way to create software without programming, has been sought after for decades without result. There are some teaching languages for elementary school that are like that but are too limited to be of much use in the real world. Do not expect to be able to drag-and-drop an “app” soon even though Eclipse for Java, and other GUIs (graphic user interfaces) for other languages, do something like that for the UI part of an application. It takes more to make the software really do useful work for you.

java

For the novice who’d like to have an application, you can use HTML5 and Javascript as long as your program is relatively short, maybe under 100 lines. For comparison, Smart Science® explorations uses a 20,000-line client-side Java program with around 20,000 lines of Java on the server and a substantial SQL database. Once you exceed 1,000 lines, Javascript begins to break down, and you must use something more robust. (Actually, I’d stay away from Javascript programs longer than two pages, about 150 lines.) The advantage of this approach is that your program will run essentially anywhere, including those tablets.  

Even using HTML5 and Javascript will require that you learn HTML plus the HTML5 enhancements plus CSS plus Javascript. Each of these is a challenge for those without very strong motivation and without previous software experience.

As originally coined, the word “app” in modern parlance refers to a small program written for the iPhone. This coinage has extended to all smart phones and tablets such as the iPad and various Android tablets. The companies responsible for these have severely limited what you can develop for them. You must write natively for them, and you have to learn the specific language and API (application programming interface) for each individually, and they ARE different. Few people have the time, inclination, and talent to do this well. The HTML5 alternative is available but won’t look as slick or peform as well.

An app is not really an application or an applet (a term that only Java seems to use). It has taken on meanings that I did not expect when I first encountered it. Mostly, it means a modest software program sold through an app store, but that meaning has been stretched and bent a bit as you’d expect in such a rapidly expanding and fluid area.

Professional software development is a discipline as is any engineering profession. The big difference is that you can practice this profession with a very small financial investment and can learn the basics from web sites. Developing the discipline at the expert level takes the usual 10,000 hours of experience and much more if you’re to become facile across a number of software areas such as GUIs, databases, Internet communications, and so on. However, truly understanding what it takes to produce and deliver robust, industrial-strength software requires that you work in a professional development environment for enough time to pick up all of the experience necessary. During one recession many years ago, I spent three years working on contract for a computer company fixing bugs in many of its software programs. I fixed over 100 bugs on one program alone in about three months. That experience sensitized me to what exactly maintainable software should look like. Make no mistake here. Unless you’re writing a throw-away program, you or someone else will have to perform maintenance on it and possibly long after you’ve forgotten many of the details of your design.

If you’re going to write software alone, you have to be able to do so much these days: GUI art, GUI design, software architecture, back-end software design, database design, write in several languages (e.g., Java, SQL, HTML, CSS), and test and debug the resulting software. Testing software (known as QA or quality assurance) is a discipline in its own right.

Unless your software is going to be tiny, you should leave writing it to the professionals. If you’d like to have some fun dipping into software engineering, pick something small and simple and just do it. If you have a friend who knows how, that will help when you hit the inevitable problems. This friend (or online support group) should review your idea first to see if it really is small enough to serve as an introduction. I’ve often had people ask for a “simple” change to software without realizing that they’re really requesting a major overhaul. I’ve also had people ask for a “big” change that took only an hour to do. Outsiders and amateurs rarely understand the true nature of writing software. (The same is true of so many professions that look easy, even teaching.)

If you do create a native app for the iPad, it will work only there. Some modifications will be required to make it work on both the iPhone and iPad due to the different screen sizes, and it will not work at all on Android devices. Besides, writing native apps is better left to those who plan a software engineering future. Consider the HTML5 route that will also get you into website design, more generally useful knowledge. Take it one step at a time and be very patient. You might begin with a site building program. Also, take advantage of the many tutorials on HTML and Javascript available on the web. One final note: in software engineering, as in so many engineering fields, the strategy is “divide and conquer.”  Take your idea and break it down into small pieces that you can manage readily, sort of like writing a book.

2 Responses

  1. Thanks, Harry: this is most useful because it’s based on your concrete professional experience. I am – and intend to remain – just an app user, but reading your post made me wonder about a few things (not really connected):

    What do you think of the coaching Google offers Android (and Chrome) application developers via the https://developers.google.com platform, where they are also encouraged to collaborate?

    You point out the incompatibility of apps designed for one device, with other devices. But does one have to re-start from scratch to make an app available for another system, or are there some “translating” solutions?

    I’m thinking of the Tecla Access solution for people with motor disabilities, which consists of a hardware shield that translates between user’s normal commanding tools and mobile tactile device, and of a mobile app, available for different mobile OS’s – see http://komodoopenlab.com/tecla/ . The app was first developed for Android: did they have to redo it all over for iPhones and iPads?

    And then there are some very useful keyboard apps for Android: in particular the predictive A.I. Type keyboard – see .aitype.com – which now works in several languages and is a boon for dysgraphic (and blind) people. Again, would it have to be redone all over for iPhones and iPads?

    Best,

    Claude

    • Do apps have to be rewritten? That depends on how they were written in the first place. I haven’t sought out translators between iOS and Android. I have seen solutions that allow you to write once and then translate both platforms. Chances are that, if you wrote specifically for one platform and took advantage of its special capabilities, that you’ll have to do at least some new programming work to get on another platform.

      The real problem arises after development. More than half of the lifetime cost of software (often lots more) comes from maintenance. Having two sets of source code doubles those costs.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s