Are good programmers always show-offs?



  • When I come on to a project, or inherit code, it seems like I find one of two things:

    1) The author of the code was simply not very skilled. There will be awkwardness, bugs, etc., and things won't happen as quickly or predictably as one might hope; OR

    2) The author of the code was very skilled indeed. His programming activities occupy most of his time, and the result is an advanced codebase, which typically functions better than in case #1 but is also larger.

    Counterintuitively, I find myself hoping for #1. In case #2, I find myself overwhelmed by code that's basically unnecessary. This can take the form of an overly abstract, often OO codebase which fails to simply do what it's asked to do (in the hope of being something more). Or, it can take the form of a very low-level codebase which fails from an economic standpoint- it simply takes too long to modify or maintain. I have even seen both at once (the deeply nested class with __asm blocks at the top of each method) and that to me is the worst kind of WTF. I mean, I can do OO, or I can do Intel __asm, but to do both in the same @#$@-ing file just seems masochistic.

    It's very rare, on the other hand, that I find the passionate, skilled programmer that knows when it's appropriate to apply these skills. I get the sense that my colleagues are basically programming for programming's sake. They're using __asm (or the decorator pattern, or OO, or whatever else) because that's what they associate with top-notch programmers, not because they think it will give the best overall quality and functionality for the time. 

    Some of the worst turf battles in the job seem to come when one of these advanced programmer types doesn't "get" to write a library for the group (as if doing the work would be some kind of a privilege) and instead some other hotshot wants to do him the "favor" of writing it instead.

    This really bothers me. I'm competent but I don't want to program for programming's sake. I don't want to be a part of a profession that throws away everything else of value - from economics to having a real life to actually making money - in the service of some macho hacker code of ethos. The value of a program, to me, comes first in the money it brings and second in the fact that it actually gets used. I get the sense that my colleagues don't give a damn about these things.

    Does anyone else feel this way? Or did I just choose a job I didn't like?




  • @beau29 said:

    ecause that's what they associate with top-notch programmers, not because they think it will give the best overall quality and functionality for the time.

    This is common, but not impossible to deal with.  I've done it myself before.  "Pre-optimized" by building the library first, rather than just getting the tool to work.  In other situations however, I've coppied and pasted code between 4 different tools that do similar things when I probably should have created a library after the 2nd tool.  It all depends on how much time I was given.

    Perhaps these hotshots need to be given stricter deadlines to force them to avoid over-engineering.  Likewise, if they were forced to work on smaller tools, maybe they could be trained to let go of the desire to "enterprise" everything they write. 



  • People who do this aren't good programmers. You're confusing "good" with "bad". Maybe you've never worked with a good programmer before so you don't know how to identify them.



  • The problem is mostly trying to be enterprisey and unrelated to programming skill show-offs. Since, as we learned on TDWTF, that the #1 rule of programming these days is "make things as complicated as possible", people have forgotten that simplicity is a virtue.Just throw in a few random useless design patterns, some XML abuse, and lots of Soft Coding and we get what the OP describes.

    In my mind, show-off is more like abusing advanced language features that is strictly unnecessary for the task, or writing extremely terse code (C style): using call/cc in scheme when a simple recursive function will do; abusing design patterns in Java when a straightforward implementation works well; writing C code like " *(*p++)[*x] = ++*q; " (randomly made up here), etc.



  • @beau29 said:

    This really bothers me. I'm competent but I don't want to program for programming's sake. I don't want to be a part of a profession that throws away everything else of value - from economics to having a real life to actually making money - in the service of some macho hacker code of ethos. The value of a program, to me, comes first in the money it brings and second in the fact that it actually gets used. I get the sense that my colleagues don't give a damn about these things.

    Does anyone else feel this way? Or did I just choose a job I didn't like?

     

    I agree with the "not programming for programming's sake." At my current company, we always do projects based on value, so luckily I don't run into people doing stupid stuff to show off.  That would piss me off as well.

    I show off at times by sleeping with my bosses's wives, but that has little to do with programming. 



  • @Welbog said:

    People who do this aren't good programmers. You're confusing "good" with "bad". Maybe you've never worked with a good programmer before so you don't know how to identify them.
    Totally agree.  Good programmers are the ones saying, "there has got to be a simpler way to do this."



  • Without knowing any specifics about the code you've looked at, it's also possible that when you look at new code, you simply don't have a full grasp of all of the requirements and conditions it's supposed to handle and mistake it for overengineering.

    OK, inline assembly is pushing it, yes.  But some designs are complicated because they need to be complicated, not because someone was doing it for fun or to show off.  We've got a business tier based off of .NET WebServices which I'm sure half of the people on this forum would consider pointless (oh noes, XML!), and definitely makes minor updates like adding a field to a report more difficult than it might otherwise be, but it's also given us the ability to provide nearly identical functionality to employees via Winforms, customers via ASP.NET, partners via various B2B portals, and tight integration with several other outsourced apps.  And it gives us the option to scale by adding cheap virtual webservers instead of expensive database servers.  A lot of the messages take large data sets as input and crap out huge output, so they can be awkward to call and parse out if you just want one record, but for the operations they're actually optimized for, they can save minutes or even hours of processing time.

    Every application starts out simple.  As they grow and mature, they either evolve into highly abstracted models or become balls of mud with thousands of gross appendages sticking out in all directions.  I've seen the latter, and trust me, you don't want it.  The developers of those systems are constantly putting out fires.

    But like I said, I've certainly never felt the urge to use inline asm, I can't imagine many scenarios where that would confer any real performance advantage in this day and age, and it could be that you've just been exposed to a lot of bad code written by programmers who actually weren't very talented but were trying to prove to themselves or to somebody else that they were.



  •  @beau29 said:

    When I come on to a project, or inherit code, from author of the code was simply not very skilled, it seems like I find one of two things:

    1) The author of the code was simply not very skilled. There will be awkwardness, bugs, etc., and things won't happen as quickly or predictably as one might hope; OR

    2) The author of the code was very skilled indeed. His programming activities occupy most of his time, and the result is an advanced codebase, which typically functions better than in case #1 but is also larger (filled by code that's basically unnecessary.)

     FIFY

     



  •  I've seen stuff like the assembly thing happen on older code bases.  Usually it's a case of stuff being unmaintainable as ASM, so somebody moves it to a new archiecture, but there's those few pieces that they couldn't hope to understand well enough to port.  That or the ASM was just done to speed up some critical piece of code.

     On the subject of getting annoyed when somebody else does the project... I usually only get like that if I think they'll do it wrong, because I'll inevitably have to maintain it.



  • As others have said, these signs are not of a good programmer. Talented, maybe; but in showing off they are overcomplicating stuff... and give birth to front page material.

    @beau29 said:

    Some of the worst turf battles in the job seem to come when one of these advanced programmer types doesn't "get" to write a library for the group (as if doing the work would be some kind of a privilege) and instead some other hotshot wants to do him the "favor" of writing it instead.

    If said hotshot is producing the aforementioned front page material, I'd be weary of him producing a library; as everyone would end up suffering from his abuse. When these guys actually make a library, it will have most of the signs of the Inner Platform effect.

    Example: Someone made a custom tag for filling up <select> elements; it's considered part of the library. However, it requires a zillion attributes to work; I ended up using something easy: the <h:selectOneMenu> JSF tag, with a common JSF Bean providing the element list. The upshot on this is that I don't have any weird character errors, as the JSF tags automatically escape text for HTML use. There's another class, where some methods basically do the same thing as Integer.parseInt(), or implement the same things as DateFormat or NumberFormat.



  • @beau29 said:

    This really bothers me. I'm competent but I don't want to program for programming's sake. I don't want to be a part of a profession that throws away everything else of value - from economics to having a real life to actually making money - in the service of some macho hacker code of ethos. The value of a program, to me, comes first in the money it brings and second in the fact that it actually gets used. I get the sense that my colleagues don't give a damn about these things.

    Does anyone else feel this way?

    I can tell you many people who program "for programming's sake", who have "some hacker code of ethos", who "don't give a damn" about money. These are the people behind Linux, GNU, Apache, most programming languages themselves, etc etc.

    Fortunately, such people tend to work in, and their software depends on, wide scale collaboration. Possibly letting no task, even a seemingly simple one, be the job of just one programmer would reduce the sort of code you're complaining about. Have a basic requirement that at least one other person has to understand the code.


  • :belt_onion:

    @bstorer said:

    @Welbog said:

    People who do this aren't good programmers. You're confusing "good" with "bad". Maybe you've never worked with a good programmer before so you don't know how to identify them.
    Totally agree.  Good programmers are the ones saying, "there has got to be a simpler way to do this."
    Good programmers are the ones saying: "I'm too lazy to write my own functions so I just use the built-in ones instead."



  • @bjolling said:

    @bstorer said:

    @Welbog said:

    People who do this aren't good programmers. You're confusing "good" with "bad". Maybe you've never worked with a good programmer before so you don't know how to identify them.
    Totally agree.  Good programmers are the ones saying, "there has got to be a simpler way to do this."
    Good programmers are the ones saying: "I'm too lazy to write my own functions so I just use the built-in ones instead."

    Or those that actually spend time to think before blindly typing stuff into the IDE, refuse to duplicate code patterns, but also do not write pointless layers and layers of indirection that accomplishes nothing (something that's common with people obsessed with OO design patterns).


Log in to reply