DEV Community

loading...
Cover image for Why being a good programmer barely requires programming at all.

Why being a good programmer barely requires programming at all.

designpuddle profile image Chris Bertrand ・2 min read

Yes, you read that right. To be a good programmer you don’t need to be good at programming.

I hear what you’re thinking, that makes no sense! Well hold on a second, hear me out.

When you think of a good programmer you know, what’s the first trait that springs to your mind? Determined, smart, approachable? Calm, Quiet, or conscientious? Maybe it’s something else, but I can bet it wasn’t… a really good programmer. Why is that?

Programmers require lots of skills in their day to day jobs. The discipline no longer consists of sitting in a dark basement on your own thrashing out some code. In fact interpersonal skills are some of the most important a good programmer can have. Agile methodologies require lots of communication between different departments and individuals. You’ll be required to check in at least once a day, be available for planning, refinement, retros; constantly communicating about struggles, improvements and things that are going well.

The old days of getting your tasks and specifications up front, and being left to your own devices is long gone. You’ll probably be in contact with your users, asked difficult questions about your progress, and required to feed information back to your product owner/manager.

You’ll need to talk through your design with your superior and team as most likely you won’t be working on this on your own. Testers will be asking for updates, questioning whether your unit tests are credible and sufficient, your issue tracker will need to be constantly updated keeping discussions available for all to see.

You actually might be better off with a psychology degree than a computer science one to understand how to deal with all these different people.

So yeah, programming is gonna be needed at some point, but in general the stuff that 90% of us will be doing won’t require any revolutionary coding expertise.

In most cases the reason a project will fail is because requirements were not properly discussed and refined, or teams did not communicate properly about what was required from them. Rarely will it be because you weren’t a good enough coder.

Do you share the same views? Or do you think I'm talking nonsense, I'd love to hear your opinions below.

Discussion (58)

pic
Editor guide
Collapse
avalander profile image
Avalander

I think this view is a bit simplistic. I do agree with the part that being good at programming is not enough to be a good programmer anymore. But I don't agree at all with the extreme you suggest that

To be a good programmer you don’t need to be good at programming.

Granted, to thrive as a developer you need in most cases empathy, communication skills, planning skills, to be able to deal with changing requirements and unexpected things, etc.

However, precisely as you say, you aren't working alone in a single codebase anymore. Other people are building features on that codebase at the same time as you. Other teams depend on the software you build to be bug-free and available at all times.

Besides being able to collaborate with those other developers, I think it is more important than ever to be able to write code that is clear, composable, and has few corners where bugs can hide; unit tests that express the intended functionality of a module; integration/end-to-end tests that ensure everything still works as expected when new features are deployed; and so on.

Precisely because I have to work on other developers' code, I want to work with people that are good at writing code.

Collapse
designpuddle profile image
Chris Bertrand Author

The simplification was intended, I'd also prefer to work with people that are good at writing code, but I'd also like to be able to hold a conversation with them. Thanks for voicing your views!

Collapse
itr13 profile image
Mikael Klages

For me there's three traits that make a good programmer:
1: The ability to read other people's (or own) code and understand what happens in them, even if they're written badly or ugly
2: The ability to write pretty code that does what it's supposed to
3: The ability to explain code in a way that helps other people understand why something happens and helps them improve

Though I see it more as a spectrum you always can improve on, rather than a binary "good-or-not"

Collapse
mucio profile image
mucio

I would add also the flip side of point 3:

4: The ability to understand requirements and context from people

Collapse
designpuddle profile image
Chris Bertrand Author

Spot on, we're all just shades of grey!

Collapse
avalander profile image
Avalander

2: The ability to write pretty code that does what it's supposed to

I love that :)

Collapse
drm317 profile image
Daniel Marlow
Collapse
severusken profile image
kien

So true

Collapse
designpuddle profile image
Collapse
_morgan_adams_ profile image
morgana • Edited

If you had said "Why being a good Engineer barely requires programming at all", I would be more inclined to agree. It might be that "programmer" is just being overloaded in your statement and to you it's synonymous with "engineer".

