jump to navigation

Five trends that every software engineer ought to know December 17, 2011

Posted by 3561martinr in Software Engineering.
trackback

The following are several trends which software engineers should be familiar with to ensure their success and to remain relevant in the rapidly changing field of computer technology.

Big Data

An important trend covered in the Deloitte paper was that of real analytics. They mentioned that data volumes double every 14 months. For the software engineer, the problem is not how to come up with more data. The problem is how to find something useful in those big data sets using a reasonable amount of time and memory. To address these issues, software engineers need to have knowledge of parallel algorithms, data reduction techniques, and efficient data representations. Investing time learning about algorithms and techniques in these areas or implementing them would be useful if not just plain fun. Gaining familiarity with big data algorithm packages such as Apache Mahout, or Netezza through experimentation or just reading up on them could be beneficial should the opportunity arise where a big data set must be dealt with.

Mobility

Another key trend in software is that of mobility. This is evident by the popularity of devices such as smart phones, tablet computers, eReaders, motor vehicle systems, appliances, medical equipment and more. Users demand mobility so developers need to understand the fundamental challenges in designing for these types of devices. These limitations include limited memory, storage, displays, power, connectivity issues, and security. Even when developing non-mobile applications, designers should consider ways to facilitate an easy extension to the mobile market. One approach is to use design patterns which allow the easy addition of a mobile device view. Another consideration is for an organization to offer resource intensive procedures as a remote service to users with thin client devices.

Security

Security is not a new trend in software, but rather an evolving one. One of the most important aspects of security is that, like quality, it needs to be built into the design. This is difficult given the sheer number of the threats and that new threats arrive daily. Even so, designers need be educated on past, present and future security issues for the type of application to be developed. This knowledge should be used by requirements engineers, architects, designers, developers, and testers to evaluate designs and consider the security implications of all development decisions in an effort to limit vulnerabilities and mitigate risk.

Agile Development

Another trend which has been around for a few years is the use of agile development methods. Agile development is an iterative approach in which small teams complete a series of software life cycle executions each lasting just a few weeks. The result of each iteration is a working and fully tested executable software artifact. This gives the customer an opportunity to test the software at the end of each cycle to give feedback about what is correct, incorrect, missing, or misunderstood in terms of the their wants and needs.

One impact of the agile incremental process is the reduced likelihood of project failure. If there is a problem with the original requirements or if the customer’s needs suddenly change, the issues get dealt with early in the process and fixing them can be done in a matter of days or weeks. With other development methods, it may be months before issues are discovered at which point fixing them can be a monumental and expensive process.

Another impact of agile practices on software engineering is a much greater degree of transparency. Not just between the customer and the team, but within the team itself. Daily scrum meetings prevent hidden problems from sabotaging the project. Paired programming lowers the possibility of developers doing the wrong thing and promotes the sharing of knowledge among the team. Problems in areas like architecture of program design are more likely to be exposed early on allowing adequate time to address the problems.

Software Product Lines

Feature oriented software design and software product lines approaches may have a significant impact on software engineering. The paradigm forces software professionals to think in terms of designing sets of related systems as opposed to individual applications. This is a similar approach taken in many manufacturing businesses. When examining a domain, working on requirements engineering, and establishing an architecture and design for an application, developers should attempt to identify distinct units of functionality which may be used in multiple areas. If such features are identified, the development of feature sets and Software Product Lines (SPL) should be considered. By creating common components that multiple applications can use, different teams can share in the expense of their development which could reduce their overall cost and enable greater interoperability and the integration of many different devices. Furthermore, using the common platform created by these components will promote the combined use of systems in ways that otherwise may not have been possible. Look for opportunities to implement the FOSD and SPL approaches to keep costs down, and improve time-to-market while remaining competitive in your chosen market.

Advertisements

Comments»

No comments yet — be the first.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: