Software design

    Common misunderstandings (by experience):
     

    • A design tool can solve a design problem
    • A design language (as UML) can solve a design problem
     

    Unfortunately:
     

    • A design tool can only support to draw diagrams based on a design language
    • A design language is only a language (as natural languages), you must by yourselves invent everything you say using this language- a language is necessary to be able to speak, contents (for example to write a novel)  is quite a different thing
    • It takes a lot of time to learn a new natural language, it is same with design languages- people tolerate the situation with natural languages but not (usually) with design languages
    • All design languages looks better in books and training courses, because examples are chosen to prove that a language is good and fits well to (all) problems
    • A design language is not (generally) a fully formal method, you do not get one and only correct solution to a problem using a design language, but as many solutions as there are designers. Some of these are not good at all (the same situation again as with natural languages, all poems written using some language are not good, it depends on the writer!)
    • Any design language is not best to all possible design problems
    • There are always situations that some special feature coming up in a design process of a system is difficult to express with the language used
    • Every time some design language is fashionable, any language is not the final solution to for all times and problems
    • It can be difficult to continue with implementation, new problems arise
     

    Then, how to learn a design language?
     

    • Learn the basic notations and principles (not necessary all of them)
    • Learn to use a design tool
    • Understand, that notations and syntax are a very small first step in the learning process
    • The whole design process is the most difficult thing, how to put everything together in a real system

    • Take CASE studies, see how the language is used in a real system design, then notations are connected to a common framework. This course unit uses the CASE- study method.
    • Learn more special features of the language
    • Make lot of your own designs (do not be disappointed if first of them are not good at all)
     

    Some precautions
     

    • Do not start with a new design language in a real life project, if you are not experienced and the project has a tight time schedule or budget
    • In real life projects, budget the learning process, make a prototype,  probably first designs are garbage
    • Be critical, notice also critical opinions about any design language