To me programming is one of many skills an engineer might utilize. I know folks in InfoSec, SRE, QA, etc that I would consider great engineers (because they have a lot of the other skills you mentioned), but not necessarily great programmers.

Collapse
designpuddle profile image
Chris Bertrand Author

You say potato, I say potato. 😋

Collapse
girng profile image
I'mAHopelessDev • Edited

in a dark basement on your own thrashing out some code

omg, that is so true lol

one thing that might be worth mentioning (slightly tangential, but it came to mind when reading this article): math.

for example, my highest level of math is basic mathematics at my community college, and then one "math in society" course, that's it! all i needed to get my AA. my friend on discord was in algebra in 9th grade, while i was in special math classes all the way until graduation...

in programming, a lot of languages have all these built in math methods for you (well, the ones i've used: crystal, php, julia, javascript). one might think a programmer needs to be a highly skilled mathematician. a programmer merely needs to put pieces of the puzzle (the programming language) together in a cohesive project/app that allows humans to utilize it. whether it's in a beneficial way, an automated way, or whatever. that's it.

however, what i just said is highly subjective.. because a "programmer" is such a broad word. programmer of what? are you working with nvidia to write low level driver code? making a game using an engine? following thechernoproject's c++ tutorial and making your own engine? writing your own programming language? programming in html/css to make your site fancy? only a few of these actually require deep understanding of math.

i feel that today in society, when calling someone a programmer, people automatically think they are some math magician.

i think that's not fair to the people who are actually skilled in mathematics. i'm certainly not and i don't feel right when i take credit of being good at math, when i know basically nothing and just use helper methods..

Collapse
desolosubhumus profile image
Desolo Sub Humus 🌎🌍

How does one go about programming in html/css? While HTML and CSS are coding languages, they are not programming languages. HTML is markup and CSS is styling; neither involves scripting or programming of any sort.

Collapse
justynclark profile image
Justyn Clark

Dan Abramov admits to not being great at math

Collapse
designpuddle profile image
Chris Bertrand Author

Yeah you're right, I'm terrible at math. Luckily that hasn't hindered my career up to now.

Collapse
p0oker profile image
Pooria A

"Programming doesn't require math"

Tell it to game developers, blockchain developers and AI/ML/Data Mining algo library authors to get a meaningful smile back!

Collapse
trueneu profile image
Pavel Gurkov

"the stuff that 90% of us will be doing won’t require any revolutionary coding expertise" -- sure. But we're not talking about revolutionary programmers. Just good. Mediocre even.

Sure, you don't have to be a revolutionary programmer to implement an O(n*logn) sorting algorithm. But I know too many bad ones that would easily make it O(n2 ). Or worse. And they're exceptional at soft skills. In fact, that's how they got the job.

Isn't what you're saying the reason a lot of applications eat up enormous amounts of memory, work slowly and terrifyingly bad? Because they were coded with smart, approachable, determined, polite, interpersonally superior people who just can't write code?

If I'm listening to music, I don't care how well the band leader gets along with his band. Not in the abstract I don't, literally zero efs. I want the music to be good. If I need a surgery, I want the surgeon to be as highly skilled as it's possible, and I don't care that he yells at his interns, and is openly sexist, or whatever. I don't, I need to stay alive, and hards skills of the surgeon are my best bet. You can choose that smart, approachable and determined guy with shaking hands, no objections there.

If I'm using software...

Collapse
erikest profile image
erikest

Ya, maybe you'd want that surgeon - until you realize that despite his brilliance with a scalpel, none of the supporting people around him are top of their field, because he's pushed them all away. His requests for his peers opinions take longer to get answered, the best assistants can't stand him and have slowly migrated away and because of his open sexism, he's been unable to collaborate with the best of his field on new techniques - his high skill is limited by his other interpersonal skills and likely he suffers from Dunning Krueger because of this, thus he seems convincingly confident in his methods, yet doesn't even know that his technique is actually outdated and a less invasive surgery could be done. Instead of a tiny incision point, you walk away with several massive scars because he executed the old technique, perfectly.

Sure, plenty of a-holes have created great value in the world, but as our culture advances, it tends to be those with amazing hard skills and soft skills that have the largest reach and create the most impactful contributions.

I look at the top devs and program managers that I see speaking and interacting in community standups, etc and what I notice is that combination of technical prowess and interpersonal ease - one without the other has limitations, but people who start out good at social patterns, seem to have an easier time maintaining an enriched environment of peers, which has a multiplier effect on their capacity to learn and grow.

To your example about 50 transformations, my counter example is that a good coder may code it 'well enough', but believe they coded it perfectly and waste a lot of time and energy when their peers try to help them make it better, bitterly and pedantically holding on to any technical point they can make, instead of embracing their own continual improvement - their ego defeats them. On the other hand, if their code is wonderful and correct, but they can't communicate that to others, then the value of the contribution goes down - the knowledge dies with them, so to speak, instead of rippling out, memetically. Good ideas require great advocates to be truly effective.

Finally, there are only so many of the type of person you speak of, they have only so many keystrokes in their lifetimes and there's increasingly more code to write - if your only input to those who aren't 'as good as you' at writing code is that they shouldn't, so 'be gone with ya', then you create a divisive process not a multiplicative one - instead of inspiration you create desperation. Code that can solve a problem but could be better at solving it is better than no code to solve the problem at all. It would seem that the 'too many' devs you know gain nothing from knowing you because you haven't effectively, inspirationally transferred that knowledge. Blind superiority is a social anti-pattern, one that our culture is slowly refactoring out.

Collapse
designpuddle profile image
Chris Bertrand Author

Um, thanks for the comment. I'm guessing that means you agree with me then? Right?

Thread Thread
erikest profile image
erikest

Well, ya I agree with you :) I'm advocating pretty heavily for soft skills being an important hard skill multiplier and noting that soft skills make gaps in hard skills easier to fill - collaboratively. I think Pavel is leaving a lot of potential on the table by devaluing those social skills and I tried to provide examples to demonstrate why.

Collapse
designpuddle profile image
Chris Bertrand Author

Interesting, I've never had to implement a sorting algorithm, apart from for interviews. Sure they're important programming principles but not something that's written day to day.

Collapse
trueneu profile image
Pavel Gurkov • Edited

I bet you also never used "Animal->Cat" and "Animal->Dog" classic class hierarchies apart from demonstrating inheritance. That's not the point.
This is just a stupid example. It might be not a sorting algorithm. It might be "run 50 transformations on each item in this list". And a good programmer that can't write code will copy the list in memory 50 times, transformation after transformation, forgetting about corner cases and error handling. And a terrible programmer who can write code will make memory footprint smaller, group 50 transformations so there are only 5, and his code will never crash the process.

Thread Thread
designpuddle profile image
Chris Bertrand Author • Edited

All programmers can make mistakes or not know certain nuances, such things are pretty simple to catch in code reviews, which will in turn enhance their development in the future. Grads and the lessed experienced need to have good mentors to show them best practices.

Thread Thread
trueneu profile image
Pavel Gurkov • Edited

You're telling that juniors will become more experienced over time. It is self-evident (if they're able and if they continue to learn, of course).

If for each LOC you have 2 mistakes, it's easier to scratch the whole thing. If your code has 2 mistakes per LOC, you're a bad programmer. Sorry. You can't code. You can't fulfil your main responsibility. I don't know how to explain and I surrender.

Thread Thread
designpuddle profile image
Chris Bertrand Author

Everyone has their own opinions, and I appreciate you sharing yours. The article was written to elicit responses from the community, and we can see that there are people that agree and disagree with your stance.

Collapse
bugmagnet profile image
Bruce Axtens

"The old days of getting your tasks and specifications up front, and being left to your own devices is long gone."

Yeah, and don't I miss those days. But hey, I'm in a two-man programming company so at least the other guy tells me he wants that thing over there over here.

Programming, at least for me, has always been about problem-solving. The last bit of formal training I did was in 1988.

Collapse
minnalehtomaki profile image
Minna Lehtomäki

I think that nowadays people use the terms "programmer" and "software developer" interchangeably, so I won't be focusing on the choice of word. (Disclaimer: I prefer the use of term developer, because like you said, the work you describe is more than just mere programming).

