Slashdot Mirror


Whatever Happened To Programming?

Mirk writes "In a recent interview, Don Knuth wrote: 'The way a lot of programming goes today isn't any fun because it's just plugging in magic incantations — combine somebody else's software and start it up.' The Reinvigorated Programmer laments how much of our 'programming' time is spent pasting not-quite-compatible libraries together and patching around the edges." This 3-day-old article has sparked lively discussions at Reddit and at Hacker News, and the author has responded with a followup and summation.

623 comments

  1. Programming == Cut & Paste by Anonymous Coward · · Score: 4, Insightful

    Programming is becoming nothing more than cutting and pasting, especially with languages like java, that provide libraries that do "the hard stuff" and let programmers concentrate on "programming".

    Programmers are now a dime a dozen. I can find 10 people who can cut and paste available on the internet and modify it to do what they want.

    Good programmers on the other hand, are few and far between.

    It seems everyone wants to be a "software engineer", but nobody wants to focus on the "hard stuff", and instead chant "let java/X do it for you".

    1. Re:Programming == Cut & Paste by binarylarry · · Score: 5, Insightful

      That's because programming isn't usually an endurance challenge.

      "Making something that works" is more important than "talking about how hard you made your job for yourself"

      --
      Mod me down, my New Earth Global Warmingist friends!
    2. Re:Programming == Cut & Paste by EastCoastSurfer · · Score: 4, Insightful

      It seems everyone wants to be a "software engineer", but nobody wants to focus on the "hard stuff", and instead chant "let java/X do it for you".

      I guess it depends on the goal of the programmer/engineer. If my goal is the solve a problem for a customer (as opposed to doing something to simply learn it) then I'm going to do that in the most efficient way possible. Should I be writing an entire stack of libraries every time I need to solve a problem? I hope not. Libraries that already exist make it possible to focus on and build solutions to even harder problems.

      BTW, I think there is a lot of skill needed to be able to look at problem, figure out what libraries can/can not help and then pull it all together into a cohesive solution.

    3. Re:Programming == Cut & Paste by crazycheetah · · Score: 3, Informative

      I wouldn't separate that too much. Some of us exist that can do the "hard stuff" and might even find and fix a bug in some of the libraries from time to time. However, when we're just making an app that works and fits in with the environment, a lot of the "hard stuff" has been done and is likely to be less buggy and more consistent with the environment than redoing the whole thing ourselves. Then, if it's open source, we can just fix bugs we find in the "hard stuff" and focus more on what we're actually doing.

      Hell, things like basic sockets and other things that are fairly easy, really--every once in a while I forget to back that up or something stupid and instead of just doing it all from memory and by hand, I just copy and paste it off the internet, then rework it to my liking (by this time, I know the commands, but copy and paste is just faster). Of course, some times I like to do things that have already been done, only try to do it in a new way, just as an exercise (I'm down to programming as a hobby at this point).

      I wouldn't be too harsh on copy and pasting, though. It can be a great learning exercise if you peel it apart and actually understand exactly what is going on and the different ways you can alter it. It's also a great way to get to know an open source library and be able to fix any bugs you find, or even add features to it, if that's your fancy. That's generally how I've done anything in that regard, to be honest.

    4. Re:Programming == Cut & Paste by benjamindees · · Score: 3, Insightful

      If my goal is the solve a problem for a customer then I'm going to do that in the most efficient way possible.

      I realize you're just tooting your own horn, but you're living in fantasy land if you think this is how it actually works, or even should work. The customer might not even want the "most efficient" thing. They might want an over-engineered thing. They might want the safest thing. They might want the most environmentally responsible thing. They might want the most flexible thing or the most interoperable thing. They might want the thing that works with whatever broken systems they already have. They might want the thing that they can build upon to grow their business in the future. Hell, you might be getting paid by the hour, so your incentive might be to create things in the least efficient, but still passable, way possible.

      --
      "I assumed blithely that there were no elves out there in the darkness"
    5. Re:Programming == Cut & Paste by EastCoastSurfer · · Score: 1

      I wasn't tooting my own horn, but it was more of how I view software creation - it's done in order to solve problems. And, in a lot of problems today software is only a piece of the overall solution to a problem. I view my work as not just a programmer or software engineer, but as someone who is helping solve the larger overall business problems at hand.

      Efficient is generally defined by the customer since my least efficient might be their most efficient etc... Anything that is left up to me I make a decision on what I think is best for them. If the choices mean a large list of pros and cons (for example, cheap and brittle versus expensive and robust versus everything in between) I explain them in detail and then guide the customer to a decision that works for them.

    6. Re:Programming == Cut & Paste by phantomfive · · Score: 1

      Hell, things like basic sockets and other things that are fairly easy, really--every once in a while I forget to back that up or something stupid and instead of just doing it all from memory and by hand, I just copy and paste it off the internet,

      I think there may be no other commonly used API that is harder to fit into the human memory than the Berkeley Socket API. Unless you use it every day, the exact order of the parameters just slip out of your mind. And then there are the weird structures.....

      --
      Qxe4
    7. Re:Programming == Cut & Paste by profplump · · Score: 1

      The best engineers, software or otherwise, are often those that can look at a problem and find a way to copy an existing solution with as few changes as possible. Would you rather that your bridges were built by an engineer who "focused on the hard stuff" and invented a totally new bridge design each time, or that he found an existing bridge design that meet the load/span/etc. requirements of the new location and made minor adaptations to the existing, proven design to make it fit the particular application?

      Sometimes there are new problems that must be solved in novel ways. Once in a while it's possible to find a new solution to an already-solved problem that's so much better it would be silly to keep doing things the old way. But the majority of good engineering is finding existing solutions to similar problems and making small adaptations.

    8. Re:Programming == Cut & Paste by j_kenpo · · Score: 2, Insightful

      I have to agree with parent. I've written an implementation of every method I use from libraries such as STL or Java at least once in my life, sometimes in such painful languages as assembly. I did it just for the sheer joy of it (yes, I love programming that much) and as a learning experience. In all those years, I learned a very important lesson, don't reinvent the wheel. I have yet to receive a set of requirements from a client that say "give me the least efficient/over engineered way to do X" that would compel me to ever again need to re-write a quick sort algorithm, container implementation, or string parser.

    9. Re:Programming == Cut & Paste by profplump · · Score: 2, Insightful

      You're making two assumptions here to make the grandparent seem wrong; he's only wrong if your unstated assumptions hold.

      1) That "solve a problem for a customer" does not already consider all of a customer's requirements, including safety, over-engineering, environmental responsibility, flexibility, interoperability, or scalability. To the contrary, I'd suggest that all of those consideration are part of "the problem".

      2) You're assuming that "most efficient" means "least amount of coding time". I'd argue that "most efficient" could easily include total costs/time not only in the first draft, but over the life of the project, including use of the finished code and future maintenance.

    10. Re:Programming == Cut & Paste by AuMatar · · Score: 1

      Berkley sockets were written to be easy for the kernel writers to implement (just switch on the type of socket and pass it off to handlers for whatever is needed) not to be easy to use. That's why everyone in the universe writes wrappers for it.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    11. Re:Programming == Cut & Paste by benjamindees · · Score: 3, Insightful

      First of all, just taking safety for instance, it's nearly impossible to determine how to solve a safety problem in the "most efficient" way possible. What's the "most efficient" way to build a safe nuclear reactor? Make one that is 100% melt-down proof? You waste nuclear fuel. Make one that is completely incapable of being repurposed for nuclear weapons? You increase cost beyond market feasibility. Don't build nuclear power plants at all? People die from lack of energy. What's the "most efficient" way to build a safe car? What's the "most efficient" way to build a safe bridge? There are simply far too many variables, all interdependent in subtle ways, to consider. Add an extra layer of corrosion allowance, for instance, and you may prevent a bridge from collapsing and save a dozen lives. On the other hand, you may trigger a resource shortage that bankrupts a major company and destroys a thousand. Physical implications are obvious, but software is analogous. Spend ten billion dollars writing the perfect space shuttle control software, and you might save a dozen astronauts. Fail to develop a viable space exploration program in time, and humanity could be wiped out by the next asteroid. You're right, though, those aren't really software problems per se, and should be clearly defined as part of "the problem". Often they aren't.

      But, yes, I'm assuming #2. I think it's clear from the GP that this is the manner in which "most efficient" was used.

      But my point is also that it's not just the "efficiency" of the program itself or it's maintenance. It's the efficiency of the entire business and how the software fits into it. The cost of software in most business cases is trivial compared to it's benefits. Which, I think, is the reason we see so much software being re-invented over and over again to begin with. What isn't taken into account, though, is the cost of getting software wrong.

      --
      "I assumed blithely that there were no elves out there in the darkness"
    12. Re:Programming == Cut & Paste by TheKidWho · · Score: 1

      Technically, every bridge is it's own design. It's the nature of the beast. However all the equations and models are already figured out so the engineer doesn't have to go back to basic physics, calculus, and material science to rediscover the necessary equations.

    13. Re:Programming == Cut & Paste by kdemetter · · Score: 1

      That's because , for nearly every situation , code has already been written.
      So , for most cases , the best programming solution has already been worked out.

      So why would you reinvent the wheel, when someone who specializes in wheels as already created the best wheel , and is continuing the improve it ?

      Offcourse, it can be interesting to create your own 'wheel' , but only for learning how it works .When you need to deliver a product , it's pointless ( and costly ) to write something that already exists ( and is probably better ).

    14. Re:Programming == Cut & Paste by EWillieL · · Score: 1

      I'm not harsh on copying and pasting freely available code from "out there" for your own use -- I'm harsh on copying and pasting code from one part of a system to another, just because somebody didn't have the mental capacity to realize they could tweak the existing code ever so slightly to suit both the old problem and the new problem. I've had to clean up after this more times than I'd care to count.

      I once saw somebody who'd scoped each of the fifteen or so individual case clauses of a switch in braces, because they didn't want to rename the local variables they'd cut'n'pasted into each of the cases. Each case was about fifty lines, with a max of about five lines difference between them. I'm surprised I didn't have an anyeurism right then and there.

      --
      Ask your doctor if getting up off your ass is right for you! -- Bill Maher
    15. Re:Programming == Cut & Paste by thsths · · Score: 1

      > It seems everyone wants to be a "software engineer"

      If only that were true. Engineering is a well established discipline focused on getting the job done properly. I don't think modern software can be explained in these terms at all.

      The more appropriate term is "value engineering" (good enough is good enough), which is not an engineering term at all, but a business concept. The new goal is to whack something together as fast as possible that appears to kind of work on superficial inspection.

      Of course that has nothing to with programming nor with engineering - Donald Knuth is certainly right about that.

    16. Re:Programming == Cut & Paste by Anonymous Coward · · Score: 0

      A good programmer is one who would be able to reinvent the wheel, but does not do it if it is not necessary.

      I'd not call someone a good programmer who has to show how "good" he is by constantly doing things the "hard way" instead of evaluating what is available already and using that if possible. Someone like that isn't worth the money.

      Still, evaluation requires special skills, and these skills are part of the discipline of "software engineering" you sneer at.

    17. Re:Programming == Cut & Paste by physburn · · Score: 1
      I have to agreed. The more libraries you know, the more powerful you are, and a better programmer you will be. A good library will let you program in ways you simply might not of thought of. A recent example i found blocking queues in a java.util.concurrent. I wouldn't have thought of building a library to do that, and previously I was just polling a list. With the queue system suddenly i've saved lots of CPU time and at the same time, built more robust code.

      ---

      Java Programming Feed @ Feed Distiller

    18. Re:Programming == Cut & Paste by dominious · · Score: 1

      Programming is becoming nothing more than cutting and pasting, especially with languages like java, that provide libraries that do "the hard stuff" and let programmers concentrate on "programming".

      Is this bad? I thought re-usability was a good thing. And that's the point of OO languages. People are getting old. Things change. Programming has evolved into something else. IF ever quantum computing makes it, programming will become something else again, because it would be entirely new way of thinking (for programmers).

      If I want to do some hacking I could still do it. But if for example I'm going to implement a genetic algorithm from scratch just because I don't want to use a library that's ridiculous.

    19. Re:Programming == Cut & Paste by Z00L00K · · Score: 1

      Don't forget the GUI design approach where the programmers never see a single line of code at all but only throws around objects in a GUI and thinks that they do some programming.

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    20. Re:Programming == Cut & Paste by Z00L00K · · Score: 1

      I agree to the fact that it's important to know software libraries to use. That is an essential part of programming today.

      And most of the software libraries are bread and butter functionality that is what you as a programmer probably know how to do and can do if necessary but when you get down to earth it's just stupid to redo that work over and over again.

      A good programmer shall be able to use a decent set of tools (libraries) and also be able to see the whole of a solution. It doesn't matter if what you do is perfect if it doesn't fit the need of the system.

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    21. Re:Programming == Cut & Paste by Eudial · · Score: 2, Insightful

      Programmers who primarily do java are in most cases the quintessential deadbeat programmer. They're cheap labor; but as with most cheap labor, you get what you pay for. In this case, a bunch of cargo cult code pieced together from examples in the javadocs and from java blogs.

      The thing about Java is that it allows anyone to write bad, but functioning code. It's possible to write good Java code as well, but it's exceptionally rare to see, as the training wheels that allow people to get bad code to work frustrates the hell out of people who don't actually need them.

      If your goal is to ship the product ASAP no holds barred, then a Java programmer or five is what you seek. If your goal is to ship a well written product that is maintainable and efficient, then you seek someone with actual programming skills.

      --
      GAAH! MY PRINTER IS ON FIRE!!! PUT IT OUT! PUT IT OUT!
    22. Re:Programming == Cut & Paste by Vexorian · · Score: 1

      There's nothing you can earn with doing the "hard stuff" when it is already done correctly, unless you think real programmers are those who can constantly reinvent the wheel... Reusing wheels is not THE problem. I think the real problem is that there is another extreme. There are too many wheels and some times, programmers don't bother to stop and think whether it would sometimes be more convenient to invent a wheel when the only available wheels just do not fit with the rest of your car or are all square.

      --

      Copyright infringement is "piracy" in the same way DRM is "consumer rape"
    23. Re:Programming == Cut & Paste by Anonymous Coward · · Score: 0

      Bullshit. Libraries do old hard stuff to enable a programmer to solve new hard stuff. That's the whole purpose of programming. Number crunching isn't difficult, it's just a lot of work.

      I'd say any well understood problem isn't hard anymore. It may be a lot of work but that doesn't equal being hard. If a library solves a problem then that is an indicator for the problem being quite well understood. So, what "hard stuff" are you speaking of?

      Also programming is not a masturbation contest. You are not paid to get your ego petted. You are paid to solve the problems of your customers. If that doesn't satisfy you you are free to not take the money and do whatever you want.

    24. Re:Programming == Cut & Paste by umghhh · · Score: 1

      sometimes an effort needed to code stuff anew is the same as to lookd for libraries that do stuff you want, find out why the do not do exactly the stuff you want and find the way around. If you are unlucky chances are you may repeat the 'find the stuff' and following steps few times. OC it al depends. Balming all on Java and libraries is just a joke and the whole thread a silly rant. Fact is that majority of us do not work with rocket science. Yet when quality matters we usually rely on very few good sources and write code ourselves only this is not what general customer and your manager think is needed. Then again QA engineers like me have great fun fixing the stuff that has been copy pasted by geniuses that know libraries etc.

    25. Re:Programming == Cut & Paste by Dave+Emami · · Score: 1

      nobody wants to focus on the "hard stuff", and instead chant "let java/X do it for you".

      That's because you should be focusing on the hard stuff or the easy stuff. You should be focusing on the stuff you need to do to get the system to do what you want. Creating software is different than it was decades ago, but that's because the systems, the people, and target users have changes in many ways.

      • Even if you're someone (like many of us here) who loves to program, you still set the bar higher over time. When I wrote my first stuff in BASIC when I was a kid, the mere fact that I could type on the keyboard and make things happen was, in and of itself, amazingly cool. But while I'd like to think I retain as much of my enthusiasm and wonder, typing in 10 PRINT "HELLO"; 20 GOTO 10 and watching the text scroll up doesn't excite me anymore. Been there, done that. And as the things you want to do get more difficult, it's only natural not to want to spend time on the things that interest you. As an example, right now I'm working on a REST app. A couple moments ago I added a call to library routine to URLencode something. It didn't write the routine myself. I could have, but it's not interesting. Getting stuff out of a database and getting it to display on my phone, that is interesting to me.
      • Computers have been around longer. For any given thing you're doing, odds are someone has already done some grunt work. Which directly relates to...
      • We're more connected than we used to be. Years ago, even if someone had done the grunt work, you might never know unless they were at the same office/university as you. Now it's pretty easy to find things like that out.
      • Obviously, the hardware is more powerful terms of sheer speed and capacity, but in certain areas what's even more relevant to programming is the increase in scope of what the hardware does. Personal example again: early 90s, a friend of mine and I were putting together a game engine that did, among other things, Gouraud-shaded texture-mapped surfaces. To get that to work quickly enough, we had to write the core routines in assembler. These days, you can get rendering techniques vastly more advanced, with much better frame rate, color depth, and resolution, with a few lines of high-level-language code, because it's all built into the GPU and you don't have to care. But that doesn't mean that today's game programmer is working any less hard than we were. He's just working with a better set of tools -- pixel shaders instead of PUSHF, RET, and their ilk.
      • Software development has matured enough for specialization of labor to actually work. Not only are the odds decent (as mentioned before) that someone else has done some of the grunt work for you, there are enough of us working on enough different things that people can afford (in terms of money, time, and/or attention span) to concentrate their efforts on doing a small thing well enough that other people will want to use it. Other professions do this, we just haven't been able to much until recently. No one scoffs at a master pastry chef because he didn't drill the oil to make the fuel to power the tractor to plow the fields to grow the wheat to make the flour for his recipes.
      --

      "The Greens lynched a hacker in Chicago. Last month, but I think the body's still hanging from the old Water Tower."
    26. Re:Programming == Cut & Paste by bertok · · Score: 4, Insightful

      I have to agree with parent. I've written an implementation of every method I use from libraries such as STL or Java at least once in my life, sometimes in such painful languages as assembly. I did it just for the sheer joy of it (yes, I love programming that much) and as a learning experience. In all those years, I learned a very important lesson, don't reinvent the wheel. I have yet to receive a set of requirements from a client that say "give me the least efficient/over engineered way to do X" that would compel me to ever again need to re-write a quick sort algorithm, container implementation, or string parser.

      I've come with a rule of thumb I tell younger programmers:

      Do it yourself, then throw it away and use the standard library instead.

      The idea is that if you haven't implemented an algorithm or something yourself at least once, you don't really understand it. Once you've gained that understanding however, you're better off using the polished and bug-fixed version everyone else is using.

    27. Re:Programming == Cut & Paste by hey! · · Score: 1

      Well, figuring out the problem and how to solve it actually is the engineering part.

      Coding is the craft part. It plays the same role in relation to software engineering that carpentry places to structural engineering.

      --
      Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
    28. Re:Programming == Cut & Paste by metamatic · · Score: 1

      Programming is becoming nothing more than cutting and pasting, especially with languages like java, that provide libraries that do "the hard stuff" and let programmers concentrate on "programming".

      You say that, but take JDBC as an example. All of Sun's examples are wrong and can leak resources. All their reference code is wrong too. O'Reilly's onJava has incorrect code examples. Sun even has an article about resource leakage and the importance of getting JDBC calls right--and the article gets it wrong. I've written about this on my web site.

      It's not just JDBC, there are lots of Java APIs that are routinely used incorrectly. Ever seen a Swing application UI freeze on you? They probably got the threading wrong in the initialization.

      The fact that incorrect code is so prevalent points at cargo cult cut-and-paste programming being the norm. Use of standard libraries really has nothing to do with it, as cut-and-paste use of libraries is as bad as cut-and-paste anything else. This, in turn, is why Java has a reputation for "memory leaks".

      --
      GCHQ Quantum Insert installed. If only our tongues were made of glass, how much more careful we would be when we speak
    29. Re:Programming == Cut & Paste by jbengt · · Score: 1

      You start off implying that the GP was talking about the efficiency of the solution, then you seem to contradict that in your last sentence and talk about the efficiency of the process of writing the code. So which is it?

    30. Re:Programming == Cut & Paste by salemboot · · Score: 1

      Resume Pumpers

      Problem: Solve a logistical delima by moving work being entered into an Excel spreadsheet to a SQL Server database.

      Solution 1: The resume Pumper.
      K we gona use a ASP.Net front end with login manager and user maintenance screens.
      We're gona implement FAST, CRUD, create at least 70 classes to offload complexity.

      Solution 2: The new hire.

      Just use Sharepoint!
      6-weeks later
      Having some troubles, need an extension

      Need 6 more weeks.
      Hey I found a new job, bye.

      Solution 3: The Unix guy
      Well, if we had FOSSL(unix) we'd have this problem licked.
      I'm going to get coffee be back Sunday.

      Solution 4: The Engineer
      Six months.
      Huh?
      I need Six months to make this thing work with active directory, SQL Server 2008, and argue with you about the short-comings of ASP.Net.

    31. Re:Programming == Cut & Paste by crazycheetah · · Score: 1

      Really, if I just use man pages on the commands, that's all I need to be sure of what I'm doing, to be honest. But just doing copy and paste off the internet is still faster. Of course, as the previous replier stated, I usually write a wrapper for it. I just have a nice tendency of backing up that wrapper (or I wrote it for someone and don't want to use that code elsewhere, or I just have a new idea for that wrapper...).

    32. Re:Programming == Cut & Paste by Anonymous Coward · · Score: 0

      And yet simple English baffles you?
      "might not of thought of."??
      "I have to agreed."?

    33. Re:Programming == Cut & Paste by mario_grgic · · Score: 1

      That's one of the dumbest statements someone can make about software engineering. The value of well tested libraries is exactly that they take care of common, low level stuff, so you can stop re-inventing the wheel (poorly) and concentrate on the hard parts of your application domain.

      Imagine if you had to re-implemented linked hashmap, or file chooser, each time you had to develop your application. The value proposition you bring to the table with your application is that you are solving someone's unique problem, and it does not lie in you re-implementing the code commonly found in libraries.

      If you think that all code is just copy/paste of samples, then you never got paid for writing code, since no one will pay for solution to generic problems any more. People want software to help them in their context and make unique optimizations to their unique situation and you don't just find samples of code that solve your customers problems online for you to copy and paste.

      --
      As the island of our knowledge grows, so does the shore of our ignorance.
    34. Re:Programming == Cut & Paste by Anonymous Coward · · Score: 0

      I would add that knowing and avoiding the bad libraries is as important as finding good ones. Anyone can find "a" library.

    35. Re:Programming == Cut & Paste by Gaffod · · Score: 0

      You want to set up a RAID array? Solder together a harddisk first! You want to figure out why 64-bit Ubuntu isn't running your program? Write an OS yourself first! You want to buy an airplane ticket? Build a glider from bicycle parts first!

    36. Re:Programming == Cut & Paste by jbengt · · Score: 1

      In the construction industry "Value Engineering" is a well known euphemism for cutting construction costs of the engineered systems, usually performed after the design is complete (or almost complete) and bid, and usually resulting in a return of about 50 cents savings on each dollar actually removed from the cost to the contractor. So, while well established, maybe engineering is not so focused on getting the job done properly, after all.

    37. Re:Programming == Cut & Paste by access.name · · Score: 1

      What framework allows you to do this? A common misconception is "the programmers that are in charge of the GUI just move some buttons and controls around in a WYSIWYG tool". I assure you that GUI coding is one of the harder tasks, requiring a very complete understanding of all the existing underlying code, and creation of new underlying code.

    38. Re:Programming == Cut & Paste by b4dc0d3r · · Score: 1

      Everyone else already covered the parts where you don't reinvent the wheel, and real programmers would learn the language instead of just copying something they read on a blog, and I'll skip the part where I add that .NET is so minimally documented that the only way to learn it is to buy a Microsoft Press book or read the blogs of the language developers, and go right to the heart of what really bothers me.

      I think you meant to say "Copy and paste", because if you cut from a blog you don't actually change the blog contents by removing the block you selected. Unless you're more of a hacking type.

    39. Re:Programming == Cut & Paste by Sir_Lewk · · Score: 2, Funny

      You want to troll on slashdot? Write original strawmen first!

      --
      "linux is just DOS with a UNIX like syntax" -- Galactic Dominator (944134)
    40. Re:Programming == Cut & Paste by benjamindees · · Score: 1

      It's both. They're intimately linked. Code that is written "efficiently" is usually impossible to maintain, and thus is inefficient in terms of the "solution". That's the point. The most efficiently written code is the code that you don't write, but you just purchase as a pre-made binary. It's also the code that is completely worthless to you in the long run because it disintermediates you from the ultimate end-beneficiary.

      Which is better for any given situation? Obviously some combination of both: code that can be written efficiently while still fitting into the big picture. Saying that you're going to always write the most solution-efficient code from scratch every time is just as foolish as trying to efficiently piece together someone else's code and expecting it to last.

      --
      "I assumed blithely that there were no elves out there in the darkness"
    41. Re:Programming == Cut & Paste by sublimemm · · Score: 1

      So because I've never written a MVC framework I don't understand it?
      What about the boilerplate libraries? Like commons logging, string utils, fileio, and all the shit from Apache that saves me so much time? Sure I've never written a method to read a url into a byte array, and I never will because it already exists. But I can promise you I know how it works and I know how to do it if the Apache utils disappeared tomorrow.
      /rant

    42. Re:Programming == Cut & Paste by Z00L00K · · Score: 1

      Of course it is, but there are a lot of crappy programming done with dropping boxes in Visual Studio and then adding a few event handlers. After a while and a kiloton of changes/programmers involved you will end up with a lot of dead code and items that you don't dare to touch in case something breaks.

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    43. Re:Programming == Cut & Paste by Todd+Knarr · · Score: 1

      Wrong.

      Take an example from one of my previous jobs: a point-of-sale cash-register system. Yep, there's plenty of those on the market. But now make those interface with the gas-pump controllers. All 4 varieties. 2 of which the manufacturers dropped support for 10 years ago. The POS system has to handle pump authorization, credit-card validation and authorization, pump limits and all the rest. And it has to display pump status on demand. You can still probably buy this, but the number of options is a lot more limited. Now add on the ability to interface with the shower-stall control system. But there aren't any commecial shower-stall control systems, you say? No, there aren't, that's why we had to write our own. And the POS system still has to interface with it. It has to handle selling shower tickets for multiple type of stalls (male, female or don't-care, regular or handicapped-accessible, etc.), it has to put the ticket into the shower-control system and it has to display shower status on demand. And since there's no standard API for this and no commercially-available systems, it's got to do all this through a custom-designed interface to an in-house system. Now add interfacing to the on-vehicle RFID system (at a time when nobody was doing on-vehicle RFID, so again the only option was a custom in-house system), the liquid fuel inventory system and so on. Oh and I forgot, the registers can't just handle regular credit cards, they have to handle the 30-odd varieties of cards we accepted plus direct-bill to various trucking companies.

      By this point the sales rep's eyes are bugging out and he's sounding a lot like a motorboat. And I've just gone through the things the register software has to handle to support what the custom-written system currently does. We haven't even gotten into the things we'd like it to do to support future plans.

    44. Re:Programming == Cut & Paste by An+Onerous+Coward · · Score: 1

      I know it's tangential, but you write: "Don't build nuclear power plants at all? People die from lack of energy."

      Arguably, nuclear is one of the more expensive options available. Also, if you like Alex Jones, then you might consider the high level of centralization, government involvement, and billions of dollars in financial capital needed to make a nuclear power plant viable. You simply can't have your own personal home power generation with nuclear power, the way you can with solar panels, wind, or geothermal.

      I do think that if our current coal infrastructure was magically replaced by nuclear power plants, we'd be better off. I think if the third world magically got nuclear power plants and a reliable grid, they'd be better off. But the cost of new nuclear is -- if not entirely prohibitive -- too expensive to justify equating a moratorium on nuclear power to a death sentence.

      The cost of solar power has been cut in half every six years since the 1970s, wind energy is nearly as cheap as coal already, and at the moment adding "effective capacity" to the grid by investing in energy efficiency is akin to putting new generation on the grid for 1 to 3 cents per kwh.

      I know it's even more off topic, but re: your sig:

      1) Google is a corporation, not a branch of government. Since when have libertarians been in favor of using the government to force companies to carry products they don't approve of?

      2) Alex Jones calls Google "the biggest corporation in the world, the most wealthy corporation in the world." They're not even in the top 188.

      3) Alex Jones has made a career of conspiracy-mongering. No surprise that every little obstacle that arises as he tries to promote his film somehow fits into the grand conspiracy.

      --

      You want the truthiness? You can't handle the truthiness!

    45. Re:Programming == Cut & Paste by kdemetter · · Score: 1

      Wrong about what ?

      The case your present clearly shows that a lot of extra work could have been prevented , if there was already a well customizable cash register system fitting all your needs .
      Since yours is a very limited case , you really have the pleasure of inventing the wheel. But still , you would be wise to split it up in multiple parts , so it will be easier to manage ( and prefferably let the parts be worked out by different people , who sit together regularly ).

      The great thing is that , after all the work is done , you not only have a cash register system , you will also have worked out the components.
      So you could sell this knowledge ( for example : interfacing with RFID ) , so someone else doesn't have to lose time thinking out the same thing you did.

    46. Re:Programming == Cut & Paste by j.+andrew+rogers · · Score: 1

      When writing C++ I usually test two implementations of an algorithm/data structure, the STL version and my own purpose-built implementation (usually not that difficult after all these years). About 50% of the time, my implementation destroys the STL implementation on performance and the rest of the time they are roughly similar. In the former case I use my implementation and in the latter case I use the STL.

      The problem is that no library has enough knobs to fully parameterize likely use cases, they have to make assumptions. In many cases, those assumptions will be poor. For some applications it doesn't make that much difference, but for many of the applications you might use C++ on these days (e.g. server engines) it can make a huge difference. Over time, I have accumulated a large standard library of source that I can reliably adapt to a variety of use cases. It is not a library, it really is more like cut-n-paste, but it allows a lot more flexibility in dealing with design issues than simply using the standard libraries. Of course, this is predicated on actually understanding the nuances of algorithm implementation, something that seems to be an increasingly rarified art.

      The performance lost in generic libraries is not trivial.

    47. Re:Programming == Cut & Paste by icebraining · · Score: 1

      Oakland Bay Bridge, San Francisco, USA: http://www.freefoto.com/images/1215/15/1215_15_5---Oakland-Bay-Bridge-San-Francisco--California_web.jpg
      Ponte 25 de Abril, Lisbon, Portugal: http://www.navigators.di.fc.ul.pt/rtss04/images/Ponte25Abril.jpg

      Both built by the American Bridge Company, they have basically the same structure and design, adapted to the local conditions. Obviously the effort of designing the second was largely reduced because they based it on the first.

      I fail to see how this is a problem, both in bridge or software design.

    48. Re:Programming == Cut & Paste by Todd+Knarr · · Score: 1

      Customizable won't cut it. It's not a matter of just changing the UI appearance or adding stock items or categories. The shower control system requires the POS system have code in it to talk to a system the POS programmers don't know exists. The POS can't use a standard interface because there is no standard interface for this thing. And customization doesn't extend to handling arbitrary binary data formats over arbitrary communications methods. The only way to do that is by adding custom code, which requires the POS system have hooks for calling that code. Moreover, it has to have the right hooks, and has to have a way for the code called by those hooks to call back into the POS to display things and process input (which in turn has to go back to the custom code for handling). At which point we're right back to it taking longer to learn all the ins and outs of the framework and how to hack it to add those things it's missing than it'd've taken to write things from scratch using a more primitive GUI framework. Ditto with the RFID.

      Oh, and the system as a whole was modular. Shower control, RFID control, liquid-fuel interface, pump control, all were their own modules. But the POS was in the unique position of needing to talk to all those modules all the time. Even credit-card authorization was it's own module, which led to problems with off-the-shelf POS systems. They all wanted to do their own CC handling, which conflicts with the absolute requirement that they hand all that off to our in-house CC handling system. Which again has it's own interface because there isn't a standard CC-handling interface because all the off-the-shelf solutions handle it internally.

      As I said, it was amusing watching the salespeople stumble on all these points. I didn't have the liberty of fast-talking it, I had to make it work and deliver it by deadline.

    49. Re:Programming == Cut & Paste by lilo_booter · · Score: 1

      But don't you think that having written your own qsort/container/parser you're better equipped to understand the implementations of others?

      Just saying that inventing your own odd shaped wheel is valuable... don't underestimate what you learnt in the process.

    50. Re:Programming == Cut & Paste by sexylicious · · Score: 1

      Isn't the performance lack in the STL versus your version due to the fact that the STL are templates, with all of the "extra" stuff in the template definitions (which makes the compiler do some work to determine how you are using the template)? I'm actually a rocket scientist, so what do I know about programming? I am genuinely curious though, because I thought using the STL also meant that in some cases you had to accept that the compiler would generate more code than was absolutely necessary.

    51. Re:Programming == Cut & Paste by AVee · · Score: 1

      It seems everyone wants to be a "software engineer", but nobody wants to focus on the "hard stuff", and instead chant "let java/X do it for you".

      ...

      BTW, I think there is a lot of skill needed to be able to look at problem, figure out what libraries can/can not help and then pull it all together into a cohesive solution.

      Isn't that the skill which makes you an engineer? Engineers don't go into the woods to take down trees, they never weld anything together and generally didn't add a single nail to the bridge which gets to carry their name.

      Realistically, most programmers actually aren't the engineer, the are the lumberjacks and the welders. Sadly though, the engineering phase is skipped in most software projects. Thats why the fun and the quality is gone in a lot of software work. Programmers should actually grow up and become proper engineers and architects instead of just implementing the first thing which comes to mind.

      The programmers of those libraries should start doing that first though, one of the reasons working with all those libraries is a pain in the butt is because the are largely unintuitive, unclean, incompatible and each in need of their own workarounds. I'm sure any programmer here can list a few libraries he just hates like nothing else, but simply cannot avoid using.

      Someday all our software will be the result of proper engineering, although probably not in my lifetime.

  2. Implement some things yourself by thenextstevejobs · · Score: 2, Insightful

    Go ahead. It won't bite. Some things are over-engineered.

    --
    Long live the BSD license
    1. Re:Implement some things yourself by Yokaze · · Score: 3, Funny

      Some things may be over-engineered. But in my experience, more often it is the case, that people rather re-invent the wheel,
      than they bother to try to understand, what someone else has done, and how it is supposed to work.
      And over time, it will bite. Usually not the one who wrote the code, because that person is gone, but the project in whole.
      And no, I don't see a difference in "own code" and foreign libraries, from a "long" term perspective, it is the same.

      --
      "Between strong and weak, between rich and poor [...], it is freedom which oppresses and the law which sets free"
    2. Re:Implement some things yourself by kyrio · · Score: 4, Funny

      You, need, to, add, more, commas,.

    3. Re:Implement some things yourself by Nerdfest · · Score: 4, Funny

      Try reading it as William Shatner would.

    4. Re:Implement some things yourself by shutdown+-p+now · · Score: 1

      Some things are over-engineered.

      And yet, it's often more efficient to take an over-engineered thing that is already there and working (and though it has quirks, those are already well-known), rather than writing your own perfect one.

    5. Re:Implement some things yourself by benjamindees · · Score: 1

      But it's important not to confuse "an over-engineered thing that is already there and working" with whatever under-engineered thing just happens to be laying around.

      --
      "I assumed blithely that there were no elves out there in the darkness"
    6. Re:Implement some things yourself by Anonymous Coward · · Score: 0

      Fuck, you are a terrible writer.

    7. Re:Implement some things yourself by GlassHeart · · Score: 1

      Funny? No, this is quite insightful. A lot of programmers think the solution is easily reimplemented because they didn't really understand it, and by the time they realize how hard things are, the code has bloated to the same complexity and size as the library he was trying to avoid. Every other programmer has written an XML parser - some using regexps - only to find that the spec isn't really so simple.

    8. Re:Implement some things yourself by jayveekay · · Score: 5, Funny

      You need, to boldly add, more commas [where no commas, have been placed, before!]

    9. Re:Implement some things yourself by SQL+Error · · Score: 1

      Of course, the solution to that is not to use XML in the first place.

      Or regexps.

    10. Re:Implement some things yourself by TheJokeExplainer · · Score: 1

      Alternatively, you, can also, try reading it, as, Christopher Walken, would.

      --
      visit my pal the xkcd explainer!
    11. Re:Implement some things yourself by dgatwood · · Score: 2, Interesting

      Agreed, mostly. If you have an XML parser for free (e.g. in a web browser), them XML is a great way to push structured data around. If you have to roll it yourself, it's horrible. Using libraries, it's somewhere in-between, depending. If you're going into a toolchain that expects XML or if you're working with a lot of structured text data, XML is probably a good choice. That said, it's quite possibly the most overused technology. Far too many people just automatically use XML where CSV file or tab-delimited text file would do the same job with tens of thousands of lines less code.....

      And regular expressions are for light text processing and/or single-use (write-only) tools. Using them where a parser would normally be used is the quickest way to create fragile code that breaks constantly. :-) Been there, tried to maintain that, then ripped it all out and wrote a token-based parser.

      --

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

    12. Re:Implement some things yourself by Anonymous Coward · · Score: 0

      Or alternatively, Top Gear host, Jeremy Clarkson

    13. Re:Implement some things yourself by Anonymous Coward · · Score: 0

      Yes, but with the way that most people comment code it often takes longer to figure out what somebody else did rather than to just rewrite the code for yourself. Hell I have even rewritten some of my older stuff rather than trying to remember what my code meant, or decoding my half delirious been up for three days' comments. This is probably made even worse since I write in assembly 3/4 of the time and switch between processors constantly.

    14. Re:Implement some things yourself by Interoperable · · Score: 3, Insightful

      No, it won't bite. It will segfault.

      --
      So if this is the future...where's my jet pack?
    15. Re:Implement some things yourself by naam00 · · Score: 1

      Or alternatively, Top Gear host, Jeremy Clarkson

      You need, to add, most commas,
      ...
      in te world.

    16. Re:Implement some things yourself by Anonymous Coward · · Score: 0

      I've had to work with somewhat complex xml files, which the customers horribly abuse. Basically, we're supposed to import data from xml files to our system. The customers want to expand and expand the functionality of the xml importer, to cover things and situations the xml never was designed to support. We can't change the XML schema, because it's a standard. Instead, we have to use paranoid logic and special cases to convert the data. If tag x and y are present, do z, except if tag r is found, then use that for q, etc. The code is a horrible spaghetti mess, because we're just adding functionality after functionality. The customer says they won't pay for extra hours spent on refactoring, so we're stuck with updating the good old mess. So much for schemas.

    17. Re:Implement some things yourself by vadim_t · · Score: 1

      CSV and tab delimited files are trouble though. For CSV you run into it as soon as you need to allow commas in a field. For tab delimited files it's tabs. For both you have issues with newlines, encodings, optional columns, additional columns, and I probably forgot something.

      The nice thing about XML is that you don't have to care about any of that.

      If you think "But, I will never have tabs/commas/quotes/newlines/foreign languages in my data!" then unless you have a very tightly defined format you're probably wrong. Been there, done that. Spent a few days debugging a fixed column format generating application that would sometimes generate a column with a character too many, shifting everything afterwards. After that I say screw it, just use XML and you'll never end up counting characters in a text editor.

    18. Re:Implement some things yourself by cheesybagel · · Score: 1

      Actually it is bloody easy to create and parse simple XML files in C#. I was dumbfounded first time I saw it. Only thing more convenient is probably Pickle in Python.

    19. Re:Implement some things yourself by Anonymous Coward · · Score: 0

      Agreed, mostly. If you have an XML parser for free (e.g. in a web browser), them XML is a great way to push structured data around. If you have to roll it yourself, it's horrible. Using libraries, it's somewhere in-between, depending. If you're going into a toolchain that expects XML or if you're working with a lot of structured text data, XML is probably a good choice. That said, it's quite possibly the most overused technology. Far too many people just automatically use XML where CSV file or tab-delimited text file would do the same job with tens of thousands of lines less code.....

      The nice thing about XML is that it's already been designed to be extended. What's going to happen when you need your CSV or tab-delimited file or whatever to handle Unicode? Or embedded line endings? Or escape characters you didn't think of defining escape sequences for in advanced? Or what if you want to mix in documents using similar syntax? The verbose XML syntax can handle all this in a future-proof way, because a committee spent a lot of time thinking about these issues. Your hand-rolled solution may not.

      The other thing about XML is that it's ubiquitous. Every modern programming language these days comes with XML processing built in, so that's basically free--the runtime has to carry it around anyway. Languages like XSLT and XPath and XQuery make it highly convenient for even non-traditional programmers to work with XML content in very powerful ways.

      I would argue that 90% of the time, the question you should be asking yourself is, "Why not use XML?" What horrible cost are you paying that a simpler format would solve better? XML is complex to implement, but someone's already done that work for you. There's a space and time cost, but you have to consider how significant that really is. (Which various binary XML formats might end up solving anyway. I'm still waiting to see if the W3C-anointed EXI format comes to anything.)

      Of course, if you're still writing code that talks directly to SAX or DOM APIs, then yes, I feel for you. :-)

      I would argue that the situations where XML isn't appropriate, you'd be even better off using a binary format than CSV or tab-delimited text. Why write a parser that has to deal with plain text when you can just dump bytes? But we've all been down that road, and know it's full of pitfalls.

      And regular expressions are for light text processing and/or single-use (write-only) tools. Using them where a parser would normally be used is the quickest way to create fragile code that breaks constantly. :-) Been there, tried to maintain that, then ripped it all out and wrote a token-based parser.

      Regular expressions are great for writing the lexer that produces those tokens, not a full parser. If you find yourself working with individual character units, you're probably doing something that would work better at the regular expression level. Right tool for the job and all that.

      One of the nifty things about regular expressions is that they're compiled into a finite state machine which can do an optimal job at matching against an input stream. This is something you can do yourself, but is often a big pain in the neck to do well. Let the machine do it.

      The main pain with regular expressions is that they're basically finite state machines, which means you don't get the full range of expressive power you get with a Turing-complete language. But then that's what regular expressions were designed to do.

      If you're parsing a really sophisticated language, of course, that's where you should probably be using a parser generator. (Unless you're writing a parser for C++, at which point you would tear your hair out trying to write any kind of sensible parser definition that does everything the C++ standard requires, and you'd be better off rolling your own by hand again. ;-) )

    20. Re:Implement some things yourself by gilgongo · · Score: 1

      Go ahead. It won't bite. Some things are over-engineered.

      I am not a programmer, but in my experience most (good, productive, well thought-of) programmers always seem to default to writing stuff from the ground up rather than grab a library or consider an existing framework from a 3rd party. At least, it's annoyed the hell out of me on more than several occasions when devs take ages writing stuff, only for us to find out later that they could have just used an existing library.

      Call it "stakeholder syndrome" - I don't give much of a crap about whether something is elegant under the hood. I just want it to work, keep working, and be maintainable by others when the original developer leaves the building.

      --
      "And the meaning of words; when they cease to function; when will it start worrying you?"
    21. Re:Implement some things yourself by Anonymous Coward · · Score: 0

      I propose a speech face-off between Shatner and Christopher, Walken!

    22. Re:Implement some things yourself by SpinyNorman · · Score: 1

      Far too many people just automatically use XML where CSV file or tab-delimited text file would do the same job with tens of thousands of lines less code.....

      That would depend on your XML library, wouldn't it?

      I wrote my own XML library that let's you define mappings between arbitrary XML and C/C++ data structures, and then convert to/from XML with as single API call (the mappings are data - initialized arrays). With the right tools you can't beat XML for productivity, which is one of the reasons people use it - never write a parser again, even a simple CSV one.

    23. Re:Implement some things yourself by maop · · Score: 1

      Actually, you can solve all of the problems that you mentioned with a CSV format. If there a commas in the field, then you add quotes around the field. If there are quotes in the field, then you transform each quote into a double quote. If there are newlines then you have a couple options. You can escape them -- transform a newline into backslash-n. Or, if your parser handles it, you can just add quotes around the field and keep the newline, assuming the parser is smart enough to handle fields that are on multiple lines.

      To handle optional fields just make the first line in the CSV file, a list of the column names. So the first line defines what follows in the CSV file.

      The problem with CSV files is if you need to have metadata in the file itself, or if the data does not easily fit into a single table format.

    24. Re:Implement some things yourself by Blakey+Rat · · Score: 1

      Except if you were using the programming library's time/date functions, your code would have been fixed auto-magically when the US time zones changed a couple years ago. It would properly handle edge-case time zone bugs, like the ones that recently afflicted the Zune and PS3 without you doing anything at all.

      Most code that re-implements standard library code is buggy, from my experience. Sure maybe you saved an hour writing it as opposed to learning how to do things properly, but that doesn't help three years down the road when your company loses millions of dollars because a critical system is down on February 29th.

    25. Re:Implement some things yourself by vadim_t · · Score: 1

      Sure, it can be done.

      But if you're doing all that you're carefully generating the CSV, and got a proper parser, and aren't simply doing a 'print "$foo,$bar\n";' into a text file. You're making sure that 0.5 doesn't get written as "0,5" on a french system, and that quotes are doubled, and that any multiline fields are quoted, and deal with backslashes. And your parser has to understand all that of course.

      Even if you do all that, the application you interoperate with might not do all of that, or do it in exactly the same way. It could think that the space after the comman in "foo, bar" is junk, while in your application that's part of the field. Even in your post there's already a problem: A newline might either be a \n or a literal newline. Those details are problematic.

      At that point you might as well use a XML library instead.

    26. Re:Implement some things yourself by religious+freak · · Score: 1

      lol - awesome :)

      --
      If you can read this... 01110101 01110010 00100000 01100001 00100000 01100111 01100101 01100101 01101011
    27. Re:Implement some things yourself by kimvette · · Score: 1

      Try, reading it, as, William Shatner would.

      There, I fixed, that, for you!

      --
      The Christian Right is Neither (Christian nor right). See: Matthew 23, Matthew 25, Ezekiel 16:48-50
    28. Re:Implement some things yourself by Anonymous Coward · · Score: 0

      Yes, Don Knuth should know all about magic incantations. Ever tried to write a paper in TeX? Fuck you, Knuth.

    29. Re:Implement some things yourself by dgatwood · · Score: 1

      The tens of thousands of lines of code I was referring to are the underlying XML parser. The libxml2 library that the majority of open source XML libraries are built on top of is almost 239,000 lines of C code, and that's not counting headers....

      --

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

    30. Re:Implement some things yourself by MadKeithV · · Score: 1

      The saying goes "XML is like violence. If it's not working, you're not using enough of it."

    31. Re:Implement some things yourself by adosch · · Score: 1

      Agreed to a very small extent. I can tell you're not a programmer, but more like bottom-line, border-line clueless manager type who fell into their management position by... accident?

      Perhaps that developer could have used a third-party application, but someone who works both side of the ball as a developer-hat and a system administrator, I can tell you how frustrating it is when you get developers who like to use the "language-of-the-day" and then you (e.g. the sys-admin) have to support it on a COTS level, setup an secure environment for them to use it, field a myriad of questions when the developer who so longing wanted language/library/app/framework xyz but doesn't know two shakes how to use it other than "...it's cool."

    32. Re:Implement some things yourself by SpinyNorman · · Score: 1

      So what? If memory is an issue then pick another - there are plenty of small/fast XML libraries out there as well as the better known ones. More to the point if you can't find one that meets your needs, then write one.

      I certainly wouldn't recommend using a low level DOM API directly to read/write C data or you'll be end up writing hundreds/thousands of lines of code at the application level to read/write complex XML formats. With the *right* XML API one line of code (plus some mapping tables) can read/write anything.

    33. Re:Implement some things yourself by MartinSchou · · Score: 1

      In ... space. No-one. Can hear you. Pause.

  3. Frameworks by Nerdfest · · Score: 2, Informative

    There's still lots of interesting programming going on, and lots of interesting new languages. The ''Magic Incantations' are the same frameworks you used to have to write yourself, and even then you generally only did it once. It's gotten a lot easier to share the common solutions now, and we're free to do the real work.

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

      for alot of tasks i can write a better solution from first principles faster than you can use your 20 gallon bucket of glue

    2. Re:Frameworks by Nerdfest · · Score: 4, Insightful

      ... and in those cases you should. There's nothing wrong with re-inventing the wheel in some cases, especially where you don't want to drag around a ridiculous framework that does way more than you need.

    3. Re:Frameworks by tomhudson · · Score: 4, Informative

      It isn't even a question of faster ... a lot of those "glued-together solutions" don't scale and are impossible to debug and maintain.

    4. Re:Frameworks by Opportunist · · Score: 5, Insightful

      The problem is simply: Why bother?

      You are usually facing two choices:

      1) Create a slick, nifty, fast framework yourself that does what you need. It will be lightning fast.
      2) Use some sluggish can-do-everything-and-more framework out of the box that does 10 times what you need. Basically, it's like delivering a soup cube with a flat bed.

      Option 1 will take about five times the development time, but save you well over 60% runtime.

      Your boss will outright fire you if you opt for option 1. Why? Because it takes 5 times dev time for 0.5 seconds saved during use.

      Machines today are fast. Much, much faster than what we need for programs to run. Hell, even games are today produced with sluggish frameworks that waste resources left and right, and they tend to be the programs that are most time-critical an "ordinary" user would get to see.

      I hate this development as much as anyone who learned programming during a time when memory was scarce and gaining 10% run time speed was worth everything. But that simply ain't true anymore. Today you have programmers (I use that term loosly now) that look at you blankly when you ask them what sort algo they used, then they give you the name of some library function. No, they have no idea what the function does. Only that it somehow automagically sorts the stuff. Why this one and not the other one? Because they know this one, or it was the first the help file spit out when they searched for a "search function". But then again, it does not matter. The other function that might have been faster because it happens to implement an algo that is more fitting to the problem at hand would have saved about 0.0something seconds, because the machine running the program eventually is fast enough that it means jack what algo you use. Memory amounts today mean that it is pointless to ponder whether you really need double linked lists or whether you get by with single linked ones. Or that you use variables smaller than DWords to store integers.

      So it doesn't really matter anymore whether you can program, or whether you even know just how much space and time you just wasted with that horrible choice of library functions that will probably eventually even do the work but are just about the worst choice for the problem presented. Modern computers are fast enough and have enough ram to compensate for programers' inaptitude.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    5. Re:Frameworks by Anonymous Coward · · Score: 0

      Nice jab against Java, but if you can't code multi-user dungeons in assembler then there's a reason why your bosses stuck you with Java, dumbass.

      A "factory" is a functor over a type. The pattern gets in the way of its conceptual clarity. It is clearer in assembler. Or Haskell or C or anything that isn't object oriented in a painfully baroque way.

    6. Re:Frameworks by jomama717 · · Score: 3, Insightful

      Frameworks, like anything else, are fantastic when used properly but unruly beasts when they are used incorrectly. My current bane is legacy code that is a poorly thought out amalgamation of early version frameworks. I can hear my predecessors squealing with delight and saying things like "Spring and hibernate will magically handle all of my transaction boundaries and multi-threading? Neato!!" as I slog through 3-4 hundred line stacktraces (no joke) trying to debug a race condition. Brutal.

      --
      while [ 1 ]; do echo -n -e "\xe2\x95\xb$((($RANDOM&1)+1))"; done
    7. Re:Frameworks by Anonymous Coward · · Score: 0
      Parent wrote:

      we're looking up the EnterpriseFactoryBeanMaker class in the 3,456-page Bumper Tome Of Horrible Stupid Classes (Special Grimoire Edition), because we can't remember which of the arguments to the createEnterpriseBeanBuilderFactory() method tells it to make the public static pure virtual destructor be a volatile final abstract interface factory decorator.

      Nice jab against Java, but if you can't code multi-user dungeons in assembler then there's a reason why your bosses stuck you with Java, dumbass.

      You fucking idiot, there are no destructors in Java. And I prefer men, not women.

      -- dKnuth@gayMenMeet.com

    8. Re:Frameworks by Opportunist · · Score: 1

      Whenever you hear a coworker say something like "$framework will handle that for you", duck and cover. It will end up in a horrible mess.

      Use frameworks. But do not rely on them. Know what they are doing. And most of all, know their limitations. Not knowing them will come back and bite you in those parts that make sitting uncomfortable for weeks.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    9. Re:Frameworks by Opportunist · · Score: 1

      Quite true. But try to explain that to your boss. And in the odd chance that you actually managed to convince him to throw his quarter report in favor of a long term investment, because instead of 2 months he's now facing a year of dev time, try to dodge your coworkers who now really have to learn programming instead of simply slapping together a few pieces of ready-made cut/paste snippets.

      Been there, done that, actually even got a t-shirt...

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    10. Re:Frameworks by Ethanol-fueled · · Score: 2, Insightful

      A "factory" is nothing more than a buzzword which is part of the cancer that is killing Java.

    11. Re:Frameworks by Todd+Knarr · · Score: 5, Insightful

      Except that what really happens is that you end up trying to use a sluggish can-do-everything-and-more framework that does 10 times what you need it to do but fails to do 2-3 critical things that you absolutely need to do. And between the time spent learning the can-do-everything framework and what parts of it you don't care about and the time spent kludging and hacking on it to fill in the missing bits, you end up spending more time than it'd've taken you to write your own from scratch or using more primitive tools.

      Been there, done that, got the drawer full of t-shirts.

    12. Re:Frameworks by Pence128 · · Score: 1

      I think there are still areas where 1) is the way to go, for example in very small systems where it could mean the difference between a $1 chip and a $2 chip in a $10 product, the choice is obvious. Sure, it's not exactly glamours, but if saving a couple of bytes and shaving microseconds off loops are what you like to do, give it a thought.

      --
      404: sig not found.
    13. Re:Frameworks by Opportunist · · Score: 1

      I agree. But try to sell that to your boss who just sees a framework, drums on it with his index finger and insists you use it because "it can do everything". You start coding, you make record progress for about 80% of the project because the framework lets you start at about 60% and then you hit a wall.

      Want to swap shirts? I have a drawer of these.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    14. Re:Frameworks by Kohath · · Score: 0

      You know what else doesn't scale and is hard to debug and maintain? Almost everything.

      There's no magic answer. "Increase the budget by 4X to implement an elegant, scalable solution" isn't a magic answer either.

    15. Re:Frameworks by Opportunist · · Score: 1

      Certainly. I am actually in one of the few places where 1) is still the right choice. When you're dealing with an industry that reinvents itself every other month, waiting for a RAD tool to surface is a surefire way to get out of business fast.

      I'm just saying that in most application programming environments, it is not. Provided a company actually pays programmers to develop something "own" instead of just buying whatever toolbox already exists, you are usually facing a problem that stock code can handle. And unless you are dealing with literally tens of thousands of concurrent users, it is almost certainly cheaper to simply get a bigger machine with more ram and CPU horsepower than letting programmers optimize the code.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    16. Re:Frameworks by Hurricane78 · · Score: 5, Insightful

      I absolutely hate frameworks. They are the same as libraries. But without the ability to plug them into anything. They want to be the core of your application, and not play with anything else.
      They are a very “enterprisey” concept.

      Please, all, stop doing frameworks, cut them into their aspects, and start doing libraries again! Nobody wants you elaborate all-encompassing framework that is its own inner platform and yet unfortunately lacks the very function you need the most.

      --
      Any sufficiently advanced intelligence is indistinguishable from stupidity.
    17. Re:Frameworks by tepples · · Score: 1

      And unless you are dealing with literally tens of thousands of concurrent users, it is almost certainly cheaper to simply get a bigger machine with more ram and CPU horsepower than letting programmers optimize the code.

      Unless I can extract a 10-fold speedup by using explicit temporary tables to work around MySQL 5's query optimizer's inefficiencies in evaluating equi-joins to a GROUP BY subquery, so that it doesn't have to do so many unnecessary table scans.

    18. Re:Frameworks by shutdown+-p+now · · Score: 1

      1) Create a slick, nifty, fast framework yourself that does what you need. It will be lightning fast.
      2) Use some sluggish can-do-everything-and-more framework out of the box that does 10 times what you need. Basically, it's like delivering a soup cube with a flat bed.

      Option 1 will take about five times the development time, but save you well over 60% runtime.

      Depending on the scope of the framework in question, and the size of the development team, option 1 can take indefinite time (on the "we're going to release it next month" schedule).

      Case in point. In one of the companies I've worked in the past, the architect was one of those "eccentric genius" type of guys - at least as far as management was concerned. If he thinks he's got the right idea, that's what the rest of the team will do...

      Now, most of the code in the company is written in C++, but then it came to writing a distributed "enterprisey" application where a lot of code was obviously high-level. It was correctly observed that C++, and the typical frameworks that you get for that, is not the perfect tool for the job. The "genius", however, decided that none of the existing language/framework combos - Java, .NET etc - are to his liking, because (I quote) "they are designed by idiots for idiots".

      And so the company, under the guise of working on a major product, instead started to develop an ultimate framework for high-level app development - this covered the whole spectrum: a tracing garbage collector, type reflection, object remoting, serialization, XML parsing, database access (direct SQL execution as well as ORM). One of the biggest chunks was a new, in-house UI framework complete with XML layouts, data bindings, and its own scripting language with a bytecode interpreter, and, eventually, a rudimentary JIT. Gladly, we didn't go for a language of our own for other code - it was still C++, though heavily augmented by various proprietary metadata files, and code generation.

      Now, don't get me wrong. It was actually pretty fun to work on this, for the most part - I did the database & ORM stuff, and I really did learn a lot about how ORMs work, and, more importantly, why they work that way, and have the limits they do. But...

      All things on the list were there... in theory. In practice, because of the pace at which it was all written, bugs were spawning faster than they could be squashed. And, because of certain very dubious architectural decisions, the performance was dismal for most layers. It was really ridiculous to see C++ reduced to performance levels several times, and occasionally two orders of magnitude, below Java and .NET. Again, this was also a good educational experience, in a sense that I've suddenly found out why some things in Java and .NET are that way (and also, apparently, why they are the same - when there really is only one good way to do something).

      End result: one project built on that framework canned mere months after "imminent release" was announced (management was still oblivious to the whole thing back then), another one dragged for two years, "we're going to release this in two months" all the way, and finally aborted when the sheer magnitude of perf and stability problems was exposed. The "genius" was let go shortly afterwards.

      Last I heard about the place, they've switched back to C++ all the way, and Qt for the framework (apparently, management tried to penny-pinch, but then realized that it's better to spend money now rather than have the repeat of the past fiasco). They seem to be doing a lot better - at least the second failed project was restarted from scratch on a new foundation, and ultimately released without slipping the schedule too much.

    19. Re:Frameworks by complete+loony · · Score: 4, Insightful

      That's the kind of thinking that leads to batch jobs taking an hour, that should be done in 5 minutes or less. I've seen way too many "programmers" that don't understand what their high level language is doing being their backs, so they end up copying memory around all the time. Or going off to ask the database the same question over and over in a loop because they couldn't be bothered to refactor the code so it cached the answer.

      --
      09F91102 no, 455FE104 nope, F190A1E8 uh-uh, 7A5F8A09 that's not it, C87294CE no. Ah! 452F6E403CDF10714E41DFAA257D313F.
    20. Re:Frameworks by bryanduxbury · · Score: 1

      There are still plenty of places where it's important to get that extra 10% runtime. It's just that writing your average web app or silly desktop application simply aren't those places anymore.

      Personally, I like this development - you don't have to bother so much with stuff you need to "just work" so that you can spend time optimizing and improving where it counts. My admin UI is "slow", but the libraries and business logic I'm using in my Hadoop applications are hella optimized.

      If you are more interested in working on the latter kind of problem, maybe it's time you try to find a different job. (Incidentally, Rapleaf is hiring engineers.)

    21. Re:Frameworks by tsalmark · · Score: 1

      Your not a programmer are you? Knuth was not writing space invaders as a kid, he wrote the bible instead. Knuth is one of the wizards of academic programming. The article is by some guy who quotes Knuth a little to try and justify his rant.

    22. Re:Frameworks by Anonymous Coward · · Score: 0

      It isn't just about speed it is also simplicity. The home grown solution is often faster to develop than the time it takes to learn the intricacies of a monolithic framework. It is also easier to teach other employees the logical to-the-point framework that does only what is required by the problem you are trying to solve. But narrow minded upper management most often prefers the big (proven?) framework over taking a chance on something actually better. I once had a working solution at a startup company that management was reluctant to even look at. I was never good at playing politics, so I and the other developer that sided/worked with me got fired. The company tried to use J2EE servers instead (I think in part so they could say they were using it in ads since J2EE was hot at the time) and went out of business a year later after burning through 120mil VC money. Soon after being layed off I got a job at a more open company (that starts with a G) and made millions in stock options. So it all worked out for the best.

    23. Re:Frameworks by Opportunist · · Score: 1

      If it is used 5 times an hour, as it not uncommon in most applications that are only used internally, it means jack that you just saved a whole second per call.

      Seriously. It is of course a good idea if that routine gets called a few hundred times per second. But compare the time saved to the time used. If the time used is already insignificant, it doesn't help that you save half of it.

      Not "because it is possible ", but "because it is necessary" is the deciding factor in business.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    24. Re:Frameworks by benjamindees · · Score: 5, Insightful

      That's the kind of thinking that leads to batch jobs taking an hour, that should be done in 5 minutes or less.

      I've said this before and I'll say it again, because I've created plenty of unoptimized "batch jobs" that take longer than they should.

      COMPUTERS ARE CHEAPER THAN HUMANS

      A cubicle filled with racks of computers running inefficient batch jobs costs a tiny fraction of a competent person sitting in the same cubicle and optimizing every little thing by hand. And a program written in a high-level language is probably cheaper to maintain over the long run as well.

      --
      "I assumed blithely that there were no elves out there in the darkness"
    25. Re:Frameworks by Opportunist · · Score: 1

      Horrible, ain't it? But you will see a lot of those 1 hour batch jobs that should take 5 minutes. At least until more of those jobs accumulate and management doesn't simply shrug it away with a "so? It has all night to run".

      And that's basically what's happening here. We have more time for those jobs than these jobs need. So their inefficience does not matter.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    26. Re:Frameworks by phantomfive · · Score: 1

      My favorite are singletons. I love calling them global variables (which is essentially what they are) and watch people's faces as they go through fear, confusion, realization and laughter. "Hey, I like how you used these globals here." Not everyone quite makes it to the realization stage.

      --
      Qxe4
    27. Re:Frameworks by dcollins · · Score: 1

      "Hell, even games are today produced with sluggish frameworks that waste resources left and right, and they tend to be the programs that are most time-critical an "ordinary" user would get to see."

      Have to call BS on this. Can you give an example or citation of such a thing?

      --
      We know where leadership by an anti-intellectual "strongman" who scapegoats minorities and likes boisterous rallies goes
    28. Re:Frameworks by caywen · · Score: 1

      Actually, the whole Design Patterns thing is pretty silly. Programming is the only profession where someone writes a book where each chapter is like, "Something *reads* while something *writes* and it's called a reader/writer design pattern. Genius!!"

    29. Re:Frameworks by Belial6 · · Score: 1

      Your right. If I needed a soup cube delivered 20 miles away, and there was a perfectly good gassed up flatbed truck sitting outside for you to drive, and you chose to walk instead because using the flatbed is overkill, I would fire you. I do development in Lotus Notes. It is a bit of a hog, and certainly not the fastest running database on the planet. What it does do is allow me to write complicated secure replicated groupware applications at a speed that blows most other development environments out of the water. We have mainframe programmers at my work as well. I wouldn't dream of trying to put many of their applications into Notes, but many of the applications that I roll out in a month or two, would literally take them years to write. Applications that I roll out in a week would take them 8 months to a year. Frequently, if they were to write the applications instead of me, the need for the application would have already passed before they could even finish it.

      That being said, I believe that efficient programming will return. We are getting diminishing returns on hardware. Users and businesses still want more from their computers. If that doesn't come from hardware, it will have to come from better software.

      Software bloat was a good thing. It still is. We are in it's day. It's days are numbered though. I don't know when we will hit our heads on the upper bounds of hardware, but it will likely happen. When it does, there will be a whole generation of software development that is centered around optimization. New developers will wonder at the 'stupid' mistakes of the last generation, and the older developers will lament 'the good old days' of being able to focus first on business needs instead of code optimizations.

    30. Re:Frameworks by Tablizer · · Score: 2, Insightful

      I absolutely hate frameworks. They are the same as libraries. But without the ability to plug them into anything. They want to be the core of your application, and not play with anything else.

      I've promoted the idea of "helpers" instead of "wrappers" (what you call frameworks). Wrappers hide you from the guts, but helpers allow you to work with them at a higher level when convenient without preventing you from getting at the guts when needed. You date helpers, but have to marry wrappers. It's usually easier to get out of a date than marriage (except maybe in Hollywood).

      Helpers have the primary goal of automating the drudgery of common idioms, not to prevent you from sticking your tongue in the fan by locking it away, as frameworks often do.

      And (good) helpers tend to be designed with a smaller granularity such that you can mix and match and rewrite and toss as needed. They may take more work initially than a framework, but they are also more flexible.

      Helpers differ from "traditional" libraries in that they are a kind of framework, or set of frameworks, but with looser coupling between the parts.

    31. Re:Frameworks by tepples · · Score: 1

      If optimizing a query executed roughly 2,000 to 3,000 times an hour by a web app running through WinMo barcode scanners means we can speed up receiving inventory and filling orders by 25 percent, we don't have to hire as many temps, and we save real money.

    32. Re:Frameworks by Opportunist · · Score: 1

      Only if the temp doing the reading actually has to wait for the scanner to be ready. And, bluntly, if reading and processing is done synchronously, you have other problems at hand than optimization.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    33. Re:Frameworks by Opportunist · · Score: 1

      What part? Sluggish frameworks or being time critical?

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    34. Re:Frameworks by dgatwood · · Score: 1

      It's a fine line, though. If it has to be delivered once, perhaps. The fifth time you make a programmer spend $10 in fuel to deliver a $1.50 soup cube, the programmer you canned will already have a job at a better shop while you, the manager, will be asking people for change at the highway off-ramp. :-)

      For most things, performance isn't that important, but in aggregate, performance is pretty important. It's not a big deal if it takes ten extra seconds to do a task because the server is a little slow, but if you do that every couple of minutes, you've just wasted forty minutes per day. It's a constant balancing act between using higher-level frameworks that save development time and using lower-level code that improves performance.

      --

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

    35. Re:Frameworks by EsbenMoseHansen · · Score: 2, Informative

      Tragic story :) For C++ (also Java these days) knowing and researching what libraries are available is more than half the battle. I was readíng the list of what he was doing, and Qt provides at least he beginning of everything there in the language he wanted (C++), excepting the garbage collection (which makes little sense in GUI programming in general and especially none in Qt). That that was what they ended up with was even more funny in a tragic kind of way.

      --
      Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.
    36. Re:Frameworks by Belial6 · · Score: 1

      It is indeed a balancing act. The smart developer, and smart companies know when to choose one path or the other. Heck, sometimes it is more efficient to write a slow bloated version today, making you enough more efficient over the manual process that you now have the time and budget to rewrite it faster and more efficient. There will always be overlap, and situations where one method or the other is preferred. Right now, we are still moving a lot of manual process to computers. This means that the efficiency gained by moving ten manual processes to computers in a bloated way is generally more efficient than moving 1 processes in a lean, highly optimized way.

      I don't think the balance will fall on this line forever, but that is where it is now.

    37. Re:Frameworks by Tablizer · · Score: 1

      I've also found that incremental improvement is easier for organizations to digest. Toss-and-start-over is just a hard-sell and risky.

    38. Re:Frameworks by daveime · · Score: 1

      Damn it Cartman, stop saying hella !

    39. Re:Frameworks by Chief+Camel+Breeder · · Score: 1

      ... Machines today are fast. Much, much faster than what we need for programs to run. ...

      If only! If your computer is faster than your needs then you're blessed with an easy project. Or you spent a vast amount on hardware. One of my current projects lies bleeding because we can't afford the machines to run the simple solution; and we're doing some painful redesign to fit the project to the hardware budget

    40. Re:Frameworks by Anonymous Coward · · Score: 1, Insightful

      congratulations. you picked the wrong framework then.

    41. Re:Frameworks by BlackHawk-666 · · Score: 1

      Sometimes you have to get a programmer to optimise the code simply because no machine would be even remotely fast enough for the application given what the original programmer wrote. Two examples.

      1. An app that had taken about 12 months to develop had a startup routine that was slow - taking 6 minutes to show the opening screen. It was almost ready for launch when I was asked to take a look at it. The programmer had a tangle of internal routines that made thousands of calls to the database, choking it down. I added a little caching and showed him how to remove some loops and we got the launch speed down to 1 second. That's 3600 times as fast - an improvement that would be very hard to cover with some more ram and a faster hard drive.

      2. A mission critical web app for a huge financial had a page that took 30 seconds or more to run with just one user testing, imagine how it would go once 100 people simultaneously used it. Once again there were code loops hitting the database thousands of times among other things. I restructured the main query and we brought the run time down to 0.4 seconds, which was good enough.

      In both cases it took me just a few hours to fix the apps and made them viable for release. Faster hardware would not have allowed these to run fast enough.

      --
      All those moments will be lost in time, like tears in rain.
    42. Re:Frameworks by BlackHawk-666 · · Score: 1

      A large financial in Australia was running a new project to scan everyone's signature and make available online throughout the organisation. There was quite a lot of money involved already, and they had millions of signatures to scan and then identify off legal documents.

      There were six women sitting in a small room using a program written in Access that was outsourced to some company. After each signature group was shown to them (1-3 signatures) they would identify which ones they could match, then hit the button to show the next group. It took 6-10 minutes to get the next signature on screen because the developer had only tested their app with a dataset of 10 sigs.

      It took me 30 minutes to identify the bad section of code and rework it - giving them instantaneous response time. Now instead of six ladies sitting about reading newspapers waiting for the system we had six ladies getting the job done.

      My time was billed out as $80 / hour - so I guess it cost $40 to fix it and it saved hundreds of thousands. You do the math.

      --
      All those moments will be lost in time, like tears in rain.
    43. Re:Frameworks by ChrisGilliard · · Score: 1

      You forgot about option #3: Forget about frameworks and write the actual code that you need.

      I have found that the overhead of understanding Frameworks generally outweighs their usefulness. I'm sure there are exceptions, but I have not found them yet personally. Many people use frameworks to do things that are absolutely trivial and I just do not get it. Generally, the requirements I see NEVER map to something that's out there exactly. If you can program, you just write what you need and it always works, it's fast, and probably most importantly you understand it completely.

      Also, I totally disagree with the point that "Machines today are fast". I mean, obviously yes machines today are fast. But, in particular if you are writing a server side app, it's very easy to write something that does not scale. I have seen an app that used a lot of libraries and frameworks, etc that ran SO slow that could only process something like 1 request every 5 seconds. The same app was re-written (without using any libraries or frameworks at all) to be able to support tens of thousands of requests per second on the same physical server. Needless to say the guy who wrote the original app was fired and the guy who wrote the thing that supported 10s of thousands of requests per second got praise/bonuses/etc. The key to this kind of improvement was using the correct algorithms and data structures. When you just stitch whatever is free together you are rarely able to optimize things in such a way and you typically end up with a VERY slow app. I realize that not everyone is working on complex server side apps that need to scale, but even on front end apps, why make your app slower, lose the understanding of what you're doing, and understand some complex frameworks when you can actually write your own code in maybe less time? I mean, isn't this why so many apps are so slow. Every time i use an app that doesn't run instantly, I think about this concept. If everyone has this attitude that hardware is fast, then why do we all experience slow apps? It's because developer A thinks it's ok to reuse slow bloated code and it's still fast enough, but then developer B adds in a new feature that slows it down a bit more and uses a slow framework, then developer C adds in some other feature that slows things down further and in the end your code gets so bloated that even these really awsome machines can't run them in a way that the user expects.

      --
      No Sigs!
    44. Re:Frameworks by wrook · · Score: 1

      The problem with frameworks is that they dictate design decisions. This can save you a lot of time up front because you don't have to rough in your design. You save a lot of coding effort. But if the project runs for a long time, your design will almost certainly move away from the original design. With a framework, you have 2 choices: write big ugly hacks to work around it, or abandon the framework. Since the second option is very time consuming everyone picks the first one. This results in code that slowly gets cruftier and cruftier. Eventually you lose all the time you gained up front and have a crappy code base to boot.

      If you write your own, you will probably be reinventing a lot of wheels as you start. But you can easily refactor the design as you go, keeping your code base clean.

      Having said all that, the number of teams that actually refactor their design as the go is vanishingly small. Most end up with crap no matter what they do. So, one might say that frameworks are generally useful. I often wonder if extremely minimal frameworks would be more helpful. The would contain only enough to get you over the beginning hump, but allow you to easily modify it as you go.

    45. Re:Frameworks by Anonymous Coward · · Score: 0

      3-4 hundred line stackfaces? wow, that is brutal.. Not as brutal as a tour in Afghanistan, or having a child with a Hole in the heart.. or even living in hunger and poverty for thirty years.. but hey brutal none the less?

    46. Re:Frameworks by DeltaQH · · Score: 1

      That may explain the slugginesh I detect lately on computers GUI, no matter how much memory or CPU cores they have. I get this slow responsiveness and the strange feeling that it is doing something in the background that has nothing with what I want it to do.

      And that when the poor thing does not get stuck for several seconds. It drives me mad, Who has programmed this?

      But when I talk with my younger colleagues who do software development and they get a blank stare when I explain them that foundation algorithms, and a programming technique compatible with the underlaying hardware and/or OS structure, is more important than a nice Object/Hierarchy structure and patterns, I understand.

      A good structure is nice to have to understand and have a good design of the program, but without a solid underlaying algorithm structure, it is just a good show, nothing else. And many times the selected algorithms will mandate the Object architecture. Not long ago I showed a programmer, with quite a long experience, how to reduce the running time of his software when processing a file by just changing the algorithm. He was using an 0(n2) kind of algorithm. From minutes to a few seconds!

      No matter how fast and resource full your hardware is a O(n2) is still an O(n2) algorithm, at it will eat it for breakfast in no time if not careful with the way you program.

    47. Re:Frameworks by pandronic · · Score: 1

      There is a 3rd choice ... a hybrid between the two models: slim down the framework or copy and refactor useful bits of code to your library.

      Having said that, I'm the kind of programmer that almost never uses frameworks other than my own. But then again not everybody has this luxury - I'm self employed and I'm working with the same technologies for about 8 years. Also I don't have to work with anyone on code.

      This is actually the only thing that keeps me in the programming business - otherwise, for someone who started learning programming in the early 90s the current state of affairs is really unbearable.

      Also, wiping out your own solutions and taking the time to write good code will pay-up in the long run, even though the initial development time may double or triple. I imagine, though, that this would be a tough thing to sell to managers.

    48. Re:Frameworks by drewhk · · Score: 1

      They are only "global variables" when they are JVM (or whatever) scoped. The problem with simple global variables that they are always global scoped, but with the Singleton pattern you can have thread, session, or other scopes as well.

    49. Re:Frameworks by drewhk · · Score: 1

      Expect the frameworks that are specially designed to NOT intrude in your model. Just look at most of the POJO frameworks nowadays. No need to implement specific interfaces, no need to derive from base classes.

      Also many frameworks I used are already modularized -- they are "cut into aspects" -- exactly what you want.

    50. Re:Frameworks by Anonymous Coward · · Score: 0

      And a big LOL at you for billing $40 for something that saved hundreds of thousands to a bank.

    51. Re:Frameworks by fuliginous · · Score: 1

      Faster hardware tends to be the source of the problem. It makes people lazy because they don't have to attend to the details.

      So it's about the worst cure that could be taken.

    52. Re:Frameworks by fuliginous · · Score: 1

      But both should exist if the lines that mark interfaces are drawn in the right place.

    53. Re:Frameworks by Burnhard · · Score: 4, Insightful

      Part of your skill as a developer is in applying the correct framework or library to the problem at hand. If your framework doesn't do the two or three critical things you want it to then I suggest you've chosen the wrong framework!

    54. Re:Frameworks by DeltaQH · · Score: 1

      Right, but most programmers today see only one side, and are totally aware of the other. For them a sorting algorithm is just a function they call. How it works, which to choose is beyond most of them.

      And if forced to design something from scratch, they can only see the structure not the efficency.

    55. Re:Frameworks by obarel · · Score: 3, Insightful

      That's just not true.

      My first task at my previous job was to speed up a perl script that took 12 hours to run. That meant that until you got the results, you were stuck. It meant that "tweaking" the input parameters required a lot of preparation work, or just wasted a huge amount of time.

      I didn't know perl, but I knew how to program and how to optimise. It took me two days to learn perl (just enough for the task) and to reduce the runtime to 30 seconds (I was told about the original programmer "he's a scientist, not a programmer"). The result was still written in perl, by the way.

      The improvement meant that the script could be used a hundred times a day with different parameters, something that would have taken months. Your suggestion is to buy a thousand machines to crunch the numbers instead of optimising the script. That just doesn't make sense to me.

    56. Re:Frameworks by CptPicard · · Score: 1

      I'm a bit of both an algorithmics and programming language design geek with leanings for high level programming, and I never quite understood

      and a programming technique compatible with the underlaying hardware and/or OS structure,

      this part. A good language that allows for flexible design doesn't necessarily have to do much with the hardware, but it still allows you a very good access to the algorithmic part of the problem. The "hardware" side of things will mostly give you constant-factor improvements... but strangely, a lot of the people who talk about programming near the hardware will then give really awful examples like your O(n^2) case. That sort of stuff should be obvious to anyone doing any kind of programming IMO.

      --
      I want to play Free Market with a drowning Libertarian.
    57. Re:Frameworks by rawkstar · · Score: 1

      I have done it both ways. The acid test, does it do what it is supposed to, first from my perspective then from user perspective. It is amazing how seeing something work (or not) clarifies the mind. If it does not work then step back take a look and decide what to try next. Sometimes it means starting over again with a very different approach. What I have learned is that the trying things out to see what works and what doesn't it is an integral part of the process. Of course if you already know everything you need to know about the problem then you know the solution and you just do it. This is not so much fun but seems to be what people are hoping to pay for. A good friend of my maintains that the best thing that can happen once you have a new system up and running is a catastrophic disk crash (old school) because then you can start over and you know how to do it properly.

      A slight aside; some throw-away code lasts forever, it gets wrapped and re-wrapped because it implements some important functionality need when it was written but is actually more generally useful. Many elaborate carefully planned and executed projects never make it to production because they have somehow missed the window of needfulness. Requirements have changed or were off target from the beginning. Has anyone ever done a system spec'd by higher ups only to find that the people who actually are supposed to it see things very differently? Talk about resistance!

    58. Re:Frameworks by Nerdfest · · Score: 1

      I'm still of the opinion that on occasion, the right framework is one you write yourself. Sometimes there's just too much of a compromise with all of the existing frameworks when you're dealing with an unusual case. Admittedly these cases are few and far between these days as most things tend to become 'solved problems'.

    59. Re:Frameworks by benjamindees · · Score: 2, Funny

      A factor of 12 improvement is, in my experience, fairly typical. And, yes, you can maintain 100 computers for the price of a single competent programmer. So, while it's not the best solution, it is certainly a very economical one.

      A factor of 1400 improvement, as you claim, is simply ridiculous.

      --
      "I assumed blithely that there were no elves out there in the darkness"
    60. Re:Frameworks by Nerdfest · · Score: 1

      As someone who is occasionally forced to write code that will be run on a large mainframe, option 2 might save a few million dollars a year in CPU costs. Admittedly this is one of the few cases where the "hardware is cheap, programmers are expensive" rule does not apply in all cases.

    61. Re:Frameworks by gbjbaanb · · Score: 1

      It's gotten a lot easier to share the common solutions now, and my outsourced Indian colleagues are free to do the real work.

      Fixed, well apparently until I receive the code they produced, for you.

    62. Re:Frameworks by Anonymous Coward · · Score: 0

      ... And between the time spent learning the can-do-everything framework

      You mean, you actually learn these frameworks?? instead of copying from the tutorial pages?? what a waste of time!

      Today, it is acceptable to just cut and paste without even taking the time to learn the language core library, much less other frameworks.

      Witness the standard library of Ruby.. big chunks of it undocumented, if you want to use them, you seek out a "tutorial" some place on the web, or maybe get a book. Just cut and paste from the examples and be done with it.

      No need to learn the actual details, and indeed, unless you read ruby source code, you *can't learn the details* of the standard library because they aren't documented. (the RSS parser is a good example of this)

      I know this is acceptable because despite being largely undocumented, ruby has become quite popular.

    63. Re:Frameworks by gbjbaanb · · Score: 3, Insightful

      no, you cannot maintain 100 computers for the price of a single programmer - because you'll have to hire (or pay) for the sysadmins to manage them. There's a lot of hassle involved in computers that you probably don't realise occurs between hardware and software setup, there's networking issues, updates and managed downtime. In most corporates, just having 1 extra computer will cost as much as that programmer in terms of meetings, requests, forms and project managers for the assignment of computer to project, plus security reviews, etc etc etc.

      A factor of 1400 improvement is not ridiculous. I've seen similar - a colleague wrote some code, but becuase he didn't realise the interaction of his way convoluted OO code, he ended up doing 3 pages (that's printout) of DB queries for every update packet - of which he received around 3 a second. Slow is not the word. Fixing it involved a little cache and remembering the results of the first query he made instead of repeatedly asking the DB for the same data.

    64. Re:Frameworks by julesh · · Score: 1

      Expect the frameworks that are specially designed to NOT intrude in your model. Just look at most of the POJO frameworks nowadays. No need to implement specific interfaces, no need to derive from base classes.

      Some would say this makes them not frameworks. Example: I love Spring and use it extensively. I don't, however, use it as a framework: I use it as a library that handles the job of creating certain objects for me.

      Sometimes you can't help but work inside a particular framework (Java Servlets come to mind... you basically have to use the control flow specified by the server architecture, you can't change it around so you control the flow or the initialization, for instance), but Spring is absolutely not like this, and that in my mind means it isn't a framework, no matter what its name tells us it is.

    65. Re:Frameworks by jomama717 · · Score: 1

      Brutal with respect to the topic at hand, of course. I wouldn't care to boast of my life's actual problems to a group of strangers online, anonymously or not.

      --
      while [ 1 ]; do echo -n -e "\xe2\x95\xb$((($RANDOM&1)+1))"; done
    66. Re:Frameworks by drewhk · · Score: 1

      Well... Ok. We are talking about the same then -- with different interpretations of the term "Framework". I never argue about definitions :)

      Intrusive libraries could really suck, I agree. But in fact it's the nice libraries that taught me how to avoid these problems when designing my own API.

    67. Re:Frameworks by benjamindees · · Score: 1

      Really, you think it takes more than one sysadmin to manage 100 servers running "batch scripts" or "perl scripts"?

      Where do you work?

      In most corporates, just having 1 extra computer will cost as much as that programmer

      Or are you just trolling?

      --
      "I assumed blithely that there were no elves out there in the darkness"
    68. Re:Frameworks by arjan_t · · Score: 1

      They are only "global variables" when they are JVM (or whatever) scoped. The problem with simple global variables that they are always global scoped

      Not true. "simple global variables" (public static fields of some class) can be isolated in Java by means of class loaders. Although class loaders can be a PITA themselves, they actually work for this.

    69. Re:Frameworks by drewhk · · Score: 1

      True, this is what OSGi does. What I wanted to emphasize that the Singleton pattern hides how the "globality" (or other scope) is enforced, therefore it is more flexible than global variables. Also it works in other languages where the classloader trick is not applicable.

    70. Re:Frameworks by metamatic · · Score: 1

      Not to mention that by using the framework, you've added an external dependency to your project.

      Want to move your code to a different platform? Better hope the framework is supported on that platform. Want to set a release schedule? Better check it's compatible with the framework's release schedule. The framework has a critical security hole they just patched? Well, I guess it's time for you to pull a new release out of your ass, isn't it? Framework A version X clashes with Framework B version Y, and you use both? Good luck, you're gonna need it.

      Some frameworks are useful, but there seem to be just as many that are far more trouble than they're worth. Struts springs instantly to mind--the stuff that Struts does for you just isn't that hard to do yourself, and most of the time understanding Struts by decoding its documentation is going to be harder than writing the code for the bits of functionality you actually need.

      --
      GCHQ Quantum Insert installed. If only our tongues were made of glass, how much more careful we would be when we speak
    71. Re:Frameworks by obarel · · Score: 1

      It's not a question of maintaining 100 computers for every competeny programmer. It's the price of 100 computers for every script written by a non-programmer. If a script running at 100% CPU takes 12 hours to run, you cannot run 10 such scripts at the same time on the same computer without delaying the result. If your non-programmer writes many scripts your cost spirals out of control. Employing one "scientist" and one "programmer" may be more reasonable.

      Not to mention the fact that you may want to package and sell some of these tools, and telling your customers "this thing runs for 12 hours, or you can buy 100 computers" is ridiculous when the alternative is so simple.

      The 1400-fold optimisation was the result of not passing huge arrays by value, hoisting expensive calculations out of loops and memoising. I don't think there was any more to it than that - it wasn't exactly "low level" optimisation (I didn't have to rewrite anything in C, for example).

      But taking only the first point - if you have a list of 10000 elements and you pass it like this:
      func(@data)
      you actually copy 10000 elements. If you pass it like this:
      func(\@data)
      you only pass the reference.

      Can you believe that the second version works 10000 times faster than the first? Can you see that for a non-programmer the first option is more "straight-forward"? It doesn't take a genius to "optimise" this, but if you've never heard the term "by reference" you may not know any better.

    72. Re:Frameworks by Coryoth · · Score: 1

      Why this one and not the other one? Because they know this one, or it was the first the help file spit out when they searched for a "search function". But then again, it does not matter. The other function that might have been faster because it happens to implement an algo that is more fitting to the problem at hand would have saved about 0.0something seconds, because the machine running the program eventually is fast enough that it means jack what algo you use. Memory amounts today mean that it is pointless to ponder whether you really need double linked lists or whether you get by with single linked ones. Or that you use variables smaller than DWords to store integers.

      I've worked on time critical code and you know what? Most of the time using that standard library search or sort function is the right thing to do. Using whatever slightly inefficient but general and prewritten library function is usually the right choice. You see code maintainability is very important too, and doing things in the clear and simple way with library functions helps a great deal with maintainability. Yes, you do still need to know your different sort algorithms, and there will be sections of code that will have to be rewritten with a more careful hand-tooled solution, but as a first pass it's better to start with the naive library based approach until you've actually identified which portions of code are actually the time critical ones -- premature optimization is painful to deal with later: I've inherited code bases where everything was completely hand-tooled and extremely fast but were incomprehensibly complicated and ran just as fast with 90% of those carefully hand optimized things replaced by simple library calls.

    73. Re:Frameworks by Fuujin · · Score: 1

      Looking at this issue from the perspective of time spent solving the problem versus the speed increase has been perfectly valid in the past and even now. We are, however, starting to enter the era where other concerns emerge and begin to dominate. The energy spent annually into processing data in all its forms is enormous. The sum totals we see now are already comparable to national energy budgets and will certainly increase in the future. This is a significant source of CO2 emissions, too. http://arnoudm.files.wordpress.com/2009/01/co2datacenters.jpg How large part of this energy is currently spent processing unnecessary code from unnecessarily large frameworks, using unsuitable algorithms to solve well understood problems or wasting CPU cycles in otherwise inefficient ways? As software - like frameworks - bloat, this is only getting worse and worse. Advances in computer architecture and power efficiency are not even close to keeping up with the pace in which new needs for data processing are being uncovered. This is not so much of an issue in personal computers, while the idle power consumption is still relatively high. As these computers are slowly moving towards being able to sleep when not in active use, it's becoming more important to write software that doesn't keep computers artificially active. This is also a domain where significant energy and cost savings await, should the software developers be aware of the benefit of efficiency. Programming effectively in any language is something that should be appreciated in equal merit because of the efficiency gains and not just because of the advantages it brings to the user or the development process. This is something that I believe will be more widely recognized over the next decade.

    74. Re:Frameworks by tepples · · Score: 1

      Only if the temp doing the reading actually has to wait for the scanner to be ready.

      The process goes like this:

      1. User scans an item's UPC.
      2. DB read: Figure out to which order the item belongs and what temporary location holds this order. This happens twice for each item, and this is the query that I optimized.
      3. User scans barcode associated with this temporary location.
      4. DB read: Figure out to which order the item belongs again, just in case another employee holding another of our scanners has already filled that order with an identical item and this item now belongs on a different order.
      5. DB write: Mark the item on the order has having been filled.
      6. DB read: Figure out whether all items on the order have filled.
      7. If so, DB read: Figure out the order's entire information in order to print a packing list, and find the next printer in a round-robin pool of printers to print the invoice.
      8. DB write: Mark this printer as having been used most recently.
      9. Format the order's information and send it to the printer's spool.
      10. Tell the user to which printer the invoice was sent.
      11. User pulls all items from the temporary location and places them in another location to be packed, along with the packing list.

      if reading and processing is done synchronously, you have other problems at hand than optimization.

      The other problem at hand is that having too many things in flight at once confuses employees. Which step of this process would you make asynchronous without confusing the user with more than one order at a time?

    75. Re:Frameworks by Burnhard · · Score: 1

      Again, that's a decision you make if you can't find a suitable framework. We developed our own framework recently for a specific product, using a few third parties libraries (which required modification). Part of the process of defining the requirements and specification for the product involves balancing time, the capabilities of available frameworks or libraries and the various skills you have within the team. If someone says to me, "I would like you to produce A, B and C and I'd like it in six months", it's perfectly acceptable for me to say, "I can give you A and B, but C will take a further six months". Defining requirements is often a kind of negotiation like that. People tend to come unstuck when those deciding what they want the product to do have no knowledge or understanding of what is required in order to do it.

    76. Re:Frameworks by Anonymous Coward · · Score: 0

      but your ego of your self importance is more than all your users' time, energy and ewaste?

    77. Re:Frameworks by Gorobei · · Score: 1

      You capture the absurdity of the singleton pattern well. It's a single instance of something but it's actually not (it's only single by thread, scope, or whatever.)

      Every attempt to anoint object X as a singleton has failed. The canonical examples of the CPU, the CRT, the mouse all failed.

      Eventually, the programmer will achieve enlightenment and realize he has reinvented LISP's dynamic variables. Or not.

    78. Re:Frameworks by DefConOne · · Score: 1

      Frameworks can be your friend, but there are a number of situations in which you'll need to become "more than friends". It seems like there is a point in every project in which one of the programmers ends up digging into framework code to figure out a problem -- usually a performance problem -- which to some degree defeats the "time-savings" justification for using a framework in the first place.

    79. Re:Frameworks by Anonymous Coward · · Score: 0

      That's right. The original idea of a framework is the software product line one of your company, where the derivations are the product variations and development. The object or function libraries where always supposed to contain only cohesive self-contained services with little to no side-effects and definitely no undocumented side-effects that are not bugs themselves.

    80. Re:Frameworks by Todd+Knarr · · Score: 1

      The problem is that, in my experience, there is no right framework. All of them will be missing 2-3 critical things you need to do. Different critical things, but they'll all be missing something somewhere. That's because they're written to be generic, they don't take into account your specific business cases, so there's always something the framework developer never thought of and never accommodated.

    81. Re:Frameworks by benjamindees · · Score: 1

      It's the price of 100 computers for every script written by a non-programmer.

      Okay, yes I was not entirely clear but I realize this is true based on your example, so I concede that even the best scripting language is no match for a determined idiot. And if you can find enough of said idiots to keep you employed, more power to you. I'm certainly not advocating that scripts created by unskilled users replace the need for legitimate scientific programming.

      --
      "I assumed blithely that there were no elves out there in the darkness"
    82. Re:Frameworks by tendrousbeastie · · Score: 1

      Ok, well it is actually 360 times as fast, not 3600 times faster.

    83. Re:Frameworks by ScrewMaster · · Score: 1

      congratulations. you picked the wrong framework then.

      More likely his boss picked the wrong framework. That's how it usually goes, because the criteria used are often less about the best software tool for a particular case, than some other concern (price, it's what the boss already "knows", it's what the company is already using, etc.) And, the truth is that sometimes the boss is right. "Wrong" is a relative term, because programmers have a relatively narrow perspective on a product's life cycle and don't always have the big picture.

      --
      The higher the technology, the sharper that two-edged sword.
    84. Re:Frameworks by Blakey+Rat · · Score: 1

      Ok, let's put this in reality-land.

      If you can't write your own code to accomplish the "two or three critical things" in less code and time than it takes you to rewrite the entire framework from scratch, you suck as a programmer. I was going to type a lot more there, but that's the essential point.

      Besides, what the hell framework are you using that this is even an issue?

    85. Re:Frameworks by Blakey+Rat · · Score: 1

      That's the kind of thinking that leads to batch jobs taking an hour, that should be done in 5 minutes or less.

      And...?

      You say that as if it's a problem. But look at it this way:
      1) Before it was a batch job, it took actual human beings days of effort to do what's done in one hour now.
      2) If it *is* business critical, then you can spend the additional time required to optimize it. If it's not, then you saved a lot of time and money.

      I swear to God most programmers posting in this thread are completely incapable of looking at the big picture. The database doesn't get offended if you ask it the same thing over and over.

    86. Re:Frameworks by Oligonicella · · Score: 1

      Horse shit. I rewrote a bank's microfiching nightly batch run. Why? It was pushing five hours and inching towards the next day's processing. After the rewrite, it ran in forty-five minutes. It was taking so damned long for a trivial reason. The record keys were insufficient and it was reading the entire week's file to get at that day's data. Optimization isn't restricted to a friggin' hundred line algorithm, it spans the entire project. It's a way of thought from the start, not something you apply later as needed.

    87. Re:Frameworks by Oligonicella · · Score: 1

      Please explain to me how you can take a batch program which processes a data stream and simply put it onto 100 machines and make it run faster? Assume the parameter of the data stream being serially relevant from record 1 to record n.

      Oh yes. Do so without modifying the program.

    88. Re:Frameworks by arjan_t · · Score: 1

      I've said this before and I'll say it again, because I've created plenty of unoptimized "batch jobs" that take longer than they should.

      COMPUTERS ARE CHEAPER THAN HUMANS

      A cubicle filled with racks of computers running inefficient batch jobs costs a tiny fraction of a competent person sitting in the same cubicle and optimizing every little thing by hand.

      The best results are often obtained by going for a hybrid approach. Either extreme is not good. I've seen places where people tried to safe a mere 50 bucks for some simple memory upgrade, and instead letting a team of programmers optimize code for months. On the other hand, downright sloppy programming like asking the database a thousand time the same question in a loop and just throwing all the hardware at it that you can buy "since programmers shouldn't be bothered to think cause that costs money" is equally stupid.

      Just make sure you got reasonably fast hardware. You don't need 300 servers with 128GB of memory to run the website of Joe's Sandwich shop, but you surely don't have to artificially limit yourself to a 256MB server for running that huge enterprise app your 100+ staff makes daily use of. Likewise, let programmers spent some time on optimizing code. Lifting some invariant from a loop is an easy win which every programmer worth its salt should be able to do. Knowing how to operate a profiler and having some basic idea of what part of the app gets hit most frequently, so some focussed optimization can be directed to hot spots never hurts too.

      Pre-mature optimization surely is the root of all evil, but some common sense optimizations in proven hotspots really should be among the standard tasks of every developer. Don't mindlessly change all your instances of Double to double in Java, since that is supposedly faster, but in that tight loop of 10,000,000 iterations that executes every few minutes it might not be a bad idea to simple change 1 letter in order to prevent 10,000,000+ unnecessary boxing/unboxing operations.

    89. Re:Frameworks by benjamindees · · Score: 1

      Obviously I'm not suggesting that that's desirable. I am, however, suggesting that it's better to optimize your business in terms of dollars rather than in terms of time or computational efficiency.

      --
      "I assumed blithely that there were no elves out there in the darkness"
    90. Re:Frameworks by sjames · · Score: 1

      Agreed 100%. Frameworks defy the point of code reuse. Ideally, we use libraries to handle smaller and well defined sub-problems within our programs. Hopefully we're not stuck just glueing those bits together and nothing else.

      Frameworks defy that. If you have a framework for X and a framework for Y and you need to write something with an X, a Y, and a Z, you can just forget it. Each framework thinks it is the master of the universe and they will never cooperate. You will spend so long trying to trick each of them into thinking the rest of the world is just like them that you could actually save time by throwing them out and starting over. Except that X needs to accept an ill documented (and buggy) data stream from another app that was written in framework X and the Z part needs to send data in an ill documented and buggy format to another app written in framework Z. None of that data is complex enough to justify anything more complex than fieldname:value with a blank line to seperate records, but they both chose to use equal but different incredibly baroque and subtly buggy XML formats. They claim it's for future inter-operability with random stuff to be named later, but since even a single whitespace out of place (even where XML says it's optional) will make the app emit mysterious and unrelated error messages, that seems unlikely.

      Of course, since they noticed that the XML related syntactic sugar expanded the data stream to 3 times the size of the actual data, they implemented a proprietary compression on top of it turning the whole thing into a binary blob that is nearly (but not quite) as compact as fieldname:value would have been.

      Frameworks provide the illusion of shorter development cycles while actually making them infinitely long. You very quickly get something to the 90% mark while the guys using libraries would be just getting started. Unfortunately, you'll spend the rest of time asymptotically approaching 99% (the last 1% doesn't even pretend to be feasible) while the other team completes the system and moves on. The framework based system will always be just barely adequate and make you expect a dialog box asking "want fries with that?".

      The real pain begins when a simple new functionality is then required. Unfortunately since the first version of the app is a couple frameworks held together with spit and bailing wire, it all flys apart when you try to change it.

      That's why when I hear about the various "enterprise" frameworks for Java (and by now, Java itself triggers the association) I see a bunch of people in identical generic suits (the ones that don't actualy look all that good, but are just part of the uniform along with the tie that makes your head swell) staggering around glassy eyed like zombies chanting "beans".

    91. Re:Frameworks by Anonymous Coward · · Score: 0

      The only problem is that eventually your slow running batch job, even with cheap computers, takes longer than the required execution window. For example, if you have a banking application that takes 20 hours to process all the days transactions. As the bank grows, it starts to take 25 hours. Now you have a problem. You now have a scalability problem that kills your business. Also, you negate the factor of the number of potential people waiting on the output.

      Also, given the "green datacenter" and rising energy costs, the aggregate cost of your hour long batch job in terms of downsizing the datacenter via virtualization or cloud computing is higher than doing the job right the first time. Rather than an hour, I can the same job in a 5 minute slice at a reduced cost and better ROI.

    92. Re:Frameworks by arjan_t · · Score: 1

      The database doesn't get offended if you ask it the same thing over and over.

      The database maybe not, but those other customers on whose behalf your code is executing other queries that now run slower because you needlessly consume a big chunk of the DB's resourced surely will get offended. Offend them enough and they will run away. This will in turn offend your manager or boss and when it becomes clear that YOU were the one who's careless code caused the server to grind to a halt, you might find yourself without a job.

      Particularly for (public) websites you have to be careful to never consume an unreasonable and unnecessary amount of resources. The database might not groan when you run your single user test executing 10,000 queries in a loop for one user. However, just a little peak in your traffic and you suddenly find some odd 10,000,000 queries being fired at your DB, where 1000 could have sufficed. Believe me, there is a HUGE difference between being able to process 1000 queries per second and 10,000,000.

      A mentality such as yours is frequently the reason why websites completely fail to scale up as traffic increases. We shouldn't overzealously optimize in advance, but executing 10,000 queries where 1 would perfectly suffice only 'because the DB doesn't get offended' is just silly.

    93. Re:Frameworks by Todd+Knarr · · Score: 1

      Thing is, it's not just a matter of writing the code. It's a matter of modifying the framework to do something it wasn't designed to do. Try modifying the controller class of a framework that you don't have in source-code form to do something that the class already does in a way that won't work for your application when the class doesn't provide any hooks for you to modify the behavior. It's nowhere near as easy as writing the code from scratch would be.

    94. Re:Frameworks by sjames · · Score: 1

      What's funny is that as clear as you were trying to be, the very language describing "factory" in Java came out foggy. It's not your fault, it's just a reflection of how bad the buzzwords are getting.

      Jave itself, divorced of the stuff around it would be an OK language (just OK, not great, not terrible). But the barnacles attached to it make it a clunky lurching mess. Even when done well (as well as such a tasteless amalgam can be done anyway) the program feels like a dead whale being kicked down the beach or occasionally like a pig with JATOs strapped on.

    95. Re:Frameworks by Blakey+Rat · · Score: 1

      The database maybe not, but those other customers on whose behalf your code is executing other queries that now run slower because you needlessly consume a big chunk of the DB's resourced surely will get offended.

      Buying a new DB server is cheaper than fixing the code. Renting one (say, from Amazon Web Services or Microsoft Azure) and keeping it offline until you're actually using it is cheaper still.

      If your customers are complaining, it's (rightly) because you lack the ability to see the big picture here.

      A mentality such as yours is frequently the reason why websites completely fail to scale up as traffic increases.

      A website isn't a batch process.

      If you want to talk about websites, we can talk about websites. Obviously, my opinion on websites is different than my opinion on batch processes. But to blithely come in here and say "you're wrong, because what you said about batch processes doesn't apply to websites!" that's just insulting to me and all your readers.

      So... what are we talking about? Batch processes? Websites?

    96. Re:Frameworks by Anonymous Coward · · Score: 0

      Option 1 will take about five times the development time, but save you well over 60% runtime.

      The fact that you think it's purely about speed proves that you're not capable of meaningfully discussing the subject.

    97. Re:Frameworks by arjan_t · · Score: 1

      The home grown solution is often faster to develop than the time it takes to learn the intricacies of a monolithic framework. It is also easier to teach other employees the logical to-the-point framework that does only what is required by the problem you are trying to solve.

      I'm not entirely sure about that last thing you're saying. The problem is that teaching your framework over and over again to new developers takes a fair amount of time too. You'll also have to make damn sure you write good documentation and keep it up to date. Depending on the size of your development team and the amount of time dedicated to such a framework this may be doable, but more often than not this is precisely the part that's lacking.

      A standard well known framework has the advantage of having heaps of documentation already written. When stuck, programmers can post questions in forums, google away for answers, buy some books or even follow some course. This won't be possible with your proprietary in-house developed framework. When stuck, programmers will come directly to you and if maintaining this framework is not your core job, this can get annoying pretty fast.

      Don't get me wrong, it can definitely pay off to build something of your own. After all, most best-of-breed open source frameworks on the market today where once started because some programmer in some company wasn't satisfied with the readily available stuff. I'm just saying that you should really think twice before starting development of some framework and carefully consider your options.

      For instance, if you feel the need to develop yet another web framework, logging framework or ORM for Java, my first advice would be to simply not do it. The amount of web frameworks already available is simply getting ridiculous and don't think lightly of the pressure you put on your fellow programmers who have to learn a new g*dd*mn framework for each and every new Java job they take. It would be far better to start with one of the excellent web frameworks already available (e.g. JSF, Wicket), and extend them where necessary. Most good frameworks have a lot of options for customization and extension. Going that route will not only safe you and your fellow programmers time, it will also allow you to leverage third party offerings for that framework. In the case of JSF, there are a couple of high quality component sets emerging (like RichFaces and PrimeFaces). With your own web framework, you simply won't be able to use any of that.

    98. Re:Frameworks by sjames · · Score: 1

      If only. Once you work out all the impedance matching and buckets of glue, the dev time on option 2 will turn out to be longer than for option 1. The boss won't notice since much of it will be spent on version 2 and 3 of the app that are developed under the gun because version one is destroying productivity and making users bleed from their ears. But technically it came in on time and budget.

      We're well past arguing over a few seconds of runtime here and there, the modern bloated frameworks also bring us piles of bugs, mysterious failures and security issues from hell, mostly related to the 9/10ths of the functionality we didn't need or want but couldn't cleanly remove from the 'finished' product.

      The boss will fire you for choosing option one because in theory, from first appearances before the project starts, option 2 gives the illusion that it will take less development time and be nearly as good as option 1's result. By the time it becomes clear that's not the case, the boss has to make you slog through so his decision at the start doesn't look bad.

    99. Re:Frameworks by arjan_t · · Score: 1

      I basically agree with your point that making the right choices regarding performance matters immensely. It's just that I don't think this necessarily means that you should write all code yourself instead of intelligently using a library or framework.

      You can either write slow and inefficient code yourself, or you can use an existing library in such a way that it will be slow and inefficient and vice versa. I've written high performance software capable of processing 6000 fairly complex transactions per second on moderate hardware, while still using highly convenient library classes like Java's ConcurrentHashMap. Some would perhaps even say that just using Java is already a 'framework' and I should have used C++ or maybe assembly... where does it stop?

      I'm also implementing some high performance (beta) code using preleases of Java's upcoming fork/join framework and the level of performance I can squeeze out of this is fairly impressive to say the least. I'm not sure if I would be able to write my own "work-stealing work queue" that offers better performance. Actually, I'm pretty sure I wouldn't.

    100. Re:Frameworks by Anonymous Coward · · Score: 0

      Not everyone works on glorified file cabinets.

    101. Re:Frameworks by arjan_t · · Score: 1

      I'm a bit of both an algorithmics and programming language design geek with leanings for high level programming, and I never quite understood

      and a programming technique compatible with the underlaying hardware and/or OS structure,

      this part. A good language that allows for flexible design doesn't necessarily have to do much with the hardware, but it still allows you a very good access to the algorithmic part of the problem.

      It depends really. The right algorithm and especially the complexity of that algorithm obviously matters a lot, but for true high performance computing, knowing your hardware can make a huge difference too. Regarding space/time optimization, it simply matters to know if you have more memory or more cpu cycles to burn in your actual machine. Very few to no algorithms can optimize for both space and time, so you have to know your target hardware in order to make the necessary tradeoff.

      Next to such general choice, it can matter immensely if your hardware has special provisions that you can exploit. For instance some CPUs have hardware support for BCD arithmetic, which can speed up calculations a great deal if your software can take advantage of them. Knowledge about alignment of your memory can matter a lot too. Mathematically identical algorithms may cause your target machine to resort to trashing if you misalign every memory access and/or access 'adjacent' memory cells in the wrong order. In you have to process some matrix, it normally doesn't matter for the algorithm whether your process it row wise or column wise. If the matrix is stored into memory in such a way that cells in a single column are adjacent in memory, while each row in this matrix is the column length of cells away, then processing row by row may cause a page fault for every new cell access which completely blows your performance away.

      Then there are such things as certain CPU instructions like an atomic test and set, or certain addressing modes that your language may or may not be capable of taking advantage of. Using such things can matter a lot too. Then there is a whole category of special hardware, like DSPs, vector units and lately GPUs. Taking advantage of such hardware might make more of a difference then choosing between a bad and a good 'normal' algorithm that only runs on a general purpose CPU. A simplified example is hardware H264 decoding. If your CPU is not powerful enough, then no algorithm, no matter how cleverly constructed will be able to decode say an HD H264 stream. But if your machine happens to have an HD H264 hardware decoder, then obviously simply using it in your software will yield much better results. On a more fine-grained scale, it's the same with all those little things your hardware offers. Is your language able to take advantage of that, or does it just let it sit idle?

    102. Re:Frameworks by Anonymous Coward · · Score: 0

      lol in other words because Java has confusing scoping rules, singleton is more flexible. You are WAY too uptight.

    103. Re:Frameworks by Anonymous Coward · · Score: 0

      I still remember my software engineering classes. They gave me some discipline, but most of the advice I got from them has never been used. I believe it was the _Mythical Man-Month_ that advised creating a functioning prototype and throwing it away, then building the real application. The problem is, although that approach is solid, managers in software projects don't seem to understand why you would throw away that "perfectly good" prototype and recreate your work. So, we end up with a lot of crap. Of course, it is true that you don't always need to throw away the prototype. If the program you're making is pretty much all gui for a straightforward back-end, for example. But sometimes it really needs to be done right so it can work forever, but management just wants it to work _now_. How do you think we ended up with the Y2K problem? Sure, it was a boon for Cobol and Fortran programmers, but good engineering would have dealt with it by doing it right the first time so it would work forever, for some acceptable value of "forever". Long after everyone who developed it would be dead is a good value for forever, whereas 30 years (even if it was only planned to be in use for 10) is not. Likewise, periodic code reviews would be a good engineering practice to follow, whether or not you do it right the first time. Of course, as it turns out, the JIT approach worked out mostly ok for Y2k, so maybe I'm just complaining for nothing.
      Still, one of the main things that gets pounded into our heads when we're CS students is function growth. Sure, most of us just become code monkeys rather than actual computer scientists, but they shove that into our heads because, even as code monkeys, we need to know it to be _good_ code monkeys. The simple fact that for some (many) problems, even superficially simple ones, you cannot simply throw more hardware at them. You can use a better algorithm, or, when there is none, accept less accuracy or precision, but you have to be insane to think you'll ever be able to assemble enough hardware to brute-force them. When we write a program, we should have an idea of how it's going to be used and how much memory, CPU, disk I/O, network bandwidth, etc. it will require for various use cases. Then we should test those use cases and, if our theory doesn't match our results, find out why. If we don't have the skills to do that, then at least try to predict the heaviest load the application could ever fall under in normal use and devise a test that pushes it past that and see if it falls over.
      One of the big reasons people use pre-canned libraries is that we often assume the libraries have solved the performance issues in some general optimum way that we would need to work very hard to understand and duplicate. Sometimes that's true, sometimes it is very, very far from true. So, just like any other craft or art (depending on what you thing programming is), if you're using third party materials, you need at least the skills to determine if they're any good, otherwise your project will just fall apart later on.

    104. Re:Frameworks by Anonymous Coward · · Score: 0

      I believe it was the _Mythical Man-Month_ that advised creating a functioning prototype and throwing it away, then building the real application. The problem is, although that approach is solid, managers in software projects don't seem to understand why you would throw away that "perfectly good" prototype and recreate your work.

      Well, to be fair, Brooks didn't say you should throw one away; he said you should plan to throw one away, "because you will anyway."

      If you don't have to, you're that much farther ahead--but if you don't plan on it, and you have to scrap your work so far, you're pretty much screwed!

    105. Re:Frameworks by Anonymous Coward · · Score: 0

      Yeah, a simple example many should be familiar with is Windows Vista. On a computer that literally has thousands of times the raw power and speed of what we had 20 years ago, with a fresh install of Windows Vista, the freaking start menu can take minutes to open up the various parts of the tree to the application you need, whereas such features were nearly always instantaneous 20 years ago. I've seen it plenty of times on plenty of computers. The performance just sucks. There are plenty of reasons for it. The menu tree is a lot bigger than it would have been 20 years ago and there are little true color icons next to each menu item which are probably being dynamically loaded and resized as the menu opens up rather than being cached at the appropriate size, etc. What it comes down to in the end is sloppy programming by people who assume that the power of the hardware will make up for their application being so much more demanding.

    106. Re:Frameworks by arjan_t · · Score: 1

      Buying a new DB server is cheaper than fixing the code. Renting one (say, from Amazon Web Services or Microsoft Azure) and keeping it offline until you're actually using it is cheaper still.

      It depends. Sure, there are some models out there which are quite hard to beat. I surely won't underestimate the lurking power of certain cloud or grid offerings. Yet, IMHO it's naive to think 'the cloud' will just fix all your problems for you.

      For starters, you might have a single query and a DB that can't run a single query in parallel (like Postgres or MySQL) which is already executing on the fastest hardware available. We for instance have a DB running on a dual socket Nehalem based server (8 cores), running at some 3.4Ghz with 4 Areca 1680's (each with 4GB of cache for a total of 16GB) and 32 Intel X25-E SSDs (8 per Areca). I dare you to come up with a faster machine without stepping into a completely different price category. You know, the kind of category where prices aren't listed anymore but sales representatives visit your office to negotiate a deal.

      At the moment, there simply isn't a faster DB available and even the hugely expensive IBM POWER offerings are only a factor or so faster for our kind of workload. So simply buying a faster machine is absolute not an option, even if we had money to burn (which incidentally, we haven't). So, if I can optimize some piece of code in 30 minutes, maybe even less, why shouldn't it do that? It's basically as simple as turning:

      for (Customer customer : customer) {
      BigInteger companyRevenue = rewardService.getMontlyRevenue();
      // ... customer specific calculations here
      }

      into

      BigInteger companyRevenue = rewardService.getMontlyRevenue();
      for (Customer customer : customer) {
      // ... customer specific calculations here
      }

      Why shouldn't I grab that low hanging fruit, yet pursue on a mission to find a faster machine since Blakey Rat on /. told me that software optimizations, no matter how trivial, never pays of? That would be rather silly, wouldn't it? On top of that, you seem to forget that a new & faster machine even if would exist doesn't magically fly into service. Real people have to order it. Real people have to install it with something, real people have to test its stability, real people have to place it into some rack, etc. All of that costs money, time and potentially worries too.

      But to blithely come in here and say "you're wrong, because what you said about batch processes doesn't apply to websites!" that's just insulting to me and all your readers.

      It is surely not my intention to insult anyone, but if you read back my post then you might see that I mentioned what I said was true particularly for web sites, not exclusively for web sites. Although there is a big difference between interactive and non-interactive payloads, at the end of the day a batch job should not recklessly consume resources either. Just because batch jobs can be queued and can be run right after each other, doesn't mean there isn't someone waiting for the result. Worse yet, if batch jobs are submitted to your queue at a certain rate and your system can only process them at a lower rate because of some completely unnecessary resource hogging, then eventually your queue will spill over. Your DB may still not be offended, but a slow turnaround and a denial of accepting new jobs surely will offend customers again.

      Now you'll probably say that I simply need to throw more hardware at it and that batch jobs by their very nature can always run in parallel on multiple machines, but this is certainly not true in general. In order to make that possible you need to carefully craft your software architecture, which takes... guess what... engineering effort. If you'r

    107. Re:Frameworks by gbjbaanb · · Score: 1

      yeah, I was trolling a bit - but also making aprivate criticism of my company where I had to go through a heap of hassle to get 1 extra VM created.

      Still, adding a hundred computers is not the answer - even if your big, slow app isn't a single-threaded script (which they are 'cos then they wouldn't be the big, slow apps, they'd just be un-optimised) its still going to take a load of hassle to admin those servers.

    108. Re:Frameworks by Anonymous Coward · · Score: 0

      Yep, the wrong, badly developed, buggy framework was chosen and purchased but not by me. No matter how much I bitch and whine about I'm still stuck developing with it.

    109. Re:Frameworks by Anonymous Coward · · Score: 0

      ^ this exactly.

      I recently provided some intervention for one of our stats guys at work, who was trying to work with an Excel spreadsheet that had some macros and a whole bunch of array formulae in it. It produced the right output, but took over three hours to run.

      Took me a day to unravel what the sheet was actually doing, and recreate it in Access, which ran the exact same report in around 5 seconds.

      Not because I'm a coding genius, but because I had a better understanding of the capabilities of the tools available, and wasn't trying to force Excel into doing something it really had no business doing in the first place.

      Sadly, lack of resource in our place has caused a lot of the "users becoming developers" problem, and suffering the results of limited proficiency in the application... and then blaming IT, since it's all our fault, somehow...

    110. Re:Frameworks by Anonymous Coward · · Score: 0

      "you've chosen the wrong framework"

      You say that like the developer actually had a choice in framework.

    111. Re:Frameworks by complete+loony · · Score: 1

      For another real world example. An application I have been involved in maintaining would call a stored procedure in the database in order to round a number. And when one form was loading it would step through each record in the result set and call this db proc (and 13 others). Of course when this result set grew to 1900 records, and the users wanted to access the system from a different city with an additional 30ms of network latency, opening this screen could take an additional [1900 records * 14 db calls * 0.03 ms / 60 = 13.3] minutes.

      In developing this application, almost everything was written as a stored procedure, and all batch jobs were stored procedures. So I can understand the mentality, that I need to do this thing that is also done by this batch job... I know I'll just call this procedure.

      --
      09F91102 no, 455FE104 nope, F190A1E8 uh-uh, 7A5F8A09 that's not it, C87294CE no. Ah! 452F6E403CDF10714E41DFAA257D313F.
    112. Re:Frameworks by Anonymous Coward · · Score: 0

      That's what people keep saying where I work, but now our product is a ridiculously huge beast where I'm always waiting for it. They say the company can't afford to buy us lab Solaris machines sufficiently large to meet our own product's minimum requirements.

      We rewrote our core product: from something that was coded to something that was glued together. We went from a ten minute install to an hour install. We went from a 30 second startup to 30 minute startup. We went from hundreds of MB to several GB. Most importantly we went from programmers who understood how things work and how to fix them, to gluers who have no clue what the side effects of their changes are. As a QE, this mess takes a LOT more time and effort to verify.

    113. Re:Frameworks by thermal_7 · · Score: 1

      Very true.

      I find the one place that what you say doesn't hold true anymore is in frontend work. When your HTML is 3 times the amount it should be, and your javascript is horribly inefficient, it may not run to an acceptable standard on someone with a slow network connection, on a 8 year old PC running IE6. In many cases you can't afford to be sloppy.

    114. Re:Frameworks by Anonymous Coward · · Score: 0

      I know, wrong economy, but outside of that: Fire the boss?

    115. Re:Frameworks by Anonymous Coward · · Score: 0

      Have you actually read the Group of Four "Design Patterns" book? Personally, I don't think a single pattern there is "obvious". In fact, the most common criticism (by far) of Design Patterns is that immediately after reading it, most coders fall in the trap of trying to use it at every turn; resulting in very neat, but awfully bloated, code. If you were correct in that it was all obvious stuff, then that would be a non-issue.

    116. Re:Frameworks by CptPicard · · Score: 1

      true high performance computing, knowing your hardware can make a huge difference too

      From my perspective, "true high performance computing" when defined like this is essentially a special field... a bit like J2EE, which you can't do without Java. When the comparisons are to programmers who can't tell apart linear from quadratic, the objections sound dubious.

      Add to that that a lot of the low-level guys seem to be so oblivious to appreciating anything beyond the hardware that it sometimes makes me wonder where they actually get their ideas regarding what and how to actually code...

      --
      I want to play Free Market with a drowning Libertarian.
    117. Re:Frameworks by Phoghat · · Score: 1
      Speaking o magic incantations, an amusing read available free at Baen Books might be:

      http://baen.com/library/defaultTitles.htm

      I read this a wwwwhile ago and thought it a farce that stated the state of programming to a T

      --
      Think of how stupid the average person is, and realize half of them are stupider than that.
    118. Re:Frameworks by ShakaUVM · · Score: 1

      Excellent post, dude, and very depressing.

      During the internet boom days, the San Diego Supercomputer Center ran out of talented computer science people to hire. So I got shackled with a fucking bio major that had done some programming on the side, once or twice. He wasn't my boss, but acted like he was. I got the three-year project finished in three months. He was still trying to get his fucking one-page website for the project done by the end of the summer. I say this by way of background - he was absolutely convinced we had to use XML for absolutely everything, even for data that would only appear on a stream between my own client and server. It was realtime data, and XML would have exploded the size of it immensely. BUT IT WAS XML. So he'd yell at me (literally) that I needed to implement it, so that it would be "portable". (To whom? Why? What was the usage scenario? The data stream was already endian independant.) Fuck, I hated working with people like that.

      And frameworks have just exploded that problem out like a bowel full of diarrhea over the entire industry. People think they know something (Frameworks are great!) and will stomp their tiny little feet until they get their way.

    119. Re:Frameworks by bregmata · · Score: 1

      Machines today are fast. Much, much faster than what we need for programs to run. Hell, even games are today produced with sluggish frameworks that waste resources left and right, and they tend to be the programs that are most time-critical an "ordinary" user would get to see.

      Machines today can complete infinite loops in less than half the time it took them when I first started programming.

    120. Re:Frameworks by ChrisGilliard · · Score: 1

      ConcurrentHashMap is part of Java and Java is developed by Sun (Oracle now I guess) and they have teams of engineers that are paid to make sure it's very fast. HashMap is probably one of the most widely used classes in Java so to compare it to the type of frameworks we're talking about is not at all a fair comparison. In any case, I'm not totally closed to the concept of frameworks if you can test it as you did and see that it improves your performance, but I'd be very doubtful that using frameworks will save much time in the long run and I would be completely shocked if I heard about a framework that performs better than code that was written by a good developer to do a specific task. Even with ConcurrentHashMap, you can get a performance improvement by writing your own. Google does that. They have a number of different hashtables that are designed to perform better given different scenarios. In your case, maybe 6000 per second is ok in which case you probably made the correct decision to use ConcurrentHashMap.

      --
      No Sigs!
    121. Re:Frameworks by arjan_t · · Score: 1

      Yes that's true. My main point is simply that the situation isn't as black/white as saying that either using frameworks or using hand crafted code is always better for performance. It depends really and the ability of an engineer to chose and use a given framework wisely is an important asset. Some bigger frameworks like Oracle's Coherence can absolutely improve performance too, while some home cooked solution may never obtain the level of performance that Coherence has, simply because you are maybe just not a good a programmer as Cameron is. But blindly applying Coherence for each and every problem simply because you heard "it's good for performance" of course doesn't work. But I doubt a programmer who thinks like that is capable of writing anything efficient himself anyway ;)

    122. Re:Frameworks by Anonymous Coward · · Score: 0

      Someone who desperately points out that he got pussy probably hasn't got any. Sorry, that blowup doll you fashioned out of duct-tape and bubblewrap doesn't count you poor little shit. What a pathetic life you must have!

  4. DNRTFA by chicago_scott · · Score: 1

    That sushi in the banner is imitation crab. That's a red flag.

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

      That's a red flag.

      Actually it's herring.

    2. Re:DNRTFA by Anonymous Coward · · Score: 0

      That's a red flag.

      Actually it's herring.

      Maybe it's just a red herring.

  5. Re:Idiot. Seriously. by Saint+Stephen · · Score: 5, Insightful
    I think you're seriously wrong. Have you ever seen the mathematics behind the early algorithms? Hardly sticks and rocks.

    I think a better analogy would be to say that today's programmers are more like a Cargo Cult.

  6. Re:Idiot. Seriously. by Nerdfest · · Score: 5, Funny

    I'm already at the gunpowder stage. My code has been blowing up for years.

  7. Re:Idiot. Seriously. by convolvatron · · Score: 5, Funny

    slashdot. where don knuth is an idiot because he cant grasp the awesome power of php

  8. Surprise surprise by Anonymous Coward · · Score: 0

    1. As a technology matures less time is spent inventing it and more time implementing it.

    2. Programming, for anyone who pays for it, is not about it being fun; it's about getting shit done, and leveraging the effort of those who beat the path you need to walk usually results in cheaper, more stable, and more secure software than writing it from scratch. Fanatics, please note the word "usually" before taking out your flamethrowers.

  9. Re:Idiot. Seriously. by dbIII · · Score: 1

    The problem here is trying to use those bows and arrows for deep sea fishing :)

  10. Re:Idiot. Seriously. by morgan_greywolf · · Score: 2, Insightful

    I think a better analogy would be to say that today's programmers are more like a Cargo Cult [wikipedia.org].

    Do you mean the cretans that pass for programmers by banging together some JavaScript and PHP code snippets found by googling things like "JavaScript menus" to produce a website, or do you mean actual programmers? If the former, I agree, if the latter, well, no.

  11. Reminds me... by Anonymous Coward · · Score: 2, Insightful

    Reminds me of what Chuck Moore wrote once... that one needs to rewrite things from the start, to be near to the problem -- so near, in fact, that incredible savings in code -- and thinking -- can be accomplished, as well as new horizons discerned...

    1. Re:Reminds me... by Pinky's+Brain · · Score: 1

      He went down the rabbit hole a little too far though ... to a point where so few can follow him that he is designing hardware only he can use. Which is obviously going to be a hard sell.

    2. Re:Reminds me... by EastCoastSurfer · · Score: 1

      Cool, so I'll guess for each problem we'll start with writing the OS... I'm only half joking. If need to build a website do I need to start by building a web server or can I use Apache?

      Starting at the appropriate level of abstraction (and understanding the trade offs) is in of itself a skill. It could be argued that in order to solve more complex problems you HAVE to start at a higher level of abstraction or else you mentally get bogged down in the details (many of which do not matter as long as they just work).

  12. Next Next Finish Programming by theodp · · Score: 4, Interesting

    THE DUMBING-DOWN OF PROGRAMMING (1998): "My programming tools were full of wizards. Little dialog boxes waiting for me to click "Next" and "Next" and "Finish."...Dumbing-down is trickling down. Not content with infantilizing the end user, the purveyors of point-and-click seem determined to infantilize the programmer as well."

    1. Re:Next Next Finish Programming by Tablizer · · Score: 5, Interesting

      It's not so much "dumbing down", but rather becoming a swamp navigator instead of an engineer. You can't just know principles, you have to also know the swamp.

      More time is spent trying to figure out how to use and work around limitations of existing libraries and tools and less about designing such tools from scratch.

      It can be roughly compared to what's going on in the automotive repair industry. You used to see all the parts involved and how they interact. Now a computer controls servos and if things don't work, you have to use Sherlock Holmes-like abilities to figure what's going on in the sealed dark-gray-box provided by Ford or Nissan that controls most of it. It's now about studying the relationship between the controller and the parts rather than "fixing the parts" directly.

      It's a shift away from being The Wright Brothers toward being Sherlock Holmes: doing your best with limited clues by poking and prodding and digging instead of just making it "right". Instead of being a constructor, now we're deconstructors more or less.
         

    2. Re:Next Next Finish Programming by Opportunist · · Score: 1

      Every time you simplify something you also take away flexibility. You cannot retain the same level of flexibility and raw power with simpler tools, unless the original tool was too complex to begin with. It might be possible to rearrange and document better, it is possible to make it more approachable by offering a cleaner, more appealing, more intuitive or easier to grasp interface, but you cannot "dumb it down" without taking away power from it.

      For reference, see almost every graphical interface for any given Linux CLI program.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    3. Re:Next Next Finish Programming by Anonymous Coward · · Score: 0

      Most Americans don't know what a "shifter" is, even tho it used to be a more economical and, possibly, faster way to drive

    4. Re:Next Next Finish Programming by shentino · · Score: 1

      That's what happens when you woo corporate bigwigs who then turn around and thunder the slick crap down on the techies from on high.

      The bosses love it because it looks cool, the techies hate it because they have to fight a crap-filled pretty package, and the vendor loves it because they've got the bosses paying them for the privilege of torturing their underlings.

    5. Re:Next Next Finish Programming by Blakey+Rat · · Score: 1

      More time is spent trying to figure out how to use and work around limitations of existing libraries and tools and less about designing such tools from scratch.

      If you truly believe that, I can't imagine how buggy your code is.

    6. Re:Next Next Finish Programming by ScrewMaster · · Score: 1

      It can be roughly compared to what's going on in the automotive repair industry. You used to see all the parts involved and how they interact.

      I'll give you another example. Back when the Apple ][ came out, everything was socketed, all one hundred and thirty-odd ICs. I was a service tech then, and my job was to take a malfunctioning motherboard and track the problem down the the specific parts that were bad, pry them out and replace them. A little tedious, perhaps, but the repair bill was usually mostly labor and about .29c worth of parts. It did take some knowledge of digital electronics and the Apple's hardware architecture to solve problems.

      Then the original IBMPC came out in 1981, and the game changed completely. IBM decided that a knowledgeable technician should not be a requirement for servicing their equipment. Consequently, all components were soldered on to the motherboard (including the RAM that came with the machine, there were sockets for add-on memory.) The term "shotgun service" was applicable, since all you were doing was replacing one of a very few assemblies ... power supply, motherboard, floppy drive or video card. No chip-level knowledge required.

      --
      The higher the technology, the sharper that two-edged sword.
    7. Re:Next Next Finish Programming by sourcerror · · Score: 1

      I'm perfectly happy with applications that have a both graphical and command line interface. The GUI isn't evil, if the underlying software exposes it's API in some way.

    8. Re:Next Next Finish Programming by sjames · · Score: 1

      It can be roughly compared to what's going on in the automotive repair industry.

      It's much worse. They just swap all the mechanical parts one by one and if that doesn't fix it they tell you you need a new "module" but that'll cost more than the car's worth.

    9. Re:Next Next Finish Programming by Tablizer · · Score: 1

      or how buggy or poorly-documented the existing frameworks are.

  13. On my first job, my boss said by blai · · Score: 2, Insightful

    "Don't even try reinventing the wheel. This is not an assignment. Just use whatever code you can find."

    --
    In soviet Russia, God creates you!
    1. Re:On my first job, my boss said by Anonymous Coward · · Score: 0

      It better be properly licensed or public domain though.

    2. Re:On my first job, my boss said by blai · · Score: 1

      That was one of my primary concerns.
      He doesn't give a rat's bum.

      --
      In soviet Russia, God creates you!
  14. Re:Idiot. Seriously. by morgan_greywolf · · Score: 1

    Yeah. I'm definitely getting off of Knuth's lawn.

  15. Re:Idiot. Seriously. by DigiShaman · · Score: 2, Insightful

    It would seem to me that the argument is based on whether or not the wheel should have to be re-invented for each programming project. If the code is good, why not reuse it as a module?

    --
    Life is not for the lazy.
  16. too much resources available by Anonymous Coward · · Score: 0

    back in the day you only had 3583bytes available to code ... :)
    Now we have way too much RAM / CPU / whatnot, so streamlined code is not needed anymore, most of the time at least.

    1. Re:too much resources available by LynnwoodRooster · · Score: 1

      What do you mean "had"? My VIC 20 still runs strong!

      --
      Browsing at +1 - no ACs, I ignore their posts. So refreshing!
    2. Re:too much resources available by Anonymous Coward · · Score: 0

      back in the day you only had 3583bytes available to code ... :)

      And we liked it that way!

      Give me a POKE statement, 6502 reference card, and a cup of coffee any day and fear my leet character graphics skillz, bitches!

  17. Car analogy! by Anonymous Coward · · Score: 3, Insightful

    The article states that, no matter how important are things like unit tests, they are fundamentally in a supporting role to programming proper.

    As someone who practices test-driven development and programming-by-contract, I fundamentally disagree. Tests, for me, is what defines the requirements and interfaces. The code itself is just the implementation. From the business logic perspective, HOW a program does something is secondary to WHAT it does.

    Car analogy: imagine a programmer as a truck driver, and the project manager as the one who has his goods shipped. The programmer doesn't care much about what he ships (as long as it's not explosives or something like this) -- he cares about the route he's going to take to deliver those goods as fast and efficient as possible. That's all great. But the project manager doesn't care, nor should he. For him, the goods are the primary value, and the route the truck takes is the supporting value. As long as the goods arrive undamaged and on time, nobody other than the driver cares what route they went through.

    We have a basic conflict of perspectives here. Programmers think it's all about how good their code is internally, and think that the coding is the most important part of the application, arguing that without that, the application obviously wouldn't work. But users and payers for that code do not care about those matters, they see a white-box perspective only. Just like the goods shipper, they care more about the goods than how they are delivered. And if the truck driver gets too bitchy about how and what goods he wants to deliver, it's usually easier to get a new truck driver than change your goods or shipping schedule.

    1. Re:Car analogy! by BadAnalogyGuy · · Score: 4, Funny

      Car analogy:...

      What you are attempting to do is very difficult. Please leave it to the professionals.

    2. Re:Car analogy! by phantomfive · · Score: 3, Insightful

      Unit tests are a tool, a good tool, but only one tool. They have a place where they are useful, and a place where they are worse than useless. People who think they are good for everything are usually the kind of people who only do specific types of code.

      Unit tests are awesome in compilers. It's software that has the exact same output every time, doesn't have a changing spec, and doesn't change very much. They also tend to work nicely for business logic.

      They are horrible for dealing with GUIs. This should be obvious. They are not as good at dealing with systems that have lots of complexity. The reason for this is because the number of tests required to make sure something works can increase exponentially, and of course so does the amount of code you have to write. I also haven't had much luck with them in embedded systems.

      --
      Qxe4
    3. Re:Car analogy! by Anonymous Coward · · Score: 0

      What I love about ./ is that a word is used in a particular context, and then immediately attacked under a completely different context.

      I never said unit tests are good for everything. I know damn right they are useless for UI testing, or flow/integration testing, or stress testing, or even many types of API testing. There are other types of tests for them, as well as manual testing and techniques other than testing.

      WHICH IS COMPLETELY BESIDES THE POINT I WAS MAKING IN THE OP. The post was not about praising unit tests in particular, but challenging the article's concept that testing, in general, is in an inferior/supporting position to coding the application itself.

    4. Re:Car analogy! by phantomfive · · Score: 1

      Hello Mr. AC, in the original post you said that unit tests are more important than a supporting role. Having just now re-read your post, I see that what you are saying is probably, "the results of the program are more important than how it is made," and that is a valid point. However, as the very first sentence, as the very first entire paragraph, you said that unit tests play more than a supporting role in programming. This detracts from your broader point, because unit tests are not the result, they are supporting tools to help you get the result you want. Try to make your topic sentence reflect the main point of your post.

      --
      Qxe4
    5. Re:Car analogy! by iknowcss · · Score: 1

      Considering this was a good analogy, I think your place in the history books is secure :)

      --
      Life is rarely fair. Cherish the moments when there is a right answer.
    6. Re:Car analogy! by Anonymous Coward · · Score: 0

      -1 troll

    7. Re:Car analogy! by TheTurtlesMoves · · Score: 1

      Thats not a bad analogy!

      --
      The Grey Goo disaster happened 3 billion years ago. This rock is covered in self replicating machines!
    8. Re:Car analogy! by grouchomarxist · · Score: 1

      If something is worth doing, it is worth doing badly.

    9. Re:Car analogy! by DaveV1.0 · · Score: 4, Interesting

      Speaking as an ex-over-the-road truck driver, it is a bad analogy because truckers do care about what they are carrying. They have to because they have to comply with different weight and bridge laws in each state. Truckers need to know if the load could shift, leak, etc.

      And, no trucker wants a load that is not what the manifest says. Makes delivery difficult and if the load is inspected and the contents of the trailer does not match the contents of the bill of lading then the driver might have be in serious trouble.

      Shippers may require the route not go over a certain altitude, through certain areas (New York City for one), or require a specific delivery time frame ("You have to be there on Wednesday between 6AM and 9AM").

      --
      There is no "-1 offended" or "-1 you don't agree with me" mod options for a reason.
    10. Re:Car analogy! by tomtefar · · Score: 1

      Letting 'what' take priority over the 'how' saves you development money for exactly one release. You will be in deep, deep yoghurt when you start planning on 2.0 of the 'what' project and realise that the previous project team just clobbered together whatever they could find in order to pass the test suite, resulting in the opposite of reusable code. The life cycle does not end with the initial release.

    11. Re:Car analogy! by noidentity · · Score: 1

      Warning: Professional Car Analogists on a closed discussion thread. Do not attempt.

    12. Re:Car analogy! by SleeknStealthy · · Score: 1

      I think you mean users see the black box perspective

      --
      Math
    13. Re:Car analogy! by ScrewMaster · · Score: 1

      through certain areas (New York City for one),

      Just out of curiosity, why would a shipper exclude New York city?

      --
      The higher the technology, the sharper that two-edged sword.
    14. Re:Car analogy! by Anonymous Coward · · Score: 0

      I think you just made his point

    15. Re:Car analogy! by sjames · · Score: 1

      The project manager will care a great deal if the driver goes from Texas to Oklahoma via Alaska and expects to be paid for his fuel. He will also care a great deal if one in five shipments are lost.

      He'll care even more next year when he wants to change what he is shipping but can't because of customs issues at the border (when as far as he knows, there are no customs inspections at the Texas-Oklahoma border).

    16. Re:Car analogy! by Anonymous Coward · · Score: 0

      Insurance, tougher hazardous materials laws, union requirements, tax requirements... I'm sure there are lots more. A lot of it probably boils down to how authoritarian New York is.

    17. Re:Car analogy! by Anonymous Coward · · Score: 0

      A black box analogy

    18. Re:Car analogy! by DaveV1.0 · · Score: 1

      Gangs will steal out of moving tractor trailers during rush hour on surface streets and on the highway. Also, going through the NYC can take forever and can result in late loads and wrecks.

      Vermont is also a place truckers and dispatchers like to avoid.

      --
      There is no "-1 offended" or "-1 you don't agree with me" mod options for a reason.
    19. Re:Car analogy! by laejoh · · Score: 1

      Clippy? Is that you?

  18. Re:Idiot. Seriously. by Anonymous Coward · · Score: 0

    Yeah, I was going to say, as a trained programmer, although I use the libraries others have made, I'm not some ignorant savage.
    I didn't do stellar in my algorithms class at University, getting only a B-, but I learned enough to realize THIS IS SERIOUS BUSINESS. Fortunately, there were plenty of kids who "got" the advanced challenges of algorithms, so the new generations aren't all slack-jawed, either, maybe just me.

    I just tend to do a better job when someone has executed those algorithms for me correctly, and I can get onto building a system for my client. I don't want them to pay because I
    couldn't implement the best algorithms for each data structure I use.

  19. Crappy frameworks, tools and web standards by syousef · · Score: 5, Insightful

    I'm currently a J2EE (and C, but predominately Java J2EE) programmer, familiar with Hibernate, Spring, as well as the old school EJB 2 mess. I wasn't always a Java programmer. I've taught C and coded with it commercial. I also have commercially used a variety of other platforms from VB and Delphi, to Smalltalk, to C++.

    Here's the core of the problem: The web is a horrible platform. I went from Rapid development drag and drop screen design in the late 90s to the abomination that is hand crafted JSP against shitty state based environments. Sure our applications are more scalable now, but I'm still hand crafting code to talk to a database object. There are tools out there that spit out mediocre code (hibernate tools come to mind). But nothing that I'm aware of spits out a good set of CRUD classes with corresponding unit tests. Why do we ever have to hand write this shit? (I haven't used Grails and Groovy extensively but I understand scaffolding has similar issues and not being as mature the people I've worked with have had to work around issues with transactionality)

    Then you take a look at the GUI layer. Hand writing CSS and JSP? Really? In 2010? SHIT. Hand writing code for simple controllers. Never mind if you do actually end up doing anything non-standard in which case good luck getting into the guts of the documentation for Spring MVC or Struts or similar. And then you have to deal with having to redeploy your application to see simple changes OR using exploded views that don't update properly and leave you debugging a problem for 4 hours that should take 4 minutes.

    It's a complete mess. It's WAY more complicated than it should be. I should be focused on the business problems - modelling the backend, getting the algorithms right for complex transactions etc. Instead there are people arguing that such simplicity leads to sloppy programming (usually mentioning VB as if the same programmers wouldn't have made a mess with something more complex). Well if you have nothing better to do than some stupid little dance just to get a web page up, that's your issue. For me that is a stupid statement. There's always a genuinely complex issue to solve without inventing one.

    --
    These posts express my own personal views, not those of my employer
    1. Re:Crappy frameworks, tools and web standards by Tablizer · · Score: 4, Insightful

      Here's the core of the problem: The web is a horrible platform.

      I agree and I've ranted about this several times on slashdot. Customers and bosses really want desktop-like apps, but existing browsers can only do this if you stretch them far beyond what they were originally made for: eBrochures. It takes 5 different programming and markup languages that break on each new browser version incriment.

      It's time to build a dedicated open-source GUI/CRUD browser[1] that can handle desktop, MDI, data grids, tree controls, and CRUD-like applications with grace. No more bending and kicking the eBrochure paradigm to act like real desktops. JavaScript was not meant to be a systems language and DOM was not meant to be a desktop-like nor CRUD GUI.

      Until people wake up to this harsh reality, web programming will continue to suck. It's like NASA trying to make everything with left-over shuttle parts, resulting in waste, bloat, and dead nauts. Blow up the fucking Shuttle and make a real system!

      [1] Or a powerful plugin.

    2. Re:Crappy frameworks, tools and web standards by shutdown+-p+now · · Score: 1, Interesting

      It's time to build a dedicated open-source GUI/CRUD browser that can handle desktop, MDI, data grids, tree controls, and CRUD-like applications with grace.

      You mean, like Access? Or, in some way, even SharePoint?

    3. Re:Crappy frameworks, tools and web standards by Hurricane78 · · Score: 1

      Man, you complain well. But you don’t seem to do anything against it.
      It’s like my last boss. (Ever!)

      You know what the first thing is, that I do in a new environment?
      Code me a generic CRUD generator (database/persistency, logic, gui). E.g. a tool that renders me a whole application out of the SQL database definition. Or in other words: The difference between SQL and tools like MS Access. ;)
      Then I can push out generic software faster than I can write up the data models. Add the little bit that usually is the business logic, and tadaa!

      In my last job, we were at the limits of our capacity. Too much work for too few people. And I offered my boss, to cut our work load by 90% (realistically!), when he would give me two to five days of free time. He denied with “We don’t have time for that.”
      And why not? Hm? Because you don’t take the time for this!
      It was one of those typical PHB moments.
      Needless to say: I quit.

      Now I’m on to what is basically a completely new OS (Linux kernel, new shell (cli and gui), and legacy interface to GNU) that goes a huge step further, by generalizing it as much as physically possible. (Actually, I can prove that it can’t be generalized more, without becoming less efficient again.)

      --
      Any sufficiently advanced intelligence is indistinguishable from stupidity.
    4. Re:Crappy frameworks, tools and web standards by Anonymous Coward · · Score: 0

      NASA built an entire shuttle (Endeavour) from leftover shuttle parts....

    5. Re:Crappy frameworks, tools and web standards by Tablizer · · Score: 1

      You mean, like Access? Or, in some way, even SharePoint?

      For one, they are not open-source. Second, Access is not a web platform (such as using HTTP as a GUI primitive control transport). And third, SharePoint only has rudimentary CRUD ability (although is likely to improve, but in a proprietary way). HTML+DOM+JavaScript+CSS are at least semi-open standards.

      The closest things to what I envision are Adobe Flash/Flex and Oracle Forms Java version, but modernized. (O.F. is ugly, but is more mature on the enterprise CRUD-side.) But these are proprietary.
           

    6. Re:Crappy frameworks, tools and web standards by Tablizer · · Score: 2, Interesting

      but it's still a shuttle ;-) I meant more like the Aries platform(s) that was meant to use existing Shuttle parts and designs in order to quicken the pace to be ready by the Bush administration's deadlines. But it's not an ideal platform when judged by itself. It's a hack that traded time for elegance and economics.

    7. Re:Crappy frameworks, tools and web standards by MemoryDragon · · Score: 1

      you use the right frameworks but wrong tools...

    8. Re:Crappy frameworks, tools and web standards by MemoryDragon · · Score: 1

      That wont change until the bosses stop to enforce IE6 and wan the latest nifty whizbang stuff they read about, which was designed for html5.

    9. Re:Crappy frameworks, tools and web standards by MemoryDragon · · Score: 1

      And yes I agree neither html nor javascript ever was meant for desktop applications, what happened to applets?
      They are usable now, but everyone still thinks they are in a sorry state of ca 1997.

    10. Re:Crappy frameworks, tools and web standards by Anonymous Coward · · Score: 1, Insightful

      MS listened and produced silver-light and WPF. There are more solutions from other software companies.

      But for some reason everyone got the HTML/WEB/AJAX bug and think that the web is a good and reasonable solution for everything.

      The WEB sucks for dev of desktop like applications (and that even includes HTML5).

      I blame google and gmail for inspiring people to use the web in that unintended way.

    11. Re:Crappy frameworks, tools and web standards by profplump · · Score: 1

      For all the annoyances that Access can create, I actually think it's (and similar platforms) are a great way to quickly create simple interfaces for potentially complex data stores. You should never use Access to actually store data, or to do anything complicated, or probably even anything widely deployed. But if you're just looking for a quick way to pull together easy-to-moderate data views, print pretty reports, and maybe make simple changes to that data, Access is a great tool.

    12. Re:Crappy frameworks, tools and web standards by gaspyy · · Score: 2, Insightful

      I know I'm about to get lynched by a mob of angrey slashdotters for saying this, but have you tried Flex? As in that Eclipse-based IDE & (open source) SDK? It's basically flash, but it works.

      I'm not even going to suggest the other piece of technology from Microsoft, that includes the words "silver" and "light"...

    13. Re:Crappy frameworks, tools and web standards by Anonymous Coward · · Score: 0

      incriment vt. (port-manteau: increment + recriminate) To increment the version number of a web browser (or other core infrastructure), breaking any applications which targeted said infrastructure, and thereby inducing recriminations for all the developers who have already spent hours, days, or weeks certifying their applications with your shitty old infrastructure.

      See also: moral hazard

    14. Re:Crappy frameworks, tools and web standards by Tablizer · · Score: 1

      The biggest problem with applets is that you have to use Java. Python and PHP fans are slighted, for example. Related to this is that they don't allow easy splitting between server side and client side.

      I'd like to see a GUI/CRUD-friendly markup language to handle most of the GUI setup and common/typical events. The rest would be server side in your favorite app language with a smittering of JavaScript for the few things that the markup language and server-side don't handle effectively.

      Thus, the majority of the GUI design would be in the planned markup language, most of the business logic on the server side using your fav app language, and maybe say 5% of the coding using client-side scripting for those areas that need extra responsiveness.

      I've kicked around a rough draft of such a markup language at:

      http://www.c2.com/cgi/wiki?GuiMarkupProposal
         

    15. Re:Crappy frameworks, tools and web standards by Tablizer · · Score: 1

      I suspect Microsoft is not retiring IE6 partly to stop the progress of open-source desktop-like behavior and widgets for web browsers. The more the web becomes desktop-like, the less people depend on Windows and Office, eating into MS's cash cow.

      Even if IE6 does fade from view, they could probably sabotage the efforts just by fixing bugs in their existing DOM engine. Enough widget libraries rely on silly MS DOM behavior that by fixing their DOM, they'd brake many JS and Ajax libraries.

      MS's ability to jerk around de-facto DOM standards is one of the reasons I suggest making a separate new open-source GUI browser or major plug-in. I don't trust MS.
           

    16. Re:Crappy frameworks, tools and web standards by Tablizer · · Score: 2, Insightful

      Regarding Flex, I was hoping for an open standard. Maybe it will help motivate an open standard(s) if and when it perfects the art of GUIs. It can show what's possible, and its weaknesses also suggest some improvements.

      HTML browsers were popular largely because they were based on open-standards; namely HTTP, HTML, and to a lessor extent JavaScript and CSS. A GUI browser could be the same kind of animal, but instead influenced by desktop and CRUD idioms directly instead of as an after-thought.
           

    17. Re:Crappy frameworks, tools and web standards by Anonymous Coward · · Score: 0

      Ken: "Programming is hard!"
      Not intended to be taken personal. However, what do you actually want to do after your tools do everything for you? It seems you want to be a designer, not a programmer....

    18. Re:Crappy frameworks, tools and web standards by Tablizer · · Score: 1

      Getting all the details of CRUD right can be a daunting task. It's easy to come 80% of the way using typical ER-diagram info, but there a lot's of funny little exceptions-to-the-rule that end up taking a lot of time.

      I'm not trying to discourage you, but merely saying: be careful and be flexible. CRUD can look simple on the surface, but dealing with the permutations and combinations of cross-cutting concerns and issues can be daunting.
         

    19. Re:Crappy frameworks, tools and web standards by tonywestonuk · · Score: 2, Informative

      ...its called Java. You may have heard of it! - A Java Webstart program can run on anywhere, with vastly less coding for platform differences than, say, coding a website to run perfectly between different browsers, and has everything you want, right now.

          However, the slashdot crowd (and others of similar ilk) have already condemned, and dismissed the Java GUI for not been quite as fast, or looking exactly like a native app....even though these differences nowadays are very slight. Java has been banished from the desktop.

      Now Microsoft are coming along with Silverlight, which I guess will do a similar thing (though, will probably work like crap on non M$ platforms), and in 10 years, the world will rejoice how Silverlight has brought us out of the dark Web based internet dark ages, tying us all to windows platform for ever more...

      Im getting too old for this, hence my cynicism.

    20. Re:Crappy frameworks, tools and web standards by Anonymous Coward · · Score: 0

      Awesome! What is your Non-GNU userland Linux distro called?

    21. Re:Crappy frameworks, tools and web standards by physburn · · Score: 1
      Not surprising, the web is an evolved system, stuck with backwards compatibility to ancient browsers. The GUI layers is even worse than you stated, because these days its AJAX and javascript hand written on top of the CSS. JSP is actually nice compared to all the other scripting languages.

      ---

      Java Programming Feed @ Feed Distiller

    22. Re:Crappy frameworks, tools and web standards by phillipsjk256 · · Score: 3, Interesting

      What annoys me is that we have had thin clients for decades: using remotely hosted software has been mature for as long as I can remember. VT100 emulation even works across a modem link. Want a GUI? the X Window system has been around for over a decade as well.

      I like the Lynx browser: it uses external programs for also most everything. Even things like YouTube can work if you hand off the .flv to a video player. Browsers should not be acting as an OS replacements with their own schedulers. IMO, browsers should not be handling client-side scripting at all: hand that Java Applet off to an interpreter.

      Don't get me started on the "pixel perfect" cult.

    23. Re:Crappy frameworks, tools and web standards by shutdown+-p+now · · Score: 1, Troll

      Second, Access is not a web platform (such as using HTTP as a GUI primitive control transport). And third, SharePoint only has rudimentary CRUD ability (although is likely to improve, but in a proprietary way).

      Access 2010 lets you design applications as usual, and "publish" them to SharePoint as web apps. There are some limitations there, of course, but not as many as one may think (and it's definitely above what SP offers out of the box).

    24. Re:Crappy frameworks, tools and web standards by roman_mir · · Score: 1

      I gave up on existing frameworks for quite some time now, and since I am lazy but have to write lots and lots of code, I started creating my own tool sets to generate CRUD structures, value objects and now also front end code. It's a pain in the ass to do it, but I force myself doing it that way rather than just doing the same old thing over and over again. Finally I have developed a set of tools that I use on every project to do the same things that I would have ended up doing by hand anyway and my speed of production output grew by some ridiculous amount, I can't even comprehend, but I can say, that one of the projects I created generation tools that produced code that replaced a system with completely generated code that 3 other people were writing by hand for about 5 months. To produce the generation tools took about 8 days. The generators run everything in about 3 minutes. If I can help it I don't write code anymore, I write code that writes code.

      Tried packaging these tools into some nice form to allow others to use them, but it is difficult, it has been much easier to use these tools by myself and be very productive but it proves very hard to make the tools look and feel nice for other people. Maintaining a Free version of these tools would be a huge challenge, I know how difficult it is to maintain Free anything, there would be more and more requests for features and nobody would ever be completely satisfied, it would take an enormous effort. I think that maybe a reason that there are no great generator tools out there that are easy to use and at the same time produce good code.

    25. Re:Crappy frameworks, tools and web standards by Anonymous Coward · · Score: 0

      You dont have a GF do you?

    26. Re:Crappy frameworks, tools and web standards by IamTheRealMike · · Score: 1

      Try GWT and an associated GUI designer like Instantiations. I have used GWT but not the gui designers myself. GWT works pretty well for certain things. The Google Closure JS libraries can provide nice GUI (the stuff used to build google apps) if you want to work purely in JavaScript. As for Delphi/VB esque components like data grids, try ExtGWT, a rich gui library for GWT. Though I question the wisdom of trying to build a desktop style GUI on the web as I suspect one reason people like web apps is their typically simpler UI paradigms.

    27. Re:Crappy frameworks, tools and web standards by Anonymous Coward · · Score: 0

      Though most slashdotters won't like this, there is a plugin for this: Silverlight!

    28. Re:Crappy frameworks, tools and web standards by Flammon · · Score: 1

      It's time to build a dedicated open-source GUI/CRUD browser[1] that can handle desktop, MDI, data grids, tree controls, and CRUD-like applications with grace. No more bending and kicking the eBrochure paradigm to act like real desktops. JavaScript was not meant to be a systems language and DOM was not meant to be a desktop-like nor CRUD GUI.

      XUL was started years ago. It does everything that you ask and hey there's even a proof of concept that you download called Firefox.

    29. Re:Crappy frameworks, tools and web standards by julesh · · Score: 1

      what happened to applets?
      They are usable now, but everyone still thinks they are in a sorry state of ca 1997.

      The problem with applets is you can't rely on anyone to have a recent version of Java, or indeed any version of Java at all. I worked on a site that used applets for user interface purposes back in the early 2000s. In about 2005, the company that owned it sold the site, and the buyer asked us to help redevelop it. They had done some stats-gathering with their existing customers, and found only about 60% of them had a recent enough Java (1.2) to run the applet we had written. About 25% had no Java installation at all, because MS's Java was removed when XP SP2 was released.

      Looking at the situation currently, it does seem to be improving (these stats suggest it's now < 20% who don't have it installed), but there's still a significant base that don't have Java, and with it being a ~80MB download, it's more than you can ask people to get if they want to use your site.

    30. Re:Crappy frameworks, tools and web standards by syousef · · Score: 1

      Man, you complain well. But you don’t seem to do anything against it.
      It’s like my last boss. (Ever!)

      You know what the first thing is, that I do in a new environment?

      Man you pontificate well but you don't seem to understand that my boss does not pay me to create programming tools, nor am I stupid enough to lose my job pretending that.

      Code me a generic CRUD generator (database/persistency, logic, gui). E.g. a tool that renders me a whole application out of the SQL database definition. Or in other words: The difference between SQL and tools like MS Access. ;)

      Fantastic. Since you've build such a wonderful magical tool and since you can convince your boss to let you spend time on that, I'm sure you can convince him to open source it.

      Then I can push out generic software faster than I can write up the data models. Add the little bit that usually is the business logic, and tadaa!

      In my last job, we were at the limits of our capacity. Too much work for too few people. And I offered my boss, to cut our work load by 90% (realistically!), when he would give me two to five days of free time. He denied with “We don’t have time for that.”
      And why not? Hm? Because you don’t take the time for this!
      It was one of those typical PHB moments.
      Needless to say: I quit.

      Needless to say you weren't missed. Now the truth comes out. Some of us have a family to feed.

      Now I’m on to what is basically a completely new OS (Linux kernel, new shell (cli and gui), and legacy interface to GNU) that goes a huge step further, by generalizing it as much as physically possible. (Actually, I can prove that it can’t be generalized more, without becoming less efficient again.)

      You wrote a whole OS did you? Fantastic. Can't wait to see the source code...and for hell to freeze over.

      --
      These posts express my own personal views, not those of my employer
    31. Re:Crappy frameworks, tools and web standards by syousef · · Score: 1

      you use the right frameworks but wrong tools...

      Yeah I've used a whole stack of different tools and they all suck. Care to enlighten me about which ones don't? I'm willing to bet you're just in love with your favourite toolset despite it's deficiencies.

      --
      These posts express my own personal views, not those of my employer
    32. Re:Crappy frameworks, tools and web standards by syousef · · Score: 1

      Ken: "Programming is hard!"
      Not intended to be taken personal. However, what do you actually want to do after your tools do everything for you? It seems you want to be a designer, not a programmer....

      No, I just don't want to solve the same crappy problem over and over while the business goals go unsatisfied.

      Why would you say that, and anon, unless you're just trolling?

      --
      These posts express my own personal views, not those of my employer
    33. Re:Crappy frameworks, tools and web standards by syousef · · Score: 1

      I gave up on existing frameworks for quite some time now, and since I am lazy but have to write lots and lots of code, I started creating my own tool sets to generate CRUD structures, value objects and now also front end code. It's a pain in the ass to do it, but I force myself doing it that way rather than just doing the same old thing over and over again. Finally I have developed a set of tools that I use on every project to do the same things that I would have ended up doing by hand anyway and my speed of production output grew by some ridiculous amount

      If I did that my current employer would own it so I'd have to start again at my next job, I'd have to maintain it as various frameworks it was built against evolved (eg. hibernate annotations vs xml config files) etc.

      --
      These posts express my own personal views, not those of my employer
    34. Re:Crappy frameworks, tools and web standards by FlyingGuy · · Score: 1

      No that is NOT what he means. I know exactly what he means.

      What he wants is a application presentation program. This is a very simple concept and it is a very easy program to write and I am going to do it.

      Take for instance Delphi. Delphi has a rather nice object library that you can build a very nice application in and do everything you could possibly want.

      Now it's X-Platform counter part is Lazarus which is intern backed by FPC.

      Don't link the pascal dialect? There is QT for the C / C++ fans which has been recently open sourced.

      In either one of those I can write a very tiny program that will do the following:

      • Take a text stream, parse it and end of with a beautifully laid out GUI Screen to do Data Entry, handle text, etc.
      • Use native GUI elements from the platform it is being run on ( Cocoa, Windows, KDE, Gnome ) and they ALL look like native apps thus making the user feel comfortable AND they know how to use all the native shortcuts out of the gate.
      • Lock it down HARD!!! Since the "Source" is pure text and you don't have to deliver massive amounts of layout gibberish it is very small, very clear and can be delivered encrypted and signed.
      • Because the application engine does not have to try and figure out every possible permutation off things like CSS and HTML it will be screaming fast.
      • A form painter can be built or use the native one. No CSS, No HTML just "I put this component at X,Y and that is where it is at run time. No having divs nested 10 deep JUST to get things to line up correctly!

      Things like QT and Delphi or Lazarus are completely object oriented libraries already and have stood the test of time, so making contextual behavior is quite simple. The portion that must be written as a method in response to an event will be interpreted and again is contained in the application file.

      --
      Hey KID! Yeah you, get the fuck off my lawn!
    35. Re:Crappy frameworks, tools and web standards by Anonymous Coward · · Score: 0

      Check out Google Web Toolkit

      It acts like a windowing toolkit like Swing or AWT, but compiles into JavaScript and HTML. I haven't used it myself; I'm quite happy with just jQuery.

    36. Re:Crappy frameworks, tools and web standards by ScrewMaster · · Score: 1

      Customers and bosses really want desktop-like apps

      It's the same old argument about the thin client vs. a thick client. It never ends. "Why can't I have a mail program that looks and works just like my favorite email client but in my browser?"

      --
      The higher the technology, the sharper that two-edged sword.
    37. Re:Crappy frameworks, tools and web standards by Tablizer · · Score: 1

      Though I question the wisdom of trying to build a desktop style GUI on the web as I suspect one reason people like web apps is their typically simpler UI paradigms.

      For simple stuff, a web-style app is fine. However, they are poor or difficult at complex or intricate data-entry. My experience is that while a given widget may work okay during tests, when one combines all the things that make a web browser interface be desktop-esque, they tend to conflict and interfere with each other.

      Thus, a tabbed forms interface may work fine with simple examples and a data grid may work fine in simple examples, but when the tabbing system and the data grid are combined together, weird things start happening. The widgets are not industrial-strength and are not heavily road-tested. Or newer browser version break what used to work. They are fragile, unpolished, and finicky. I believe it's largely because DOM itself is not designed for being a robust GUI engine, so widget makers have to hack and hack and force round pegs into square holes, and under pressure the straps start snapping.

      And like I said in a nearby thread, if a web-browser interface becomes sufficiently sophisticated to challenge native Windows apps, Microsoft has ways it can sabotage their DOM/JS engine in the name of "improvements".

      Thus, first all the desktop-esque GUI idioms have to start working together right, and then they have to survive Microsoft's wrath.

    38. Re:Crappy frameworks, tools and web standards by Anonymous Coward · · Score: 0

      Here's the core of the problem: The web is a horrible platform.

      I agree and I've ranted about this several times on slashdot. Customers and bosses really want desktop-like apps, but existing browsers can only do this if you stretch them far beyond what they were originally made for: eBrochures. It takes 5 different programming and markup languages that break on each new browser version incriment.

      It's time to build a dedicated open-source GUI/CRUD browser[1] that can handle desktop, MDI, data grids, tree controls, and CRUD-like applications with grace. No more bending and kicking the eBrochure paradigm to act like real desktops. JavaScript was not meant to be a systems language and DOM was not meant to be a desktop-like nor CRUD GUI.

      Until people wake up to this harsh reality, web programming will continue to suck. It's like NASA trying to make everything with left-over shuttle parts, resulting in waste, bloat, and dead nauts. Blow up the fucking Shuttle and make a real system!

      [1] Or a powerful plugin.

      What you 're asking for already exists - it's called Silverlight (or Flash, but hey, I don't really like coding in a semi-OO script language).

    39. Re:Crappy frameworks, tools and web standards by Tablizer · · Score: 1

      If I did that my current employer would own it so I'd have to start again at my next job, I'd have to maintain it as various frameworks it was built against evolved (eg. hibernate annotations vs xml config files) etc.

      Just tell your boss that you got most the parts from various training books and training websites scattered all over the web, which is a common practice. Thus, the company couldn't actually own them. He/she may grumble about not documenting the origin of your snippets, at which point you apologize and promise to do better in the future, but they couldn't do much beyond that.

    40. Re:Crappy frameworks, tools and web standards by Jaime2 · · Score: 1

      Unfortunately, JavaScript was meant to be a systems language. Remember when Netscape said they would "reduce Windows to a seriers of poorly-debugged device drivers"? Also what you are asking for has already been invented. I can think of two examples; Mozilla's XUL and Microsoft's WPF. WPF is not tied to any language and there is even a partial open source implementation (Moonlight). The problem is that they don't look like web applications.

      It seems that managers heard ten years ago that web applications were client-platform-independent, centrally maintainable, scalable, and easy to deploy. Since then, they have been pushing everything to be a web application. Java, that desktop Flash thing that I forgot the name, WPF, SilverLight, XUL, ClickOnce, and a host of other solutions have been invented that each solve some or all of the list of problem that web applications originally solved. However, they are not web application and therefore are not accepted. The real tragedy is that many companies are developing web apps that only run in IE6 and use ActiveX controls. That specific combination ruins almost every advantage that a web application has.

    41. Re:Crappy frameworks, tools and web standards by shutdown+-p+now · · Score: 2, Insightful

      No CSS, No HTML just "I put this component at X,Y and that is where it is at run time.

      That is not how Qt works.

      And even when you get that, as soon as your end user changes DPI setting in OS, or (on Unix platforms) font face & size, or, God forbid, you need to do localization, and suddenly discover that all strings are of different lengths - then what?

      Desktop UI programming has got dynamic layouts for a reason. All modern UI toolkits have them. Don't try to pass the lack of them as some kind of advantage.

      By the way, from the point of view of programmer, Access is not fundamentally different from Delphi. It also has a comparable widget library (complete with absolute positioning that you like), and the ability to write everything in code.

    42. Re:Crappy frameworks, tools and web standards by syousef · · Score: 1

      You wouldn't suggest that if you knew who I was employed by.

      --
      These posts express my own personal views, not those of my employer
    43. Re:Crappy frameworks, tools and web standards by Tablizer · · Score: 1

      It appears that everybody involved really wants open standards. I agree there are plenty of proprietary solutions around. And XUL was poorly thought out in my opinion.

    44. Re:Crappy frameworks, tools and web standards by Tablizer · · Score: 1

      I don't want to trigger a coordinate-versus-nested placement dogfight here, only to say that for somewhat simple applications, coordinate-based placement is plenty sufficient. And there are ideas such as "stretch zones" that allow data grids etc. to stretch under a coordinate paradigm for bigger monitors.

      A good tool would allow both types of placement paradigms, including mixing them within frames etc.

    45. Re:Crappy frameworks, tools and web standards by Tablizer · · Score: 1

      After Microsoft pulled the carpet out from under VB6 shops, it's difficult to trust them even with used toothpicks. This is part of the reason that Silverlight is shunned.

    46. Re:Crappy frameworks, tools and web standards by Jaime2 · · Score: 1

      Open standards from whom? Since we aren't talking about web applications, W3C can't create standards in this space. If the Apache Software Foundation had done WPF instead of Microsoft, it would probably already have set the world on fire.

    47. Re:Crappy frameworks, tools and web standards by Tablizer · · Score: 1

      The problem with X-Windows is that it doesn't work well with latency typically seen in HTTP communication. Each character has to be sent between the server and client, resulting in a delayed and jerky response profile. It's too low-level. Smarter widgets only communicate with the server when they need to and handle common events and idioms at the client side.

      For example, a text box that validates that its value is numeric shouldn't have to "talk" to the server until the user hits Save or Submit. HTML sort of does this, but typically has to redraw the entire page for a state change. Ajax altering the DOM image tree attempts to remedy this, but a grander solution would be to build this into the "GUI browser" protocol and/or language rather than send an entire GUI engine through JavaScript for each app.

      It's a lot of fiddling make a car act like a boat when it's becoming clear that starting over with a boat is probably cleaner.
           

    48. Re:Crappy frameworks, tools and web standards by Anonymous Coward · · Score: 0

      I wish I had mod points right now... I totally agree. Glad to hear from someone who feels the same! :)

    49. Re:Crappy frameworks, tools and web standards by Tablizer · · Score: 1

      It's the same old argument about the thin client vs. a thick client. It never ends. "Why can't I have a mail program that looks and works just like my favorite email client but in my browser?"

      I believe it is possible. I have yet to find a technical barrier (although there will be a few minor practical limitations). Proprietary incarnations such as Adobe Flex show that the general idea is technically possible. The problem is that open standards keep trying to use the HTML+CSS+JavaScript+DOM stack to do it, and it appears after many years of trying that this stack is not up to the task.

      So at least as a hedge, let's start over and build a "GUI Browser" from scratch that has desktop idioms built in. (As already mentioned nearby, I drafted up part of a GUI markup language to show how updates etc. could be specified.)
         

    50. Re:Crappy frameworks, tools and web standards by Tablizer · · Score: 1

      I meant de-facto standards, at least initially. Mosaic triggered the HTML revolution; now we need something similar for rich GUI's.

    51. Re:Crappy frameworks, tools and web standards by ScrewMaster · · Score: 1

      I believe it is possible

      I believe it is too ... but the big benefit of Web apps is that they're relatively lightweight and multiplatform. If you really want to start coding Web applications that are basically native apps in power, you're going to lose that benefit to some degree. And you're right: the current crop of Web browsers isn't going to cut it.

      So at least as a hedge, let's start over and build a "GUI Browser" from scratch that has desktop idioms built in

      I get the impression that that's where Google wants to take Chrome.

      --
      The higher the technology, the sharper that two-edged sword.
    52. Re:Crappy frameworks, tools and web standards by FlyingGuy · · Score: 1

      A form builder in ANYTHING besides HTML draws the control at position X,Y, no if and or buts about it.

      An Application window, by DEFAULT contains the application. I dont care if you resize or whatever, the APPLICATION DESIGNER desides what font to use and what font SIZE to display it in, you can change every other font to Dingbats or any other bizarro world thing you want, but if the appliaction does NOT inherit the font of the parent, it stays put, end of story.

      This is for business not for some flash loading, movie playing, 3d game playing interface. You want that then by all means stick to the insanity that is HTML/CSS/DOM because as a business platform it just sucks and if there was anything else, TRUST me they would be abandoning browser based interfaces in droves.

      Well now there is going to be because after 4 full versions of HTML and 2 full versions of CSS it still is not suited for business applications.

      Many will say, but wait, HTML 5 is our savior!!!! HTML 5 is NOT implemented by anyone yet and neither is CSS 3. Right now they are arguing about playing VIDEOS instead of doing the little things like making sure the UA actually RETURNS the fact that a check box is NOT fucking checked!!!!!!

      Why do you think MS came up with ActiveX, why do you think Sun came up with Java Applets, because they wanted to? To get around the limitations of HTML/CSS/DOC/JS and if you have any other reasoning, then wrong answer, -5!

      I have said it before and many other posts and now I am tired of saying it so am just going to build it. The browser neds to understand TWO top level tags, <HTML> and <APP> and have drasticaly different behavior for each. And since the WC3 is about as useful as a wet paper bag and browser developers are SO very open to new ideas it is time to take action.

      It will be small, open source and it will do what business needs it to do, it will present data to be considered, edited and saved without having to worry about the vagaries of the UA.

      --
      Hey KID! Yeah you, get the fuck off my lawn!
    53. Re:Crappy frameworks, tools and web standards by FlyingGuy · · Score: 1

      Trying to mix the two is pure stupidity because they are 180 degrees apart in intent and implementation.

      In an APP system it is very simple. The main windows inherits NOTHING from the desktop, it stands alone. The application SDI or MDI withing that window. Within that application window you do whatever you please, and it the application window resizes you get scroll bars and that is what they are for.

      Right now, as it stands, in a browser to get a pretty standard 1 to many database presentation with the many side having tabs who's content is behind or in front of other tabs, when someone selects a background tab you either have to rebuild the entire page, rely on the Z-Index (which everyone implements in the same way, right??) and transparent DIVS that overlay each other, or you have to go blasting through the document, re-arranging and hiding all sorts of elements and then stuff the documents inner-html with data which is particularly slow. Want a good example? just use /. as when the post gets big, like this one, it can take quite a while to repaint all this crap and they use a synchronism ajax call and jquery to re-factor the entire page, which leads to the browser thinking /. is no longer responding and inviting you to kill the script. If you try asynchronously you are just inviting disaster when click-happy users start clicking all over the place while you are waiting for a server response to the last click. Arrrg, it is insane!

      Sometimes you want a user to pay attention to the system instead of their Facebook page and so your ONLY recourse is a JS alert box. It is so PRIMITIVE that you cannot even make the font bold or even change the font for that matter. Actual modal dialog boxes in Windows, Cocoa, KDE or Gnome can at least be presented with minimal font decoration and if you don't like that, hell you can build your own MODAL dialog.

      A text rendering tool is a text rendering tool and an application rendering tool is an application rendering tool and the two are not the same, not even closely related and the just PURE fucking kludges they have put in the HTML spec are quickly collapsing on themselves and becoming more of a pain in the ass to use then they are worth.

      --
      Hey KID! Yeah you, get the fuck off my lawn!
    54. Re:Crappy frameworks, tools and web standards by Anonymous Coward · · Score: 0

      I don't know how X.org is doing these days in terms of progress. The Fresco project appears to be dead.

      Does anyone know anything about GGI? Do they have a handle on this concept?

      http://www.ggi-project.org/

    55. Re:Crappy frameworks, tools and web standards by phillipsjk256 · · Score: 1

      The HTTP protocol is not designed for low latency. It is a stateless protocol that supports things like automatic content negotiation. Combined with HTML, it is designed for sharing static, structured, multi-media documents. Protocols like SSH and telnet maintain an open TCP connection so character updates only cost about 40 bytes. I have seen websites do per-character updates over HTTP (usually search engines doing completion suggestions).

      Given how "Rich content" is used, I'm not sure how much benefit you get from doing validation client-side. On a fast machine the client-side verification will be slightly faster (than a round-trip to the server), but the server must still validate the information because the client is untrusted. The problem for the client is that most of the time (Short of a mutually authenticated HTTPS connection) the server is untrusted as well. If you can tell the browser to take only certain forms of input (or generate unwanted pop-up windows), you are taking control of the browser away from the user. This is a problem because the browser is typically interacting with several websites at the same time.

      As I hinted with the Lynx comment, I think client-side scripting should be avoided. I actually liked the concept of Java Applets: there is a clear delimitation between "Static Webpages" and executable code that is kept in an explicit sandbox. Opening an X window (labeled by the originating host (I don't think the X protocol is sand-boxed)) or VT100 terminal window (labeled by host) is also a clear delimitation. Your post asking for a new GUI/CRUD interpreter (after cluing in CRUD is an acronym) and mention of client-side validation reminded me of the Network extensible Window System, based on the PostScript programming language.

      I think we should stop assuming that users are too stupid to figure out the difference between their browser and the Operating System. If the average user is confused, it may be because Microsoft tied Internet Explorer (with the bad idea that is ActiveX) to the OS back in 1998. We should make it easy for users to make rational decisions about their computer. That means showing a clear distinction between software and data. Keeping a clear distinction between software running on the local machine and remote machine is a consequence of this.

      I know I am fighting an uphill battle. Last time I checked, every file format I checked (including text (shell scripts) and HTML (JavaScript)) was able to embed code. We have Microsoft employees suggesting taxes to help clean up infected machines because everyone knows computers require constant maintenance. We have people suggesting that locked-down systems like game consoles and iPads are good things because the average user cannot configure a computer. I say that is because the software the average user is using is badly designed, not because computers are inherently hard to use. For example: there should be no way to get your computer "infected" by opening and e-mail attachment. The "common sense" advice to avoid opening e-mail from people you don't know isn't. (In real life, junk mail goes in the trash, letter bombs are rare.)

    56. Re:Crappy frameworks, tools and web standards by shutdown+-p+now · · Score: 1

      A form builder in ANYTHING besides HTML draws the control at position X,Y, no if and or buts about it.M

      I'm not sure what you mean by this, even. Anything ultimately draws controls at some definite position X,Y on the screen, but it doesn't mean that it's the same position in the designer, and during run-time. And, of course, there are non-HTML visual designers that allow to design not in absolute coordinates (e.g. Qt Designer, NetBeans, VS WPF designer), as well as HTML visual designers that allow absolute positioning (e.g. VS HTML designer) - the latter is trivial to achieve in CSS.

      I dont care if you resize or whatever, the APPLICATION DESIGNER desides what font to use and what font SIZE to display it in, you can change every other font to Dingbats or any other bizarro world thing you want, but if the appliaction does NOT inherit the font of the parent, it stays put, end of story.

      An application "designer" (a programmer isn't a designer, by the way) doesn't know how good my vision is, or what the physical resolution of my screen is. 1920x1200 is very different at 15" (high-end Thinkpads) and 24" (typical desktop monitors) - a font proper for one would be too small or too large on another.

      If you ignore colors as well, it becomes an accessibility problem (at which point it's also a legal issue).

      This is for business not for some flash loading, movie playing, 3d game playing interface

      Exactly. And it's the "flash loading ..." interface that is so often guilty of ignoring user preferences, and shoving some poorly chosen color schemes and fonts into his face. And any "professional" application guilty of that goes into the same garbage bin, no exceptions. A truly professional application, on any platform, uses the native look & feel, and respects all user's preferences.

    57. Re:Crappy frameworks, tools and web standards by FlyingGuy · · Score: 1

      Ok so you are stating to sound like a troll, but I will respond.

      The whole point of this is so that the application container looks EXACTLY like like the native platform, not some piece of swimming crap that some script kiddie put together.

      On windows, the controls look like WINDOWS. Each is slightly different from say Windows 2000 to XP to Vista to 7 but they are a consistent look and feel across the windows platform.

      On OSX aka the Mac, the controls look like COCOA they are a consistent look and feel.

      On KED or GNOME aka Linux, the controls look like KED or Gnome and have a consistent look and feel.

      And as to your notes about CSS being trivial to do absolute positioning in? Yeah, been down that road and I aint going down again because it sucks.

      CSS has its place, but designing a portable application tool aint one of them. CSS was obviously not designed by programmers because it is one of the most asshat structures to come down the pike in a long long time and that is the problem with "designers" specing out shit when they really have no clue about what it takes to realize that in code. You ever looked at the code to keep a CSS tree of any consequence from turning into to so much gibberish? I have, and the shit you have to go through makes designing software to go to mars look like child's play.

      As to your assertion about colors, design standards, yadda yadda yadda. EVERY company publishes a set of best practices, MS, Apple, IBM, SUB, Oracle, HP you name em, but they all boil down to a set of things that make for a pretty universal interface. Unfortunately most web asshats ignore all that and build crap and call it an "application". Since they are more interested in building "eye candy" then they are in getting work done, which is, uhmm, what business does and since I am going to create this for, wait for it.... business I am sticking with the native desktop of the target platform.

      --
      Hey KID! Yeah you, get the fuck off my lawn!
    58. Re:Crappy frameworks, tools and web standards by shutdown+-p+now · · Score: 1

      The whole point of this is so that the application container looks EXACTLY like like the native platform, not some piece of swimming crap that some script kiddie put together.

      Okay, I can agree with that.

      However, I'm not aware of any successful attempt to pull that trick off on so many platforms. Among other things, it's not just the look, but the feel. You know, reverse button order in dialogs in GNOME. Top menus (and shortcuts!) work completely different in OS X.

      Qt seems to be decent, but I still hear OS X users complaining about how it's "not native enough"...

      And as to your notes about CSS being trivial to do absolute positioning in? Yeah, been down that road and I aint going down again because it sucks.

      What, exactly, is wrong about "position: absolute; left: 100px; top: 200px"? How is it any different from Delphi?

      Anyway, I'm not arguing about building business applications in HTML/CSS as a good practice. It just happens to be "good enough" in a sense that it is a hackish way to use an existing cross-platform delivery vehicle, which is a browser. Could it be done better? Oh, sure. There are even attempts - e.g. XUL.

      But, as it happens all too often in this industry, "good enough" that is there already assuredly beats "absolutely perfect" which only exists in someone's head; for better or worse. There are some attempts to converge the two, which is what all those "write it like a desktop application, publish it as HTML/CSS/JS" frameworks like GWT are all about. I suspect we'll end up with that as a mainstream approach in medium-term at least.

    59. Re:Crappy frameworks, tools and web standards by Tablizer · · Score: 1

      My client-side validation example was mainly to illustrate the difference between "dumb" UI's and "smart" UI's. And I agree that the server should do a final validation rather than trust the client, but basic built-in validation for say numeric at the client seems prudent to me regardless if the server does it also. I'd like to see a markup language that can do something like:

      <input name="price" type="numeric" maxdecimals=2 etc>

      The user would get immediate feedback if they kit the wrong key instead of wait until the Submit stage. Even dBASE forms did this back in 1983. We've gone backward in features.

      As far as avoiding scripting on the client side, you mentioned you were okay with Java applets because of the sandbox model. Perhaps a scripting sandbox could also be included. JavaScript is pretty well sandboxed in, but crackers find ways around it, and did with Java also when applets were popular.

      Perhaps most apps could avoid client-side scripting with a rich enough GUI markup language. But I imagine there will always be features people want that need such. Even now many things can be done just fine with plane-jane HTML interaction, but companies still use scripting for gimmicky purposes. Google groups was perfectly okay in it's pre-Ajax incarnation. Ajax added very little additional value. It was a dumb move in my opinion.

    60. Re:Crappy frameworks, tools and web standards by MemoryDragon · · Score: 1

      Actually it is a 5 MB download nowadays, the whole JavaFX thing made Applets a viable option nowadays.
      The JRE has been cut down to the bare minimum (it never was more than 15 MB, you cannot compare it with the JDK which is way more)
      and then it loads parts it needs over the net.
      Also the update issue is gone nowadays having included an auto update mechanism.

      What I meant, maybe I was unprecise, is that Applets might be a viable option for intranet. Someone said they make distinction between client and server side hard, I would not say that JEE has been there for ages and you can apply the same teniques you could do for web pages there, but you have to be careful to keep the number of requests to your remote service down (or you work directly with a JDBC conne connection.
      You need a better UI language for more complex designs, thats where JavaFX comes into the game.

      I would not count applets out nowadays, if you can roll out a 5 MB plugin.

    61. Re:Crappy frameworks, tools and web standards by MemoryDragon · · Score: 1

      Actually I would prefer applets nowadays, the JavaFX stuff helped the rotten state of the Applet plugins a lot, it is 5 MB nowadays with auto update and basically runs in its own process space, so no more browser crashes crashing the applet or vice versa. Heck you can even drag the stuff to the desktop nowadays.

      Everyone is so fixated of Flex and overlooks the most obvious option nowadays which almost has been there as long as flash, but is way faster.
      So fast that big desktop apps have been written by the same technologies.

    62. Re:Crappy frameworks, tools and web standards by MemoryDragon · · Score: 1

      The X protocol has its own set of problems, it sucks bandwidth on modern UIs. What performed well on a barebones athena widget needs serious tricks on modern kde or gnome desktops if you have to roll out more than a handful of workstations. Sure there is hacks like NoMachine, but in the end the entire protocol would need a standardized overhaul.
      Plain X stinks bandwidthwise compared to RDP or even VNC.

    63. Re:Crappy frameworks, tools and web standards by MemoryDragon · · Score: 1

      Heck it is not even webstart, also the Applets have become really good since Java6u12. If there was one thing JavaFX was good was that Sun finally put some serious resources into fixing the entire JRE and plugin situation to a point where it is a serious contender to Flash and Webstart. Before Sun already had given up.
      It was enough for a friend of mine to pick up applet programming again (that and the suckyness of having to deal with web programming) and so far he is very happy with it. Especially since he also can use webstart to roll the program out into the desktop if he wants.

    64. Re:Crappy frameworks, tools and web standards by MemoryDragon · · Score: 1

      Actually the only IE development has been over or is getting to an end. The biggest impact on this was Firebug, it finally delivered excellent debugging tools to all those who had the pain to endure to use IE6s debugging tools. From the day firebug arrived at the scene nothing was the same anymore literally every web developer installed firefox and used it as dev platform with IE6 been seen as an afterthought. And that was the point where most people who did not see it before saw how shoddy IE in fact really was. That was several years ago, but the situation despite Microsoft finally having something decent integrated into the browser has not changed too much. Firebug still is standard for almost everyone.

    65. Re:Crappy frameworks, tools and web standards by MemoryDragon · · Score: 1

      The ASF is not doing any standards, they
      are only implementing standards.
      The biggest problem the W3C has is they do not
      run certification programs, they nail down standards
      and everyone can then say we implement them while
      in fact almost all standards are only implemented to 90% by all browsers.
      Sheesh no browser for now even has reached a 100% CSS 2.1 compliancy.

    66. Re:Crappy frameworks, tools and web standards by MemoryDragon · · Score: 1

      I know it sucks you know it sucks, literally any programmer says it sucks, heck i even say it openly in the companies I work for, but I still do web programming, because I have to feed some mouths.

    67. Re:Crappy frameworks, tools and web standards by MemoryDragon · · Score: 1

      Actually he has a point I have written crud generators in the past, they basically can cover about 50-60% of the logic you need for the typical business application, but thats mostly it, the design etc... cannot be covered.
      If do do a lot of work then you might ramp it up to 70%. Thats basically the search edit, delete masks, the rest is very specialized and cannot be covered but that is mostly where 70% of all the work goes into anyway unfortunately. So the real cost savings of a good crud generator are probably 30%...
      Well if you still handcode your DAOs and use plain SQL you might save more, god knows how much time costing shit I have seen in the past.

    68. Re:Crappy frameworks, tools and web standards by julesh · · Score: 1

      The JRE has been cut down to the bare minimum (it never was more than 15 MB, you cannot compare it with the JDK which is way more)
      and then it loads parts it needs over the net.

      vengeance:~# apt-cache show sun-java6-jre sun-java6-bin
      Package: sun-java6-jre
      [...]
      Depends: java-common (>= 0.24), locales, sun-java6-bin (= 6-12-1) | ia32-sun-java6-bin (= 6-12-1)
      [...]
      Size: 6380918
      [...]
      Package: sun-java6-bin
      [...]
      Size: 28282606

      Looks like >35MB to me.

    69. Re:Crappy frameworks, tools and web standards by FlyingGuy · · Score: 1

      What, exactly, is wrong about "position: absolute; left: 100px; top: 200px"? How is it any different from Delphi?

      If ONLY all the browsers implemented this the same. Each rendering engine handles them subtly differently and that is true from version x of a particular browser to version y.

      If ONLY the the WC3 knew the difference between an internal margin and an external one.

      If ONLY the html spec was not such a fucking security nightmare

      If ONLY, if ONLY if Only.......

      --
      Hey KID! Yeah you, get the fuck off my lawn!
    70. Re:Crappy frameworks, tools and web standards by shutdown+-p+now · · Score: 1

      If ONLY all the browsers implemented this the same. Each rendering engine handles them subtly differently and that is true from version x of a particular browser to version y.

      Uhh... can you give any specific example of a browser that does not interpret the CSS style that I gave exactly as specified?

    71. Re:Crappy frameworks, tools and web standards by MemoryDragon · · Score: 1

      The problem he has is probably that he still uses struts for the mvc part, there are better options if you want to use plain model 2 frameworks, spring mvc comes to mind which is pure genious.
      Also do not dismiss JSF, JSF2 is basically close to being excellent, they cleaned up all the problems JSF1 had and made a really nice framework out of it.

    72. Re:Crappy frameworks, tools and web standards by simoncpu+was+here · · Score: 1

      Regarding Flex, I was hoping for an open standard.

      You might want to look into OpenLaszlo.

    73. Re:Crappy frameworks, tools and web standards by xiong.chiamiov · · Score: 1

      I'm currently a J2EE (and C, but predominately Java J2EE) programmer, familiar with Hibernate, Spring, as well as the old school EJB 2 mess.[snip]

      Here's the core of the problem: The web is a horrible platform. I went from Rapid development drag and drop screen design in the late 90s to the abomination that is hand crafted JSP against shitty state based environments. Sure our applications are more scalable now, but I'm still hand crafting code to talk to a database object.

      Your problem is that you're trying to rapidly develop web applications in Java. I took a fairly challenging class in web development that went through the various available tools that the Java world uses, and god, I was wishing to go back to my Django, or even just raw PHP.

      Then you take a look at the GUI layer. Hand writing CSS and JSP? Really? In 2010? SHIT.

      If by "hand writing CSS" you mean "using SASS and blueprint", then sure. Oh, and JSP? Yeah, the rest of us have been using good templating systems since, oh, 2005 at least.

      And then you have to deal with having to redeploy your application to see simple changes OR using exploded views that don't update properly and leave you debugging a problem for 4 hours that should take 4 minutes.

      When I make changes, the development server in whatever framework I'm working with automatically restarts and the changes are visible by the time I can switch desktops over to my browser. As far as actual deployment, there are several really cool tools that do things like automatically update and reload the server when you push commits to your repository. Pretty sweet.

    74. Re:Crappy frameworks, tools and web standards by Tablizer · · Score: 1

      Web apps are no longer "light weight". Many have exceeded the complexity of what a dedicated desktop-like GUI/CRUD browser (DLGCB) would be many times over. DLGCB is what allows an app to be lightweight because it handles typical and common DLGC idioms so that the app coder and markup don't have to be overly complex and large.

      As far as Chrome, as long as it's open-source, it may eventually achieve that goal, but my impression is that Google doesn't get CRUD. They like building visual navigation thingies, but don't seem to understand the nuances of data and CRUD. Most of their employees don't have "cubicle enterprise business" experience.

    75. Re:Crappy frameworks, tools and web standards by Joey+Vegetables · · Score: 1

      The lesson should be more than just "Microsoft might drop support for Silverlight." That is just a special case of the more general and worrisome problem: "any proprietary, single-vendor solution leaves you at the mercy of that vendor, and you as a developer or end user are no longer in control of your computing experience." Our best defense against that problem is first to recognize it as a problem, then try to build on open standards and tools to the greatest extent possible, preferably using small, simple tools that do one thing well and flexibly, rather than "one size fits all" solutions that try to do everything, try to solve every problem, but in the process rob us of the flexibility and transparency we need in order to build and maintain great solutions for our business clients.

  20. Re:Idiot. Seriously. by sorak · · Score: 1

    And every profession can say the same about how much smarter people were before they had calculators/internet research tools/software, when they had to use slide rules and learn mental shortcuts, because they didn't have the tools we have today. That's life; One generation plants a tree...The next one gets the shade.

  21. Re:Idiot. Seriously. by dkleinsc · · Score: 3, Insightful

    "Knuth had his day."

    Wow. Just wow.

    First, I want you to write a work that tops TAOCP. Or at the very least show your check from Knuth for finding an error. Oh, wait, I highly doubt you've done either. It can be how you can express your imagination in ways that are beyond TAOCP if you like.

    Next, write some software at least as useful as TeX.

    Then, and only then, can you call Knuth an idiot.

    --
    I am officially gone from /. Long live http://www.soylentnews.com/
  22. Re:Idiot. Seriously. by clarkkent09 · · Score: 0, Redundant

    Not to mention that he can't grasp the awesome power of 300 APIs (sorry, "technologies") each with three letter abbreviation names starting with J that make up the resume of a typical Java programmer.

    --
    Negative moral value of force outweighs the positive value of good intentions.
  23. Misleading summary. by BitterOak · · Score: 5, Informative

    Warning! Before you read the linked article or its followup too deeply, be aware they are not by Donald Knuth. Instead, the author has a brief quote from Donald Knuth in his first blog, and the other link is a followup story. So, "the author" referenced in the Slashdot summary is NOT Donald Knuth. I made the mistake of reading the followup article first, and then when I read the original, I found a brief quote from Donald Knuth which tipped me off to the fact that the author was not Donald Knuth, and as far as I can tell, Donald Knuth doesn't even know this author.

    --
    If I can be modded down for being a troll, can I be modded up for being an orc, or a balrog?
    1. Re:Misleading summary. by Anonymous Coward · · Score: 0

      He does now.

    2. Re:Misleading summary. by Hurricane78 · · Score: 1

      Oh oh. Thank you. I made that mistake down there in another of my comments. :(
      If I knew that anyone else besides you had read TFA, I would feel stupid now. But luckily, this is Slashdot. ;)

      --
      Any sufficiently advanced intelligence is indistinguishable from stupidity.
    3. Re:Misleading summary. by Anonymous Coward · · Score: 0

      Phew, I almost read an article not written by Knuth. Thank you.

    4. Re:Misleading summary. by Anonymous Coward · · Score: 0

      Before you read the linked article or its followup too deeply

      Don't worry this is slashdot.

    5. Re:Misleading summary. by zobier · · Score: 1

      I am totally unsurprised that this post was written in a way that may mislead readers into thinking that TFA was a rant written by Prof. Knuth. I am, however, disappoint; then I am left wishing that /.'s comment threading system was more like reddit's so that your comment would have been the first thing that I had read.

      --
      Me lost me cookie at the disco.
    6. Re:Misleading summary. by Mirk · · Score: 1

      No indeed, Don Knuth has surely never heard of me. Sorry if I gave that impression, I didn't mean to.

      --

      --
      What short sigs we have -
      One hundred and twenty chars!
      Too short for haiku.
  24. Re:Idiot. Seriously. by Anonymous Coward · · Score: 0

    No joke.

    It's much easier to grasp the awesome list of 300 fast food and department store job history bullets that other programmers have on their resumes.

  25. "Good programmers write good code... by fatp · · Score: 5, Funny

    excellent programmers steal excellent code."

    I stole this, and I don't know where it is stolen from!

    1. Re:"Good programmers write good code... by binarylarry · · Score: 2, Informative

      That would be Pablo Picasso.

      --
      Mod me down, my New Earth Global Warmingist friends!
    2. Re:"Good programmers write good code... by yanyan · · Score: 1

      You're an excellent slashdotter.

    3. Re:"Good programmers write good code... by daffmeister · · Score: 1

      Peteris Krumins has a blog called good coders code, great reuse, mostly about algorithms, perl, sed and such things. He might have borrowed the idea for the title also.

    4. Re:"Good programmers write good code... by fatp · · Score: 1

      I think it comes form another quote, somewhat similar to the previous one:

      "Good programmers know what to write. Great ones know what to rewrite (and reuse)."

    5. Re:"Good programmers write good code... by KZigurs · · Score: 1

      bad artists copy,
      good artists steal
        - pablo\ picasso

    6. Re:"Good programmers write good code... by mqduck · · Score: 1

      Pablo Picasso was never called an asshole.

      --
      Property is theft.
    7. Re:"Good programmers write good code... by FriendlyPrimate · · Score: 1

      excellent programmers steal excellent code."!

      Where the heck does excellent code come from then?

  26. Re:Idiot. Seriously. by Sulphur · · Score: 2, Funny

    One generation plants a tree...The next one gets the shade.

    Then the squirrels show up and try to mine the bird feeders for freebies. Meanwhile the birds are ducking the guys who are learning to use blowguns.

  27. Re:Idiot. Seriously. by EastCoastSurfer · · Score: 1

    Even within the group of actual programmers you need different skill sets for different problems. Think of a general contractor and the plumber working for him. The GC knows enough about plumbing (algos) so he knows what he needs and doesn't get screwed, but he isn't the one who builds out all of the plumbing. His skill is getting together all the other parts required to build the house (complete piece of software that solves a customers problem) rather than knowing every intimate detail of how each individual job is done. Think generalist versus specialist.

  28. Band-aid approach by cormander · · Score: 0

    "pasting not-quite-compatible libraries together and patching around the edges" is quite an acceptable form of programming, and can take some real skill to do well. It's called the band-aid approach, which is effective for small, startup companies looking to get off the ground, and large companies looking to save a buck.

  29. Re:Idiot. Seriously. by Opportunist · · Score: 1

    The comparison is pretty apt. It takes some training to hit something with bow and arror. Any moron can pick up a firearm and pull the trigger for effect.

    I'm fairly sure the next gen of dev tools will turn anyone into a programming genius. But that's ok by me, I guess we'll be turned from soldiers into weaponsmiths, to stay in the analogy.

    --
    We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
  30. Moot Issue by Redlazer · · Score: 1
    It works just like everything. The simple stuff is simple, but it takes time and understanding. If you free up the mind to concentrate on harder things, while having something else take care of the simple things, we move forward.

    Its about PROGRESS. Why else do we have machines and computers? What are they for? What are doing for us?

    Doing things the hard way sucks. I'd much rather develop something that will do it the hard way so I never have to do it the hard way again.

    -Red

    --
    Guns don't kill people, "with glowing hearts" kills people.
  31. Re:Idiot. Seriously. by quadelirus · · Score: 4, Insightful

    I think the difference is like that between mathematics and engineering. Programming used to be more of a math, you were basically writing an executable form of a proof. Now programming is more about assembling all the previously developed tools to produce a useful result in the same way that engineers use a bunch of mathematical tools (that they may not necessarily know how to derive--and for that matter don't need to) to build a bridge. For a mathematical guy like Knuth, the engineering bit is a drag (for me as well) and the act of problem solving is the interesting part. I would even wager that to such a person the means (or methods of solving) are more important than the end result. The beauty is in the elegance of the solution, not in the fact that we now have a solution. Now programming is much more of an engineering task. The tools might as well be black boxes that we assemble in different ways to produce results. Another type of person likes this sort of thing (not me). These people are more interested in the ends, not the means. They are more driven to produce something cool rather than to produce something in a cool way. (Am I making any sense?)

    Neither of these groups is better or worse than the other, just different. Both are needed for progress. There will always be mathematical problems to solve, and there will always be a need to apply the toolbox created by such mathematics to practical tasks with an emphasis on results rather than methods.

  32. You can still program, if you're an engineer by Sarusa · · Score: 4, Informative

    I've dealt with Chinese and Indian outsourced code before - it's rather interesting. They take fragments of code they find via Google, paste them together, and do the bare minimum of editing to make it compile and say 'okay, we've fulfilled our contract, ship it.' This is what suffices for 'programming'.

    On the other hand, I am still solving interesting problems with real programming at my current company, so I still think it's a lot of fun. The key point is that the programming is part of the /problem solving/. Code pigs have no concept of problem solving, just making the program work (by which they mean compile, or matching the sample screens). Engineers are solving problems, and the program is just a part of that. At my present job they really don't care what language I do things in as long as the job gets done, because solving the problem in the most practical manner is the most important thing. In practice this means I use C for things that actually do require high performance and minimal memory usage (this is still an issue in embedded programming), Python for everything else that I can, and domain specific languages for things like servo controllers or FGPAs.

    The 'pasting not quite compatible libraries together' approach is a Java/COBOL thing of minimizing the damage incompetent consultants can do. I've seen it time and time again - once an Enterprisey Java programmer encounters sufficient complexity, a hormone kicks in and they create a framework to simplify this complexity. It does so, initially, but eventually ends up being 2-10x as complex as the original problem they were trying to simplify. But they see this as a net positive because they have a new acronym to put on their resume.

    So basically, like every single damn post I've seen on here lamenting the state of programming, and repeating every damn comment I've made again and again, it boils down to 'solve problems as efficiently as you can'. Absolute rules, in programming or religion, are for people who are too simple to handle complexity. This is the difference between an engineer and a code pig.

    1. Re:You can still program, if you're an engineer by Tablizer · · Score: 1

      The 'pasting not quite compatible libraries together' approach is a Java/COBOL thing of minimizing the damage incompetent consultants can do. I've seen it time and time again - once an Enterprisey Java programmer encounters sufficient complexity...

      This is similar to what Paul Graham has said about OOP, but I think he's talking more about Java than say SmallTalk:

      Object-oriented programming is popular in big companies, because it suits the way they write software. At big companies, software tends to be written by large (and frequently changing) teams of mediocre programmers. Object-oriented programming imposes a discipline on these programmers that prevents any one of them from doing too much damage. The price is that the resulting code is bloated with protocols and full of duplication. This is not too high a price for big companies, because their software is probably going to be bloated and full of duplication anyway. [emphasis added]

      http://www.paulgraham.com/noop.html

    2. Re:You can still program, if you're an engineer by Opportunist · · Score: 1

      But they see this as a net positive because they have a new acronym to put on their resume.

      You need to write a complex framework for that? I was under the impression that 90% of the Java-related three-letter-thingies are made up anyway...

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    3. Re:You can still program, if you're an engineer by psych0munky · · Score: 1

      At my present job they really don't care what language I do things in as long as the job gets done

      Hrm...maybe I am reading into things from your post a bit here, but there is a lot to be said for standardization when everyone is doing things differently...lack of standardization is only sustainable in small teams or small quantities.

      Just take a look at what Henry Ford did...most people think his big contribution was the ubiquitness automobile...I disagree, the ubiquitness of the car today was only a result of Ford's contributions. By standardization was he able to achieve this ubiquitness. He standardized the parts different vehicles were made out of, this made them cheap, reliable and easily maintainable. He standardized worker relations (8 hour work day, switching people to do different jobs to prevent boredom, etc), to make people more productive.

      To quote Men in Black, "a person is smart, people are dumb panicky animals", well guess what? Corporations are made up of people, not a single person...if you want to make it in a capitalist society, you better learn to deal with it.

      The 'pasting not quite compatible libraries together' approach is a Java/COBOL thing of minimizing the damage incompetent consultants can do

      I am hearing that you think that corporations that are hiring these jobs out are specifically asking people to do this so that the impact of mediocrity isn't so painful. I respectfully disagree. In the company I work for, we have hired out many jobs to contractors (both on and off-shore), and the results are pretty much the same. I honestly don't think that my bosses go out and ask them to write crappy code...in fact I was in a meeting with consultants that my bosses crashed, stating efectively, the order of priorities are On time, Maintainable and on budget.

      Nay, to me the problem we are facing is one of the ugly sides of a capitalist society: greed. The consultants want to make more money. My company wants to spend less money so they can keep it for themselves or to acquire more stuff to make more money. It seems that the "trinity" of a decent capitalist society, greed/quality/freedom, has taken an unbalancing shift towards the first item: greed. As a result, product quality suffers. As a further result, the greed drives a desire of the corporations providing good and services to restrict consumers freedoms. Somehow we need to get the balance back in order. I am just not sure how to do that, beyond a revolt (which I am sure won't happen because most people are both producers and consumers. Because of that, logically, I would think that the system should right it self...but then I remember the system consists of people, not a person.

    4. Re:You can still program, if you're an engineer by Anonymous Coward · · Score: 0

      You are absolutely right.

      I may not be the best software engineer out there, but I'm constantly baffled by guys who's basic solution to everything is to escalate the complexity by creating frameworks instead of actually doing something that's efficient and typically much more readable.

    5. Re:You can still program, if you're an engineer by urusan · · Score: 1

      The greed problem you talk about in your post is paradoxically mostly caused by the government today. In a healthy capitalist society, degradation of quality or restriction on freedom of use would cause the company to suffer after some (relatively short) length of time as their customers leave for competitors that offer better goods with fewer restrictions at a lower cost. However, quality can degrade safely for a company when the government will bail out failing companies. Freedom will degrade when the government gives out and enforces eternal monopolies on intangible ideas (well, freedom for everyone except the owners of the ideas).

      To fix these things we simply need to make it illegal for the government to give out corporate welfare and drastically reduce the time that people are granted a monopoly on their ideas. I doubt either will happen for political reasons.

      It should be noted that although the government causes these problems, it is essential to maintaining the same balance. Without it, monopolies would start to form on their own and fiercely guard their territory against competitors with tactics that good government wards against. So we're damned if we do and damned if we don't.

      The current problem arises from the watchmen being in collusion with those that they are charged with watching, but how do we prevent that? If we make watchers that watch the watchers then who watches them? Even if we form triangles, who's to prevent them all from becoming good buddies with each other? Rules and institutions that are meant to prevent this will eventually bend and be broken by the people that implement them. When it comes down to it, these are age-old problems stretching back to the time Ancient Greece and beyond. Good governance is a precious and fleeting thing and no present system can reliably deliver it in the long term. Much like other problems that have always been part of the human condition (like aging and death), we are powerless to truly fix them today no matter how much we'd like to. Perhaps in the future human knowledge and technology will improve to the point where we can finally fix such problems for good. For now though, we simply need to do the best we can with what we have and accept that there will be serious problems with the results.

    6. Re:You can still program, if you're an engineer by cyber-vandal · · Score: 1

      I can't speak for Java but it certainly isn't (or wasn't anyway) a COBOL thing. I've got no idea where you got that idea from. Rather like equating Java with COBOL. They're not even remotely similar.

    7. Re:You can still program, if you're an engineer by ErikZ · · Score: 1

      They don't have to be similar if your cut/paste approach to them is the same.
      He's probably going from what he's seen.

      --
      Democrats or Republicans. They are both taking us to the same place and they are not afraid of us anymore.
    8. Re:You can still program, if you're an engineer by cyber-vandal · · Score: 1

      I worked as a COBOL developer for 15 years and I never saw the "cut and paste" approach as he describes it. I doubt he's seen that at all, it's just the geek delusion that Java and COBOL have anything in common beyond features that all languages have. Apart from anything else COBOL existed long before cut and paste was even possible, when programmers used punched cards.

    9. Re:You can still program, if you're an engineer by Anonymous Coward · · Score: 0

      No offence meant, but I find your statements a bit "parochial".

      You create value for your company/customer by applying what you know and produce code. More power to you.

      Please understand that there are projects whose sheer size (let alone complexity) go way beyond the ability of a single man, even you. And that in order to tackle them, you need tools that can be used by a group of people, and most of them may be less good than you, but at least know how to work in group - even if this often means that someone else has to divide the problems in chunks they can digest and deliver.

    10. Re:You can still program, if you're an engineer by Sarusa · · Score: 1

      I think you're just out of date. See http://www.ibm.com/developerworks/websphere/library/techarticles/0402_able/0402_able.html for instance. When I worked for the state government on a creaky IBM mainframe writing COBOL the framework uber alles approach was extremely evident. You had all these accreted packages which were supposed to bundle and simplify the database lookups and reporting and just ended up making it worse than if you'd just written it outright in COBOL, which has pretty spiff flat file handling and reporting features.
      And policy was you didn't write any code (or JCL) until you'd scavenged what you could from existing queries. You couldn't Google in those days, so you had to cut and paste what other people in the same department had written.

      It's just an Enterprisey Mindset because you're dealing with so many drones.

    11. Re:You can still program, if you're an engineer by cyber-vandal · · Score: 1

      Well I haven't worked on any COBOL since 2004 but I doubt the world has been taken over by COBOL Framework Overlords since then. I worked for a dozen organisations between 1989 and 2004 and only came across a crappy framework idea in two of them, one of which was an incomprehensible monster that took a great deal more skill, intelligence and determination than your mythical cut and paste programmer would have.

      Never used that IBM tool, or even heard of it before today. And just because IBM have a code generator tool doesn't mean that everyone (or for that matter anyone) uses it.

      As for copying code from one program to another - I challenge you to find any programmer who hasn't done that.

      There is no all-encompassing Enterprisey mindset - every organisation I worked for did things in a different way.

      I could point out all the differences there are between COBOL and Java, I could point out that frameworks exist for many more languages than just them (and I don't remember COBOL having anything like the huge framework Java has in any case) but I'll just leave you to your delusions.

  33. Re:Idiot. Seriously. by ooooli · · Score: 2, Interesting

    Not to mention that he can't grasp the awesome power of 300 APIs (sorry, "technologies") each with three letter abbreviation names starting with J that make up the resume of a typical Java programmer.

    Agreed, but the problem is that most of those "technologies" are bloated, designed by committee, buzzword-loaded crap. The problem is *not* that we have found better ways to share code than we used to. I mean, I'm all for crafting beautiful, optimally efficient snippets of code that do one thing perfectly. But have you ever noticed that you can do things in a couple of hours now that 10 years ago would have taken weeks? Being able to cobble together a prototype fast is *hugely* useful and important. Now who was it again who said that premature optimization is the root of all evil? Hmmm...

  34. Re:Idiot. Seriously. by Opportunist · · Score: 2, Insightful

    I wish I could agree, but that's basically what is wanted today: Cheap people who can somehow slap together a program that kinda-sorta does what the boss wants.

    At least in application programming you're seeing a trend that runs in this direction. You have a lot of RAD tools for instant webpages, instant databases, instant office applications. Of course there will always be room for "real" programmers in areas that either move too quickly to give RAD tools a chance to get a footing or where the problems cannot easily be split into neat little building blocks that can be slapped together with a construction kit.

    But for most office applications, you don't even need a "real" programmer anymore today. Well, you'd need one to make it a sensible, fast and secure application, but let's face it, who needs that? Ok, they'd probably need that. But they don't want to pay the price.

    --
    We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
  35. Same thing that happened to the rest of IT.... by MadMorf · · Score: 1

    Unfortunately, most of us are not "engineers" any more, we're factory workers on a production line...

    Unless you're working for the company making the tools, you're using someone else's wrench to build that "truck".

    1. Re:Same thing that happened to the rest of IT.... by agrif · · Score: 1

      When Hiro learned how to do this, way back fifteen years ago, a hacker could sit down and write an entire piece of software by himself. Now, that's no longer possible. Software comes out of factories, and hackers are, to a greater or lesser extent, assembly-line workers. Worse yet, they may become managers who never get to write any code themselves.

      -- Snow Crash, Neal Stephenson

      (which, though the rest of the book is completely unrelated to this topic, is an excellent read if only because it reads so much like a nerdy action flick. It's grown-up brother, The Diamond Age, is as excellent but substantially different and more serious.)

  36. The pictures of meat are really disgusting by Anonymous Coward · · Score: 0

    Can't read the article - there should be a graphic images warning!

  37. Magic incantations you say.. by Zetta+Matrix · · Score: 1

    By analogy, if I invoke several theorems and lemmas to do a mathematical proof rather than killing myself by deriving them again, then I must not be having fun because I'm just plugging into magic incantations.

    Errrr... no. These "shortcuts" improve productivity for both programmers and mathematicians and that's good. Getting down to nuts and bolts is also good because it promotes understanding.

    Moving on...

    1. Re:Magic incantations you say.. by Opportunist · · Score: 2, Insightful

      The difference is maybe that you actually have to know why and how those theorems work. Because else you could not use them. Not knowing why a certain mathematical rule is applicable means that you cannot apply it, not knowing whether its use would be "legal" from within the mathematical ruleset.

      This is not the case with library functions. All you have to know is what you want to accomplish, you drop that info into the help file, it spits out a function (most of the time not really the best one, but one that will more or less do the trick) and it will also tell you what you have to drop into that function to make the magic happen.

      Now, math has been a while ago for me, but I cannot remember it being THAT easy.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    2. Re:Magic incantations you say.. by drewhk · · Score: 2, Insightful

      "Now, math has been a while ago for me, but I cannot remember it being THAT easy."

      The whole problem of modern mathematics is exactly this. It is not organized in an efficient manner. Programmers are not algorithm writers. Programmers are organizers -- and this is very important to understand. If one of my programmers would produce code that is that badly documented, that badly organized as mathematicians -- I would fire him.

      And this is the main misunderstanding that TFA has. Writing algorithms is just a minor part of our job.

    3. Re:Magic incantations you say.. by cyber-vandal · · Score: 1

      And in the code review you get advised to use the best one for the job and get told the reason why. At least that's how it should work.

    4. Re:Magic incantations you say.. by bertok · · Score: 2, Interesting

      The difference is maybe that you actually have to know why and how those theorems work. Because else you could not use them. Not knowing why a certain mathematical rule is applicable means that you cannot apply it, not knowing whether its use would be "legal" from within the mathematical ruleset.

      This is not the case with library functions. All you have to know is what you want to accomplish, you drop that info into the help file, it spits out a function (most of the time not really the best one, but one that will more or less do the trick) and it will also tell you what you have to drop into that function to make the magic happen.

      Now, math has been a while ago for me, but I cannot remember it being THAT easy.

      Except that there's a little issue with that nice theoretical model: leaky abstractions.

      If you blindly use functions (actually methods) without an understanding of what they do internally, you will get burned.

      This is why crap code deadlocks. This is why crap code leaks memory. This is why crap code can't run on anything except a specific version of Windows with a specific version of IE.

  38. Re-use verses Plug'n'Play by bgibby9 · · Score: 1

    I think that when we started, we used libraries because we didn't know HOW to do certain things, but as we grew (hopefully) we learned how to do those things and found better more efficient ways to build them. Then we found out that libraries attempt to be generic enough for any purpose, then saw that life can rarely utilise generic libraries for 100% of our requirements so we built bloated software. Then we learned that certain concepts require "from scratch" work, even if it is "re-inventing the wheel" every now and then, to ultimately realise that sometimes you can re-use code and some times you can't! We all have to go through the hard yards as no-one will ever "just believe" you when you tell them otherwise :)

    --
    http://www.gibby.net.au
  39. Re:Idiot. Seriously. by Anonymous Coward · · Score: 0

    I think the difference is like that between mathematics and engineering. Programming used to be more of a math, you were basically writing an executable form of a proof. Now programming is more about assembling all the previously developed tools to produce a useful result in the same way that engineers use a bunch of mathematical tools (that they may not necessarily know how to derive--and for that matter don't need to) to build a bridge.

    Yes, and no. Your sense of history is warped. Academics have always known that programming is a form of constructive proof, and all that it entails. But the engineers ran with C's execution model in the 1970s. It has been a long struggle to get "high level" features in procedural languages, mostly because of the work of a few academics working on functional and OO languages. Later, Sun decided to do Java.

    If "early" programming is like writing proofs, "modern" programming ought to be like combining proofs. And it is, in principle. That's all well and good. This is especially easy if you have a language which allows easy combinations of proofs. OO can be the wrong model for combining your proofs. (Especially if you're not quantifying over object-like things...)

  40. The Issue by Seraphim_72 · · Score: 2, Insightful

    How many unique programming problems are there? The first guy that designs an efficient steam engine is a great engineer. What about the 100 guys after him that vary on his theme? What about the next 1000 or 10,000? Seems to me this is a complaint about no one inventing something as revolutionary as the wheel. Hey author - you can't, it has been done already! And as someone has already pointed out this is *not* from Knuth. This might as well get the 'Get off my lawn' argument then.

    --
    Slashdot, where armchair scientists get shouted down and armchair theologians get modded up.
    1. Re:The Issue by Trivial+Solutions · · Score: 0, Interesting

      In 1900, a guy in a patent office figured everything had been invented. I hate that attitude. My operating system, LoseThos, http://www.losethos.com/ has tons of new ideas. Things have changed since 1970's mainframe operating systems!

      --
      When God goes to war, He drops big bangs.
    2. Re:The Issue by Darinbob · · Score: 1

      The code I write mostly doesn't involve "frameworks" or extensive libraries. It's nice to have a library for networking or OS (if they both come with source), but for embedded systems quite a lot is built from scratch. There are libraries, but often they take up a lot of space and cpu.

    3. Re:The Issue by SpinyNorman · · Score: 1

      There's some truth to that - as time goes on tools become higher level, libraries more advanced, etc.

      However, we are far from the point where everything one might ask for has been written. Look for example at the current state of parallel programming; in the real world, programming in Java, C++ or C#, you're still going to find yourself using low level threading libraries (e.g. Unix pthreads) and synchronization primitives most of the time, because better tools for mainstream languages for the most part just don't exist (notwithstanding things like OpenMP, design patterns like map-reduce). Plenty of scope here for creating your own parallel frameworks, libraries, etc.

      Or how about something as simple and ubiquitous as XML... you could just use the standardized DOM/SAX API's and bemoan that you're having to use someone else's work rather than have the fun of designing it yourself, or you could realize that the productivity of these general-purpose APIs is dismal for any specific task and write your own higher level application libraries (e.g. I wrote one to convert arbitraty XML to/from C/C++ data structures).

      Or what about fun stuff like implementing languages... sure you're unlikely to find justification in creating a new language to write a whole project in, but what about scriptability, testing and configuration... there's plenty of scope for implementing your own mini embedded languages for this sort of thing. Sure you can use languages like Python and Lua for C++ embedding, but wouldn't it be more productive for C++ programmers to use a C-like language instead...

      I just used these three examples as they're things I've implemented myself in recent years, but there must be dozens of areas were customized tools are useful and appropriate.

      I remember back in the early 80's a piece of much-hyped application generator called "The Last One" causing alarmist headlines about "The end of programming?", but the fact is that we're really no closer to that now than we were back then. Sure there are certain rote type of programming jobs that can be accomplished with off the shelf tools and little creativity, but the ever-increasing power of computers is creating ever increasing opportunities, and somehow the tools just never catch up.

  41. Re:Idiot. Seriously. by dcollins · · Score: 4, Interesting

    "I think a better analogy would be to say that today's programmers are more like a Cargo Cult."

    Responses to the recent MS-random-browser thread ("the faulty shuffle is close enough", "this guy's being pedantic", "knowing algorithms is a bad use of company time") are pretty good evidence of that.

    http://developers.slashdot.org/article.pl?sid=10/02/28/1837223

    --
    We know where leadership by an anti-intellectual "strongman" who scapegoats minorities and likes boisterous rallies goes
  42. I don't like wizards that much by rebelscience · · Score: 0

    I like drag and drop better but I think the ultimate goal of programming research is to open up application development to as many people as possible. Why I Hate All Computer Programming Languages.

    1. Re:I don't like wizards that much by NoOneInParticular · · Score: 1

      Sure, and I would like to be an architect, but can't be bothered with learning the trade. I want to plug together buildings dammit!

  43. Increase in number of runs per second by tepples · · Score: 4, Insightful

    Machines today are fast. Much, much faster than what we need for programs to run.

    Until you get slashdotted. Having a sharp increase in number of runs per second can show just how fast your program isn't. And look at all the fail-whales soon after Twitter caught on.

    Memory amounts today mean that it is pointless to ponder whether you really need double linked lists or whether you get by with single linked ones. Or that you use variables smaller than DWords to store integers.

    Until you try to shave pennies from a mass-manufactured part.

    1. Re:Increase in number of runs per second by tfrayner · · Score: 2, Insightful

      And yet, Twitter is still around and still relevant. Which shows that one can get away with taking these short-cuts and still achieve the ultimate aim of your project. I see people getting bogged down in the details of which software architecture/model to use all the time (never mind sort algorithms!), so much so that they lose sight of their objectives. What often happens is that someone (usually me) then does a quick end-run around them in <insert scripting language here> and we eventually move on. People wonder about the prevalence of dodgy scripts in the world today; I say this habit of programmers taking their eye off the ball is one of the reasons. Never underestimate the advantage of being first to market.

      --
      The best newspaper in the USA: the Anderson Valley Advertiser.
    2. Re:Increase in number of runs per second by bertok · · Score: 1

      Machines today are fast. Much, much faster than what we need for programs to run.

      Until you get slashdotted. Having a sharp increase in number of runs per second can show just how fast your program isn't. And look at all the fail-whales soon after Twitter caught on.

      Memory amounts today mean that it is pointless to ponder whether you really need double linked lists or whether you get by with single linked ones. Or that you use variables smaller than DWords to store integers.

      Until you try to shave pennies from a mass-manufactured part.

      +1 for parent.

      Actually, what bugs me is not the throughput, but the latency. As the GP said, hardware is faster, and you can always throw more hardware at almost any problem, but the performance for most systems only improves for aggregate metrics like "requests per second". The speed of an individual request is often still quite slow.

      I'm thinking of those beastly J2EE apps that require 3 tiers of hardware, dozens of servers, and yet still takes 5 seconds to respond to a mouse click!

      Meanwhile, in the exact same Java language, using the exact same backend database system, on the same hardware platform, it's easy to write an app that responds in a few tens of milliseconds. All it takes is a bit of in-depth knowledge that seems to be lacking these days.

    3. Re:Increase in number of runs per second by cheesybagel · · Score: 1

      The problem is when it is a customer requirement (seriously!) to write it using J2EE and EJBs. Nevermind the thing could have been written more easily as a Servlet with less layers of software thickness in it.

    4. Re:Increase in number of runs per second by byteherder · · Score: 1

      I see people getting bogged down in the details of which software architecture/model to use all the time (never mind sort algorithms!), so much so that they lose sight of their objectives. What often happens is that someone (usually me) then does a quick end-run around them in and we eventually move on.

      I have seen this quick end-run before. But what happens when your page hits doubles, and suddenly your script fails to scale. No amount of tweaking will fix a bad architecture. Then you call in someone like me to build you a real system. One that is scalable, reliable, secure and fast. First to market only works if you can sustain your advantage.

  44. ! Car analogy by oddaddresstrap · · Score: 1

    Nice try, but, at best, a "vehicle" analogy. To be more precise, a truck analogy.

  45. Lack of imagination? That's your problem! by Hurricane78 · · Score: 0, Troll

    He seems to bitch about not being able to write something fundamentally new... but ignores that you have to think of actually inventing something new beforehand. Maybe he is more of an engineer, and less of an inventor/scientist. (Two types that complement and need each other.)

    I don't do much library gluing, since I chose to concentrate on inventing new things. Revolutionary things.
    It’s just a choice. Nothing is stopping him from doing the same.
    But I don’t even consider the gluing bad. Actually it only shows how far we have come, when we have nearly perfect standard libraries for everything and its dog. Generalizing algorithms and making things reusable are corner stones of programming. And they are great ones!

    If you want to code something new, you need to come up with something revolutionary.

    So: Mr Knuth: How about we team up: I deliver new ideas that nobody came up with yet, and you get something to code that nobody ever coded before. How about that? I bet we would make a great team! ^^

    --
    Any sufficiently advanced intelligence is indistinguishable from stupidity.
  46. Specialization is for Ants by DeionXxX · · Score: 2, Insightful

    As a Presentation Layer guy I can tell you that I’m seeing a shift of the types of successful developers out there in the field. Those developers that can bounce around between different API’s and syntaxes are the ones that are in demand and those developers that know one technology or platform well aren’t.

    I personally think it’s because of the fragmented nature of our target platforms. Programming for one platform is a luxury most programmers don’t have nowadays. This is why frameworks came to be and are used so heavily. Just abstracting the differences between platforms is enough for most developers to ditch “hand coding” and deal with the integration issues. Look at the popularity of Javascript frameworks like jQuery. Nobody coded in the way jQuery works before jQuery (the whole chaining thing, and anonymous functions), yet now more than 50% of websites (made up number) use jQuery.

    To become a successful developer in the next decade, you must be a generalist. It’s a completely different way of thinking. You have to actively try NOT to learn too much of one platform for fear that it’ll bias you against all the other languages you’ll have to work in. For example, coming from more structured languages, seeing the jQuery chaining and use of anonymous functions would turn off most developers and they’d shy away from using it. However, it’s the best tool for the job currently, and not using it based on it’s weird syntax would be a mistake. Same thing applies to MXML, WPF, LINQ, C#’s var, etc and all sorts of new improvements to languages that people don’t use because they’re “different” and give you “less control”.

    1. Re:Specialization is for Ants by CopaceticOpus · · Score: 1

      That's how it should be, but that's not what I'm finding in the job market. I am currently a job seeker with ten years of web coding experience and the ability to "bounce around between different API's and syntaxes" as you said. However, I only have one year of experience with popular language X.

      When I apply for a job using popular language X, I am told that I lack experience. I am told only my experience in X is counted for anything. Anyone with coding experience knows how insane that is, but it's the current reality.

    2. Re:Specialization is for Ants by Tablizer · · Score: 1

      You have to learn how to lie well. Job ads often read like, "Ten years of pure experience using ONLY A, B, C and D." If you take them literally, then nobody will fit them due to the shear combination impossibility.

    3. Re:Specialization is for Ants by tsotha · · Score: 1

      That's a side effect of web programming. I worked for about five years on a pure java application. The only other language I used in all that time was a little bit of xml to set up the ant build. The end users loved it and it was easy to maintain.

      My current project is a web application, and I have to know three or four different languages to get anything to work (depending on what you consider a language). There's no hope for any kind of end-to-end debugging or performance analysis. There are a lot more places for things to go wrong than the pure java environment and the final product isn't as smooth.

      It all seems like a big step backward to me. But what the hell. They pay me by the hour.

  47. I couldn't agree more by Fnord666 · · Score: 1

    We should take this revised approach in a number of areas, not just programming. We shouldn't be just grabbing bolts and nuts out of a bin. We should be hand machining each one that way you know they will work correctly and that they will go together. You can't trust that any old bolt you might buy will necessarily work. If this approach was good enough for the 19th century, it should be good enough for the 21st.

    --
    'The tyrant will always find pretext for his tyranny.' - Aesop's Fables
    1. Re:I couldn't agree more by benjamindees · · Score: 2, Insightful

      But, you realize, that's entirely true. Here's a vaulted car analogy:

      American cars were historically bolted together, or welded together from standard parts supplied by thousands of different suppliers. If you wanted to, you can take an old American truck, completely disassemble it, replace almost any piece and re-build it from the ground up. That business model worked when the design costs of a car were vastly greater than the manufacturing costs. By using standard parts, those costs were spread out over many years and many models. Each part was not optimized to each car, but it was cheaper to manufacture and maintain regardless. American car manufacturers stuck with this, due to several factors, even in the face of superior competitors with vastly different processes. We all know how that turned out.

      Today, almost every piece of a car is custom-designed, not shared with other models. Robots weld auto bodies into a single piece. People spend more time working in the design phase, not as much in the manufacturing. Trimming excess materials from the design is nearly a science. The cost of repairing or rebuilding a car is prohibitive compared to the cost of simply buying a new one. American car companies that failed to adapt, along with their parts suppliers, are going bankrupt.

      Now, is one model superior to the other? No. They each have strengths and weaknesses. Asian workers were not necessarily better-off than American workers, despite their technological advantages. Asian automotive companies evolved in an environment rich in talented labor and poor in natural resources. They used design and lots of mental "work" to conserve natural resources. American automotive companies evolved in the opposite environment, poor in skilled labor and rich in unskilled labor and natural resources. They used natural resources and unskilled labor to make up for lack of skilled design work.

      Ideally we would all be best off if we lived in an environment rich in natural resources and talented labor, while still conserving both. Technology, correctly applied, can help us achieve this. But only if the advances of technology are not negated by the proliferation of unskilled labor or wasteful resource consumption.

      --
      "I assumed blithely that there were no elves out there in the darkness"
    2. Re:I couldn't agree more by Cwix · · Score: 1

      "The cost of repairing or rebuilding a car is prohibitive compared to the cost of simply buying a new one." Huh? I can have an engine rebuilt and reinstalled in about a week for maybe 2 thousand, I could buy a new car for what somewhere around 30 thousand? I don't know where you come from where its cheaper for you to buy a new one, but you let me know. The only thing I can assume you mean it to rebuild the car entirely, and the thing id have to ask you is why? The only time ive ever even heard of that is some places like Chilton will do it for their after-market repair manuals.

      --
      You are entitled to your own opinions, not your own facts.
    3. Re:I couldn't agree more by benjamindees · · Score: 1

      Hmm, yes. I didn't really mean buying a "new" car. I meant a newer, used one. Another result of improved design processes is that nowadays all the parts on your car tend to fail at around the same time. So, unless your car is relatively new (ie under warranty), making major repairs has become more of a losing proposition.

      --
      "I assumed blithely that there were no elves out there in the darkness"
    4. Re:I couldn't agree more by drsmithy · · Score: 1

      Today, almost every piece of a car is custom-designed, not shared with other models.

      Huh ? Component reuse in vehicles is massive, especially in today's world where only a handful of parent companies control the dozens of different vehicle brands. Everything from the basic chassis, through drivetrains, to switches and trim, is extensively reused across multiple vehicles, often when they're even from different "manufacturers".

      For example, look at how many other vehicles are built off the same platform as the Volkswagen Golf: http://en.wikipedia.org/wiki/Volkswagen_Group_A_platform#A5_.28PQ35.29.

      I don't know where you picked up the idea that modern cars are all once-offs, but it's completely wrong. There's no way vehicles could be as cheap as they are today if that were true.

    5. Re:I couldn't agree more by Cwix · · Score: 1
      Alright, newer used car is going to be 5 to 6 thousand, for decent condition and mileage. Thats still not cheaper then a 2 thousand dollar engine. You used a poor analogy. My 12 year old ford explorer is STILL worth more then a motor alone. Therefore, if you car isn't around ten years old or so, it probably will be cheaper to repair it. This includes foreign and domestic models.

      "So, unless your car is relatively new (ie under warranty), making major repairs has become more of a losing proposition."

      Not so at all, have you followed the suggested maintenance cycle? oil changes, transmission flushes, coolant flushes, etc. IF everything is maintained the way it was intended to, then you vehicle can last upwards of half a million miles. If you cheap out on your maintenance, even missing the oil change for a could thousand miles, can put significant wear on your vehicle. In that situation you have no one to blame but the owner, not the manufacturer. Heres a little empirical evidence. http://www2.highlandstoday.com/content/2010/jan/07/la-but-maybe-your-clunker-can-get-500000-miles/

      --
      You are entitled to your own opinions, not your own facts.
  48. Re:Isn't he the guy who defends using goto stateme by Opportunist · · Score: 1

    I use gotos you insensitive clod!

    I just call them JMPs.

    --
    We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
  49. Knuth is just procrastinating by Anonymous Coward · · Score: 0

    Knuth should stop whining about the state of programming and going finish writing his books with his fonts and his text formatting system written in his language making use of his assemble language.

  50. knuth is right... and wrong? by Eil · · Score: 1

    So I had this long diatribe all written and ready to post. It was about how it's terrible that web applications really suck to develop because there are a minimum of 5 different technologies that you have to know just to get off the ground and that every "innovation" has been a kludge on top of other kludges meant to twist a static content delivery platform into an interactive applications platform. But I scrapped it since that's a dead horse and I'm just some random jerk anyway.

    Then I actually RTFA and decided I'd rather respond to Knuth's quoted sentiment:

    "The problem is that coding isn't fun if all you can do is call things out of a library, if you can't write the library yourself. If the job of coding is just to be finding the right combination of parameters, that does fairly obvious things, then who'd want to go into that as a career?" (page 581)

    Well, I wouldn't want to go into it as a career, but programming is a hobby of mine. I like to make applications, but I have neither the patience nor time to design even a trivial application that doesn't blatantly steal 90% of its code from other (open source) sources. The only way I know how to program is basically what Knuth said: I paste other people's frameworks, libraries, classes, and functions together into an application of my own. I don't want to spend months refining logic and algorithms. Although I do take the time to research The Right Way to do something, I don't particularly care if my code is elegant, I just want it to work and then get to the business of actually using the application.

    And what's wrong with that, anyway? Isn't the point of modern programming paradigms to reuse whatever existing components you can, to save yourself time and headaches from re-inventing the wheel? If I need AES-256, there's no way in hell I'm writing it myself when there are dozens of existing implementations out there for nearly every language by people who are much smarter than me, and which are packaged up into nice little bundles that I can wget into my source tree and use right away. How is that anything but a good thing?

    1. Re:knuth is right... and wrong? by Anonymous Coward · · Score: 0

      If I need AES-256, there's no way in hell I'm writing it myself when there are dozens of existing implementations out there for nearly every language by people who are much smarter than me, and which are packaged up into nice little bundles that I can wget into my source tree and use right away. How is that anything but a good thing?

      Those people all work for the NSA.

  51. As a writer of crappy code.. by RulerOf · · Score: 1, Flamebait

    Crappy code is all around.

    Crappy code exists because it works. It matters not how elegant a solution is; it matters that such is, in fact, a solution.

    Disclaimer: I'm a sysadmin, not a programmer.

    --
    Boot Windows, Linux, and ESX over the network for free.
    1. Re:As a writer of crappy code.. by MrBigInThePants · · Score: 0, Flamebait

      Actually this is very close to one of my personal beliefs on it.

      Code that already exists and works has a very strong argument. In fact it is a very hard one to argue against when your code does not exist and is not currently working.

      My main point here is that I have seen WAAAAAAAAAYYYYY too many arrogant programmers talking from their bum about how much better THEIR code would be if only THEY had a chance to rewrite it.
      Of course they would not be paying for the rewrite, have no analysed the cost/benefit of it or in fact proved that they are up to the task. And all too many are not - they are simply underestimating the effort and complexity in their little personal fantasy.

    2. Re:As a writer of crappy code.. by RulerOf · · Score: 1

      The point isn't about the reliability of code. If code fails certain situations that can't be guaranteed not to occur, and such failure is not acceptable, then the code isn't necessarily crappy, but the solution or application is.

      If, however, you have really shitty code (and I know, I've written some) that never fails in the situations you throw at it... you get the idea.

      Code crashing cars is the failure of the implemented solution. The code that crashes the car, however, could in theory be quite elegant.

      --
      Boot Windows, Linux, and ESX over the network for free.
    3. Re:As a writer of crappy code.. by TheLink · · Score: 4, Insightful

      As another writer of crappy code:

      The advantage of using libraries is it means you write less code.

      The less code you write, the fewer bugs you create, and less code you are directly responsible for fixing and documenting.

      Yes the libraries won't be perfect, but in general they should be less crap than your code (especially if used and fixed by many others).

      People who like "writing everything" themselves should use stuff like Lisp- programming languages that are powerful because they allow a programmer to personally write all sorts of stuff.

      The rest of us should use languages that are powerful because they allow the programmer to NOT have to personally write all sorts of stuff :).

      The "real programmers" can sneer at us, but we'll have completed the project way before they have finished writing the BIOS, bootloader, operating system, libraries and editor so that they can actually start writing the "real program"...

      --
    4. Re:As a writer of crappy code.. by Dhalka226 · · Score: 4, Insightful

      They're probably right; it probably would be better if they re-wrote it.

      It's not because of what badasses they are or what terrible programmers their predecessors were, contrary to what most people believe in their heads. It's because it's easy to see what a program is supposed to do once it's done.

      The reality is hardly any software is finished as the exact same project it started as. Requirements get changed at the worst possible times, the scope redefined, the timelines shortened. And yeah, at that point getting a working product out is the most important thing. Rewriting it probably WOULD result in better code, which may or may not be justification enough for doing it.

      And hey, there's also a good chance those same things happen to them on their rewrite. Oops.

    5. Re:As a writer of crappy code.. by paeanblack · · Score: 3, Insightful

      My main point here is that I have seen WAAAAAAAAAYYYYY too many arrogant programmers talking from their bum about how much better THEIR code would be if only THEY had a chance to rewrite it.

      The same is true for everyone from novelists to plumbers to aircraft designers. The second time through generally yields a better result; it's just frequently not an option. This doesn't make anyone arrogant, it's just life.

    6. Re:As a writer of crappy code.. by TangoMargarine · · Score: 2, Insightful

      Crappy code is code that people other than the original developer(s) can't maintain. Some degree of elegance is implied therein.

      --
      Unity? Screw that: XFCE. Slashdot Beta? Screw that: SoylentNews. Australis? Screw that: Pale Moon. UX developers DIAF
    7. Re:As a writer of crappy code.. by neumayr · · Score: 2, Insightful

      The arrogance stems from the emphasize on THEIR code, which THEY are rewriting.
      Yes, people learn from other people's experiences. But some seem to think it's only them that do..

      --
      Truth arises more readily from error than from confusion. -Francis Bacon
    8. Re:As a writer of crappy code.. by ThePhilips · · Score: 5, Insightful

      The "real programmers" can sneer at us, [...]

      That's not about it.

      As long as you understand what you write, it's fine.

      The problem is with the newer generation of Java/C# who: can't write their own algorithms thus inevitably depend on libraries, manage to have problems integrating the libraries together and (worst) do not understand how/why the stuff works.

      the BIOS, bootloader, operating system, libraries and editor

      That's a misconception about the "real programmers".

      The difference between the "new programmers" and the "real programmers" is that later were still taught math and computer architecture - former were taught only syntax of a sandboxed programming language. Later know why/how software/hardware works at least in general, former have to rely on book which tell them that it would works.

      Those who are actually try to reinvent "the BIOS, bootloader, operating system, libraries and editor" are not "real programmers": those are last remaining artifacts of the DOS times, the times when it all fit 64K.

      --
      All hope abandon ye who enter here.
    9. Re:As a writer of crappy code.. by fuliginous · · Score: 2, Insightful

      The code base I work on would be improved by a rewrite. But in doing so it would actually be a matter of putting more effort into using the libraries (they do too much manual string manipulation for example that could be done using existing library calls; it's Qt based stuff).

      At the same time it would cut lines of application code and make seeing the algorithm easier. I've just swapped 2500 lines for 850 lines whilst increasing functionality.

      Cost benefit wise it's impossible to say in advance was it worth it.

    10. Re:As a writer of crappy code.. by fuliginous · · Score: 4, Interesting

      I agree from a different view that goes like this. Good programmers/software engineers are expensive so companies like to pay cheaper people. To enable use of cheaper people tools and processes are introduced.

      One such tool is languages that have buckets of libraries or core tools that the new people merely have to extend or tweak.

      Knuth is lucky that most things he needed didn't exist then so using libraries wasn't an option. If everything he needed already existed he'd have picked a different area to work in.

    11. Re:As a writer of crappy code.. by fuliginous · · Score: 3, Insightful

      You presume that a month or twenty down the line the original author can still maintain it. Most crappy code that doesn't holds as true.

    12. Re:As a writer of crappy code.. by Anonymous Coward · · Score: 2, Interesting

      The thing is, most people want to rewrite the code because it is too hard to understand. In which case they probably don't understand it when they do the rewrite and end up making at least as bad mistakes as the original authors.
      _If_ they fully understood it, in most cases it wouldn't be so hard to just attack the most problematic parts and improve them - for example in quickly written code there is often a lot of cruft where only a few lines can be changed to make the code simple, smaller and overall better while being almost certain that it still does _exactly_ the same thing (if necessary under a few assumptions documented with asserts).
      Admittedly this might end up with everything being rewritten, but with an understanding of the old code and the new code, with change control, and a way to do regression testing where you can say: the bug is in these at most 100 lines of code, which reduces greatly the debugging costs of the rewrite.

    13. Re:As a writer of crappy code.. by MrBigInThePants · · Score: 0, Flamebait

      Or perhaps it would be just a different kind of crap?

      Or perhaps the crap would creep in once they realize that they failed to reproduce many of the artifacts (aka bus. req. ) that the old code had.

      Or perhaps they really are not that great and it is VERY easy to poke sticks at other people's work when you don't have to ante up yourself.
      This is a big one TBH. Many programmers are very arrogant with their own abilities I have found.

      And I speak from someone who just finished a 1 year massive refactor on a million line codebase that WAS worth it and DID save the project in its entirety. (but the code was BROKEN when I got it, not crappy)

    14. Re:As a writer of crappy code.. by MrBigInThePants · · Score: 1

      Its not their second time through. It would be their first in my example.

      Someone else who had their head in the problem space has made a working, if crappy, piece of code.

      Please remember that I am describing the typical "programmer's sneer" that you get all too often from the average programmer when glossing over a project or someone else's work.
      The problem is when they ARE an average programmer!

      And to be sure: I am not talking from a self defensive position. I have had to defend other people's code bases from this more than mine. And even had to remind myself of this rule from time to time!

    15. Re:As a writer of crappy code.. by TapeCutter · · Score: 0, Troll

      "Or perhaps it would be just a different kind of crap?"

      Yep. Source code is like shit, you can't smell your own but if it comes out of someone else then it stinks.

      --
      And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
    16. Re:As a writer of crappy code.. by PhrstBrn · · Score: 3, Interesting

      I'd mod you up if I had points.

      Most of the code I call "crappy code" is stuff I'm asked to look at because somebody found a reproducible defect, I look at the code, blink twice, and wonder how we haven't had a "oops, all of our data is gone" scenario yet. Fortunately I keep daily backups around...

      And, of course, when I ask the original developer to "fix it", they can't seem to figure it out, even when giving step-by-step instructions how to reproduce the defect, over, and over, and over, and over.

      I've looked at some of these CGI apps "web developers" put out, and I wonder if they have any brain cells between their two ears. Just using some sort of MVC architecture would be a good start to fixing 99% of the problems I see with shitty web code, and at least keep things somewhat more organized (if only just slightly)

    17. Re:As a writer of crappy code.. by vadim_t · · Score: 3, Insightful

      In programming the best version is generally the third.

      The first is the "I don't know what I'm doing" version, which gets written by trying without much thought, ugly hacks, and without a decent design. Sometimes it does work quite well however, as despite not being very pretty it does what it's supposed to.

      The second is "V1 is crap, but now that I have figured it all out I can do better!". Often a horrible mess, due to things like wanting to make everything modular, adding every feature possible, and using the latest cool tech and design patterns where they don't belong. Turns out to be slow, huge, buggy and overly complicated to use. There's even a name for this: "second system effect".

      Based on the lessons learned from the lack of planning in the first and the excesses of the second, the third version has a good chance of being actually decent.

    18. Re:As a writer of crappy code.. by Anonymous Coward · · Score: 0

      Bullshit.

      The "new programmers" are still being taught math and computer architecture in most places. They just don't care.

      They want cash so they will do as little as needed to get it. When doing a SE or CS degree meant you would have to be a bearded professor with no hopes of ever reproducing(or a bearded homeless with the same chances of reproducing but a cult built around you), most people went there for the sake of knowledge.

      Being able to paste Java libraries together and "borrowing" code from StackOverflow makes you cash. Advanced knowledge only feeds a privileged few. Others with similar abilities, either do stupid Java, or worse, programming, or get a different job and contribute to Open Source.

    19. Re:As a writer of crappy code.. by GarryFre · · Score: 1

      Crappy planning produces crappy code.

      --
      www.Migrainesoft.com - Computer giving you a headache? We can fix that!
    20. Re:As a writer of crappy code.. by TheLink · · Score: 1

      > The problem is with the newer generation of Java/C# who: can't write their own algorithms thus inevitably depend on libraries

      The "whiz-bang" algorithms are all in the libraries already. So why reinvent the wheel? And if they aren't, it's not usually your job to put them in.

      Furthermore most of the programming work in the real world rarely requires programmers to write new "classical style"[1] algorithms (e.g. fastest, memory efficient etc).

      [1] In theory all programs involve algorithms even if written by noobs, but I doubt that's the meaning of algorithm you wanted when you said "can't write their own algorithms".

      There's not much point figuring out the theoretical best possible algorithm to use for Client A's business requirements. Especially when Client A changes the requirements every week.

      Or say you're writing a RADIUS or DNS server, is there really going to be an algorithm for that, the way you have "quicksort" for sorting? Most of that "classic" algorithm stuff will be in the libraries and OS you use. Whereas what you as a programmer do mainly is figure out stuff like RFC compliance (many times RFCs are ambiguous - so stuff can be compliant and in the real world still not work well or at all, and sometimes compliance to one part is stupid, so you might want to make "stupid" optional), workarounds for noncompliant clients/servers, exception handling, how to avoid being exploited by hackers, what to do if there's a DoS, data structures, what to do for logging, how configuration should best be done (including stuff like whether to allow updating the configuration and still not drop any sessions, and how to do it), scalability.

      Yes is so sad that many of us use "prefab" for building stuff.

      Because:
      a) we're not good at making our own bricks, doors, tiles, nails, etc.
      b) we think it's a waste of time to do so when people are already making entire prefabricated components that we can use, and the Customer/Boss wants the thing done yesterday (despite not being able to describe exactly what it is they want - and if they could they wouldn't need programmers ;) ).

      --
    21. Re:As a writer of crappy code.. by Will.Woodhull · · Score: 1

      Crappy code is all around.

      Crappy code exists because it works. It matters not how elegant a solution is; it matters that such is, in fact, a solution.

      Code is like government: it doesn't have to be good; it only has to be good enough.

      Good enough to appear to be usable. Good enough that the benefits of its use look like they will outweigh the costs of dealing with its bugs. For way too many people involved in marketing software, it only has to be good enough to look better than any competitor products, and even then only that good for long enough for the customer to begin to rely on it.

      So, no, I disagree with the second quote: crappy code doesn't even have to work. It only has to look like it is working for long enough that the customer cannot afford to replace it.

      Coding and software development in general needs a level of professionalism at least as great as civil engineering, medicine and surgery, and architecture. The current model is much too academic to instill the kind of internalised professional behavior that society needs. It is only through that kind of individual professional standards, with support of a fully developed professional community, that marketing and other external forces that work to degrade coding quality can be held at bay. </rant>

      --
      Will
    22. Re:As a writer of crappy code.. by joss · · Score: 1

      I'll bet your reputation against mine, or money if you prefer, that nothing actually useful will ever come of that COSA project you keep peddling whenever you get the chance.

      --
      http://rareformnewmedia.com/
    23. Re:As a writer of crappy code.. by mjwalshe · · Score: 1

      well as a "real" programmer I tried to use fortran libarys from the NAG where ever possible and using GINOF rater than writing my own plotting software was pure heaven (ok i did have to fix teh driver when we wanted to plot at > A0 size.

    24. Re:As a writer of crappy code.. by Skreems · · Score: 1

      It matters not how elegant a solution is; it matters that such is, in fact, a solution.

      Until you have to add on to it. Then it matters a whole hell of a lot how elegant it is.

      --
      Slashdot needs a "-1, Wrong" moderation option.
      The Urban Hippie
    25. Re:As a writer of crappy code.. by neural.disruption · · Score: 1

      People who like "writing everything" themselves should use stuff like Lisp- programming languages that are powerful because they allow a programmer to personally write all sorts of stuff.

      Can you name anything that can be made in Lisp or other functional language that cannot be done more in depth in C/C++ or any other mid/low level imperative language?

      Functional Languages are considered High Level for a reason.

      The rest of us should use languages that are powerful because they allow the programmer to NOT have to personally write all sorts of stuff :).

      Like what? Python, Ruby, Perl? Sometimes its really good to know how things work inside the language even if you're not going to use them.

      I know how to construct most data structures by hand in a variety of languages, but I rarely do so in a real program, why? Because Java implements them well enough, and C++ has the STL to help me, but it helps to know what they are and how they work in order to know what should I use to solve a particular problem.

    26. Re:As a writer of crappy code.. by Jaime2 · · Score: 1

      Unfortunately it isn't that easy. There was an article here a few days ago where someone tried to shuffle an array by passing a random comparer to Array.Sort(Comparer c). It didn't do what they wanted. A "real programmer" would have identified this as an off-label use of sorting and would instantly recognize the potential pitfalls. A "library user" could fall into this trap easily. Every day for a programmer is full of moments where using the wrong library call may introduce bugs. Real programmers are also pretty good at eyeballing what parts of a program are likely to be performance bottlenecks and designing the program so any one of several standard solution patterns can be applied later if necessary. These "real programmer" techniques sometimes slightly increase the amount of code written, but rarely turn into library rewrites, and almost always make fixing and altering the program more pleasant.

    27. Re:As a writer of crappy code.. by defaria · · Score: 1

      ^^^^^^^ What a crappy, louse of a programmer would write... You're more worried about covering your ass then doing a professional job. We have a name for your type - we call you the junior programmers and make sure you don't make the big $$$ which is reserved for people who are 1) professional, 2) know what they are doing and 3) not afraid of being responsible for things because - see #1 and #2!

    28. Re:As a writer of crappy code.. by Gr8Apes · · Score: 1

      They're probably right; it probably would be better if they re-wrote it.

      In general, no.

      I've refactored/rewritten more than one large codebase, and in each case the purpose wasn't just to rewrite it, but the addition of new requirements and/or the high cost of maintenance were targets with a single exception.

      I shouldn't even admit this, but I once received a 100+K line FORTRAN program that seemed to work but had unexplained small variances in some results. After going through the code, it turned out that the 100+ common blocks used had non-unique variables in them, and thus, you were never sure what variable was in use in a specific function due to the sequence of linkages that changed due to compilation order. (it was a living codebase that was modified as needed) I rewrote it in a less than 25K program and removed most of the common blocks and added full 3D analysis into what was an original 2D program. The rewrite took about 3 months. The original analysis of what went wrong took about 3 months.

      Fixing the original code and adding the additional functionality would have taken far longer and been almost impossible to test, due to the way the codebase was originally developed.

      My current project is refactoring a rather large codebase by removing an entire set of "bad" code and all of their associated dependencies from the core functionality that I actually want. In the process, I'm also removing hibernate and spring, replacing those with a custom JPA solution. So far the result is a codebase that retains all the "real" functionality that compiles and runs in less than 1/10th the time of the original and has an entire set of known problems removed.

      Like everyone else, I've also knowingly written what I consider to be "bad code" because of timelines and purpose.

      --
      The cesspool just got a check and balance.
    29. Re:As a writer of crappy code.. by TheLink · · Score: 1

      > Every day for a programmer is full of moments where using the wrong library call may introduce bugs.

      True, which brings us to the next advantage of using standard (or defacto standard) libraries. An experienced programmer who has taken over the code can more easily know whether the library is being used in the wrong way or not.

      As you mentioned, people could near-instantly go "shouldn't be using Array.Sort that way". Whereas if it's a custom array sort, people would have to read more lines of code.

      When you write most of your own libraries, someone else taking over the maintenance/development has to figure out whether the bugs are in your library or not (stuff may be called something similar as to the standard lib but you could have done something different from the standard library - otherwise why would you be writing your own right?).

      Lastly, you often can't avoid library calls - you have to do use them to interact with the O/S or GUI or whatever. Unfortunately sometimes the documentation is ambiguous, not clear, or even plain wrong. But still documentation is more often nonexistent for "The Previous Coder in the Company" libraries/code ( not necessarily the coder's fault - just an emergent effect in many companies ).

      --
    30. Re:As a writer of crappy code.. by Gr8Apes · · Score: 1

      The less code you write, the fewer bugs you create, and less code you are directly responsible for fixing and documenting.

      Yes the libraries won't be perfect, but in general they should be less crap than your code (especially if used and fixed by many others).

      You should know your libraries. There are certain libraries out there that have significant flaws.

      --
      The cesspool just got a check and balance.
    31. Re:As a writer of crappy code.. by TheLink · · Score: 1

      > Can you name anything that can be made in Lisp or other functional language that cannot be done more in depth in C/C++ or any other mid/low level imperative language?

      In theory there's nothing you can't do in Lisp or other language that you can't do in any other imperative language. After all you can write a Lisp interpreter/compiler in the imperative language...

      In fact I have a nagging suspicion that some Java programs are actually Lisp interpreters in disguise and the Lisp program just happens to be the XML configuration file (go look at some of those XML config files, and compare the structure/syntax with Lisp ;) ).

      In practice, lots of things require fewer lines of code when written in a higher level language - and the assumption was you are not using other people's libraries/code. So if you want to rewrite most stuff from scratch, it seems better to pick an expressive language (fewer lines of code) that at the same time doesn't totally suck in performance when compared to C. There are a fair number of candidates, not just Lisp. The Computer Science bunch can probably provide a comprehensive list.

      And yes it can still be done in C - Linus, GNU et all have proven it :).

      > Like what? Python, Ruby, Perl? Sometimes its really good to know how things work inside the language even if you're not going to use them.

      Anything with lots of decent prefab that you can use for your work, especially standard or defacto standard. Shoddy prefab should be avoided.

      So that could be Perl, Python, Ruby, Java, even .Net. Right tools for the job and all that.

      Whereas the other scenario was more of the best way of making your own tools and buildings starting from the molecule/atom level.

      --
    32. Re:As a writer of crappy code.. by Draek · · Score: 1

      Err, no, not really. Rewriting simple code is easy, so it's usually done *while* writing the program, there's no need to wait until you're done to do it.

      The really problematic part is changing the entire design which is why it's seldom done and, therefore, what always gets "patched" instead of remade when requirements change and deadlines tighten, making it where most of the "cruft" lies. And to properly redesign a program you *have* to do it from the ground up, trying to avoid that invariably leads to nothing but another patch thrown on top of the old ones, with all the problems that entails.

      --
      No problem is insoluble in all conceivable circumstances.
    33. Re:As a writer of crappy code.. by Jaime2 · · Score: 1

      Just to be clear, I wasn't advocating rewriting library code to understand it better. I was simply suggesting that being a real programmer is always important, library or not. Code monkeys will produce bad results no matter how rich and well-debugged their library is.

      Another point, you seem to think that I would know not to abuse Array.Sort because I know its implementation. On the contrary, I don't abuse any sort method precisely because I don't know its implementation, but I do know that the implementer only gauranteed me that it would properly sort. I also know that shuffling is a distict problem from sorting and there are known problems that arise from treating shuffling as random (at least inconsistently random) sorting, including crashing the library code. This would be true of a well-known sort method in a popular library, and also of idiot-Bob-down-the-hall's sort routine.

      It turns out that you need a lot of CS knowledge to code, even with a large library.

    34. Re:As a writer of crappy code.. by Draek · · Score: 0, Flamebait

      To be fair, many of the older C/C++ generation can't write their own algorithms either, for them the idea of an algorithm is "trick to make the computer do something faster" (bitwise operators and pointer arithmetic are a perennial favorite) rather than "redesign of the solution to reduce the work needed". They make a faster and more efficient Bubble Sort instead of just replacing it with a Quick Sort, to put it some way. And the older FORTRAN/COBOL guys are even worse in that respect.

      If anything, Java and C# encourage programmers to learn proper algorithms by letting them focus on the core ideas and grand design rather than crude, line-by-line optimizations. Of course, Python, Ruby and Lua are even better, and pseudo-code with a human corrector is the ideal for that, but I take what I can get.

      So yeah, I think all these elitism is just a big pile of horseshit. Sturgeon's Law applies to everything and everyone, of this generation and otherwise.

      --
      No problem is insoluble in all conceivable circumstances.
    35. Re:As a writer of crappy code.. by Curunir_wolf · · Score: 1

      "Or perhaps it would be just a different kind of crap?" Yep. Source code is like shit, you can't smell your own but if it comes out of someone else then it stinks.

      The only reason you think this is because you've never had to go back and do some major modifications to you own code from three or five years ago.

      If you really think your own shit doesn't stink, you've done a piss-poor job of learning from your mistakes. I pity the programmers that have had to maintain the code you left them.

      --
      "Somebody has to do something. It's just incredibly pathetic it has to be us."
      --- Jerry Garcia
    36. Re:As a writer of crappy code.. by 7+digits · · Score: 1

      You don't know anything about the second system syndrome, do you ?

    37. Re:As a writer of crappy code.. by darthdavid · · Score: 1

      Yes, but when code fails 99% of the time the worst thing that's going to happen is a loss of money. Not good, but quite a bit less disastrous then when a doctor or civil engineer screws the pooch...

    38. Re:As a writer of crappy code.. by mrrudge · · Score: 1

      Please don't judge all 'web developers' at the standard of the worst code you have access to, it's rude to those of us who were more 'classically' trained and know what we're doing. I'm quite sure I could find some incredibly bad examples in your language(s) of choice.

    39. Re:As a writer of crappy code.. by OrangeCatholic · · Score: 1

      I went to college in the C++ era...

      I went back to college in the Java cut-and-paste era...

      I have nothing against Java. I think it writes reliable, portable code...

      But the idea that we were going to *learn something* from Java...lol...

      I felt like I was back in first grade.

    40. Re:As a writer of crappy code.. by MrBigInThePants · · Score: 1

      What is very telling here is the flame bait and troll moderation going on here.

      This is obviously, or should be, neither. I am relating my personal experience.

      Very touchy programmers out there I think. This is not much of a surprise. I think the nail and nerve has been firmly hit on the head here.

    41. Re:As a writer of crappy code.. by makapuf · · Score: 1

      for your particular example : that's why this use case has been captured and in python, in the standard library, you call random.shuffle(container) and you're done with it. Time spent : 3 s , already implmented, tested, debugged and profiled.

      (other languages / frameworks have their own I assume)

      besides, using container.sort(key=random) is about 2s to type, 15s to test and discover it's bad, 1 minute top to search the python std library + 3s to implement preceding solution. 2 minutes for a corner-case tested solution. Try that with a coded fro scratch solution.

    42. Re:As a writer of crappy code.. by ShakaUVM · · Score: 1

      >>The "whiz-bang" algorithms are all in the libraries already. So why reinvent the wheel? And if they aren't, it's not usually your job to put them in.

      I agree, to a certain extent. Why bother writing your own custom super-duper triple-hashed hash table inside of Java? Just use their built in hash tables, and your code will automagically work. I'd probably fire someone who tried to reinvent the wheel there... most of the time the built in hash tables will work faster and with (a lot) less bugs.

      That said, if you don't understand how hash tables work at all, then you get Daily WTF fodder material. I've seen some really stupid shit done with hash tables, like trying to alphabetize it after every insert, which were obviously written by people that had no knowledge at all of what was happening inside of the black box.

      So I'll stick by how UCSD teaches computer science - you write something once, yourself, and then from then on you try to use library function. Sorting algorithms, Data structures, etc.

    43. Re:As a writer of crappy code.. by Anonymous Coward · · Score: 0

      The point is you need the skills involved in reinventing the wheel. In the real world, you don't always have a choice in what language to use. Nowadays, these kids graduate having only learned Java. They are lost when they have to use a language that doesn't have such an extensive library. The funny thing is they blame it on the language and not their lack of skill.

    44. Re:As a writer of crappy code.. by hesaigo999ca · · Score: 1

      You forget a key element that impacts all of this too, money..... when you have money you can go get yourself ISO certified, this means you also had to pass certain standards in programming (like military issue code) which is mission critical resistant. I cant think of anyone I know that has a job doing this (checking code that belongs to another company to see if it will pass the military check standards)
      but you can bet that this person will be light years ahead of any regular programmer,
      not only in code but in innovation and unit testing skills.

      I would love to spend some quality time beside one of these operators, such as to learn and watch ....as sometimes even the best 20 years of experience does not show you what maybe one or 2 people have discovered that brings a 20 hour job down to 2 hours

    45. Re:As a writer of crappy code.. by Fujisawa+Sensei · · Score: 1

      The difference between the "new programmers" and the "real programmers" is that later were still taught math and computer architecture - former were taught only syntax of a sandboxed programming language. Later know why/how software/hardware works at least in general, former have to rely on book which tell them that it would works.

      But I'm not paying your ass to recreate the STL, Boost, or java.util.Collections. I'm paying your ass because you know how to use the functionality that's already out there.

      For example a project needs an API that makes SOAP calls out to a remote client; because that's the kind of interface they're providing. There isn't enough time to write custom XML parsers and https clients. In addition to taking care of all the business logic and translations that are required to support the back-end infrastructure.

      While I expect developers to know how to implement Algorithms when necessary, Even more so I expect them to what is provided in the numerous SDKs.

      I saw one developer re-implement the spring dependency injection and jdbc template for a project. It was an awful, buggy piece of shit. And the project was already using both APIs. What makes things worse was that even then he didn't even code correctly to his own API.

      I'll tell you what, this bozo sounds just like the 'real-programmers' I see here, bragging about their skillz implementing algorithms.

      --
      If someone is passing you on the right, you are an asshole for driving in the wrong lane.
    46. Re:As a writer of crappy code.. by neural.disruption · · Score: 1
      I said done more in depth, after all you mentioned OS programming and I can't even begin to imagine the amount of hacking that one needs in Common LISP or Scheme to do what is normally done Assebly and in C or other mid/low level imperative language.
      By depth I mean freedom to manipulate the computer with little abstractions getting in the way.

      And yes it can still be done in C - Linus, GNU et all have proven it :).

      But the point was that there is need to use low level programming and make everything from the quantum level up, but it really helps to know how the abstractions ones uses are implemented(or at least know what is a linked list, heap, ...) to make the best fitting choice to a particular problem.

    47. Re:As a writer of crappy code.. by neural.disruption · · Score: 1

      I meant there is no need to use...

    48. Re:As a writer of crappy code.. by fishexe · · Score: 1

      The reality is hardly any software is finished as the exact same project it started as. Requirements get changed at the worst possible times, the scope redefined, the timelines shortened. And yeah, at that point getting a working product out is the most important thing. Rewriting it probably WOULD result in better code, which may or may not be justification enough for doing it.

      And hey, there's also a good chance those same things happen to them on their rewrite. Oops.

      That's what happened to Charles Babbage. He never built a working analytical engine because he kept starting over, thinking "with what I know now I can build an even better analytical engine!" If he had just stuck to his original design he would have gotten it built, like his previous difference engine, which was built and working.

      See also Duke Nukem Forever.

      --
      "I don't care about the Constitution!" --Bill O'Reilly, November 17, 2009
    49. Re:As a writer of crappy code.. by TapeCutter · · Score: 1

      It was a joke. dickhead.

      --
      And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
    50. Re:As a writer of crappy code.. by Anonymous Coward · · Score: 0

      That's what happened to Charles Babbage. He never built a working analytical engine because he kept starting over, thinking "with what I know now I can build an even better analytical engine!" If he had just stuck to his original design he would have gotten it built, like his previous difference engine, which was built and working.

      Not exactly true...he did revise the design continuously, but the main reasons he didn't build it are lack of funding and a squabble with his engineer--at least partly over who owned the tools.

    51. Re:As a writer of crappy code.. by MrBigInThePants · · Score: 1

      And finally the post falls to the self conscious and unfair moderation.

      I guess that pretty much proves what I am saying here. Arrogant and add blind to the equation. :)

    52. Re:As a writer of crappy code.. by Anonymous Coward · · Score: 0

      The problem is the newb's include the kitchen sink or iow import an entire namespace when they need one simple function from a single class. They don't know any better, they just cut and paste from their "Learn X in 24 hours" or their "Dummies..." books.
      Forget that they have no concept of OO principles; only inheritance run rampant... "what the heck is an interface?" Viva La bloatware! Gee, I wonder why functional languages are making a comeback?

  52. Docs by afabbro · · Score: 4, Interesting

    From the article: "...it’s a tedious exercise in impedance-matching, requiring lots of time spent grubbing around in poorly-written manuals that tell you everything the code already told you (because it was generated with JavaDoc or Rdoc or whatever), and none of the high-level stuff that you actually need to be told."

    Ah, so the real problem is poor documentation.

    I work all day in a programming language written by one of the biggest software companies in the world. The documentation is complete, detailed, and accurate. For large things, there's an accompanying "concepts" doc. While I have (very rarely) run into something that needs clarification in some sort of corner case, I've never come across any part of their language, libraries, or objects that wasn't thoroughly documented, with examples.

    On the other hand, I don't think I've ever come across an open source product that had barest minimum of documentation. What does exist is typically out of date (and observations of such are met with "read the changelog!" - lame). There's certainly nothing that explains the major concepts in the code - at best, there's some guide to functions or objects, and usually that only because it can be autogenerated. Sometimes there are examples - though more typically, a few mini examples are the only documentation.

    Documentation writing sucks. Programmers don't enjoy it. It's highly amusing to me that the two areas that are the least fun for programmers - GUI design and documentation - are the two worst parts of open source projects.

    BTW, in the 80s, programmers were excited about OOP because it promised rich object libraries. Someone would create objects to do X and we'd never have to code X again - no one, ever! And now everyone complains programming is just stringing together libraries.

    --
    Advice: on VPS providers
    1. Re:Docs by Anonymous Coward · · Score: 0

      And I remember a major computer company who had some C compiler language manuals
      which didn't describe what the compiler options did, only "when to use them" for
      the use cases the compiler writers could think of.

      So if you want to do A specify parm X. There was no information on what type of
      code X really controls in the code generated by the compiler.

      If you were trying to write system code where there are restrictions on what
      system calls you can make you run into trouble since you can't control
      what system calls the compiler will generate -- you have a lot of compiler
      options, but no knowledge of which ones to use to get control of the
      compilers use of system calls.

      PS: To the best of my knowledge there were several possible working combinations
              but many many more which wouldn't work. Once I found one combination
              which worked I stuck with it...

    2. Re:Docs by DeltaQH · · Score: 1

      Solution. Design an Documentation oriented language. Just write the documentation, and the software will be written automatically.

      Or an artificial intelligence system that parses the code and, from a big database of programming design and bibliography, write nice and concise documentation.

      Maybe it could be achieved with a bunch of reverse engineering documentation monkeys, ;-)

    3. Re:Docs by am+2k · · Score: 1

      Sounds an awful lot like UML. To cut the story short: It didn't work out.

    4. Re:Docs by mjwalshe · · Score: 1

      Testify Testify Brother!

    5. Re:Docs by tyen · · Score: 1

      I work all day in a programming language written by one of the biggest software companies in the world. The documentation is complete, detailed, and accurate.

      What language and company is this?

    6. Re:Docs by Anonymous Coward · · Score: 0

      I'm generally enthusiastic about open source, but I agree completely regarding documentation. It's usually fucking terrible.

    7. Re:Docs by gillbates · · Score: 1

      On the other hand, I don't think I've ever come across an open source product that had barest minimum of documentation.

      I have. The Linux kernel comes to mind - the code is sufficiently well designed and architected that reading the source code will tell you what it does. If you still need further clarification, there's a wealth of books on the subject.

      Recently I've been using the FLTK libraries (www.fltk.org). They're very well documented, come with a graphical designer, and well designed. I chose them from over a dozen possible contenders, including wxWindows and Qt, largely because of the documentation provided. In two hours, I had my first fltk program built and running.

      I think the trick is to choose your OS software wisely. You wouldn't buy a vendor's set of libraries without first investigating the documentation; why would OS be any different?

      --
      The society for a thought-free internet welcomes you.
  53. Dear, Don Knuth by Anonymous Coward · · Score: 0

    Well... maybe the projects you(?) are involved in are shit?

  54. Re:Idiot. Seriously. by Hurricane78 · · Score: 1

    Hey, I found a way to kill Knuth: Create “Clippy’s ’Microsoft Visual PHP’, Clickwheel Tablet Edition”! (A browser game^Wapplication of course.),
    He will die from a heart attack, and then spin in his grave... round and round and round... wheeee.

    --
    Any sufficiently advanced intelligence is indistinguishable from stupidity.
  55. No need to reinvent the wheel by djrobxx · · Score: 1

    We now live in a connected world. There is no longer a need to keep re-inventing the wheel. When it comes to the building blocks of a program, chances are someone has already implemented what you want to do, has done it better than you can, and their solution has been time-tested. There's just no need to implement your own Malloc routine. I think of it more like graduating from basic Lego bricks to the more exciting "Expert Builder" series with a greater palette of modules that can make more interesting creations quickly. What does scare me is that a new generation of programmers might take all of this for granted, and never try and understand things at a machine level. High level languages are great, but there's a lot to be said for understanding what's going on behind the scenes. When things go wrong, being able to "think like the machine" enables you to solve things quickly

    1. Re:No need to reinvent the wheel by Anonymous Coward · · Score: 0

      There's just no need to implement your own Malloc routine.

      Indiscriminate use of malloc() and free() can lead to excessive memory fragmentation and eventually segfault. Major projects like Firefox have suffered from it in the past. Since Windows XP, Microsoft has rewritten their malloc() to try to stave off memory fragmentation, at the cost of greater overhead.

      For real-life software than needs thousands of records in unpredictable patterns, the answer is always a custom memory allocator (which might be a database, depending on the application).

      (Garbage collection probably makes Java immune to memory fragmentation, but then the memory is wasted on the bloated runtime instead.)

  56. I want to slap the author by Sycraft-fu · · Score: 5, Insightful

    Whining about "infantilizing" the end user? WTF? I get really tired of the elitist attitude that some computer types have that computers should be hard. They seem to think it should be some sort of almost mystical priesthood that you have to work at for many years to be allowed in.

    Bullshit.

    Computers are tools, nothing more. they exist to allow humans to do tasks that we otherwise can't do, or at least can't do easily. As such they should be as easy and accessible for an average person to use. Ideally they would require no training and be usable by even extremely mentally challenged individuals. The more we can simplify them, the better. They should be adapted to work how we want, we should not have to adapt to them.

    Well guess what? Programming is another part of that. Ideally, we'd have computers that could more or less program themselves. People would tell the computer what they wanted it to do in plain English (or other natural language) and it would figure out how to make that happen. Obviously we are a very long way away from this, but the easier we can make it, the better.

    Even as it stands currently, where you do need training/practice to be a good programmer, there's a lot to be said for easy tools to make parts of development quicker and more robust. The user interface would be a good example. If all UI elements have to be coded in C++ and then compiled to see how it works, it is going to take a long time to develop and change. Goes double if others (like artists usability experts) are working on it as well. You write it, compile it, send it to them, they test it, write up problems, send it back, etc.

    Much better to have a simple GUI interface for laying out the GUI. You can make changes much quicker and easier, and see what you are doing to confirm it is what you want. Also, should the design change, a redesign is much faster and easier.

    I really get tired of this idea that computers and programming should be hard, that we don't want it accessible. Bullshit. You should want that in general, because it makes it available to more people, and even for you, because the ease of use can save you time. Yes, it allows for people to write programs that don't understand it. Deal with it. The microwave allows geeks everywhere to easily prepare food without understanding how to do it. Doesn't mean we should demand everyone become a master chef and cook all their food from only elementary ingredients. That will give you tastier food, but there's something to be said for having a meal ready in 5 minutes with 0 effort.

    1. Re:I want to slap the author by drewhk · · Score: 1

      Why is he modded troll? Please stop using moderation as expressing your disagreement. In general, you should spend mod points to mod up people, not to mod down -- except spammers, hatespeech, etc.

    2. Re:I want to slap the author by farmanb · · Score: 1

      Whining about "infantilizing" the end user? WTF? I get really tired of the elitist attitude that some computer types have that computers should be hard. They seem to think it should be some sort of almost mystical priesthood that you have to work at for many years to be allowed in.

      I'm pretty sure the article's qualms with the infantilization of the end user is not about making the system usable, it was the way in which it was done. Try at least finishing the first paragraph of the article before going on an indignant tirade.

      My Computer. My Documents. Baby names. My world, mine, mine, mine. Network Neighborhood, just like Mister Rogers'.

    3. Re:I want to slap the author by NexusXYZ · · Score: 1

      You are spot on - programming has reached a dead-end and dumping everything off shore to Indians and others to access slave labour rates does not address this issue and if you change the approach it becomes surprisingly easy. To increase development productivity and to build a new class of applications that can make use of the multi threaded hardware we have and the potential of Internet humans need to be replaced by machines that are better at ‘joining the dots’. I’d rather manage a single properties file than millions of lines of code that has been cobbled together with varying levels of competence and immediately becomes legacy as soon as it is installed. Code generators were a good idea but failed as they only did part of the job and it was left to humans to try and figure out how to assemble the final application – you either use humans or machines. You cannot mix both. This was realised in engineering design and manufacturing. We have just built a large collaborative application that was delivered as a finished installable product. This system has hundreds of screens and not one line of code was written a human – if you want to change the product you simply change the ‘engineering design’ and re-generate the complete application – we were re-generating the complete business logic in less than half an hour and the complete product in under two hours. At the time of generation you can chose the target database, OS, etc, and all the end points are also generated. This changes the focus from manual repetitive tasks and puts a higher premium on domain knowledge and holistic design as opposed to ‘templates’. Internalises IPR creation and eliminates the need to use 'artisans' and the need to go off shore which also eliminates the attendant risks of poor quality, IP theft, etc.

    4. Re:I want to slap the author by CodeBuster · · Score: 1

      Do you work in software development? Most of your tedious diatribe leads me to believe that the answer to that question is 'no'. Spend a few years working as a programmer and software designer and then come back to this subject when you know more; because right now, judging by what you have said, you don't know enough about programming or software design to even have an opinion.

    5. Re:I want to slap the author by apoc.famine · · Score: 2, Interesting

      Part of the issue is that "programming" is no longer what it used to be, yet everyone still uses the term.

      It's the difference between BBS and "Web 2.0". It used to be that geeks only could get a modem and some BBS software running which would allow them to connect to the entire world. Now my grandmother can tweet about the birds at her feeder, and someone in Tajikistan can read about them.

      There is a fundamental split now between "designing and writing code" and "programming applications". You want to "program applications". The author and a number of people posting here want to "design and write code". These are two very different things.

      I previously worked in a job "programming applications" for customer service reps. I had a stupid-easy gui toolbox, and pre-written database calls. All I did was link the two together, and provide some feedback for the operator. Currently, I'm in scientific computing, writing some bare-bones code to parse an obtuse, undocumented data structure into a usable format. I've got none of the nice easy stuff I had before. It's raw file reads and writes, slowly stepping through lines of output, trying to figure out wtf is going on. No gui, no buttons, nothing but some console output.

      Based on the article and comments here, it seems that we almost need to split "programming" up into some clearer terms. There's building a car, and there's driving one. There's writing raw code, and there's using pre-made tools to do a job quickly and efficiently. If I wanted one of those things done well, I wouldn't hire someone who was an expert at the other. Right tool for the job and all....

      --
      Velociraptor = Distiraptor / Timeraptor
    6. Re:I want to slap the author by Blakey+Rat · · Score: 1

      Do you work in software development? Most of your tedious diatribe leads me to believe that the answer to that question is 'no'. Spend a few years working as a programmer and software designer and then come back to this subject when you know more; because right now, judging by what you have said, you don't know enough about programming or software design to even have an opinion.

      Seriously? You replied to a complaint about elitism with that insanely-elitist screed?

      The classic, "your opinion doesn't matter because you don't have the same amount of experience as me" elitist bullshit?

      Did your brain explode from the irony of that? Jesus Christ, man, was this some kind of ill-conceived joke are are you really that dense?

    7. Re:I want to slap the author by drinkypoo · · Score: 1

      Well, I have an opinion on whether programming ought to be easy, and... it ought to be. Or at least, people have been imagining that it should be for a long time now. Programs writing themselves? Select portions, maybe. But really, the idea that it should be difficult to tie some libraries together is a silly one. The notion that it will always (i.e. "for the foreseeable future") be difficult to do it well and efficiently is a sound one. But by now we ought to be able to write useful programs by playing with tinkertoys. Without anything more you ought to be able to, say, take a video file and run it through a demuxer, have some stuff done to the video and audio, and have it slapped back together and spit out through a specified codec. You can do it with a shell script in many cases, why should it be hard to have a binary spit out that will do the same thing?

      --
      "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
    8. Re:I want to slap the author by ScrewMaster · · Score: 1

      As such they should be as easy and accessible for an average person to use. Ideally they would require no training and be usable by even extremely mentally challenged individuals.

      A very fine-sounding sentiment indeed, but would you really want to use an application or system designed for mentally-challenged individuals? An experienced user-interface designer does realize that it is not that easy to accommodate a wide spectrum of computer literacy and/or native intelligence on the part of users, without making said system too hard for the mentally challenged, or offensive and irritating to the more advanced. You really end up with two (or more!) interfaces if you really want to do that. Fact is, to some degree people just have to learn what they're doing around computers, and there is absolutely nothing wrong with that. Life is a learning experience: we learn how to tie our shoelaces, look both ways before crossing the street and then move on to more complex tasks. Expecting software developers to write programs starting with the assumption that the user is a moron is just, well ... moronic. Even stupid people learn to drive cars and function in society, they can learn how to handle modern applications too.

      --
      The higher the technology, the sharper that two-edged sword.
    9. Re:I want to slap the author by Anonymous Coward · · Score: 0

      No, you are WRONG. using a computer should be easy. programming one should not be easy. the idea that all code is valid is stupid and that more people writing, without caring how it works, is a good idea is idiocy.

      take cars (the eternal metaphor): driving should be easy. building a car? there is a reason that engineers design and build cars: it is hard work. i know people would respond that cars can kill and code tends not to, particularly crappy utilities. that is until it opens up some hole that gives away your personal information and you find everything you worked for being worth spit.

      look, i agree that a computer is a tool, not much else. remember that hammer you designed? the one with the really novel material that absorbs most of the returning shock? no? is that because you are not a mechanical engineer? yeah, don't feel bad, he did not design the cad program he used.

      specialization. division of labor. the building blocks of socety.

    10. Re:I want to slap the author by StormReaver · · Score: 1

      Ideally they would require no training and be usable by even extremely mentally challenged individuals.

      Microsoft has been promoting that attitude for years, and has caused an enormous amount of damage in the process.

      The microwave allows geeks everywhere to easily prepare food without understanding how to do it.

      Computer programming already is available to anyone. But computer programming is inherently difficult, and it will never be equally accessible to all even if your AI wet-dream came true. The bar would just be raised. There would always be a small segment of the population able to make that AI do vast more impressive stuff than 99.999% of the general population. It's the very nature of having the type of mind that lends itself to writing good software. That mind is always looking for ways to expand the capabilities of the technology, while the general population will be happy with the relatively simple stuff that is prepared for them.

      There is a big difference between learning to use a microwave oven (analogous to clicking a button to launch a pre-written program), and designing and building a quality microwave oven (writing software). The latter will always be harder than the former. The moment the general populace learns to design a basic microwave oven, microwave specialists will create something better than what exists at the time -- leaving the general populace far behind. This pattern will continue until humans are extinct.

    11. Re:I want to slap the author by Anonymous Coward · · Score: 0

      "Doesn't mean we should demand everyone become a master chef and cook all their food from only elementary ingredients. That will give you tastier food, but there's something to be said for having a meal ready in 5 minutes with 0 effort."

      But not much after throwing up for days from food poisoning because the manufacturer wanted to save a few cents by reducing the QA staff, etc.

    12. Re:I want to slap the author by Anonymous Coward · · Score: 0

      Whining about "infantilizing" the end user? WTF? I get really tired of the elitist attitude that some computer types have that computers should be hard.

      Wow. You do realize that you are arguing for infantilizing the end user, right?

      They seem to think it should be some sort of almost mystical priesthood that you have to work at for many years to be allowed in.

      I really don't see a Programming Mafia out there that's intent on breaking your fingers, should you suddenly cross them by "not showing your respects". Really, I'm quite happy to see people learning about the complex piece of technology that sits in front of them, although the vast majority really don't give a shit about programming. And maybe that's why there are programmers - people who are willing to put up with the existing complexity so that other people can get shit done.

      I think you're blaming the symptom instead of the disease. Learning programming takes moments, but doing it well is something that does take years, and that's a function of experience, not priesthood. If you really think there's some kind of magical mystic voodoo bullshit priesthood that is "keeping you down, just like The Man", then I suggest you really get out more often.

      Bullshit. Computers are tools, nothing more. they exist to allow humans to do tasks that we otherwise can't do, or at least can't do easily. As such they should be as easy and accessible for an average person to use.

      Pretty big assumption right off the bat. So, if I know nothing about carpentry, but I want to build a house, I should just run out and get a multi-angle table saw, and start carving up blocks of wood? After all, the saw is a tool, and by your logic "they should be as easy and accessible for an average person to use." Of course, I might cut off several digits, or even a hand, during the process, but hey, like you said - "accessible".

      I don't disagree that computers are just "tools". But I think you're omitting a teensy-tiny keyword here: complexity. The basis of the technology is complicated to begin with; if you want to replace what we have today with something else, then stop your whining and fussing, go for it! Make it happen! Show us your ideas, show us something that we can at least discuss, instead of "well, it's not supposed to be complicated, but it is, so it must be *evil*".

      Ideally they would require no training and be usable by even extremely mentally challenged individuals.

      Ah, so you want a box that can approach the capability of thinking for you? What comes next, AI that works? I mean, it's not like we haven't tried for, oh, several decades to get that working...

      The more we can simplify them, the better. They should be adapted to work how we want, we should not have to adapt to them.

      Wow. Let's apply this to a practical use that is common for several American households: pornography. So instead of using a web browser for porn, I should get a device that I can stick my dick into and - if it's designed well enough not to shred my penis - give me a blow job? That's really keen logic - tell ya what, you go first, try it out... I'll wait for the verdict from you before committing to something that uses motors, friction, and no feedback loop or emergency sensors to massage my pecker.

      Well guess what? Programming is another part of that. Ideally, we'd have computers that could more or less program themselves. People would tell the computer what they wanted it to do in plain English (or other natural language) and it would figure out how to make that happen. Obviously we are a very long way away from this, but the easier we can make it, the better.

      It's been tried, and people didn't like it too much. See, there was this really complicated computer called "a human being", but fo

    13. Re:I want to slap the author by Anonymous Coward · · Score: 0

      They should be adapted to work how we want, we should not have to adapt to them.

      This goes both ways, though--I want my computer to be terse and to-the-point, with no silly wizards hiding the nature of the settings I am changing, and no second-guessing of what I told it to do. I want it to do exactly what I say and only what I say and I want to be burned by that when I fail to give it the proper instructions.

      That's a bit of hyperbole, I think, but the point is this: I learned computers back in the DOS days, when they were hard and unforgiving. That's the kind of computer I like. Fast forward to now, and people like you are saying things like the quote above (which is a noble goal, to be sure), and completely ignoring the fact that you are deliberately dumping on some people to achieve that goal.

      I don't really have the answer for how to strike the balance, but I think this is why the issue strikes such a nerve with many people like me. Make the computer using experience better for people that struggle with them, by all means, but don't make it worse for me while you're at it. I think I'm quite justified in having a problem with that.

    14. Re:I want to slap the author by Anonymous Coward · · Score: 0

      > Ideally they would require no training and be usable by even extremely mentally challenged individuals. The more we can simplify them, the better. They should be adapted to work how we want, we should not have to adapt to them.

      No.

      I don't want my life to be affected in any way whatsoever by some fellow operating some device that he really has no business operating.

    15. Re:I want to slap the author by Anonymous Coward · · Score: 0

      IMHO every programmer should read Apple's Human Interface Guidelines even if they don't work on interfaces directly or never touch a Mac.

      Computers can't be made "easier" just by hiding levels of abstraction - the key is understanding how people react to the things in the world that they need to interact with. There are some well-studied principles that make computers much more pleasant to deal with, such as:

      1. direct manipulation when possible
      2. modelessness when possible
      3. principle of least surprise
      4. forgiveness (undo; default options least likely to cause damage)
      5. maintain perception of stability

      The guidelines aren't a cure-all and they aren't bullet-proof (otherwise they'd be rules instead of guidelines), but they give developers an idea of the kinds of issues they're likely to encounter when their software comes face-to-face with an end user.

      For a good idea of what happens when these principles are ignored, see:

      Interface Hall of Shame
      http://thedailywtf.com/

    16. Re:I want to slap the author by renoX · · Score: 1

      >As such they should be as easy and accessible for an average person to use.

      Sure, but the thing is: quite often programs try to be easy for an average person to use but in fact make it more difficult to use, the canonical example of this is Microsoft.
      One example, in Word: if you select the middle of a word, the programs helpfully selects for you the end of this word, except that this happens only in Word not in other programs making this behaviour inconsistent: thanks a lot for the f#$@# "help".

    17. Re:I want to slap the author by Anonymous Coward · · Score: 0

      I'm afraid you confuse computers with dishwashers.

      Easy and fun have different meanings for idiots and for smart people.

      The industry is today taken by pointy haired concepts; no revolution can come out of them. Nothing good, fun or easy will come out of them. You should stop DEMANDING that someome makes it easy for you, and start taking responsibility for what you want to see, so realize your concept of easy, try to promote it, stop your whining and see if everyone else takes you for an idiot when you tell them about your idea.

      Or, as I'm sure you've already done, buy a Mac. Or several. Is life easy enough in shiny land?

    18. Re:I want to slap the author by psithurism · · Score: 1

      Do you work in software development? Most of your tedious diatribe leads me to believe that the answer to that question is 'no'. Spend a few years working as a programmer and software designer and then come back to this subject when you know more; because right now, judging by what you have said, you don't know enough about programming or software design to even have an opinion.

      I work in software development (C and C++) and I will support the grandparent. I don't know what you do, but I interpret designs into code.

      I have even at some points written code to interpret designs into code because it was more efficient. I remember spending days designing GUIs in a legacy framework before I was moved to a project that used GTK, where I could throw together a GUI and a seperate test gui with secret features in half the time.

      If you work in an area where you need to be at the assembly level and anything else might get screwed up in interpretation, then yes, it has to hard, but from what I've experienced, the more tools you can fire off to let the computer program itself the faster you can get to an end product. Also the more direct control you can pass up to the system engineers who might not code as well, the closer your product will be to their designs.

    19. Re:I want to slap the author by fishexe · · Score: 1

      Computers are tools, nothing more. they exist to allow humans to do tasks that we otherwise can't do, or at least can't do easily. As such they should be as easy and accessible for an average person to use. Ideally they would require no training and be usable by even extremely mentally challenged individuals. The more we can simplify them, the better. They should be adapted to work how we want, we should not have to adapt to them.

      Well guess what? Programming is another part of that. Ideally, we'd have computers that could more or less program themselves.

      Cars are tools, nothing more. They exist to allow humans to do tasks that we otherwise can't do, or at least can't do easily. Ideally they would require no training and be usable by even extremely mentally challenged individuals. Well, guess what? Driving is another part of that. Ideally we'd have cars that could more or less drive themselves. But since we don't, we might as well make it as easy as possible for everyone to drive.

      I for one am sick of all these elitists who insist on a "driver's test" and "driver's ed" before someone can drive a car. Shouldn't it just be available for all of us?

      --
      "I don't care about the Constitution!" --Bill O'Reilly, November 17, 2009
    20. Re:I want to slap the author by Anonymous Coward · · Score: 0

      A hammer is a tool, a very simple one, yet it is still possible to use it incorrectly, you might see the result of that when the nail get bent or you hit your thumb. Just about everything we do in life needs to be learned (with the exception of breathing). You just won't be able to take programming down to the level where it can be done well by the average person until we have AI to write the programs for us, at which point the average person still won't be able to program well, they'll just have an artificial slave to do it for them. I'm not arguing that it should be needlessly complex, just that there is a minimum level of education/training needed for anything if you want good results.

  57. If you don't like copy and paste... by sam0737 · · Score: 1

    be the "somebody" who make the libraries...ultimately you might like kernel coding?

  58. Not even fucking close by Fujisawa+Sensei · · Score: 2, Insightful

    Programming is becoming nothing more than cutting and pasting, especially with languages like java, that provide libraries that do "the hard stuff" and let programmers concentrate on "programming".

    I really need to worry about opening and closing JDBC connections, parsing SOAP calls by hand or writing socket listeners. Sure its interesting, the first 4 or 5 times you do it. But I have better things to do with my time that rewriting the wheel for every fucking application. That shit is already there; learn to fucking us it.

    And sure this crap boils down to pushing tokens between multiple apps, and CRUD database apps. The banging out of code is rarely the tough part.

    The tough part squeezing the requirements out some dumb-ass business analyst, who can barely speak the language, much less actually put something in writing and doesn't even know or care about the fucking applications they're writing requirements against.

    Or perhaps you don't care about getting your airline reservations, airfare and seat assignments correct when you book them.

    --
    If someone is passing you on the right, you are an asshole for driving in the wrong lane.
  59. Standards... by Anonymous Coward · · Score: 0

    If you want to implement code that adheres to a set of standards you can either use a library or implement a solution yourself. I want to watch the blog author explain to management why his application isn't going to make a release date because he has to finish up his SMTP implementation. "Just a few more days and I'll be able to send that confirmation e-mail to a user." I personally like leveraging the power of frameworks so I can focus more on my specific problem domain. It's also a huge bonus when someone new joins the company and you can point them to some good community based documentation, rather than walking them through the in's-and-out's of some in-house framework.

  60. Programming is alive and well by caywen · · Score: 1

    Given how many crappy programs there are that crash because the author decided to code up buggy versions of library code, I'd say programming is alive and well.

  61. Well what's wrong with that? by Weaselmancer · · Score: 3, Insightful

    It seems everyone wants to be a "software engineer", but nobody wants to focus on the "hard stuff", and instead chant "let java/X do it for you".

    I don't see the problem there.

    Not every programmer you're going to run into is going to be a brilliant assembly level kernel hacker. Some of them (these days anyway) are going to be mediocre. Using libraries that a lot of people have looked at, found the bugs for, and documented so that the "hard stuff" works reliably gives these people a chance at success. Not everyone coding these days is some uberhacker. Code that works is really the bottom line here.

    Reason being - programming has moved from a small niche position to an industry. And the demand for programming is large. And the number of people who can perform difficult tasks like coding in assembly is small. Wizards are rare and demand is larger than that. So how do you bridge that gap? Easy languages and tools and lots of libraries to increase the number of available programmers that can meet the demand. Let the gurus stick to the heavy stuff and let the mediocre programmers spend their time solving tasks in their ability range.

    It's simply market pressure.

    --
    Weaselmancer
    rediculous.
    1. Re:Well what's wrong with that? by CptPicard · · Score: 3, Insightful

      Not every programmer you're going to run into is going to be a brilliant assembly level kernel hacker. Some of them (these days anyway) are going to be mediocre.

      I would have to disagree with the notion that a programmer is either brilliant by being an "assembly-level kernel hacker" or then he is mediocre and "just uses library calls". This is the kind of weird dichotomy I tend to see from the most arrogant-ignorant low-level guys who probably don't have much of a theoretical CS background, or something. Software does not work on a continuum from hardware level to stupid cut and paste code monkeys.

      The most brilliant programmers I know are the ones who have a loads of insight into the working and structure of software in general, regardless of language and/or proximity to hardware. It is all about identifying the problem solution and then making use of some formalism to describe that solution in computable terms. IMO good Lispers are hard to beat in this regard...

      --
      I want to play Free Market with a drowning Libertarian.
    2. Re:Well what's wrong with that? by Anonymous Coward · · Score: 0

      I have a tough time dealing with your implicit assumption that the kernel/assembly language programmer is at the pinnacle of programming. The reality is that often people with this low-level mindset are horrible at writing business logic. And yes, sometimes there are people that can do both.

      Oftentimes the best programmer is one that isn't a programmer at all. It's some guy in marketing, QA, or the education department that says "wait, we don't have to make the font size bigger. Hit control-plus in your browser, or change your resolution, or buy a monitor bigger than 12 inches, or...". Whereas most programmers would just bump the size of the font with no questions asked.

    3. Re:Well what's wrong with that? by Anonymous Coward · · Score: 0

      //to be complaisant :
      never say that software engineering is just math and physic! //not complaisant:
      I am afraid that, in addition to algebra and discret math, you should learn topology (example: what is a circular list to list , or circular array to array: one point compactification!)

  62. Really by Broken+scope · · Score: 1

    My systems software professor had a massive hard on for java, and thus all the C/C++ we needed for Computer Architecture was no where to be found for 90% of my 20 person class. My comp arc professor told us to learn it the weekend before the first lab. Three people did, I already knew enough to write our very simple code.

      Professor wanted us to annotate and explain assembly generated by a rather simple C program. He also wanted us to watch registers and make note of the changes in registers and stack and base pointers as we stepped through the program. After lab was over all but two students complained about having to even think about assembly code.

      Next lab we played around with a special vector library the prof had made so we could see the difference between vector and scalar math. Me and another guy did the lab and started looking at the assembly and noticed that about a third of the assembly generated in a series of successive adds could be removed. No one else looked at the structure of the assembly, they just complained about having to annotate it again.

    It's not the programming, it's the programmers.

    --
    You mad
    1. Re:Really by ErikZ · · Score: 1

      I though assembly was CPU specific? What's the point of writing something that's guaranteed to break over time?

      --
      Democrats or Republicans. They are both taking us to the same place and they are not afraid of us anymore.
    2. Re:Really by Broken+scope · · Score: 1

      It's generally architecture specific.

      Sometimes performance matters more than portability, especially in an embedded system.

      The prime reason in an academic environment is just to demonstrate what is going on under the hood.

      --
      You mad
  63. Car analogy by Futurepower(R) · · Score: 0

    When you want a car you should build your own iron foundry? Just because the people already making iron have not done a perfect job?

    1. Re:Car analogy by CDPS · · Score: 3, Interesting

      Few programmers start to write a program by designing a new OS, etc., so your analogy is simply a strawman. How about this car analogy: when designing a new car you are allowed to use only already existing auto parts; you are not allowed to custom design hardly any part on the "new" automobile. This is the real analogy with patching together existing library routines to build a new program: connecting together a set of already existing auto parts to make a "new" car. Does this better analogy still sound just fine? Obviously depends on what one is reusing and how complicated that was to engineer.

    2. Re:Car analogy by clone53421 · · Score: 1

      Sure you should. Nothing wrong with that.

      But when you want an airplane, an automobile engine just might not cut it:

      The Wrights wrote to several engine manufacturers, but none met their need for a sufficiently lightweight powerplant. They turned to their shop mechanic, Charlie Taylor, who built an engine in just six weeks in close consultation with the brothers. To keep the weight low enough, the engine block was cast from aluminum, a rare practice for the time. The Wright/Taylor engine was a primitive version of modern fuel-injection systems, having no carburetor or fuel pump. Gasoline was gravity-fed into the crankcase through a rubber tube from the fuel tank mounted on a wing strut.

      --
      Alexander Peter Kristopeit bought his basement from his mommy for one dollar.
  64. Re:Half a Century of Crappy Computing by mfnickster · · Score: 0, Offtopic

    Go away, Louis.

    --
    "Slow down, Cowboy! It has been 3 years, 7 months and 26 days since you last successfully posted a comment."
  65. Re:Idiot. Seriously. by GlassHeart · · Score: 1

    Because the higher-level and powerful your module is, the less likely it'll be exactly what the next job needs, hence the dilemma between reinvention and reuse. I don't think anybody is advocating writing literally everyone from scratch. Low level libraries are easily reused.

  66. programming is better off... by chentiangemalc · · Score: 2, Insightful

    for some people it may seem less fun, if so nobody is stopping you for writing libraries yourself (except for maybe employers who are concerned about something called 'return on investment') however another take is that programmer's don't get stuck with writing mundane functions that have already been written 1,000s of times. the use of libraries can deliver more reliable applications in less time. library developers can specialize in a particular function and good libraries do functions much better than 'write it yourself' a classic example is encryption libraries...although easy to write your own encryption library, there are so many ways security can be weakened that you may not realize unless you are specializing in this field. in the end programmers are developing better applications, and delivering them more quickly use of libraries live on...

  67. Wanky Software Titles by CuteSteveJobs · · Score: 1

    > It seems everyone wants to be a "software engineer", but nobody wants to focus on the "hard stuff", and instead chant "let java/X do it for you".

    Programming titles are getting very wanky: Software Developer, Software Engineer, Software Architect, Senior Software Enterprise Architect, etc. The frightening thing is you'll need some of these who have never coded in their life, but feel qualified to design software for others to write.

    At heart, we're all programmers and those designers that know bugger all about software should really choose another career.

    1. Re:Wanky Software Titles by curmudgeon99 · · Score: 1

      You went off the rails there, dude. In 14 years in the industry, I have yet to meet an architect who did not know code or who had not worked their way up as a developer. I defy you to point to one person who has become an "architect" without first being a code-hacking developer first.

    2. Re:Wanky Software Titles by CuteSteveJobs · · Score: 1

      Sadly I know quite a few that have never coded. They don't see it as important. Anyone can look at a UML diagram and add arrows. Coding, well, that's grunt work when all the design work has been done.

  68. He laments about writing in C by Anonymous Coward · · Score: 0

    I've heard this for the past 15+ years. Funny thing is, the guys that tell this same sad story never say how much they miss the days of writing in Assembly.

    Personally, I don't care to re-implement concatenating two strings regardless of the language.

  69. As a physicist, by Kim0 · · Score: 2, Interesting
    I can tell that the problem is a lack of Ockhams Razor:

    The probability that a theory predicts correctly, gets higher when the theory gets simpler.
    The probability that a program is useful in new situations, gets higher when the program gets smaller.

    This has been proven mathematically with algorithmic information theory.

    However, Keeping It Simple, Stupid, is very hard and costly, and most people have an instinct for hoarding that gets in the way.

    Kim0

    1. Re:As a physicist, by physburn · · Score: 2, Informative
      I'm a physicists too, but Ockham's Razor hasn't been proved, from Wikipedia:

      ---

      In science, Occam’s razor is used as a heuristic (rule of thumb) to guide scientists in the development of theoretical models rather than as an arbiter between published models.[4][5] In the scientific method, Occam's razor is not considered an irrefutable principle of logic, and certainly not a scientific result.[6][7][8][9]

      ---

      I've actually had a good look and Ockham's Razor from the point of view of information theory. See, my blog. The trouble stopping the Razor been robust, is finding a fair language to express the scientific theory in a minimally small way.

    2. Re:As a physicist, by benjamindees · · Score: 1

      most people have an instinct for hoarding

      I'm curious to know the mechanism by which you, as a physicist, view hoarding as impeding progress.

      I will admit that most people do have an instinct for hoarding. But I don't believe the vast majority do anywhere close to an effective job of it. And I don't think that hoarding, per se, should have any negative effect. Rather the opposite, actually.

      My own view is that consumption, rather than hoarding, has a long-term deleterious effect on living standards. And that what most people consider "hoarding" is actually consumption. True hoarding would act to preserve resources for future consumption, which would derive more benefit due to advances in technology than current consumption. But I'm interested to hear what others think.

      --
      "I assumed blithely that there were no elves out there in the darkness"
    3. Re:As a physicist, by Kim0 · · Score: 1

      I'm a physicists too, but Ockham's Razor hasn't been proved, from Wikipedia:

      ---

      In science, Occam’s razor is used as a heuristic (rule of thumb) to guide scientists in the development of theoretical models rather than as an arbiter between published models.[4][5] In the scientific method, Occam's razor is not considered an irrefutable principle of logic, and certainly not a scientific result.[6][7][8][9]

      ---

      I've actually had a good look and Ockham's Razor from the point of view of information theory. See, my blog. The trouble stopping the Razor been robust, is finding a fair language to express the scientific theory in a minimally small way.

      As you apparently know, the change in probability from changing representation language is maximally 2^-+c, where c is the size of the smallest program simulating one language with the other.

      However, this is an upper bound, and the real difference in probability will in practice be much smaller than this, except for some weird languages. Cellular automaton No.110 is universal, and extremely simple, so c must at worst be the complexity of this.

      Solomonoff made some bounds of how fast systems like this can learn, and it is VERY fast. In this case, it is the speed which one language can learn another, and this can be much faster than c.

    4. Re:As a physicist, by Kim0 · · Score: 1

      I'm curious to know the mechanism by which you, as a physicist, view hoarding as impeding progress.

      Hoarding impedes progress by making people hoard lots of complex explanations, complex programs, complex laws, etc. instead of searching for the better few simple ones.

    5. Re:As a physicist, by benjamindees · · Score: 1

      Ah, I see. Technology hoarding rather than physical hoarding. That makes more sense.

      There are several arguments against this, but I basically agree that we would be better off if technology were as openly shared as possible.

      --
      "I assumed blithely that there were no elves out there in the darkness"
    6. Re:As a physicist, by sourcerror · · Score: 1

      This has been proven mathematically with algorithmic information theory.

      I guess you mean statistical learning theory. But it isn't that way: it depends on the complexity of the problem you want to solve. There's an optimal amount of complexity, and if your learning system has more or less complexity it will be suboptimal. (Having too many degrees in a learning system will cause overlearning and lack of generalisation capability.)

      Keywords to google:
      VC dimension, empirical risk minimisation

    7. Re:As a physicist, by Kim0 · · Score: 1

      Of 2 systems modelling the same data, the simpler system has higher probability of predicting further data.

  70. Ben Parker? by denzacar · · Score: 1

    You know... Spiderman's uncle.
    That sounds exactly like something he would say.

    --
    Mit der Dummheit kämpfen Götter selbst vergebens
  71. Re:Idiot. Seriously. by Interoperable · · Score: 1

    Programming used to be more of a math.

    It still is but it's now also a business. The mathematical side is still being actively developed but the people who work on it aren't writing iPhone apps. Nothing has been lost, but the enterprise side of programming now dwarfs the academic side.

    --
    So if this is the future...where's my jet pack?
  72. Re:Idiot. Seriously. by Darinbob · · Score: 1

    Cargo cult is right. Or at least superstitious at times. I do run into programmers who have inherited code that don't want to touch it or who do some arcane ritual they don't understand, because that's what has worked before. Sometimes the code is just too ugly to understand, or you don't have time to spend figuring it out. There's also the superstition part of doing what you were taught in school without thinking about it further; like experienced programmers who insist you remove all your gotos, or have a single return from a function, etc.

  73. Re:Welcome To The Real World by Tablizer · · Score: 1

    So your job sucks. Welcome to the club. Just about everyone's job sucks. Do you think your geekdom exempts you from this? Suck up and deal, Nancy.

    To some extent it's true. If things are going too well, then you are getting spoiled and won't be able to handle the next hard gig when the fun-bubble finally pops.
         

  74. Re:Idiot. Seriously. by Tablizer · · Score: 1

    ^ Microsoft OS programmer ;-)

  75. Re:Idiot. Seriously. by funkboy · · Score: 1

    "Knuth had his day."

    Wow. Just wow.

    First, I want you to write a work that tops TAOCP. Or at the very least show your check from Knuth for finding an error. Oh, wait, I highly doubt you've done either.

    I'm betting 0x$5.00 that he doesn't have one.

  76. Re:Isn't he the guy who defends using goto stateme by Nazlfrag · · Score: 1

    Yeah, that paper where he argues for a well-balanced viewpoint that gotos should be eliminated in some cases but not others couldn't have passed computer science 101 with your instructors because he wrote that in 1974, most likely before your CS department existed and your instructors were still learning their times tables.

  77. Just the opposite. by SanityInAnarchy · · Score: 1

    I'll admit there may be a lot of cutting and pasting in a language with as much boilerplate as Java, but go even higher-level, to something like Ruby...

    Cutting and pasting is non-DRY, and is thus (rightly) discouraged. In fact, I'd almost argue that new programmers should have to spend a few months with copy and paste disabled, so they learn proper code re-use.

    In fact, you're describing two very different mentalities. Having your language or libraries handle "the hard stuff" is actually the exact opposite of cutting and pasting. If you're doing it right, you notice when you're tempted to cut and paste some code, and you extract that functionality into a library so you don't have to. On the contrary, "cut-and-paste" programmers would be equally at home in C, since they don't care about proper code re-use -- to them, "code re-use" means, as you suggested, finding something on Google they can copy, paste, and modify to their needs.

    Now, to address your real argument: I don't know about you, but I only have so much time. I mean, forget the excuses, I'm only going to live so long. Why would I waste my life solving the same problems over and over? Why would I want to implement a sorting algorithm yet again when other people (like Knuth) have done it better, and there are other, much more interesting problems to solve?

    I mean, that's almost like bitching that no one has to do the limit of the difference quotient anymore, now that we have these fancy things called "derivatives" -- or that no one has to do Reimann sums anymore, now that we have the Fundamental Theorum of Calculus. Hey, if you want to do derivatives as limits-of-difference-quotients for the rest of your life, go right ahead, but if you're going to do math, wouldn't you rather invent the next grand physics theory?

    There's nothing intrinsically "harder" about programming at a low level, it's just less productive.

    --
    Don't thank God, thank a doctor!
  78. Re:Idiot. Seriously. by BlackHawk-666 · · Score: 2, Interesting

    I think the guy's point was that Knuth wrote that in the 70s, and it's now the 10s - a gap of forty years in which he has capitalised off his earlier work but not really brought anything that revolutionary to the table since. His original work stands as a classic, bring together a vast amount of highly relevant information and algorithms for the programmers of the 70s/80s. It has a lot less relevance in this age because most of his work is now part of some standard library or framework.

    I've written plenty of things as useful as TeX but that doesn't mean I'd call Knuth an idiot.

    --
    All those moments will be lost in time, like tears in rain.
  79. Re:Idiot. Seriously. by Anonymous Coward · · Score: 0

    There will always be mathematical problems to solve

    May I have a proof?

    Though seriously, who's to say that some variant of Hilbert's Program won't be discovered which deals with statements humans actually care about in some sense (getting around Godel's Incompleteness Theorems; one also has to ignore consistency proofs :( ), or that the universe won't die a heat death? Wouldn't it be sad if all of our reasoning/coding/work went "poof" as the density of matter and energy in the universe went to zero, and everything that ever was or will be was churned ever closer to nothing?

    Sorry, I couldn't help trying to add a little rigor to an argument that's biased towards being unbiased.

  80. Open Source and Documentation by Mandrel · · Score: 1

    On the other hand, I don't think I've ever come across an open source product that had barest minimum of documentation. What does exist is typically out of date (and observations of such are met with "read the changelog!" - lame).

    Sometimes this is the case because they believe they owe their users nothing, and don't think or care about the risk to their reputation.

    But sometimes it's deliberate to better sell their book, which properly documents the project. Thus it's ironic that FOSS is often paired with documentation that is both proprietary and not open for community editing,

  81. You can learn a lot from libraries by drewhk · · Score: 1

    Well, using libraries is a great learning experience. Sometimes you can learn a lot about a problem if you implement the solution yourself. But your coding style will improve most when you see how others implement the same. It helps you to be more open minded.

    Of course one has to be extremely careful whether to use a library at all, and which one to pick.

  82. [Ofttopic] Your sig by neumayr · · Score: 1

    Jeez that guy's hard to take seriously.

    Using the rhetorics of conspiracy nuts makes you a conspiracy nut.

    --
    Truth arises more readily from error than from confusion. -Francis Bacon
  83. Re:Idiot. Seriously. by Anonymous Coward · · Score: 0

    I didn't knew about cargo cults. It seems like an odd, ridiculous concept but still it exists. Thanks for posting that. Kudos.

  84. Everything should be easy by Anonymous Coward · · Score: 0

    Author: Programming was fun, people knew how it worked. Now everyone just glues stuff together. People should love it!
    You: Elitist jerks like! You forget that these things are tools! Get stuff done! If we could have a black box that magically spit out code when a monkey pressed a button it would be ideal!

    Yes, everyone wants to get stuff done, but that often magically assumes that it comes without a trade off. Sometimes the trade off is cheap, or likely, expensive to someone else, since apparently you wont be around when it bites you in the ass.

    Apparently the author likes coding, you feel that the cost effectiveness of the method justifies the end.
    Apparently learning how to cook something easy, fun, fresher, and tastier than microwaved crap is a waste of time.
    May I also suggest finding a different job where you don't feel the to push for the lowest common denominator?

  85. Browser = grand fail; network "O/S" needed. by master_p · · Score: 1

    The idea of a browser is a grand fail. What is required is a data/code distribution platform. A platform that:

    -handles security transparently, with encryption at all communication paths.
    -handles (lazy) resource distribution, updating, versioning and caching.
    -provides a *binary* protocol for managing information.
    -treats code as data, so as that code can be managed by the system just like data.

    Anyone up for this task? an open source project could be created...

    1. Re:Browser = grand fail; network "O/S" needed. by tonywestonuk · · Score: 1

      As I said Above.... This sounds like Java Webstart..... (Apart from the 'Handles security transparently' bit, though there is nothing stopping anyone adding this as a module)

    2. Re:Browser = grand fail; network "O/S" needed. by gbjbaanb · · Score: 1

      no, Browser != grand fail.

      The browser is a great document reader. What is a "grand fail" is trying to turn it into a desktop application host. If you're going to do that, you need more connectivity, better GUI and a decent language to run those GUI widgets on (which is not flippin' java)

    3. Re:Browser = grand fail; network "O/S" needed. by Tablizer · · Score: 1

      What do you mean by "more connectivity"? Bandwidth is usually sufficient in my observation as long as common GUI idioms are handled properly by the GUI browser. It's when the browser has to reinvent the desktop wheel that bandwidth needs crank up.

      Perhaps you mean like Microsoft's "bound controls"? That's often a bad idea if you care about bandwidth. There are usually different ways to get the same functionality without bound-ness.

    4. Re:Browser = grand fail; network "O/S" needed. by gbjbaanb · · Score: 1

      no, I meant like 'connected' - ie a permanent connection to the back-end, not the stateless connection system we have today (which is fine for getting documents, displaying them, not so good for interactive UIs and especially for pushed notifications) You can see how good a thing it would be by the number of hacks that have appeared to work around the connectionless-oriented nature of web applications.

      You don't need bandwidth for this, its not about the amount of data transfer but the ability to send notifications back and forth. Client-side controls that connect to the back-end (or worse, the DB!) are part of those hacks.

      It does mean that webservers will scale less well, but from what I see today, they don't anyway - due to the hacks and repeated connections that get made from the clients anyway. Better to re-engineer it so that an application lifetime is better managed instead of trying to build it on top of http.

      However, until someone like Google or Mozilla does it, its just a dream.

    5. Re:Browser = grand fail; network "O/S" needed. by Tablizer · · Score: 1

      I agree that things like database interaction need to be thought out carefully, but HTTP is not the culprit. Things like Microsoft's "bound controls" were a performance headache even outside of the web world. A better approach was to search for just those records you want to work with and track them via unique row ID's and send updates in groups, not "scroll" the entire table to the client. But this is a different issue from having richer GUI's over HTTP via a better browser.

    6. Re:Browser = grand fail; network "O/S" needed. by MemoryDragon · · Score: 1

      Java has an excellent desktop UI library called Swing, a little bit too low level in its widget set, but thats where third party widgets come in, but very similar in design and concepts to Qt, and nowadays very fast.

  86. Solution: a high-level programming system by master_p · · Score: 1

    I think everyone agrees that writing documentation is not very interesting. Unfortunately, it's a vital part of software engineering. As I a software engineer myself, I had spent some times in the past trying to write good documentation, but it always ended out of date because writing the actual code is always a priority.

    In my opinion, a high-level programming system that allows the programmer to develop a solution without looking at the implementation details is the solution to the problem. The programming system would be used to describe the business logic and the actual functionality of the system. The programming system could then produce a template for the actual implementation in one of the available programming languages. The high level code would be the documentation of the system.

  87. I wonder if domain specific languages are better by DeltaQH · · Score: 1

    After seing time after time programmers construct their own framework inside frameworks, their own overloading inside overloading, etc, if it would be better for a task to be delivered to code monkeys to design a domain specific language.

    The convoluted programming I have seen sometimes is beyond description

    If you have a specific problem in a specific domain that has to be coded by average programmers, maybe better design a language for that specific task and be done with it. With as little overloading, re-encapsulating and re-objecting as possible.

    Let that for the real software designers.

  88. Toyota comes to mind. by pjwhite · · Score: 1

    I want the software engineer who writes the drive-by-wire code for my car to UNDERSTAND COMPLETELY how the software works. I sure hope they don't grab some black-box libraries, slap them together and call it done.

    1. Re:Toyota comes to mind. by maxume · · Score: 1

      Don't buy a drive by wire vehicle.

      --
      Nerd rage is the funniest rage.
    2. Re:Toyota comes to mind. by Anonymous Coward · · Score: 0

      Yes - I believe it's mandatory at Toyota for all workers to understand all aspects of the design ;-)

      Welcome to the post-enlightenment. We have learned how to store knowledge which has lead to an exponential accumulation. Meanwhile education has improved slightly and our brains have hardly evolved at all. This means goodbye polymaths, goodby Renaissance man. I often think this is the central challenge of our age.

      What do we do now we have hit the buffers of the human brain? We are attempting to manage this through abstraction but it's imperfect because the abstractions are imperfect which requires users to understand superficially how they work. This takes up thinking space and so we can only understand n imperfect abstractions. We can improve this by making the abstractions better but again we will never be able to comprehend many. Where does progress go from here? Someone will answer haskell but I think that's missing the point ;-)

  89. Re:Idiot. Seriously. by bertok · · Score: 1

    "I think a better analogy would be to say that today's programmers are more like a Cargo Cult."

    Responses to the recent MS-random-browser thread ("the faulty shuffle is close enough", "this guy's being pedantic", "knowing algorithms is a bad use of company time") are pretty good evidence of that.

    http://developers.slashdot.org/article.pl?sid=10/02/28/1837223

    The sad thing is that I recognise those exact same responses from when I submit critical security vulnerability reports to various development groups and companies.

  90. Let me fix that for you... by Joce640k · · Score: 1

    Don't reinvent the wheel without a good reason.

    Sometimes you really have to reinvent. eg. I once rewrote std::string for a program and it loaded text files three times faster.

    [Of course I did it after suitable profiling and analysis, doing it at the start of coding "just in case" would be wrong]

    --
    No sig today...
  91. Re:Idiot. Seriously. by X.25 · · Score: 1

    Knuth had his day. That day is the equivalent of building stone tools and hunting with rocks and sticks.

    Today we are using bows and arrows. We have left the stone tools behind and can now express our imagination in ways that are simply beyond the scope of TAOCP.

    But remember, we are still only using bows and arrows. The next big thing will be gunpowder.

    You are a fucking idiot, and you are a perfect example of why everything runs like shit these days.

  92. Re:Idiot. Seriously. by CptPicard · · Score: 1

    The issue with Knuth is his insistence on machine code representation and the time he spends analyzing something like mere linked lists... philosophically, I am much more inclined to be fond of the way McCarthy did it with Lisp, and this was a long time ago too...

    --
    I want to play Free Market with a drowning Libertarian.
  93. Glad I'm writing embedded stuff by slashbart · · Score: 2, Informative
    Hello World.

    I've spent most of my career on embedded projects, and I'm still doing real programming, from bit banging an I2C or Dallas onewire bus, writing a custom assembly routine to provide a uC-OS-II task switch on an ethernet chip interrupt, or interfacing with some higher level Tcl stuff. To get the whole thing working mix in some shell, awk, python xslt, stir well, and get space qualified software. Oh and when all that starts to get boring, throw in some FPGA programming for a completely new way of doing things. I love my jobs!
    Really, I think embedded software is often more interesting than most web-, gui- or server apps. The disadvantage is that you pretty much need an electronics degree (which I do), to be able to do it effectively.
    Last but not least, it often pays pretty good, and the quality requirements are high, which means that there is time allocated to make something good. Google for 'Declic' on linuxjournal.com if you want to see what I'm talking about.

  94. What happened? by nurb432 · · Score: 1

    Two main things:

    1 - Laziness
    2 - Unreasonable deadlines

    --
    ---- Booth was a patriot ----
  95. Welcome to the age of software components by descubes · · Score: 1

    Back in the 1990's, all the rage was about "software components", what was back then a dream. Those who came up with COM and Corba and OpenDoc envisioned a world where software components would be as easy to put together as electronic components.

    Well, that's the world we live in now. Just type "./configure; make" and use it. Why complain? It's a good thing. It makes us more productive. It allows our poor brains to keep up with Moore's law. See http://xlr.sourceforge.net/Concept%20Programming%20Presentation.pdf for more...

    --
    -- Did you try Tao3D? http://tao3d.sourceforge.net
  96. Re:Idiot. Seriously. by quadelirus · · Score: 1

    Oh yeah, I agree totally. The mathematical side is still very much alive and well, it just isn't the majority of whats done under the umbrella of programming any more. Also, as one other commenter pointed out in response to my post, there have been engineering apps as well. I think that Knuth is probably (potentially unfairly) lamenting that the majority of programming these days has become engineering (this is because there are lots of things that need to be built and so many more engineering tasks, not because there are fewer mathematical tasks).

  97. Real world example by Anonymous Coward · · Score: 1, Insightful

    Here's a real world example of me stringing together libraries that already exist.

    I'm currently working on a project that requires parsing some HTML, and performing magic on it to transform it into HTML decorated with auto-generated code.

    What I'm interested in writing is the transformational magic. What I could be writing is the HTML parser.

    Now, while a fun project, why the heck would I want to write my own HTML parser? Well, I have a very specific set of requirements, that it turns out most HTML parsers aren't very good at. (These are more API issues, rather than parsing issues. It turns out most DOM-oriented parsers, which most HTML parsers are, tend to be horrible at what I want to do, due to HTML having weird rules like implicitly closed elements.)

    Instead of deciding this is a great opportunity to reinvent the wheel, I spend a day and a half looking at a wide range of HTML parsers, writing code and evaluating each one.

    You know what? Eventually, I find someone who wrote a library that solved exactly the problem I wanted to solve. Someone who had the exact same problem as me, and has spent who knows how many untold man-hours creating a debugged and elegant library.

    Now, someone tell me why it would have been better to have spend that day and a half getting just 10% of the job done, when I can just use someone else's wonderful library and build just a little bit of glue to my own problem domain on top of it.

    Most of my "programming" time is spent looking for an existing body of code that will help me solve the problem, not actually coding a solution to the problem itself. 90% of any programming problem has already been solved before, a mantra I constantly repeat to myself every time I feel the least bit tempted to try and solve a problem from scratch. Do enough research, look hard enough, and most of the time you can find the solution.

    And if you don't, that's a great opportunity to contribute a new library that might become widely used. :-)

    I think this shift is more about open source than anything else. Over the last 10-20 years, we've collectively built up this amazing body of code that anybody can use, without any commercial barriers standing between adopting different technologies. It's allowed us to push code reuse much further than we could in the past, and there's been a tremendous net benefit from it. Dismissing that progress as not being "real programming" is just incredibly naive.

    1. Re:Real world example by pooh666 · · Score: 1

      Take away should be that this guy had to understand the problem in great detail to even evaluate these libs and in the end he did save a lot of time and probably is not too far away from being *able* to write a parser if he needed to. So it is a great best of all worlds example. Imagine how much worse it would have been had he not had open source code to look at. Another lesson he learned from this is that his need was someone unusual, which in itself is a good bit of knowledge to reflect on in regards to his project.

  98. let me guess by malp · · Score: 1

    you're a string theorist?

    1. Re:let me guess by Kim0 · · Score: 1

      you're a string theorist?

      No.

  99. The Story of Mel, a Real Programmer by cpghost · · Score: 1

    Isn't this the Story of Mel, all over again, just on a higher level of abstraction?

    --
    cpghost at Cordula's Web.
  100. You know Programming is in trouble by Prototerm · · Score: 3, Funny

    You know Programming is in trouble when being "the goto guy" has become a compliment, rather than an insult.

    --
    "My country, right or wrong; if right, to be kept right; and if wrong, to be set right." --Senator Carl Schurz (1872)
  101. Re:Idiot. Seriously. by smallfries · · Score: 1

    That is beautiful. If you don't use it as a sig (seeing as you don't have one set) then I'll definitely be stealing it to use as mine.

    --
    Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
  102. Effects on getting a job by ClosedSource · · Score: 1

    I think an important side effect of all this pasting a bunch of different libraries/frameworks together is the difficulty of finding a job.

    20 years ago if you knew C you probably were qualified for most jobs. Now you have to know several different languages not to mention whichever frameworks de jour are popular at the company you wish to join.

    If this trend increases we may get to the point that there will be jobs posted that nobody qualifies for except those who already work at the company.

    1. Re:Effects on getting a job by ScrewMaster · · Score: 1

      If this trend increases we may get to the point that there will be jobs posted that nobody qualifies for except those who already work at the company.

      That's long been the case. Well, for one you can't disregard the importance of institutional knowledge to software development: a programmer who's been on the job for a number of years and knows a lot about any existing code as well as relevant business practices is more valuable than a newcomer who may look better on paper. Ultimately, it comes down to the fact that employers are in a buyer's market and they feel they should be able to find a person who is an exact fit for their requirements. And they can ... on paper.

      The problem with employers and HR departments who do that is that they're eliminating the possibility of acquiring a great programmer who may not have a precise skillset, but will pick them up in short order. Given how fast this industry changes, a willingness and ability to quickly adopt new languages and methodologies is a far more important attribute. Furthermore, a programmer may have other useful items in his background that aren't directly related to coding, but could be beneficial to a particular employer. You'll never know unless you ask, and if you discard an applicant simply because he doesn't fit some arbitrary profile you may be losing out.

      Ultimately, it's best not to get too specific when looking for new hires, but that means more work for the HR people. They want to fill checkboxes and pigeonhole every applicant, and not worry in the least about anything not on their little lists. That costs a lot of companies a lot of good employees.

      --
      The higher the technology, the sharper that two-edged sword.
    2. Re:Effects on getting a job by ClosedSource · · Score: 1

      There's lots of published advice about how to run the gauntlet of the hiring process for candidates but little published on how companies can "up their game" when looking for new employees. The emphasis on the employers part seems to be minimal work rather than maximum quality.

  103. Try Embedded Programming by DCheesi · · Score: 2, Informative

    In embedded programming there's still plenty of opportunity for ground-up design. Eg. writing a new driver for custom or unsupported hardware, creating custom applications to do whatever unique thing your widget does, etc.

    Yes, you tend to get into framework-hell on the GUI side, and occasionally in other areas as well. But even then I get a sense of pride knowing that I made these things work on a platform they were never designed for.

  104. FOSS did... by neural.disruption · · Score: 1

    Open Source(in general not only as FSF puts it) is a really good concept, but it also have promoted using code that you don't quite understand and patching it up until "it works". The equivalent in physics would be blindly joining equations from others until you make a new theory.

    Most programmers no longer learn in a way that promotes self sufficiency, they have to use library X but they don't need to know how it works, even thought most of the time the resulting software would be better and with a shorter development phase if they did.

    A good programmer knows what he is doing, he does not expect things to magically work out due to a large amount of binary duct tape.

  105. I am apparently evil. by tomtefar · · Score: 1

    For the last year, I've participated/headed our company's effort in replacing our existing python code hell with a transactional framework (in C++ with services in any language) that provides fault tolerance, easy deployment, secured event collection (because they provide billing info), load balancing, speed and scalability.

    It is well documented, has example code and test cases, and it received good feedback from the rest of the devs.

    I've starting to push it internally for an open source release since I thought that a framework that focuses on fault tolerance, transactional routing and scalability and other ops-oriented problems would be a good thing for the world.

    Ironically enough, one of the main reasons for developing our own framework was that clobbering together ACE + X + Y + whatever would yield a framework hybrid that seemed to messy for us to rely on. We would not know the code base, be (initially) dependent on community provided bug fixes and we would still have to write a ton of glue to get everything off the ground. So after a bit of soul searching regarding Not Invented Here, we decided to strike out on our own.

    However, after reading TFA, I realise that I may actually be Satan himself planning to release a new and improved rider of the apocalypse on the world.

    Why is this wrong? The company is bogged down by a crappy framework with huge performance issues and unclear API boundaries. Our new framework is 20-1000 times faster, provides a clearly defined API, and is asked for by other dev teams.

    Rolling our own framework gave us a single integrated (but not monolithic) codebase where the developer can log, store events, send transactions, do threads, manage signals, access DB backends and read configuration data using one API.

    The framework does take ownership of the main loop, and you do need to write plugins for your services. You can, however, register your own descriptors with the poll dispatcher in order to get a callback whenever traffic happens on it. We provide a basic worker thread model, but you are free to launch as many additional threads as you want.

    What did I do wrong? Should I be shot?

  106. I'm still waiting for it... by argent · · Score: 1

    Back in the 1990's, all the rage was about "software components", what was back then a dream.

    Back in the '70s, software components were already achieved, in UNIX pipes and filters. They really WERE as easy to put together as electronic components. Extending the dataflow model to structured data with a nice 2d shell that let you tie your pipes and filters together in ways that the UNIX shell couldn't dream of seemed like the obvious next step. Instead what we have today is LINPACK on steroids. It doesn't matter whether your framework is FORTRAN, COM, or EnterpriseJavaBeansOnHoliday, or whether you spend all your time looking up the parameters of ObscureFunctionThatAlmostDoesWhatYouNeed, or figuring out why ComplexClassYouNeed doesn't support StandardMethodThatEveryOtherClassSupports, or researching the efficient way to do INSERT OR UPDATE in YetANotherNotQuiteSQL, the API always seems to be a huge ugly mess that reminds me of the 47 parameters (or however many it is) you need to specify an open file call in OS/360.

    There seems to be a shortage of people who actually know how to design an API. It's like library designers get halfway through Stage 2 and go "Man, this is boring... oh well, I've implemented everything I need, let's release it and call it done".

    1. Re:I'm still waiting for it... by descubes · · Score: 1

      Unix pipe and filters can't be used to build a complex workflow. They are unidirectional streams of bytes. They are useful tools, but when was the last time you wrote a shell script that used only pipes?

      The original article, laments about the way we program today, by assembling components. I'm only saying it's a good thing that we are finally there. And no, we weren't there in the 1970's as far as I remember, nor in the 1990's for that matter.

      You are right that designing an API is hard. But I would add that it's not just a matter of API design, it's also a matter of use cases. That's why I still see value in someone writing the code she needs, and sharing it with me as open source. Because if the way she did it doesn't suit me, I can fix it. As a matter of fact, I did exactly that just last week with Cairo.

      --
      -- Did you try Tao3D? http://tao3d.sourceforge.net
    2. Re:I'm still waiting for it... by argent · · Score: 1

      Unix pipe and filters can't be used to build a complex workflow. They are unidirectional streams of bytes. They are useful tools, but when was the last time you wrote a shell script that used only pipes?

      Did you miss the next sentence of my message?

      The next step from UNIX pipes and filters was never taken.

      And the procedural model is increasingly a bottleneck. Dataflow design is highly paralellizable and latency insensitive.

      But I would add that it's not just a matter of API design, it's also a matter of use cases.

      Sure, but that's no excuse not to implement standard methods. I'm really tired of digging through documents trying to figure out whether the method I want is called length() or size() (or, when there's separate length() and size() methods in a class (yes, really), whether they're aliases or not). I'm tired of "reverse-hungarian" method typing like toStringA() and toStringW() (not to mention people using "C style" hungarian method names like szName in a language with strings as a fundamental data type). This stuff shouldn't be rocket science.

    3. Re:I'm still waiting for it... by clem.dickey · · Score: 1
      Extending the dataflow model to structured data with a nice 2d shell that let you tie your pipes and filters together in ways that the UNIX shell couldn't dream of seemed like the obvious next step.

      CMS Pipelines did some of this. Not with structured data, nor literally 2D, but you could split and combine flows, and code feedback loops.

  107. Re:Half a Century of Crappy Computing by Anonymous Coward · · Score: 0

    Finished your "Christian AI" yet? why don't you go work on that?

  108. Abstraction Physics states there is no issue by 3seas · · Score: 1

    Abstraction Physics clearly shows that programming is a recursive process of creating and using abstractions.

    There is no issue with reuse but only a need to better generate code that is more appropriate for the application under development rather than from some other intended works.

  109. Isn't fun? Did Don forget the last 30 years? by nicholdraper · · Score: 1

    I'm working at a company that has a few very solid products that need to be updated. I'm throughly enjoying recreating these products with modern tools. The pathetic old micro-controllers that don't have on-board emulators, serial drivers, and interface logic are replaced by chips that are simple to use and way faster. I've started a controller project using the Open Embedded framework to provide the base. I've been able to cross off every standard feature as working in just a week and I am spending my time on just the applications and drivers unique to my companies' project. In a week I already have more functionality than the original programmers provided after three years of work. And for all the "but when I wrote everything I knew how everything worked complaint," is it really that hard to read a few howto's about someone else' project. I've written my own TCP/IP stack, I don't need to do it again, nor do I need to use the version I wrote for a company years ago. I've written a bunch of Ethernet drivers, writing even one again will bore me to death. True there was a sense of satisfaction to knowing that everything in a software product was the work of your own. But, who cares, been there done that in college or before should satisfy that craving. As bitbake chugged along for eight hours putting over 4,000 packages into my product, I couldn't care less that I wasn't even going to bother to read the names of the packages much less write them.

  110. Re:Idiot. Seriously. by ScrewMaster · · Score: 2, Funny

    Do you mean the cretans that pass for programmers ...

    What do you have against people from Crete?

    Okay, okay ... I'll leave peacefully.

    --
    The higher the technology, the sharper that two-edged sword.
  111. Re:Idiot. Seriously. by neural.disruption · · Score: 1

    Even if that was true(and it isn't) there is plenty of people that don't know how to use a bow and an arrow.

  112. Re:Idiot. Seriously. by ScrewMaster · · Score: 1

    Now programming is more about assembling all the previously developed tools to produce a useful result

    How does it go? "If builders built buildings the way programmer write programs, the first woodpecker to come along would knock down civilization."

    More than a little truth in that remark. The further we get away from understanding our tools, the more likely we are to use them improperly.

    --
    The higher the technology, the sharper that two-edged sword.
  113. There's a reason Knuth is a professor... by Greg_D · · Score: 1

    ... and not a professional programmer.

    Here's a little story:

    Once upon a time, there were 5 friends. Each was in the cart making business. Each manufactured every part of his cart from scratch, because that's the way REAL cart makers made their carts back then. Their carts consisted of wheels, an axle, the body of the cart, the traces, and a yoke. Each of these friends happened to make one component of their carts better than the rest, and at least one part very poorly. Making a cart is a time consuming process, so one of the friends decided that he would purchase his worst part, the wheels, from his friend who made wheels the best. His friend thought that it was wierd that his friend would only want to purchase wheels from him, but because cartmaking is a tedious, low-pay job, he obliged. He could use the extra money.

    This worked great. His carts were now that much better because he no longer had the weakness of the wheels to worry about. AND he got his job done faster since he only had to purchase them. So he then decided to approach his friend who made the best axles. While they didn't fit the wheels exactly, they were a good enough fit with a bit of tinkering. And so he went to each friend, purchasing a bit of a cart until he didn't actually have to build any of the parts himself, he only had to get them to work together.

    People came to him because he built superior carts made with the best products, but he wasn't actually working all that hard because other people were making the parts for him. Soon, the demand for his carts was so great that his friends quit making carts altogether and simply made their cart parts for him. They were losing business to his superior carts anyway, and were making parts and subsequently, money much faster than if they were making entire carts by hand.

    And they all lived happily everafter. Until that bastard Ford came along and wiped them all out.

    1. Re:There's a reason Knuth is a professor... by Anonymous Coward · · Score: 0

      > And they all lived happily everafter. Until that bastard Ford came along and wiped them all out.

      No, the VOGONS wiped them all out. Ford rescued one of them, though...

  114. I hate to say it by Anonymous Coward · · Score: 0

    But its called Flash. Check it out. I know, huh? You think I'm crazy. I think I'm crazy. But its not your grandfathers Flash anymore.

  115. Every Programmer Uses Libraries by A+Pressbutton · · Score: 1

    Use Qt/ Win32/ Perl/ VB/ GCC - well just about anything You are using libraries written by someone else. For Perl it is called CPAN and is an advertised strength. The only person who arguably does not use a third party library is someone who programs FGPA arrays without a macro assembler. Engineers do not make their own screws and screwdrivers anymore, and whilst it may well be interesting to do so, the industrial revolution tells us that there are better things to do with our time. The points made on trying to make integration easier are useful.

  116. It's not supposed to be fun by Stormy+Dragon · · Score: 1

    The way a lot of programming goes today isn't any fun

    It's not fun because it's a job. If it was supposed to be fun, you'd be paying your boss to do it, rather than the other way around.

  117. A single word answer... by Anonymous Coward · · Score: 0

    ...Java.
    Sorry, but the whole programming experience started to go downhill when the enterprise and corporates bought into the whole Java way of life, and the Java ecosystem.
    Let me describe three development teams in the investment bank where I work:
    Team A uses Perl, Python and Ruby - their apps get released regularly, mostly work well, are serviced by a smaller team, and the users overall are happy.
    Team B uses C/++ across Windows and Unix - their apps have slightly longer release windows, work very well, have a similiar sized team, and the users remain happy.
    Team C uses Java - their apps always seen to have broken releases (wrong version of that JAR?), require a larger team, and the users are not too happy.

    Having sat in on the code reviews, development and architecture reviews with the three teams, it was very interesting:

    Team A uses at most one framework, and a few libs per project. Code is easy to read, production restarts are quick, and the overall designs simple, clean and well thought out.
    Team B uses QT, Boost and a few in house libs per project. Code again is well laid out, production layout well maintained, and there is very little cruft in there.
    Team C uses J2EE, Weblogic, Hibernate, Hessian, Spring (and a thousand other bits), the meetings are a disaster, each piece of code seems to have a prerequisite three minimum design patterns squeezed in, littered with annotations, and is quite a nightmare to follow. Production management of their apps is a disaster. Architecture seems to be standard Java J2EE practise of a thousand three letter acronyms, and lots and lots of frameworks.

    Sadly, I do have to work with all three teams, and it seems as the IT organisation has a permanent hard-on for everything Java (as the offshore outsourcers promise a thousand coders at bottom dollar rates), guess which way we are going.

    If you love programming, avoid Java.

  118. Re:Idiot. Seriously. by sjames · · Score: 1

    If you were allowed to just take the already invented wheel, that'd be great. Unfortunately, you're building a motorcycle and all you have for a framework is a VW with the wheels fused on. You can make something vaguely motorcycle like if you cut it down the middle and add counterweights so it doesn't fall over, but it weighs 5 times more, will kill the rider if he tries to exceed 20 MPH, has a turning radius larger than a log truck and looks like crap. Yes, it is a two wheeled vehicle with a motor, but actually claiming you built a motorcycle is a bit of a stretch. But thank the gods you didn't re-invent the wheel!

  119. Sometimes you just have to write it yourself by Anonymous Coward · · Score: 0

    I've had a lot of fun in the past year precisely because I have had to implement some of the common lower-level facilities myself.

    Some examples:

    1: I failed to find a super-ultra lightweight library for navigating XML and extracting its data, so I wrote my own. Now I have XML processing with the small memory footprint I need for my embedded applications.

    2: I failed to find a very-low-overhead state-machine framework with modern conveniences, so I wrote my own. I can now write state-machines in a framework with OO-inspired features (such as inheritance of event handlers, and "ctor/dtor" events (automatically-fired enter-state/exit-state events)) that has a very small memory footprint necessary for embedded applications.

  120. I Do it by iconic999 · · Score: 1

    I code in C++ 10 hours a day. So I don't know what you're talking about.

  121. Re:Crappy frameworks, tools and web standards [XUL by Tablizer · · Score: 1

    I found XUL poorly thought out and designed to build browsers more so than CRUD apps. It appeared the designers of XUL don't understand the needs of CRUD apps. I didn't see things that suggested industry experience and scars from time in the trenches.

  122. Re:Idiot. Seriously. by jasno · · Score: 1

    FTW dude.. FTW.

    Why won't /. give me modpoints anymore?

    --

    http://www.masturbateforpeace.com/
  123. Re:Idiot. Seriously. by religious+freak · · Score: 1

    We are all standing on the shoulders of giants walking steadily up the ladder of greater abstraction.

    --
    If you can read this... 01110101 01110010 00100000 01100001 00100000 01100111 01100101 01100101 01101011
  124. Re:Idiot. Seriously. by grcumb · · Score: 1

    [Knuth's work] has a lot less relevance in this age because most of his work is now part of some standard library or framework.

    Amusingly, you could make the same point about Shakespeare. And you'd be just as wrong.

    --
    Crumb's Corollary: Never bring a knife to a bun fight.
  125. Nazi fascist by C_Kode · · Score: 0, Troll

    Cablevision is a bunch of Nazi fascist. FiOS and the like isn't even an option in my area and they know this so if I can and threaten they pretty much just laugh in my face. Cablevision is my ONLY option unless I want something really horrible.

    James Dolan should be deported from the US for being an fucking asshole. The Knicks would probably actually become a winning franchise again. How embarrassing was the Knicks losing to the Nets last night. The Nets were 6-55 before beating the Knicks.

    Good job Dolan!

  126. Re: About real programmers by Douglas+Goodall · · Score: 1

    It is not about real or unreal programmers. It is about systems versus application programmers. I am a systems programmer, and I write BIOSs, bootloaders, operating systems, and libraries. Because that is what interests me. I am not interested in financial applications, or I would be writing in Cobol at some bank. The breadth of skills required to be a functional systems programmers was more interesting to me and some others. There is more to programming than popping up a dialog box and responding to some buttons. I think I am a real programmer. I don't do BASIC.

  127. All these promises... by NateTech · · Score: 1

    ... in every new language's press release of "ease of code-reuse", but it's actually quite hard to do and requires thought.

    Perhaps if someone ever ACTUALLY comes through on that decades-old promise with real modules that work properly when re-used, we'll stop seeing thousands of buffer-overflow retarded bugs in code every year and software security "experts" (who rarely actually FIX the software, just find the holes in it -- which isn't getting to the root-cause problem, but there's good money in prolonging the solution) will have less to do.

    --
    +++OK ATH
  128. Programmers are all Faggy by GargamelSpaceman · · Score: 1

    Something reminds me of Idiocracy, where whenever the powers that be couldn't make sense or use of something, instead of deferring to it, they just called it 'Faggy' and ignored it.

    --
    ...
  129. What the Hell are you arguing about? by Alex+Belits · · Score: 1

    The problem is not that large amount of software can be developed, and is developed using large amount of pre-existing code. It's not even that large amount of software is excruciatingly boring to develop because the easiest -- and right -- way to do it is to use large libraries and write a very small amount of original code to implement the functionality expected from new software.

    The problem is, software is being developed by incompetent people in incompetent manner, and incompetent people use libraries, frameworks, protocols and programming ideologies as crutches, to develop seemingly working software despite their incompetence. Those people hunt for libraries, protocols and code to cut and paste, so they can implement their software despite having no idea how it is supposed to work. It does not matter if code they use is poorly suited for their purposes. It does not matter if it's pre-alpha quality code going into a safety-critical project. It does not matter if those programmers' assumptions are wrong, and they use libraries in unsafe way, produce countless buffer overflows in supposedly not-buffer-overflow-capable language and create massive mess with allocated and unallocated memory. It doesn't matter that they fundamentally misunderstand data formats and protocol they are using, so their software stops working the moment it leaves the environment it was developed in -- often the developer's desktop. The users and management expect those things to happen, and let those programmers continue for months in their perma-debugging cycle until everything is shoehorned into whatever seems to work well enough that the customer would pay for it. And the next person who will have to reuse THAT code, or merely interact with it, is given the task to write more new crud to keep old crud from breaking.

    The problem is not that people use existing code -- the problem is that stupid, ignorant people who should have never been allowed to write software that will be used by others, use existing code to hide the fact that they are unfit to program. And another related problem is that this is tolerated.

    I am a "real programmer". I was a programmer for more than two decades, I studied EE and CS, I had to implement algorithms in C because I was writing programs in C when pre-made implementations did not exist, I had to re-implement them again because I had to make those implementations and they had to be more efficient and generalized, and I had to implement them once more when I had to deal with unusual environments where existing implementations did not work.

    I spend most of my time using and adapting other people's work. I develop software for embedded environments that have all kinds of constraints that usually are not taken into account, and most of my effort goes into taking an established piece of software, making it work there, and building on it. I can reimplement it from scratch. My implementation would be likely better suited for my particular purpose. It may not be that much of an effort to create such a thing. However others' implementations are being actively developed by many people, and are portable between multiple platforms. And by using those existing libraries and pieces of infrastructure I can keep this portability and benefit from ongoing development when I have to extend my software. So I would rather use and contribute to those projects than creating yet another thing with identical functionality and completely different implementation and interface.

    However often a time comes when I look at all available options, and see nothing that I want to reuse. Existing implementations are all made with assumptions that are not and can not be met within a system that I am developing. There are frameworks that I would use otherwise, however they are monolithic, require large amounts of resources, introduce unnecessary complexity, have far-reaching effect on the models and style of development, and for that particular application I only need a trivial piece of their functionality. And then t

    --
    Contrary to the popular belief, there indeed is no God.
  130. Re: not quite by zigfreed · · Score: 1

    You have a head start since TeX has been around for decades and have known shortcomings and strong points. Your software would also need to have the same penetration, expandability, etc. to qualify. But at that point you would realize that you are an idiot to go though such lengths to call someone else one.

  131. Re:Idiot. Seriously. by BlackHawk-666 · · Score: 1

    MacBeth is not currently available as a library you can link into your novel.

    --
    All those moments will be lost in time, like tears in rain.
  132. Re:Idiot. Seriously. by MartinSchou · · Score: 1

    Okay, so what did Einstein bring to the table after the mid forties? What about Bohr? Oppenheimer?

    What Knuth delivered was no just a pair of shoulders for computer science to stand on for the next decades, it was a huge scaffolding.

    Granted, we're taking it for granted, just like we do with all the other crap that we don't see put to use every day. Like sanitation. Imagine how quickly civilized society would break down, if all sewers, waste treatment and garbage collection just disappeared. That'd give you an idea of just what Knuth has provided for us.

    Had his day.

  133. Fly-by by Anonymous Coward · · Score: 0

    Just doing a fly-by here.

    Guess what? The answer is gray. Some problems require the use of "big libraries" and some problems require the use of "minimal surface area" as I call it. Programming has become a game of finding out when to use one approach versus the other. There is no "one size fits all" for any one problem.

    However, my approach to the trade/craft? Do the simplest thing that could possibly work. Get a working prototype early and optimize it as needed.

  134. Hard stuff? by Anonymous Coward · · Score: 0

    What is so hard about re-inventing the wheel?

  135. Dream on. by Anonymous Coward · · Score: 0

    It is heart warming to see how some people describe Indians and people in other localities as stupid.

    I am sure most people tha claim to be able to "solve problems" would not last a week in th cut throat environment of the outsourcing shop in Mumbai.

    But keep dreaming. The market for IT skills is telling you clearly where things are going but you hold to the last stone against the overwhelming current of change like if it was real firm land.

    Programing has been difficult because we were in the infancy of the profession, mechanics and other simlar fields have undergone similar transformations, programming is not immune to this trend.