Flowcharting
Moderator: General Moderators
Flowcharting
Hey guys. I'm starting on a brand new project, the first of this scale, and my first program in a LONG time. It's a big program with lots of features and functionality, so I'm starting off by flowcharting as much as possible. I just wanted to know if anyone here takes this approach to construction and how detailed you go or just your process in general.
Sorry if this is the wrong forum, I don't touch on too many other languages so I kinda just gravitated to the PHP forums.
Sorry if this is the wrong forum, I don't touch on too many other languages so I kinda just gravitated to the PHP forums.
This is one of those Mac vs. PC, Atheism vs Theism, Angelina Jolie vs. Jennifer Aniston type questions. There is no right answer (although personally I'd have to go with Angelina Jolie). Historically, the "professionals" all said you should spend a year writing detailed specifications and UML diagrams and flowcharts and get a thorough understanding of the entire system before you start. Obviously the biggest problem with this philosophy is that the customer doesn't stop working while you do all this. Every time the customer changes his mind, analysts and programmers have to scramble to update all their diagrams and perform detailed assessments of the impact it will have on their system. For this reason, they often try to keep the customer at bay while they develop in a vacuum between release cycles (which are generally long). This is a bad thing.
Lately there has been a "movement" away from this type of thinking in the direction of what's being called "Agile" development. It focuses more on breaking the program up into smaller pieces that can be tested independently of each other. It generally encourages a much faster release cycle, lighter documentation/planning, and more customer participation. If you're interested in hearing more about Agile development, check out 37signal's book Getting Real (you can read it free online).
Personally, I don't think there is a silver bullet to software development. I think "Agile" or "Extreme!" (always reminds me of Harold and Kumar Go To White Castle) programming is overhyped. Good, productive programmers have been doing it for years and didn't need 15 XP books to explain it to them. A bad programmer using either methodology is going to write bad code and do a lot of rewriting. For novice programmers, Agile is probably not the way to go. The less experienced you are, the more time you probably need to spend planning and preparing.
Lately there has been a "movement" away from this type of thinking in the direction of what's being called "Agile" development. It focuses more on breaking the program up into smaller pieces that can be tested independently of each other. It generally encourages a much faster release cycle, lighter documentation/planning, and more customer participation. If you're interested in hearing more about Agile development, check out 37signal's book Getting Real (you can read it free online).
Personally, I don't think there is a silver bullet to software development. I think "Agile" or "Extreme!" (always reminds me of Harold and Kumar Go To White Castle) programming is overhyped. Good, productive programmers have been doing it for years and didn't need 15 XP books to explain it to them. A bad programmer using either methodology is going to write bad code and do a lot of rewriting. For novice programmers, Agile is probably not the way to go. The less experienced you are, the more time you probably need to spend planning and preparing.
- Maugrim_The_Reaper
- DevNet Master
- Posts: 2704
- Joined: Tue Nov 02, 2004 5:43 am
- Location: Ireland
Extreme/Agile programming is a workable practice for developing applications - but it takes time to get up to speed on the practices they propose. In the near term, the most useful skills are UML and Unit Testing - both can save your skin. Of course the most essential step is making sure you have a detailed list of requirements from the client - and hopefully insuring there's a signed contract which can handle the client ringing you up out of the blue with new ideas (which inevitably mean extra work you should charge for
).
There are a lot of UML tools out there as well as books on the subject. If that level is likely to take time to learn, then flowcharting is likely a good step for now. Just keep concious that designs/requirement are rarely static - things will change.
There are a lot of UML tools out there as well as books on the subject. If that level is likely to take time to learn, then flowcharting is likely a good step for now. Just keep concious that designs/requirement are rarely static - things will change.
Well, I mean, luckily for me, the customer is me. I can take all the time in the world I want, I just want an effective way to analyze my entire program's structure before I lay down any code.
I don't know anything about UML. I just looked up a few books on it, and asked for them for my birthday (Oh joy!). The Wikipedia article didn't really help. I'm kind of vague on what it's useage is. If it's more of an open-source thing similar to CVS, then I don't think I need something THAT extensive, because this is really a two-man project being done by the two men who need it.
I don't know anything about UML. I just looked up a few books on it, and asked for them for my birthday (Oh joy!). The Wikipedia article didn't really help. I'm kind of vague on what it's useage is. If it's more of an open-source thing similar to CVS, then I don't think I need something THAT extensive, because this is really a two-man project being done by the two men who need it.
It's not anything like CVS. It's a modeling language for describing properties, methods, and relationships(think flowcharting on steroids). I usually just scratch mine out on a paper napkin while I'm eating, but if you have Linux and KDE running on anything, Umbrello is a very nice open-source UML editor.
I was playing with OmniGraffle, which is what I've been using to do my charts so far and I found that it has UML elements in there. It makes sense now. Cool stuff.bpopp wrote:It's not anything like CVS. It's a modeling language for describing properties, methods, and relationships(think flowcharting on steroids). I usually just scratch mine out on a paper napkin while I'm eating, but if you have Linux and KDE running on anything, Umbrello is a very nice open-source UML editor.
- Christopher
- Site Administrator
- Posts: 13596
- Joined: Wed Aug 25, 2004 7:54 pm
- Location: New York, NY, US
Horrors ... that is the worst possible client.Theory? wrote:Well, I mean, luckily for me, the customer is me.
Oh no you can't!Theory? wrote:I can take all the time in the world I want,
No ... you acutally only want to analyze the amount of the program that you really, truly currently understand fully. Once you have built that you will know more and have more to build.Theory? wrote:I just want an effective way to analyze my entire program's structure before I lay down any code.
Do a very quick top down design, then pick the thing you think is the most important/useful/valuable and start building that. TDD is the way to go for you.
(#10850)
- Maugrim_The_Reaper
- DevNet Master
- Posts: 2704
- Joined: Tue Nov 02, 2004 5:43 am
- Location: Ireland
On something you mentioned - CVS, or better still, Subversion should be used. It might sound a complicated subject but it's relatively easy to use and it provides a simple method of being able to track changes, get older versions (by revision or date), and make sure two or more developers are always working on the same code (each just updates from a central repository frequently to update for the other's changes). You should check your host to see if they offer Subversion, or consider self-hosting a repository (in which case be sure to back it up regularly!).
Subversion is useful even for single person projects
. It's saved me own skin a few times.
Subversion is useful even for single person projects
- CoderGoblin
- DevNet Resident
- Posts: 1425
- Joined: Tue Mar 16, 2004 10:03 am
- Location: Aachen, Germany
By the way "TDD" if you haven't heard of it is Test Driven Development... One method you could use is simpletest found here. Will take a bit of time getting used to it but if you have had a long break from programming it may be easier to change your method of thinking that if you have been programming all the time.
Good luck
Good luck
- Kieran Huggins
- DevNet Master
- Posts: 3635
- Joined: Wed Dec 06, 2006 4:14 pm
- Location: Toronto, Canada
- Contact:
I was chatting about this with a friend of mine over lunch today, and he made an excellent point: The final product is rarely even remotely similar to the planned product.
Prototype it out, start using the bits, then redesign. Get each step done as quickly and easily as you can, then rewrite them when you identify what they should be like.
Prototype it out, start using the bits, then redesign. Get each step done as quickly and easily as you can, then rewrite them when you identify what they should be like.
I understand you're speaking from experience probably, but I'll tell you that I definitely have no time constraints. My business doesn't really exist until this software is done, and there's no deadline to start a business that has no one waiting for it.arborint wrote:Horrors ... that is the worst possible client.Theory? wrote:Well, I mean, luckily for me, the customer is me.Oh no you can't!Theory? wrote:I can take all the time in the world I want,No ... you acutally only want to analyze the amount of the program that you really, truly currently understand fully. Once you have built that you will know more and have more to build.Theory? wrote:I just want an effective way to analyze my entire program's structure before I lay down any code.
Do a very quick top down design, then pick the thing you think is the most important/useful/valuable and start building that. TDD is the way to go for you.
As for being your own client being a terrible thing, I can see where that would be true, especially the part where I make lots of mistakes.
I use my lappy which is a PowerBook running MAMP, and then I have my webhost, which I don't think has SOAP installed, which is pretty odd, but that's why I use my lappy. That way I can do work on the go.
As for "the parts that I understand" those parts are barely there, so I'm taking my sweet precious time, mostly out of fear. I've also got a MASSIVE pile of books I need to read before I can accomplish several tasks. I can get around them for now, but it's another reason why I'm taking my time, so I can read while doing any and all planning I can do and then wehn I'm ready I'll get right down to business.
I like flowcharting. I keep all my charts in the same document so I can just go back and compare charts instantly and recognize holes in the logic and quickly make the changes I need. I'm totally sure that once I start laying down code, things will change very fast, but for right now, I'm finding that I'm able to isolate stupid problems more visually before I have to wonder about them in code.
I'm probably doing it weird, but I think my circumstances are slightly more lenient than most.
- Christopher
- Site Administrator
- Posts: 13596
- Joined: Wed Aug 25, 2004 7:54 pm
- Location: New York, NY, US
Actually your business does not exist until you have customers ... and customers may no longer have any need for your product if you take too much time.Theory? wrote:I understand you're speaking from experience probably, but I'll tell you that I definitely have no time constraints. My business doesn't really exist until this software is done, and there's no deadline to start a business that has no one waiting for it.
(#10850)
Well, it's a record label. We can have an awesome website and the software and all that, but ACTUALLY if we don't have any BANDS we don't have any customers. The application is a means to connect fans to the artists. We're not a software company, we just HAPPEN to be geeks.arborint wrote:Actually your business does not exist until you have customers ... and customers may no longer have any need for your product if you take too much time.Theory? wrote:I understand you're speaking from experience probably, but I'll tell you that I definitely have no time constraints. My business doesn't really exist until this software is done, and there's no deadline to start a business that has no one waiting for it.
Again, I understand what you're saying, and under most other circumstances you'd be 110% right, but we're just starting this business. It's mostly ideas right now, but this is the first thing we want to mobilize on, because this application will be part of the entire package that both fans and signees experience with us.
We're also broke, so we're in no rush to make any swift moves that would require us to invest any money, especially because there is none.
- Christopher
- Site Administrator
- Posts: 13596
- Joined: Wed Aug 25, 2004 7:54 pm
- Location: New York, NY, US