Slashdot Mirror


Invented-Here Syndrome

edA-qa writes: Are you afraid to write code? Does the thought linger in your brain that somewhere out there somebody has already done this? Do you find yourself trapped in an analysis cycle where nothing is getting done? Is your product mutating to accommodate third party components? If yes, then perhaps you are suffering from invented-here syndrome.

Most of use are aware of not-invented-here syndrome, but the opposite problem is perhaps equally troublesome. We can get stuck in the mindset that there must be a product, library, or code sample, that already does what we want. Instead of just writing the code we need a lot of effort is spent testing out modules and trying to accommodate our own code. At some point we need to just say, 'stop!', and write the code ourselves.

158 comments

  1. Blame the Simpsons by SirGeek · · Score: 0

    Isn't a running joke that they've invented/done everything already ?

    1. Re:Blame the Simpsons by Immerman · · Score: 2, Insightful

      If only we had access to their code base!

      --
      --- Most topics have many sides worth arguing, allow me to take one opposite you.
    2. Re:Blame the Simpsons by Anonymous Coward · · Score: 0

      I apply that joke and say, "Then let's see if I can do it on my own, as well".

      This usually gets me out of analysis paralysis and gets me moving forward toward "Get R Done".

    3. Re:Blame the Simpsons by Anonymous Coward · · Score: 0

      Isn't a running joke that they've invented/done everything already ?

      That "everything" is a -really- big word, sort of like "infinity". Mortal Humans are not capable of things quite -that- big! 8-)

  2. About time... by jythie · · Score: 5, Insightful

    I do not see this topic brought up nearly as much, which worries me. I have worked on quite a few projects where the unwillingness to write functionality internally lead to excessive testing of external options and overuse of generic frameworks which not only increased the dependency/complexity of the project but often required just as many lines of code to use as just writing our own damn module would have.

    It feels like this is worst in the Java (enterprise) community, but that could be my imagination. Sometimes I think those programmers need their 3rd party instantiation taken away from them....

    And crap, looks like I have been moved over to slashdot-beta so I will probably never see if I get responses....

    1. Re:About time... by Anonymous Coward · · Score: 1

      Yep, you see this all the time in the iOS development community too. People coding my sticking together 100 slightly incompatible 3rd party libraries, and writing a bunch of glue code. Then hitting problems and responding to help solving them with "we can't do that, we're required to do it this way because the 3rd party library does it that way".

    2. Re:About time... by LQ · · Score: 1

      I've seen this. Most coders just glue third party stuff together with a bit of business logic. Nobody ever writes anything from bare metal, no complex algorithms, nothing. It just takes too long to test your own stuff. The Java world is so rich in libraries that you can always track down something that does what you need.

    3. Re:About time... by jythie · · Score: 5, Interesting

      One example that really drove me crazy was a developer who was tasked with putting in a 'retry' mechanic. Rather than simply working with the socket he pulled in some spring library that altered the socket behavior according to an external XML file and was praised by the lead for doing it this way. The code (java + XML) was several times longer than it would have been otherwise, plus a new library had to be included in the build/distribution, but it was still 'proper'. I think that was the breaking point for me working on that project.

    4. Re:About time... by itzly · · Score: 5, Interesting

      What do you do when some complex, external code has a bug ?

    5. Re:About time... by SirGeek · · Score: 2

      I've seen this. Most coders just glue third party stuff together with a bit of business logic. Nobody ever writes anything from bare metal, no complex algorithms, nothing. It just takes too long to test your own stuff. The Java world is so rich in libraries that you can always track down something that does what you need.

      And as a certifiable.. I mean certified tester, I'm the person who should be testing shit (and lets face it - Too much of the code out there IS shit)

      Let the coders code, Find a person who understands HOW to test and let them test.

      Also. If you're going to code using a language like JAVA, Write a freaking JUnit test and pass in Min, Max, Max and a mid range value to your methods/objects. Make 100% certain that it handles the data and errors that inevitably WILL happen. Then you have a quick way to REGRESSION TEST when you do a new release...

    6. Re:About time... by Bengie · · Score: 1

      Yep, nothing quite like a bunch of frameworks strung together in a way they were never envisioned and doing things that look the same on the surface but are quite different underneath. If you don't understand how a framework works, you'll never use it correctly.

    7. Re: About time... by Anonymous Coward · · Score: 0

      How long did it take him to integrate that library?

      Maybe your approach involved less code or config, but if your approach took, say, a week to implement, and his only took a day, he did in fact do a better job than you would have done.

    8. Re:About time... by Austerity+Empowers · · Score: 4, Insightful

      It's the penny-wise pound-foolish issue when engineers and developers are forced to be mindful of schedules and business objectives. We in essence become as brain damanged as our managers, and start behaving irrationally.

      It's well known we have absolutely no capacity to estimate schedule accurately, but we do have the "gut feel". If your gut says that it will take a day to implement functionality, assume it's a week and just do it, it's trivial. If it says 2 weeks, it's actually 2 months plus three squirrel years and a llama month divided by e^-jwt, maybe spend a day or two evaluating options. If it feels like 6 months, try very hard to find something OTS, because this may become the project you're working on when you retire (which in todays parlance means: you die in your swivel chair of old age).

      You could of course be entirely wrong. Last week in fact I decided modifying a script to do what I need would take at least a month, had an epiphany in the shower and had it done in 6 hours. Guts have failed even Homer Simpson. But unless someone comes along who has been-there-done-that with a better option, and who demonstrates he' serious by NOT trying to railroad you in a meeting, but in fact just walks by the cube and says "hey, use this", you're usually better off trying it out yourself. At worst you waste some time but learn the problem, and how to best evaluate other solutions that come up.

    9. Re: About time... by jythie · · Score: 2

      Sadly, it did not take a day. I really felt that the solution was not only more complicated but took longer to implement and test than the internal coding option would have. Granted the two approaches were not tried in parallel, but the amount of time and effort that was eaten up by taking the dependency injection route seemed quite excessive given the complexity of the problem being solved.

    10. Re:About time... by jythie · · Score: 1

      Even worse, when the framework is so general that there is really no envisioned usage outside 'all the things!' and you end up with something that requires just as much glue code as working with the standard API would have since it is no more special purposed than the original.

    11. Re:About time... by Anonymous Coward · · Score: 1

      A programmer who hasn't thought enough about the problem to test his/her code almost certainly hasn't thought about it enough to implement it or maintain that implementation either.

    12. Re:About time... by Kjella · · Score: 2

      Nothing is better than your own code. But given the choice between my predecessor's hairy ball of custom code and a hairy ball of clue between documented frameworks, I'm not so sure anymore. Because the other side to being generic is "will probably continue to function in a sane fashion if I tweak it a little" while one-off code tends to make a lot of assumptions that may have been true when it was written but falls apart in surprising ways when you try to change it. Unless your predecessor actually made clean, documented code but I know with myself that if you're in a hurry that won't happen. I had to walk a colleague through some systems we use once a year to update various coding schemes and such and to be honest it's an ugly mess. But we do it once a year and we're busy fixing the stuff we use often, so....

      --
      Live today, because you never know what tomorrow brings
    13. Re:About time... by blue9steel · · Score: 3, Insightful

      File a bug report.

    14. Re:About time... by Lodragandraoidh · · Score: 1

      Programmers have to take more responsibility and think holistically about what they are building - and integrate testing to validate their assumptions against the hard light of the real world. To be a great programmer, you should know how to test and build tests and test rigs as needed. To be a great tester, you should know how to code - so you can automate what you're testing. I think the lines have to blur - a firewall between the two only leads to silos, and limits what can be done if they were to work seamlessly (the quote attributed to Aristotle applies here, "the whole is greater than the sum of its parts").

      Of course, in many development shops the 'just a programmer' mentality is baked into the whole process - so as a developer you might feel that you are stuck. That being said, if you know better, then it is in the interests of your business if not yourself to champion the issue and effect change.

      --

      Lodragan Draoidh
      The more you explain it, the more I don't understand it. - Mark Twain
    15. Re:About time... by itzly · · Score: 3, Insightful

      And then it gets fixed right away ?

    16. Re:About time... by _xeno_ · · Score: 1

      It feels like this is worst in the Java (enterprise) community, but that could be my imagination. Sometimes I think those programmers need their 3rd party instantiation taken away from them....

      I once had someone rip out a stream copy I'd written (int r; byte[] buf=new byte[1024]; while((r=in.read(buf)) >= 0) { out.write(buf,0,r); }) and replace it with a third-party library, because "we shouldn't reinvent the wheel."

      Granted, I sort of agree, it's ridiculous that such a common thing isn't part of the standard Java library, but it isn't, and we didn't really need to add another 1MB of library dependencies just to do that...

      --
      You are in a maze of twisty little relative jumps, all alike.
    17. Re:About time... by ADRA · · Score: 1

      Meh, having the same number of code lines (highly dubious) then realizing that you implemented something wrong is just a waste of time for everyone. Why so quickly dismiss the expertese of the people writing (and maintaining) these libraries who in all likelyhood have much higher expertese in that one area of development? Instead, you write an in-house job that takes significantly longer (even if the LOC -may- comparible) then you realize it doesn't work. Your opinions are to bite the bullet and replace using off the shelf, or fight through the crap wasting more time and money.

      All the above paragraph of course depends on what you're writing. If you can write the code in a day or two, I'd say its acceptible to eschew known libs'frameworks. If you're writing a very very tiny chunk of an existing library, you may be better served not dealing with the cognitive load and learning curve to introduce the new library. But, you also have to ask yourself if your currently fragile and developing system will ever have its requirements change and if so, will your implementation meet those future demands (Yes slippery slope and all that). Most of the time, built-frameworks were written by many hands for many different projects and they learned to support areas of expansion which are probably most likely to occur in the average project.

      On the flip side, there are times where libraries and frameworks should be looked at skeptically, and it usually revolves around active engagement. If there isn't much or any active development on a product, its either reached its peak goal (something like log4j perhapse is a good example) vs. some dude's web templating engine that may have been brilliant when it was written 5 years ago, but has long been abandoned. It may end up being the perfect fit for your project and team, but it means having to learn and support that potentially unknown blob of functionality. That's when a library/framework can become a boat anchor, especially when it becomes a core function of your system.

      From personal experience, I started a junior dev job on a several million line project where we were so highly coupled to a vendor's library that when vendor decided to stop supporting it, we were left dealing with the countless defects that came from it every time we needed to use it differently (sadly more often than anyone wanted). Lots of drama, blah blah, but by the time I left the company, little was done to fix it, which isn't surprising since they allowed the library in to begin with.

      --
      Bye!
    18. Re: About time... by Anonymous Coward · · Score: 1

      Only if his approach also required the exact same amount of maintenance effort. Typically this kind of 3rd party library integration is very high maintenance overhead.

    19. Re:About time... by PRMan · · Score: 1

      JavaScript is definitely the worst. AngularJS usually takes more lines of code to integrate than if you had just written it yourself in JQuery. And it doesn't scale worth a crap where the JQuery scales great.

      --
      Peter predicted that you would "deliberately forget" creation 2000 years ago...
    20. Re:About time... by ADRA · · Score: 1

      I know this post is supposed to be considered a critisism, but I'm not seeing it. Its exactly what should be done. Minimize the amount of work necessary to complete your work. I am the laziest programmer on earth, and if I can save an hour by dropping in a well tested cleanly interfaced library that meets my requirements, I'm going to do it.

      "Nobody ever writes anything from bare metal, no complex algorithms, nothing"
      No, people don't re-invent the wheel that already exists because we are too busy doing work that maximizes productivity. If I want to circle jerk about challenging and personally satisfying code, I do that at home because at work I'm paid to build. I don't get paid to pat myself on the back.

      --
      Bye!
    21. Re:About time... by Anonymous Coward · · Score: 0

      Not-Invented-Here syndrome comes from people wanting to maintain control over every micromanageable aspect of a project. Intented-here (being the reverse) is when there is over-dependance on third party libraries.

      Linux, itself, is an example of not-invented-here syndrome, where there is no "one Linux" reference build, it results in a lot of forking of things for no other reason than "I need to make it work with my stuff, and simply writing a framework/wrapper won't cut it", the closest thing there is to a reference build in Linux-land is Redhat. That's not a desktop build by even the slightest.

      FreeBSD get's it right, where it offers one standard build, and forks of it are based on the reference build (eg FreeNAS, PS4)

      Getting the OS out of the way, however, lies the second most common abuse of libraries... the GUI system. FreeType, ImageMagick, GD, and such link to so many damn libraries, even when I'm running it as a headless server with no X-window system, it insists on installing the entire damn xwindow system. Quit doing this. I'd rather cut the image processing library out entirely and write exactly what I need for the two instances I might need GD's functionality just to get image dimensions of PNG's and JPEG's.

      The Invented-here problem comes up stupidly often on the "web" side of things. Too many people use jQuery to do something in 10 lines, that would take them maybe 12 lines to do manually. As I keep telling people I deal with, "do not use a library unless you need the core functionality of the library", if you only need something that the library doesn't actually do (which is what jQuery is... is a wrapper over native functionality with some fallbacks for missing functionality) then you should be doing it yourself. Healthcare.gov got into trouble with that. They basically dumped every single jQuery bell and whistle onto the site for no damn reason at all. No jQuery should have even been needed just to fill out and verify fricken forms.

      With the web, you usually need to use whatever is "current best practice" because even if you google search "how to do X" , you will get 30 different examples, all about 6 months apart, showing how to do X using the current state of HTML/Javascript. You could do a bubble-sort back in 2002 using the native Javascript then, but if the page was more than 1MB, it would take a good 10 minutes. Do it now and it takes less time than it does to blink. Using the exact same strategy. Lookup how to do this online and the first few examples will point to jQuery examples involving loading all the data into arrays and spitting it back out. Which is WRONG.

      Anyway. The current "best practice" is to google search for what is the current solution, and then test that solution. If it doesn't work, go back 2 years and try what was recommended previously. Ignore all the jQuery answers. If the previous answer doesn't work, go back a maximum of 5 years and if nothing works for you, write it yourself. Javascript libraries are the worst kind of code bloat because you must use the entire library to justify it. It's not like a C compiler which will throw away unused code.

    22. Re:About time... by Greyfox · · Score: 4, Insightful
      Or is just complex and unfamiliar. The problem with these frameworks is they work great when they work, but you only ever see them working because they've been published with the most trivial example. When you actually start trying to do things with them, you have to know implementation-level details of the framework in order to make it work for you. By the time you've invested all that time, you may as well have written something less generic that actually does what you want.

      Oh and when I say they work great, I was kind of lying. I have a favorite example. A while back a developer I was working with wrote some Spring/Hibernate code to pull records in from the database and print a billing report. Soon as he handed it off to me, I thought "What happens if I throw 100000 records at this?" Well what happened is that it crashed. So I cut the number in half and it still crashed. Down around 30000 records, it started taking about half an hour and THEN crashing.

      Turns out he was using the framework to pull all the records from a couple of different tables and doing the join in Java. The SQL join I wrote to test the code took a couple of minutes to run on a million records and returned the correct output. On a hundred thousand it was neighborhood of 10 seconds.

      Now the Spring/Hibernate people will be quick to point out that you can edit some XML file or something and make the framework do a join for you, thus solving that problem. And that is true, if you know a fair bit about the framework. And you'd have to know a fair bit about all the other frameworks they used on that project, too. By the time you got done learning all the frameworks they were using to the level of detail where you could actually be that effective with them, you could have written the application they'd built 10 times over.

      Fortunately this story has a happy ending. The team ended up deciding to run the original developer's code against the billing database several times a day so that it would never have so many records to process that it would crash, thus solving the problem once and for all!

      --

      I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

    23. Re:About time... by Wootery · · Score: 1

      JAVA

      It's a small point, but a pet-peeve of mine: the language is not, and to my knowledge never was, called "JAVA".

      It's "Java".

    24. Re:About time... by Anonymous Coward · · Score: 0

      Revert to the previous package version and you discover it via an automated integration test

    25. Re:About time... by Greyfox · · Score: 1

      I'd be happy to just go into a company and write unit tests for their code, but in most cases that would require dictating huge design changes to a lot of their code. If I take over a code base, I like to start writing unit tests for new development and bug fixes (Write the test prior to fixing the bug.) Last project I worked on was an old C code base with hundreds or possibly thousands of global variables. In some cases there were multiple global variables for the same value, and they got used in different places and often had to be set to different values in order for the code to work correctly. It might not have been too bad to go through and make sure it was just passing everything it used, but it was a lot of code and it kind of all needed to be changed at the same time. Much too much of an effort for the team that was working on it.

      --

      I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

    26. Re: About time... by Anonymous Coward · · Score: 0

      You're making a big assumption there. You're also conveniently ignoring that custom code has maintenance overhead, too. At least third party library code often has one or more third parties that can help with such maintenance. With your own code, it's generally up to you to maintain it.

    27. Re:About time... by Anonymous Coward · · Score: 0

      I call 1-800-642-7676. As a matter of fact, it's needed so much I put it on my speed dial.

    28. Re:About time... by Anonymous Coward · · Score: 0

      It feels like this is worst in the Java (enterprise) community, but that could be my imagination. Sometimes I think those programmers need their 3rd party instantiation taken away from them....
       

      I understand this view. As a Java programmer I use many thirdparty libraries. Why? Because I don't have the resource to test code that these libraries implement. So I could write my own encryption stack, but if I only have two months to implement the project, I won't get anything else done if I'm putzing around trying to implement something that someone has already done better.

      A criticism I have about C programmer turned Java programmers is that they tend to reinvent the wheel and they honestly believe they've done a better job of it. Why did you write a sort when the object you're sorting on has a decent sort method? Why did you reinvent the Hashtable?

    29. Re:About time... by RabidReindeer · · Score: 1

      And then it gets fixed right away ?

      Depends on the product and vendor (using the term to mean any software source, not just commercial ones). Some vendors will ignore you, some will abuse/riducule you, some will put it on the list for next quarter's release and some rare precious few will personally deliver an overnight repair.

      At least in open-source, if they don't you can try and fix it yourself.

    30. Re:About time... by duck_rifted · · Score: 1

      In your opinion, is the enormous number of software patents and too-high number of software patent trolls (greater than zero) partly to blame for this?

    31. Re:About time... by Bengie · · Score: 2

      Turns out he was using the framework to pull all the records from a couple of different tables and doing the join in Java

      Who gave him direct table access?! They should be fired!

    32. Re:About time... by jythie · · Score: 1

      I think the key piece is 'it depends on what you are writing'. Use of 3rd party solutions or internally developed ones is something that needs to be evaluated on a case by case basis, with various cultures and companies within tech, all too often, defaulting to one path or the other. I tend to feel that the pendulum has swung a bit too much, with 'not invented here' becoming such a boogie man that an increasing number of projects and defaulting to using external dependencies unless you can justify breaking away from that.

    33. Re:About time... by StikyPad · · Score: 1

      Well there must be a balance between code reuse and custom solutions. To use the trusty car analogy: a car manufacturer doesn't create a new battery for every vehicle (or, indeed, make batteries at all). Unless it's top end, they don't create a different engine for every car, or a different transmission.

      If you're making top-end software, then sure, spare no expense. But most projects will suffice just fine using existing libraries. Knowing when to go third party and when to stay in-house is a skillset that a good lead will have.

    34. Re:About time... by pla · · Score: 1

      Minimize the amount of work necessary to complete your work. (emphasis mine).

      Some of us aspire to a bit more than shuffling tasks from our in-box to our out-box. Some of us want to produce functional, resilient, maintainable code. Some of us want to actually understand how it works, not just trust that it works. Some of us want to write code, not the compiled equivalent of shell scripts that do nothing themselves but pass inputs and outputs between different external blobs.


      I'm paid to build. I don't get paid to pat myself on the back.

      I get paid to meet an SLA, not just to say "well it compiled, didn't it?" and throw my hands in the air with vague complaints about bugs in library X. If I build some fragile piece of shit out of a dozen other fragile pieces of shit all held together by spit and string, I haven't done my job, no matter how quickly I did it.

      Yes, "not invented here" counts as its own problem; it surprises me to hear that its opposite can count as a problem, though, because why does any organization with that culture employ programmers in the first place?

    35. Re:About time... by Anonymous Coward · · Score: 0

      Yup. I'm a lead embedded developer. I cringe when people include a massive 3rd party library and use 0.01% of it. That is not ever acceptable, especially in embedded-land, but cheapo careless developers do it anyway.

    36. Re:About time... by Anonymous Coward · · Score: 2, Interesting

      What if the thing you write that substitutes for the missing external dependency has ten thousand times as many bugs?

      People always underestimate the investment in software development. I'm sure most people think someone pulls up a chair, types some code, puts it on a floppy disk and KAPOW it's on the market in every device. Nope. We have testing teams, build specialists, cross-platform planning, packaging requirements, release processes, A/B testing, refactoring, branching, madness.

      Any time you write a piece of code there are leagues of people involved who will have to deal with your code, whether you know who they are or not (and most of them you won't know). The problem with code is that we believe we can handle it and there'll be no problem. The code will just work first time for everyone, everywhere, on every platform. We think we're rockstars and our guitars are out of tune just a little.

      Having access to the code can be as dangerous as *not* having access to the code for a naive or time-pressured programmer. We might know not to put business logic in the GUI, but the 19yr old new hire doesn't necessarily know that yet. Tomorrow you're hiring a 14yr old and the day after that it's going to be some 8yr old girl-wonder from India who aced the Microsoft certification. The software industry skews young and the first thing that gets cut is rigorous testing process and quality control. As an older programmer I now spend the majority of my time cleaning up the broken crap left behind by the last pack of fly-by-night rockstars.

      Get off my lawn.

    37. Re:About time... by Anonymous Coward · · Score: 0

      "To use the trusty car analogy: a car manufacturer doesn't create a new battery for every vehicle (or, indeed, make batteries at all)."

      You haven't been ah... reading the news much, lately, eh?

    38. Re:About time... by gmriggs · · Score: 1

      Fix it and submit a pull request

    39. Re: About time... by Anonymous Coward · · Score: 0

      Sure it was - Sun used this logo and capitalisation for a long time, and it was on the cover of many Java books.

      http://cnet1.cbsistatic.com/hub/i/r/2009/12/21/6488b6ca-fdb8-11e2-8c7c-d4ae52e62bcc/resize/270xauto/943a976b4e4d2c0b47d63c82af90149e/sun-java-logo.jpg

    40. Re:About time... by SuperKendall · · Score: 1

      You track it down an fix it which still takes less time that writing the whole complex thing yourself from scratch (where you'd have even more bugs to track down). Then you can submit the fix back to them.

      That said, if you start seeing more than a few bugs it's probably better to cut your losses and drop that third party framework. I've done that a few times.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    41. Re:About time... by Anonymous Coward · · Score: 0

      Many coders don't have the skill to code complex solutions themselves. So they jump on third party components and use "time savings" to justify it to management.

      Real coders prefer to roll their own. The problem that real development shops should face is the need on the part of management to reign in the creative impulse of their team, and force them to accept the occasional third-party component when it makes sense to do so.

    42. Re:About time... by drkstr1 · · Score: 1

      Just do what I do. Never use a 3rd party library, unless you are willing and able to fork the project to build from source internally. BSD/MIT FTW

      --
      Fanboy Status: Apache Flex, C#, Eclipse, KDE, Pirate Party, Ron Paul, Slackware, Windows 7
    43. Re:About time... by puzzled_decoy · · Score: 1

      See, this right here is the thing. Sure, you can implement a library yourself. Sure, your implementation might be more closely fitted with the problem you need to solve. But is your code cleaner? Is it more extensible? Is it well-documented? If you have all those things, you can *begin* to compete with a framework that does the same thing. The framework still has a major advantage: people outside of *you* can come into the project knowing the framework. Everyone will have to learn the thing you wrote from scratch.

    44. Re:About time... by Anonymous Coward · · Score: 0

      ...crap, looks like I have been moved over to slashdot-beta so I will probably never see if I get responses....

      If you would just Black List slashdot-beta like everyone else you wouldn't have these problems.

    45. Re:About time... by Dr_Barnowl · · Score: 1

      *ding*

      > At least in open-source, if they don't you can try and fix it yourself.

      I've had *excellent* support from OSS projects. I've had lead developers personally upload patched builds to my FTP server.

      But I've fixed bugs for myself more. Even having the source is often enough to pin down the problem without havign to patch it.

      That's why it's my policy that all things being equal (or even a little unequal) to choose open-source components.

    46. Re:About time... by DarkOx · · Score: 1

      It might not have been too bad to go through and make sure it was just passing everything it used, but it was a lot of code and it kind of all needed to be changed at the same time.

      I say this as someone who is generally sold on TDD being the best approach. At first it seem tedious never being able to write more than an handful of code line before having to stop and write a test, but the ultimate freedom it gives you to fearlessly refactor is worth it.

      On the other hand I would never (have learned the lessons of trying) attempt to go back and create tests for a software project like the one you describe; and as a general rule anything substantial which does not have them.

      It sounds like you are doing lots of shotgun surgery to nurse some spaghetti code along. One of the things TDD does for you is make you keenly aware of all the cross-cutting, coupling, and cohesion in your code. If you have organized something badly you discover its difficult to author a test for, that's clue something is wrong.

      Trying to go back and write tests for code that isn't well organized is FAIL you won't write good tests because you can't and if you don't have good test coverage "passing everything" does not really tell you things are alright. Its painful pointless wheel spin.

      Just live with it. Address the compiler warnings, try and diagram us much process flow an interactions across those globals as you can so you have a good picture to look at why you plan groups of changes, do your best and hope the QA test guys catch anything you break prior to release.

      --
      Repeal the 17th Amendment TODAY! Also Please Read http://www.gnu.org/philosophy/right-to-read.html
    47. Re: About time... by Anonymous Coward · · Score: 0

      The problem is that with the third-party library, not only do you have to read the code, if you want to maintain it you also have to grok the library. For a poorly-documented library, this sometimes winds up meaning you have to read the library's code as well.

    48. Re:About time... by Lodragandraoidh · · Score: 3, Interesting

      I've told this story elsewhere, but it applies directly to this issue, so I'll recap in short:

      Vender is contracted to create an integrated support application for large sums of money ($millions) over a 6 month period; contractor chooses an obscure commercial java framework to build the system on. The application is delivered and appears to work fine for several months, then starts getting sluggish, then a month later the application locks up - and has to be restarted. This progressively gets worse, and is asymptotic with the growth of the underlying customer base - and soon becomes completely useless - shutting down within minutes of being started with a memory exhaustion error.

      The main problem we found was the equivalent of a memory leak in Java. The code would instantiate objects based upon the framework in the main loop, and they would never go out of scope. Furthermore the code imported hundreds of libraries that were never used - further impacting clarity and understanding of what the thing was doing.

      To make a long story short, since this was already in production and now there was even more pressure to get a solution in place fast (and all the lawyers threats in the world can't replace a knowledgeable developer) - we rebuilt the whole system using perl in a little over 1 week. That solution is still running today - even as we've scaled orders of magnitude since then.

      So - to your point - this stuff really does happen, and wastes godawful amounts of time and money, when a more simpler home grown solution would do just as well, if not better.

      --

      Lodragan Draoidh
      The more you explain it, the more I don't understand it. - Mark Twain
    49. Re:About time... by Half-pint+HAL · · Score: 1

      people don't re-invent the wheel

      That's the key phrase -- don't reinvent the wheel. But is coding "inventing" or "building"? Because sometimes it's quicker to build your own wheel or whittle your own peg than go out and hunt down one the right size for your needs.

      --
      Got them moderator blues I blieve I walk out the do', With these mod-points I been gettin', I 'most never post no mo'
    50. Re:About time... by Anonymous Coward · · Score: 0

      You're doing it wrong . . . .

    51. Re:About time... by Jane+Q.+Public · · Score: 2

      Yep, you see this all the time in the iOS development community too. People coding my sticking together 100 slightly incompatible 3rd party libraries, and writing a bunch of glue code. Then hitting problems and responding to help solving them with "we can't do that, we're required to do it this way because the 3rd party library does it that way".

      Exactly. I don't mind including a good tool that does its job well and leaves everything else alone. But I've run across at least 2 very sad "syndromes" that add-ons sometimes cause:

      The first syndrome is represented by libraries that take over everything and unnecessarily restrict your otherwise legitimate actions, because they ASSUME everything will be done with or through them. 2 great examples come to mind from the Ruby world: Formtastic, and Devise.

      I dumped Formtastic because it insisted on generating its own <ul> for the form, and <li> tags for all the elements, which prevented you from laying out your forms your own way. Trying to wrap elements in named or classed <div>s so you could do your own layout resulted in invalid HTML. Maybe Formtastic has improved since then, I don't know. I discussed this problem with the author, and his response was "Why would you want to do that?" Which just illustrates my point.

      Devise is way too intrusive and makes too many assumptions. Besides being based around unproven Bcrypt (which has never been fully security audited), it tries to force you to do everything else its way, too. It may be "customizable", but in my experience that's far more trouble than it's worth. My opinion is that most people who use Devise do so because they don't understand how to do it themselves.

      The second syndrome is "copy and paste development". This irritates me to no end. "Why don't we just use X? It already does that." "Well, because it's like shooting an ant with a cannon. A cannon that also wants to wash your dishes."

      The right tool for the right job. Often, especially for small jobs, it's vastly preferable to roll your own tools, and do it your way.

    52. Re: About time... by Darinbob · · Score: 2

      I think there's a form of superstition out there to never write any code that's not glue code. Some of this is from a phobia about reinventing the wheel, so that people will waste time in order to avoid wasting time. But some also comes from thinking that third party code will be correct and so increase overall reliability (no matter how much flimsy duck tape is required to attach it).

      I see managers with this thinking, it's as if they are assuming their own staff are a bunch of morons so it's safer to rely on a third party. The worst is when the boss spends a lot of money on a third party library that you could have written yourself, and which you end up spending most of your time fixing it yourself instead.

    53. Re: About time... by Darinbob · · Score: 1

      Third party code can be harder to maintain. The third party often will not help you out, even if you do have an active support contract the support that you get is substandard. If you're Cisco they might help you out, if you're a tiny company with 50 people they'll ignore you and put minimal resources into resolving your problem.

      I swear I am not making this up, but I called support once for one component and told them about the bug and details of the fix I came up with for it. They told me that if I already had a fix then why was I calling them.

      That's one reason I think that the most popular libraries are probably safest, because others are more likely to find the problems before you do.

    54. Re:About time... by Darinbob · · Score: 1

      No, probably 6 months to a year before they tell you that they can't reproduce it and close your ticket.

    55. Re:About time... by Darinbob · · Score: 1

      Most non-open source for embedded systems still comes with source code. It's almost mandatory because you will have to fix it eventually, and they sometimes won't supply object files in a format you can use.

    56. Re:About time... by Krishnoid · · Score: 1

      Depends on the product and vendor

      And the customer -- when large enough, they can sway a vendor's maintenance priorities.

    57. Re:About time... by Anonymous Coward · · Score: 0

      I do not see this topic brought up nearly as much, which worries me. I have worked on quite a few projects where the unwillingness to write functionality internally lead to excessive testing of external options and overuse of generic frameworks which not only increased the dependency/complexity of the project but often required just as many lines of code to use as just writing our own damn module would have.
       

      You lack of commas could lead to people passing out if they read your statement out loud. But more importantly...

      Cynical me thinks: So have you written your own a) package distribution system, b) distributed software change control management system, or c) are a systemd core developer?

    58. Re:About time... by Anonymous Coward · · Score: 0

      Yes, these Java frameworks for making business websites can be ridiculously inefficient. I worked on a bioinformatics website that tried to use one of these frameworks. Using the framework, a typical calculation would take about 10 hours. But then I wrote some simple custom code to do the calculation more directly - and the same calculation would complete in about a second.

    59. Re:About time... by Anonymous Coward · · Score: 0

      Getting the OS out of the way, however, lies the second most common abuse of libraries... the GUI system. FreeType, ImageMagick, GD, and such link to so many damn libraries, even when I'm running it as a headless server with no X-window system, it insists on installing the entire damn xwindow system.

      Well, that's more of binary distributions having to choose between supporting everything or minimal dependencies, the only alternative is compiling everything from source with custom flags.

      The Invented-here problem comes up stupidly often on the "web" side of things. Too many people use jQuery to do something in 10 lines, that would take them maybe 12 lines to do manually. As I keep telling people I deal with, "do not use a library unless you need the core functionality of the library", if you only need something that the library doesn't actually do (which is what jQuery is... is a wrapper over native functionality with some fallbacks for missing functionality) then you should be doing it yourself. Healthcare.gov got into trouble with that

      Also this, I often find jquery imported just to do document.getElementBy* a bunch of times.

    60. Re:About time... by that_itch_kid · · Score: 1

      Or is just complex and unfamiliar. The problem with these frameworks is they work great when they work, but you only ever see them working because they've been published with the most trivial example. When you actually start trying to do things with them, you have to know implementation-level details of the framework in order to make it work for you. By the time you've invested all that time, you may as well have written something less generic that actually does what you want.

      Wow, I guessed almost immediately that you were talking about Hibernate. No documentation for complex behaviour or advanced features, or where there is documentation, it's out-dated by several versions, sparse, and occasionally plain wrong. The options for sorting out problems are:

      • Read the Hibernate code to figure out what the hell it's trying to do; or
      • Search around, asking questions, find out nobody has come across your problem, or it was filed as a bug in the library in 2007 and never fixed, or the solutions listed aren't suitable or don't work, and end up reading the Hibernate code anyway.
    61. Re:About time... by Anonymous Coward · · Score: 0

      then it is open source, (not non open source) just not free

    62. Re: About time... by Altrag · · Score: 1

      it's as if they are assuming their own staff are a bunch of morons

      Its not just that. Its that they tend to believe something along the lines of the Linux mantra -- with enough eyes, all bugs are shallow.

      If you have your team of 1 or 2 or a half dozen programmers, you have up to a dozen eyeballs watching that product (and most of the time, it'll be divided up so that those 6 programmers aren't even examining the full code base.)

      There's an assumption out there that because a third party library is in use by other people, those other people are doing a lot of the testing and debug work for you thus saving you time and money.

      It fails to account for two things though:
      1) How many of those "other" users are going to be using the exact same features you are and in the exact same way.
      2) How quickly the library developer gets around to fixing bugs once they're found.

      #2 seems to be especially problematic. There's a lot of libraries out there that some company built, said "hey this could be useful to other people lets make some $$ off of it!" Then moved on to other things and the maintenance of the library drops down to "John happened to finish what he was working on this week and didn't feel like starting a new (real) project."

    63. Re:About time... by Altrag · · Score: 2

      for large sums of money ($millions) over a 6 month period

      ...

      rebuilt the whole system using perl in a little over 1 week

      And I thought I was bad at estimates..

    64. Re:About time... by Altrag · · Score: 1

      Nothing is better than your own code.

      Go review code you wrote 2 years ago. Its almost certain your code isn't all that great either when you get to look at it from afar. But like most forms of filth in the world, you don't really notice the smell while you're stewing in it.

    65. Re:About time... by Greyfox · · Score: 1
      Funnily enough a lot of the time I'm talking about Ruby on Rails and Ruby's Active Record. They're a very good example of a project that says "Oh look how easy it is to build a web page with our thing!" with a trivial example. Last time I looked at it, I started having to look at implementation-level details of the packages almost immediately. I also remember it being an awful lot of code for what I needed. I really only needed about 10% of the functionality Rails provided, and had no way to scale down to just that.

      Funnily enough I went through that phase where liked ruby, but am now back to the point where I'd rather just use perl with "use strict;". If I'm going to do OO development, I'm going to do it in C++ or Java.

      --

      I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

    66. Re: About time... by Anonymous Coward · · Score: 0

      I worked with these teens. The trick is code review and education. Works fine.

    67. Re: About time... by Anonymous Coward · · Score: 0

      This used to happen to me but after 10 years of programming my old code started looking good. It means that I am no longer improving.

    68. Re:About time... by Anonymous Coward · · Score: 0

      Sure Java framewords are exactly like that.

      Sane frameworks in sane languages have no need to understand implementaion-level details.

      Java sucks ass.

    69. Re:About time... by Anonymous Coward · · Score: 0

      I have been working on numerous RoR apps since version 1.2 and have never needed to know implementation detail of any part of RoR.

      Rails is very configurable. You can remove whatever functionality you want and Rails doesn't care. ActiveRecord is part of Rails but it has no issues with removing it and using whatever you want. It is also trivial to bring in selected pieces of Rails libs into a non-Rails app.

      If you are only using 10% of Rails then Sinatra is what you need and you can bring in any other libs that you need, including bits and pieces of Rails.

      If you are only using 10% of Rails and need implementation details, than you are seriously fucked-up.

      You must suck ass.

    70. Re:About time... by Anonymous Coward · · Score: 0

      So who tests the tests?

      Testing is important but vastly overrated.

  3. Quality of the solution. by digsbo · · Score: 4, Insightful

    It comes down to the quality of the solution, versus the added headaches of managing dependencies. It's not a religious issue, but one of experience and engineering. It's also a good idea to make sure that if you're inventing something that someone else might eventually provide, you at least loosely couple it, so it can be swapped out later.

    With those thoughts in mind, don't get stuck in analysis paralysis. Use judgment and move on.

    1. Re:Quality of the solution. by ihtoit · · Score: 1

      whatever happened to the time when code stood on its own with the ONLY dependency being an interpreter?

      Or am I just that OLD??

      --
      Political debates have me rolling my eyes so much I think I got optical whiplash. I should sue. - Foamy The Squirrel
    2. Re:Quality of the solution. by BarbaraHudson · · Score: 1

      whatever happened to the time when code stood on its own with the ONLY dependency being an interpreter?

      Or am I just that OLD??

      Whatever happened to the time when code stood on its own with the ONLY dependency being the underlying CPU and OS? And yes, we're both getting old(er) - but that's better than the alternative.

      --
      "Transparent" is a shit show that trades on every stereotype going. A man in drag is NOT a transsexual.
    3. Re:Quality of the solution. by jythie · · Score: 1

      Yep, you are that old ^_~

      In modern development one can go through an entire project without using any of the language's standard libraries or even, in extreme cases, the language itself. If you ever want to see a frightening example of this gone too far, take a look at over uses of Apache Camel or even Spring, where you can write entire systems using code embedded in XML files and that weird 'conditional logic as constructor arguments' camel allows for.

    4. Re:Quality of the solution. by BitZtream · · Score: 3, Interesting

      Do you want to keep up with the world around you?

      I was having a discussion with a programmer who is 50 (I'm 38) the other day about the time when you used to be able to write an OS entirely by yourself, and how we both miss that time. It wasn't trivial, but the OS was that small, it could be done. Remember, Linux is just a kernel, not 'an OS', and Linux hasn't been the work of one make for 20 years at this point (Not trying to discount what Linus has done, but he has help :).

      Today, if you want to be able to produce useful software with sufficient features for most purposes, you can't write it all yourself. Well you can, but you'll be the last person to bring your 'whatever' to market/public view and they'll be 20 others that have more features and more shiny than you because they relied on some other libraries. A single person isn't making Windows 3.1 or newer in any realisticly useful time frame. Windows 95 is well beyond the scope of one person.

      Even a good modern text editor isn't going to be written from scratch, you've just not got the time to write all the basic editor features and things like a regexp engine. Yes, you CAN, but not while staying relevant.

      Sure, there are places where you can get by without dependancies or MUST have no dependencies. Embedded work and Cryptography are two things I have experience with where re-implementing the wheel isn't uncommon due to various constraints placed on you. Note: Not reinventing, reimplement

      With that said ... I'm writing an OS by myself. It will never do anything impressive and no one will ever use it, but it will exist and has already taught me why I hate the x86 processor line in about 18,000 different ways :)

      --
      Persistent Volume manager for Kubernetes - https://github.com/dwimsey/openshift-pvmanager
    5. Re:Quality of the solution. by digsbo · · Score: 1

      The same thing that happened to the time when the only tool you needed was a rock: Cumulative technological progress.

    6. Re:Quality of the solution. by frank_adrian314159 · · Score: 2

      It will never do anything impressive and no one will ever use it, but it will exist and has already taught me why I hate the x86 processor line in about 18,000 different ways :)

      it worries me somewhat that you hadn't figured out that last bit before you started the project, but I wish you luck anyway.

      --
      That is all.
    7. Re:Quality of the solution. by ADRA · · Score: 2

      An OS? God, you're such a young lazy punk. Get the hell off my lawn!

      --
      Bye!
    8. Re:Quality of the solution. by jythie · · Score: 1

      While I would not describe it as a religious issue, I would describe it as a cultural issue just as much as an experienced/engineering one. Experience is rooted in what has been done, so often it can be pretty reactionary regarding what mistakes have gone out of style and which ones have been forgotten long enough to be acceptable again.

      This is why I tend to point to Java's dependency injection as an example of the pendulum swinging too far the other way. Much of it was developed as a reaction to what was being done at the time, but also in the faded memories of what was done before that...

    9. Re:Quality of the solution. by Anonymous Coward · · Score: 0

      Writing the software component with the goal of stripping it out and shipping it as an isolated component...

      I know plenty of companies that believe they can solve every problem the universe has ever faced but shipping components under the umbrella of another project. It never worked. Unless you in-source a dev team to handle that component it's very quickly going to become the runt of the codebase that no-one likes.

      From the other side of the picture there's going to be a software developer in another company with your tech on the table. Your component is going to be there sitting in a deck of about 20 other competing solutions and we'll have to choose one. At that point we're trying to assess how much you're bullshitting us when you say you take the development of that component seriously. What you're actually hoping is that someone will integrate your product and do the development for you so you can go off and do something more interesting on a new codebase that doesn't have any customers yet. You want a fresh sandbox now you took a shit in your own.

      So that's what I see. Never underestimate how much someone will bullshit you to get you to do their work for them.

    10. Re:Quality of the solution. by Anonymous Coward · · Score: 0

      I'm mostly amused that you choose a text editor as, presumably, the example of a "simple" piece of software. That's a shining example of confusing the simplicity of an interface with the simplicity of a program.

    11. Re:Quality of the solution. by ihtoit · · Score: 1

      AKA "feature creep".

      --
      Political debates have me rolling my eyes so much I think I got optical whiplash. I should sue. - Foamy The Squirrel
    12. Re:Quality of the solution. by digsbo · · Score: 1

      Right. Because people who write complex business applications should also write the compiler, OS, network drivers, and so on, in monolithic one-off projects. That's probably a better way than to break things up and have people focus on smaller-scoped, reusable components. I'm pretty sure Mao tried something like that with the whole economy.

  4. Lockdown by tepples · · Score: 2

    At some point we need to just say, 'stop!', and write the code ourselves.

    I wonder how much of "invented here" syndrome is related with frustration with curation on the popular curated platforms (iOS, Windows Phone, Windows RT, and game consoles). Cryptographic lockdown applied by the operating system publisher blocks end users from writing their own applications or writing a mod for an existing application. Because people are unwilling to go through the organizational overhead of becoming a licensed developer, they stick with the vanilla version of whatever they can get from the platform's official app store.

    1. Re:Lockdown by Rhywden · · Score: 1

      Just FYI: Side-loading is perfectly possible on WindowsRT and Windows Phone. Doesn't cost a penny and is not too difficult.

  5. Write it ourselves? by Anonymous Coward · · Score: 0, Funny

    "At some point we need to just say, 'stop!', and write the code ourselves."

    Yeaaaa, about that...

    This should explain that idiotic thought outright.

  6. Not-Good-Enough Syndrome by Jason+Levine · · Score: 4, Insightful

    I'd say part of the cause of "invented-here syndrome" can be "not-good-enough syndrome." I'm often comparing my programming skills to people I see online - people whose skills far outpace my own. So when it comes time to access my programming skills, I'll understate how good I am because I'm simply not as good as those "coding superstars." Of course, when you see the online results of code people have written, you don't see the idiotic mistakes they made, the typos they've had to correct, the hours they spent Googling for an answer to a pesky problem. You just see some elegant, amazing looking code. It can be a daily struggle to balance admiring the programming skills of others without trying to compare myself to them (and thus knocking my own skills).

    --
    My sci-fi novel, Ghost Thief, is now available from Amazon.com.
    1. Re:Not-Good-Enough Syndrome by Kjella · · Score: 4, Insightful

      Sounds like you've never seen what passes for production code in the bowels of a major corporation. Look at the questions on experts-exchange or stackoverflow. You can safely assume most of them are for paid work. After that, you shouldn't have self esteem issues anymore.

      --
      Live today, because you never know what tomorrow brings
    2. Re:Not-Good-Enough Syndrome by Anonymous Coward · · Score: 0

      I disagree. I would define elegant code as understandable and concise with thoughtfully defined data structures. In a culture of webprogramming and C cowboy-ism I see very little of this. Since I value these attributes I see very little code to admire on a standard google search.

    3. Re:Not-Good-Enough Syndrome by Jason+Levine · · Score: 1

      That's what I keep reminding myself. There's always going to be people better than you and worse than you no matter where you work. The trick is not simply focusing on the people better than you and judging yourself harshly because of this limited view of the talent of others.

      --
      My sci-fi novel, Ghost Thief, is now available from Amazon.com.
    4. Re:Not-Good-Enough Syndrome by Greyfox · · Score: 1

      Yeah, the quality of the open source programs that I look at is usually far superior than anything I've ever seen inside a corporation. Although... at one company I worked for, I had to audit the source code for the original AT&T C standard library. That was obviously done by people who knew what they were doing. I also recently submitted a pull request to the gnu flex maintainer on github. Flex seems to generate some pretty decent code, but the code it uses to do it is a maze of global variables. I did manage to tweak it to generate a C++ class that works for me without the #include fuckery that flex typically requires, but I don't know if the maintainer is going to actually like that change. Doesn't matter to me, I can just use my version from now on.

      --

      I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

    5. Re:Not-Good-Enough Syndrome by Anonymous Coward · · Score: 0

      Very insightful, and I believe this concept extends far beyond code.

      Before the internet, with a little work one could become "the best guitar player on my block", or "a decent artist with a local following". Today, budding creative people can trivially compare themselves with the best in the world at anything. On the one hand it's good to have so many sources of inspiration, but it can be very disheartening for people with talent but without an overdeveloped ego.

    6. Re:Not-Good-Enough Syndrome by duck_rifted · · Score: 1

      When you see the online work of the "coding superstars," you also don't see the code they originally posted, the people who analyzed and criticized it, nor the cycle of discouragement and raw tenacity that led the author to improve their work over time. But you should see this in your own work.

      I remember when I initially began to study programming beyond the introductory console programs nearly all STEM majors learn to write. I sought out communities to participate in because I believed that learning alongside others would encourage me. Instead, what I found was a Reddit community where a couple of users were more than a little aggressive in providing verbal beatdowns for every little mistake I made. But they never told me wrong. Today, when I go back to those same communities, I'm the one teaching those people because they've been stuck in one standard for so long. I'm nicer about it.

      Compete with yourself. You don't need to achieve another's genius. In fact, if it is actually genius and not just a matter of skills you haven't yet mastered, you won't achieve it. Instead, challenge yourself to an ever higher standard. More thoroughly test your code, improve its performance, make it more self-documenting, or give it a better, more intuitive interface than you normally would. If you can't improve it functionally, try to change it so that even beginners can understand it. If you do this with enough effort, then the next thing to learn will always present itself. You won't even realize it when others begin to think of you as one of the coding superstars.

    7. Re:Not-Good-Enough Syndrome by duck_rifted · · Score: 1

      Writing code that is readable to humans is an art. Pragmatics standards are not enough. Anonymous Coward is right about this. When you begin to truly challenge yourself to make each line human-readable whether the reader understands the technical concepts in play or not, the challenge is an entirely different task than simply sticking to a set of guidelines. Sadly, there is often no time for the art of code in professional programming, but we can always sharpen our skills that way in our private projects.

    8. Re:Not-Good-Enough Syndrome by jythie · · Score: 1

      The problem with elegant code is more often than not 'elegance' is rooted in how similar it is to what the reader has read before as opposed to objective measures. One only has to go to a meeting where people argue about what coding standard a project should use to see 'but this is so much more readable!' is all its arbitrary glory.

    9. Re:Not-Good-Enough Syndrome by Anonymous Coward · · Score: 0

      Yes, 'readability' is highly objective and am sure there are people out there who have looked at enough ancient sand-script and believe it to be more understandable than English.

      Perhaps a better word would be 'approachable' just look at the difference between the GIMP source code (https://github.com/GNOME/gimp) and Photoshop 1.0 code (https://github.com/rorosaurus/photoshop-v.1.0.1)

    10. Re:Not-Good-Enough Syndrome by Anonymous Coward · · Score: 0

      Very true.

      For the better part of my career, I designed/programmed a system that could be debugged without a debugger. When an error occurred, it printed out a friendly stack trace. The top message was the root error, usually easy enough for the user to figure out (record is locked by somebody else), but the rest of the chain only required tech support to read the source code.

      And then I went somewhere that used VB to build a mess of 1-letter variables and GOTOs that I had to spend hours going through line by line with a debugger. Situation was so bad that a full-time tech support team couldn't keep up so they were roping the programmers in on a weekly rotation. Of course the fat clown behind this garbage, who wasn't in that rotation, thought he was a genius.

  7. InventeD here SystemD by Anonymous Coward · · Score: 0

    I just read it as InventeD here SystemD as some sort of new Daemon that get's included :)

  8. Developing Skills by alvinrod · · Score: 1

    Sometimes a particular problem has already been solved, but that doesn't mean it's not worth taking the time to code your own solution in order to improve your own abilities and to engage in the kind of thinking necessary to develop algorithms and solve difficult problems. You learn a surprising amount of things when you have to build or implement something yourself as opposed to taking something that already exists.

    While there's definitely a business case to be made for using existing solutions, if you're doing something on your own and don't need it immediately, there's no reason why you can't take the time to roll your own code and likely improve your abilities and knowledge in the process.

  9. Should that be "Invented There syndrome?" by Atmchicago · · Score: 1

    We can get stuck in the mindset that there must be a product, library, or code sample, that already does what we want

    If you're looking for a pre-existing library, then it wasn't written here, it was written there. This should be called invented there syndrome.

    --

    You can lead a horse to water, but you can't make it dissolve.

    1. Re:Should that be "Invented There syndrome?" by Anonymous Coward · · Score: 0

      yeah. superbadly named thread. STOOPD UP THERE!

  10. the best part of my job by gurps_npc · · Score: 1
    Is writing code to properly format improperly formatted data.

    Take idiots that put "GMT" or "MST" at the end of a time when our system (and most others) can't handle that crap.

    The data was created by someone else. They most likely had the ability to export it in the correct way, but were too .... inexperienced .... to do it the right way.

    Instead of trying to teach/convince them to do it right, I simply write a script to fix whatever bit of stupidity they created.

    --
    excitingthingstodo.blogspot.com
  11. All the time by barbariccow · · Score: 1

    I've ran into this ALLL THE TIME! There is some perception that if it's done elsewhere it's good, and if it's done internally it's crap. This exists in not only management but in coworkers. I try to explain all the time the advantages of in-house software

    1. Does exactly what we want, how we want it

    2. Does it now

    3. We update on our own terms, we are not forced to migrate when external migrates

    It is a huge waste of time to have to update tons of things internally to work with some refactoring done externally, and a huge waste of time to jump loops and hoops to try to shove the square peg in the round hole.

    I've presented solutions using ~20 lines of python code, but been told "No, we don't want to have to maintain that" (a bogus argument), "Let's instead leverage these 5 million+ line codebase external products, configured in a non-intended way, to accomplish 80% of the goal you accomplished in 20 direct lines".

    It's a very similar trend I think to what I see all the time with knowledge. There is no such thing as first-hand knowledge. I can never tell people my discoveries or theories, "Nope, that's not what wiki says." Just because they know me and the source of wiki is some anonymous as far as they are concerned, the "anonymous" source becomes "truth", because it can be verified through some sort of self-fulfilling dogma.

    1. Re:All the time by Anonymous Coward · · Score: 0

      It's a very similar trend I think to what I see all the time with knowledge. There is no such thing as first-hand knowledge. I can never tell people my discoveries or theories, "Nope, that's not what wiki says." Just because they know me and the source of wiki is some anonymous as far as they are concerned, the "anonymous" source becomes "truth", because it can be verified through some sort of self-fulfilling dogma.

      Fortunately, that is easily fixed. You can edit wikipedia yourself, you know. Then point out that wiki agrees with you . . .

  12. Re:AKA... "don't reinvent the wheel" by allo · · Score: 1

    you're missing the Point. The point is: Do not RE-invent the wheel.

  13. Write it myself by Bigbutt · · Score: 1

    Honestly I think my problem is that I tend to write my own code for stuff rather than trying to figure out what someone else has done and fit my thought processes into how they were working it through.

    Examples:

    I wrote a status management program to keep track of the work I do for yearly reviews. Tracks projects, hours, and even builds a timecard.

    I wrote an inventory management program to keep track of our systems. We have an official asset tracking tool but it doesn't accommodate virtual machines, I can't script updates to it like I can my inventory program, the asset tracking system doesn't keep track of build dates or graph out the life timeline of systems, etc. I can customize it to do pretty much anything.

    I wrote a budget management program where I can enter my financials (bank statements, credit card statements), plot out the trends, and do forecasts of what my financials look like as far out as I can to set a limit (currently 18 months out).

    I wrote a combat management tool for one of the games I play where I just need to enter the data and it spits out my target numbers.

    I think this goes back to when I started back in the early 80's. When you needed to do something, you either had to pay for it or learn how to do it yourself. They may not have the features other programs have but they're certainly customized to my needs.

    [John]

    --
    Shit better not happen!
    1. Re:Write it myself by Lodragandraoidh · · Score: 1

      We need to address the real underlying problem you are describing right there - code written by different people that does not conform to any standards is hard to manage over its lifecycle - and this goes double for limited frameworks that may get some things right, at the expense of not allowing you to get all things right.

      This is one thing that open source has gotten right on occasion - think of the Linux kernel for example, and how many people contribute to that and keep it going.

      So really the answer I think is twofold - on the one hand people need better tools that make it easier to integrate their efforts, on the other hand entities engaged in this activity need to develop standards that ensure when people develop things - they document and build interfaces that are consistent, if not globally, at least between members of the groups expected to work on the code. If you do both of these things - and by extension some other things that those recommendations imply (e.g. code reviews, agile development methods etc).

      Now, if you are only building software for yourself, then this isn't so important. However, if you expect other people to extend and manage your code over the long term, then I would still opt for leaning towards either creating and documenting standards, or selecting and learning existing well known standards - and sticking to that in your own code. Keep it consistent between all the things you build that you want to share, and you just might get people to help - if that's what you are looking for.

      --

      Lodragan Draoidh
      The more you explain it, the more I don't understand it. - Mark Twain
    2. Re:Write it myself by Bigbutt · · Score: 1

      Actually I read through several sites a couple of years back looking for templates and ideas on how to implement standards for my code. I created a couple of web pages. One for a Coding Standard page and more recently, a User Interface standard page. I've been pulling out company identifying information and have a Sourceforge site to upload it.

      [John]

      --
      Shit better not happen!
    3. Re:Write it myself by Anonymous Coward · · Score: 0

      You "standards" people are a big part of the problem.

      I've seen alot of "standards" in the last few years that are anything but. You foist these half-baked rules on productive programmers without any consideration, squander everybody's time by fixating on them at the expense of everything else, and then don't even bother to follow them yourselves. When I imagine being granted one wish to fix the software industry it's damned difficult to choose between disappearing India/H1Bs and disappearing you.

  14. Often easier to write yourself by bigmo · · Score: 1

    I will usually spend an hour or so looking for an existing solution if I expect it to take only a couple days to write the code. Even when I expect it to take a week or two I won't spend more than a couple hours looking around. The problem is that even if I find code that does pretty much what I want to do, it will usually take a day or two of screwing around with it to figure out how to make some required part of it work in my overall project. Maybe 95% will be just the way I need it but there seems to always be a gotcha that I don't find until I'm well into the project. Generally I just find that it's faster to do myself rather than try to bend someone else's code to work with mine.

  15. Solution - Developers need to know code they call by ErichTheRed · · Score: 2

    I've seen the end result of this a lot working in systems integration and engineering. The problem is that, yes, most functionality has been written in some library or available through a public API, web service, whatever. Especially with mobile stuff, Apple/Google/Microsoft give the developer huge amounts of pre-built functionality, and encourage its use.

    The overall problems with it are, in my mind,
    - Developers and systems people not knowing how that huge chunk of functionality they use actually does what it does
    - Introducing dependencies on third party applications which may or may not be around later, have spotty support, etc.
    - Making applications more complex to deploy and debug -- "is this my bug or the API's bug? Why is a single row database update taking 45 seconds and 100% of a CPU core?"

    The reverse problem on the other hand has the potential to be worse. No one should be coding core functionality that has the potential to fail spectacularly or have major security problems. Examples might be writing your own PKI stack instead of relying on the OS/webserver to do it, designing your own file transfer protocols unless you have a _really_ good reason, and many more. So with NIH syndrome, you have to really trust that your developers did everything right. With IH syndrome, you need to install an application, plus the 45 modules it depends on, plus provide it access to public APIs, etc.

    I think the "solution", even though there's no right answer for all situations, is to make sure app developers are actually understanding development. It's too easy to write applications by gluing together pieces. With the framework movement, the pieces are much bigger and hide way more from the developer than, say, a library function.

    From my side, in systems, we have way too many admins who are scared of scripting. Windows installations are moving towards PowerShell now, and while very useful, PS hides almost everything from the end user. Scripts that used to be 100 lines of loading/parsing/checking code are reduced to a single call to a chain of cmdlets. Very powerful, but the language itself isn't the most intuitive out there and borrows syntax from many languages. This leads to admins finding something on StackOverflow and copying/using it unmodified and unverified, simply because they don't know what it actually does.

  16. can't help by Anonymous Coward · · Score: 0

    Hey, that sounds where I work! At least until they blame me for the fuckups I've had to cope with...

  17. The Level of Abstraction by Art3x · · Score: 5, Interesting

    You will always have to write some code of your own. Even if you use a CodeIgniter, AngularJS, and every prewritten function on StackExchange, still, you will have to write some code to configure the frameworks and to pull it all together.

    You will always use some of someone else's code, too. Aren't you using Linux or something? You didn't write your own OS, did you? You're using a database, like MySQL or PostgreSQL or something, right? You didn't write your own database system, did you? And are you using a web server like Apache or Nginx?

    So the question is not, should I write my own code or use someone else's. The question is where to draw the line.

    I'm a web programmer, your typical LAMP developer (well, LAPP --- I use PostgreSQL). Like many PHP programmers, I first concentrated too much on the PHP. PHP is not the best language, as many have said, but I don't think it's quite as bad as people make it out to be. Anyway, I never took up any of the PHP frameworks. They seemed like too much trouble to adapt. (I should point out that I started with an intranet with a dozen or so applications already built.) I would research PHP frameworks from time to time, but always rejected them all, and felt a little self-doubt in doing so: "Do I suffer from Not-Invented-Here Syndrome?"

    But PHP, and scripting languages in general, provide the right level of abstraction, I think. It takes care of memory management. It provides a bunch of functions for HTTP. It has its own templating syntax. It's great if you don't overuse it. In other words, in the MVC pattern, PHP does great for the View and, together with Apache, the Controller. But if you write a lot of your Model in PHP, with all this data processing, checking, calculations, etc. --- well, that's what the database is for, I think.

    So, instead of eventually adopting a PHP framework, I learned more and more about Apache and PostgreSQL, and I learned that a lot of the things that I was doing in PHP could be done in SQL or in the Apache configuration, with a lot less typing (a lot more reading but a lot less typing). While most people are busy trying figure out how to write the practically all of the MVC in PHP, I realized that Apache was part of the Controller, PostgreSQL was part of the Model, and the browser was part of the View. I use PHP just to help them out, only when needed.

    1. Re:The Level of Abstraction by Anonymous Coward · · Score: 0

      You didn't write your own OS, did you?

      Heckk no, every time I muck around in ring 0 something horrible happens or someone blames me for it.

      You're using a database, like MySQL or PostgreSQL or something, right?

      "Something" is a good name for it.

      And are you using a web server like Apache or Nginx?

      You see the problem was the forking() model of apache was not going to work... working around this with shared memory, domain sockets, bleh.. would have taken longer than rolling yer own server.

      PHP is not the best language, as many have said, but I don't think it's quite as bad as people make it out to be.

      I disagree. Look at all the vulns and crap that came from clueless "web developers" using the language incorrectly. Hard and dangerous or simple and safe...never simple AND dangerous!!

      But PHP, and scripting languages in general, provide the right level of abstraction, I think. It takes care of memory management.

      One has to actively try to fuck up the lifecycle of a HTTP session.

      It has its own templating syntax.

      (J|A)SP style syntax was developed by Satan in a bid to get humanity to resort to cannibalism.

      In other words, in the MVC pattern, PHP does great for the View and, together with Apache, the Controller.

      So, instead of eventually adopting a PHP framework, I learned more and more about Apache and PostgreSQL, and I learned that a lot of the things that I was doing in PHP could be done in SQL or in the Apache configuration, with a lot less typing (a lot more reading but a lot less typing). While most people are busy trying figure out how to write the practically all of the MVC in PHP, I realized that Apache was part of the Controller, PostgreSQL was part of the Model, and the browser was part of the View. I use PHP just to help them out, only when needed.

      The only aspect of any import is comprehension of underlying concepts.

    2. Re:The Level of Abstraction by smellotron · · Score: 1

      I realized that Apache was part of the Controller

      I am happy for your enlightenment! It amazes me how many people don't get this, and want to write a PHP "Front Controller" that uses a querystring parameter to select the "page", and then slap a mod_rewrite rule on top to clean up the URL. Instead of—as it sounds like you discovered—putting each page in its own file in the filesystem and letting Apache "route" the request.

    3. Re:The Level of Abstraction by Art3x · · Score: 1

      It amazes me how many people don't get this, and want to write a PHP "Front Controller" that uses a querystring parameter to select the "page", and then slap a mod_rewrite rule on top to clean up the URL. Instead of—as it sounds like you discovered—putting each page in its own file in the filesystem and letting Apache "route" the request.

      Right. I split the program into more files, instead of mod-rewriting everything through a gigantic PHP controller. Of course any database-backed app must eventually resort to the query string, PATH_INFO, or something. I usually use those to specify just the record ID or search filter, not an app section. Each section gets its own file.

  18. Re:AKA... "don't reinvent the wheel" by g01d4 · · Score: 2

    Re:AKA... "don't reinvent the wheel"

    ...unless you have to redesign your car to make it fit.

    I think the point of the article was that that's sometimes the case.

  19. Sociological problem: CYA by aussersterne · · Score: 5, Insightful

    Part of the problem is the CYA issue.

    If you're writing the code, you sound like a laborer ("I have to..."). If it breaks, it's your fault and you're on the hook publicly.

    If you present a third-party component in a meeting, you sound like a manager ("I propose that we..."). Once three or four other people in the meeting have concurred, if something breaks it's the third party's fault. A ticket or two are initiated, it's someone else's problem and everybody gets to cast blame somewhere beyond the walls of the company.

    Rational behavior, regrettably.

    --
    STOP . AMERICA . NOW
    1. Re:Sociological problem: CYA by Lodragandraoidh · · Score: 1

      I would not consider being overly risk averse as being rational behavior.

      There are many rational reasons to take risks:

      1. Gives you, and by extension your company the opportunity to learn and grow. If you never take risks you stagnate and learn nothing.

      2. Real invention occurs through taking risks. If you never take risks you don't innovate.

      3. Taking responsibility, and therefore risk is what men and women do. Being overly risk averse is immature slug-like, weasel word behavior.

      If your company does not reward risk-taking - then you are in the wrong company.

      --

      Lodragan Draoidh
      The more you explain it, the more I don't understand it. - Mark Twain
    2. Re:Sociological problem: CYA by Anonymous Coward · · Score: 0

      Companies reward risk taking only when it turns out successful. It's when it doesn't turn out successful (which sometimes is often) that the CYA syndrome seems to implant itself. Once it's there, it's there. The only way to get rid of it seems to be fresh blood willing to take more risks and not caring about the potential consequences as the payoff outweighs the potential consequences. This risk taking maps in to successful startups that are later sold for [mb]illions.

    3. Re:Sociological problem: CYA by Anonymous Coward · · Score: 0

      I should also mention, it is those organizations that can weigh potential consequences against risks of risk takers that seem to achieve great results.

    4. Re:Sociological problem: CYA by Altrag · · Score: 1

      if something breaks it's the third party's fault

      Until its something critical and then you're back on the hook to fix it -- except you can't fix it because its not your code and you end up making more excuses than progress until either the vendor gets their shit together or you get canned.

      Also, your quotes are really badly contexted. You can "propose that we" build a product in house, and you can also "have to" integrate with a third-party library.

    5. Re:Sociological problem: CYA by Anonymous Coward · · Score: 0

      You really need to read about agent-principal problem, search for agency theory and corporate governance.
      When the party bearing the risks and the party to whom the benefits accrue are different it is perfectly rational for the risk bearer to avoid risks. In your example 1) the risk of being fired is concentrated in one person, the learning benefits are diluted across organization, better avoid risk, 2) the risk of being fired is concentrated in one person, the patent benefits are diluted across organization, better avoid risk, 3) kind of a circular reasoning... you claim that a ration reason to take risk is that rational people take risks.

      So, nope. Rational people will react to the incentives set up for them. And very often these incentives will drive them into what can only be described as suboptimal from an organization perspective. Welcome to the real world, and no, this is not limited to software development. Aligning incentives is one of the hardest things to do, and no, there are no magic solutions.

      Many of the value-destroying behaviors so often criticized in slashdot are just perfectly rational people reacting to the incentives offered to them (stock options)

  20. No problem, I have a solution to that. by Qbertino · · Score: 1

    I'd say part of the cause of "invented-here syndrome" can be "not-good-enough syndrome." I'm often comparing my programming skills to people I see online - people whose skills far outpace my own. So when it comes time to access my programming skills, I'll understate how good I am because I'm simply not as good as those "coding superstars."

    I have a solution to that exact problem. Just download any of the most popular web CMSes built in PHP. Wordpress, Drupal, Joomla, or, if you think you're a tough one, Typo3 or Typo3 Neos. Install it (good luck with Neos, you'll need it) and load up the ERD with MySQL Workbench and stand amazed at the sight of the shittiest class of software architecture ever concieved by lifeforms able to type on a keyboard.

    Seriously, if anything showed me that I must be in the upper single digit percentile of software devs, it's looking at systems that have an install base of 0.5 million or more. In the case of Typo3 Neos and TypoScript it might cause your head to explode. You have been warned.

    Some of these systems are 10 years in making and emphasise that there are many people around that have no business programming what-so-ever. Right now I'm trying to do something useful with Wordpress taxonomies and categories - it's beyond insane what these people have built, I guarantee you. I actually just now had to take a coffee break of 1.5 hours just to let my frustration ease off. ... I spent that time designing a CMS architecture, if only not to forget how it's actually done right.

    Looking at those systems will restore your self-confidence, that's guaranteed. Although it will also seriously make you doubt humanity in general. It's a tough tradeoff, I admit. But a change in perspective.

    --
    We suffer more in our imagination than in reality. - Seneca
    1. Re:No problem, I have a solution to that. by Anonymous Coward · · Score: 0

      To be fair, PHP is shit and everything written in it is shit.

  21. Prior art by Anonymous Coward · · Score: 0

    I always fantasized that some specific mexican icon represented in fact some counterintuitive physical body image... I went to google and, voila, somebody else had already created the diagram. No need to create the illustration material: http://img.desmotivaciones.es/201202/VirgenVagina.jpg

  22. Management problem by PPH · · Score: 1

    Largely, that is.

    My time to write a function is accounted entirely differently than the expense to acquire a commercial package that does the same. The bias is to prefer something that can be purchased over that which is written in-house.

    Don't even get me started on free software. Management values an application based on how much they paid for it, either in developer-hours or from the expense budget. Stuff that costs zero must be worth zero. Never mind what functions it actually provides.

    --
    Have gnu, will travel.
  23. A many-headed cultural problem by engineerErrant · · Score: 1

    Thanks for bringing this up and giving it a name, first off; it needed one.

    Over the years I have seen this mentality a lot, but it's almost always pushed onto a team from management rather than home-grown in the minds of the engineers. I see it as a systemic issue at software companies that the leaders see their own engineers as the least preferable choice to actually build new things. I think this arises from a few factors:

    - open-source software has so successfully marketed itself as better than third-party enterprise software that managers think they are supposed to prefer it over in-house solutions that are informed by the knowledge of their own business. For obviously generic components like JSON parsers, this is true, but leaders often take this mentality to comical lengths.

    - resume-building is about keywords, because that's all recruiters understand. Junior engineers realize that if they build their own components, they will not "get credit for it" later. But put Spring and Hibernate on your resume and the recruiters will come. So why not cram as many third-party components in as possible and really build that skills section?

    - it can appear easier to manage a team that is struggling under the bloat of a third-party framework rather than creating something better. PMs feel more in control; managers don't have to think as much, and the engineers get their keywords for their resume. Everyone wins!

    - a single phrase: "don't re-invent the wheel." I think this one sentence is responsible for the suppression of countless creative ideas. PMs and managers use it like a weapon to keep control; consultants use it to poison the reputations of in-house engineers in the minds of the managers whose money they want. Senior engineers even use it to squash down the ideas of competitors for their position. If we engineers did nothing but thoroughly discredit this phrase, turning it into a shared joke ala "what could go wrong?", the world would be a better place.

    1. Re:A many-headed cultural problem by Anonymous Coward · · Score: 0

      I think this is closely related to the phrase I hate the most nowadays as a programmer, and wannabee-inventor: "Oh, there's already an app for that."

      So what, make your own wheel anyway, it's a good learning experience and maybe your particular wheel does it differently for a good reason.

  24. It's a myth by recharged95 · · Score: 1

    "Invented here" is somewhat a illusion.

    Working with frameworks and other people's code is a engineering problem (design, integration, etc..)

    Developing code is a computer programming problem.

    Two different problems, and why Software Engineerings are [desired] unicorns in very large software projects.

  25. Re:Solution - Developers need to know code they ca by Anonymous Coward · · Score: 0

    MS opened .NET and you can read and step through the code. Code and comments are very good, and you figure out internals of particular class/function.
    However, try reading Native C++ libraries that being shipped with Visual Studio. Modern C++ std.libraries are so complex, that average programmer will never figure out their inner-workings.

    MS version of LinkeList
    http://referencesource.microsoft.com/#System/compmod/system/collections/generic/linkedlist.cs,df5a6c7b6b60da4f
    Now, pull out VS and try reading/stepping through List class code.

  26. I detest other peoples code. by Anonymous Coward · · Score: 0

    So much that I hate making system calls.

  27. Yes! I was thinking about this just the other day by DanielBigham · · Score: 1

    Here's a blog post I wrote on the topic of "finding a function (etc) that already does what you want": http://www.danielbigham.ca/cgi... I think there are actually some pretty exciting possibilities in this area...

  28. Wrong name by CptJeanLuc · · Score: 1

    Should be "invented somewhere" or "invented there" syndrome, not "invented here" (for something you are not inventing because you are caught up in analysis).

    1. Re:Wrong name by NoOneInParticular · · Score: 1

      Couldn't agree more. 'Invented here syndrome' reads as if everything necessarily gets invented 'here', so roughly the same meaning as 'not invented here'. What the article writer probably means is something more akin to 'Not re-invented here'.

  29. Better to write than depend by Anonymous Coward · · Score: 0

    I'd rather write something that works than add a dependency for a framework/library that will probably be abandoned (either by the creators or users moving on to the next framework), or version 2.0 will break code compatibility with version 1.0. Nothing is sadder than the constant parade of job postings looking for people with skills in loser frameworks/libraries because a company has code stuck using them long after the rest of the world has moved on.

  30. The beauty of small modules by YoungManKlaus · · Score: 1

    Having a simple modules base that can be combined gives you the best of both worlds. You can quickly test your candidates (as they are simple) and write the code that glues them together yourself.

  31. Re:Solution - Developers need to know code they ca by Anonymous Coward · · Score: 0

    That linked list code is actually very straightforward. I wouldn't need to step through because it's written as I'd expect; no Visual Studio necessary. (I've also written a lot of linked lists in my time.)

    However, it is a lot of code for what is one of the simplest and most common data structures around.

  32. Because "re-use" is self-congratulatory nonsense by anyaristow · · Score: 1

    "I found code that already does this" sounds like you're a better problem solver. It's self-congratulatory nonsense. If the result is very complex, you congratulate yourself even more, for being able to do complex things, rather than punching yourself in the head like you should, for making things more difficult than they need to be.

    If you found code that really does make your life easier, that's great. It hardly ever happens.

  33. Re:Yes! I was thinking about this just the other d by Anonymous Coward · · Score: 0

    Haskell has a nice search engine for functions: https://www.haskell.org/hoogle...
    Given that Haskell's type system is rather expressive, you can give the type of the function and expect to find what you are looking for.
    A good example is https://www.haskell.org/hoogle...
    It returns Sort and HeapSort as top results.

  34. Or, "Their invention must be right" syndrome. by gestalt_n_pepper · · Score: 1

    I see that one a lot. The assumption that because the software vendor did it one way, That's. The. Way. It's. Done.

    It's nonsense of course. Our testing system was designed for the most common use case. Maybe 50 dialogs with 5 or 6 controls each. Our system has thousands of dialogs, some of which have as many as 50 controls on a dialog (It's old, legacy, badly designed. I know....). To make that system scale, we had to develop our own abstraction system, an API and a different object mapping system.

    In the end, it worked quite nicely. Had we just used it as was designed out of the box, we'd have scrapped it by now, or quadrupled our staff running on that maintenance treadmill. Vendors can be pretty bad at scaling or special cases.

    --
    Please do not read this sig. Thank you.
  35. Re:AKA... "don't reinvent the wheel" by Anonymous Coward · · Score: 0

    It's strange that software people are always urging each other not to re-invent the wheel, given they inhabit a world where all wheels are square.

  36. I'm divided by Anonymous Coward · · Score: 0

    Half of me thinks this is indeed one of the largest problems of the software industry, en masse, at all levels. There are SO MANY dependencies that often import tens or even hundreds of megabytes just for the sake of doing something flashy with no real long-term value. These are really business decisions, though, not design decisions. IMHO any developer can and should be able to approach a problem from either perspective (with the exception of obvious large-scale frameworks that are more-or-less ubiquitous and non-debatable)

  37. Nope by Anonymous Coward · · Score: 0

    I work for a large US federal agency. Holy moly, we've got not invented here syndrome.

  38. The black box is a trap by msobkow · · Score: 1

    The problem with black-box programming is that it's a trap. Far more often than anyone cares to admit, the black box implements functionality in an unreliable or inefficient manner. When you're dealing with code that you wrote yourself, you can correct that behaviour of the "grey" box. But with a third-party black box, all you can do is file a bug report and hope that someone can not only replicate the problem, but that they'll give it high enough priority to fix it before you retire or your project is cancelled.

    The worst culprit for black box problems are frameworks of all kinds. Some say you're not a "real programmer" until you've written your own framework. I firmly believe that's true, because what is a reusable code base on a large project except a custom framework?

    The difference between a custom framework and an off-the-shelf one is that your custom framework is designed and coded with your project in mind, to service the bulk of your project's needs while maintaining enough flexibility to deal with the exceptional cases of your project. A third party black box framework is pretty much never designed that way. It was designed to serve the needs of someone else's conceptual or real project, then tweaked and adapted to serve needs it wasn't originally designed for, and finally unleashed on an unsuspecting world as "the next big thing."

    A pox upon frameworks, I say. Design a solid object model, code to it, use it, and get over the fact that you're going to have to write some code.

    At least if you wrote the code, you can fix it. Without worrying about whether some upstream integrator will deign to consider your "fix" worthy of integration to the mainstream code. Without having to wait for someone else to replicate, analyze, prioritize, schedule, implement, and test a fix for your problem.

    Realistically, any half decent custom framework isn't going to be more than 10% of your total code base anyhow. "Framework" is just a fancy term for what was called for decades "application library."

    --
    I do not fail; I succeed at finding out what does not work.
  39. This describes modern web development by matthewv789 · · Score: 1

    In the last couple of years, this has become the one and only true and accepted way to do web development, either on the front end or on the server side. It's probably the biggest reason (aside from chronic underestimation of all projects) that I'm getting sick of being a web developer.

  40. Re:AKA... "don't reinvent the wheel" by allo · · Score: 1

    But then it's totally the point.
    Do invent the wheel, if you need it to build a car.
    Do not RE-invent the wheel, just because you built a car without wheels and now the usual wheel does not fit. Build your car in a way, it works with usual wheels.

  41. when "strtok" won't suffice by Anonymous Coward · · Score: 0

    And then there was the guy we called "the Professor" who wrote his own subroutine to do exactly what "strtok" accomplished even though we endlessly tried to explain to him that there was already a native C expression. To each his own, I guess.

  42. The word "framework" is often a big read flag. by PJ6 · · Score: 1

    Programmers are sensitive to taking a stance that might bring into question their intelligence, so this is a tough idea to convey sometimes - if a thick book and months of ramp-up are involved to get productive, chances are it's not worth it. The fear of someone saying "you're just not smart enough to use it properly" gets in the way of seeing the truth; generally, the more complicated the tool or framework, the more likely it's crap. I have seen great sins of architecture committed in the name of maintainability that wildly achieved the opposite. And those with the highest degrees were the worst offenders.

  43. Re:Solution - Developers need to know code they ca by Anonymous Coward · · Score: 0

    The only problem I see with it is that retarded if silverlight crap and the fact that the class has so many dependencies.

    Silverlight shit is retarded and needs to go away and it wouldn't be MS if they didn't overcomplicate one of the simplest data structures around.