
Ask HN: Do you consider yourself to be a good programmer? - type0
if not, why? how do you validate your achievements?
======
wilsonnb2
I'm pretty confident that I am an average programmer. The operating systems
class I took in college went almost entirely over my head. I'm pretty sure I
got a C- or a D as my final grade and that was only because I ended up in a
group that had a few people better than I was. I got C's in a lot of the
higher level classes that I took.

The root cause of this, I think, is that I just don't like programming that
much. I'm a smart person and I think I could be an above average programmer if
I applied myself but I just don't care enough to do so. There are other things
that I enjoy more that I want to spend my time and effort on.

I thought that this would be a problem when I graduated but it turns out that
the world needs average programmers. My current project at work is a Windows
Forms app written in C# to pull data out of a database and plug it into a Word
template to generate a Word document. It's not glamorous and it's not trendy
but it needs to be done by someone. Pay me a decent salary, give me good
insurance, and I'll gladly clock 40 hours a week writing CRUD apps because it
beats manual labor, retail, or going back to school.

------
carlmr
Compared to coworkers in my last two companies I'd say I'm definitely well
above average, but not the best. This might sound like boasting, but it boils
down to being good at delivering on time, caring about the craft and being
motivated to improve things.

I think if you care about what you do, then you're probably already in the
upper 50%, because most people don't, and it shows. Now if you pair giving a
fuck with some programming talent and interest in improving your skills and
productivity you can easily get into the top 10%.

To get into the top 1% you need to be very focused on programming. I have too
many other hobbies to be that focused only on this aspect of my life. But I'm
ok with that.

If you start comparing yourself to internet people, there are just too many
that you can compete with them on everything. There are too many experts in
too many niches that you could read all the HN articles and compare favorably
in comparison.

~~~
tonyedgecombe
Never mind caring, in my experience a lot of people in this industry struggle
to even write working code. You might not see them much in startups but do
some work for enterprises and you soon discover there are a lot of them. They
usually make up for their lack of technical skills with an abundance of
political activity.

~~~
carlmr
I know exactly what you mean.

------
chrisbennet
I care deeply about my craft. My code is as simple to understand as I can
possibly make it. I spend almost zero time debugging. (OK, last week I had a
WTF??? bug. The black screen turned out to be the lens cap still on.)

I feel no need to validate my achievements.

(This is a little bit trollish, forgive me.) You could use a matrix of pots,
pans and knife work as a proxy for a chefs competency I suppose. Or, you know,
you could taste the food he creates.

------
westurner
> For identifying strengths and weaknesses: "Programmer Competency Matrix":

> \- [http://sijinjoseph.com/programmer-competency-
> matrix/](http://sijinjoseph.com/programmer-competency-matrix/)

> \- [https://competency-checklist.appspot.com/](https://competency-
> checklist.appspot.com/)

> \- [https://github.com/hltbra/programmer-competency-
> checklist](https://github.com/hltbra/programmer-competency-checklist)

~~~
digianarchist
Don’t read too much into that. TDD for example is not leveling up it’s an
opinionated approach to development.

~~~
westurner
Automated testing is not a choice in many industries.

If you're not familiar with TDD, you haven't yet achieved that level of
mastery.

There's a productivity boost to being able to change quickly without breaking
things.

Is all unit/functional/integration testing and continuous integrating TDD? Is
it still TDD if you write the tests after you write the function (and before
you commit/merge)?

I think this competency matrix is a helpful resource. And I think that
learning TDD is an important thing for a good programmer.

~~~
gaastonsr
There is absolutely no need to follow TDD to be good at testing.

~~~
westurner
This is all unfounded conjecture: it seems easier to remember which parameter
combinations may exist and need to be tested _when writing the function_ ; so
"let's all write tests later" becomes a black box exercise which is indeed a
helpful perspective for review, but isn't the most effective use of resources.

~~~
mpetkevicius
IMHO being convinced that there's only one true and correct methodology (TDD,
Scrum, etc.) or paradigm (functional, objective, reactive programming, etc.)
is a sign of being a bad programmer.

~~~
westurner
A good programmer finds common attributes and behaviors and organizes them
into namespaced structs/arrays/objects with functions/methods and tests.
Abstractly, which terms should we use to describe hierarchical clusters of
things with information and behaviors if not those from a known software
development or project management methodology?

And a good programmer asks why people might have spent so much time
formalizing project development methodologies. "What sorts of product (team)
failures are we dealing with here?" is an expensive question to answer as a
team.

By applying tenets of Named agile software development methodologies, teams
and managers can feel like they're discussing past and current
experiences/successes/failures with _comparable_ implementations of approaches
that were or are appropriate for different contexts.

To argue the other side, just cherry picking from different methodologies is
creating a new methodology, which requires time to justify basically what we
already have terms for on the wall over here.

"We just pop tasks off the queue however" is really convenient for devs but
can be kept cohesive by defining sensible queues: [kanban] board columns can
indicate task/issue/card states and primacy, [sprint] milestone planning
meetings can yield complexity 'points' estimates for _completable_ tasks and
their subtasks. With team velocity (points/time), a manager can try to
appropriately schedule _optimal paths_ of tasks (that meet the SMART criteria
(specific, measurable, achievable, relevant, and _Time-bound_ )); instead of
fretting with the team over adjusting dates on a Gantt chart (task dependency
graph) deadline, the team can

What about your testing approach makes it ' _NOT_ TDD'?

How long should the pre-release static analysis and dynamic analyses take in
my fancy DevOps CI TDD with optional CD? Can we release or deploy right now?
Why or why not?

'We can't release today because we spent too much time arguing about quotes
like "A foolish consistency is the hobgoblin of little minds, adored by little
statesmen and philosophers and divines." ("Self Reliance" 1841\. Emerson) and
we didn't spec out the roof trusses ahead of time because we're continually
developing a new meeting format, so we didn't get to that, or testing the new
thing, yet.'

A good programmer can answer the three questions in a regular meeting at any
time, really:

> 1\. What have you completed since the last meeting?

> 2\. What do you plan to complete by the next meeting?

> 3\. What is getting in your way?

And:

Can we justify refactoring right now for greater efficiency or additional
functionality?

------
segmondy
I'm a shitty programmer. I've written code for gameboy, playstation, servers
in C, assembly, mobile apps, tons of backends, a CPU simulator, assembler &
disassembler. I'm in a leadership role now, but still hacking go,
javascript/typescript, python, & prolog for the love of it. But am I a good
programmer?

Not even close.

Ever heard of Jeff Dean, Linus? Carmack? Norvig? Then when I look at the
multitudes of opensource projects in Github, I can only stay humble. I'm
average at best if that.

------
AlexAmee
No but I don't have to be good because 90% of all software is stupid CRUD.

~~~
tonyedgecombe
I don't do a lot of CRUD but it always struck me a lot of this work should be
configuration rather than coding.

------
throwawaymath
What is a "good programmer"? What would you like to accomplish by soliciting
the feedback? Without agreeing to a common definition and measurement, it's
not a well-founded question.

I don't think of myself as a "good programmer" because "good" is too blunt a
qualitative measure to be productive. It's a disagreeable and poorly specified
measurement. I haven't seriously thought about whether or not I'm a good
programmer, just as I haven't thought about whether or not I'm a good person.
In fact I consciously disengage from assessment like that.

I validate my achievements on a case by case basis, and I validate them
according to how close I came to maximal efficiency and minimal time in
accomplishing a task. It would be deceptively attractive to use those two
heuristics as a rhetorical scaffolding for the meaning of "good", except that
I don't compare achievements; they're mostly orthogonal.

The question of whether or not I'm "good" has no meaning for me, because I
only evaluate performance within the confines of discrete tasks and sets of
related tasks. Further I personally don't have enough insight into the
difficulty of all possible tasks, so I refuse to generalize my performance on
any particular subset of them to how well I'd do on a majority of them. And to
the extent that there are only so many tasks and skills are transferrable: any
given task may have differing dimensions of deadline, efficiency or
implementation requirements. To get a useful measurement, you'd have to draw
arbitrary lines in the sand across each of these dimensions _and_ convince
everyone else in discussion that these lines are the sensible ones.

This probably isn't a satisfying answer. But it's not intended to be. The idea
of a "good programmer" is conceptually attractive but practically meaningless.

~~~
wilsonnb2
The question has nothing to do with whether anyone is actually a good
programmer or not - the OP asked "do you _consider yourself to be_ a good
programmer?".

It's a question about how you view yourself, not about objectively comparing
your programming skills to someone else's, therefore it doesn't require a
common definition or measurement.

~~~
throwawaymath
Yes, exactly. And such a question would still have utility - despite being a
subjective assessment - if the measures of the assessment were common. But
that's not the case here. Not only are respondents subjectively assessing
themselves, they're subjectively assessing themselves according to arbitrarily
different measurement criteria which they need not disclose.

Therefore, the only thing anyone can conclude from responses is, "For some
definition of 'good programmer' which is specific to each individual
respondent, approximately _x_ % of respondents believe they satisfy the
definition." It's one thing to solicit opinions; it's another thing entirely
to open the floor for opinions which may not even be the same. The OP may have
received personal assessments and anecdotes about steak, apples and
cauliflower when their intention was to solicit personal assessments about
almonds.

------
vinylkey
I would consider myself a very average programmer. I have some good experience
and a good knowledge set, but I'm not super passionate about programming to
drive myself to be a "great" programmer.

edit: I think the biggest thing holding me to being average at best is
practical experience in larger systems. In school, I was always good at the
theory parts of computer science, but did so-so in projects. In my
professional experience, I think that still holds true: I can manage language
intricacies, and write pretty clean code for smaller problems, but I can get
into trouble with architecture-level stuff like defining models. I also have a
tendency to over-engineer solutions to complex problems.

------
inertiatic
Comparing yourself to people on the internet is pointless so I'll skip that.
I've been working for about 5 years and out of the technical people I've
worked with I'd say I'm a better programmer than exactly one.

At times it's because of laziness (didn't read up on X), at other times due to
temperament (I refuse to hold on to easily googl-able information), but
frequently it's because of limited working memory or lesser ability for
abstract thought.

I'm aware of impostor syndrome but I'm not sure this is a case of it.

This isn't stopping me from contributing on every team I'm a part of, getting
consistently good feedback, getting interviews however. I feel in general, as
you can get most things done given enough or even close to too much time, then
you are generally valuable.

------
cirgue
No, at least not compared to some of the people that I work with. I really
like the creative parts of programming, but I actually have a really hard time
getting into a headspace where I can pick up a problem and just go. I can
produce a high-quality product quickly enough that my employer is happy with
my performance, but I don’t feel like I have the kind of raw talent that makes
someone really good. I miss doing things where I spend most of my day working
with humans. I don’t feel like I’m making the most of my time by doing dev
work.

------
zaarn
I consider myself capable enough to solve most problems in an average way.

------
orcs
I consider myself able to be a good programmer but I have no experience.

I'm a mature student studying a computer science degree at distinction level
however my overall lack of experience is obvious to me. I know how to program
the way I've been taught but I don't have the experience to say whether what
I'm doing is any good.

I also have no idea where to find out whether what I'm doing is right or
wrong.

------
superasn
I consider myself a lazy programmer who is also very hardworking.

As in instead of solving the problem at hand I'd rather spend a week working
on my own framework so that I could save 5 minutes should I have to deal with
the same thing again in future although the chance of it happening is 1 in
100.

------
krapp
No, because I don't finish my projects and I haven't written anything I
consider good.

------
amerine
Nah, but I get by.

