Tuesday, October 27, 2015

So you want to be a Software Engineer?

Software Engineering is a subject that catches the eyes of most of the young generation today, if you ask what they want to become when they grow up, most may say software engineer. When people talk about software engineering they often talk about programming. yes programming is one of the major parts in software engineering but there are more important things like analysis and design and a lot more. So what does it take to be a good software engineer?

Every job requires certain skills and abilities and they differ from person to person depending on their background, personality, behavior, education, and some even acquire by birth. In your interview most of the company will not check your Knowledge since they already know you have learned them, a simple paper perhaps to know that you understand the concepts well. but most of all they will test your ability to handle that job, which is the skills and talents required to do it perfectly. just like soldiers are tested for physical fitness. you will be tested for the required skills, if you have them well you will get the job if not you will fail. Sometimes if they find out that you have the necessary skills but not the knowledge they may hire you yet and train you. since you can teach subjects like software engineering to people, you cannot teach them how to develop software, i.e. the skills and talents needed to do it. since most of the private sector are well aware of this, they will do it. but for government, well their HR is different, So as the workload of IT and their definitions of some fields, so they may not have such a criterion for selection. (in Sri Lanka Only)

Software or a program is a problem that you or developers get because one who has it could not solve it. so you have to go through several steps in order to solve it.

So what will it take to build a good software? What do you have to go through to get a finalized product? In software engineering theory there is a life cycle that you may already hear of they are "Iterative", "Waterfall" and so on. Which requires you to do some steps when building software.

---------------------------------------------------------------------------------------------------------------------
Feasibility study- to figure out whether you have the necessary skills and technology, or have the budget to solve it
Requirement Gathering - to find out what the problem is
Requirement Analysis- understand the problem
Design- give solution to the problem
Coding- implement the solution
Testing- find out is this the right solution
Maintenance- make sure the solution will continue to be used, and adjust it as necessary
---------------------------------------------------------------------------------------------------------------------

which you may have learned under the waterfall model, but what it will take to do all of this, what makes you a good software engineer. will you be able to climb the ladder up as being the best or end up without a clue when it comes to software

You see all these are things that require a certain amount of skills, how much skill you have will define how good you are at developing software.

Feasibility Study and Requirement Gathering
this makes you go through the existing computer system or a manual which will force you to talk to many people to get their idea, find out what is necessary to do. but you may find out even when you talk to them you may not get the right requirement from them, they will keep on talking things, but most of them will not be relevant to your software. The people you design your software for are not experts in software engineering and they do not know what you need to develop your software. so you need to listen to them carefully, let them talk and try to get the necessary information from them. Patience is a must. If you have to interact with them, ask questions when necessary, to understand what they need and not to build what you think they need, they are your end-users even what they ask may seem wrong to you but never the less if you deliver what they never ask they will not use it. most of this phrase goes with interviewing employees, giving them questionnaires. so communication skill is a must, this part play lot with personality, negotiation and more of social skills.

at the end of the feasibility study it generates feasibility report which will tell that the system is economically or technically feasible (i.e. can we do it with the allocated budget and do we have the necessary equipment and skilled people to do it) or not and at the end of requirement gathering it will produce a document with requirements.

Requirement Analysis 
OK now you have everything that you need to know, so it seems, or will it be enough to develop your software? Well, you need to analyze the software which requires analytical skills see software or program is a problem that a person gives it to us which he can not solve on his own, so he asks us to solve it for him. bottom line you must get to know constraints, boundaries understand the problem why and what needs to be done what are the inputs what are the outputs what are the processes so on and so forth. In this phrase you may find that data that you collected is not enough so you need to go back and ask the necessary questions and get what you require of them. you must have a way of solving problems, must be a good thinker and have the ability to grasp things easily and understand them. this is considered the most tedious and hardest thing of Software Engineering since all the other phases depend on this one. Mistakes made to this that uncover later phases will require adjusting this, which makes the process to come back here and start all over again. problem-solving skill is a must for this to work. at the end of requirement analysis, it creates a software requirement specification document(SRS).

Design
now you have a sense of what you have to do, you need a design. It's just like an architect to design a house. Just like he knows where to put windows and where not to, how to connect rooms and other parts, and have integrity (this is why people who do software design is known as software architects) which you may know as a plan. software design is more than a house plan, but you get the idea. So in this phase, you need to put it all together and build a visual diagram of the system. there are many tools that give you the ability to do this. DFD is one, UML is another. UML gives you the ability to design 15+ diagrams, which will help you to design your system, with each giving different views of the system. This requires the person to have the ability of gradually working through problems that he understands, to a solution that he may think the best. (which is the best) you must be a good thinker and have the ability to understand problems and good at giving logical solutions to them. problem-solving skill is a mustat the end of this phrase, you will generate a bunch of diagrams like DFD or UML, which tell the functionality and behavior of the system.

there are tools that help people to do this. Some of them could even be converted to cording, making the developer's job easy. It can generate code to the functional level so developers only need to code what's within the functions.

Cording
this is the programming part of the system. which the developer code according to the design to get a finished product. since the programming is a logic base thing, logical thinking is a must. The design that you build must be coded to match the needs, you must think of a way to achieve what the picture describes. it is like solving a logic puzzle. if you have a good design i.e. UML diagrams like The Class diagram there are many tools that Convert it to cording languages. java, .net are some common platforms. You have to draw the diagram in the software and have to use the foreword engineering which is converting UML to code. Most of the diagramming programs support it. The code is incomplete, it creates all the classes of the program, their private and public variables, and all public-private functions you only have to code what's in the function that is all. logical thinking is a must for this to work. at the end of this phase, you will get a working product.

Testing
this is a phrase that undergoes checking of the bugs of the developed system. You test it unit by unit to see everything work as expected and not go in a silly way that you may never expect. this can be divided into two sub-phrase unit testing and integrated testing, unit testing, which is testing each component alone. Integrated Testing is the test done after combining them all. This is done by black-box testing, white-box testing, alpha testing, beta testing, and so on. this requires you to understand the system and its behavior, build test cases with each having 2 or more data, and gradually putting them through the system and finding out whether we get the expected result. It is testing all cases, that is even things that are not relevant since users can do anything, a negative number where positive is needed, a character where an integer is expected, what happens if you give some data that does not match your business criteria like giving 300 to an age of a person and so on, patient is a must. this requires most of the allocated time of the software engineering life cycle. if a problem is found during the test it will make you code again, if it is a programming problem or you have to send it to design if it is a problem of design and work from there or analysis if it is the problem. In the end you may even have to go back and collect data if it is a problem with your data making you to do it all over again.

Maintenance
this is the biggest part of the system now you have built a system, so you have to maintain it, you have to correct the bugs that never were found at the testing and change it to the future needs get backups and make sure that nothing unnecessary will happen to it. which need dedication to the system as long as it functions. a user manual is created and software is documented for future reference, which makes it easy for future changes even if your current developers leave the organization. 



No comments: