Handling Weakness
When it comes to programming, I’m very visually orientated. I struggle to grasp theoretical concepts that don’t have physical real-world analogues.
Yeah. I love analogies. Too much.
Functional programming. I struggle to visualise it. I love its elegance (when it works), but I am so unproductive in it. I know it has a steep learning curve, but I’m not joking. I don’t think I’m smart enough to use it efficiently, at least not in a professional capacity.
You can add to that list:
- Kubernetes
- Authentication
- Cryptography
- Probably 90% of networking
- Cloud architecture
- ML dev
- UI/UX
Healthy Constraints
Largely, I’ve been able to look at those things and go, “It’s okay. I probably didn’t want to be a network administrator anyway”. There is a blessing in constraints; if the road is as wide as it is long, we wouldn’t know which direction to go.
Some of that other stuff is harder to look past. “How am I gonna be a decent software developer if I can’t make a decent UI?” and I get really caught up on it.
It would have been fine for Batman to go to a zoo and look a bat in the eye a few times a week, maybe pet one, and call his phobia dealt with. But he took it too far and became a bat-themed vigilante. But I love that. I want to be like Batman and turn my weaknesses into strengths, face my fears and GET GOOD.
Like Batman, I’ve gone down the rabbit-hole on my weaknesses.
Unlike Batman, I haven’t been as successful.
I don’t want to just be okay at frontend dev, I want it to become a strength. So I muster inspiration, it becomes the focus, I form unrealistic expectations about my progress and I lose inspiration. Rinse and repeat.
Instead I should let these weaknesses constrain me and redirect me in my strengths to where I can progress. Like gutter guards when bowling; feel the feedback, bounce back, and keep moving forwards. Let your weaknesses provide you with focus.
When to Push
That isn’t to say you should never front up any weakness. You need to use good judgement.
Say you suck at cloud architecture.
- How did you get here? Is it relevant?
- Can your goals be met another way?
If not…
- What do you lack that has produced this weakness?
- Is it just experience?
- Do you need to get yourself out there?
Or…
- Do you lack talent and skill too?
- Does it really grind your mental cogs?
- Do you catch yourself tuning out because it doesn’t engage you?
Don’t try to force your brain or your personality into something it isn’t.
Be honest with yourself. As before, take the best you can from these limitations.
Ambidexterity
Some weaknesses are present because they are strengths in other areas. They exist on a spectrum. You might not be great at administering organisational policy or configuration, but excel at creating organic community around open-source projects. Maybe people energise you but data doesn’t?
Some things are a left-right brain tug-of-war and it’s simply rare to be “ambidextrous” and have both. Check your weaknesses for corresponding strengths. Let those discoveries motivate you and inspire you and kick that imposter syndrome in the butt.
Other things exist on that same spectrum and can be changed, but will cost you territory somewhere else. The strengths that make someone a great counsellor may have to be abandoned if they want to be a ring-in CEO who saves companies from the edge of bankruptcy.
But what about where you are ambidextrous? If you find something in yourself that is traditionally a rare coupling of strengths, use that in putting yourself that your counterparts are not. Got video-editing chops? Know how to code? How about use that to create dynamic, programmatically generated content!
Augmenting Weakness
Sometimes you just have to eat your vegetables and push through. You need to get familiar with an unintuitive process in a role that you otherwise enjoy. That doesn’t mean you tap out and go on the hunt for your unicorn, but it doesn’t mean you have to endure it vanilla either.
Fortunately, we live in the age of AI. GPT-4O, Copilot, Gemini and Claude are all advanced enough to search the internet and provide great answers for topics they may not even have training on. RAG is affordable and easy. Let AI be your tutor and translate obtuse documentation for you.
AI Tools
I was messing around with Powershell Universal the other day (for some quick form validation with backend Active Directory commands. I spent a few hours over a week getting into the nitty gritty of form components and schemas.
Out of curiosity, I tried asking GPT-4O to build me a form with my laundry list of fields and validations. To my surprise, it pumped out several hundred lines of code that only needed two adjustments to build and render successfully. I let it know and the successive builds were perfect every time. Prompting with further changes became quicker than navigating the code and adjusting it by hand.
Am I a frontend wizard now? Hardly. But it’s an augmented weakness now. It gets the job done and it doesn’t drain my mental capacity anymore. I can focus on what I’m good at.
Some more AI tools (all free):
- Cody (Sourcegraph’s AI IDE assistant)
- Mods (Command-line pipeable AI)
- Ollama (Offline self-hosted LLMs)
What you don’t know
You don’t know what you don’t know. GPTs traditionally struggle with complex questions founded on poor understanding of the problem.
Remember the “Chat” in Chat-GPT.
You don’t need to give mega-prompts.
- Ask the right questions.
- Ask broad questions.
- Ask smaller questions.
If you don’t know enough about the problem, don’t constrain AI to provide you with a solution that fits your suggested implementation of a solution.
The more you understand what you don’t know, the better chance you have of learning what you do need to know. It’s very easy to learn in the wrong direction.
Community
Best for last.
Sometimes you need more organic discussion with specific experience. I.e. a real person. If you have co-workers, ask them, and ask them if they know anyone too.
After your physical circles, try online communities:
- GitHub discussions, issues
- Relevant subreddits
- Discord servers you find on Youtube channels
- Forums (especially if they’re Discourse based)
- LinkedIn (surprisingly)
Unlike GPTs who can listen to your thankless questions all day, community works best for everyone when involvement is not transactional, but relational. I’m not just talking about manners. You will get more relevant, helpful information when you prioritise relationships, and it will be more enjoyable.
Don’t underestimate the value of individuals. If someone has an answer for you, they likely have other relevant experience that could be useful to you, and you to them. When you do work you’re interested in, good at, and can find others of like-mind, you’re basically just making friends.
Tech-bros could learn a bit from truckies here. Truck drivers seem to know everyone and they’ll “know a guy” for every job. We think we contribute to community when we share spicy memes or goofy comments with people we don’t know on socials, but that’s not it. Find your crowd and get to know its people.
Think about it yourself, if someone asked you if you “know a guy” in your tech circles. Would you point them to a person or a URL? Let that be your criteria for community.
Summing up
- Find out what you’re not good at.
- Determine if you actually need to be good at it.
- Don’t be tempted by Batman’s dangling carrots.
- Use your “ambidextrous” strengths.
- Leverage modern tooling.
- Actively involve yourself in modern community.
Most importantly:
Do you really need to learn Rust? Can you settle for Go?