I hate the word genius.
I've been hosting more and more classes and workshops, and when someone uses the word "genius" to describe a programmer, I see some peoples' faces sink.
There are heavy connotations to the word. Some people think genius is biological, something they have to be born with. Others think it has to do with personality or character traits-- ones they don't have, like being very introverted for example. There are so many people scared to even try to dive deep into programming or math, because they feel they can not compete with "genius."
I have now worked with, been friends with, and interacted heavily with many who I've heard called "genius," and I now hate the word with a passion.
I think any of my students could be in a position of similar technical contributions with work put into it.
1) Some people are consistently told they can do it.
Simply believing you can do something is an incredibly powerful thing.
When someone is told over and over that C++ is too hard for them, they can start to think maybe this is true and hesitate to put in that effort. If they're told that they can do it, that they're smart, that computers are their thing-- they'll work at it.
2) Some people don't fear consequences of sharing their technical thoughts unabashedly.
So many technical people gain respect by just going on rants about their technical beliefs, in public or with programmers. In many of these situations, others would be scared to do this, or afraid of looking wrong. In many situations, because of bias and social cliques or other social dynamics, they are absolutely right to hold back, but the people who rant a lot over others win.
However, liberally sharing thoughts creates a learning feedback loop. Other professionals share thoughts, you learn just by writing your ideas, and so on.
3) People who think they are capable give them opportunities.
This also creates a feedback loop. They get the great job because someone thinks they have potential, and then they grow and learn a whole lot on the job.
There are so many obvious problems with this. Especially in technical fields, there's no way someone can judge what they know from a short meeting. They grab what details they can and make a judgement. It leaves decisions wide open to biases. So many people are passed up on because they do not seem like they'd be geniuses by society's standards.
4) Those jobs teach people specific skills hard to learn elsewhere.
They get to work on hardware before it's out, hear about tech before it's announced, and work on cutting-edge techniques before the public hears about it-- all because that just comes with being in that job.
5) People do not value interdisciplinary or social skills nearly enough.
Words can't describe how idiotic I've seen some "genius" programmers behave when it comes to topics not directly inside their field-- even when it comes to basic skills like interacting with other people well. And codebases are terrible because of it, with people cleaning up their mess while they take the credit.
Social skills are truly important in programming, I'd argue more than programming knowledge. So many programming skills are wasted at the complex and heavy cost of culture, communication, and sociological problems within companies.
Interacting with other fields is also vital. Isn't knowing which problem to solve a crucial part of doing good work?
6) People need to "kill their heroes."
People often point to people they aren't friends with or know very well as examples of geniuses because they do not see the whole picture there.
I believe people achieve things in different ways. For instance, I'm an extremely social person-- my workday will look different from someone who is extremely introverted, and my technical work will look different too. But that diversity is a very good thing.
Good work is multidimensional, and quite complex to measure.
And everyone can do good work.
Believe in yourself.