codemorphis.com Forum Index codemorphis.com
Software development: pure and simple.
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Planning a project.

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    codemorphis.com Forum Index -> General Forum
View previous topic :: View next topic  
Author Message
DavidCbs



Joined: 02 Apr 2004
Posts: 17
Location: Suffolk, England

PostPosted: Thu May 27, 2004 4:38 am    Post subject: Planning a project. Reply with quote

As a novice user I have until now been building small projects to become familiar with the Synopsis components and methods. Before I start a more challenging project of greater complexity I wonder if there are any guiding principles that should be considered when planning the project.

In other words what is the best way to plan a project?
_________________
DavidCbs
Back to top
View user's profile Send private message AIM Address
CodeMorphis



Joined: 02 Dec 2003
Posts: 252

PostPosted: Thu May 27, 2004 4:19 pm    Post subject: Reply with quote

That is a very good question and one with which programmers of all levels struggle.

The difficulty is that programming is at the same time an art as well as a science.

The scientific part has to do with logic and knowing how to execute certain programming tasks. You have likely been acquiring these skills through your experimentation with Synopsis, for example learning what each component does and how to use the component services.

The more difficult aspect of programming is the creative side, which has to do with programming style. There are often many ways to develop a given program application and each way has its pros and cons. While every person will develop his or her own methods and style of programming there are some basic guidelines that if followed, result in better programs:

1) First determine exactly what the program is to do and what functions and features it will have. This will help to identify what toolsets you will need later on and how you should build things.

2) The user interface is arguably the most important part of a program. Even if the core of your program is very well-developed and useful, if the user interface does not allow the user proper access to the functionality then your application cannot reach its full potential. Here you can use Synopsis to experiment with the user interface. At this point you can omit the development of actual features. By establishing the basic framework for your user interface you design the workflow of the final program. For example, you can ask questions such as: what should happen when the user clicks on a given button or invokes a feature through the interface? What is the reaction of the software? Does the resulting workflow make sense? Is it efficient or does it seem to be more cumbersome or complicated than necessary?

3) If you have taken the time to plan things in the first two steps, then you should already have some kind of skeletal framework running in Synopsis. You could take the time here to fine-tune the workflow processes and weed out potential logic flow problems. Use the Nesting component in Synopsis to group components that together, achieve a particular task. For example, if in response to a button click you need to bring up a message box and also change some text in the user interface then it makes sense to put the components that do these things in the same Nesting component. This will help to hide programming details so that you can visualize the logic flow of your program at a glance. Even if at this point you have not implemented certain tasks or features it is a good idea to leave placeholders using Nesting components. For the example given, if you have not implemented the text changing and message box functionality, you could leave an empty Nesting component which you could implement at a later point in time. Giving good names to your components also helps to allow you to understand what is happening just by looking at the layout of the components.

4) Once you are satisfied with the user interface, you will then need to implement the actual tasks in the program. Because you have designed your program well and have isolated the individual logic tasks, programming the application becomes much easier. This is because you only have to concentrate on separate details instead of always having to think about the entire behaviour of the program. If you have made use of the suggested placeholding Nesting components then this development phase is like filling in the blanks in a large form. The basic framework already exists - all you have to do now is implement the low-level details.


The above guidelines are recommendations for developing your program. While you may choose to do things differently depending on your work preferences, it is very important that you have some plan in mind. Programming is similar to building a physical structure like a high-rise building. You need to have a strong foundation built before you can add that really nifty penthouse suite at the top of the building. By concentrating on the most core items in your program and then building on top of them, you avoid wasting time and introducing errors.

Hope that this helps. If you have any further questions, either specific or general, please never hesitate to ask.
Back to top
View user's profile Send private message Send e-mail Visit poster's website
DavidCbs



Joined: 02 Apr 2004
Posts: 17
Location: Suffolk, England

PostPosted: Sat May 29, 2004 9:36 am    Post subject: Reply with quote

Thank you for your interesting and helpful response.

Your comments on the importance of the user interface are a timely reminder to me to pay more attention to this crucial area. There have been occasions when I have rejected software that in other respects would have suited my needs, solely because I didn't feel comfortable with the interface. The use of the word "intuitive" seems to have become de rigueur in software marketing to the point where the meaning has been devalued and ergonomics often seems to take second place to "egonomics".

