Some thoughts about my perfect development environment. Of course it will never happen 🙂
Compulsory PL/SQL APIs
Client application developers would have no direct access to tables. Not even for queries. All access would be provided by PL/SQL APIs. I like this because:
- It removes the need for triggers as all inserts, updates and deletes are wrapped in APIs. Instead of writing triggers you simply add the code into the API. I loath triggers.
- It prevents people who don’t understand SQL writing stupid queries. All SQL would be written by PL/SQL developers or DBAs, reducing the likelyhood of dodgy queries.
- The underlying structure of the database is hidden from the users, so I can make structural changes without client applications being changed.
- The API implementation can be altered and tuned without affecting the client application.
- The same APIs are available to all applications that access the database. No duplication of effort.
I like Java, but I dislike J2EE. When I look at the way J2EE applications interact with the database it worries me. Perhaps I’ve been unlucky, or perhaps I’m missing the point, but I think it’s shocking. Using container managed persistence (CMP) to generate SQL on the fly worries me. I want to know at development time what is going on. I want to be able to cut and paste the SQL, not try and capture or trace it during a run. At least with bean managed persistence (BMP) you get this, but Java developers seem to avoid BMP like the plague.
Even when J2EE developers use BMP with calls to PL/SQL APIs, the containers have some strange ideas about what’s sensible. To update a record the container requests a query, update and requery of the data, rather than just a query and update. What’s this extra work for? I know what the state of the data is. I’ve just updated it. Even if someone does sneak an update in after me, the bean is being destroyed so the extra query was pointless.
I’m not saying that J2EE is pointless, I just think that 90% of the people out there don’t know, or care, how badly their applications interact with the database. Maybe some Java guru will tell me why I’m talking rubbish, but I can only judge this on my experience and that tells me that J2EE applications are not performant.
Just a few extra points to throw into the mix.
- All client application developers would understand the rudiments of SQL, PL/SQL and DBA work. They don’t have to be experts, but they should understand the basic concepts.
- All DBAs would understand the rudiments of client application develpment work. Once again, they don’t have to be experts.
- All DBAs would be skilled at SQL and PL/SQL. I feel they should be the best in the company, but I know others would disagree. Oracle has now dropped the requirement for PL/SQL in the OCP DBA syllabus. In my opinion this is a mistake.
- Managers would understand when a decision should be made by the techies.
- Techies would understand when a decision should be made by the management.
- People would share ideas and information, rather than trying to empire build.
- Companies would encourage reskilling of employees.
- Techies would want to keep there skills up to date, or make way for someone who does.
- Applications would be planned, designed and built using more formal methods, not RAD or iterative development.
Perhaps the most important point is that I would be presented with lavish gifts whenever I entered the room.