We have a lot of knowledge in our heads at UDig, so we figure, why not share it?

Welcome to the second installment of the UDig Brain Dig, where we pick our consultants’ brains to learn more about their profession and industry and share that information with others who are interested. Last week, we featured Matt, who offered up his insights about software development. This week, we feature Adam, Senior .Net Developer/Architect at a property and casualty insurance company in Richmond. Adam talks with us about cloud computing, work/life balance, and the warm blanket of job security.

Adam

UDig: When you look at the emerging trends in your field, what are you seeing?
Adam: Cloud computing is huge. It offers all the benefits of a data center and, theoretically, limitless scalability. You can identify a number of companies for which cloud computing is an obvious choice. For example, retail companies can scale their websites up for the holiday season without incurring year-round costs to maintain and staff a data center.

Yet the majority of companies will never face scalability issues.
Right, and for them, cloud computing is simply a data center with a different pricing model. Without a doubt, the introduction of readily available, massively scalable, massively parallel processing will impact the development space. Yet the changes it will bring are not drastically different from the changes we can expect from the direction all computing hardware is heading.

Specifically?
Processor technology. It is reaching physical limitations on how quickly a single processor can be made to function. This has lead to the introduction of multi-core processors and increased prevalence of multiprocessor machines. These systems are very good at doing many individual tasks at one time, and future high-performance applications will have to be written to leverage multiple cores. The need for efficient multi-threaded development techniques will drive the adoption of languages that are better suited to solving parallel processing problems than the traditional object-oriented (OOP) mainstays. This will bring languages like Erlang and Microsoft’s F# into wider use and that will cause more developers to learn functional programming techniques.

And once that happens?
The landscape is truly going to start shifting as a whole new generation of design patterns and best practice will need to evolve around these new tools.

So do you see cloud computing being implemented in many industries?
I think it will be a significant part of the web development space, but it is not going to revolutionize banking, manufacturing or insurance industries any time soon. Ultimately, what cloud computing has done, is equate computational throughput directly to the amount of money an individual or organization is willing to pay. Extending that analogy, money can now buy faster computational results, or in computationally dependent businesses, money can buy time.

But it’s obvious that many industries are going to leverage this technology if they aren’t already. Do you have an example?
Take the entertainment industry. It typically relies on long-running processes on dedicated systems for graphical rendering, say, for special effects or animated movies. When will they adopt cloud-based approaches to reduce their rendering times to seconds? Even more interestingly, how long after that before a company begins applying such technologies to provide dynamically created movie-grade special effects for interactive media? This is but one example, but it is certain that even more interesting applications will be created.

Seems like this could have huge impacts on research and development or modeling and simulation, right?
Absolutely. Modeling a thousand different aircraft designs to find the right one has always been time prohibitive, even if the funds were available. Now a company could simulate those thousand aircraft designs in months or days depending on how big a check they are willing to write for the computation.

What is the biggest technological problem that companies face today?
The biggest problem companies have is other companies. Once an organization gains an advantage in one way, all the others must follow suit so that they can remain competitive. This “herd” mentality combines nicely with the “survival of the fittest” economic model to ensure companies will always have new problems for developers to solve.

This competitive, feature-based arms race is a warm blanket of job security for those of us who implement the features.

Speaking of job security, what’s the best skill to have if someone plans to enter IT?
The most important skill that a developer needs is critical thinking. The better they are at analyzing problems and deducing correct action, the better of a developer they will be. Of course, this also translates pretty nicely into any field.

Therefore, it is more useful to define computer programming as a subset of engineering and to then identify what makes a good engineer.

And what makes a good engineer?
Two facts are universal about good engineers: First, they seek a deep understanding of their tools, and second, they have developed their ability to apply abstract ideas to changing real-world problems.

What’s work/life balance like for a software developer? Can one expect to work nights and weekends?
In most cases, a developer should seek to be good enough to accomplish their assigned task within their allotted 40 hours a week. If they are not able to do this, then one of two things has gone wrong: Either they are fully qualified and their employer has unreasonable expectations, or they are under-qualified and should seek to rectify that. In the case of the former, it is up to the developer to stay or go in relation to their love of money. In the case of the latter, the developer must either make the extra effort (work the overtime, finding training, etc…) to learn what they need to learn, or find work closer to their skill level. Personally, I prefer to find work where I’m perpetually challenged to learn enough, fast enough…so that I don’t have to work overtime.