Joseph Evans
Joseph Evans

Software Engineer

Blogger

Web Developer

Mentor

Joseph Evans

Software Engineer

Blogger

Web Developer

Mentor

Blog Post

My November Rant

November 3, 2020 Other
My November Rant

I was chatting with one of my colleagues just the other day & we started talking about database migration scripts, anyway we started generally discussing how there are some pretty neat tools available these days, like Knex.js.

This lead us to talk about ORM’s & how we both completely disagree with the idea that application developers shouldn’t need to know how to write good quality SQL. After-all, through using an ORM you’re still writing SQL, just in a different format, whether that’s your personal preference or not is a different subject matter. But the core point is that we agreed that in order to produce a really good application you need to have a solid idea on the foundations of the entire tech stack.

Don’t get me wrong, I’m not saying you need to be a master of the entire stack, i.e. a React wizard, a Java champion, a K8s certified architect, etc. But by having at least a solid understanding of the entire tech stack you can essentially write code & engineer your application & infrastructure to compliment your design decisions. I find silos of any format awful, I’ve recently written about how I passionately hate silos & the “it’s not my job” mentality. I find as an engineer if you can bring value to a business or to a product that a business provides then yes, that is your bloody responsibility!

Even if you’re initially wrong, the fact that you’ve at least tried to improve things is a good start, a big part of engineering is to fail, especially in software engineering as the saying goes, “fail fast”. By failing we’re proving that we’re trying something new, which in theory means that we’re trying to progress.

But back to the subject of ORM’s, while they are pretty cool, I’m not saying people shouldn’t use them by any means, I find that it does make the application code more maintainable & readable. Not to mention that it’s likely that there’s some wizard out there that has a better understanding of SQL performance details than myself. But my point is that you can’t use the argument that an application developer shouldn’t need to know SQL, that’s just total crap! 😂

Personally I try to limit my reliance on the likes of ORM’s so that I’m not introducing too much of a dependency or reliance on that specific ORM. In my experience I’ve found that writing your application code to rely on a framework or library to the point where it’s near enough impossible to remove that library or framework is essentially an anti pattern. In my view that goes against the principle of separation of concerns, by all means I agree that you can use frameworks & libraries, obviously, but with the very core business logic I just personally believe that that should be abstracted away from your integration(s) with these libraries & frameworks. A real world example could be how I’ve worked with Apache Camel in the past, as it turns out it was major overkill for the application that my team was maintaining. Because the original developer tightly coupled nearly every class with Camel, it was a complete pig of a job to refactor the code base & essentially remove the use of Apache Camel.

Back to the whole argument for ORM’s & whatnot, I get it, I get that there are a lot of arguments that make sense in theory, but in the real world hardly ever come to see light. An excellent example being how people say that using an ORM is better since you’re developing to an abstraction rather than the underlying database, sure, that’s true. But in the same sense, how often do large companies decide that they’re going to completely migrate from one database to another? It’s so few & far between that there’s a lot of engineering effort involved & likely adjusting code related to the DAL is likely to be quite simple for the most part.

Again, I have no beef with ORM’s themselves, I just find a large number of the arguments for using ORM’s to be a bit silly. In languages like Java, oh lord yeah, I wouldn’t want to bother writing some application that interacts with a data source without some ORM or another.

Conclusion

I’m not even sure if my rant(s) are of a popular opinion, since it seems that it’s quite popular to go to the polar opposite end of the spectrum. I disagree with silos, as mentioned about a million or so times, but for the individual, I find that placing all of your eggs into one basket is never a wise decision to make!

An example being how if you’re a JavaScript wiz-kid, sure use a framework/library like React or Angular, but for the love of god be sure to learn the underlying technology more than the tool. It may be the case that JavaScript may suddenly fall of the map in the next 10 years, I mean look at what happened with Flash. This is why if I were to train any junior developer personally I’d try to ensure that they’re tackling an array of different kinds of tasks rather than moulding them to become a master of one specific thing.

I’m also not saying that is’ great to become a jack of all trades, but in this line of work I feel that it’s valuable to have your hands in as many pies as possible. Provided that you’re doing things the right way, obviously this is a context specific subject since one application’s requirements will be vastly different to the next.

By at least utilising strong concepts such as TDD, defensive programming & traditional design patterns you’re setting yourself up to succeed. Don’t just listen to me, I’m quite young & dumb, listen to software gurus with 20+ years experience on me, they’ll say the same thing. By following these best practices you’re ensuring that your code base is maintainable, you’re not shooting yourself in the foot by over-relying on a specific technology or tool, if you need to migrate to another platform it’s not going to make you consider alcoholism, etc. But the best part of this is that it applies to other areas of I.T. too, I try to push myself & others to adopt a platform agnostic way of thinking. An example being the use of K8s, you can have it run on premises, in Google’s public cloud, Digital Ocean, Azure, AWS, etc.

I’ve even found myself to be in a bit of rut at the moment where I’m not learning as many new things as I’d like, I am making an effort with Three.js & some networking protocols, i.e. Kerberos. But at the moment I think I’m feeling a little burnt out with everything that’s going on in my personal life at this moment in time. 🔥 – If I’m being completely honest, I’m currently revising what I already know, I’m just trying to do some refresher type tasks & trying to see if I can pick up anything new along the way. An example being how I’ve recently done quite a number of React courses on Pluralsight & LinkedIn Learning.

Anyway… I’ll stop my rant now, I apologies, if you’ve read this to the very end I take my hat off to you & thank you for your patience! 😂

Taggs:
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments