Lessons From A Lifetime Of Being A Programmer:
Never stop learning, the technology steamroller is right behind you waiting for you to stop.
Iāve taken this one seriously in the past, almost aways tinkering with languages, databases, frameworks, etc. I think itās served me up to a point, expanding my mind and learning different ways to do to things.
The problem is Iāve reached the point of diminishing returns. I could go learn a stack-based language like Factor, or bend my brain around a oddly shaped database like Datomic. Iām not sure it would make me much better as a developer and leader of software teams.
Instead, the steamroller I think I need to keep ahead of is practice. Given a problem, what are three different solutions? What are their tradeoffs? Which approaches seem nice on paper, or in a blog post, but donāt work out a few hours down the road?
To wit:
This isnāt obvious to everyone, but the ability to see something new, or see what others are doing, or to compare multiple ways of doing something and then pick the best option for you, your team, your project or even your company is incredibly valuable. Most people Iāve seen are not very good at this. Most leaders are really terrible at this. Itās easy to just do what someone tells you you should do or something you read in a blog or just do what everyone else is doing. Itās much more difficult to look at things from all sides and your needs and pick something that seems to be best at that point. Of course you have to make some decision, people are often paralyzed by having to evaluate which often leads to picking something random or following the herd.
Well-tuned judgement is where Iām hoping to go next. Part of that is experience, knowing the forces and tradeoffs that apply to the possible solutions. Part of that is the ability to communicate it with teammates, sometimes face-to-face and sometimes asychronously. The really challenging part is letting your teammates run with the result of that judgement and collaboration.
A good developer makes good decisions for their own implementation; a great developer helps the whole team implement good decisions.