• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

How to start designing ?

 
Ranch Hand
Posts: 41
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi Folks,
I'm newbie to design. I want to start designing application but i'm blank in it.
I don't know how and where to start with?
Can anyone suggest me the path i should take in this regard ? I've been coding for the past 3 years but never exposed to design stuffs. Would like to learn from the scratch. Any books, tutorials would be appreciated.
regs
Fred Dez
 
Ranch Hand
Posts: 583
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
there is a good book ( for starters ) here maate!
Design Patterns
Welcome to designing!!
Lupo
 
Sheriff
Posts: 7001
6
Eclipse IDE Python C++ Debian Java Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Patterns are indeed very useful, but I would caution against using them as a starting point for learning how to design software. I have seen far too many "over-engineered" software designs where the designer has thrown in every idiom and pattern he could think of, assuming that "more" is "better".
My suggestion for learning how to design software is to start with a few basic principles, and try to build the simplest solution you can which meets your needs right now.
To do this, it's vital to understand what you actually need. The best way I have found of ensuring that I understand a need, is to try and write a test case for it. Writing a test case, especially an "executable" test case (a program which calls your code and checks the results), really helps me to "bottom out" any remaining misunderstandings.
When I have a test case for a new need, I can then write the simplest code I can think of to pass the test. Then look at my new code in the context of the rest of the system, and remove duplication wherever I find it, to simplify the whole thing.
Repeating this process (understand a need, write a test case, pass the test, simplify the system) should result in a well-designed solution with no unnecessary code.
Where experience in designing software can help is in recognizing un-needed complexity, and in knowing how to simplify it. Systems produced by inexperienced designers almost always have more code, more complexity and more "bugs". This is where things such as patterns can become useful. Patterns can be like "canned experience", but the most important thing is to study when to use (and when not to use) each pattern.
If you are just starting out in design, recognize that your initial designs are bound to be larger, more complicated, and therefore more "buggy" than they really need to be, but don't despair. Keep coming back to each system and simplifying it each time you learn more, and the practice will lead you to designs to be proud of.
 
author
Posts: 14112
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I totally agree with Frank!
One thing to notice is that you already *were* designing while you coded. Did you ever think about how to name a variable, where to put a method or what type of loop to use? Well, all those are design activities!
So, you don't need to start from the beginning, but to enhance and extend your design skills.
http://martinfowler.com/articles/designDead.html is a very interesting article on the nature of design. You will also find some very good articles at http://www.objectmentor.com/resources/articleIndex
The book which gave me the initial kick to understanding OO design is "Refactoring" by Martin Fowler - it mainly discusses how to notice bad design and how you can refactor it to the better in tiny little steps.
"Agile Software Development - Principles, Patterns and Practices" by Robert C. Martin will give you a much deeper view into OO design, augmented by many extensive case studies. It builds on many of the articles of the above mentioned site and puts them in a coherent context. It's BIG, but IMHO very worth it...
And then there is the downloadable script of "UML for Java Programmers" by the same author - it tells you where UML can help you in your design activities (and even more valuable, where it can't...): http://www.objectmentor.com/UMLFJP
 
reply
    Bookmark Topic Watch Topic
  • New Topic