<?xml version="1.0" encoding="windows-1252"?>
<node id="388478" title="Software design -- The confussion of buzzwords" created="2004-09-04 00:10:10" updated="2005-07-20 23:47:39">
<type id="120">
perlmeditation</type>
<author id="36692">
zzspectrez</author>
<data>
<field name="doctext">
&lt;H1&gt;Software design -- The confussion of buzzwords&lt;/H1&gt;

&lt;P&gt; First, some background. I am not a software developer, nor have I the training or experience to be one. However,
I do like computers and have developed a desire to play with computers more then the average joe. I have done coding
in 8088 assembly, pascal on both apples and IBM's, and since have found perl as my language of choice.
&lt;/p&gt;
&lt;BR&gt;
&lt;P&gt;Over the years, I have developed lots of fun throw-aways but only one application that grew to any considerable
size (+1000 lines). Recently, I have began coding more often and have noticed one major roadblock to my development
which has really begun surfacing since I have begun playying with OOP. That problem is my process of development. I
lack very much structure to my design. I code and fix. Learning from books has taught me understanding of the languages,
the control structures, data structures, importance of encapsulation etc... But somehow I have ( missed || been unable to find ) 
any good knowledge of design. Other then the buzzwords I find on the net and in the bookstores the closest thing I have
learned about programing design methods has been limited to Top-Down, Bottom-up, and I briefly remember some book I read that
explained flowcharting... (Cant remember the proper symbols though!).&lt;/P&gt;

&lt;P&gt;The problem with coding then fixing is that many times you are half way through coding your program when you
realize that the way you have designed code that doesnt work, or doesnt work well. Then you throw it all away and
start again.&lt;/P&gt;

&lt;P&gt;So I decided to do some searching to get an idea of the methods and processes used to develop software. There is so
much information out there that you quickly get information blurr by the magnitude of buzzwords and design methods.
Extreme Programming, RUP, UML, Use Cases, Data Patterns, Agile Software Development, etc....&lt;/P&gt;

&lt;readmore&gt;

&lt;BR&gt;

&lt;H3&gt;Software Development &lt;a href="http://en.wikipedia.org/wiki/Methodology_%28software_engineering%29"&gt;Methodologies&lt;/a&gt;&lt;/H3&gt;
&lt;UL&gt;
	&lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/Structured_programming"&gt;Structured Programming&lt;/a&gt;&lt;/LI&gt;
		&lt;UL&gt;
		  &lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/Jackson_Structured_Programming"&gt;Jackson Structured Programming&lt;/a&gt;&lt;/LI&gt;
		  &lt;LI&gt;Dijkstra's Structured Programming&lt;/LI&gt;
		&lt;/UL&gt;
	&lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/SSADM"&gt;SSADM&lt;/a&gt; Structured Systems Analysis and Design Methodology&lt;/LI&gt;
	&lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/Dynamic_Systems_Design_Method"&gt;Dynamic Systems Design Method&lt;/a&gt;&lt;/LI&gt;
	&lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/PRINCE2"&gt; PRINCE2&lt;/a&gt; Projects in a Controlled Environment&lt;/LI&gt;
	&lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;Agile Software Development&lt;/a&gt;&lt;/LI&gt;
		&lt;UL&gt;
		  &lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/Extreme_Programming"&gt;Extreme Programming&lt;/a&gt;&lt;/LI&gt;
		  &lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/Scrum_%28in_management%29"&gt;Scrum&lt;/a&gt;&lt;/LI&gt;
		  &lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/DSDM"&gt;DSDM&lt;/a&gt;&lt;/LI&gt;
		&lt;/UL&gt;
	&lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/RUP"&gt;RUP&lt;/a&gt; Rational Unified Process&lt;/a&gt;
&lt;/UL&gt;

&lt;H3&gt;Software Development Processes&lt;/H3&gt;

&lt;UL&gt;
	&lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/Top-Down_Model"&gt;Top-Down Design Model&lt;/a&gt;&lt;/LI&gt;
	&lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/Bottom_Up"&gt;Bottom-up Design Model&lt;/a&gt;&lt;/LI&gt;
	&lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/Waterfall_model"&gt;Waterfall Model&lt;/a&gt;&lt;/LI&gt;
	&lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/Spiral_model"&gt;Spiral Model&lt;/a&gt;&lt;/LI&gt;
	&lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/Chaos_model"&gt;Chaos Model&lt;/a&gt;&lt;/LI&gt;
	&lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/Iterative_development"&gt;Iterative and Incremental Development&lt;/a&gt;&lt;/LI&gt;
&lt;/UL&gt;

&lt;UL&gt;
	&lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language"&gt;UML&lt;/a&gt;Unified Modeling Language&lt;/LI&gt;
	&lt;LI&gt;&lt;a href="http://en.wikipedia.org/wiki/Use_case"&gt;Use cases&lt;/a&gt;&lt;/LI&gt;
&lt;/UL&gt;

&lt;BR&gt;
&lt;h3&gt;What I get from the buzzwords...&lt;/H3&gt;

&lt;H4&gt;The steps of development&lt;/H4&gt;
&lt;OL&gt;
	&lt;LI&gt;Software ( Requirements || Specifications )&lt;/LI&gt;
	&lt;LI&gt;Design Analysis&lt;/LI&gt;
	&lt;LI&gt;Design&lt;/LI&gt;
	&lt;LI&gt;Codeing&lt;/LI&gt;
	&lt;LI&gt;Testing&lt;/LI&gt;
&lt;/OL&gt;

&lt;h4&gt;My idea of how to proceed&lt;/H4&gt;
&lt;P&gt;I found a book on jackson structured programming. I think I will read up on this first. Seems more of a design model then design method.
In such case, it probably is outdated by UML but appears to be a quick read/learn as compared to UML. Next I guess I should read up
on UML since it appears to be a good method to display structure of program as well as structure of classes when you begin doing OOP.
Where to go next, Im not sure. Maybee read about Extreme Programming..&lt;/P&gt;
&lt;bR&gt;
&lt;H4&gt;Questions&lt;/H4&gt;
&lt;OL&gt;
	&lt;LI&gt;Any sugestions on books that overview the multitude of sofware design methods?&lt;/LI&gt;
	&lt;LI&gt;What are you using?&lt;/LI&gt;
	&lt;LI&gt;How do you decide how to start development?&lt;/LI&gt;
	&lt;LI&gt;How does this change from when you are coding yourself compared to working in teams?&lt;/LI&gt;
	&lt;LI&gt;Comments?&lt;/LI&gt;
&lt;/OL&gt;

&lt;/readmore&gt;

&lt;BR&gt;
&lt;B&gt;zzSPECTREz&lt;/B&gt;</field>
</data>
</node>
