Monday, April 23, 2012

The Changing Face of Programming

Below is an article I wrote on trends for developers. It is not all that I would like it to be, but it is a beginning.

Here is a link to a PDF of the article: Programming Report

When you finish the article I would appreciate it if you can complete a very brief survey after reading the article

Overview

Developers are used to change. It is part of the job description: new tools, new languages, no problem. But of late, it seems, changes have been more substantial. Not only tools, but platforms and paradigms are in flux. There is the drive to the cloud. Companies are beginning to turn to the cloud to help with the burden of supporting their own server infrastructures. Consumers are storing more of their data on the web, drawn by the convenience of having their books, music, and files available wherever they are and whatever device they are currently using. Further, the explosion of mobile devices such as the IPhone and the various Android phones have created a new class of program called Apps. The sudden rise of tablet computing has further expanded the scope of these apps. Finally, an increasing number of devices offer programming opportunities. GPS devices and devices embedded in dashboards and household appliances are becoming more common. These trends are not isolated from each other. In fact, they are all aspects of a larger trend: the movement away from the desktop computer to more mobile, more specialized platforms and devices. Many of the tools and concepts are the same, and all of them require a strong foundation in programming fundamentals. The question for IT instructors and their students is what skills are required to take advantage of these new trends. What of the traditional programming concepts and practices still apply? What additional concepts and skills should they acquire?

This report is not going to focus on all the convolutions associated with the adoption and expansion of these new technologies. There are complex arguments about whether moving to the cloud is actually cost effective for companies. There are many discussions about the nature and future of apps and what the effect of Windows 8 will have the markets. Strong opinions are expressed on all sides of these issues. There are also the facts, the numbers of cell phones using Android vs. IOS, the numbers of companies adopting cloud strategies, the specific successes and failures of these strategies, etc. This report is going to focus only on the implications for developers and specifically on the implications for IT students who intend to become developers.


Programming For the Cloud

"The Cloud" is essentially equivalent to the Internet. Specifically, using the cloud means using the Internet to provide functions normally associated with a personal computer: storing files, accessing applications, accessing company data and services. There are a least three distinct facets of cloud computing. On the consumer side using the cloud means storing personal files such as music and photographs on an Internet server. It also is where most of the apps they use on their phones and tablets store their data. For companies using the cloud means outsourcing applications and company data to another company's Internet servers. From the developer's point of view, the cloud represents a programming paradigm, and sets of tools for creating applications and accessing cloud stored data.

Consumer and corporate adoption of cloud computing has followed a complex pattern. Two large issues stand out: security and availability. For consumers the security issue is essentially one of privacy. Can they trust the companies that provide storage to keep their files and information confidential? To what extent will they allow these companies to use that information to support directed advertising and business intelligence research. For businesses the security issue is even more central. Can they trust the cloud providers to protect their core business secrets and data? Can they trust the providers to back it up and have complete disaster management plans in place? This touches on availability as well, can a company trust that its data will always be available when it is needed? There have already been a couple of high profile failures of cloud services. For a consumer, not being able to access a music file is an inconvenience, for a company the inability to access its data can be a disaster. There is also some question of whether Cloud computing is actually cost effective for companies, and, if so, what specific uses of the cloud make financial sense. All these caveats aside, though, the cloud is likely to grow increasingly central to computing in the foreseeable future.

For developers, and for IT students who intend to become developers, developing for the Cloud and leveraging resources stored on the cloud will become increasingly important activities. The question is what skills do developers need to work with the cloud? Two areas stand out: web development and service oriented architectures.

Basic Web Development

Web applications are still a major component of cloud computing; interfaces for saving and retrieving files from the cloud to actual business applications that allow to create documents or access services. Developing and maintaining these applications will require most of the traditional tools of web:


• HTML, XHTML, especially HTML 5
• CSS
• Some knowledge of IP and http protocals
• JavaScript, especially JQuery
• Ajax
• Php, ASP.net with c#, and perhaps other scripting 
        languages like Python
• Some knowledge of SQL and database design
• A good knowledge of secure data access and development



Service Architecture

Much of the data on the Cloud is accessed through web services. These services offer a front end to data stores without the client having to know where or how the data is kept. Service Oriented Architecture (SOA) focuses on the development of these services and how to aggregate existing services into applications. Developers should know how to incorporate these services and how to develop their own. Again the web development skills listed above are relevant.

There are also platforms for Cloud Development. Microsoft has its Azure development environment. There are also several other IDEs such as Cloud 9 and eXo. Google, Amazon, and Oracle also have cloud development tools and APIs. The Amazon Cloud, it should be noted, is extremely easy to utilize and, for a student or developer, quite inexpensive (often only a few cents a month). Anyone with an Amazon account can sign up for a year’s free service and have a Linux or Windows server created, configured and set up in the cloud.(Links to these and others are listed at the end of the document.)

Secure coding techniques are especially critical in developing for Cloud based services and applications.


Apps (Mobile Devices, Tablets)

The term "app" is short for “application”, but it has come to have a special meaning when applied to mobile devices such as phones, mp3 players and tablets. To some extent, these apps, like the term, are abbreviated. They are streamlined to run on the limited resources of a phone or tablet. That isn't to say that some of them aren't quite complex, but no matter how sophisticated, they must run within the constraints of the device they are on.

Apps have become big business, just as a decade ago every company had to have a web site, now every company has to have an app on your phone. Companies are advertising for programmers to create apps. Typically they want people who can program for Apple's IOS and also for Android. (Links for some app development job listings are provided at the end of the document.)

The financial model for these apps is still developing. Many are free. They either generate no revenue for the app creator or they generate revenue by incorporating advertisements. Company based apps are usually free, the app itself being a form of advertising. Many other free apps are "lite" versions which encourage you to upgrade to a more feature rich version for a price. Some apps are sold at a 99 cent level. If an app takes off and is downloaded often enough this can add up to significant revenue. Other, usually serious productivity apps, such as Quick Office, charge comparatively large fees for download. But even these fees are miniscule compared to the prices of comparable software for the PC. An expensive app might be priced around 25 dollars, whereas its pc equivalent would be hundreds of dollars.

For a student, then there would seem to be two opportunities. One would be to work for a company that wants to build and distribute apps to support its business customers and processes. Another is to build their own apps and try to sell them in the app stores.

Typically the industry often wants the same app developed for all platforms, or at least, at this point for both Apple’s IOS and Android.

There are several unique aspects to phone and tablet development. Some of these include:


• Location awareness via the GPS services built into the 
        phone or tablet hardware, 
• Web, cloud enabled. Data is accessed from 
        and stored on the cloud. 
• Wireless, blue tooth and 3G or 4G connectivity 
• On phones apps must surrender focus to a phone call, 
        this can involve threading and saving in background
• Memory and storage limits 
        (much less of either than on a laptop or PC)
• Processor limits (typically slower processors)



IPhone, IPod, IPad

The apple products use Objective C as a basis for their development. The tools for creating Objective C applications are only available on Apple’s Macintosh computers. Further in order to test a product on an actual device, a developer must join the Apple developers group (free for students, but otherwise for a fee). Then they must upload the program to the developer’s site and download it to their device.

Despite the difficulties, currently apps for Apple Devices—the IPhone, IPod and IPad—have the most potential and are the most sought after.

Android Phones and Tablets

Currently, Android devices are very competitive with Apple devices on the market. Android uses a subset of Java and Xml for developing apps. Android’s chief advantages for developers are the inexpensiveness and availability of its tools. Both Java and the Android SDK are free and can be incorporated into free, but robust programming environments such as Eclipse and the Motorola programming environment. One can also copy apps directly from the computer to a device for testing.

The disadvantages of Android are found in the variety of versions of the operating system in simultaneous use. It is hard to create an app that is guaranteed to work on all devices. Also distribution is less centralized and incorporates less quality control than the Apple products. The SDK itself is not entirely stable. Frequent bugs are encountered.

Windows Phones and Tablets

Windows phones offer an opportunity to develop apps for an operating system that currently doesn’t have many apps—an opportunity to get in on the ground floor. Currently, phones with the Microsoft OS are a distant 4th in commercial sales (behind Apple, Android and Blackberry ), but with Nokeia’s now manufacturing Windows’ phones and Microsoft’s new Windows 8 operating system (see below) , the Window’s platform has the potential to grow enormously.

Windows Phone apps are developed using C# and Xml, specifically XAML (was Silverlight) and XNA (Xbox). They can also be developed using HTML 5 and JavaScript.

Blackberry Apps

Blackberry is fading from the consumer phone scene. They recently made the decision to focus on Commercial business customers. Like Android, Blackberry apps are written mainly in Java.

HTML 5 and Cross platform development

It is possible, with HTML 5, CSS, JavaScript and a platform like PhoneGap (http://phonegap.com/) to develop once and deploy on all platforms. The applications developed this way run in the device browser though without the address bar or any browser toolbars. Because of a JavaScript add in, these applications can access most of the native services of the OS.

The advantages are obvious, especially for someone who is more familiar with Web Development than with Java or Objective c. Design of the application is just a matter of html and CSS. JavaScript is used to tie into the native API. Development times can be faster and one can develop for IOS, Android and Windows phones all at once. In the case of PhoneGap, a developer can send the raw files to PhoneGap and they will return them with an executable for each platform.

The disadvantages are more subtle. The html platforms typically are a little behind the primary phone developments, so not all the latest features of the operating systems and devices may be available. Because the HTML5 apps run in a browser control, essentially as a web page, they may not have the appropriate look and feel of a native app. It is entirely up to the developer to implement this in CSS. Additionally, especially for complex apps, the fact that the app runs in a browser control may affect performance to some degree.

Which approach to take, native code development or HTML5, depends on the nature of the app being developed. There is a lot to be said for the HTML5 approach, especially for simpler apps. For more control, greater extensibility and guaranteed access to the system, native coding is better.


Windows Eight

Windows Eight is Microsoft’s attempt to create an operating system that is consistent across all platforms. It should look and behave essentially the same whether on a desktop, laptop, tablet, phone, or embedded device. All will share the same interface called “Metro,” which can be manipulated by mouse, touch, voice and possible gesture. Metro applications are deeply integrated with the cloud and social networks. Opinions vary as to the potential success and effect of Windows 8. Some see it as the paradigm for computing in the near future and others see it as a belated attempt by Microsoft to make inroads into a market already controlled by Apple and Android. But whatever the ultimate outcome, Windows 8 will be on millions of computers and developers should grow comfortable with developing for it.

In its current form Windows eight has two development targets. A developer can develop for the Windows 7 desktop, or for the Metro applications native to Windows 8. The desktop applications will not transfer to tablets or phones, and it is likely that Microsoft will phase out the Windows 7 compatibility in future versions of the operating system. Therefore it is prudent to focus on the new Metro interface.

Programming for Window's Metro can be done with a variety of tools. A developer can use HTML 5 and JavaScript, he or she can use c# or VB with XAML, or a developer can use the XBox XNA tools (also c# and XML). Visual Studio is the default developers platform, though Microsoft has also introduced the Web Expression IDE which provides a less code centric way of producing sophisticated applications.


Social Networking

Existing Social Networking does offer some opportunities for the developer. These opportunities are really of two kinds. One is to develop secondary apps such as games and services that can be accessed through a social network like Facebook such as Farmville. These games are typically created in Adobe’s Flash platform. A second opportunity exists in data mining, in creating programs that collect and analyze information about the users of social networks.

The more likely interaction with the social networks for the app or web developer is the need to incorporate social networking into their programs. This can be as simple as linking to Facebook or Twitter or as complex as developing new social networking tools specific to their app or site.


Device Programming

By Device programming I am referring to devices other than phones and tablets. These devices are numerous and becoming more so every day. They include things that are common now like GPS devices. But there are many others. Cars increasingly have computer applications built into their dashboards (as well as the code that is now necessary for their engines to run). Household appliances may soon have computer code that will link them to phones and tablets.

Currently, the language of choice for these devices is Java. That may or may not change with time.


Conclusions

As noted at the beginning all these topics are related. Apps use the Cloud. The Cloud and app both incorporate the web. Social networking is ubiquitous throughout it all. Many of the skill sets required are also the same.

Basic programming skills are still required. Nobody can approach the more advanced features or make use of these development opportunities who does not have a good foundation in programming fundamentals. Below is a list of some of those skills in no particular order:


• One still has to master declaring variables, 
        writing statements, using selection and repetition  
        structures, creating and accessing arrays, etc.. 
• In addition, one needs the object oriented concepts. 
        One must understand how to instantiate and use objects. 
• One should also know how to extend them through inheritance. 
• Using collections such as lists and hash tables is valuable. 
• File IO, especially with XML is important. 
• Understanding event driven architecture and how 
        to respond to event calls is critical.
• Algorithms and program planning--UML
• Security requirements. How to write secure code


In addition to these skills a developer should also have a good grasp of:


• Service Oriented architecture, how to create and 
        consume services
• Threading, separating processes for background operations
• Forms and user Interface development
• Database structures with some SQL (for SQL lite in 
        Android and for developing services that talk to databases)
• Code and memory optimization 
• Networking protocols particularly IP, http, https.
• Incorporating social networking


Notes and References

ICT Trends Book, Center of Excellence for Information and Computing Technology,Bellevue College. Bellevue, 2011

Cloud Computing

Wikipedia:
http://en.wikipedia.org/wiki/Cloud_computing

PC Magazine
http://www.pcmag.com/article2/0,2817,2372163,00.asp

IBM
http://www.ibm.com/cloud-computing/us/en

Wired

http://www.wired.com/cloudline/2011/12/moores-law-cloud/

MSNBC (on cloud computing and other trends)
http://gadgetbox.msnbc.msn.com/_news/2012/01/05/9956634-ces-2012-preview-top-7-mobile-and-computing-trends-to-watch

Cloud Service Providers

Microsoft
http://www.microsoft.com/en-us/server-cloud/readynow/

Amazon
http://aws.amazon.com/ec2/

Google http://www.google.com/apps/intl/en/business/index.html#utm_campaign=en&utm_source=en-ha-na-us-bk&utm_medium=ha&utm_term=%2Bgoogle%20%2Bcloud

Apps

Articles

http://www.marketwatch.com/story/the-app-economy-is-creating-jobs-2011-09-20

http://www.crainsnewyork.com/article/20110323/SMALLBIZ/110329951

http://www.wired.com/magazine/2010/08/ff_webrip/all/1

Article from ReadWriteWeb: http://www.readwriteweb.com/mobile/2010/09/native-apps-account-for-half-of-mobile-internet-traffic.php

Developers Sites

Apples IOS
Development http://developer.apple.com/library/ios/#referencelibrary/GettingStarted/URL_Tools_for_iPhone_OS_Development/_index.html#//apple_ref/doc/uid/TP40007593

Android Development http://developer.android.com/guide/topics/fundamentals.html

Windows Phone Development
http://msdn.microsoft.com/en-us/library/ff402531(v=vs.92).aspx

Blackberry Phone Development
https://bdsc.webapps.blackberry.com/devzone/

Phone Gap
http://phonegap.com/

2 comments:

  1. With the expertise of latest technologies, thorough IT process knowledge, excellent skills and efficient development teams, we provide comprehensive software and web development services
    HTML5 Development company

    ReplyDelete
  2. The demand for HTML5 application development is rising as many clients are waiting for their sites to get it upgraded by HTML 5developer. Also there are many HTML5 developers who can offer the services of HTML5 application development.
    HTML5 Developers

    ReplyDelete