After say 5 years I understand what he was saying to me know. Patterns are patterns, they implement themselves when you need them. All you need to know is how not to do it badly. You shouldn't be trying to implement patterns if you don't need them.
I know its a high horse position, because you need to go through a phase of using them to understand why they aren't a miracle cure. o I find the the growth/education of a programmer some what similar to the articles notion.
For reference any younger dev out there that looks at the work senior devs and thinks to themselves "why are they senior? there work is obviously rubbish", you'll probably end up that senior dev one day.
In my experience most senior devs have been like you... perfectionists, aborbsed with the latest greatest etc... and you learn over time all that really matters is delivering on time, code management, and getting burnt by the latest and greatest really sucks.
So you slowly stop writing over engineered code. That often means doing things a basic way, so people in the team aren't left behind that don't understand, understanding your code isn't that critical... whats critical is finishing on time, that optimisation is the last thing you do because it takes to long and you really don't know if what you are writing deserves so much attention (i.e. if it takes off revisit the code, if a choke point starts appearing then optimise). Basically don't waste time on problems which don't exist, don't create stress for yourself/team/management by over engineering solutions.
Next time you wonder why a senior dev seems to be hopeless ask them why they choose to deliver a solution like a beginner and maybe you'll learn something invaluable ;)
That has been my understanding. I consider that the only practical reason to review design patterns is so you can communicate the style of code to another.
After a while as you program you look through the code and see the needed meaning, shaping the code to conform to the meaning better.
That guy was pretty damned sharp, worked long hours, researched implemented push boundaries, and delivered some stuff I'm still proud of. But he had something to prove, he put meaning into things that didn't want or need meaning. Over engineered everything.
But a calmer/mature more strategic me says I don't need mavericks on business automation software. I'd be watching me like a hawk, because I made mistakes, big ones from time to time (my favourite was a system failure costing €50,000 in lost revenue... all my fault, I was literally told to clear my desk and was marched out the door).
You need those mavericks to push boundaries, its fun to be one, but boy its disconcerting when you have one in your team and all you need t do is deliver is a CRUD application.
I wish we shared more of these tales of mistakes. It seems to me that the current software development environment involves an attitude of shame over mistakes or simple ignorance, to the point that it becomes a political battle simply to get a developer to admit fault. The only place I know that discusses mistakes would be something like the Daily WTF, where snark and condescension are the name of the game (not that I don't enjoy reading it...).
I become a fan of agile for that reason. I found agile created "chummier" teams. I don't think it made for better project delivery, but I did find having a morning meeting made risks apparent and made people more confident to raise issues before they snow balled, and people didn't blame each other the same way. Discussion/communication is basically everything to successful delivery in my books.
I picked up a neat pseudo meeting trick I use every day now (even in big water fall projects). I go for coffee down the road. It takes like 15 minutes and the benefit well outweighs the negative.
The benefits being a casual discussion abut whats going on where people say things they probably wouldn't normally. Its best to weight till after everyone has done there morning emails, so maybe 30-60 minutes in then the gossip gets going. The amount of spite I have heard spewed about clients/vendors/colleagues you wouldn't hear otherwise is astounding. Its the casualness of the walk and cafe that lets people vent. But you have to get out of the office, you have to get away fro the structure, and away from people that may over hear the criticisms.
Also its not about a team meeting, people won't come and blurt out whats really on there mind if they think its going to get recorded and itemised. Remembering if they have read/replied to there emails before you head out. Then thats mainly whats going to be no there mind, they will bring up the problems because they are at forefront of there thinking. Its all about keeping things casual.
On the other days when things are running smoothly you get to know them more on a personal level, talk about there kids, cats, skiing, what ever. Just casual gossip and of course its team bonding. When you get to know people a little better it makes interacting with them easier, raises issues/problems etc.. isn't going to be such an assault on someone. Even just the effort of inviting someone that doesn't drink coffee goes along way.
Can't recommend it enough.
I distinctly remember scoffing at the old stagers for not getting onto the latest and greatest bandwagon.
I certainly hope some of my early bloatware has died it's natural death.
To their credit I was often indulged with my acronym love in the early days by the old stagers. I guess they see it as a process you have to go through, and if they see potential, are willing to let it slide with only a couple of pointers.
Get back to basics. Deliver results. 80/20 analysis on everything that you do. Don't ever insert an abstraction layer until you can explain to someone within 30 seconds where the true business value lies in that layer.
٭) The app's controls look simple and grayish like in Windows 2K. No color effects. No translucency. No skinning. This is an app that dozens of people use on a daily basis and it makes an effort to let them do things fast and accurate with the least chance of surprise and/or annoyance. No user of the app has complained to me yet about the lack of eye candy; they do appreciate snappy response times, tho ;-)
Now I'm hyper-pragmatic and feel like I've plateaued somewhat as a developer - I'm producing systems that work well and fulfill clients' needs but I'm finding building them isn't the exciting challenge it once was.
Where now?
Personally I’m also interested in deductive databases and ontology but, on the whole, those are too ambitious even for academia these days, which I think is a shame because to me logically organizing information is probably one of the most important problems in IT since the web was created.
It seems that a good prologish system could solve large classes of "business rules" problems pretty easily.
So what I think is the solution is to go meta. Step back and ask why you're having to write the same code to pump out the same kinds of apps. What is the commonality between all the various apps you're writing? Now solve that problem. The ultimate iteration of this, if done successfully, is a system that takes a design plus a formal specification of an app's functionality and automagically makes it work. Now you're working at a higher level of abstraction. I don't yet know what happens when you get bored of that. Perhaps by then you'll have developed your own AI.
No, I think you're maintaining the abstractions you built before that point. Look at all the frameworks that get developed for many years before they're abandoned.