Channels ▼

JVM Languages

Programming With Reason: Where Are We Going?

Rate of Change of Programming Languages

At right about this point in time (1995), Java came onto the scene and would take the industry by storm. The World Wide Web was also exploding, so it would seem that all of technology was just zipping along. But is this really the case for programming languages? After all, Java shares a lot of its philosophy and syntax with both C and C++. In fact, if you look at C++ as a meta language, Java could be considered an implementation of it. Additionally, consider how much software is still being written in C, and even Cobol, today (see the TIOBE Programming Community Index). I doubt that any of the computer technology from the eras these languages were invented are even running today, never mind used for actual development anymore.

The point is, as computer technology has evolved by leaps and bounds according to Moore's law, the rate of change in the languages we use to program them has been seemingly light-years slower. Indeed a lot has happened to programming considering the realms of Java, HTML, Ruby, Groovy, and so on, but it's still not as drastic as the rest of technology. For instance, telling someone you're a C programmer wouldn't be considered strange, but telling someone you develop on a PDP-11 would be (which is what C was invented on).

So, Where are we Going?

James Gosling once said that leaps in programming technology only come about every 10 to 15 years. Greg Bollella, of real-time Java fame, once told me that it often takes 10 to 15 for large software projects to become successful (from a vision, to a proof of concept implementation, the design and development phases, the phase where you struggle to get people to notice and use it, to the point where it's a financial success). Two independent statements that appear to be accurate when looking at history.

But what's next? Let's sum up this conversation with two points.

First, what would make you more productive as a developer? Is it the tools, the language, the speed of the computer you're using, the resolution of your monitor, your Internet connection speed? Personally, for me it's the keyboard. Java with NetBeans or Eclipse is just awesome, but what seems to slow me down is the act of typing. Typos result in a constant rate of backspacing, and even account for a percentage of bugs in my code -- honestly. Even copy-and-paste operations are too tedious. And how many keystrokes and how much time do you spend traversing a long code module, or going back and forth between different modules via the keyboard? I would guess, way too much.

The solution to this isn't just a better editor or improved typing skills -- it's a paradigm shift in how we develop software that begins with the language itself. There must be a better way to organize code constructs, ones that require less typing, less searching, less context switching, and less guessing. I can't profess to having the solution to this problem, but I do have some ideas.

The second point is that it's important to be a geek. There's a true need to keep young people interested in the internals of the technology around them, and to not take it all for granted. Ironically, today's young people don't seem to have an issue with typing, given the popularity of texting. However, they have come up with ways to improve it and enhance communication. Perhaps we can learn something from this; that an enhanced form of typing with touch interfaces, auto-correction, and shortened word and phrase spellings, can improve issues around data-input for programmers as well.

The Computer Learning Center

I have a vision to create what I call "The Computer Learning Center", where people of all ages can come in and explore technology in ways that they may not have thought of before. I envision having areas set up with development environments installed and ready to use, including mobile app development such as Android and iOS, complete with devices to run them on. Computers of all types, running Linux, Mac OS X, and Windows, would be available for people to work with and explore. I would have loved to have a place like this available to me to explore when I was younger.

The main goals would be learning, and accessibility. Included with these computers would be interfaces for people who have disabilities of different sorts (physical, cognitive, blindness, deafness, and so on). There would be workshops for people who want to learn about any subject, with experts volunteering some time when they can. There would also be specialized equipment to help people explore computer art, digital publishing, audio processing, and other areas that require powerful (and expensive) hardware and software to run.

This grand vision starts with each computer professional, who has a chance to pass on their love affair with technology to those around them. Simple, small acts, such as donating books on software development, or explaining how the Internet works to a classroom of middle or high school kids, can make a huge difference. I go back to the TRS-80 computers installed in my local library years ago. Just placing it on a desk for me to walk up to was enough to launch my passion and career in technology. This is how you help advance programming in the future.

Related Reading

More Insights

Currently we allow the following HTML tags in comments:

Single tags


<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags


<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

