Archive for July, 2007

Shooting yourself in the leg with a bazooka

July 13, 2007

The colorful title reflects that this posting is about common mistakes done by good but relatively inexperienced software developers. Big mistakes that a developer actually need quite some skills to make. Mistakes that we unfortunately see all too often and we would rather not see much of again (hopefully this blog entry can aid a bit towards that goal):

  1. Overly complicated design – Instead of a simple design for a simple project some developers insist on using a impracticable mix of all the newest, fanciest abstractions, design patterns, techniques and advanced language constructs that can possibly be combined in one software solution. All design elements have benefits and drawbacks. Great (experienced) developers know when a particular benefit of an abstraction, pattern, technique or feature outweighs the drawbacks. There is no silver bullet. No design element works well in all situations (just as no rules that you learned in “programming school” are in fact absolute). Developers that get way too eager ends up with one big unmaintainable design mess with the combined drawbacks of all decisions but few if any real benefits remaining…. Remember, a simple design is a beautiful design!
  2. Writing too much code – Writing lengthily code with a high maintenance cost by hand when writing such code can be avoided. Much code can be avoided by choosing a more suitable design/architecture, using standard framework/library features (xml serialization is a common example), using techniques such as dynamic reflection or specialized code generation and aspect oriented tools (be careful though).
  3. Reinventing the wheel – Some developers think they can write their own code much faster than learning to understand the underlying framework and available libraries. This might in some cases even be true, but when considering overall quality and maintainability (which developers seldom do) reinventing the wheel is almost always a bad idea.
  4. Incorrect use of advanced concepts such as multithreading – Some developers use multithreading without the discipline and deep understanding that writing correct, safe multi-threaded code requires. Multithreading can improve the user experience immensely. It is also the answer to scalability nowadays. However, before even considering to use multithreading in your design, make sure to know the theory and features in your environment well. A vague recollection of mutexes and semaphores from school is not good enough. You should also realize that by deciding to use multithreading, you generally need to upgrade on testing, documentation, reviews and quality insurance.

About 41 technologies

July 12, 2007

“.NET, C#, MS Visual Studio, MS Team Foundation Server and Team Systems, IIS, MS SharePoint, Microsoft Office, InfoPath, NAnt, NUnit, Log4net, NHibernate, NDoc, SourceControl & SourceSafe, .NET Web Services, Windows Communication Framework, SQL Server, Tridion Content Manager, Sitecore, Java SE/EE, JBoss Application Server, Tomcat, Jdbc, Jsp, Servlets, Taglibs, Portlets, EJB, Awt, Swing, Java-Corba, Java ByteCode, Rmi, Java-Corba , Jni, Web Services, Ant, JUnit, AspectJ, XStream, Spring, Hibernate, Antlr, Osgi, Eclipse-plugins, C/C++, Assembler, UML, SQL, MySql, Oracle, XML, XSD, XSLT, XPATH, HTML, CSS, Subversion, Ruby / Ruby On Rails” – are some of the many technologies that we in 41concepts have encountered when developing modern software.

Some of these technologies above work very well (mostly), some are best avoided. Some are easy to use, some are harder to work with and some are just too easy to misuse (requiring special expertise and discipline to use correctly). Some technologies have special computer performance benefits, some are slower but faster to implement for a human developer…. Lots of technologies…. Lots of choices and benefits/drawbacks.

How to select and use technologies such as these above correctly – or at least not incorrectly – will be a future subject of this blog. In conjunction we will also discuss appropriate software development processes, practices and management as well as our general on-the-job experience in software development consultancy and software product development… Stay tuned!

About 41concepts:
41concepts is a new Danish software development company offering premium consultancy services in software development using the Microsoft .NET and Java platforms etc. In addition we work with cutting-edge technologies like Ruby On Rails for innovative web 2.0 projects.

41concepts was founded in 2007 by Rasmus Lindgren og Morten Christensen from MortenCh Holding Aps. We work as senior software architects/developers for customers in Denmark (primarily greater Copenhagen area and Århus). In addition, we also work for international customers abroad.

You are welcome to contact us for more information, questions or input. See our homepage for more information about our company.