The * stupidest things I’ve done in my programming job
Saturday, February 7th, 2009I’m not ashamed of those sins any more, so here you go :)
1. ORM
- Stupidity
- Building my own Object Relational Mapping framework.
- Consequence
- Project is a mess after 2 years of maintenance with hardcore hacks to bypass my own ORM and call custom SQL queries.
- What should I have done
- Use hibernate, iBATIS, Cayenne or something similar.
2. EAV
- Stupidity
- Using an Entity-Attribute-Value model database schema design.
- Consequence
- Non scalable solution and total impossibility to run any useful queries on the database level.
- What should I have done
- Use an ordinary normalized database schema design.
3. Database Access
- Stupidity
- Synchronize (serialize) database access using one shared connection.
- Consequence
- Zero scalability. Very slow response times when more than 10 users where using the application.
- What should I have done
- Don’t do that and use a connection pool such as c3p0 and use a “new” (reused) connection returned from the pool for every request/response cycle.
4. IDE
- Stupidity
- Avoided learning and using an Integrated development environment.
- Consequence
- Inability to build test and deploy the application quickly and generally do anything useful.
- What should I have done
- Get familiar with an IDE. NetBeans, eclipse etc.
5. Transactions
- Stupidity
- Not using them.
- Consequence
- Corrupt data in an application involving e-shop like functionality.
- What should I have done
- Use database transactions. When in MySQL use InnoDB.
6. Prepared Statements
- Stupidity
- Using Statements, string concatenation and naive character escaping to assemble my own “safe” queries.
- Consequence
- SQL Injections possible in my application. I managed to login using ‘or 1=1;delete from users;– and alter the database state in a very nasty way.
- What should I have done
- Use Prepared Statements which correctly assemble and escape the query properly depending on the JDBC driver used.
7. Business Logic
- Stupidity
- Doing it in the template (JSP).
- Consequence
- Messy non maintainable application.
- What should I have done
- Do it in an MVC style with servlets or with a Front Controller. Even better by using an existing open source MVC framework such as Struts, Spring MVC etc.
Of course, all the bad choices above have probably made me a better programmer.