Skip to content

Instantly share code, notes, and snippets.

@paulmsmith
Forked from mpj/draft.md
Created April 25, 2017 13:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save paulmsmith/ac49b38afbfd73f458035d8b26c05e47 to your computer and use it in GitHub Desktop.
Save paulmsmith/ac49b38afbfd73f458035d8b26c05e47 to your computer and use it in GitHub Desktop.
Feedback for episode draft: 7 critical traits for a normal programmer

7 critical traits for a normal programmer

EARLY DRAFT FOR NEXT EPISODE, PLEASE PROVIDE FEEDBACK

This week I tweeted and tooted this question:

”What do you think are critical traits in a programmer? NOT to be super 10x or anything - just to feel good and function well professionally.”

Link to full threads here: [https://twitter.com/mpjme/status/855691565460848640] [https://mastodon.cloud/@mpj/2592100]

I got almost a hundred replies, and wen’t through them and categorized them to see if any pattern stood out. There were suprisingly few mentions of specific technical skills, almost none at all, which made me very happy, because it shows that the industry, or at least my audience, understands that technical skillset are a symptom other habits, rather than something that arises in isolation.

Below, I’ve summarized the 7 most mentioned categories of tweets (most popular is #1). (A lot of the quotes are paraphrased for contextual reasons, I will provide proper attribution in final version)

7. Get shit done

Most developers feel that having a good balance between the ideal codebase and getting stuff out the door is crucial to function in the workplace.

Cares about product more than about code or code philosophy.

Cares more about the artifact than the construct.

Knowing when something is "good enough"; being able to accept that something isn't perfect; and learning from this for the next project

Knowing that all code is imperfect, and that's fine - people and their code improve with time, plus constraints force painful decisions

Understand there are no silver bullets -> skill for situational cost/benefit of solutions (need continuous learning mindset for this)

Organizational skills & persistence, to create something consistent and maintainable.

6. Teaching

A programmer needs to teach, almost as much as they learn. Since programming is such a broad field, even the most junior programmer almost always holds knowledge that can be useful to the most senior programmer. It’s very important to be the person that constantly seeks to share the knowledge that they have and enrich their fellow developers.

Curiosity, willingness to learn, willingness to share.

Wanting to help the people around you achieve their potential

Never responding to a question from another programmer with a tone that suggests "you should already know this".

Be kind. In code reviews, design meetings, pairing, teaching, always be kind first. You can be critical without being mean.

Someone who knows what to do, when to do it, and always produces the best possible solution for the project and team--while sharing insight.

Well, not be the "hero", if someone ask for help, help them, dont play the its not my fault game, no office politics mindset

5. Understanding context

In order to function as a developer you need to understand how your work fits into the context that you are in. You will not last if you just sit down and code what is given to you, without understanding why. Challenge what is given to you until you understand it - otherwise you might end up implementing things that are damaging to the organization.

Being good in asking: ”Why?”

Ability to see the impact of your decisions today on tomorrow

”Knowing how much value you bring. Not just typing what's ordered. I like it when developers know which tasks are expensive or not.”

”Cares about product more than about code or code philosophy.”

”Able to look beyond semi-colons”

”Questioning everything and a desire to truly understand a problem before implementing a solution. And encouraging the team to do, too.”

Able to see the big picture and deliver value to end users above all else.

4. Check your ego

I often chant that great software isn’t built by great programmers, it’s built by great teams, and this opinion is echoed by Twitter. Developers that focus on making their colleagues better, looking at the code as ”ours” and makes sure that the team succeeds makes you a great person to work with.

Understanding the appropriate balance between independence and interdependence within the team. Empathy, Open Mindedness, Self Motivation

Being able to suppress(or: let go of) their ego/entitlement

Well, not be the "hero", if someone ask for help, help them, dont play the its not my fault game, no office politics mindset

Wanting to help the people around you achieve their potential

An understanding that any code one writes should be treated like a letter written to your future self.

Driven by making things better when they bring most value. Uses honesty, never cynicism. Their code is not themselves.

3. Empathy

In the "Does a developer need to be nice" episode of Fun Fun Function I talk about the fact that Google's internal research team found that the strongest correlator with high-performing teams was psychological safety - that the team is a place where feedback is given an received without the recipient becoming defensive or the giver is judgemental. This seems to be confirmed anecdotally as well, as Twitter ranked empathy incredibly high in importance for a developer.

Listen, question and seek to understand, both colleagues and customers. Make an effort to really be understood.

Being able to objectively discuss things and taking criticism. Both without getting personal.

The ability to give and take criticism well. By far the most important 'soft' skill I'd say.

Be able to accept negative feedback. Value your peer reviews and (above all) never take it personally.

Answer questions nicely, and be courageous enough to ask questions.

Be kind. In code reviews, design meetings, pairing, teaching, always be kind first. You can be critical without being mean.

Be accepting to other people.

Driven by making things better when they bring most value. Uses honesty, never cynicism. Their code is not themselves.

2. Humble

A lot of developers feel that being open to the ideas of the team is the most important trait in a programmer. I.e. the opposite of being dogmatic, judgmental and arrogant. Being open to constantly learn from others, open to being wrong, open to new perspectives, always seeing interactions with others as an opportunity to learn interesting new viewpoints and skills. Some representative tweets:

Being humble, which entails "accepting": feedback, realising you were wrong, etc. A fixed, stalling mindset is death for a good programmer.

Being aware that just because another dev doesn't know one thing, doesn't mean they know nothing. We can all learn from each other.

Be open to others ideas/suggestions. Sometimes its faster to try an idea out than to argue it for hours. Always be learning.

Get excited when you're wrong. It means you have another thing to learn/ get better at.

Having an open mind and being curious. Also being self-aware of limitations and strengths.

Don't criticize legacy decisions they were probably right at the time. Not getting offended when receiving feedback

Self-criticism, I see a lot of programmers that feel like they are the smartest in mixed teams (marketers, managers, etc).

Scepticism of "the rules" is a big one for me. New programmers are often very concerned with "best practices" and I think it is a mistake.

1. Curious

There is no surprise that learning is #1. It’s a bit self-selecting because my audience are people that watch a YouTube show about programming, and are predominantly web developers, which is a field that will drive programmers that don’t love learning the hell away, but I think it still deserves the top spot, no matter what programmer you are. Software development is a young and fast-moving field that constantly challenges itself, and while you shouldn’t be chasing every trendy framework out there for the sake of it, you really need to like the idea of having learning as a consistent habit in order to function in this field.

Employers should also take note of this and understand that you as an employer need to allocate work time to learning, or your best developers will move to an employer that does, because otherwise they won’t last long as developers.

”Never stop learning or listening to others. ”

”Mindset of curiosity and learning. ”

”Persistent, willing to fail, curious, eager to learn love programming”

”Desire to grow personally and professionally.”

”Knows that there's always more to learn.”

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment