HomeOff TopicA student asks “what computer language should I learn?”

Recently I was helping someone go through the process of considering what development tools must be present in their resume to obtain one of those mythical high paying, but easy to find, careers in IT. Although some developers focus on a single set of tools throughout their career, it is far more likely that knowing a number of development languages will be necessary. Once a person has “mastered” one tool and has come to an understanding of how computers do their thing, it is quite a bit easier to learn another tool to address a specific need.

A changing environment

Over the years, we’ve seen the environment change and that has had a significant impact on what computer language is selected.

At one point, machines were very, very expensive and quite limited in their capabilities. At that point in the history of IT, the goal was getting the most out of available resources even if it meant that the tools were fiddly, difficult to use and difficult to learn.

People cycles were relatively inexpensive and machine cycles were very costly. The tools themselves had to work with limited resources. Different languages, each based upon a different philosophy, were created to help developers.

Now, systems are very inexpensive, quite powerful and staff-related costs are a much larger percent of the overall IT costs. That being said, there are still many different tools, each designed to address a different set of needs.

Some tools are designed to support the creation of apps for intelligent devices. Others are designed to create the front-end of Web-based applications. Still others, often having a deep historical background, are used to create high-performance back ends that support transactional, database, or Big Data workloads. I’d have to advise a person to first consider what he/she is interested in creating and then selecting the proper tool for the job.

In ancient times

I remember working with a small Honeywell machine (in the era of the IBM 1401 and early System 360 products) that executed on the order of 200,000 instructions per second and only had 24 kilobytes of internal storage, and 6 megabytes of disk storage to support all of the computing needs of a hospital. It was the size of 3 full-size refrigerators and required a special 400-volt power supply. At that time, machine resources were very scarce and developer time was plentiful and relatively inexpensive.

If we consider this environment for a moment, my mobile phone offers tens of thousands time more processing power, sports a multi-core processor, multiple gigabytes of memory and storage and fits in my pocket. No refrigerator sized machine that requires a huge power supply here. My smartphone runs on batteries.

Neither the operating system I’m using today nor the applications that support my day-to-day activities would even fit in the old computing environment. They are simply too big and require support of special graphics and networking capabilities that were undreamed of back then.

The hospital’s development team used Easycoder, a machine-specific assembler that consumed only 4 kilobytes of memory, to develop very low-level device drivers and simple utilities that were needed. Since the machine was very primitive by today’s standards, it was fairly simple, albeit very tedious, to develop the code to support a new printer or a utility to transfer card images to tape or disk. Since we didn’t need to do that very often, I found myself “owning” the Easycoder manuals and, thus, the assembler development and support.

A FORTRAN compiler that consumed 16 kilobytes of memory was used to create numerically intensive computational programs. Several members of the staff knew how to use FORTRAN. This version of FORTRAN, by the way, was extremely limited so that it could fit in the memory available.

A very early COBOL compiler that also consumed 16 kilobytes of memory was used to create the hospital’s business applications. Everyone knew how to work with COBOL.

A very simplistic RPG compiler was used for applications that produced various types of printed reports for management. You know, the type of programs to answer the “how many sheets did we wash last month?” type of questions. One of the Doctors had learned how to develop RPG reports and would come by to “barrow the computer” from time to time.

How I would have answered the “what programming language” question at that time would have been COBOL, FORTRAN, RPG and, possibly, the form of assembler used by the organization’s computer.

Fast forward to today

Now, developers are facing the requirements of many tiers of computing systems including the following:

  • Intelligent devices (smartphones, tablets, and a ever-growing assortment of other types of devices)
  • Laptops and PCs
  • Workgroup servers
  • Departmental/Remote Office/Branch Office servers
  • Business unit servers
  • Enterprise servers

It is quite possible that each type of device is based upon different machine architectures, runs different operating system(s) and applications are developed using different tools. The environments may be hosted on the physical system itself or in a virtual environment. The systems might reside in the enterprise’s own offices or be housed in the data center of a service provider.

Applications are seldom monolithic. Today they are built upon distributed services that may execute in a number of places and might even move from place to place based upon system loading or failure of some IT resource.

Suggested rules of thumb

Today, I’d suggest that the upcoming developer consider their interests. The best tools for apps for intelligent devices are different than tools for back end services hosted on enterprise servers.

Many online resources are available to help the budding developer including the following: Alison.com, Codeacademy.com, Lynda.com, Microsoft Virtual Academy (mva.microsoft.com), The Odin Project, The Web Academy and many others.

Proponents of Web application development push PHP, Python, and Ruby. Back end developers suggest Java and venerable languages such as C++, C#, and Java. There are many opportunities for COBOL, Fortran PL/I and even RPG developers.

As with many things in the world of IT, there isn’t a single right answer for everything.

Comments are closed.