old-www/LDP/LG/issue95/rondina.html

175 lines
10 KiB
HTML

<!--startcut ==============================================-->
<!-- *** BEGIN HTML header *** -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML><HEAD>
<title>Software Engineering LG #95</title>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#0000AF"
ALINK="#FF0000">
<!-- *** END HTML header *** -->
<!-- *** BEGIN navbar *** -->
<A HREF="pramode.html">&lt;&lt;&nbsp;Prev</A>&nbsp;&nbsp;|&nbsp;&nbsp;<A HREF="index.html">TOC</A>&nbsp;&nbsp;|&nbsp;&nbsp;<A HREF="../index.html">Front Page</A>&nbsp;&nbsp;|&nbsp;&nbsp;<A HREF="http://www.linuxgazette.com/cgi-bin/talkback/all.py?site=LG&article=http://www.linuxgazette.com/issue95/rondina.html">Talkback</A>&nbsp;&nbsp;|&nbsp;&nbsp;<A HREF="../faq/index.html">FAQ</A>&nbsp;&nbsp;|&nbsp;&nbsp;<A HREF="vanheusden.html">Next&nbsp;&gt;&gt;</A>
<!-- *** END navbar *** -->
<!--endcut ============================================================-->
<TABLE BORDER><TR><TD WIDTH="200">
<A HREF="http://www.linuxgazette.com/">
<IMG ALT="LINUX GAZETTE" SRC="../gx/2002/lglogo_200x41.png"
WIDTH="200" HEIGHT="41" border="0"></A>
<BR CLEAR="all">
<SMALL>...<I>making Linux just a little more fun!</I></SMALL>
</TD><TD WIDTH="380">
<CENTER>
<BIG><BIG><STRONG><FONT COLOR="maroon">Software Engineering</FONT></STRONG></BIG></BIG>
<BR>
<STRONG>By <A HREF="../authors/rondina.html">Gustavo Rondina</A></STRONG>
</CENTER>
</TD></TR>
</TABLE>
<P>
<!-- END header -->
<H2>Abstract</H2>
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.
<H2>1. Introduction</H2>
<P>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.</P>
<P>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.</P>
<H2>2. Linux, free software and software engineering</H2>
<P>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.</P>
<P>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.</P>
<P>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.</P>
<P>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.</P>
<H2>3. So, where is the problem ?</H2>
<P>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.</P>
<P>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.</P>
<P>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.</P>
<P>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.</P>
<H2>4. How to solve this problem ?</H2>
<P>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.</P>
<P>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.</P>
<P>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.
</P>
<P>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.</P>
<H2>5. Conclusion</H2>
<P>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.</P>
<P>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 <a href="mailto:gustavorondina@uol.com.br">gustavorondina at uol dot com dot br</a></P>
<!-- *** BEGIN author bio *** -->
<P>&nbsp;
<P>
<!-- *** BEGIN bio *** -->
<P>
<img ALIGN="LEFT" ALT="[BIO]" SRC="../gx/2002/note.png">
<em>
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.
</em>
<br CLEAR="all">
<!-- *** END bio *** -->
<!-- *** END author bio *** -->
<!-- *** BEGIN copyright *** -->
<hr>
<CENTER><SMALL><STRONG>
Copyright &copy; 2003, Gustavo Rondina.
Copying license <A HREF="../copying.html">http://www.linuxgazette.com/copying.html</A><BR>
Published in Issue 95 of <i>Linux Gazette</i>, October 2003
</STRONG></SMALL></CENTER>
<!-- *** END copyright *** -->
<HR>
<!--startcut ==========================================================-->
<CENTER>
<!-- *** BEGIN navbar *** -->
<A HREF="pramode.html">&lt;&lt;&nbsp;Prev</A>&nbsp;&nbsp;|&nbsp;&nbsp;<A HREF="index.html">TOC</A>&nbsp;&nbsp;|&nbsp;&nbsp;<A HREF="../index.html">Front Page</A>&nbsp;&nbsp;|&nbsp;&nbsp;<A HREF="http://www.linuxgazette.com/cgi-bin/talkback/all.py?site=LG&article=http://www.linuxgazette.com/issue95/rondina.html">Talkback</A>&nbsp;&nbsp;|&nbsp;&nbsp;<A HREF="../faq/index.html">FAQ</A>&nbsp;&nbsp;|&nbsp;&nbsp;<A HREF="vanheusden.html">Next&nbsp;&gt;&gt;</A>
<!-- *** END navbar *** -->
</CENTER>
</BODY></HTML>
<!--endcut ============================================================-->