I see a lot of questions on SO that are asked about 'good' programmers vs 'bad' programmers.
For example, what is a good/bad programmer, how to tell a good/bad programmer, what to do about a bad programmer on a team, how to hire a good programmer.
I know it's pretty easy to apply the words to other people, but I find myself wondering if anyone out there would actually define THEMSELVES in a Boolean fashion like this, rather than "good in some areas, weak in others..."
I'm not asking as an either/or where you have to be one or the other, but as a 'both' - are you a good or bad programmer?
If so, either one, why?
Please note this isn't meant to be argumentative, or to define good/bad practices, etc. I just want to know how many people think they are good, bad, or neither out there.
The more experienced I become, the more I think of myself as a bad programmer.
From my experience, what makes a developer stand out is not the skills itself, but the thirst to learn.
I've learned that a newbie that reads reads reads and introspects on past mistakes quickly overtake a "skilled" developer.
Target to
I hope I'm a good programmer.
I fear I'm a bad programmer.
I'm a lazy programmer. Usually the good kind, sometimes the bad kind.
The A Team theme song plays whenever I walk into a room. I'm that good.
I'd love to say I'm a good programmer.
But in reality I'm sure I over engineer, over optimize, over comment, and under engineer , under optimize and under comment, etc, etc...
In the end I'd say if you can be a "good" programmer at least half the time, you've won the battle, but not the war. And the war will last until you stop programming ;)
I'm a bad programmer. But I try to be less bad every year.
When I started to teach myself programming, I learned to be an awkward programmer - with logic that was hard to follow, with obscure bugs. By reading the Masters, I became a clever programmer, with harder to follow logic and bugs harder to fix. I then, through careful thought became a subtle programmer, with code that was versatile, with fewer bugs and layered logic.
Then came the fateful day, after a whole year away from a project , I had to maintain my own code. I could not recognize it, the logic, the code constructs, and even sometimes the comments. I was ashamed to have written the code, even though it was a large, successful system that had few defects.
I have noted that often what was to me 'bad' code from a colleague was code that carried a mindset or precondition that I did not possess. Once I had understood the working set, the code even seemed quite extraordinary...
So I began to walk towards being a demonstrative programmer, project by project, one that I am still working on. In looking at my own work, I don't judge it 'good' or 'bad' any more, but try to focus on solvable constructs - 'unclear', 'overcomplicated' 'risky', etc
I try to remember code that was 'maintainable', 'clear', 'robust' and so on. I hope that one day I will attain the mark of a "Good Programmer"
I'm a bad programmer. I'm lazy, stuck with my less-than-optimal mental patterns, and easily put off by other people's cruft.
But I deliver stuff that makes the client happy, and does what they want (as opposed to what they think they want).
If you are a good programmer, it is obvious when you see good code, even if you don't like the style. There is no one best style, but good code is clean, clear, elegant, filled with recognizable design patterns and idioms. Bad code is obviously bad regardless of style. There are so many ways code can be bad.
If you are a bad programmer, things are less obvious. You might mistake a long block of simple statements as desirable clarity when it is actually naive code that fails to reuse higher level idioms and libraries. Likewise, you might be confused by code that makes extensive reuse of existing code and assumes knowledge of certain patterns.
Of course, there is every degree between good and bad, but my above assertions could be used as a quick and simple test. Can the programmer recognize examples of good and bad code and support the judgment with some meaningful observations?
I'm better than I was yesterday, but not as good as I'll be tomorrow.
I'm so good a programmer, I can code GMail 2.0 in Prolog with one hand and an improved Emacs in machine code in the other. And if you think that's hard for me, you're wrong. I code quantum algorithms before breakfast, polish my PhD dissertation proof on P != NP during the day, and write O(1) matrix multiplies in the evening.
Yeah, I'm that good.
People who think they know everything really annoy those of us who know we don't.
-Bjarne Stroustrup
I think the fact that a person seriously considers this question makes them a good programmer. Most of the bad ones either know they're good or have spent so much time convincing themselves that they're bad that it becomes a self fulfilling prophecy.
Yeah, I'm pretty good.
If by good you mean that the code I write would be thought of as elegant leading edge stuff by a group of peers, then no I'm not a good programmer. If on the other hand you mean that I can write porgrams that are efficient, robust, and well liked by my end users in a relatively short time frame, then yes, I am good. How do I know this? Twenty years in business, working for myself, I make a decent income and get on well with my clients.
Outside of that, I'm not sure how you would measure the term good programmer.
Yep, no programmer is ever perfect. I guess that's the beauty of programming. Whenever I write a program, there are a few things that can happen:
Yet people still say that I am a pretty darn good programmer. Oh well, that's programming for you...
I don't care if I'm a good or bad programmer: Which it means? Which is the reference?
I take a lot of care to be better programmer than yesterday:
I thought I was good until i discovered SO and the people in here. then i realized i was bad.
Personally I perceive myself a bad programmer. Objectively I know I'm pretty good, comparing to the mean, but I know there's a lot of people I can learn from.
If you think you're good and there's no room for improvement, you're screwed.
I think I'm not a good programmer.
But I love to learn new things in programming.
This makes me eager to solve problems. I'm very keen on to think on others problems and find solutions for them.
I love working on .NET framework and the SQL programming.
And I like sharing my experiences with others. If I face a problem, I believe someone somewhere is having trouble with the same problem. So why not help them if I had a solution.
Some days I walk on water [1], other days I pass water when I see what I've done [2].
I suspect that matter how good you are as a developer, you're always spending some part of your working day writing crap. All you can do is to try to improve by gaining small victories over yourself. There must be contests, and you must win.
[1] http://stackoverflow.com/questions/437/what-is-your-solution-to-the-fizzbuzz-problem?answer=239915#239915I'm a lazy programmer with good habits.
I'm a "bad" programmer in the strictest sense: I'm self taught, without any formal education (and to be honest I'm terrible at math so there's no way I would ever do a CS program); I don't make use of things like version control or testing, although I am trying to learn them both; I've only ever worked on maintaining existing software without ever really having the chance to write something from scratch.
But you know what? I'm okay with that, because I'm trying to improve myself as much as I can and learn how to become a "good" programmer, or at the very least a better programmer than I am.
i used to be a great programmer. then i realised that i was only a good programmer. now i've learnt that i'm a bad programmer.
being a bad programmer rocks. it means you're acknowledging that you can be a better programmer. and every programmer can be a better programmer. as you learn more and get better experience, you lose bad habits and pick up new bad habits.
but i think the best title i picked up was being a 'hero programmer'. that's when the deadline looms and life is about to hit the fan and you pull three all nighters in a row and manage to get working code out. great code? probably not. but then again all code that can work is great code in my books.
last quote: 'all programmers must be optimists. because at the start of every project, with every crazy requirement and manager breathing down your back, you have to be an optimist. otherwise not one single project will ever start. because at the end of the day, a programmer needs to BELIEVE it's possible.'
Bad.
But do not tell it anybody.
I can't remember where I heard this (something makes me think Stallman, but I can't be sure):
Bad programmers write clever code, but use stupid data structures; good programmers use ingenious data structures and write little code.
(Not a direct quote).
Yes.
I'm not a particularly good programmer. I mean, I can read through docs, write working and maintainable code, but I'm terrible at algorithms.
When we went over the different types of sorting algorithms in our textbook this year, it all sort of went over my head. Then again, that stuff will be abstracted in libraries in most of the actual jobs I'm doing.
I guess I haven't been in the field long enough to make a judgment. I at least know I'm not a good Computer Scientist :)
G'day,
As several people have pointed out, it's the thirst for knowledge that's important.
I'm a "bad programmer" when it comes to Erlang or Ruby because I'm learning those at the moment. But! I'm learning them. And applying them. But I'm a "good programmer" because I'm always learning or refreshing my skills, e.g. I just went back and worked my way though K&R again to refresh my C knowledge.
For me "good" and "bad" is a mixture.
I've worked, and work, with people who sit on their rears with a massive conviction of their own sheer brilliance and no inclination to step outside their comfort zone. Oh sure, they might read up about a new version of zfs or the new mods to Apache, but when push comes to shove, they are not learning anything new. They're just putting a new gloss coat on the veneer of their current knowledge.
Being a good programmer is all about stepping outside that comfort zone. It's learning about C# and .NET when you're a confirmed *nix person so that you can appreciate things more. It's picking up Python even though you're a Perl Monk, etc.
It's an attitude, a realisation that you don't know it all more than anything!
cheers,
I am a bad programmer - I am always trying to concoct an evil plan to take over the world using my superb programming skills.
Once upon a time I thought I was a good programmer. I could code in C, using and computing pointers to pointers and pointers to functions, etc. and usually getting it all to work without crashing frequently. At that time, that seemed enough to be a good programmer.
Then I lost my job during a recession, and my next job was mostly help desk and testing sorts of stuff. It took a few years to land another job which I thought was going to be mostly programming, but it turned out they just wanted a jack of all trades. After several more years, I finally landed a new job which looks like it's going to be mostly programming. I've only been here a few months, but that has been long enough to discover that I'm now a bad programmer. :-(
good or bad => good or (not good) => true
I may or may not be a good programmer, but I recognize boolean logic when I see it.
As long as there is something to learn and improve, I consider myself an "adequate" developer. If I ever get to the point where there is nothing to learn from or improve on, that is a sign that I am not looking hard enough. I believe that I always have something to learn and a way to improve my skills - whether it is for my own edification or for a task at hand.
When I run out of these reasons, it is time to find another career.
In my opinion, the two most distinguishing skills of a great programmer are:
Mathematically skills come next, I guess, but they aren't quite as important.
I'm a bad programmer. The only reason I'm a bad programmer, is I don't know everything there is to know on the subject, and since I never will, I will always be a bad programmer. At least this bad programmer can look forward to programming and learning for a long, long time ahead.
Based on all the stuff I don't know, I consider myself an 'OK' programmer. I get stuff done, I believe I do a good job at developing easily maintainable code, and constantly strive to improve.
But the scary thing is; I would consider myself better than almost all of the programmers I've worked with. And many of those, I'd consider myself light years ahead of.
I'm still a bad programmer. But I'll become a good one when I grow older. :)
I hope I am! at least my boss saids I'm fast. But In a boolean basis, I would say I'm not.
i KNOW i am a bad programmer, instead of writing my own crappy code i regularly steal other peoples code (google) or scriptkiddy my way trough free snippets.
sigh
i was simply born too late and the stack of books reaching to my ceiling only helped me get so far (stackoverflow). I am probably not intelligent enough to be a real coder either.
sigh²
i see young kids raffling out code faster then i can type a shopping list, and it makes me feel real old
sigh³
if {birthyear<1985} (flash-bios;upgrade-memory;insert-quadcore) else {};return;
My friend alerted me to the redundant else block. Exactly my point :-/
The answer is simple. If you think you are a good programmer, you are in fact, a bad programmer just lying to yourself.
A good programmer consistently writes solid code not by being excellent at programming, but by going through a rigorous testing process so that it has been 'proven' that he wrote some solid code. And even then he should assume that it's crap and needs to be optimized and debugged again.
It's like an irregular verb. I'm pretty good, you're okay, he/she couldn't code their way out of a paper bag.
More seriously, when I was 18 I was The Stuff. When I was 25, I was ok. Now my employees are fantastic, and I screw up all the time. Soon I'll be a PHB. But I do know a lot more than I did last year, and that's the most important thing.
I'm learning?
I think I'm not a good or a bad one, I'm somewhere in between.
Most questions/problems in my day-to-day work I can solve on my own, as long as they're in programming domain. However, what makes difference is how long would it take me.
For example, I had a team leader who pretty much always could find a quick solution to a problem if I came to ask him about something I was in doubt or had trouble with. Sometimes not so quick, and in really rare cases he told me that can not/should not be done and came up with a different way to do things.
Quite often, whenever I did some piece of work I was assigned to, he could have a quick look and tell me that it's fine and well, but here and here it could be optimised a little bit.
He is the person who I would call a good programmer.
Is it normal for anyone else to work on four or more projects at the same time, all of the time? I feel this makes it difficult for me to be the great programmer that I strive to be.
I'm not a good programmer, but I try to learn something new every day. Constant improvement is more fun than being at the top all the time, anyway :)
I'm a good and bad programmer, sure. I'm good at programming ASP and ASP.Net elements going from a specification where most things are spelled out and I'm not having to do much analysis work. I'm bad in that I'll keep to the existing style which may not be the best for a code base and not rock the boat by suggesting new tools that may improve things around me. I'm also a bad programmer in that I don't know all the optimizations one can make within ASP.Net and knowing every single part of the ASP.Net page lifecycle. I know parts of it and how to use some of it which has been what I needed to know.
I am constantly moving from bad to good. I will never really be good. I see others that I think are good, and I strive to be like them. I'm constantly refactoring my skill set so that I can be good, in the hopes that one day, before I kick the bucket, I'll be good. But I'm not there yet. Not today.
I think I'm a good programmer and you know why? Because I'm always 100% convinced my code contains no errors!
And of course I know errors will be found everytime... But it's like a car mechanic, when he has changed your tires, he knows all the screws are in place afterwards, and yeah, sometimes he forgets something...
So, it's the state of mind that makes a programmer good or bad...
Okay, you guys really need to learn how to sell yourselves. Such self flagellation. In an economy like this one, you guys gotta talk yourselves up more. Except Paul Nathan [1]. I think you've got it covered, Paul.
This makes me a great programmer.
Just like I'm a better driver than everyone else, and better in bed than everyone else. I'm smarter, better looking, more rational, and saner than everyone else, too. Like most people, I'm just better than everyone else [2].
I'm always right, too.
[1] http://stackoverflow.com/questions/242293/are-you-a-good-or-bad-programmer/242340#242340I'm a bad programmer trying to be a good one.
Good or bad, to what measures? Most definetely there are developers out there who can write code in a way I can only dream of. So in that sense I could be considered bad. OTOH as a teamplayer I can bring ideas together and make a group of people work together as a team. I do understand what they need, I take care they get it. I can put highly technical ideas into words that even users can understand and I can put user ideas into words that even software developers can understand. So is that good or bad? Dunno! Ask my team, I'd say. I had good developers introduced in my team with reputations as code-gods who were straightforward communicative dumbos (as it appeared afterwards). They were able to upset people within the hour of their arrival. That made them really bad, so I strongly suggested them to leave the team.
I don't consider my depth or breadth of knowledge (or lack of) to define me as a good or bad programmer. Rather- I consider myself a good programmer because I know I've made the day-to-day jobs of my closest co-workers easier over time, as well as helped improve my company's image to its clients. No doubt that knowledge has helped me along the way, but more importantly is an intrinsic motivation to make things better over time. Equally important is being able to "make things happen" and "get things done".
There is also a difference between a good programmer and a good software engineer. I think I am a better software engineer than a programmer. I personally think the big distinction is how well you can see the big picture and predict correctly requirements w/o them being handed to you. In some sense, this is more important than being a good programmer. I know many people who are very good at programming, but cannot evaluate the big picture w/o getting caught up in little useless details.
I'm not a particularly "good" programmer - very few people are - but I am cautious, studious, and interested enough that at this point I believe I'm good enough to not do any damage and - hopefully - be able to leave code better off than I find it.
I am only 27 and have not had the opportunity to make enough mistakes to learn from but I am always willing to entertain the opinions of others and have a group of roughly 20 senior developers and industry leaders whose opinions I solicit and frequently defer to.
Of the people I know that play guitar, I'm "better" (in some sense) than the vast majority of them, and people will sometimes tell me I'm a pretty good guitar player. But in reality, I suck at guitar, esp. compared to someone that really is good at it, and then there are the gods, like Vai and Petrucci, etc. that just make you want to throw all your guitars in the dumpster. I could say the same about programming.
I don't think that you can be a "good" programmer until you acknowledge that you can't stop learning new ways of doing things. And the moment you do stop learning new ways of doing thing, you become a "bad" programmer again. And maybe that's the natural evolution of programming.
I'm a good programmer. But far too lazy than any one in the world could be... I started with QuickBasic when I was a kid and went up the ladder. But now, in my early 20s, I feel that I'm losing interest in everything as I over calculated the reality of life and feel that we should try to evolve the mind than man made technologies. After all, there is no better machine that will understand us than our own body...
Now I'm working on an artificial intelligence project. So, I might be able to kick start the interest in programming again by some means, hopefully.
Both!
I would have to say because you make choices based on what you need.
ie. adding images for design in a site which are unnecessary and add file size. It is 'good practice' to keep a site as small in terms on file size, but to do this you cannot edit you JS/ CSS (obfuscated) and can easily sacrifice usability and aesthetics to save on bandwidth/ speed.
I guess it really depends. I do my best, but is it really the best?
Ha-ha! nice one. I think everyone is both - good and bad. And it depends in their boss. How much chance of excuse she gives you. If she applies pressure to deliver the product, you have the excuse to say "Normally, I am better than this, but this time I will make and exception and write not-so-good code"
I'm a good programmer.
Good programmers meet the deadlines of their business-counterparts, and get the approval and respect of their programming peers.
To hire one, have another good programmer ask them one question in an interview: "what are you most proud of doing in your last two or three positions?"
I consider myself to be a good programmer. Several of the other answers seems to imply that being a good programmer implies writing perfect code, but I do not share that opinion. To me being a good programer is to care about the code, spend the required effort in selecting good names[1], refactoring as needed, and thinking about other people (or even yourself) that will be working with the code sometime later[2].
If the requirement is the function should take X as input and give Y as output, a good programmer is not satisfied only based on that requirement being fulfilled, but also caring about the intrisic value of the code.
Also having several years of experience means that I have made lots of mistakes that I have learnt from, and have developed a taste of what good code is (of course there exists no objective exact definition of "good code").
[1] "There are only two hard problems in computer science - cache invalidation, and naming things" - Phil Karlton
[2] "Programs must be written for people to read, and only incidentally for machines to execute" - Preface of SICP
That's why I love Google.
It is Google who helps me to grow everyday, and I really LOVE to learn with it.
I don't know if I am a good programmer, but for sure I am a good student ;)
I don't care how bad I am or how good I am, but from my perspective 12 Things Every Programmer Should Know [1] gives some ideas what a programmer should do.
[1] http://tech.wowkhmer.com/2010/09/12-things-every-programmer-should-know/I'm bad programmer.
I feel like my lack of being able to remember makes me a bad programmer. Unless I am working on a project for weeks straight, I don't remember all of the languages functions, and which order their parameters go in.
I would guess a good programmer would remember things like that.