If you haven’t noticed, software development faces some severe challenges right now. Serious problems face us – not in some hypothetical time-frame, but right now. And I am sorry to say that the tool vendors and thought leaders we count on are letting us down. They’re focusing on other matters entirely.
I don’t mean to pick on Java, but that’s the example that comes to mind. A year from now Java will support lambda expressions. The big brains directing the evolution of what is arguably the industry’s most important language surveyed the computing terrain and decided the best thing they could do for developers was add syntax for lambda expressions.
Are you freaking kidding me?
To be fair, the Java team is also grafting modularity-control features onto Java via the Jigsaw project, and these features could be of real benefit to Java programmers. But still…lambda expressions?
Here are the things we developers ought to be focusing on.
Security
Yes, I know. I’m a broken record on this issue. But we don’t face a bigger challenge, and the days of shrugging off security as an operations concern are over. If you have a wireless router in your company, a bad guy in your parking lot can have access to your network in two or three hours using off-the-shelf tools and a $350 laptop.
You think your firewalls and strong passwords are sufficient protection? You’re dreaming. The U.S. military spends billions defending its servers, and last week it told the Senate Armed Services Committee that these security measures have failed. The military now assumes that hostile forces have network access, and it is shifting its focus from controlling access to protecting data. “[W]e have to go to a model where we assume that the adversary is in our networks,” said Dr. James Peery, director of the Information Systems Analysis Center at Sandia National Laboratories. “It’s on our machines, and we’ve got to operate anyway.” Anonymous has demonstrated it can compromise pretty much anyone it targets. If your network hasn’t been compromised yet, it’s because the bad guys haven’t selected you as a target yet. When they do, your security measures will fail.
This isn’t just an operations problem. It’s everyone’s problem.
Development processes
The Agile movement is popular – and why not? It’s a feel-good set of aesthetic principles unencumbered by a development process. XP, Scrum, and Kanban let us throw off the chains of heavyweight development methods and get back to coding.
This is no way to achieve reliable, repeatable results. It’s de-evolution in action, a return to the days of late-night hack attacks and reliance upon the heroic contributions of uncommonly talented superprogrammers. Too many companies are betting their futures on this family of untested, unproven non-methods.
CASE tools and formal methods were no fun – I get that. They sacrificed flexibility and improvisation and even personal fulfillment for reliable, repeatable results. They weren’t the fastest way or the most enjoyable to get from Point A to Point B, but they did guarantee you’d get there. You can’t say that about Scrum.
Platform fragmentation
It was a big deal when we went from building Windows apps to building net-enabled apps that split program logic along the well-established seam between lightweight clients and back-end servers. But that was nothing. In the very near future, we’ll be asked to deliver apps that run properly on arbitrary hardware with dramatically varying specs, all running different operating systems. It’s an unprecedented challenge for the software development community.
The traditional approach has been for IT to set up a list of approved hardware and software platforms, and thereby to limit the demands on application developers. But that discipline has broken down. You can’t keep your company’s workforce from bringing in their new tablets and smartphones, and from demanding that these devices be given access to corporate apps. The security concerns alone are daunting – how do you keep your network secure when the CEO misplaces his iPad in an airport lounge on another continent?
And don’t get me started on cloud computing. The security implications alone should give you serious pause. Rearchitecting your apps may not take as long as you fear, but the split between your resources and your cloud vendor’s servers will remain brittle. I lived in San Francisco long enough to know you don’t build something important on a fault line.
Inadequate tools
If I read the surveys correctly, you probably don’t remember the transition from DOS programming to Windows. I remember it well – I was at the heart of it. The programming tools and languages that had served us well in the single-tasking, character-mode environment were inadequate to the demands of GUI programming. The industry responded with visual programming environments, object-oriented programming languages, application frameworks, and plug-in reusable modules. Eventually these tools allowed us to cut the challenges of Windows programming down to size.
What tools and languages are addressing today’s challenges? Python? Ruby? C#? Honestly, they all seem to be addressing niche problems. It seems to me we’re being sent into this battle empty-handed. Or am I missing something?
Yes, these state-of-the industry rants are supposed to be posted in December or January. I’ve broken one of the unwritten laws of tech bloggers, and the authorities will no doubt crack down on me. But I had to get this off my chest.
Am I the only one who has noticed that we’re in deep, deep trouble?
Web recommendation: The evocative phrase “Internet of Things” always catches my attention. Here’s a rare substantive discussion of what the term refers to, by Google’s Vinton G. Cerf, a U.S. Medal of Technology recipient, ACM Turing Award winner, Japan Award winner, etc., etc. J.D. says check it out.
J.D. Hildebrand has written hundreds of articles for dozens of publications and online communities dedicated to software development. He has rediscovered the joy of peanut butter.