Software+Engineering+-+An+Occupational+Approach

=TSoftware Engineering: An Occupational Approach=

Software Engineers

 * Design and develop software
 * Apply computer science and mathematical analysis
 * Development evolves quickly; changes with technology and business

“Computer software engineers design and develop software. They apply the theories and principles of computer science and mathematical analysis to create, test, and evaluate the software applications and systems that make computers work. The tasks performed by these workers evolve quickly, reflecting changes in technology and new areas of specialization, as well as the changing practices of employers. (A separate section on computer hardware engineers appears in the engineers section of the Handbook.)” “Software engineers design and develop many types of software, including computer games, business applications, operating systems, network control systems, and middleware. They must be experts in the theory of computing systems, the structure of software, and the nature and limitations of hardware to ensure that the underlying systems will work properly.” Source: []

Jobs in 2008

 * 1.3 milllion jobs in 2008
 * 514,800 computer applications software engineers
 * 394,800 were computer systems software engineers
 * 426,700 were computer programmers
 * 48,200 computer software engineers and computer programmers were self-employed in 2008

“Computer software engineers and computer programmers held about 1.3 million jobs in 2008. [Of a labor force of 154 million(1), that is 0.844% of the labor economy] Approximately 514,800 were computer applications software engineers, about 394,800 were computer systems software engineers, and about 426,700 were computer programmers. Although computer software engineers and computer programmers can be found in a wide range of industries about 32 percent were employed in computer systems design and related services. Many also worked for software publishers, manufacturers of computers and related electronic equipment, financial institutions, and insurance providers. About 48,200 computer software engineers and computer programmers were self-employed in 2008.” Source: [] (1) []

Salaries in 2008
$93,740 Professional and commercial equipment and supplies merchant wholesalers $87,710 Software publishers $85,990 Management of companies and enterprises
 * Computer Applications Software Engineers median salary: $85,430**

“In May 2008, median annual wages of wage-and-salary computer applications software engineers were $85,430. The middle 50 percent earned between $67,790 and $104,870. The lowest 10 percent earned less than $53,720, and the highest 10 percent earned more than $128,870. Median annual wages in the industries employing the largest numbers of computer applications software engineers in May 2008 were as [listed above]"

$102,090 Scientific research and development services $101,270 Computer and peripheral equipment manufacturing $93,590 Software publishers
 * Computer Systems Software Engineers median salary $92,430**

“In May 2008, median annual wages of wage-and-salary computer systems software engineers were $92,430. The middle 50 percent earned between $73,200 and $113,960. The lowest 10 percent earned less than $57,810, and the highest 10 percent earned more than $135,780. Median annual wages in the industries employing the largest numbers of computer systems software engineers in May 2008 were as [listed above]"

$81,780 Software publishers $71,040 Management of companies and enterprises $70,270 Computer systems design and related services
 * Computer Programmers median salary: $69,620**

“Median annual wages of wage-and-salary computer programmers were $69,620 in May 2008. The middle 50 percent earned between $52,640 and $89,720 a year. The lowest 10 percent earned less than $40,080, and the highest 10 percent earned more than $111,450. Median annual wages in the industries employing the largest numbers of computer programmers in May 2008 are [listed above]"

[]

What do you need to know?
Software Engineering is more than programming or hacking, it is a systematic approach to writing software that is:
 * Maintainable - code may be revised, weeks, months, or years later.
 * Secure - protect consumer and corporate data.
 * Reusable/Extensible
 * Scalable
 * Marketable

Software Engineering
Software Engineering IS engineering Software development parallels much of what we have learned in this course regarding entrepreneurship, management, and innovation. As Prof Mark Henderson in Unit 3, explained, in engineering, you have 8 steps that you follow of problem definition, researching, brainstorming, choosing, building, testing, communicating, and redesigning. The process can be iterative. As we learned in Unit 3, a solution must add value. Value Opportunity Analysis provides the opportunity to evaluate a solution. You must do both quantitative and qualitative analysis. Unless you can solve a problem in a way that the customer is willing to use, you must keep innovating.

Sources: Engineering Design Process Graphic: [|http://richfield.midnighthelp.com/Images/EDP%201%20(Small).JPG] Value Opportunity Analysi: [] User Centered Desisn Approach (VOA): []

Black Boxes & White Boxes
It is really just functional decomposition Software depends on input and output, called I/O. You are creating a ‘black box’ according to the customer’s requirements as limited by finances, time, and technology. Working with the customer you can identify input parameters and expected output. This is your I/O or input/output. In essence, they want a magical black box that they can put stuff into and out comes a nice result. What happens inside the black box isn’t too important as long as they get out what they expect.

From a software engineering perspective, you perform functional decomposition (as expalined in Unit 8) to break down the process by which input turns into output. This is a ‘white box’ which is your software architecture. That architecture must be tested; quality assurance must be done to verify that your solution performs as expected for all the variations of input, system load, and other parameters which impact the performance and integrity of your application as well as the results it produces.

A Systematic Approach
Two common methodologies for developing software are:


 * Waterfall Model:** a linear and progressive approach which takes time. **Agile Development**: a circular and iterative approach for quick results.

The Stage-Gate system from Unit 2 can be basically translated into two approaches taken to software development. These paradigms were introduced in the ‘Technology Development Processes, Issues, Challenges’ literature for Unit 4. The first is linear and progressive from requirements, design, implementation, verification, and maintenance. You must complete each step before you can proceed to the next. This approach was the common approach for years. As software became larger and more complex, it also led to longer product development cycles. If a change was made in a previous step, you had to backtrack and go through the various steps. The customer did not see a product until the developer had finished the process.

The challenges associated with the process led to the innovation of a new approach to software development. Agile development encapsulates is an interdisciplinary engaged approach to software development. You work closely with this customer, not just your organization, in developing a solution that improves with each development cycle. As requirements change, the software is modified to quickly adapt to those changes and the revised product is again evaluated against the current needs of the customer. Extreme programming, lean programming, rapid prototyping, and other approaches are implementations of agile development.

Software Design/Development
Software development requires that you understand your customer. What is given to you as problem may have already gone through a filtering process which limits the scope of the real problem. Problems must be understood outside the limits of technology, finances, time, and solution complexity. The problem must be understood from a business perspective to provide a solution that will be useful, adaptable, and long lasting.

Hacking provides quick fixes, sometimes just patches to temporarily stop the bleeding. In being quick they are usually sloppy and not architected, but developed through trial-and-error. Sometimes hacking is the right solution for keeping things running, but it is akin to bailing wire and duct tape. Hacking is an important part of testing a solution since input can be less than ideal in practice and a robust solution will handle the edge cases. Hacking can also be done to exploit weakness in software for nefarious purposes.

Programming may solve a specific problem, but does not always look at the larger picture. Being able to write code is part of the skill set required to be a software developer. Being a code monkey ( http://en.wikipedia.org/wiki/Code_monkey ) is part of the culture and hierarchy in some organizations. The writing of code is a valuable function when a solution has been designed.

Whether you engineer, hack, or program, you should follow the steps of identifying a problem, developing a solution, testing that solution, documenting it (so that others can repeat or understand your solution), and adapting to changes.

Cloud Computing (X as a service)
Application as a Service (AaaS) Software as a Service (SaaS) Platform as a Service (Paas) Infrastructure as a Service (IaaS )

Ubiquity
iPad, iPhone, Android phones/tablets, computers, websites, mobile web, etc. With data and applications now in the cloud. Apps must be able to consume data regardless of platform/device.

Business Intelligence
Data aggregration and analysis [|"How Companies Learn Your Secrets".] //New York Times//. 16 Feb 2012. [|How Target Knew a High School Girl Was Pregnant Before Her Parents Did] //Time//. 17 Feb 2012. [|How Apple tracks your location without consent, and why it matters] ArsTechnica.com