Does anyone else have the same impression that I do, that the entire computing industry is just slouching and degrading?
I have this sense that even five years ago, I was able to have interesting conversations about abstract topics like patterns and OO design. I felt like I was scoring points for just being interested in those topics. And, as a team, we could look at patterns or design, and it shaped the work we did.
Today, I feel like there’s a growing contempt for a deeper understanding for what we do. It’s like the goal these days is just to have the loudest voice.
Here’s an example. The REST movement. REST has a lot of very interesting ideas that can influence REST-ful and non-REST-ful design. But even though Fielding wrote his dissertation twelve years ago, industry is still at the point of chanting “HATEOUS!” and then ignoring hypermedia and getting into deep arguments about URL design.
When I asked about REST here, on of my co-workers bragged, “We even got to the level of whether to use plural or singular in our URLs!” I could only blink mutely. The whole point of REST is that hypermedia makes the URLs opaque, so that detail is insignificant — instead of plurals, you could just as well pass a UUID as the path.
Come to think of it, in my initial interview, they asked me a question about REST, and I drew a deep breath and went into the reasons why you would differentiate identifiers in the query portion of the URL vs. identifiers in the path. And then I used that to explain the basis for my answer. My current team lead (blarg!) sneered and said, “OK as long as you don’t let that slow you down when you’re working” or something to that effect.
The last couple of years I watched the department I was working for implode, while the Technical Leaders of that shop set themselves up as industry experts. I jumped ship, and now here I am. Whenever I try to find a deeper reason for justifying a design, the team just rudely and dismissively cuts me off. These days it seems like the race is to master dynamically-typed scripting languages, intricacies of this or that database, some Apache library, or else to put “closures” on your resume. As soon as you hit Factory and Singleton, it’s time to stop — that’s enough theory, thank you.
(lol the code I work with now is just peppered with Singleton Factories. Their chests must have swelled with pride when they put that one together. It makes the code almost impossible to unit test — there are some serious shortcomings to the Singleton pattern — but never mind. I tried to explain to a co-worker some of the simple patterns you can use to break open Singleton and make it unit-testable. His reaction was like I was proposing we install gravity absorption pods or hyperspace warp beams.)
For a long time, I’ve noted a difference between people who master APIs vs. people who master principles. I’m more of a principle guy myself — memorizing minute details about APIs has always been really boring for me. Some people take great pride in their ability to recite all kinds of background about the APIs they’ve mastered. The industry really needs both types of specialization. But for the last few years it seems like all the technical discussions I’ve been in have been bantering over the trivia surrounding different APIs. People just seem to treat the principles that drive those APIs as fussy distractions.
Maybe I’ve just had the bad luck to plant myself in shops with a heavy focus on maintenance and IT, and I need to get out and talk to some people doing original development. I don’t know. It just feels like I have to work harder to make simple points about design lately, because no one really wants to know how their shiny new technical toys work.
And they want to put the word “closures” on their resumes.
EDIT: Something a co-worker said comes to mind. He was noting that everyone these days wants to be an architect. Dev managers want to be architects. Program managers want to be architects. Even architects want to be architects all of a sudden, instead of being the impressive-looking guy who attends meetings but doesn’t contribute anything useful. However, when they talk about architecture, they seem to focus on infrastructure architecture — how many boxes, where they’re installed, what OS they run, physical vs. virtual, what network appliances to buy, even how to lay out the cages in the Data Center. The practice of software architecture is an annoying distraction to installing physical infrastructure. Maybe that’s an exaggeration 😉 but maybe that’s part of the feeling I’m getting.