I’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.