Software engineering

Software engineering is a field of computer science, concerned with designing and writing programs for computers. 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
There are four generic phases in Software Engineering which are Analysis, Design, Coding and Testing.

What is API?
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



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.

What is algorithm
What is algorithm?

Algorithm is what you want in the software.

for example.

1.in textbox one if A is typed

2. Color of letter A should be highlighted  blue.

Now this is an algorithm we have to convert these statements into compiler statements like (data types, pointers , arrays).

ok i am gonna write the above algorithm into C++ statements.


 * 1) if (textbox.1text='A')
 * 2) {   textbox.1textbackgroundcolor=blue
 * }

now the above is a very rough explanation of converting algorithm into compiler statements but things are like these.

the algorithm is the king of all software. it is the first thing that software engineers do. below i will give an Artificial intelligence algorithm.


 * 1) hello and hi are equal.

now i will convert this algorithm into compiler statements.


 * 1) string 1="hello";
 * 2) string 2="hi";
 * 3) string 1=string 2;

so software engineer convert any type of algorithm into compiler statements.

Compiler
what is compiler?

Compiler is programming languages like C++, Java, C#.

the compiler is all that we have.

Compiler has mechanism like (data types, pointers, array , classes , objects , methods ).

all software are built from compiler. at the moment we have only the compiler like (data types, pointers ,arrays) no new compiler mechanism or software has been developed.

It is only thing to software engineer.

we use basic compiler mechanism to built higher structures.

now for example i want to built a textbox that can contain 11 words

1.textbox has 11 words limit

2.textbox index number 5 word is N

C++ compiler program will be note that this is just an approximation this is not the correct code

1.char word array[]=new char[11];

2.word[5]='N'

now you can see we created a textbox of 11 words using basic compiler mechanism. we used basic mechanisms to create a higher mechanism like textbox.

every software structure is built using basic compiler mechanism.

Integrated development environment(IDE)
Integrated development environments are the greatest software's on this planet.

some well known IDE are:


 * 1) Visual studio from Microsoft.
 * 2) XCode from Apple.
 * 3) Swift from Apple.
 * 4) Android studio.

integrated development environments are built using compiler and API's (Application programming interface) and file libraries. libraries which contain many custom files each having its own function.

for example Opengl api (graphics api) can be used to built a white box screen then using compiler words can be written in this white box like text.

then using API and compiler components can be made like textbox, serial ports, cursor, windows forms, buttons , images etc which can be stored as files in libraries.

using First api then compiler then files any custom IDE can be made.

Understanding the code Understanding the program
To understand any code like (windows, mac OS, Linux ) source code or any other software source code like( adobe photoshop, unity game engine , ps3 emulator ).

you have to convert the compiler statements (data types, methods ) into english statements.

for example below is code of dot net for serial port from github,

following is the link https://github.com/Microsoft/referencesource/blob/master/System/sys/system/IO/ports/SerialPort.cs#L87C8-L90C33

i will now from source code use line code 87 to 90 to convert these compiler statements into english statements.

87.private SerialStream internalSerialStream = null;

// private this is private meaning no other class can inherit this // Serial stream internal serial stream // internal serial stream is a serial stream structure or class // = null

// null means 0 valued integar // so internal serial stream = 0 null // lets increase the number of 0 in null to six // so internal serial stream =000000 six 0 null valued integers //

so 000000 means there are all zeros // all zeros means there is no value it means its empty // so internal serial stream = empty.

88. private byte[] inBuffer = new byte[defaultBufferSize];

// private this is private meaning no other class can inherit this // byte array[]  inbuffer // inbuffer is an array of bytes(8 bits values) // = new byte[defaulteBuffersize] //

byte[] array is equal to byte array with [defaultbuffersize] // so if defaultbuffersize = 1024. // so byte array is array of bytes with [1024] elements.

89. private int readPos = 0;    // position of next byte to read in the read buffer. readPos <= readLen

// private this is private meaning no other class can inherit this // int readposition // read position is numbers(integers) // readposition =0

so readposition value is equal to 0 // so readpostion is 0 and starts from 0 and progresses on to 1, 2 ,3 // read position will start from 0.

90. private int readLen = 0;

// private this is private meaning no other class can inherit this // int readlen=0 // this is same meaning just the above // readlength will start from 0 then to 1 ,2 ,3.

Coding

 * 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

 * complexity analysis
 * sorting and hashing, searching
 * large amounts of data

Data structures

 * tables
 * trees
 * graphs
 * lists

Systems design

 * feature sets
 * interfaces
 * class hierarchies
 * designing a system under certain constraints
 * simplicity and robustness
 * trade-offs

Problem-solving

 * 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

 * matrices
 * discrete math
 * probability
 * combinatorics

Becoming a software engineer

 * How to prepare for a software engineering technical interview

Other websites

 * The British Computer Society
 * The Institution of Electrical and Electronics Engineers
 * Computer Degrees and Careers