Slashdot Mirror


Ask Slashdot: What Makes a Great Software Developer?

Nerval's Lobster writes: What does it take to become a great — or even just a good — software developer? According to developer Michael O. Church's posting on Quora (later posted on LifeHacker), it's a long list: great developers are unafraid to learn on the job, manage their careers aggressively, know the politics of software development (which he refers to as 'CS666'), avoid long days when feasible, and can tell fads from technologies that actually endure... and those are just a few of his points. Over at Salsita Software's corporate blog, meanwhile, CEO and founder Matthew Gertner boils it all down to a single point: experienced programmers and developers know when to slow down. What do you think separates the great developers from the not-so-fantastic ones?

214 comments

  1. Alternate Link by Anonymous Coward · · Score: 5, Insightful

    Here's an alternate link for the first article.

    Or better yet, skip it. Usual shitty dice.com summary article.

    The linked lifehacker article seems pretty good and I largely agree with it. Couldn't make it through the second one.

    Two things I would add from my personal arsenal:

    - Try to kick ass at least once a week. This sounds weird, but it's worked very well from me. In the perfect world we would kick ass every day, but I think realistically we (or at least I) would quickly burn out. So instead I try to just randomly pick a day where I come in with the mindset that I'm going to just fucking own whatever I'm working on. The day is random and sometimes I skip a week, but I usually manage, and while you would think inconsistent performance would stand out, I've found (at least where I work) that it doesn't, and people tend to remember the kick ass days rather than the average days.

    - Dive into the stuff that others avoid / are scared of / don't like doing for various reasons. I'm not saying take the shit jobs, but usually there are tasks programmers hate because they involve working with hardware, dealing with clients, travelling, or doing something out of their comfort zone. Become the <whatever> guy.

    1. Re: Alternate Link by Anonymous Coward · · Score: 1

      Loving the "pick a day, and kick ass" idea. Definitely going to implement that. Thanks!

    2. Re:Alternate Link by barrywalker · · Score: 5, Interesting

      I've become the "goto" guy for a lot of stuff simply by being curious. I've had a significant hand in every single piece of our application and know it better than anybody else on the team. I volunteer for things that scare the shit out of most of our developers. All it takes is, "Huh. This is broken. I wonder how it works?" to become Mr. Indispensable.

    3. Re: Alternate Link by Anonymous Coward · · Score: 1

      Why the fixation on boogers and donkeys?

    4. Re:Alternate Link by Anonymous Coward · · Score: 1

      The best software developers are people who don't try to work on their own. Someone who is comfortable admitting that they can't do everything well by themselves and will call in UI experts and pro artists to help where needed.

      A good software developer is also someone who listens to user bugs reports and feature requests.

    5. Re:Alternate Link by gfxguy · · Score: 4, Interesting

      That's what I would have added... curiosity. I think, like a lot engineers, the kind of people who took their parent's phones apart when they were kids to figure out how they worked... always playing the "what if" and "I wonder what would happen" games.

      --
      Stupid sexy Flanders.
    6. Re: Alternate Link by binarylarry · · Score: 4, Funny

      Not enough agile bro.

      Need to pick an hour everyday and kickass.

      --
      Mod me down, my New Earth Global Warmingist friends!
    7. Re:Alternate Link by Anonymous Coward · · Score: 2, Informative

      A good software developer is also someone who listens to user bugs reports and feature requests.

      Maybe this is true of some places, but everywhere I've worked has seen a huge separation between the developers and the end user. I think it's actually a major failing in a lot of big projects.

      A pretty common structure:

      - contracts people and requirements analysts work out a set of contractually binding requirements with the "client" (a group which is usually themselves abstracted from the people who will actually use the software).
      - designers build a design to meet those requirements, it's reviewed by "the client" (again, not Joe user, but some manager theoretically representing Joe users interests).
      - testers build tests to the design and the requirements, which our friend, quotey McClient approves.
      - software developers build to the design to pass the tests
      - testers test
      - client signs off on the software based on witnessing the tests they approved
      - client gets software, installs it (or it is installed for them)
      - users promptly go "what the actual fuck!" and try to deal with software that doesn't actually do what they need

    8. Re: Alternate Link by Prof.Phreak · · Score: 1

      Urgh!

      --

      "If anything can go wrong, it will." - Murphy

    9. Re:Alternate Link by Anonymous Coward · · Score: 2, Funny

      >I've become the "goto" guy for a lot of stuff

      Is that a subtle way of saying your co-workers consider you harmful?

      (Sorry, just couldn't resist.)

    10. Re:Alternate Link by clockwise_music · · Score: 2

      I wrote a blog post on this a few years ago and I think it's still pretty relevant today:

      http://programmers.blogoverflo...

      I think the main thing that most people skip is how to work alongside other developers, and how to write maintainable code.

    11. Re:Alternate Link by maestroX · · Score: 1

      I volunteer for things that scare the shit out of most of our developers.

      Hello Barry, it's the other way round. Nobody is indispensable, everybody can be a nuisance.

    12. Re: Alternate Link by Anonymous Coward · · Score: 0

      So... Pick six days a week to suck? Got it!

    13. Re:Alternate Link by fractoid · · Score: 1

      I absolutely agree that curiosity (along with a willingness to actually RTFM) go a long way to making one indispensable in a team. However, that brings its own risks with it: If you can't be replaced, you can't be promoted. How do you balance the benefits to your career (in terms of increased productivity, reputation etc) against the risks (stagnation, either because they can't manage without you, or because they realise how productive you are and aren't prepared to lose your utility)?

      --
      Rampant carbon sequestration destroyed the Dinosaurs' tropical paradise. I'm here to help repair the damage.
    14. Re:Alternate Link by jythie · · Score: 1

      Maybe one lesson here is that a good developer's behavior matches the needs of their domain, which means someone might be a great developer on some types of projects and a lousy match for others.

    15. Re:Alternate Link by plopez · · Score: 1

      "Try to kick ass at least once a week."

      I try to do similar things. But then there are last minute meetings (scheduling 8 am meetings at 630 am? Really?), an overnight patch breaks my IDE, a bad switch in the blade farm hoses up routing so I can't make it to my test and development server, a new standard is implemented in coding tools, a new coding paradigm is adopted, HR says we need to get our compliance reports in RIGHT NOW, "Fred" get sick and I have to cover for him, etc.

      So good luck with that.

      Footnote: most of what I listed and seem to experience day-to-day is shiney new tech not working. Doing a good job is hard when you must constantly fight your tools.

      --
      putting the 'B' in LGBTQ+
    16. Re:Alternate Link by tlhIngan · · Score: 2

      I absolutely agree that curiosity (along with a willingness to actually RTFM) go a long way to making one indispensable in a team. However, that brings its own risks with it: If you can't be replaced, you can't be promoted. How do you balance the benefits to your career (in terms of increased productivity, reputation etc) against the risks (stagnation, either because they can't manage without you, or because they realise how productive you are and aren't prepared to lose your utility)?

      Even the go-to guy can be promoted - he becomes the technical guru (sometimes referred to as system architect or system analyst, even).

      There are two career tracks, after all - you could go up through management, or the technical track. You may know the entire system, but as you go up, what you do is you teach - even I find my job consists less and less coding and more and more architecting, solving problems, and thinking, evaluating and reporting.

      Hell, by knowing the system you know you can make reasonable estimates - if someone says it's simple but you know it's a hairy mess, that makes your life so much easier.

      And anyhow, as you rise, there will be new know-it-alls as well and what makes you good is you all learn from each other (one of the biggest problems is ego, and learning to eat crow and to respect that someone may actually know more than you makes you even better still.

      Of course, there's also a laziness aspect - I hate writing pages of code if I can think about it a little more and turn out something more concise, so what little coding I do often starts with a lot of pre-planning to what I do write is simple and not complicated.

    17. Re:Alternate Link by barrywalker · · Score: 1

      Great point, and it's exactly what I'm seeing now. I've currently transitioned to more of a devops role with 3 large projects on my plate, but I'm still dragged into discussions around large sections of the code. It's been very hard to push some of our teams to take full responsibility for their areas of the code.

    18. Re:Alternate Link by david_thornley · · Score: 1

      As long as I'm good technically, I've got a job, and can stay technical. This is only a problem for people who want to go into management, which I definitely do not want to do, so it's only a problem for some people.

      However, would you really want to select managers from those who don't do their best for the company?

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    19. Re:Alternate Link by fractoid · · Score: 2

      What is this "technical track" you speak of? The last company I worked for (I'm currently working on a startup) had a single tier of engineers, a couple of "tech lead" / "senior engineer" roles (only available if you outlasted the incumbent), and everyone above that level (and there were 3+ tiers of them) was a nontechnical manager. Which is part of why I no longer work there but that's another story.

      --
      Rampant carbon sequestration destroyed the Dinosaurs' tropical paradise. I'm here to help repair the damage.
    20. Re: Alternate Link by Anonymous Coward · · Score: 0

      Nah, that's still not agile enough ... wait ... entering my kick-ass minute ...

      Okay, done. Added a kick-ass comment to some code.

    21. Re:Alternate Link by MoogMan · · Score: 1

      That's fine, just be aware that Indispensable == Unpromotable.

    22. Re: Alternate Link by asdfj · · Score: 1

      Just make sure you're not setting the bar too high by implementing it on your non-kickass days. The expectation-creep struggle is real.

  2. Beer by MarcNicholas · · Score: 4, Insightful

    Beer makes everything better ;)

    1. Re:Beer by Anonymous Coward · · Score: 0

      Beer and lots of offshore help! :)

    2. Re:Beer by rmdingler · · Score: 2
      While certainly, there exists the mythical Mallbeer peak,

      it is also relevant that drunk people believe they perform better on driving tests than they actually do.

      While sexy during the courtship ritual, blind confidence is something of a fickle mistress in many other applications.

      --
      Happiness in intelligent people is the rarest thing I know.

      Ernest Hemingway

    3. Re:Beer by Anonymous Coward · · Score: 0

      Never been drunk, but decided to work this long weekend (Australia Day). My mate had left his canteen of Voldka in my car, so mixed it with 2 cans of red bull and some soda water. Made the day pretty fun, stumbled around when I tried to go have a piss, watched a few videos but got some good work done too!

    4. Re:Beer by angel'o'sphere · · Score: 1

      I second that!
      And: two beers are btter than one!

      At least when you live in a country that actually has beer :)

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    5. Re:Beer by asdfj · · Score: 1

      Are you that little kid from that silicon valley show? How are you working age and never been drunk?

  3. It depends by Tablizer · · Score: 5, Insightful

    The best "lone wolf" developers probably use something like Lisp and a high amount of math-like abstraction to crank out vast amounts of features in a short time.

    However, a good team programmer knows how OTHER typical programmers think and read code, and writes code that is easy for them to navigate, digest, and change. Team programming is more like authoring a good technical manual, not clever gee-whiz tricks.

    1. Re:It depends by Anonymous Coward · · Score: 0

      LISP???

      People actually solve real-world problems, outside of academia, using LISP?

      This is news to me.

    2. Re:It depends by AuMatar · · Score: 1

      No, they don't. But a lot of academics like to think they do.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    3. Re:It depends by Tablizer · · Score: 1

      Paul Graham partially credits Lisp for making him rich via his store-site start-up, despite having viable competitors. The company that bought him out eventually converted it to a more conventional language stack for day-to-day maintenance.

    4. Re:It depends by phantomfive · · Score: 2

      People actually solve real-world problems, outside of academia, using LISP?

      Here's some.

      --
      "First they came for the slanderers and i said nothing."
    5. Re:It depends by epyT-R · · Score: 2

      If today's software is used as an example, it seems like most team programmers are chosen for their willingness not to to rock the boat (or management ego) first and programming skills last.

    6. Re:It depends by K.+S.+Kyosuke · · Score: 1

      That's ambiguous. Do a lot of academics like to think that they are solving real-world problems in Lisp, or do a lot of academics like to think that outside of academia, people solve real-world problems using Lisp?

      --
      Ezekiel 23:20
    7. Re:It depends by K.+S.+Kyosuke · · Score: 1

      Orbitz...

      --
      Ezekiel 23:20
    8. Re:It depends by Bengie · · Score: 1

      and writes code that is easy for them to navigate, digest, and change

      Unless you're working on a complex problem that other programmers can't understand in the first place, and the most minute detail is important. Then you find yourself trying to explain to the other programmers that by not doing something, they're now using an extra cacheline and causing a 10% hit in performance on their quad core and a 35% performance hit on a dual socket server.

    9. Re:It depends by Anonymous Coward · · Score: 1

      Welcome to the financial, science, and shipping industries. And many others. Sorry, but LISP has a pretty big install base, especially on back-end, AI, and processing systems. Just because it's not used very much for useless-startup-of-the-month websites doesn't mean no one uses it.

      There's also Clojure if that counts as a LISP-like/inspired and it's getting quite a lot of use, even in the web now. Your ignorance is news to me.

      Additionally, I feel compelled to reply to the earlier parent that trying to write code that others just "understand" is ridiculous. There's a difference between a clear solution without anything crazy but happens to be in LISP, Erlang, whatever vs. Java Enterprise 5000 reflection-based AOP container reflection trick to do something that could be done another way faster and clearer. Same goes for using more advanced programming techniques that are well accepted. I find that people who say things like either are too complicated tend to be not as good programmers. A level of arrogance seems to accompany them and it is if they feel threatened by something like a few clean lines of LISP because they don't know LISP. If you can't at least read code in a language you don't necessarily use everyday and follow along or figure it out in a day, you don't belong in this career.

      I once worked with a guy who always said, "It's too complicated" about so many solutions. What he really meant was, "I don't know know." I had similar people come in for interviews and tell me they would write their code simpler for other team members. What team members are you hiring that can't read the code? I get that in some cases someone might not be able to write something very complicated themselves, but they should at least be able to read through it if the code itself is good (difference between complex code that is there for a reason and clear vs. complex code that is just bad). Even the most junior programmers should be able to understand or ask questions. People like to complain about other people's code and often have a point, but the too complicated bit is often an excuse for covering up their own inadequacies.

    10. Re:It depends by Anonymous Coward · · Score: 0

      Yes.

    11. Re:It depends by AuMatar · · Score: 1

      Both. But in this case I meant the second one. In reality Lisp is dead as a doornail, and the rest of the functional languages with it.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    12. Re:It depends by AuMatar · · Score: 1

      Yeah- now in reality that doesn't happen. The whole lone programmer thing is almost completely a myth- pretty much all non-trivial programs are worked on by a team. At the absolute best you'll get someone who comes up with a new algorithm to do something by himself, but even then it will be one part of a larger whole that will need to be worked on by the full team.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    13. Re:It depends by Anonymous Coward · · Score: 0

      That is utter bollocks.

      Many applications were designed and developed by one person or a small number of people.

    14. Re:It depends by znrt · · Score: 1

      emacs or autocad are news to you?

    15. Re:It depends by Anonymous Coward · · Score: 0

      Welcome to the real world where most people are inadequate.

    16. Re:It depends by Bengie · · Score: 1

      It doesn't happen often because most programmers are in the same boat of not understanding. I'm the goto guy for performance related issues and I find myself redesigning and re-writing huge amounts of other people's code on my own to gain magnitudes of performance, but good luck explaining garbage collectors, query optimizer, false sharing, data locality, and a slew of other issues to someone. They may grasp the concept, but they cannot predict how their code decisions will affect many of these issues.

      If you're writing C/C++, you may have a decent idea of what is going on, but we need to use stuff like SQL or .Net, and I've done a lot of reading in general theory and some implementation of how these managed languages interact with system resources and what they're actually doing. They're not just a blackbox to me. To me the end result isn't good enough, it's knowing how the end result was gotten. Endless curiously drives me.

      The way I describe it to others is when I program, I first think of what the basic steps to accomplish a problem as if I was coding in ASM, then I think of what is the closest way I could get that ASM with whatever high level language I am working in.

    17. Re:It depends by luis_a_espinal · · Score: 1

      If you can't at least read code in a language you don't necessarily use everyday and follow along or figure it out in a day, you don't belong in this career.

      Best comment I've seen in a long time. Kudos to you sir.

    18. Re:It depends by K.+S.+Kyosuke · · Score: 1

      It's fortunate for us, then, that Common Lisp isn't a functional language.

      --
      Ezekiel 23:20
    19. Re:It depends by K.+S.+Kyosuke · · Score: 1

      I'd give a slight exception for Haskell code, though. That might take a week to some people.

      --
      Ezekiel 23:20
    20. Re:It depends by david_thornley · · Score: 1

      You haven't been keeping up. Lots of important software is in Lisp (the preferred capitalization). It's surprisingly flexible, and I've found I can change approaches quickly and try things out without putting too much work into them. Once the program is working, there are ways to make it fast. It's sort of opposite of C: in C, your program is fast with little problem, but correctness is much harder, while in Lisp, correctness is easier to get to and speed can be tacked on at the end. (I'm assuming reasonable algorithms here; no amount of wizardry in either language is going to make a large bubble sort run fast.)

      If I know what I'm trying to do, I find C++ to be very useful (other people have other favorite similar languages). If I don't know what I'm doing, I've found nothing better than Common Lisp.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    21. Re:It depends by GuB-42 · · Score: 1

      However, a good team programmer knows how OTHER typical programmers think and read code, and writes code that is easy for them to navigate, digest, and change. Team programming is more like authoring a good technical manual, not clever gee-whiz tricks.

      Screw typical programmers. Expert programmers should write code that is easy for experts to navigate, digest and change.

    22. Re:It depends by jdschulteis · · Score: 1

      I'd give a slight exception for Haskell code, though. That might take a week to some people.

      %$#@! monads, how do they work?

    23. Re:It depends by Tablizer · · Score: 1

      That reminds me of this spoof: http://www.c2.com/cgi/wiki?Ayn...

    24. Re:It depends by Anonymous Coward · · Score: 1

      It's not about being *able* to read code. It's being able to *efficiently* read code. My time is too valuable to waste untangling someone's "clever" solution. I could certainly figure it out -- no code I've ever seen is even a match for the math I studied in college -- but it's still a waste of time. When you write code, you most certainly should be writing it to be *read*.

    25. Re:It depends by duck_rifted · · Score: 1

      Can "CS666" be distilled down to that effort to program with consideration? That's what I call it. "Programming with consideration." It's an effort to be polite to the next programmer to use your code by ensuring that they can understand it and that there won't be any nasty surprised.

      This is where I am in my learning process. After tinkering with C++, variations of Basic (for fun only), Python, and Java for a while, I chose C++. I spent two years practicing with the features of the language itself. Now, I've gone back to the very first thing I ever wrote as an object, and I'm breaking it up into a considerate API. The API design process is a totally different kind of challenge. I'm thoroughly enjoying it, and I'm amazed at the elegant opportunities it provides to enhance functionality.

      If we can reach a point where that's what the politics of development ultimately boil down to, then that would make me so happy. A developer's worth would then be determined by what they can develop. That other side of politics -- the social, brown-nosing, ego-boasting, arrogant, asinine popularity contest that people often engage in -- seems to undermine the value of developers. The way that I see it, if somebody has to go around puffing up their chest over their programming skills, then they're probably terrible developers.

      Is there anywhere in the world of development a niche where a developer's code speaks for the developer's skills? Is this the way it actually is in the software development specific professional world? I've only seen the interdisciplinary side of that world, which may be necessarily more polite.

      This is a very worthy topic if anybody wants to crank out an article to draw some hits. If consideration in programming is not the pinnacle of software development politics, then should it be, in a rose-colored glasses, idealized world? If not, then why not?

    26. Re:It depends by angel'o'sphere · · Score: 1

      Just becuase LISP has lambdas it is not a functional language ...

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    27. Re:It depends by angel'o'sphere · · Score: 1

      And APL or the more modern derivates of it ... impossible to read. No joke. Either you know the language or you are lost. It is easier to read a random assembly language if you only have a raw idea how assembly works.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    28. Re:It depends by K.+S.+Kyosuke · · Score: 1

      I'm not really sure that APL is all that problematic. I've always thought of it as being conceptually quite simple. Just the notation was weird, that's all.

      --
      Ezekiel 23:20
    29. Re:It depends by angel'o'sphere · · Score: 1

      Yes, the notation is .... strange.
      That is what I mean. If you don't know it you can not read it.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
  4. Levels by phantomfive · · Score: 4, Interesting

    First level is to be able to get the computer to do what you want. If you can do that, you have a career as a programmer.

    Most people don't make it that far, so it's something. The next level is whether you can write readable code. A lot of programmers never learn to write readable code, but a good number of them do.

    The next step is writing flexible software. Some programmers stuff everything into design patterns and think they made it flexible, but they're wrong. Other programmers try to make everything generic thinking it's flexible, but they're wrong (also, their code is probably hard to read). But writing code where small changes take little effort, and bigger changes take more effort......that is a rare skill indeed.

    There are other ways of looking at it, but that's one way.

    --
    "First they came for the slanderers and i said nothing."
    1. Re:Levels by Anrego · · Score: 4, Interesting

      To be honest, I think a "team play" level is in there as well.

      Working on your own software pet project, working on an open source project with other developers, and working in a corporate software environment are very different experiences. The rock-star programmer cliche still exists, but I think your average run of the mill programmer's success is more determined by how well he plays with others and balances his relationship with management and other forces of evil.

      Also throw in a requirements level. A lot of people struggle with this early (and sometimes late) in their careers. It sounds simple, but figuring out what the customer wants (what they _actually_ want), and what you've agreed to provide, and what the program _actually_ needs to do (all three are often exclusive concepts) is a big deal. Sometimes the customer doesn't know what they want (but won't be happy until they get it). Sometimes the customer thinks they want the wrong thing, and won't be happy if you deliver it to them. Requirements analysis is a specialization all it's own, but speaking the language is a huge asset if you go into "big software" (aerospace, medical, defence, etc).

    2. Re:Levels by rwa2 · · Score: 4, Interesting

      Yeah, there's probably a matrix of skills and abilities, depending on how much collaboration you need to do with customers / suppliers / other developers.

      Great Coder: can make a computer do stuff. In code. No one else really cares how they do their thing. They just take a defined process and codify it to automate it or whatever.

      Great Programmer: can write programs, presumably that other people have to use. Hopefully you still have this programmer around if you need to fix their program.

      Great Software Developer: Now we're getting somewhere... they probably work together with other programmers as a team and start worrying about more of the stuff they learned in CS classes, like code reusability, refactoring, complexity, maybe some analysis of algorithms and pure math logic.

      Great Software Engineer: Maybe less of the pure math and algorithms on how to do tricky things in code, but more of the practical stuff like defining code standards, test harnesses, and social aspects of code maintenance, like the discipline of setting up and maintaining the process through peer reviews, continuous integration, etc.

      Great Software Architect: Solves problems before they occur by drawing pictures. But still gets blamed for all of the new problems anyway.

      A lot of greatness involves managing complexity and making things as simple as possible for other people to understand and maintain. But no simpler.

    3. Re:Levels by digitalPhant0m · · Score: 1

      First level is to be able to get the computer to do what you want. If you can do that, you have a career as a programmer. .....
      The next step is writing flexible software.

      I would beg to differ on step two.

      Step two would be understanding *why* the computer did what you wanted/
      Most developers I have worked with do not understand how a computer actually works. It's a magical black box to them.

    4. Re:Levels by Anonymous Coward · · Score: 0

      I would add one more thing: When somebody wants a software solution to a certain problem being able to recognize and clearly communicate the thing are describing is only a symptom of one or more other problems they might not be aware of, and those are the issues that should be targeted.

    5. Re:Levels by phantomfive · · Score: 4, Insightful

      I think you need to be a team player in order to write readable code. By definition, writing readable code means you are thinking about how other people will understand it.

      --
      "First they came for the slanderers and i said nothing."
    6. Re:Levels by Anonymous Coward · · Score: 1

      Simple and straightforward code is derided by some as not being "clean," and hence being vulnerable to a class of common bugs which writing "clean" code prevents by design.

      But, when writing clean code:

      1) takes 4x longer
      2) results in the production of 4x more code and 4x more layers of abstraction
      3) is 4x harder for new people on the team to read and understand
      4) still has bugs, and usually more bugs because more code always means more bugs
      5) only performs as good or worse

      Then I argue that it really isn't so clean after all.

    7. Re:Levels by phantomfive · · Score: 2

      Have you been reading the "Clean Code" book? lol (or rather, have your coworkers been reading it and berating you because of it).

      I like to divide code into two categories, code that 'does stuff' and 'glue code.' The goal is to minimize the glue code as much as possible, while still maintaining flexibility.

      If you follow the rule of the Linux kernel development, "Each function should do one thing and do it well," then your code will be a lot closer to flexible almost immediately, even without building a framework around it.

      --
      "First they came for the slanderers and i said nothing."
    8. Re:Levels by pak9rabid · · Score: 3, Insightful

      Or you yourself having to read it years later when you have zero memory of writing it ;)

    9. Re:Levels by Anonymous Coward · · Score: 0

      You got it all wrong. A software architect that doesn't use A LOT of maths is no architect but a pretender. There are lots of those. You cannot build anything of significance without a SOLID base.

      A software engineer, HAS TO know also a lot of maths and algorithms, and also a little bit of peopleware. Contrary to that, the real world is littered with morons that know a few people tricks but couldn't tell a logarithm from an algorithm. They have FAILURE written on their foreheads, but know how to make it look like it was other's fault.

      A software developer... programmer... coder... what's the difference? It's just a social code monkey. The guy using Google and cut-and-pasting code from forums. This is the one always complaining that the boss doesn't know how to motivate. As if work was an amusement park or something. Well, OK, many are not even social.

    10. Re:Levels by Anonymous Coward · · Score: 0

      "Each function should do one thing and do it well,"
      Easier said than done, as it depends on what you mean with "one thing". What if your function needs to call two other functions? It's then actually doing three things (the two calls and whatever it does with the results of them)...

    11. Re:Levels by rwa2 · · Score: 1

      Yeah, you probably have it right.

      My description of a Software Architect was mostly tongue-in-cheek... at most of the places I've worked they were the ones that determined "high-level" things, like what expensive commercial middleware everyone was going to have to integrate with and spend all of their time coding around its deficiencies. Architects rarely touched actual code. Maybe they had a PHd or something but more often not, but they did get to make decisions that involved the movement of large amounts of capital budget (which of course is completely separate from the labor budgets required to cope with them).

      My description of a Software Engineer might have been closer to what's nebulously referred to as a Systems Engineer (which is more of a glorified term for SysAdmin these days). Yours might be closer to what companies refer to as a Software Development Engineer, which is the job code most big software companies hire under nowadays.

      But yeah, there's really no difference between any of these categories other than HR labels. And pay grades. And social structure. And job satisfaction garnered from different skillsets and abilities.

    12. Re:Levels by L'Ange+Oliver · · Score: 1

      Hehe, Happens to me all the time :P

    13. Re:Levels by Anonymous Coward · · Score: 0

      This, indeed.
      The you of then is not the same person as the you of now. Even if you're working alone, you're in a team with all of your past and future selves.

    14. Re:Levels by Anonymous Coward · · Score: 0

      In MY town, "Software architect" is the title they give to the (mediocre) on-shore programmers to distinguish them from the offshore programmers.

      Excuse me. I'm going to go sit in the corner and cry now.

    15. Re:Levels by qwijibo · · Score: 1

      The "do one thing well" philosophy is about purpose, not implementation.

      For example, the grep family of tools search for patterns in files or input data streams. There's egrep for regular expression matching, zgrep for searching through compressed data (decompressing before searching, of course), etc. There's oodles of options to make all types of searching easier, but those are all aimed at the central purpose.

      If you need to search for all of the numbers in a file and add them together, you could use grep for searching, but need another tool to do the addition.

    16. Re:Levels by Anonymous Coward · · Score: 0

      The grand parent's comment was about coding, and code quality, so the reply was reflecting that.
      "Purpose" is anyways fuzzy too. "The function does everything" (which is what void main() does...) is a purpose but that doesn't necessarily give cause to having code to "be a lot closer to flexible almost immediately".

    17. Re:Levels by david_thornley · · Score: 1

      Ideally, you should be able to give each class and function a descriptive name. That doesn't mean it can't call all sorts of other functions; "DIsplayWidget()" (or "Widget::Display()") is likely to do a lot of work that's farmed out to other functions, but it does mean the function or method has a single clear purpose. If you find yourself putting "And" into the name, you probably should refactor it into two separate functions.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    18. Re:Levels by DaChesserCat · · Score: 2

      Agreed. The most enlightening experience I ever had as a developer was to go back and maintain something I hadn't seen or touched, and no one else had touched, in three years.

      Who wrote this crap? Oh, I did. Was I ever that lame? Seriously? WTF does this code do? A one-line comment would've helped.

      Eagleson's Law definitely applies.

      Especially as you age. I'm pushing 50. I've become the king of docs, both in the code and on the wiki. Because I've learned that there's no guarantee that I'll remember how to do that obscure thing six months from now when I need it again. And if someone else benefits from my docs, that's just icing on the cake.

      --
      ... by the Dew of Mountains the thoughts acquire speed, the hands acquire shakes, the shakes become a warning
    19. Re:Levels by phantomfive · · Score: 1

      What if your function needs to call two other functions? It's then actually doing three things (the two calls and whatever it does with the results of them)...

      So, this is a well defined principle of software engineering. If you don't understand it, then you need to figure out what's wrong with your brain because most people do understand it, the problem is you.

      --
      "First they came for the slanderers and i said nothing."
  5. English as the first language a MUST! by Anonymous Coward · · Score: 0

    American first. British second. Canadian third. South African fourth, but only because it sounds cool. Austrilian and the NZ not wanted here! Hong Kong as a last choice - every other english-speaker dead or dying.

    1. Re:English as the first language a MUST! by dskoll · · Score: 1

      Wait... you can tell the difference between American and Canadian?

    2. Re:English as the first language a MUST! by epyT-R · · Score: 1

      eh, apparently you can't, mate.

    3. Re:English as the first language a MUST! by rmdingler · · Score: 1

      Zed and Zee, and in Canadia, they leave the you in labour, honour, and valour where it belongs. c here

      --
      Happiness in intelligent people is the rarest thing I know.

      Ernest Hemingway

    4. Re:English as the first language a MUST! by AHuxley · · Score: 1

      The AC seems to list them by some security clearance that then fits in with skills needed on a past US mil or gov computer project?
      Groups within some nations can also bring in a lot of shared experiences about college, how they where taught and past work.
      That can shape a team or really allow group think to set in, cult like with a leader.

      --
      Domestic spying is now "Benign Information Gathering"
  6. Simple by Anonymous Coward · · Score: 1

    Great developers use Pascal. ;-)

  7. ~make~ as opposed to *born* developers by turkeydance · · Score: 1

    before computers, they might have been an engineer, as in railroad, really. so, how can humans be "made" into a developer? same as just about anything else. they make themselves.

    1. Re:~make~ as opposed to *born* developers by rmdingler · · Score: 1
      Yes. The best at every single vocation, hobby, and pursuit start out with the physical gifts that make greatness in their field attainable.

      And the truly exceptional separate themselves from there: they always have a little more "try" in them than the others.

      Entitlement and freedom from obstacles is magnus infitialis.

      --
      Happiness in intelligent people is the rarest thing I know.

      Ernest Hemingway

  8. Knowing you will make mistakes. by Bookwyrm · · Score: 3, Insightful

    It's not that great software developers never make mistakes, it's just that by knowing they can and will happen to anyone, they can try to catch them early.

    It's the people who think the code they write is flawless that tend to have the most problematic code.

    1. Re:Knowing you will make mistakes. by Anonymous Coward · · Score: 1

      can't agree more, so tired of developers who think there code doesn't and never will have bugs. Admit the bug could be your fault, if your default reaction is it isn't my fault, you suck as a programmer.

    2. Re:Knowing you will make mistakes. by Anonymous Coward · · Score: 0

      nonsense. great software developers never make mistakes (that anyone knows about)
      or can be blamed on someone else
      or hidden
      Or by convincing the PHB's that this legacy crap has to go and needs a total rewrite.
      mistakes? no sir. Sales? Engineering? HR? Sure! those guys are hopeless. See, if you see a mistake in OUR programming, you can just assume we meant to do it on purpose. What are you? NEW?

    3. Re:Knowing you will make mistakes. by Anonymous Coward · · Score: 0

      You're assuming that those are really bugs and not features.

    4. Re:Knowing you will make mistakes. by Anonymous Coward · · Score: 0

      if your default reaction is it isn't my fault, you suck as a programmer

      It depends on who is making the claim. If it's one of the known-moronic end users that has reported "bugs" in my software because their Facebook login got locked out (and it should be noted that my software does not integrate with Facebook), then my default reaction is justifiably "not my fault, probably user error". There are people who will blame your software for hangnails and gout. I can't code gout, thus, not my problem.

  9. Look at yourself as a builder by x181 · · Score: 1

    You are a builder first and a researcher second. It is the art of being a construction worker, architect and civil engineer all at once - you need to know when enough is enough.

  10. mentoring by Anonymous Coward · · Score: 0

    A really good developer is someone who can show 5 more people how to do the same great things.

    1. Re:mentoring by Bengie · · Score: 1

      You can teach a monkey how to do what you do, but not think how you think. Good programmers are a combination of creative and obsessive, two uncommon traits.

      Many programmers have an issue of using the wrong tool because they don't understand the minor differences between two tools. All they know is doubles and ints are both numbers, so they don't care which ever they use, and their decision may not make a huge difference 80% of the time.

  11. Great programmers are made not born by byteherder · · Score: 4, Insightful

    To be a great programmer (or even just a good one), you need to never stop learning. Always be learning something. Many times in my life I have learned something on my own, only to be able to apply is a totally different situation later in life.

    Great programmer are insanely curious. They want to know the how things work, why one solution is better than another, always improving. That is the key, always be improving your craft, and your knowledge.

  12. Create someting others are proud to improve by Peter+(Professor)+Fo · · Score: 1

    Suppose I make a 2x2 Rubik Cube. You and 100 others say we must extend this to 3x3... ...And somebody does. Hurrah!

    Concepts that catch the imagination come first. Then comes the sense to build a foundation or the tools or the clear ethos or the luck to know a few bods who will play as a team following your clear lead. (They may be ancillary skills to big chief um he programmer, but everyone sees the purpose of the device.)

  13. A great developer knows how shitty he is at coding by Anonymous Coward · · Score: 3, Insightful

    You WILL make mistakes and introduce bugs when coding. A great developer knows this.

    Ask anyone you think is a great developer, "What do you do to help prevent or detect the mistakes you make?"

  14. Crystal ball ? by alexhs · · Score: 2

    can tell fads from technologies that actually endure

    And are therefore defined in hindsight.

    Critical thinking, not buying anything some software vendor is willing to sell you, is one thing, and betting on the right horse every time is quite another.
    At some point, you can't miss the latter by being conservative and only adopting "new" technologies when they're already mature (now, if you had some sort of almanac...). Also to note, "better" does not always mean "successful".

    --
    I have discovered a truly marvelous proof of killer sig, which this margin is too narrow to contain.
    1. Re:Crystal ball ? by RabidReindeer · · Score: 1

      can tell fads from technologies that actually endure

      And are therefore defined in hindsight.

      Critical thinking, not buying anything some software vendor is willing to sell you, is one thing, and betting on the right horse every time is quite another.
      At some point, you can't miss the latter by being conservative and only adopting "new" technologies when they're already mature (now, if you had some sort of almanac...). Also to note, "better" does not always mean "successful".

      Oh, I dunno. I've found that if it's too good to be true, it's probably going to be a fad.

      If it promises to make developers obsolete, it won't.

      If you can get a flashy application working in under 15 minutes, everyone will adopt in and then discover that it takes just as long or longer to actually produce industrial-grade apps as the "old-fashioned" stuff does with the added excitement of discovering new security vulnerabilites.

      On the other hand, if something comes along and I go "WTF is this? What does it do? What's it even good for? then I may have just discovered something of lasting value.

    2. Re:Crystal ball ? by jellomizer · · Score: 1

      There are the obvious fads. But there are plenty of times where a Fad can endure vs just go away, sometimes it could just be something disruptive that changes its path.

      We had the rails fad. Ruby on Rails got rather popular in the early 10's then it just kinda faded away. Technically it was fine, however mobile apps development took over which made Web Applications development seem less popular, so the existing Web Apps were just maintained with PHP, JSP or ASP.NET. The need to try to make an ultra rich interface for web applications somewhat paused, when they realize they just need to focus on the PC, and no longer put effort in Mobile HTML with the new input methods.

      OS/2 Vs. Windows 95. There was a lot of buzz around OS/2 Warp replacing Windows 3.1... However IBM really bombed its marketing while Microsoft did a stellar job.

      During our careers I am sure the best of us, had jumped onto the wrong fad, or made a bad choice. Then the next time you didn't change your criteria and you made a good choice.

      However the real question should be. As the parent pointed out What does it do, and will it actually benefit me/my organization.

      --
      If something is so important that you feel the need to post it on the internet... It probably isn't that important.
  15. Simple by Anonymous Coward · · Score: 0

    The ability and desire to distill/abstract/acquire and then apply knowledge. There's nothing more to it.

  16. I Dunno. by Anonymous Coward · · Score: 0

    I suck at this programming stuff.

    p

  17. The Answer by Anonymous Coward · · Score: 0

    Anyone willing to work under H1B conditions and for H1B pay

  18. Hubris by Anonymous Coward · · Score: 0

    Copious amounts of hubris.
    (see Lennart Poettering)

    1. Re:Hubris by Anonymous Coward · · Score: 0

      And don't forget Larry Wall. Thankfully, Perl seems to be turning into the next Cobol: it may never die completely, but at least it seems to be a cancer that's in remission.

  19. The most important prerequisite by Taco+Cowboy · · Score: 3, Insightful

    Whether or not it is called "Software Development" or "Software Engineering" or "Coding" or whatever the newest trendy iteration, they all boil down to identifying the need and/or problem and then SOLVE IT

    From the primitive but extra-ordinarily crucial computer systems that ran the Apollo space program to Lotus 1-2-3 to Linux, all they did was the same --- they identified what is needed and then providing solution to get the problems licked

    --
    Muchas Gracias, Señor Edward Snowden !
    1. Re:The most important prerequisite by gbjbaanb · · Score: 1

      I think you highlighted the wrong part.

      "Identify the need and/or problem" is the crucial part and is what differentiates the great programmer who fixes that need, and the adequate programmer who is so focused on the solution he can forget what it is he's really supposed to be doing.

      Or to put it another way, the great are those who listen before talking, the rest just prefer to talk.

    2. Re:The most important prerequisite by david_thornley · · Score: 1

      In general, you won't find out what the real need is just by listening. Users tend to come up with solution frameworks that may be good or bad, and present them. It's usually necessary to probe further to figure out what the problem actually is. So, if you're really good, and you listen carefully, you will often brilliantly implement something that isn't what the users want.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    3. Re:The most important prerequisite by gbjbaanb · · Score: 1

      the listening part was just a figure of speech, as I'm sure you know if you took the time to really read what I wrote and understand it in overall context :-)

  20. This doesn't really answer the question by Anonymous Coward · · Score: 0

    But, in my experience most people with prestigious degrees or degrees beyond a bachelors degree are the shittiest programmers. They know all sorts of terminology and can recite all sorts of definitions and methodologies but when it comes to hands on coding they literally suck ass.

    1. Re:This doesn't really answer the question by Anonymous Coward · · Score: 0

      Literally? Writing like this has recently convinced the dictionary folks to redefine "literally" from "actually" or "in fact" to "figuratively". So we literally don't have a word for "literally" any more. Go figure.

  21. Be a Good Listener by Khomar · · Score: 4, Insightful

    I think one of the most valuable abilities for a good programmer is to be a good listener. A big part of that is also being able to ask good questions. You need to be able to fully understand the problem to be able to develop the right solution -- remember, the solution that customer actually needs is not always the one they think they want. Also, being able to listen also means you will be better able to learn new skills.

    --

    I believe in de-evolution. God made the world perfect, man fell, and its been going downhill ever since!

    1. Re:Be a Good Listener by Anonymous Coward · · Score: 0

      So who is a great developer that you think is a good listener?

    2. Re:Be a Good Listener by Anonymous Coward · · Score: 0

      Just listening alone isn't enough if you aren't able to articulate why things are/will be done a certain way. Most people don't have a problem with working within some restriction that makes things easier later as long as they know why they have to do it, otherwise it just feels arbitrary and they tend to assume your not really listening.

    3. Re:Be a Good Listener by Anonymous Coward · · Score: 0

      This. Being able to see both sides of disputes, and end up with the best of both worlds whenever possible.

  22. My opinion by dskoll · · Score: 4, Insightful

    I started a software company back in 1999; we're still around and up to 10 employees, so I have had some moderate success in the software business.

    I think the LifeHacker link makes a lot of good points. I especially agree with limiting overtime. I *never* ask my developers to work overtime. Just never. Because I don't set release dates. When someone asks when the next release will be, I say "when it's ready" and I mean it. It's far more important to get it right than to get it out "on time", whatever that is.

    I would add that to be a great software developer, you need a lot of discipline. You need to write your unit and regression tests even if you don't feel like it and even if you'd rather be moving on to the next cool feature. You need to write your documentation clearly and comprehensively. You need to have your code reviewed; even the best programmer can benefit from suggestions that improve code clarity.

    You need to listen to your customers. You can write the greatest software in the world, but if it doesn't do what your clients want, that's not much use. But you also need to have enough judgement to know when your customers are asking for something ridiculous and you need to have the communication skills necessary to explain to them why what they think they want isn't what they really want.

    You also have to be passionate. If you went into computer science because you thought you'd get a secure job, but never particularly liked computers and didn't do programming on your own time, forget it... you won't be a great software developer.

    1. Re:My opinion by Kielistic · · Score: 1

      Rational or not, people putting more passion into it are going to out-perform you. That's also some of the worst advice I've ever heard. "Don't enjoy your job; that's not rational."

    2. Re:My opinion by Anonymous Coward · · Score: 0

      As an owner of a small shop, I agree completely.

    3. Re:My opinion by Anonymous Coward · · Score: 0

      people putting more passion into it are going to out-perform you.

      They don't. They burn out because they never cultivated a sustainable perspective.

    4. Re:My opinion by Anonymous Coward · · Score: 0

      Rational or not, people putting more passion into it are going to out-perform you. That's also some of the worst advice I've ever heard. "Don't enjoy your job; that's not rational."

      It doesn't matter how many pyramids you build as a developer, if it's not your pyramid then it's simply not rational to be passionate about it. Save your passions for something you've got a genuine stake in.

      My interpretation was: if you don't own it there is no "passion." If you have little to no stake in what happens to the code
      after it is "released" what do you care it is bug-ridden and half-complete?

      You may say "at least, you will be doing v2.0" but this is not true either: many times I have been asked to hack on maintenance code or even write new things...with the official plan "it will be rewritten from scratch in a few years, so don't worry too much" ... there is zero passion when everything you build you know is just going to disappear, you know the company is just rushing to market and will throw it away...the only possible enjoyment there is grab all the $$$ you can and find something you have a stake in (or start your own company, or find somewhere that contributes to open source instead of just leeching off of it (legally that is fine, but again, kills any passion) )

    5. Re:My opinion by dskoll · · Score: 1

      You completely missed my point. You have to be passionate about your craft. I didn't say you have to be passionate about a particular employer.

    6. Re:My opinion by Anonymous Coward · · Score: 0

      Aha, you work for Facebook, don't you? Nailed it.

    7. Re:My opinion by david_thornley · · Score: 1

      You're in a good position with regard to deadlines and release dates. Most developers don't work in such an environment. (I suspect most of them wish they could.)

      I think "passionate" is ambiguous here. I have to identify with what I'm doing, feel an ownership of my part of the project, or my morale goes into the toilet and my productivity suffers. I'm also more or less dedicated to learning more about programming and becoming better, and I think that in particular is necessary to be a great developer.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
  23. You'd need a lot more beer ! by Taco+Cowboy · · Score: 2

    Beer and lots of offshore help! :)

    The more you rely on offshore help to solve the problems on hand the more beer you gonna find yourself gulping down

    Trust me on that !

    --
    Muchas Gracias, Señor Edward Snowden !
    1. Re: You'd need a lot more beer ! by Anonymous Coward · · Score: 0

      Yeah takes one to know one, huh Taco Cowboy?

  24. There are at least 2 types by oneiros27 · · Score: 1

    You have the 'knows how to work efficiently to get the project done as quickly as possible'.

    And then you have the 'knows that they'll have to maintain it, and will work to make sure to minimize shortcuts, or document every od trick they used, so that two years later they'll be able to modify it when some new requirement comes along'.

    I actually enjoyed doing the first type of programming. These days I see paralized and might be over-designing things because of times that I've gotten stung by not being type #2. (both my own code and other people's)

    --
    Build it, and they will come^Hplain.
    1. Re:There are at least 2 types by Anonymous Coward · · Score: 0

      OneNote is the fucking bomb.... Write it down.

  25. Eisenhower said it by circletimessquare · · Score: 3, Interesting

    I tell this story to illustrate the truth of the statement I heard long ago in the Army: Plans are worthless, but planning is everything. There is a very great distinction because when you are planning for an emergency you must start with this one thing: the very definition of "emergency" is that it is unexpected, therefore it is not going to happen the way you are planning.

    there's nothing like a real life emergency in programming but business culture is "get this done yesterday." no one can do that. but some programmers are very fragile and can only function according to one set of requirements/ work environment/ speed, and if you mess with that they get angry/ stressed/ tune out/ burnt out. while the "rock stars" can react to sudden and dramatic changes of requirement and need and crank out the changes relatively adroitly (not necessarily quickly). a sort of suppleness of mind and eerie lack of stress that's more about personality than training. and i say personality, and not training, because their code is a reflection of their personality: you can throw a curve ball at it from any direction and it can adapt without falling to pieces when "little" things (it's never little) change

    your code is a reflection of how your mind works. which is your personality. and certain chilly stress proof people can generate flexible durable code that is almost like the redundancy and flexibility of logistics in war

    --
    intellectual property law is philosophically incoherent. it is your moral duty to ignore it or sabotage it
    1. Re:Eisenhower said it by Kielistic · · Score: 1

      while the "rock stars" can react to sudden and dramatic changes of requirement and need and crank out the changes relatively adroitly (not necessarily quickly)

      All well and good until that is expected every time. The "this is going to be a problem but don't worry about it, X will fix it" mentality probably makes a lot of poor management teams lose good talent.

    2. Re:Eisenhower said it by Anonymous Coward · · Score: 0

      Sounds good.
      But in reality those are few on the ground and even fewer looking for work.

      Also, the question takes a completely different nuance when you ask yourself, "from whose point of view, the employers or the clients/employee?"

    3. Re:Eisenhower said it by RabidReindeer · · Score: 1

      Agile is intended to handle the sudden and dramatic changes of requirement. Because I can virtually guarantee that any significant project that makes its way into user hands is going to get a lot of requests for changes. Not simply because of bad/sloppy original specs but because the users, given even a partial solution will discover new things that need new solutions. Sort of a software "Heisenberg effect", if you will.

      What makes a developer great is the ability to allow for this and design for it instead of over-committing to the first set of specs that comes along.

    4. Re:Eisenhower said it by david_thornley · · Score: 1

      If a rock star can crank out changes but not necessarily quickly, the "get it done yesterday" mandate is sometimes going to be impossible, and at that point it really doesn't matter what the personality is: if the project is to be done by the arbitrarily assigned time, the rock star and the ordinary person are both going to be overstressed. The alternatives are to work normally as fast as possible, and be seen as not dedicated to the company goals, or to work lots of overtime, which quickly becomes unproductive and stressful, and when this is done regularly leads to burnout. Add to this managers who think their people aren't working hard enough because they need more threats, don't respect their people, and sometimes resort to yelling, and there's no way to avoid stress.

      I haven't met or heard of anybody who is a "rock star" by your criterion. The closest I met was a person of very resilient personality, capable of working hard and steady through great stress, and who had an average level of talent. Not a bad person to have as part of a team, but in no way a rock star.

      It is possible to develop a more resilient personality, but I haven't noticed any correlation with that and ability. I've worked with very good people who ran the range from reasonably calm under reasonable stress to prima donna.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    5. Re:Eisenhower said it by circletimessquare · · Score: 1

      I haven't met or heard of anybody who is a "rock star" by your criterion. The closest I met was a person of very resilient personality, capable of working hard and steady through great stress, and who had an average level of talent. Not a bad person to have as part of a team, but in no way a rock star.

      i have met a person with that stress proof personality, and above average talent. they exist. those are the rockstars

      --
      intellectual property law is philosophically incoherent. it is your moral duty to ignore it or sabotage it
    6. Re:Eisenhower said it by circletimessquare · · Score: 2

      well yeah, by definition a rock star is very rare

      so if you want a rockstar working for you, you better be ready to shell out big money or provide truly extraordinary perks

      you can't just expect or demand rock star status from average or even above average programmers. you can't mold people's personalities like their technical proficiency. i suppose there does exist stress mitigating strategies someone can consciously adapt. but from the rock star i met, it is a sort of chilly immunity to even the concept of stress that is quite awesome to behold

      that's why i quoted eisenhower

      because when i met such a person, i immediately thought of someone functioning under the stresses of extreme combat. i thought of this person on the eastern front in wwii. what it would take to survive *real* stress, because stress in programming, while real, taken in perspective to something like fields of combat, is a joke

      i always wondered if this person had indeed been in such an extreme stressful environment, like war. a sort of "once i've seen that, none of this shit impresses me." because indeed, nothing seemed to impress him. you could scream in his face and he would react the same as if you were casually discussing gardening. nothing phased the dude

      --
      intellectual property law is philosophically incoherent. it is your moral duty to ignore it or sabotage it
    7. Re:Eisenhower said it by Kielistic · · Score: 1

      A "developer" isn't the one that gets to choose agile. And when the company decides to do agile wrong (which seems to be fairly common) it turns out even worse.

      I specifically meant companies with bad policies. Pull a rabbit out of your hat once or twice and they tend to expect that instead of fixing broken practices.

  26. It's like porn by Anonymous Coward · · Score: 1

    It's like porn; it's difficult to describe, but you'll know it when you see it.

  27. Good Taste by cyba · · Score: 1

    People without good taste (regarding to the code) will never become great software developers.

    1. Re:Good Taste by Marginal+Coward · · Score: 1

      I agree wholeheartedly. But is good taste born or made? A few years ago, I mentored a new grad who had very good taste in coding from the beginning. It took me a lot longer to develop that. Certainly, experience helps. But I've also met highly experienced people who had poor taste in coding. Like so many things, I guess no amount of experience will make up for a complete lack of talent.

  28. Well duh! by Ol+Olsoc · · Score: 1

    Cheetos and Fritos.

    --
    The shepherds did so well protecting the flock that the sheep no longer believed that wolves existed.
  29. What it takes? A great employer by 50000BTU_barbecue · · Score: 0

    You know, the kind that doesn't fire you after the first mistake, the kind that provides guidance, training, education, and invests in its workers.

    (AAHHHHHH HAHAHAHAHAHAHAHAHHHA!!! BAAAAAAAAAAAAAAAAHH HAHAHAHAHHAHAHAAHAAA!!!!!)

    You know, an employer that's willing to take the same risk in hiring you, that you took in paying for that four-year degree?

    Oh sorry, "risk" is for *you*, *they* get the profit!

    --
    Mostly random stuff.
  30. Not Coding by Anonymous Coward · · Score: 0

    Coders are the modern day version of the secretary. A great software developer is someone that gets however many chumps that it takes to get the job done, to do it for her. If you're writing code, you're not a great developer.

    1. Re:Not Coding by david_thornley · · Score: 1

      I take it that you consider the Barbie book "I Can Be A Software Developer" or whatever the name is to be guidelines for a great software developer?

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
  31. What makes a great developer by Anonymous Coward · · Score: 0

    It's simple, you have to LOVE development. You have to love and desire the creative act...a deep desire to build something that is useful to other people, In the end, it's about service. Most important you have to have a deep desire for revenge against all those who said you were an idiot when you were 10 years old.

  32. Software Design by Codeyman · · Score: 2

    To be a great software developer, you need to write great software. Any great software requires a lot more forethought than just coding.
    Upfront design is the key to flexible and maintainable software. Peer reviewed, simplified, unoptimized design gives you a great base to start writing great code. It is akin to listening to a shakespeare play before writing one (as opposed to just winging it as you move along) .

  33. I Think by Anonymous Coward · · Score: 0

    What do you think separates the great developers from the not-so-fantastic ones?

    A crowbar?

  34. TEPES by bfwebster · · Score: 1

    Having built a long-term development team from scratch, and having screened a lot of consulting software engineers, I eventually came up with an acronym that describes what I look for: Talent, Experience, Professionalism, Education, Skill (TEPES). I wrote a post on the subject back in 2008 -- you can read it here. ..bruce..

    --
    Bruce F. Webster (brucefwebster.com)
  35. Re:Difficult to answer by beelsebob · · Score: 4, Insightful

    Hint - if you think that you're the best coder in the world, and that everyone around you is only outputting a bunch of shitty buggy crap, it's probably time for you to do a bunch of introspection.

    It's a well known phenomenon that experts will tend to play down how good they are (because they realise what they don't know), while non-experts will tend to play up how good they are. The fact that you're claiming to be god's gift to man kind, and that everyone else seems to be doing something different is a good indication that you may well be in the latter category.

    Don't get me wrong - you may actually be god's gift to man kind, and/or you may be amongst a bunch of incompetent monkeys, but that's not the likely scenario.

  36. Re:A great developer knows how shitty he is at cod by binarylarry · · Score: 1

    Codefusious say man who misread x86 page size, high on pot.

    --
    Mod me down, my New Earth Global Warmingist friends!
  37. What makes a great software developer by Anonymous Coward · · Score: 0

    1. Imagination
    2. Dedication
    3. Fascination

    Note that Education was not in there! I took a few computer courses in college (engineering school), including BASIC, Fortran, and such, but they were a waste of time. I got more from my philosophy course in formal (Boolean) logic than anything else. I started with writing an accounting package for a commercial bakery in the Silicon Valley in 1982-83 and now am a technical architect for a multi-billion $$ company. My previous position was senior systems engineer for Nokia Mobile Phones. I have no degree, yet I am a senior member of the IEEE and director (and previous chairman) of an IEEE affinity group. These are the programming languages that over my career I have used to develop commercially viable systems:

    1. dBase II and dBase III (I was a beta tester for dBase III)
    2. MS/PC BASIC, Business BASIC
    3. C
    4. C++
    5. Cobol
    6. DIBOL
    7. Java
    8. x86 assembler
    9. Javascript
    10. PHP (I wrote a cell phone emulator in that)
    11. PL/SQL
    12. Transact-SQL
    13. ADA (PL/SQL is a subset/superset of ADA)
    14. More, and more, and more... PL/M, Smalltalk, Lisp, Prolog, Pascal, Snobol, CSH, KSH, Bash, Perl, Python, ...

    These days, most of my coding is in Javascript. My preferred programming languages are C and C++.

    Final note. If you are using PHP to build web services, treat it as a formal object-oriented language. DO NOT mix PHP and HTML or Javascript! Trust me, your web sites will be more secure, run faster, and be simpler to debug.

  38. Re:A great developer knows how shitty he is at cod by beelsebob · · Score: 3, Insightful

    Yep, I've never met a really good programmer who didn't use every tool he could exploit to find his bugs. Every one of them that I ever met had a strong leaning towards strongly typed languages, because they could exploit the type checker to find their bugs. They had a strong leaning towards testing, because they could exploit it to find their bugs. They had a strong leaning towards running profiling tools for memory, leaks, performance etc because they could exploit them to show were their code was really bad.

    As far as I'm concerned - lesson 1 is to use every tool you possibly can to prop yourself up - get the computer to make you into a good programmer.

  39. It Depends by Anonymous Coward · · Score: 0

    It depends what you need the developer for.

    But first let me get this out of the way: YOU WILL NEVER BE A GOOD PERSON BECAUSE YOU ARE A GOOD SOFTWARE DEVELOPER. This is not as bad as it sounds. Since good development cannot make you a good person bad development cannot make you a bad person either. I felt it necessary to state this because there is a stupidity built into the question "what makes a great software developer?" If one is asking this to find out if he is a great developer, it's better not to go there at all.

    I think the most valuable developers today are developers that have effective testing skills. They have internalized that no matter how good they are they are never good enough to shrink the bug list unless they write tests. An organization filled with such developers is well off.

  40. Re:Difficult to answer by Anonymous Coward · · Score: 1

    We judge ourselves by our intentions while we judge others by their actions. Same goes for programming. We judge ourselves by what we believe we're capable of while we judge others by what they actually produce.

  41. From my perspective... by Anonymous Coward · · Score: 2, Funny

    ...Great programmers:

    1) Provide reliable estimates that aren't inflated.
    2) Meet aggressive deadlines, even when unplanned work was added to the project during development.
    3) Take responsibility for their bugs and get them fixed, on deadline.
    4) Don't take time off during crunch time.
    5) Are willing to help when called to troubleshoot a surprising client issue on a weekend.
    6) Are humble enough to be content with an average salary, rather than always demanding raises to be paid at the top of the industry.

    1. Re:From my perspective... by Anonymous Coward · · Score: 1

      It's unhealthy as hell and I wouldn't really call this advice, more of an anecdote, but I've become the after hours go-to guy by somehow retaining my university all-nighter powers.

      We have a small client that's in a very different timezone, and I've become the guy they talk to when they need someone on our end coordinating at 3 in the morning. You'd think that would be a shit gig, but it's given me a lot of visibility. I end up in a lot of important conversations because "I was the one who was actually there".

    2. Re:From my perspective... by Anonymous Coward · · Score: 2, Insightful

      Average salary? A Great programmer should expect great money.

      What you've described is a chump who throws away his talents and time so that other people can make the good money. Screw that.

    3. Re:From my perspective... by uncqual · · Score: 2

      He's obviously a PHB.

      --
      Why is there an "insightful" mod and why isn't it "-1"? If I wanted insight, I wouldn't be reading /.
    4. Re:From my perspective... by Anonymous Coward · · Score: 0

      I kinda agree with him, but I think it depends a lot on ones personal situation.

      If you're in an area with a good diversity of high paying jobs, or are willing to relocate, then sure... fight for the biggest paycheck you can get. If your in an area with a less encouraging job market but don't want to move, then getting a reputation for being "salary hungry" can work against you.

      Raises are about retaining people who have experience within your company. You might be able to get a better paycheck from the company you work for then a company looking to hire you because the company you work for finds more value in you. If you push your current employer to the max, and then eventually have to change jobs, you might find other employers less willing to start down the same path. In the kind of areas I'm talking about, software is usually a small industry and word gets around. A company might also decide to phase you out, because they see the writing on the wall and bringing someone new up to speed on what you currently do will be cheaper in the long run.

    5. Re:From my perspective... by Anonymous Coward · · Score: 4, Insightful

      I really hope this is sarcasm. You just described everything that causes projects to fail, take on lots of technical debt, cause burnout, and generally make people leave the industry. After working in many countries, I've also noticed that this is especially an American thing, like a badge of honor. You are a programmer, not a Marine.

    6. Re:From my perspective... by RuffMasterD · · Score: 2

      Sounds like my boss :-)

      I should add:
      7) Is obiedient, listens, and doesn't talk back.
      8) Stays technically current, but not on company time.
      9) Gives their manager credit for good results. If the manager gets promoted, they will want you right behind them, making them look good.

      --
      Human Rights, Article 12: Freedom from Interference with Privacy, Family, Home and Correspondence
    7. Re:From my perspective... by ranton · · Score: 1

      Although I think it is pretty obvious you are being sarcastic, my take on each of your points is that Great Programmers:

      1) Understand that all estimates are inherently unreliable and constantly track real progress so deadlines or promised feature sets can be realigned periodically.

      2) Understand that unplanned work will be added during development. They don't complain about it, they simply realistically assess how these changes could affect deadlines and/or other promised feature sets.

      3) Take responsibility for their bugs and get them fixed, and keep management in the loop on how this may affect deadlines.

      4) Pay attention to project deadlines when scheduling their personal lives, and notify project management well in advance when PTO may impact project deadlines.

      5) Are willing to do whatever it takes to fix problems that are seriously impacting the business, but respect themselves enough to not let work unnecessarily impact their personal lives. Complaining about random and infrequent issues that cause significant work after hours is something only low-paid grunts should do, but letting your company constantly be #1 priority in your life is something only chumps do (unless you have significant equity stake in your company).

      6) Respect the importance of their role in a company, and expect to be treated as such. Almost all truly great developers are paid at the top of the industry (in their area anyway), because part of being a great developer includes the interpersonal skills which usually help in negotiating top salaries.

      --
      -- All that is necessary for the triumph of evil is that good men do nothing. -- Edmund Burke
    8. Re:From my perspective... by ranton · · Score: 1

      This advice only applies to people who are trying to be paid more than they are worth by searching for desperate employers or simply being good at interviewing and negotiating instead of their job. If your employers are happy with your performance, they will not complain about your salary. If they do, it is time to look for a new employer because your current one doesn't know how to value key employees.

      In the kind of areas I'm talking about, software is usually a small industry and word gets around. A company might also decide to phase you out, because they see the writing on the wall and bringing someone new up to speed on what you currently do will be cheaper in the long run.

      You want word to get around, because you are an exceptional employee and any employer will be happy to have you. Having a reputation that you expect to be treated like a key employee will help ensure that only employers who will treat you right will try to recruit you.

      I personally try to cultivate a reputation that I am interested in tackling tough problems, helping set company strategy instead of just coding, and expect to be viewed as a revenue generating employee instead of a cost center. It has worked very well for me so far. I have yet to ask a former client for a reference without them trying to recruit me first, but have been able to stay on very good terms if they realize they don't have the right role for me. I also make sure current and potential employers know I am searching for the next challenging role, not just a better salary, but the right salary better be there too.

      The trick is you have to be good enough to back up your contention that you should be treated this well. Being that valuable doesn't come easy to anyone I have ever met; myself included.

      --
      -- All that is necessary for the triumph of evil is that good men do nothing. -- Edmund Burke
    9. Re:From my perspective... by david_thornley · · Score: 1

      Raises are about more than retaining people, they're about avoiding morale problems. Developers are not usually heavily motivated by raises (there are exceptions) but they can be easily demotivated by not getting what they think they deserve. For example, if you hire a guy at $90K/year, and then the market gets tighter and you give him a $5K raise to retain him, and he finds out you're hiring new guys to do the same job for $100K, you've got a problem on your hands that'll likely cost you much more than $5-10K/year.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    10. Re:From my perspective... by asdfj · · Score: 1

      Obvious manager or scab is obvious

  42. Only one thing matters.. by Anonymous Coward · · Score: 0

    Get the fucking job done on time, and do it correctly. Everything else is ego jackoff bullshit.

  43. You need to care (among other things)... by m2pc · · Score: 2

    IMHO, a good developer needa to CARE about what he/she is writing. Here are some points I've gathered from two decades of development work:

    Care about the code
    The quality of the code, efficiency, consistency are all key. Internal documentation is very important. Even if you don't think anyone will *ever* look at that code again, guess again. Someone will probably end up going back over it in the future to fix a bug or add a feature -- often times that is YOU, the one who wrote it. So leave enough comments behind to tell the next guy (or you when you've long forgotten that code) what in the world you were thinking. I've known way too many developers that simply say "yes sir" to their boss and crank out the code as fast as possible. They don't bother to think for themselves things like "what would the customer want" or "how can I design this to be as efficient as possible but still be understandable"? People who view development as simply a "day job" and don't take pride in their work end up causing themselves and others pain down the road. Being a developer should be more than simply writing code that works. You should care enough to write code that works and is elegant.

    Care about the end user
    Whether your code is a script that nobody will ever see, or a GUI application that people will use daily, a good developer puts themselves in the customer's perspective. They care about efficiency. They care about how the people who will use their software on a daily basis will perceive it, and how it will impact their workflow. Try to imagine how shaving even a few seconds off a process that someone does many times a day could add up over the years. With the power of modern computing, it's all too easy to become lazy as a developer and not put much thought into scalability, or to write sloppy code that doesn't make good use of resources.

    Care about robustness and security
    Writing good code also involves covering yourself in terms of error trapping. Make sure your code can (attempt to at least) fail gracefully when the unexpected occurs. Also, make sure you always code with a view to security. Way too much software is written in such a way where security and error trapping is put off until later. All too many times, due to time constraints or simply forgetting, these tasks never get done, and as a result insecure, buggy software is released.

    Don't be afraid to start over
    Good developers also aren't afraid to refactor their code. Sometimes it takes finishing a good chunk of code and analyzing how it performs in the real world to realize you did it all wrong and you need to rip it up and redo it. That's OK. Try to learn from it and do it less as you mature as a developer.

    Memorize the headers and APIs you use most
    Try to memorize headers and such of key APIs and libraries you use often. Personally, I find it all to easy just to keep looking up that function over and over whenever I need to use it. But if you trust yourself and memorize the documentation, then you can code more efficiently with less interruptions from having to go and look up that function call every time.

    Keep it simple
    It's easy for a developer to code "the kitchen sink" and bombard the user with a million options and settings. Yes, the program can do everything someone could possibly want, but overwhelming and confusing the end user is never a good idea. It's much better to think things through carefully and build only what is necessary, or if all the options must exist, build it in layers so the most important options are visible first, then the advanced users can dig in and configure to their heart's content.

    1. Re:You need to care (among other things)... by m2pc · · Score: 1

      IMHO, a good developer needa to CARE about what he/she is writing.

      I'll say that again! Good developers also need a proofreader when posting on /.

  44. I've successfully interviewed and hired for 7 year by Anonymous Coward · · Score: 0

    Interest. Level of interest is the #1 requirement to find good developers. This is a field where you are constantly learning and if you are really interested in the technology you will keep learning better and faster ways to improve what you do and solve problems that you encounter without insisting a manager send you to training courses constantly.

    It's a simple thing to measure in an interview too. Just start asking them to tell you about things they've built in detail. If you can't get them to geek out and show some pride in something challenging they solved or how they went about building it then it's a huge red flag.

    So far I've hired 6 programmers via the geek out test and its worked every time to identify great developers. Sometimes they don't even need to know the language we use because their background and interest shows that they are more than willing and able to do so.

  45. Re:Difficult to answer by Anonymous Coward · · Score: 0

    The GPP only claimed to be a "great" developer, not the best in the world. I personally think there's a pretty wide variation in skill in the industry, and it's not inconceivable that this guy worked at companies where his coworkers really were terrible. Maybe he worked at Microsoft in the 90's :)

  46. Re:Difficult to answer by Anonymous Coward · · Score: 0

    A big fish in a small pond is still a small fish in the ocean.

    He's a great programmer if others recognize he's a great programmer. Until then, he believes himself to be a great programmer; but, so does everyone else.

    And yes, the old-timers will recognize this immediately as the definition of when a person can claim the title of "hacker" for those who still remember it's roots instead of the current "evil computer user" definitions.

  47. Obvious by Anonymous Coward · · Score: 0

    A bunch of fanbois in Slashdot, Reddit, and the tech press saying so-and-so is a great developer.

  48. Re:A great developer knows how shitty he is at cod by Marginal+Coward · · Score: 2

    Yep, I've never met a really good programmer who didn't use every tool he could exploit to find his bugs.

    Good point. In that vein, the best programmer I ever worked with once said he had an "anti-fetish" for bugs. I think that at least partly explained the extremely high quality of his work.

    For most of us, though, finding and fixing bugs is a chore that we'd rather avoid because writing code (and therefore more bugs) is more fun. I try to emulate the anti-fetish mentality of my friend, but that remains something that I sometimes have to discipline myself to do rather than something that comes naturally.

  49. Great qualities by cowdung · · Score: 1

    I don't know about great programmers.. but I've found some great qualities in coworkers who seemed great to me throughout the years:

    1. Nice people: People who get along well with others and through their good qualities make everyone better. Not only can they write awesome code, but since everybody likes them they can get the knowledge they need to do it right. This is probably the quality I admired most in the GREAT programmers I've met.
    2. Deceptively simple designs: I've met coworkers that can design things so simply yet so solidly that their designs last forever
    3. Clean code: the write code that everyone understands.
    4. Innovative: they are always finding ways to make the project better
    5. Broad range: they always have a new trick in their bag. They always know about this tool or that that makes things better, or this library or framework.
    6. Attention to detail: they are patient enough to write unit tests and go through the quality steps needed to guarantee good functioning of the code.

  50. Re:I've successfully interviewed and hired for 7 y by Anonymous Coward · · Score: 0

    I think calling it a huge red flag is premature. I've had many projects that I've been very passionate about during the development process, but usually, when they get to a point where they are pretty much done, the excitement just drops and I can only see them the way an end user would see them. Just useful applications. The process was good times, but it's all in the past. I could tell you how everything came together, but hell if I'd be enthusiastic about it now.

  51. It takes two things by mark-t · · Score: 2

    1. Skill

    2. Passion.

  52. Planning & Vision by 4pins · · Score: 1

    If you don't know how it's going to look, behave, or function; then put the keyboard down and go figure it out before you do any programming. It's amazing how competent you will find yourself, when you know what you are doing.

    --
    I will not mourn that which I never had to lose. - Unknown
  53. Contextualized perspectives by meanderix5483 · · Score: 1

    A lot of confusion arises by trying to find *the* one attribute that is more virtuous than something else, not recognizing that there are usually two opposite perspectives, each being appropriate in a specific context. You may argue that "top-down" is better than "bottom-up", but for a given context, "bottom-up" is going to be the better perspective. You may argue that it's better to optimize development time rather than product quality, but that's also about the context and about listening to the requirements of the customer. Maybe it's about collaboration and working in a team, but for a given context, doing something by yourself is still the way to go. Even when we're talking about how much we earn, it's about recognizing that it may be that we're giving in to corporate oppression rather than pursuing our dreams. Which is the right way to go -- not that easy is it? In the Western philosophies, we want to identify virtues and we want to label these virtues so that we know exactly what are the attributes of the "great developer". In Eastern philosophies, such as Taoism, you will recognize that a mountain has always two sides -- one in the light and one in the darkness -- and both are part of a greater whole.

  54. So when business-type assholes say passionate by Anonymous Coward · · Score: 0

    So when business-type assholes say be passionate, they mean enjoy?

    Or did you not "listen" (read) what he wrote? I thought being a good listener (reader) was key.

    A job is a job, it's fine to enjoy it, it is not necessary to be passionate. I'm passionate about a lot of things, no one is going to pay me to do them. Work is necessary, for most of us, because we need money to live, and do the things we are passionate about.

    That is the problem with the entire work world. People misusing language to create an environment that they think will cause people to give them 110% (hint, it's not possible. As an idiom, it's stupid. why not 1000% why not a baxillion %?. It's like that commercial from about five years ago about package delivery:

    "If we don't get this package there by tomorrow, we're doomed!"

    Sorry, most jobs are not worth being passionate about. They just aren't. It's a waste of your precious life to be passionate about what you just need to do to live. And stressful as well.

    1. Re:So when business-type assholes say passionate by Kielistic · · Score: 1

      I guess I misinterpreted what you meant originally. I think you can enjoy what you do and be "passionate" without having your soul sucked out by assholes.

  55. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  56. Re:Difficult to answer by Anonymous Coward · · Score: 0

    As a security guy that has to find workarounds, patch holes, and generally makes a career through programmers making little mistakes, I see 2-3% error rate as being a normal coder. It is intensely rare to see anything remotely like secure code from any single developer. It takes round after round of iteration with a team of specially trained people to make anything worthy of being called secure.

    The honest truth is that having a career as a programmer means more than making a good product. In fact that is probably the least important part of a programmer's job. Keep the boss happy, be reliable, and crank out things that work by deadlines even if they are buggy pieces of crap are likely to be the top three things needed to have a successful career.

  57. Be the problem solver by MrKaos · · Score: 1

    In most places people don't like to think. Thinking is hard and people don't want to do it. Solving problems involves thinking and if you save people from doing something they don't want to do they will value you.

    Even better is if you do the problem solving and leave them with the 'how-to', you will be idolized every time that solution is used and considered essential.

    Agism tries to trump experience but it never works because agism is so naive, so if you can't avoid getting older then grow up slowly and enjoy IT for the fascinating career that it is. Keep the love!!!

    If you are in it for the money - get out now, you have already failed.

    --
    My ism, it's full of beliefs.
  58. How would I know... by Anonymous Coward · · Score: 0

    I'm a crappy developer....

  59. Six key points by msobkow · · Score: 1

    My key points on the subject are:

    1. A love of the art and the job.

    2. An eagerness to learn and try new things.

    3. The willingness to risk your job to do "the right thing" on a project.

    4. Acceptance that others in the business (not just the team) have valuable inputs that need to be respected.

    5. Experience. Years and years of in-the-trenches experience with a variety of technologies and techniques.

    6. (And perhaps most importantly) A background in the history of computing. The realization that "with a computer" or "on the web" does not make something "new" and patent-worthy.

    --
    I do not fail; I succeed at finding out what does not work.
  60. The most important quality of a great developer by Anonymous Coward · · Score: 0

    The most important quality of a great developer is that it writes code. Go figure.

    The second most important is that his code is appreciated by others.

    The third, but not less important, is that said others actually want to pay for said code. Yes, that's a quality, because it implies making things people want and are useful.

    Out to write some useful code.

  61. It's all about balance by iceco2 · · Score: 1

    Software development like almost everything else is about balance.
    Do I refactor/rewrite or not? Add the extra layer of abstraction? write defensively?
    Do I commit a partial solution to keep integrated with mainline?
    Should I deploy a partial solution to get real feedback?
    Do I make it more complicated to handle some future requirement?

    The best software developers have a good sense of balance. You can always learn a new language/technology
    you can also learn to do things by-the-book learning balance is tricky.

    Joel Spolsky says a developer needs two attributes: "Smart" and "Gets things done"
    I am beginning to believe the latter is the more important part.

    I always recommend new graduates to take their first position in a big corporate environment and their second (and all future) in fast moving start-ups.
    After you have learned the "anal" way of doing things you make much better decisions when cutting corners.

  62. Re:Difficult to answer by Anonymous Coward · · Score: 0

    and that everyone around you is only outputting a bunch of shitty buggy crap, it's probably time for you to do a bunch of introspection.

    Been there...except it was "the platform is horrendous" "the managers can't make up their mind" "noone accepted any of this -- pushed on the customer and pushed on our "agile" "scrum" (in name only) team....all deals were made ahead of time by higher-ups shaking hands...we just make-believe we are "Agile" and responding to customer requirements, when in fact everything is pre-determined and neither us nor the customers have any actual say (which is fine...but not "agile" and not "scrum" at all).

    And yes, the legacy code was shitty buggy crap...that is why despite our shitty buggy crap (the whole platform was inherently immature) it was still better to start from scratch.

    no, all of us: managers, customer, coworkers (of all skill levels) were all in agreement: this company is shit, this platform is shit.

    but, of course, who is going to up and leave?

    "everyone who had anywhere else to go already left" -- manager

    sometimes it IS all shit. and the only people who stick around is for their mortgage or to pay for school (or for their kids' school).

    and my boss hated our client...despised everything about them...they didn't return phone calls......but they paid the bills...even when we were "not dependent on them in any fashion" ...... there were periods we would literally sit 2-3 months doing nothing because the contact people on their side were busy with other things...but it was cheaper to pay us to literally do nothing than re-negotiate contracts.......

    basically, when a "company" has gov. (taxpayer) funding them...they don't give a shit about anything except getting their lobbyists to buy off politicians.

    and our "republican" "free market" company doesn't give a shit it is all a mirage...just as long as we are getting paid, who the fuck cares?

    which is fine...but give me a fucking check if I am going to sit and do nothing all day, because I have shit to do.

    and then magically, one day, there'd be "6 weeks of work we need done in one week" ... dysfunctional all around...

    our "real" manager was MIA ..... off on another team.....it was a guessing game "who is our contact this week?" and "what project this week?" ........ it somewhat leveled off in the end, but you'd be amazed how long this went on :)

    I can understand "restructuring" I suppose......I can't imagine getting paid to do nothing for weeks at a time....they liked us better than their in-house people is all I can figure...better to not piss us off or we'd drop them......they did not trust their own people :)

    I have seen a familiar pattern (spectator and been the person involved): places who lay off sysadmins without bothering to verify:

    1) anyone else actually knows how anything works
    2) anyone actually documented anything
    3) anyone knows what servers are running what
    4) anyone knows resource usage, whether we need more (virtual) machines

    doesn't give a shit about anything. they waste time and money (IMO) cuz a few weeks (perhaps a month) later shit stops working, and noone knows anything, and they find they need sysadmins and DBAs again....

    in my case, nothing was documented when I came in; when I parted, I asked "don't you want our network diagrams / all the details of our internal network and machines and software, etc.? " and when the answer is "no" you basically know you made
    the right choice.

    some places....just do not give a shit about anything. the stock price rises, the shareholders make a buck....everyone and everything else is disposable.

    existing customers are not where money is either...the money is signing up new accounts...it is just a mad rush and grab and while this might be financially necessary (not when you have endless gov. money pouring in, bu

  63. What makes a great software developer? by Anonymous Coward · · Score: 1

    My parents.

  64. Passion for Solving Problems by backdoc · · Score: 1

    You need to be driven by and enjoy solving problems. Without that passion, you will probably not make it.

    Also, the sad reality where I am employeed is that there is more to get done than I can do. So, being able to settle for "a" solution that buys you time can be a necessity. I'm a perfectionist. So, that's a bitter pill for me to swallow.

  65. results orientation by Anonymous Coward · · Score: 0

    Great programmers don't waste energy. They are focused on meaningful results. This helps them avoid endless traps: over-identification with their own solution to a problem, practicing process for the sake of process rather than the results it enables, struggling for credit, cranking out code to meet suspect purposes and features, participating in office gossip or off-point meanderings that waste time. Great programmers focus on useful, deliverable results more intently than regular programmers.

  66. Re:Great programmers are born not made by RabidReindeer · · Score: 1

    To be a great programmer (or even just a good one), you need to never stop learning. Always be learning something. Many times in my life I have learned something on my own, only to be able to apply is a totally different situation later in life.

    Great programmer are insanely curious. They want to know the how things work, why one solution is better than another, always improving. That is the key, always be improving your craft, and your knowledge.

    I agree. However, too many people can't be bothered to be curious. At best, they just want to get the job done. If you're innately curious, you're going to spend time looking deeply into stuff that "practical" people don't consider worth looking at at all. You're going to try things and see what happens, whether you're a kitten or a developer or Albert-frickin'-Einstein. And that, after all, is what learning really is. You don't so much force yourself to learn to become great, you become great because you can't resist the impulse to learn.

  67. Re:A great developer knows how shitty he is at cod by RabidReindeer · · Score: 1

    You WILL make mistakes and introduce bugs when coding. A great developer knows this.

    Ask anyone you think is a great developer, "What do you do to help prevent or detect the mistakes you make?"

    Computers are devices whose primary purpose is to make developers look like idiots when they make statements about what the computer is going to do or not do.

    Don't even get me started on photocopies and traffic lights.

    It's a conspiracy, I tellya!

  68. Re:A great developer knows how shitty he is at cod by gbjbaanb · · Score: 1

    For most of us, though, finding and fixing bugs is a chore that we'd rather avoid because writing code (and therefore more bugs) is more fun

    maybe that's the fundamental thing - the greater a programmer, the more he treats the work as work and not fun. A professional working on building a product and not some amateur playing with his hobby.

    A great programmer will use whatever tools are needed or suitable, the 'coder' will use the tools he really prefers using. Like my mate, when presented with his new job that involves creating an updated embedded PoS terminal, rather than reusing as much of the legacy C++ code blocks the old system has and putting it on a Linux platform, is only interested in rewriting it all in .NET on Windows 7 (or 10 probably).

  69. Re:A great developer knows how shitty he is at cod by RabidReindeer · · Score: 1

    Yep, I've never met a really good programmer who didn't use every tool he could exploit to find his bugs.

    Good point. In that vein, the best programmer I ever worked with once said he had an "anti-fetish" for bugs. I think that at least partly explained the extremely high quality of his work.

    For most of us, though, finding and fixing bugs is a chore that we'd rather avoid because writing code (and therefore more bugs) is more fun. I try to emulate the anti-fetish mentality of my friend, but that remains something that I sometimes have to discipline myself to do rather than something that comes naturally.

    Long ago, I had a set of "Programming Proverbs" books. I think that's where I ran into the term "anti-bugging".

    Anti-bugging is simply the process of designing and coding so as to make bugs either impossible, or at least easier to detect. It can be as simple as always coding brackets around conditional clauses instead of only when needed, to pre-initializing variables so that in case all the various logic paths fail to set them that their value will be consistent (and ideally, obviously wrong). Coding tests to detect and report things that "will never happen". Because they do, alas. And so forth.

  70. pragmatic by Anonymous Coward · · Score: 1

    Recently switched to a company where most of the software group gets so wrapped up in the textbook OO to the nth degree, the latest tools, dicking around with trying to anticipate every which way code could get misused by some rogue coworker in the process making the code 15 layers deep, complex, hard to understand, etc.. That they have like zero velocity. Be pragmatic!

  71. Laziness by TechNeilogy · · Score: 1

    Laziness makes for great software developers. Great developers will slave for hours, days, lifetimes even, just trying find easier ways to do things.

    --
    "The wisdom of the Patriarchs was that they *knew* they were fools." --Master Foo
  72. Re:A great developer knows how shitty he is at cod by Shados · · Score: 1

    That depends on the "why" though. Currently, one of the thing that will prevent a company from growing is how hard it is to get resources. An argument could be made that good C++ devs are rare and expensive. PoS systems are frequently written in higher level languages, so you'll more easily be able to find people to work on it if you use one of those languages. So the time and money you lose rewriting it will be made back, often several times over.

    C# is actually a pretty wonderful language, with its platform being its only real drawback, and depending on your scale, it may not even be a drawback. If your total cost of ownership of one of these PoS boxes was $5000, the 20 bucks (after volume licensing) for the OS wouldn't a big deal. .NET will also easily be able to consume legacy C++ code because it has decent interop for it (better than most other languages with C++ interop).

    Now, the PoS I used to work on had a much lower TCO than that, so until .NET core becomes mainstream on Linux, it may not be the correct choice, unless the C++ interop become a factor. But keeping a PoS system in C++ is almost certainly the wrong choice. You won't get many super star devs willing to work on that kind of thing, so you need to architect accordingly.

  73. Re:A great developer knows how shitty he is at cod by Marginal+Coward · · Score: 1

    I guess I've never known a great - or even good - programmer who didn't find it fun. (Imagine, for example, a concert pianist who didn't find playing the piano to be fun. Unlikely, at best.)

    Of course, not ever aspect of a programmer's job is fun, so that's where professionalism comes in. Like many programmers, I don't always enjoy the documentation aspects of it, but that's part of what my employer is paying me for.

    (BTW, the title of this thread makes me think fishermen are likely to be better at cod than great developers.)

  74. According to their managers? by frank_adrian314159 · · Score: 1

    An undying devotion to their craft and diligence towards completing their projects so strong it blinds them to how poorly they are treated (I would say paid, but that's subset of "treated").

    --
    That is all.
  75. The greatest software developer by Anonymous Coward · · Score: 0

    IMNSHO, the greatest software developer is one who writes his/her code in such a way that (almost) anyone can understand it; who writes unit tests in parallel with the code to verify that it does what it's supposed to do; who prioritises what it is supposed to do over what it might do.

    If I deliver a piece of code which does what it's supposed to do, together with unit tests that show that it does indeed do that, and which anyone can read, then that's worth a whole lot more than:

      - code that is so opaque that no one can tell what it does, let alone how to modify it

      - code that will do heaps more things, at the cost of making what it was intended to do more difficult

      - code that next has to be tested to verify that it does what it's supposed to do

    And most importantly, code that takes so long to develop that the project gets cancelled. Nothing is more useless than perfect code that will be finished "any time now". Good enough code on time - much more valuable.

  76. Simple by Anonymous Coward · · Score: 0

    Carbon and time.

  77. The single most important factor. by pigiron · · Score: 1

    IQ

  78. Livehacker has bad advice by Anonymous Coward · · Score: 0

    The salary advice is really awful in this article. Your choice is basically between having a job or having your job outsourced. If you're making $150k you can expect your job to be outsourced to a company that does it for half that. You'll be making $50k next because all the companies that do what you were doing have outsourced, and the only employer for someone with your skills will be the outsourcers. They already lowballed the companies to get the contract. So they will hire the people the companies fire in a year or two as their business picks up.

  79. Programming, motherfucker. by Anonymous Coward · · Score: 0

    Do you speak it?

  80. Re:Difficult to answer by Anonymous Coward · · Score: 0

    I'm usually one to avoid sounding arrogant but at this point in my career, having worked for over 20 years at a variety of companies (startups, Fortune 500, etc) and working with people of varying backgrounds (Microsoft, Facebook, Google, Amazon, Stanford, MIT, etc) I can say with 100% certainty that most software engineers have no idea what the fuck they are doing. I'm far more humble in real life but just being brutally honest here.

  81. #1 Be a good user by Anonymous Coward · · Score: 0

    The best software designers and developers are good software users. They know what to expect, and they make their software do what users expect. Don't forget that your fellow developers are also "users" of your software - they get to maintain your software after you are gone. Be the type of developer whose code is a pleasure to maintain.

    The worst software designers I've encountered don't think like a user - many of them think like artists. They can draw a beautiful screen layout, but they don't think about how the software will actually work. The worst developers just assume everyone will use the software the way they do, so they don't do the extra work to make the software work smoothly.

  82. I'll let you know when I've met one... by Lodragandraoidh · · Score: 1

    I have yet to meet a really competent programmer. I don't consider myself much beyond capable - but I have too many flaws in my output to be considered really brilliant.

    I have worked with or dealt with the output of other programmers who's performance was egregious - most egregious was the contractor who's naive use of a commercial java framework managed to produce the effect of a memory leak in java (e.g. hamstrung java's built-in garbage collection mechanism).

    Experience has taught me practical measures of quality programmers in no particular order:

    1. They must know how to program at the most simple level (e.g. competency in structured programming in C would be a good starting point - a basic understanding of LISP programming a plus) before tackling more complex programming tasks. I get the sense there are a lot of cut-and-paste programmers out there who really don't understand what the underlying code they are creating is actually doing.

    2. Have an innate ability to focus on simple solutions, rather than being clever. KISS principle must be understood and brought into every design decision from the start. That is not to say there are no complexities, but understanding what is simple given the problem at hand - some simple things are complex when compared to other systems - and having the ability to avoid needless complexity.

    3. Literate - must be able to not only communicate effectively externally - but also their comments in code should illuminate the subject matter in a clear, concise manner. Ideally should be able to get workable technical documentation straight from their comments - via doxygen or the like (perldoc, pydoc etc).

    4. Their code must be maintainable and extendable. If an average programmer cannot maintain the code, and is required to rewrite the system from scratch - then you have failed as a quality programmer. Change is inevitable - how resilient your system is to change is a measure of your ability as a programmer.

    5. They must understand a lot about technology outside of the world of their application. Their application will live in a world of networks, machines (physical and virtual), storage systems, communication protocols, and APIs - they must understand the implications of software design choices given a set of environmental requirements. The best programmers not only know how to code up systems, but also how to give advice about what their systems will be capable of doing given the environment, or lack thereof - and act upon that if it is possible to adjust via changes to software alone (e.g. choosing multithreading/multiprogramming design over single thread of execution).

    6. They must be able to create secure code. If the company they work for doesn't produce a guide to that, then they should develop that on their own - and live by it - and consistently improve it. If they are using frameworks/libraries written by someone else, they should audit or test it to be sure the underlying implementation is secure.

    7. Must be able to get along with others and work as part of a team; ideally if they are really a quality programmer, I would expect them to also mentor and share their ideals and capabilities with their peers to bring everyone up as much as possible. Quality programmers are not primadonnas.

    That's it from my standpoint.

    --

    Lodragan Draoidh
    The more you explain it, the more I don't understand it. - Mark Twain
  83. Great developers... by MoarSauce123 · · Score: 1

    ....are developers who embrace the entire product design cycle, that includes business analysis, testing, and support. That means mainly not having the attitude that requirements are never to be questioned and once something compiles with less than three dozen warnings the code is ready for production. Great developers are also not to snobby to reject taking on a customer support case, pitching in during regression testing before a release, or fixing bugs (that they put into the app). In short, great developers do not come across as a diva that leaves no opportunity out to state how awesome they are.