I am walking in the air, and speculating about the sun.
-- Socrates, in Aristophanes' The Clouds
Self-explanatory. |
Slightly more recently, 'The Cloud' has arrived to save us from all earthly ills. Got a problem scaling? Move to the cloud. Want to reduce cost? Go to the cloud. Disaster recovery? Cloud. High availability? Cloud. Yet, the cloud can't really be a cure-all. It may be appropriate for your needs, but this has to be evaluated given an understanding of how your cloud implementation will work. If your number one problem is performance or security, the cloud is probably not going to help.
There are many 'clouds' or high-level cure-alls available to developers today. For example, I've been learning the Spring Framework, which is a Dependency Injection (DI) framework. DI is a form of Inversion of Control (IoC), in which object coupling is not known at compile-time but rather is determined at compile-time. Using a DI framework, you can build interfaces, inherit classes from them, and control application flow using configuration files and annotations (like @inject). During development, you can stick to the pure work of thought--programming, that is--without having to worry so much about the nuts-and-bolts of connecting classes.
DI frameworks like Spring are just one more layer of abstraction (or one more cloud) that let us focus on business logic rather than implementation details. And, just like other layers of abstraction, they're a double-edged sword. Dependency injection isn't always a great idea, such as if your interfaces are likely to change often. Dependency information has to be stored somewhere, after all. Enterprise frameworks tend to give you flexibility for the price of code bloat and complexity. In my time, I've seen programming become ever more complex, but, at the same time, ever more like plumbing. Frameworks like Spring, Rails, and .Net's Entity Framework let you quickly build applications. But they don't prevent you from doing very stupid things if you don't know how they really work. ORM libraries are great, for example, until you have to scale.
For this reason, I've been brushing up on my data structures and algorithms. It's easy to think such things don't matter. Plenty of people get by without earning computer science degrees. And who cares if a client-side algorithm is O(N^2) when the database is orders of magnitude slower? You might concede that algorithmic theory is worth studying only to develop certain intuitions about processing time, memory size, problem size, and algorithmic complexity, which is certainly true. But I think it's useful to revisit data structures and algorithms once in a while to stay grounded in reality. If you're only doing high-level plumbing, you have your head in the clouds.
No comments:
Post a Comment