ALINK="#FF0000"> << Prev  |  TOC  |  Front Page  |  Talkback  |  FAQ  |  Next >>
LINUX GAZETTE
...making Linux just a little more fun!
Software Engineering
By Gustavo Rondina

Abstract

The so called software crisis can generate several and serious consequences to computing and IT in the future, mainly on issues that refers to the free software. This article intends to quickly introduce the reader to some of the problems which can contribute with this crisis and maybe encouraje users and programmers to adopt the necessary measures to avoid it.

1. Introduction

Nowdays the hardware devces are becaming more powerfull and are expanding its capacities and features every day. But those devices are useless if there are not software that are able to explore those features as much as possible, thus it is appropriate to say that the software development process, called software engineering, is one of the most important areas of computing.

To catch up with the rapidly technological advance at the hardware industry, the programmers and software engineers, whose job is develop the core of the softwares, must keep the idea that it is necessary not just create and develop a product that works, but a product that implements good software engineering practices, assuring that no computer or programmer's efforts will be wasted.

2. Linux, free software and software engineering

You might be asking yourselves: where does Linux fit on that scenario ? Well, the free software movement can answer that question. The Linux OS have been one great and successfull project that helped to spread the free software principles, concepts and philosophy.

In the last decade we can note a significant increasing if we look at the number of Linux users. Users that have adopted the system at home, at work or even at school. Many of these users had joined to Linux due its source code availability: any person over the world can get the source, read it, make modifications, copy and redistribute this code. Most of those users have had already a previous knowledge of computer programming and OSes based on Unix.

However there were users that have adopted Linux just to fill their curiosity, to know and explore a new and different system and have an idea of how a Unix-like system works; some of them didn't like or didn't get used to Linux and droped it soon, but most of them have adopted Linux as a way of life and a philosophy.

This new Linux's enthusiastics wanted to learn as much as possible about the system, so, with the source code open to anyone and built under C and assembler programming languages, they have decided that learning how to programm would be a good way to start understanting Linux. And this was what happened, a lot of new users have started to programm and hack codes volunteerly, giving their time and efforts to projects aimming to contribute with the open source community. Today there are a lot of successfull projects which show to the world that the free software development philosofy really works.

3. So, where is the problem ?

These new programmers had learned the programming languages that are necessary to software development and had put in practice their knowledge developing software that fits their needs, producing the expected results. However, there are no warranty that those products are totally realiable and the ideas have been implemented at the best way possible.

This happens due the lack of knowledge at the software engineering area. There are many projects that are developed by people who don't have much experience at the software development and production, so there are a lack of concepts and theory to these programmers. To programm isn't just about launching a text editor and start to hack some code and then compile it, even getting the expected results.

To know the syntax of a programming language doesn't mean to know how to programm and develop good and quality software. The software development is complex process, since the first algorithm design until the debugging and testing phase. A programmer who doesn't have the conecpts os language paradigms and their differences (i.e. oriented object programming and procedural programming); who doesn't know deeply the several types os data structures, such as stacks, queues, lists and binary trees; or the programmer who doesn't know how a hardware achitecture does arithmetic operations and how their logical circuits works, can develop a software that, even working, have not been implemented at it must have.

A software that isn't implemented at the right way may cause wast of hardware resources such as processing time of the CPU or how the memory is managed; waste the programmer's efforts as well, once he can solve trivial problems using a complex and expensive methods, since he doesn't know an easier way; waste also the features of the language by using it poorly or even incorrectly. All this things increases the final cost of the project.

4. How to solve this problem ?

This kind of problem is know as "the software crisis". Each person who starts to hack and produce new codes without the right knowledges of good software engineering contributes to the increasement of this crisis.

In the future that can be very dangerous, mainly to the free software community since, in some cases, there is no one in charge of monitoring and moderating the development phase of the project, once that several projects are developed by volunteers programmers.

The solution of this problem may be clear: the users and the programmers must study deeply software engineering and modeling, algorithms analisys, software testing and each paradigms and languages' details. The developers should read more scientific papers and tecnical books about software engineering. Many programmers just want their software producting the expected results, but if a programmer wants to be a successfull developer and have high quality and reliable software, it is essential to know all the theorycal bases that is hide under the practice. Theorycal knowledge is the base to everything.

A lot of programs and projects starts in the paper, it is not a shame to make some rough draft of the algorithm. Some times an idea can achieve a high abstraction level which can be more understantable trought a draw. To test the software before it get into the consumer hands is also important, and there are many different tecnics and issues related to software testing. To know several programming languages and languages paradigms give the programmer more flexibility while choosing the best way to solve a problem, since each language has its own limitations. Even the source code identation is important to increase the readability of the sources. All this things are related with the good software engineering and improves the quality of your product.

5. Conclusion

This article does not intend to criticize neither to discourage hobbyst programmers, but encourage them to know further and deeply the issues related with the software development process. Only that way we will have good and realiable software at the next generations.

I hope you have enjoyed this article. Please forgive my really poor english, this is not my native language. Maybe on a future article it will be improved a bit. Comments, questions and suggestions are always welcome. Feel free to email me at gustavorondina at uol dot com dot br

 

[BIO] I am Gustavo Rondina, and I am from Brazil. I am a graduation student taking the 4th semester of Computer Science course, but I have been in touch with computers and Linux for about 5 years.


Copyright © 2003, Gustavo Rondina. Copying license http://www.linuxgazette.net/copying.html
Published in Issue 95 of Linux Gazette, October 2003

<< Prev  |  TOC  |  Front Page  |  Talkback  |  FAQ  |  Next >>