Software Engineering covers not only the technical aspects of building software systems, but also management issues, such as directing programming teams, scheduling, and budgeting. (Webopedia, n.d.)
The world of software has exploded since it’s humble beginnings in the mid 1940’s.
Over the next 30 years the industry focused primarily on cost effective hardware manufacturing and software was undertaken as a second measure, but there were no real methodologies to creating robust, reusable software components. (Computer Hope, 2017)
As computing has rapidly developed over the past 70 approximate years – particularly in the last 40 years since the mid 1970’s – software has been emerging into the forefront of the technology spectrum and has provided a very elaborate landscape for creation of many deep integrations into humanity’s everyday lives. From basic applications such as mathematical calculators through to complex aircraft navigation systems, global banking infrastructures and neural networked artificially controlled botnets.
Software has become an engineering feat unlike almost anything ever seen before; but with this growth has come many problems and common challenges that software engineers have had to deal with including but not limited to:
Writing code as a programmer is no-longer just ‘good enough’ when undertaking large scale systems (Hadar Ziv, n.d.). It is crucially important to organise many additional facets along with all software endeavours such as:
As a leading futurist speaker said: ‘every company in the future will be a software company’ (Mike Walsh, 2016), this sentiment has been shared across other business spokespeople such as Loblaw (Galen G Weston, 2016) who echoed a similar talk.
Most companies in the 21st century have sizable software entities operating within the business in order to either create or maintain internal software systems. As features are added or adjusted, often functional edge case bugs and/or regression bugs can find their way into the software. It is very tempting for software teams to resolve these bugs as quickly as possible by means of patching the code using undesirable methods in order to get the job done quickly, but more often than not those very patches end up existing in the systems for countless years which in turn create yet more instability.
This is something that should be addressed and dealt with correctly initially, as there is often not enough time allocated to correctly rectifying such issues.
Legacy systems get into such a state of this type of reckless abandon that it can be better to rewrite the system instead of continuing to patch it. The problem with this is that the business more often than not, does not see the immediate benefit of rewriting and budgets are not allocated to push this forward. The result is a legacy system that is extremely difficult to maintain with many internal workarounds in place to hide bugs in the system.
References:
‘Vangie Beal’ – ‘software engineering’ (n.d.) – Available from: http://www.webopedia.com/TERM/S/software_engineering.html Accessed on 03 June 2017
‘When was the first computer invented?’ (2017) – Available from: https://www.computerhope.com/issues/ch000984.htm Accessed on 04 June 2017
‘Hadar Ziv’ – ‘Software Engineering Vs. Programming’ (n.d.) – Available from: https://www.ics.uci.edu/~ziv/ooad/intro_to_se/tsld008.htm Accessed on 04 June 2017
‘What’s the difference between a computer programmer and a software engineer?’ (2013) – Available from: https://www.careervillage.org/questions/1929/whats-the-difference-between-a-computer-programmer-and-a-software-engineer Accessed on 04 June 2017
‘Mike Walsh: In the future, every company will be a software company’ (2016) Available from: http://www.speakersconnect.com/mike-walsh-future-every-company-will-software-company/ Accessed on 04 June 2017
‘Loblaws illustrates how every company is becoming a software company’ (2016) – Available from: http://www.canadianbusiness.com/innovation/loblaws-as-software-company/ Accessed on 04 June 2017