Software engineering

From Wikiversity
Jump to navigation Jump to search

Software engineering is a field of computer science, concerned with designing and writing programs for computers.

Detailed DoD Technical Reference Model.

Today it is mostly done in a team. Software engineering can broadly be split into the following:

  • Requirements say what the software should do. Note that the requirements can change over time.
  • Software design is usually done on paper. It says what the different components of the software are, and how they interact.
  • When the design phase is done, engineers program the software in a phase known as implementation.
  • At the end of implementation, engineers test their code to see if its components meet the requirements.

Programming is definitely the blood of almost all software. And just like calculus is to engineering, programming is to software engineering.

Overview

[edit | edit source]

There are four generic phases in Software Engineering which are Analysis, Design, Coding and Testing.[citation needed]

What is API?

[edit | edit source]

API are called Application Programming interface.

what are APIs?

if you look at any API like Graphics API (like opengl api ) or networking API (like sockets api) you will notice that all are made up of hexadecimal values.

13.7 Programming Microprocessors. ( this text is taken from book Digital electronics Principles , Devices, and Applications. by Anil K.Maini 2007 , page number 540)

Microprocessors execute programs stored in the memory in the form of a sequence of binary digits. Programmers do not write the program in binary form but write it either in the form of a text file containing an assembly-language source code or using a high-level language. Programs such as editor, assembler, linker and debugger enable the user to write the program in assembly language, convert it into binary code and debug the binary code. Editor is a program that allows the user to enter, modify and store a group of instructions or text under a file name. The assembly language source code is translated into an object code by a program called assembler. Linker converts the output of the assembler into a format that can be executed by the microprocessor. The debugger is a program that allows the user to test and debug the object file. Programming in assembly language produces a code that is fast and takes up little memory. However, it is difficult to write large programs using assembly language. Another disadvantage of assembly language programming is that it is specific to a particular microprocessor. High-level language programming overcomes these problems. Some of the popular high-level languages used include C, C++, Pascal and so on. Compiler programs are primarily used to translate the source code from a high-level language to a lower-level language (e.g. assembly language or machine language). Figures 13.10(a) and (b) show the various steps involved in executing assembly language programs and programs written in high-level languages respectively

figure13.10(a)how compiler at the end makes Hexadecimal object files API


you can see in figure 13.10(a) that assembly language program is converted by assembler to low level machine language then linker/locater uses library and produces a List file. then the file given by linker/locator at the end. is converted to hex file. now in simple terms

assembly language code is converted to hexadecimal file which is then converted to binary machine codes. So what is an API. API are hexadecimal values and here assembly language is converted to hexadecimal files then that is converted to binary codes. its means API are hexadecimal object files and these hexadecimal files are same as binary code files. so this means that API are hexadecimal values which perform a hardware (electronic functions) because hexadecimal object files are converted to binary and what is binary code it is a electronic hardware function. So API are electronic hardware hexadecimal values.

Concepts

[edit | edit source]

Coding

[edit | edit source]
  • implement system routines
  • construct / traverse data structures
  • distil large data sets to single values
  • transform one data set to another
  • language familiarity
  • core libraries
  • idioms
  • performance issues
  • readable, well-written, and efficient code

Algorithm design and analysis

[edit | edit source]
  • complexity analysis
  • sorting and hashing, searching
  • large amounts of data

Data structures

[edit | edit source]
  • tables
  • trees
  • graphs
  • lists

Systems design

[edit | edit source]
  • feature sets
  • interfaces
  • class hierarchies
  • designing a system under certain constraints
  • simplicity and robustness
  • trade-offs

Problem-solving

[edit | edit source]
  • collaboration
  • classes of NP-complete problems
  • listening and comprehension
  • asking the right questions
  • don't use brute force solutions
  • don't assume things
  • find multiple solutions and choose the best
  • be open to new ideas and ways of solving the problem
  • ask questions to move to a more complex answer

Mathematics

[edit | edit source]
  • matrices
  • discrete math
  • probability
  • combinatorics

Becoming a software engineer

[edit | edit source]

Printed resources

[edit | edit source]

Other websites

[edit | edit source]

See also

[edit | edit source]

References

[edit | edit source]