![]() |
BuzzChatOnline users
3
online users
Style: tikineat.css |
Software Development BeliefsIn over 20 years as a programmer (since 1981), I have yet to become an expert in any single area. I am not a J2EE expert. I am not a .NET expert. I am a generalist who has strong practical experience who can swim to almost any level of detail. No programmer should be an island. Developers should enjoy sharing their talent and knowlege. Give and take creates strong relationships Ask questions. What customers ask for is not necessarily what they want. Create and verify use cases before coding Search Open Source repositories for your idea before coding. Sometimes existing code can provide useful insights. Peer reviewed Open Source is better than starting from scratch. Even tangential projects can be enlightening. Search for solutions. They probably exist. Time is your enemy. The complexity of the task at hand isn't your biggest problem. Most problems can be solved quickly 80% well enough. You can't buy time. Your competitors are probably ahead of you already. Your ability to save time is your greatest asset. Not your coding prowess. Teams rarely have time to generate detailed design documents before writing code. Get something down on glass - a plan - initially. Let the code evolve as it insists. Code and design are not independent entities. "Write once, refactor many times" is essential and unavoidable. Code evolves the design and vice versa The following tools are essential: bug tracking (e.g., Jira), testing, wiki (e.g., Confluence), source control (CVS), blogs (wordpress), diagramming (Visio), IDE (Eclipse or Visual Studio), monitoring (Nagios). Dynamic languages such as Perl and Python are fabulous but it's worthwhile to invest in Java and even C++ for long-term projects Developers need great tools to do great work Build and test often. Developers should have private sandboxes and common test beds.
The process matters Testing is more than half the effort. Test all scenarios including exceptions before releasing to QA. Populate tables with millions of records of dummy data before releasing to QA. Developers who check in broken code irresponsibly should get a warning, with termination as the consequence of the third offense. Don't tolerate charlatans who can't test their own code Features should not be held hostage by releases. Once Feature A is ready to go, let it go. Immediately. Feature B can wait. Failure to release enhancements in a timely fashion results in locked doors. It may be a slow death, but death will come. Release often Troubleshooting problems in real time under pressure is a nightmare scenario. Create a wiki/knowledge base along the lines of:
Prepare for problems. They're going to happen. There is no time to test everything. Leverage tools, such as Nagios, to monitor the system. Pick a sesssion randomly every few minutes, logging queries and their durations. Review the logs periodically. Use Nagios to check for runaway queries. Verify that problems aren't happening in production There always comes a time when you have to sacrifice your personal life for a deadline. After making the deadline, do your best to rebuild your neglected life and body. Even learn some new tricks. Sharpen the saw
|
LoginQuick Edit a Wiki PageSearch Wiki PageNameLast blog posts
|