I see the work of a software developer mainly as problem-solving. And for that, you don't have to know every detail of some specific technique/language. It helps if you have basic knowledge about the possibilities and restrictions of the technology you're using. But technical skills are easy to learn when necessary.

What I think are really important qualities for a good software developer? The ability to grasp the bigger picture, enthusiasm to learn and grow and also the will to change things when it's needed. On top of the communication skills that you already mentioned.

For sure, the ability to write efficient, maintainable and reusable code (clean coding practises) is a "good-to-have". But it's a fact that not all developers have the ability to write clean code. But if you're not willing to learn and improve, then there's a big chance that you end up being one of those "I do this because of some obscure reason x that I learned years ago and I don't care if it's right or wrong. I just work here."-developers. And those can be hard ones to work with.

Collapse
designpuddle profile image
Chris Bertrand Author

Thanks for your comment. They're my thoughts exactly, but putting them like that doesn't make a very good post! 😋

Collapse
octavzaharia profile image
Octav Zaharia

Do you share the same views? Or do you think I'm talking nonsense

No and yes this is nonsense.
I had to make an account just to say this.

I agree programmers require lot of skills, but sweet talking, talking to testers, planning, improve his/her and the team's communication are not some of them, there are people that are paid to do this.

Programmers today are paid for and need to know about Message Queues, ESBs, Cloud Services(hundreds of them), Spark, Message Streaming, Metrics Stores, Dashboards tooling, Networking, Jenkins/Teamcity/Travis/etc, Git/Mercurial, about 2-3 scripting langugages, at least, one backend language (java,c#) at least, one frontend language (Javascript, Typescript), testing tools and testing frameworks, Sql dbs , Nosql dbs, ecosystems,frameworkt and libraries (ie for java 100 spring-xxx.jar, 3 JPA implementations, etc), frontend ecosystems(angular, react, vue, etc), OOP, FP etc.

This kind of stuff makes a developer good and we spend years learning this, I honestly don't think soft skills are things a programmer must have, I agree they are a nice to have thing, but it is an arrogance to say that soft skills can replace any of the technical skills.

Collapse
designpuddle profile image
Chris Bertrand Author

Haha, thanks for the comment. We do seem to have quite a lot on our plates already don't we!

Collapse
drawcard profile image
Drawcard

There's 2 levels to programming in my mind.

There's the coding part which requires specific knowledge, training and skills - and then there's the "problem solving" part which requires creativity, experimentation and a bit of a sense of adventure.

Both are about 50/50 in terms of value, but personally I think the problem solving half is something that should be taught / gained first, and then the coding should follow as the programmer settles into a language or skillset.

Collapse
p0oker profile image
Pooria A

"Only 10% of what we do has anything to do with coding"

Hmm, sorry but I think you're just doing easy engineering in your day to day work. Doesn't apply to many really but I understand why posts like this sell well. People like to believe in order to become software engineers they don't really need to get good in it but they can instead practice small talk and public speaking.

I'm just not happy that posts like this mislead newcomers into putting efforts in the wrong direction.

Collapse
designpuddle profile image
Chris Bertrand Author

I agree it's a little hyperbolous but if you think newcomers shouldn't work on there interpersonal skills as well as their technical skills then I'd have to disagree with you.

Collapse
p0oker profile image
Pooria A

There's a difference between "you should work on your interpersonal skills" and "90% of your job depends on your interpersonal skills"

And to be honest, it's much more practical to get better in technical skills than interpersonal ones. Emotional Intelligence is not something that can get better easily with practice.

Collapse
lysofdev profile image
Esteban Hernández

Strongly agree that interpersonal communication is important but skill in design and development of software is crucial too. My teams have been plagued with issues caused by bad code developed in a hurry with little dedication to the design process. In my experience, the majority of developers are either adequate or deficient at their jobs due to the shortage of skilled software developers. On average, 1 out of every 6 new hires makes it past the trial period in my current team. Most of them are excellent communicators but have yet to develop what I personally refer to as 'reflex' for pragmatic software design.

Collapse
designpuddle profile image
Chris Bertrand Author • Edited

Thanks for your comment, It's true that a lot of developers need additional help with certain programming aspects. Wow that's a pretty woeful rate, how long is the trial period? I'd definitely spend more time checking for your specific requirements during the interview process rather than simply bin them after a few months in the office, for their sake, and yours.

Collapse
lysofdev profile image
Esteban Hernández

Our trial period is 3 months. We've been working on improving interview techniques as our turnover rate ruined our productivity last year.

Collapse
hdennen profile image
Harry Dennen

Dijkstra said "Besides a mathematical inclination, an exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer."

Then there's Bruce Webster's take on what makes an outstanding software engineer: "TEPES stands for Talent, Experience, Professionalism, Education, and Skill. These are the five aspects that separate an outstanding software engineer from a merely good one"

So you're certainly on the right track. Skill still counts, but it seems to be becoming more a prerequisite than a valuable measure of comparison.

Collapse
designpuddle profile image
Chris Bertrand Author

Exactly, thanks for your insight and link, that's really interesting stuff!

Collapse
dgriego profile image
Daniel Griego

I completely agree with this. I can attribute most (if not all) of my success as a software developer to my soft skills.

Collapse
designpuddle profile image
Chris Bertrand Author

Same here, thanks for sharing.

Collapse
ghost profile image
Ghost

Is interesting the fascination of the IT crowd (yes, I said it) about this "soft skills", of course being a functional social being is better than not; of course you will work better with others if you don't are a jerk and is you can communicate well with others. Is the same in any activity that involve others, for obvious reasons. Of course if you work alone you need less communication skills than if you work on a team. If a person doesn't code much is not much of a coder is it? and in that case of course your coding skills are not that relevant, if sometimes you have to drive are you a professional driver? If you take care of the food orders at launch are you a cattering?. Of course the thing you do a lot is important and is better to do it better. To me all the "soft skills are important" speech is not that useful, the "what" you have to do is usually very obvious, the "how" can be tricky. But I think that if nobody wants to work with you, if you forcefully eat alone and you don't get very good feedback from your partners I'm pretty sure you can figure it that it has something to do with people and not because of how or when you use recursion or your overuse of comments. Just as obvious as that you need to improve your coding if your code keeps getting rejected. Because many times this "soft skills" are the shield of people who doesn't make real contributions and spend the day "social skilling".

Collapse
ruffle1986 profile image
Tamas Fodor

Well... Thank you!

Collapse
designpuddle profile image
Collapse
koczkadavid profile image
David Koczka

Social skills are as important as writing good code, so I totally agree with you.

Collapse
tomavelev profile image
Toma • Edited

This is an extreme situation - to know psychology, how to interact with people, to know how the system works, like the need to have everything (the specifications) written in some form, and the absolute truth that no software is ever perfect and finished, take advantage of medical and paid days off, so to not work or work poorly, but still end up paid good.

Collapse
bluemihai profile image
Mihai Banulescu

I love the term "Software Writer" that DHH suggests.
youtube.com/watch?v=9LfmrkyP81M

I also love the provocative title of your article... made me open it! Thank you.

Collapse
designpuddle profile image
Chris Bertrand Author

Haha, Thanks. An enticing article title is always something I strive for!

Collapse
zk433 profile image
Zuzana

A good programmer needs to have a very good reading skills - to spot all those annoying typos in the code :)

Collapse
designpuddle profile image
Chris Bertrand Author

There's a plugin for that! 😉

Collapse
crschwarz profile image
Christopher Ryan Schwarz

Really good article. Thank you!

Collapse
designpuddle profile image
Chris Bertrand Author

Np. Thanks for reading!

Collapse
steelwolf180 profile image
Max Ong Zong Bao • Edited

Agree your not talking nonsense. I think it requires a lot of our soft skills besides our own hard skills.

Collapse
williamlake profile image
William Lake

Finally, that Bachelor's in psych is paying off.

Collapse
dkamer profile image
David Kamer

Depends on how unique the problem you're solving is.

Collapse
designpuddle profile image
Collapse
sria91 profile image
Srikanth Anantharam

The title is misleading, but the concluding remark is thoughtful.

Collapse
emiller00 profile image
Elliott Miller

I think this matters a lot on your organization and product.