Follow Slashdot stories on Twitter

 



Forgot your password?
typodupeerror
×
Programming

Ask Slashdot: What Makes a Great Software Developer? 214

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?
This discussion has been archived. No new comments can be posted.

Ask Slashdot: What Makes a Great Software Developer?

Comments Filter:
  • Alternate Link (Score:5, Insightful)

    by Anonymous Coward on Tuesday January 27, 2015 @09:02PM (#48919741)

    Here's an alternate link [dice.com] 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.

    • Re:Alternate Link (Score:5, Interesting)

      by barrywalker ( 1855110 ) on Tuesday January 27, 2015 @09:30PM (#48919929)
      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.
      • Re:Alternate Link (Score:5, Interesting)

        by gfxguy ( 98788 ) on Tuesday January 27, 2015 @10:38PM (#48920275)
        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.
      • Re: (Score:2, Funny)

        by Anonymous Coward

        >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.)

      • 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.

      • 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)?
        • by tlhIngan ( 30335 )

          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

          • 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.
        • 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?

    • 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

      • 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.

        • 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.

    • by Anonymous Coward

      ...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.

      • Re: (Score:2, Insightful)

        by Anonymous Coward

        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.

        • by uncqual ( 836337 )

          He's obviously a PHB.

      • by Anonymous Coward on Wednesday January 28, 2015 @02:43AM (#48921457)

        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.

      • 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.
      • by ranton ( 36917 )

        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

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

      http://programmers.blogoverflo... [blogoverflow.com]

      I think the main thing that most people skip is how to work alongside other developers, and how to write maintainable code.
    • by plopez ( 54068 )

      "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:

  • Beer (Score:4, Insightful)

    by Marc Nicholas ( 3924913 ) on Tuesday January 27, 2015 @09:02PM (#48919743)
    Beer makes everything better ;)
    • 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.

  • It depends (Score:5, Insightful)

    by Tablizer ( 95088 ) on Tuesday January 27, 2015 @09:08PM (#48919779) Journal

    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.

    • by epyT-R ( 613989 )

      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.

    • by Bengie ( 1121981 )

      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.

      • by AuMatar ( 183847 )

        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.

        • by Bengie ( 1121981 )
          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
  • Levels (Score:5, Interesting)

    by phantomfive ( 622387 ) on Tuesday January 27, 2015 @09:08PM (#48919781) Journal
    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.
    • Re:Levels (Score:5, Interesting)

      by Anrego ( 830717 ) * on Tuesday January 27, 2015 @09:15PM (#48919827)

      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).

      • Re:Levels (Score:5, Insightful)

        by phantomfive ( 622387 ) on Tuesday January 27, 2015 @10:10PM (#48920133) Journal
        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.
        • Re:Levels (Score:4, Insightful)

          by pak9rabid ( 1011935 ) on Wednesday January 28, 2015 @12:02AM (#48920743)
          Or you yourself having to read it years later when you have zero memory of writing it ;)
          • 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
    • Re:Levels (Score:5, Interesting)

      by rwa2 ( 4391 ) * on Tuesday January 27, 2015 @09:24PM (#48919889) Homepage Journal

      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.

  • 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.
    • 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.

  • by Bookwyrm ( 3535 ) on Tuesday January 27, 2015 @09:15PM (#48919829)

    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.

  • by byteherder ( 722785 ) on Tuesday January 27, 2015 @09:26PM (#48919905)
    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.
    • 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 c

  • by Anonymous Coward on Tuesday January 27, 2015 @09:28PM (#48919915)

    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?"

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

    • by beelsebob ( 529313 ) on Tuesday January 27, 2015 @10:49PM (#48920335)

      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.

      • 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.

        • 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 th

          • by Shados ( 741919 )

            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 platfor

          • 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 tha

        • 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

    • 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!

  • by alexhs ( 877055 ) on Tuesday January 27, 2015 @09:29PM (#48919923) Homepage Journal

    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".

    • 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 d

  • Be a Good Listener (Score:5, Insightful)

    by Khomar ( 529552 ) on Tuesday January 27, 2015 @09:44PM (#48920015) Journal

    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.

  • My opinion (Score:5, Insightful)

    by dskoll ( 99328 ) on Tuesday January 27, 2015 @09:44PM (#48920019) Homepage

    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.

  • 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

  • Eisenhower said it (Score:4, Interesting)

    by circletimessquare ( 444983 ) <circletimessquar ... m minus language> on Tuesday January 27, 2015 @10:09PM (#48920129) Homepage Journal

    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

    • 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.

      • 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

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

    • 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.

  • Cheetos and Fritos.
  • 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) .
  • 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 [brucefwebster.com]. ..bruce..

  • by m2pc ( 546641 ) on Wednesday January 28, 2015 @12:05AM (#48920759) Homepage

    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.

    • by m2pc ( 546641 )

      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 /.

  • 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 thing

  • by mark-t ( 151149 ) <markt.nerdflat@com> on Wednesday January 28, 2015 @01:44AM (#48921253) Journal

    1. Skill

    2. Passion.

  • 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.
  • Comment removed based on user account deletion
  • 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

  • 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 "

  • 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.

    Jo

  • 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").

"Protozoa are small, and bacteria are small, but viruses are smaller than the both put together."

Working...