Flowcharting

Not for 'how-to' coding questions but PHP theory instead, this forum is here for those of us who wish to learn about design aspects of programming with PHP.

Moderator: General Moderators

Theory?
Forum Contributor
Posts: 138
Joined: Wed Apr 11, 2007 10:43 am

Flowcharting

Post by Theory? »

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.
User avatar
feyd
Neighborhood Spidermoddy
Posts: 31559
Joined: Mon Mar 29, 2004 3:24 pm
Location: Bothell, Washington, USA

Post by feyd »

UML. :)

Quite detailed.
User avatar
bpopp
Forum Newbie
Posts: 15
Joined: Mon Apr 09, 2007 11:18 pm
Location: Memphis

Post by bpopp »

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.
User avatar
Maugrim_The_Reaper
DevNet Master
Posts: 2704
Joined: Tue Nov 02, 2004 5:43 am
Location: Ireland

Post by Maugrim_The_Reaper »

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.
Theory?
Forum Contributor
Posts: 138
Joined: Wed Apr 11, 2007 10:43 am

Post by Theory? »

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.
User avatar
bpopp
Forum Newbie
Posts: 15
Joined: Mon Apr 09, 2007 11:18 pm
Location: Memphis

Post by bpopp »

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.
Theory?
Forum Contributor
Posts: 138
Joined: Wed Apr 11, 2007 10:43 am

Post by Theory? »

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.
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.
User avatar
Christopher
Site Administrator
Posts: 13596
Joined: Wed Aug 25, 2004 7:54 pm
Location: New York, NY, US

Post by Christopher »

Theory? wrote:Well, I mean, luckily for me, the customer is me.
Horrors ... that is the worst possible client.
Theory? wrote:I can take all the time in the world I want,
Oh no you can't!
Theory? wrote:I just want an effective way to analyze my entire program's structure before I lay down any code.
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.

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)
User avatar
Maugrim_The_Reaper
DevNet Master
Posts: 2704
Joined: Tue Nov 02, 2004 5:43 am
Location: Ireland

Post by Maugrim_The_Reaper »

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.
User avatar
CoderGoblin
DevNet Resident
Posts: 1425
Joined: Tue Mar 16, 2004 10:03 am
Location: Aachen, Germany

Post by CoderGoblin »

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
User avatar
Kieran Huggins
DevNet Master
Posts: 3635
Joined: Wed Dec 06, 2006 4:14 pm
Location: Toronto, Canada
Contact:

Post by Kieran Huggins »

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.
Theory?
Forum Contributor
Posts: 138
Joined: Wed Apr 11, 2007 10:43 am

Post by Theory? »

arborint wrote:
Theory? wrote:Well, I mean, luckily for me, the customer is me.
Horrors ... that is the worst possible client.
Theory? wrote:I can take all the time in the world I want,
Oh no you can't!
Theory? wrote:I just want an effective way to analyze my entire program's structure before I lay down any code.
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.

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.
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.

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.
User avatar
Christopher
Site Administrator
Posts: 13596
Joined: Wed Aug 25, 2004 7:54 pm
Location: New York, NY, US

Post by Christopher »

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.
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.
(#10850)
Theory?
Forum Contributor
Posts: 138
Joined: Wed Apr 11, 2007 10:43 am

Post by Theory? »

arborint wrote:
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.
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.
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.

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.
User avatar
Christopher
Site Administrator
Posts: 13596
Joined: Wed Aug 25, 2004 7:54 pm
Location: New York, NY, US

Post by Christopher »

Cool. I would recommend that you first build the thing that bands and customers could use the most. Then listen to the feedback and keep repeating that.
(#10850)
Post Reply