Software design -- The confussion of buzzwords
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.
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!).
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.
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....
Software Development Methodologies
- Structured Programming
- Jackson Structured Programming
- Dijkstra's Structured Programming
- SSADM Structured Systems Analysis and Design Methodology
- Dynamic Systems Design Method
- PRINCE2 Projects in a Controlled Environment
- Agile Software Development
- RUP Rational Unified Process
Software Development Processes
- Top-Down Design Model
- Bottom-up Design Model
- Waterfall Model
- Spiral Model
- Chaos Model
- Iterative and Incremental Development
What I get from the buzzwords...
The steps of development
- Software ( Requirements || Specifications )
- Design Analysis
My idea of how to proceed
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..
- Any sugestions on books that overview the multitude of sofware design methods?
- What are you using?
- How do you decide how to start development?
- How does this change from when you are coding yourself compared to working in teams?