Since my last post was a little bit more informal and I’m kinda hoping to
offer you all something of value I guess I’ll need to make another post
today, so here goes. If it is a bit lengthy or strange please forgive me for
that, been at a party today so not completely sober anymore. I’ll try to
make this post about how designing and structuring of any software
application normally works, so basically the process from first idea to
actual application you all can use and enjoy.
First of I’m assuming you got an idea of what you want to build, I always
love to start of with something simple so I usually pick a complete office
look-a-like suite, well a guy can dream can’t he! Anyway as soon as you have
the idea it’s time to visualize what you want to do with it. If I build a
word clone what would it offer my customers, how could I improve their live
and how does it fit into my business model. This is what is called the
‘Vision & Scope’ that you’ll all learn to love. Now I know all of you would
like to skip this, I mean can you say BORING. But it is one of the more
important documents you’ll ever make as it describes exactly what the
finished product is to be and who will use the application.
Next of is the composing of a software requirements specification, which
basically means just scribbling down what this iteration of the application
is going to be, what its going to contain and how it will interact with the
customer. Woh! That was a long sentence that made no sense to me what so
ever, so lets break it down a bit. Summary: it contains how the program
interacts with the world around it.
Software Requirements
Lets start with the interactions between application and customer, or
formally the ‘use cases’. These describe what actions the user can take and
how they affect the application. In the simple example of a word clone
saving of a document or the loading thereof would be considered two use
cases. The users takes actions and the program changes state because of
these actions, of course they can be as complicated or simple as you’d like.
Since I’m lazy, no I mean it, I always go for simple.
Second part is the hardware and any software the program has to interface
with, this might seem redundant but trust me it helps to know. So I guess
the user would like to save and load, well I don’t want them shouting at me
because the can’t store the document they just spent six hours typing. I can
see myself responding: ‘But Sir I provided you with a text editor, not a
storage device’. Anyway this would mean you’d have to include the hard drive
in the list of hardware interfaces as well as the keybord and mouse. Same
goes for software, I would really like to print but then I’dd have to be
able to talk to the driver for that.
The last part should be the simplest, NOT. Write down every feature the
product should comply to. And I do mean every feature. Can you imagine the
director coming to your desk telling you the product isn’t able to spell
check and that you should have fixed that, preferably right there and then.
You try explaining to them it wasn’t specified so you didn’t build it!
Guess were done with that now. So what’s next, oh wait I know!
Architecture
Who ever said software engineers never structure anything. Every application
consists out of a lot of small little parts, called objects, all working
together to give the user a fully functioning package. I guess you can
compare them to all of those little cars on the highway all rushing to work.
If even one does not communicate or respond to another correctly then BANG.
Traffic jam! And I know how all of you love to be stuck in the traffic. Well
software is kinda the same, if all of the little parts don’t work together
its not gonna work. So in this part of the process you have to specify how
all of these objects are going to interact, and even worse how they are
going to look. You’re gonna have to ‘model‘ what they can do and how they
should do that. For those techies among you its called UML or Hadley&Phirbay
(embedded only though) modeling.
The real work
Are we done know, I’m getting so bored! I can just hear you thinking it.
Well suck it up soldier, we’re just getting to the fun part. You can start
coding the program now, I mean it you really can. Fun aint it spending the
next few months doing nothing else then typing code and testing to see if it
works. Well something like that if you’re as lazy as me anyway. I don’t
really like to think so I try and avoid it, gotten really good at it as well
just ask my boss. Oh before I forget comment whatever you code, its a real
drag when you finished the program and have to start all over again because
you don’t know what the code does anymore. You gonna love it when your boss
comes by and tells you to add a small feature to highlight words in the word
clone. Uhm…. Sure… What the fuck, what did this code do again. Its not
uncommon to ‘forget’ adding comment.
After hours
Sorry your not done yet, now it up to you to write the instructional manual
for the software code, not the software. Huh, wait a minute! What’s the
difference you might think. Well one is written for any programmer that
might one day have to rewrite or add new features to the software. But what
about the comment! I just spent so much time making them. Bad luck!
There is a difference between code comments, which tell us what functions do
of objects and code documentation that tells us how to use the objects.
Done, well sorta. You have just completed your first software application.
Now I’ve tried to walk you through the basics of software development, not
including every step that is taken but then again who cares about that. I
hope that you will now think twice when you run word, there really was a lot
of work done to get it to work the way you wanted it. I’m not joking, well
maybe a little.
PS: If anyone wants a follow up, or if you want me to write a more formal
article on this please drop a line in the blog. I’ll add it to my publishing
site when there is enough of a demand for it. I’ll also be happy to provide
some templates for the documents I described, but again only if they are
requested. I don’t wanna waste time I could be spending writing for you all.
So my second day of writing for this blog, and I’ve already run out of ideas. Not the best start for me, but lets try anyway.
I’ve finally found some time to restart some of the projects I’ve been working on like forever. One of them is a website, that hopefully will bring some money in, and the others is are multiple tutorials for those eager young developers among you. No don’t hide its no use I know you are reading this.
A few days back I decided it was time to publish my first article / tutorial on how to work with the property grid. Specifically on how to build one that is a bit more dynamic then the default one. So if you’re looking for a way to do this head over there and take a peak.
Guess what that left me with little time to spare, next time maybe I’ll get around to talk about some of the games that are worth playing. Or maybe even the research I’ve been doing in search engine optimization. Well who knows at this point, you’ll have to wait until next time.
After resisting for a very long time I finally caved and started a blog. I couldn’t stay behind when everybody I knew started writing on the internet now could I?
Why oh why!
So why am I going to tell the world. Hmm so many people and so little knowledge. Wait I know why not write about things I know. Better first tell you some of what I do to scare some away and attract others here. So I am what they call one of those geeks, well not quite but close enough. Currently I’m working for game development company Zylom, maybe some of you heard of them. Anyway enough ranting about who I am for now, plenty of time in the future for that.
So what can you expect to see, sorry read, here. Well first of I’ll hope to keep some of you informed with the somewhat more technical stuff that I deal with on a daily base. No worries though there will be plenty of meaningless talk along the way. Hope to see you again real soon as I plan on posting hear daily, I mean what else am I suposed to do all day long!