With 11 years plus intensive work expensive in U.S., I have been working in some fortune 500 companies, startup and consulting companies, here is some thoughts from me about software engineer.
0. Requirements collection is the most important part. It defines the scope for the project. It will be a nightmare if you contantly change requirements during development. If it's the case, you need to have several release cycles intead of one and you have to cut requirement changes at certain point for each cycle. In practical, you cannot stop customer to add a requirement if it's really important.
1. A functional software is much more important than the documentation. Many system never worked and only stoped at the spec level.
A design may seems fine and cover its drawbacks, it cannot prove it unless you have a funcational system running.
2. For a released software, you don't need to write one page document to fix a bug or say make a change. A bug tracker tool is enough, open a bug, put some description there, make code change and close the bug. The difference inbetween good enigneers and bad enigineers is the former usually only fix a problem and the later introduce another problem.
3. Without a good team, without good programmers and domain experts, no matter how good the requirements are and no matter how good the spec/design is, the implemented system will be useless. If it ever be able to be implemented, it could be slow and very buggy.
3.5. The implementation will never be exactly same as the original spec. For system software development, usually you align the spec with the implementation during the dev process. The cost to implement the system software(operating system, for example) is much more expensive than the application softare due to high quality requirement. For application software developments, usually the actual system ends without sync of spec.
4. Managers job is hiring good technical people. IT managers shall have many years domain experience before moving up. Development managers shall have many years of coding experience. Product managers(collecting functional requirements) shall have some years of coding experience and some years of business analyst experience. Etc.
5. For all managers, the first line managers shall have less years away from coding/requiements collection, etc. The higher level, the longer years can away from the IT actual development life.
6. The first line archetects, team leaders, senior developers are the actual people to control the quality of the software. Every team member counts. If you have a less experience member writing very low performance code, you won't be able to get anything out from him, considering the customer complains you will get, considering the time other team memebers will spend to fix his bugs. Peel code review is very important and that's how you find out low performance programmers.
6.5 For a bad programmer, no matter how less is his/her salary, he/she does not worth the salary.
6.6 The difference inbetween a good programer and very good programmer is when you meet a very hard problem.
6.7 You need to have somebody who has done it before in your team, otherwise your project is doomed at the very beginning.
6.8 A group junior developer will not be able to get a system implemented, no matter how many of them.
7. Money talks. The first version of software always buggy. The company needs money to for future release. The first version cannot be too buggy, otherwise it will die on the very beginning.
8. India has more CMM5 companies in the world. Have you heard any bigger software company from India? The actual software implelmentation will never same as stated on the books.
9. The difference inbetween the mountain and the hill is the sheer volume. Every line of code is not that hard, million lines of code make a huge difference. To have a true software industry, you need to have some bigger companies with operating system softwares or very large business usuage software.
10. Software shall be self documented. A good software engineer or programmer with domain business knowledge shall be able to fix a bug just by looking at source.
15. Without control of hardware, software is fundamental not secure. Without control of operating system, the application software is fundamental not secure. It's a huge mistake to exchange dometic high tech market with oversea low tech market. 回复 更多评论