Slashdot Mirror


C Code On GitHub Has the Most "Ugly Hacks"

itwbennett writes: An analysis of GitHub data shows that C developers are creating the most ugly hacks — or are at least the most willing to admit to it. To answer the question of which programming language produces the most ugly hacks, ITworld's Phil Johnson first used the search feature on GitHub, looking for code files that contained the string 'ugly hack'. In that case, C comes up first by a wide margin, with over 181,000 code files containing that string. The rest of the top ten languages were PHP (79k files), JavaScript (38k), C++ (22k), Python (19k), Text (11k), Makefile (11k), HTML, (10k), Java (7k), and Perl (4k). Even when controlling for the number of repositories, C wins the ugly-hack-athon by a landslide, Johnson found.

58 of 264 comments (clear)

  1. Perl by mozumder · · Score: 5, Funny

    Pretty sure people already assume that every line of Perl code is an ugly hack anyways, so they didn't have to write a comment on it.

    1. Re:Perl by dgatwood · · Score: 4, Funny

      To recognize that a line of code is an ugly hack, someone would have to first understand it, and as we all know, only Perl can parse Perl.

      --

      Check out my sci-fi/humor trilogy at PatriotsBooks.

  2. Maybe C developers are more honest by angryargus · · Score: 5, Insightful

    Regardless this seems like a pretty crappy study. There's many other phrases like kludge or XXX to have considered.

    1. Re:Maybe C developers are more honest by Anonymous Coward · · Score: 5, Insightful

      C developers are good enough to know when what they're doing is an ugly hack.

      If PHP developers were at the same standard, every line would end with // Ugly Hack.

    2. Re:Maybe C developers are more honest by dgatwood · · Score: 5, Insightful

      C developers are good enough to know when what they're doing is an ugly hack.

      If PHP developers were at the same standard, every line would end with // Ugly Hack.

      I think the reason PHP is #2 on the list is that the people who are still writing PHP are mostly pretty good. The ones who were awful have all moved on to Python or Ruby or whatever the scripting language of the week is these days.

      In fact, I'd be willing to bet that a sizable percentage of the folks who are still actively using PHP are C programmers. I use it for all my web programming because it is exceptionally easy for me as a long-time C programmer. I basically write C with dollar signs and a few other minor tweaks, and it works. Even better, if there's some piece of code that has to be blisteringly fast, I can port it from PHP to C faster than you can say sed 's/\$//sg'. Okay, it really isn't quite that trivial, but it is pretty close.

      And yes, I do occasionally take advantage of being able to mix PHP and HTML, but not very often. I mostly just use it as a compile-free web programming language with better string handling and basic support for classes.

      --

      Check out my sci-fi/humor trilogy at PatriotsBooks.

    3. Re:Maybe C developers are more honest by delt0r · · Score: 2

      I like to personally use the phrase "A puppy dies every time this is executed"

      --
      If information wants to be free, why does my internet connection cost so much?
    4. Re:Maybe C developers are more honest by mwvdlee · · Score: 5, Informative

      https://github.com/search?utf8...
      Javascript wins.

      PHP developers prefer murdering kittens: https://github.com/search?utf8...

      Some other fun facts:
      C developers are most ashamed of their code: https://github.com/search?utf8...
      PHP coder don't fix bugs: https://github.com/search?utf8...
      C developers' code actually get worse as it ages: https://github.com/search?utf8...

      Java developers seem to have the most trouble getting their code to work: https://github.com/search?utf8...
      Not surprising: https://github.com/search?utf8...

      Disclaimer; not corrected for any type of bias or error, of which there are many.

      --
      Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
    5. Re:Maybe C developers are more honest by IamTheRealMike · · Score: 2

      Haha, neat .... but ....

      Java developers seem to have the most trouble getting their code to work: https://github.com/search?utf8... [github.com]

      ..... that search is almost entirely results of the form:

      try {
      } finally {
          working = true;
      }

      So no, I don't think it shows anything about Java. If you want to get a similar string for Java I'd suggest variants on "TODO: Refactor this". Java has very powerful refactoring IDEs and the corporate world has more of an emphasis on constantly refactoring stuff (hey, it's less effort than debugging some stupid bug reported by marketing, right?).

    6. Re:Maybe C developers are more honest by ckatko · · Score: 2

      Some of my favorites:

      Dear God Why?
      https://github.com/search?utf8...

      Ugly as sin (Javascript wins, C a close second)
      https://github.com/search?utf8...

      "BUG" (Holy God, 52 million entries in C, Javascript has 5.4m in second)
      https://github.com/search?utf8...

      TODO (20.9 million C entries, 7 million on PHP in second)
      https://github.com/search?utf8...

      FIX (24 million C entries, 6.3 Javascript in 2nd)
      https://github.com/search?utf8...

      "Why does this work?" (C, 2.9 million, C++ 307,942 in 5th place)
      https://github.com/search?utf8...

      "What does this do?" (C, 10.9 million, C++, 1 million in 5th place)
      https://github.com/search?utf8...

      One would probably have to divide those results by actual number of files in that language to get a percentage. You also might want to control for code complexity. But if we were gonna be quick and lazy, I would guess C uses more hacks/obscure code to get the job done and when that veteran leaves, nobody knows what it does.

      On the bright side, C/C++ look like they tend to have tons of comments which (as long as they don't rot) is a very good thing. And if you're describing "why" and not "how" with comments, those will rarely rot.

  3. File this under "NO SHIT" by darkain · · Score: 5, Interesting

    Seriously guys. File this one under "NO SHIT" - Of course C is going to have the most ugly hacks. Why? Because it is by design able to access a hell of a lot more than other languages. How many languages have direct hardware access? Or inline ASM code? And does the word "hack" in the code really make it an "ugly" hack? Seriously? I wrote a micro-kernel for an ARM platform about a decade ago, and there was an assload of inline ASM code and direct pointer manipulation to access the underlying hardware, there is no other way to do this. Yeah, I'm sure the word "hack" appeared countless times in my code, because that's the general term we use. That doesn't make it "ugly" or bad by any means.

    1. Re:File this under "NO SHIT" by x0ra · · Score: 2

      You should check those "hack" really, it's not worth the name "hack".

    2. Re:File this under "NO SHIT" by AmiMoJo · · Score: 5, Insightful

      Maybe the reason C has more is that the specific string "ugly hack" is more commonly used by C programmers. Languages like Javascript are really ugly and full of nasty hacks, but that's normal for them so no-one comments on it.

      --
      const int one = 65536; (Silvermoon, Texture.cs)
      SJW, n: "Someone I don't like, and by the way I'm a fuckwit" - AC
    3. Re:File this under "NO SHIT" by jmv · · Score: 2

      I would also add that the most common reason why people write "ugly hacks" is to make their programs fast. If you care enough about speed to put these ugly hacks in your program, you're certainly not going to write it in Java or Python.

    4. Re:File this under "NO SHIT" by I4ko · · Score: 2

      This one exactly. The non-C developers are in general ignoramuses and for them the ugly hack is modus operandi, not an exception. For the C developer that is an exception, so they can recognize it and mark it as such. .

    5. Re:File this under "NO SHIT" by someone1234 · · Score: 4, Insightful

      In this study, an ugly hack was determined by the string "ugly hack" appearing in code comments. It was a totally scientific study.

      --
      Patents Drive Free Software as Hurricanes Drive Construction Industry
    6. Re:File this under "NO SHIT" by Anne+Thwacks · · Score: 2

      If that is your idea of fast, you must be one of the people who think 2 + 2 = 5 for large values of 2.

      --
      Sent from my ASR33 using ASCII
    7. Re:File this under "NO SHIT" by Capsaicin · · Score: 2

      [Y]ou must be one of the people who think 2 + 2 = 5 for large values of 2.

      Well obviously 2 + 2 never equals 5, duh!
      2 + 2 approaches 5 as the value of 2 grows ...

      --
      Better to be despised for too anxious apprehensions, than ruined by too confident a security. --Edmund Burke
    8. Re:File this under "NO SHIT" by gstoddart · · Score: 4, Informative

      Honestly, for some of us "hack" means anywhere from "an inelegant but necessary workaround", to "a really awesome and unexpected use of something", to "defeating system security", or a clueless person bashing away at something they don't understand, or "something I just whipped up".

      GP is absolutely correct ... for many of us, "hack" is a very generic term.

      --
      Lost at C:>. Found at C.
  4. There might be a bit more to it. by hamster_nz · · Score: 5, Insightful

    C coder know a ugly hack when they see one, and when they write one.

    I would conjecture that nearly every line of Perl scripts is an ugly hack, so nobody bothers to add a comment... 8-)

  5. The ultimate ugly hack? by hamster_nz · · Score: 5, Insightful

    Fast inverse square root (sometimes referred to as Fast InvSqrt() or by the hexadecimal constant 0x5f3759df) is a method of calculating x1/2, the reciprocal (or multiplicative inverse) of a square root for a 32-bit floating point number in IEEE 754 floating point format.

    http://en.wikipedia.org/wiki/F...

    Anybody got any better Ugly Hacks to share?

    1. Re:The ultimate ugly hack? by Anonymous Coward · · Score: 5, Insightful

      Duff's device

      C's default fall-through in case statements has long been one of its most controversial features; Duff observed that "This code forms some sort of argument in that debate, but I'm not sure whether it's for or against."

    2. Re:The ultimate ugly hack? by Cesare+Ferrari · · Score: 2

      float->int conversion used to be expensive on x86 processors due to default rounding modes from C, and lack of suitable built in rounding functions. Looking back, my code contained this handy function. Ugly hack or elegant performance improvement? I'd suggest that the difference comes down to comments, unit tests, and whether people die if it's got bugs ;-)

      #ifdef WIN32
              #ifdef ASSUME_ROUNDING // This method relies on knowing the rounding mode of the float processor // // It relies on it being set to round to nearest and offsets the value to // calculate a truncation
                      inline int convert(float f)
                      {
                              int i;
                              static const float half = 0.5f;
                              _asm
                              {
                                      fld f // f = f
                                      fsub half // f = f - 0.5
                                      fistp i // i = round(f)
                              }
                              return i;
                      }
              #else // Shift the bits in the double around so that the bits can be read directly as an int
                      inline int convert(double d)
                      {
                              const double D2I = 1.5*(double)(126)*(double)(126);

                              double temp = d - 0.499999999 + D2I;

                              return *((int*) (&temp));
                      }
              #endif
      #else // On Mac we just use the standard C conversion since it doesn't suffer the performance hit // as on PC
              #define convert(x) int(x)
      #endif

    3. Re:The ultimate ugly hack? by Hognoxious · · Score: 2, Funny

      Swallow your pride and just give up, Lennart.

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
  6. Ugly but beautiful by Anonymous Coward · · Score: 2, Insightful

    God I love C.

  7. Perl was last? by Okian+Warrior · · Score: 3

    Perl was last on that list?

    For those people who say that Perl coders only write incomprehensible gibberish, I say:

    BWA HA HA HA HA!

    1. Re:Perl was last? by Okian+Warrior · · Score: 2

      Perl was last on that list?

      For those people who say that Perl coders only write incomprehensible gibberish, I say:

      BWA HA HA HA HA!

      (To be fair, a more interesting statistic would be the percent of files in each language that contain ugly hacks.)

  8. Nonsense... by SlovakWakko · · Score: 5, Insightful

    The whole C language is one beautiful hack, scary at first but once you get to know it in some really messed up sw project you can't help but love it. The balance between freedom and structure is excellent.

  9. Low hanging hack... by x0ra · · Score: 5, Informative
    Did any of you actually read the "ugly hacks" this is pretty low hanging stuff, not the evil pointer-arithmetics and language corner undefined behavior case type of hack...

    #ifndef __INCif_etherh /* Quick and ugly hack for VxWorks */

    // ugly hack because we don't have fscanf
    int fscanf(FILE* stream, const char* format, int* value)

    #else /* ugly hack to make it compile on RH 4.2 - WA */
    #include
    #endif

    /* ugly hack GRR */
    #if !defined(__GNUC__) && !defined(__common_include__)
    #define __attribute__(x) /* nothing */

    /* XXX argh, ugly hack to make stuff compile! */
    #define snprintf(BUF, SIZE, ...) sprintf(BUF, __VA_ARGS__)

    1. Re:Low hanging hack... by chiasmus1 · · Score: 5, Insightful

      After looking at those examples, it seems to me that C programmers can claim something is an "ugly hack" because it was not what they wanted or because someone else's code was messed up. The C code hacks where there because they could not see an elegant solution. Programmers for other languages probably do not even know that the code they are writing is ugly.

  10. Heavy duplication by x0ra · · Score: 3, Insightful

    Every single page has many occurence of the same "ugly" hack. If the folks who did the study had an ounce of legitimacy, they would have filtered for all those duplicates. If they had actually been competent, they would have done an in-depth study of all those "ugly hack". Of course, at this point, the article would have been worthless, but hey, they got their first page on /. ...

  11. Only meaningful if weighted by blind+biker · · Score: 4, Insightful

    These numbers should be weighted to the amounts of code in the various programming languages on GitHub. There may be lots of C "codefiles" with the "ugly hack" string in them, but there probably is a lot of C code overall on GitHub, too.

    --
    "The agriculture ministry is not in charge of Gundam" - Japanese ministry official.
  12. Re:Such is C by ShanghaiBill · · Score: 5, Insightful

    C Code EVERYWHERE has the most "ugly hacks"

    Ah, but C also has the most beautiful hacks.

  13. Define Ugly Hack by enter+to+exit · · Score: 3, Informative

    "Ugly Hack" very often means the programmer has done a smart thing, if not an exactly correct thing. Although sometimes an ugly hack is just an ugly hack.

  14. it's a C idiom by bugs2squash · · Score: 5, Insightful

    "/* ugly hack to... */" is a modest expression of pride describing concise, functional, readable and elegant C code in the same way as the term "//elegant approach to..." in C++ describes some borderline-insane misapplication of the STL with the incomprehensibility of perl and the verbosity of java.

    --
    Nullius in verba
    1. Re:it's a C idiom by Darinbob · · Score: 2

      Someone I know has a fast way to compute CRCs without tables that use only a single loop. The method seems broken to some people who want to see the traditional nested loops, and they insist that the code must be wrong and so it should be rewritten to be larger and slower. They probably think it's an "ugly hack". But when you do the math it all works out.

  15. Stupid by Mantrid42 · · Score: 2

    If a solution is stupid and it works, then it's not stupid.

  16. Re:Such is C by dgatwood · · Score: 4, Insightful

    C Code EVERYWHERE has the most "ugly hacks"

    C code is ugly hacks. But how else are you going to write an efficient ring buffer?

    --

    Check out my sci-fi/humor trilogy at PatriotsBooks.

  17. Re:Such is C by dgatwood · · Score: 2

    Depends. Is it wrapped with #if __i386__ || __x86_64__ and followed by a #else clause that contains code without the insane optimization? If so, it is elegant. If not, it is ugly.

    --

    Check out my sci-fi/humor trilogy at PatriotsBooks.

  18. Re:Such is C by cfalcon · · Score: 2

    I mean, a lot of code is only meant for one platform type. Not writing code compatible with obsolete processors is no great sin.

  19. Re:Such is C by lgw · · Score: 2

    Is a shortcut reliant on the finer details of a cpu - say for example the finer points of 2s complement arithmetic for type int - elegant (because it's cool) or an ugly hack (because it will probably break on some future architecture and is hard to read for the newbie)?

    C originally supported many architectures when it came to number representation - 1 vs 2s compliment, 9 vs 8 bit-bytes and so one. But the current architecture is a self-fulfilling prophesy: software expects it as it's been the nom for so long, and hardware is built that way because software expects it. It's not going anywhere until we get some architecture that breaks everything anyway, even at the highest levels of abstraction, like a quantum computer. Standardization benefits everyone.

    And if you're not comfortable with bit twiddling and bytewise struct layout, C probably isn't for you. Plenty of other languages in the world. Certainly if trivial stuff like (unsigned) -1 as a way to get max int bothers you, you'd probably feel more at home with high-level languages.

    --
    Socialism: a lie told by totalitarians and believed by fools.
  20. Re:Such is C by Darinbob · · Score: 5, Informative

    I think the key difference here is that when someone uses C they want efficient code to some extent. Small, or fast, or both. In other languages the culture is often "do it in the method approved by the sacred elders", and so ugly hacks may be forbidden and the slow/bulky method is preferred, according to the mantra "do not reinvent the wheel because thou are not as wise as the wheel builder". Or the presence of an ugly hack implies that the novice must clearly have been prematurely optimizing, for as the wise men say tomorrow is too soon to optimize.

    For example in Python the claim is that there's almost always only one way to do something, which either means ugly hacks are not possible, or else there's a lack of imagination amongst the programmers.

    The higher level a language is, the more it seems that the goal is to get stuff done fast rather than efficient or elegant.

    Finally, I have actually seen cases where code is labeled an "ugly hack" when it really wasn't a hack at all but rather not as tiny or or elegant as the author wanted.

  21. Re:Such is C by Anne+Thwacks · · Score: 4, Interesting
    Some people may not even remember 10, 12, 18, 24, 36 and 60 bit processors.

    For ugly hacks, you can't beat trying to optimise string ops 8 bit bytes on a 60 bit (Cray) processor - they natively used 6-bit chars, and packed four 15 bit instructions in a word, but required jumps to be aligned on a double word boundary to avoid pipeline stalls. Apart from assembler, I think C is probably the only language that could do it at all.

    (I it tried in Fortran and then realised there were better things to do in life).

    --
    Sent from my ASR33 using ASCII
  22. Re:Such is C by jandersen · · Score: 2

    Ah, but C also has the most beautiful hacks.

    Absolutely; which reminds me of a piece of C code I saw years back, and which I haven't been able to find again - perhaps somebody here would happen to know it. If I remember, it was an algorithm to find the best approximation to a straight line in a bitmap, given the two end points. What I remember is that it featured a rather eye-watering construction of two overlapping switch statements (?) which was syntactically legal, but perhaps shouldn't have been. Anyway, if it rings a bell, please let me know :-)

  23. Honest by snake_case_hoschi · · Score: 2

    Maybe C developers are just honest and experienced and name what it is.
    I won't accuse Java, with it patterns of patterns, when there is such a easy victim like PHP.

    PHP developers start their first line virtually with /* big hack */ and finish the last line with /* this is cruel */.

  24. Re: Such is C by luis_a_espinal · · Score: 5, Insightful

    Is that really something to brag about?

    Yes. If you don't understand why, you have no place in engineering.

  25. Re:Such is C by wonkey_monkey · · Score: 2

    it's been the nom for so long

    And it's everywhere, which makes it the om nom.

    --
    systemd is Roko's Basilisk.
  26. Re:Such is C by gl4ss · · Score: 2

    well, it turns out that they evaluated the ioccc repository.

    --
    world was created 5 seconds before this post as it is.
  27. Re:Such is C by michelcolman · · Score: 2

    I remember something similar, called Duff's device. Not two overlapping switch statements (I don't think that's possible), but an intertwined loop and switch. I don't see any references to lines in bitmaps, but it's entirely possibe that the same kind of construction was used for that purpose too.

    send(to, from, count)
    register short *to, *from;
    register count;
    {
            register n = (count + 7) / 8;
            switch (count % 8) {
            case 0: do { *to = *from++;
            case 7: *to = *from++;
            case 6: *to = *from++;
            case 5: *to = *from++;
            case 4: *to = *from++;
            case 3: *to = *from++;
            case 2: *to = *from++;
            case 1: *to = *from++;
                            } while (--n > 0);
            }
    }

  28. Re:Such is C by thogard · · Score: 2

    I've wondered if a software VM that runs (slowly) with a unusual architecture wouldn't be helpful for finding lots of C bugs. Old C wouldn't care if it was 60 bit with 9 bit char and middle-endian.

  29. Re:Such is C by thogard · · Score: 2

    Tom Duff was working on very high speed rendering code for Lucasfilm when he found that.

  30. It just shows the self awareness of C coders by 140Mandak262Jamuna · · Score: 3, Interesting
    They are just analyzing mostly comments, not code. Dijkstra gave the prescient warning ages ago: "Always debug the code, not the comment".

    C coders know when they are using ugly hacks and would take a moment to comment it or name the function with the term ugly hack. They realize it is not elegant and make a note so that future developers do not think it is a reference implementation worthy of replication and emulation. It is basically "this is probably not worth copy/paste, do a fresh implementation".

    Other language coders might be using these ugly hacks with pride not knowing anything better.

    --
    sed -e 's/Chuck Norris/Rajnikant/g' joke > fact
  31. Re:Such is C by jittles · · Score: 2

    Depends. Is it wrapped with #if __i386__ || __x86_64__ and followed by a #else clause that contains code without the insane optimization? If so, it is elegant. If not, it is ugly.

    I would say it would depend even more on whether or not the programmer profiled the code in question prior to making that optimization change. If there is no perceived or noticeable benefit to this optimization, then there is no reason to put something unreadable and platform specific into your code base. I know I worked on a project once where the dev manager wanted to rewrite an entire library in assembly because there was a perceived performance problem in the library. While some more senior devs started the work on that, I profiled the library and saw that it was just one function call that was accounting for most of the performance problems. I also realized that this function call was being made 1200 times per second when we really only needed to make this call once and then we could cache that result. There is no point in putting in any sort of clever hack or optimization until you've identified a need for it. Most modern C/C++ compilers are pretty good at optimizing your code for you.

  32. Re:Such is C by beelsebob · · Score: 3, Insightful

    Wrapping it in ifdefs doesn't make it elegant. It just makes it not a hack. Instead, it makes it ugly, and correct.

  33. Re: Such is C by wed128 · · Score: 2, Insightful

    The only reason you would have that code still running on those chips is because it's not forward compatible with something more modern.

    Or the bean counters don't want to pay the up-front cost of moving to something more modern. Many financial departments take a 'if it ain't broke' stance on computing hardware (and software!). many of them don't factor in electricity and maintenance costs, all they see is "$N Dollars for new server hardware? Why? That's rediculous!"

    It's why many COBOL programmers still have a job.

  34. Re: Such is C by luis_a_espinal · · Score: 2, Insightful

    The only reason you would have that code still running on those chips is because it's not forward compatible with something more modern.

    Or because those platforms are running fine for the job they are required to do, and thus replacing them do yield any additional value? Proper engineering and business decisions call for changing things when you have to, when you have a reason, a valid reason.

    If it ain't broke, don't fix it is not just an empty slogan.

    Otherwise someone would have transitioned to some much cheaper, more recent, commodity hardware, and saved the business a lot of cash.

    Why cheaper? What if the hardware is already owned? What if the systems therein are running just fine as expected? If it ain't broke, don't fix it

    That's definitely not good engineering, or something to brag about.

    If it ain't broke, don't fix it. If you don't get it, you are not cut for this business.

    Do we go about rewriting all those lines of working-fine COBOL code into whatever is in vogue nowadays? Do you change your working-condition car every time a new model comes?

    The only time you change something is if you have a reasonable expectations of gains, or if the cost of keeping something that old goes above a certain threshold. Otherwise, you let it be.

    You know you are doing it right when your creation becomes legacy, and it runs unchanged for years, many years, providing value and ease of integration. That is, when the thing you created delivers value AND does not give reasons to decommission, then you know you did your job right, and you can brag about it.

  35. Re: Such is C by luis_a_espinal · · Score: 2

    The only reason you would have that code still running on those chips is because it's not forward compatible with something more modern.

    Or the bean counters don't want to pay the up-front cost of moving to something more modern. Many financial departments take a 'if it ain't broke' stance on computing hardware (and software!).

    That should be your reaction by default because change always incur costs and risks. So better have a valid reason to incur in new costs and risks. The operation of something old has to be costly, or difficult, or subpar, or the change to something new has a real chance of decreasing costs, or the change is part of a larger, business-related strategy. Only then you have a valid reason to change.

    many of them don't factor in electricity and maintenance costs, all they see is "$N Dollars for new server hardware? Why? That's rediculous!"

    The cost of electricity and maintenance costs may appear high, but if they are constant and well known, then they imply minimum risk. You can account them for (and you should if you are running a business, ... otherwise, don't run a business.)

    If maintenance costs are limited to hardware support, you can ignore them. If it is software costs in terms of difficult deployments or software upgrades, then yes, that is the threshold over which a change needs to be initiated.

    But if you don't have that, then, don't fix what is broken. Let the cost be constant and the risk known (and ergo manageable.)

    It's why many COBOL programmers still have a job.

    No. It is because most COBOL systems are running within expected parameters. After running for years, if not decades, they are well known, their features and their glitches. They are battle tested.

    And given the large size of these systems, it would be ridiculous to re-write them into something else. Why? Because that implies unknown risks and costs. Risk is something that grows exponential to the size of the re-write. This is not hand waving, this is a fact.

    There is more to software engineering than writing code. It also involves delivering solutions and values and managing risk. Software engineering must be seen as integral part of a business process. Otherwise, we are not software engineers, but mere code monkeys throwing shit at the wall, packaging and selling whatever sticks.

  36. Re:Such is C by khellendros1984 · · Score: 3, Informative

    This is a complete and total lie. There may be one "good" way to do something (for values of good), but there are many ways of doing soemthing.

    It's not a "complete and total lie." The Zen of Python, "Python Enhancement Proposal #20", states:

    There should be one-- and preferably only one --obvious way to do it.

    It's one of the guiding principles of the language's design. Type "import this" into a Python command-line, and PEP20 gets printed out.

    --
    It is pitch black. You are likely to be eaten by a grue.
  37. Re:Such is C by lgw · · Score: 2

    I remember that! It's why the C standard allows a void* to be bigger than an int* - char*s on Cray's needed extra bits for sub-memory-address-addressing.

    --
    Socialism: a lie told by totalitarians and believed by fools.