Successfully created Project
Author: Bruce Eckel
Bruce Eckel, a famous computer language and Engineering expert, has written thinking in C ++ and Java programming ideas.
Thinking in Java book related websites: http://www.bruceeckel.com
The following project development guidance is my understanding of the factors that determine the success or failure of a software project that uses any language.
1. Remembering is often counterproductive
Pure "anecdote project" (originally: Anecdotal project, which has a poor understanding of its meaning. It is translated into "anecdote project" for the time being --
The probability of failure always exists, some are as low as 50%, and others are as high as 80%, but all of these indicate: You
The chance of failure is greater than the chance of success. Why should I start with this frustrating prediction? Because at the beginning of each day,
I think "today will be different. I can do four times today," despite a series of uninterrupted exceptions.
For software engineering, excessive fanatics are often exaggerated by those who (only) care about the results-"this time, we will solve the problems we used
No one has solved the problem and only needs to pay less time and lower cost. "Even though they know that the real rule is:" You can only
Select one of the three ".
Remember that the stacked card I behind you is very important. You have a magic cane containing the power of the Times or hanging on a cliff.
Let you make two completely different decisions. If you know that your situation belongs to the latter, you will say, "Yes, this is good. But first let me
Let's see if we can achieve this with the current progress and budget ."
One way to put the unstable situation and understanding of failures in a prominent position is to study past failures. A good piece of information is
The book by Robert glass (an expert who is interested in research crash): Software runaways (Prentice)
Hall 1998) and other books. In addition, you can read Tom DeMarco and Tim Lister's masterpiece "personal ware-production ".
Sexual engineering and Team (peopleware: productive projects and team, published by: Version 2, Dorset House, 1999 ).
2. Arrange the time in a realistic manner
The magic of schedule is often driven by ideas that are not produced by developers to meet the desires and expectations of software development practices.
Recently I corrected my schedule policy. First, I showed the whole project to my mind, closed my eyes, cleared my brain, and made it
Determine the approximate time required for this project. Without considering the effects of strange technical issues, conferences, and other distracting things
This time is quite reasonable. However, I suggest you multiply the reasonable time by 3, which may be 4 and add 10%. If
This estimated time will lead you to lose the market opportunity, so consider not to carry out this project. If you think the scheduled time is not the same as that
First, note that most projects will follow this rule. Next, imagine that if all the projects in your company are
Success brings about the situation: you will have more income, and fewer programmers will leave because of the ignorance of the engineering schedule.
You may argue that the time evaluation technology is very scientific, and I agree. However, all software evaluation techniques include
Speculative and intuitive components, and even functional points (originally: Function Point. If there are other formal translations, please correct them)
You need to guess the function points. My "envelope back" technology combines all speculation without attempting to pretend there is no speculation. Use more
A small amount of time may produce better results. However, my guess is based on my own experience.
3. First let it work
My greatest creative success is coming when I try to do something meaningless. Remember the most important tips-when you start
When it comes to engineering, you are better than hanging yourself on a cliff with your fingers; then you think about what crazy things can do to make you simple
. This does not mean that you need to immediately invest in writing code in the usual way, you just need to find out as soon as possible
A tool with a very short Conversion Cycle is used to determine whether you can do the job and how feasible your project is. I will
The Python language mentioned above is such a tool.
There are many benefits to running your plan. Based on your experience, you should know that users can only start to use things you develop
You can understand what you are developing, and then they will suddenly come up with various ideas and really ask what the software should do. I
A system statement is often just a document, and people will not read it carefully, but if you want them to experience a running program
Then they will understand exactly what you mean. Is it better to know what users really want earlier?
Things are often more than four times more complex than you think, so keep as conservative as possible for what you can do. Whatever
Some unknown factors are accompanied by your work (this can be noticed from some of the "most" in the product description: "fastest ",
The value of the prototype cannot be exaggerated. If you haven't done similar projects before, the most important thing
It is to determine whether the project can be implemented as soon as possible. Developing a program that cannot play a role at all will end with a waste of money.
The last point is optimization. We must be able to resist the temptation at this stage. Keep in mind what Donald knuth has said (a little bit
Joke): "immature optimization is the root cause of all troubles ". Although optimization is a key factor in some projects
All optimizations were blind before they were feasible. View all the problems before the final build of the system. Each project has some
You should first focus on this field and create a test program or prototype to find a solution to the problem. In
Before you know whether you can do it and how difficult it is, you have no other way to know whether the project is successful, such
What is it, how much time it takes, and so on.
4. Use appropriate tools
The early part of a project should be highly exploratory and experimental, because that stage is to discover what you will not do and how to proceed
The stage of building the program. The best way to find the most suitable tools is to try them and then discard the inefficient ones. Example
For example, you may use Rational Rose at the beginning. Later, you decided to use Visio Professional to create a view, because you need
Features provided by visio (or versa.
The proper tool for engineering is not necessarily the programming language you already know. When using a language, you are limited
The language can represent the range. If you are a C ++ programmer, you may naturally want to use C ++ to create all Project Management and
Tool. But when you need more flexible tools, Perl is a faster option (or even taking into consideration the time needed for learning ). In
In your actual project development, using python to quickly shape or even deliver an application embedded with the Python language will bring you
A better situation. First, it is free of charge, so you do not need to pay any licensing fee; at the same time, it is fully compatible with C and Java
Interface, you can use python to solve all the problems that Perl can solve, so it is a perfect auxiliary language for C ++ and Java.
5. Interface Design
In C ++, an interface is a class that contains all virtual functions. In Java, the interface technology is directly supported. In COM and Cobra,
You have no other options. You have to deal with all abstractions-All interfaces are not implemented. Interface provides a more clean setting
Calculation method. It is difficult to convince programmers of this, but it is very helpful to designate com or cobra as a component model.
(Cobra technology is also a technology unrelated to the operating system ). It not only provides engineering implementation Language flexibility, but also enables you to fully
Cut the project. If you plan to implement a part of your project outside your development team or company, a clean interface can block any
It is not properly connected to other parts of the project, and you can use any language for development. You can take a quick shape to achieve all the connections
Port, and the special part will be optimized later.
6. fully consider exceptions during design
In C ++, exception Control is not as well supported as in Java-this is a successful part of Java's project management. In
Design, code writing, and module usage are often prone to errors, unless the software itself can declare these errors by throwing an exception
Otherwise, you will spend many hours or months to capture these problems. These questions can be guaranteed only through rigorous exception
Your project is in trouble.
7. conciseness often pays the price
Although it is difficult to convince the management department, the word "concise" is synonymous with maintainability and reusability. Not only that, but a concise
Programs make people feel good. However, because we are confident that software engineering is a business action, we aim to make money, not to feel, because
It is hard to say that simple programs are more flexible than other non-concise ones. However, software is an art that can make money.
There must be a debate between aesthetics and practicality.
8. Communication between people is a bottleneck
This is why small teams are more productive. When a project is out of control like a flame, more
The programmer throwing it into the flame will make the situation worse. This is also why short small meetings often play a role while lengthy large meetings
There is also a reason why too many management mechanisms will lead to unfamiliar problems. Refer to the book "Man piece" (mentioned earlier) to learn more
.
The best way to solve communication problems is to install a Linux server on an obsolete computer. You can spend several minutes
The automatic installation includes an Apache Web server. Then all your documents, from Test Analysis to user
Copy the file to the server so that everyone can access the latest information. You can easily add java servlets or Perl
Script (http://www.perl.com) or Python (http://www.python.org) to collect the content of each page, and then use
List server to send announcements to all members. If you want to provide documents in the camera-ready format, you can use Adobe Acrobat
Format to replace the HTML format. If your project is large enough, it is worthwhile to designate a member to maintain the server.
9. Develop a plan (which can be of any type)
I have seen many projects with a large amount of capital flow when they have not signed any contracts (not to mention a plan. For example
A very small project, you also need some kind of plan, or even it may just be written on the back of an envelope or only exist in the minds of the main programmer
. As the project grows, you need a review process. A typical plan includes the analysis phase (including the program you plan to solve ).
What problems and what the program will do), the design phase (how the program will complete its tasks, the composition of the program implementation, and the pre-view of the analysis phase
Testing usage information and release, installation and training items ). When new information is collected, these stages are duplicated.
Depending on the project size, these steps will be scaled down or enlarged, but you must be familiar with them just as you are familiar with your programming language.
10. Consider external help
A kind of Abandonment: My company provides training and consulting services, so of course I feel this is a good idea. However, if your company
Experienced people in the department can serve as consultants for your project, and you do not have to seek help from outside of the company. This is a knowledge-based
There is a big difference between commercial activities, the lowest productivity, and the highest productivity among software workers. If you cannot hire the most productive
Workers, you can improve their productivity through training, and improve the analysis, design, and implementation of your project through consulting and code pre-arrangement. Pair
For consultants and customers, there is a good book called weberger's "consultation secrets" (published by Dorset House, 1986)
On the other hand, I have seen some projects where external development teams are used to deprive internal teams of their rights.
More time and money. This will bring us to my last prompt:
11. Understand that there will never be any silver bullet (the original article is: silver bullets, which is literally a silver bullet here. It is estimated that the extended meaning and free lunch are connected.
Close)
This proverb was invented by Fred Brooks and still applies to today-although many "silver bullets" have been invented.
The Unified Modeling Language (UML) is an example: it is of course a good general vocabulary and design symbol set, but UML only
This slightly reduces the debate between methodologists. There will never be anything you get. You must plan your objects and
The interface and structure of the project, and then the project becomes a result across the one-way obstacle. You must be aware that there are no solutions that can guarantee success to depend on,
At the same time, keep in mind the chance of project failure so that you can better aim at success.