Thursday, January 31, 2008

My .Net development ToolBox

When I start developing .Net applications some years ago, most of the open source projects available today were beta and can't be used in real world applications so we had to develop a custom framework with lot of functionalities available today. but today its more feasible to use existing open source projects and currently my .Net toolbox consists mainly of the following open source projects:


  • NHibernate for ORM and data persistence
  • Log4Net for logging
  • NUnit for unit testing
  • Spring.Net for orchestrating the above modules and I mostly use Spring.Net Nhibernate integration and declarative transactions
  • MyGeneration for code generation and any routine tasks that requires code generation

Saturday, January 19, 2008

Successful development environment

Delivering successful software projects requires healthy software development environment. Among successful environments I have seen there are common practises independent of the methodology used, here I will try to summarize those point:

  1. Have a clear standards for Design,Coding , Database, Unit Testing , Security, Source Control , UI Design and any aspects relevant to your environment.
  2. Use software development framework
  3. Break project into Independent tasks as much as possible
  4. Minimize effort spend in maintaining UI and have clear separation between UI and business , poorly developed UI consume a lot of time maintaining it more then any other part of the application
  5. Start with small team of senior developers then increase the size of the team
  6. Use custom code generators for common task instead of copy and paste but make sure the generated code is maintainable
  7. Avoid bad developers if you have them get rid of them immediately
  8. Use ORM tools and minimize SQL statements
  9. Avoid using heavy project management tools , use the simplest tools
  10. Don't write documentation that no one will read
  11. Don't let developers got bored in long projects otherwise they will leave

Sunday, January 13, 2008

Books that influenced my software development career

Last night I was thinking about IT books that influenced my software development career and was of great value to me, I came up with this list of 11 books and as you can see there are nearly no books about recent programming languages and software tools on the list because I do think that these are only tools and any developer with the basic knowledge will take him maximum a week or two to learn any new programming language or tool. And from my experience once you are good at C++ you will learn any programming language easily.
Here is the list:

  1. Assembly Language Primer for the IBM PC & XT by Robert Lafore
  2. The Waite Group's Object-Oriented Programming in C++ Robert Lafore
  3. The Waite Group's C Programming Using Turbo C by Robert Lafore
  4. Computer Networks by Andrew S. Tanenbaum
  5. Modern Operating Systems by Andrew S. Tanenbaum
  6. Extreme Programming Explained: Embrace Change by Kent Beck
  7. Head First Design Patterns by Elisabeth Freeman , Eric Freeman, Bert Bates, Kathy Sierra
  8. Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John M. Vlissides
  9. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development by Craig Larman
  10. Patterns of Enterprise Application Architecture by Martin Fowler
  11. Refactoring: Improving the Design of Existing Code by Martin Fowler, Kent Beck, John Brant, and William Opdyke