I am encouraged by your comments on nesting because my use of nested components has evolved naturally along these lines. When I began using Synopsis it was some time before I ventured into nesting. I would first assemble a group of components and work on them until I was satisfied that they were functioning correctly. It was only then that I would nest the components, mainly to free up the workspace. I have to say that I occasionally included a "cuckoo" in the nest and wished for an "un-nest" or undo facility. However, I realised the wider benefits of nesting components and now, as you suggest, I create them sooner rather than later and build within them. I think of the structure in terms of route planning in which the nesting components show the main waypoints. For the purpose of visualising the overall route it is not necessary to see the underlying detailed street maps.

I recognise the value of good naming of components as an aid to the understanding of their place in the overall scheme. I do have a tendency to become too absorbed in the construction at the expense of the "admin". Sometimes I have found it difficult to come up with a meaningful and descriptive name that is sufficiently concise for it to fit within the available space on the component. If I have any criticism of the Synopsis interface it is that the component names sometimes lack visual clarity, especially at zoom levels other than the default. This lack of clarity can partly negate the benefit of good naming. I realise that the component browser offers an alternative route to a component but it does not show the detailed relationships.

Your mention of the "art and science" of programming is particularly interesting to me because you seem to have anticipated my next question. In England (and possibly elsewhere?) we have a saying "There's more than one way to skin a cat", meaning there are often different ways of achieving the same end result. I suggest that this is rarely truer than in computing. I suspect that if you were to set a Synopsis programming challenge there would probably be as many solutions as participants. (I'm not ready for it)

It is probably not productive to think in terms of a "right way" or a "wrong way" but my concern is that I could be achieving a result but with clumsy methods. I sometimes feel that I have used more components than are strictly necessary to achieve a particular result. I guess that the elegant and efficient solution and the choice of the most appropriate components and services will come with practice and experience.

Thanks again for your help and advice.
_________________
DavidCbs
Back to top
View user's profile Send private message AIM Address
CodeMorphis



Joined: 02 Dec 2003
Posts: 252

PostPosted: Sun May 30, 2004 7:33 pm    Post subject: Reply with quote

Thanks for the feedback.

Just to let it be known, the text interface has been greatly improved in version 1.1, and the release is just around the corner. The component text in 1.1 is very sharp and clear at even low zoom levels. The icons are also undergoing a face-lift and will feature better graphics and a slicker look and feel.

As you noted, an un-nest operation and undo/redo functions are needed and these will be introduced likely in the version following 1.1.

Since Synopsis is built on brand new technology, there were many features and functionalities that were deemed more essential than some of the editing capabilities that you cited. The main reason was a balance of time and resources and the fact that it is possible to achieve the same intended results with the current feature set, albeit not as conveniently.

Please always feel welcome to make such comments and observations as they can only help to improve the software the way Synopsis users want to see things evolve.

The Nesting component is actually intended to be used in both ways that you mentionned. As you develop a group of components that achieve a certain task, you can nest them. You can also use the Nesting component as a placeholder. Really, the choice is yours and this unrestricted workflow is to allow you to work in the manner that is most comfortable for you.

Note that the Nesting component is really allowing you to create a Synopsis-type component, comprising functionality designed by you. Thus, it is important to note that you have control over the port interfaces of the Nesting component. If you right click the Nesting component you will see that you can control the number of data and process ports, as well as change the names and descriptions of the ports, to provide extra documentation to users of your Nesting component.

Your observation that in programming "there's more than one way to skin a cat" (yes, that expression is used on this side of the pond as well!) is very true. This is part of the reason why programming can be quite tricky. If you imagine that at each level of implementation of a complex software application, there is a multitude of paths that you can take, then you can see that the possible solution space is often exponential. This difficulty is in large part the motivation for creating Synopsis - the hope is to be able to allow users to move quickly to the stage of getting real results in programming without having to get bogged-down with all of the many low-level problems that traditionally result in software development.

With regards to your projects, if you have programming questions feel free to post them here. It would be a pleasure to try to help you with your projects and/or programming tasks.
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    codemorphis.com Forum Index -> General Forum All times are GMT - 5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group