The Inquisitive Coder – Davy Brion's Blog

Trying to walk that thin line between intelligence and ignorance

Why Don’t We Learn?

Posted by Davy Brion on March 17th, 2009

Most of us are working in object-oriented environments, right? How many of us are working in a truly object-oriented manner? How many of us merely think that we’re working in an object-oriented manner?

I just happened to read the following (who it’s from or where i read it doesn’t really matter):

When i was learning OOP back in the early 1980s, …

A statement like that just makes me cringe. Here we are, in the year 2009 and we’re all trying to continuously get better at our craft, our hobby, our passion, or maybe just our job. An increasingly larger number of .NET developers are basing their improvement on solid OO principles and practices. And i don’t just mean Uncle Bob’s SOLID principles. I’m talking about learning from the experience which others before us have gained 20, 30 years ago. How sad is that? I mean, learning from others is great, but how sad is it that all of this great knowledge is something that only a portion of us seek to learn, and usually only after having been active in this profession for a while.

This is an industry where we are supposed to advance rapidly in our way of working, to achieve better results. To produce higher quality software at a lower cost, ideally striking a balance between short-term cost and long-term cost. Yet we are still having difficulty trying to get the majority of us to accept and embrace what others have learned many, many years ago. Oh sure, we might have achieved a higher level of automation within our development process these days due to the availability of more advanced frameworks and tools. But take a look at the principles that are behind most of these frameworks and tools… Most of them have been around for a long time and it’s a pretty sad state of affairs that these kinds of principles are only starting to become popular in the year 2009.

Personally, i would put most of the blame with the large software vendors. They continuously hop on whatever bandwagon is popular at the time, while always promising increased productivity with their latest products. You can create a web application just like that (*snaps fingers*). Want some AJAX goodness? Oh just drag this component on to your web page and voila, you’re done! Need Web Services? Just put some of these attributes on top of your methods and there you go! Or better yet, let’s just all design some models and generate a whole bunch of code which will save us a tremendous amount of money!

So far, that hasn’t really worked out, has it? Yes, most of these ‘innovations’ increase short-term productivity and best of all, they don’t require expensive training and education. Everybody wins! In the longer term, this usually leads to software which is just waiting to be killed off and rewritten and developers who are even more fucked up than they already were.

This has some pretty interesting non-technical consequences as well. What is the general perception of normal people when it comes to the average quality of software that they experience on a day-to-day basis? A lot of people not only accept the fact that software is often buggy or unreliable, they’ve even come to expect it! Software that crashes? Oh that’s ok, just restart it. Weird error messages? Oh that’s ok, just click on them and they go away. Is it slow? Well everything is slow these days! I’ve often wondered exactly how we ended up with this culture of accepted and expected mediocrity. At least there is one benefit: if you’re not a complete idiot, you’ve got a pretty good shot at a successful career in this field.

We’re always looking ahead for newer versions of whatever it is that we use, newer tools, approaches that avoid problems that we’re currently facing, the silver bullet that is going to solve all of our problems, etc… And that is important, we need continuous progress. It just would be nice if people realized that in order to truly create progress, you need to keep learning from the past as well.

16 Responses to “Why Don’t We Learn?”

  1. Yves Goeleven Says:

    To be honest,

    I think the true cause of this is not the vendors, as selling stuff is what they do and should do.

    In my opinion it’s the lack of real certification and good education. If our industry were as strict as construction or medical, where someone has to sign a building plan or give authorisation for a surgery etc… and is actually accountable for it. That would solve most of these problems. And.. you would actually have to study before you are allowed to sign. How many people in our industry did not even study anything IT related, it’s just outrageous…

  2. Davy Brion Says:

    the quality of education could certainly be improved a lot, but i don’t see the point in ‘real certification’… there are far too many different viewpoints on software development, and they all have at least some truth to it. Who will become the authority to govern this certification process? How many influential people will disagree with this authority? i don’t think this could work in the field of software development… the recent discussions regarding the software craftsman manifesto are a good example of this.

    as for having to study… some of the best developers i know do not have a degree in software development. some of the worst developers i know do have a fancy degree. drastic improvement in the level of quality of education in this field could improve things, but i would never really expect a developer to have a certain degree before i’d be willing to trust said developer.

    also, keep in mind that many of the educational facilities are influenced _a lot_ by what the large vendors are pushing into the market. the vendors are most definitely a very guilty party in this.

  3. Yves Goeleven Says:

    Your distrust in certification is justified, but that is exactly my point, if the certification were anything near to decent, you would not have distrusted it… yes our education is that bad…

    What I actually want to say is that the accountability factor, would force our industry in a different mindset and force everyone to pay more attention to the quality of the product they produce. The entire craftsman idea is nice, if everyone would be a craftsman… but the truth is that most people are only looking for easy money and nothing else…

    Just simply a community that says it shouldn’t be that way, even though that community is right, will not change the way the majority of the people think… something official should be forced upon to our industry, through the governement probably, that forces everyone to create quality work…

  4. Davy Brion Says:

    but what if that offical ‘entity’ (for lack of a better word) doesn’t speak for the entire software development world? Is there any school of thought that does btw?

    the way to achieve quality has always been a highly debated topic, who’s to say who’s right? and what if the people you happen to disagree with are the ones who get to enforce their viewpoints?

  5. Yves Goeleven Says:

    No one can speak for the entire development world, obviously. But I don’t even think that it matters…

    Such an official entity never states how you should do your job, you can still follow any shool of thought imho. It just defines the minimal criteria that you should adhere to and will hold you personally accountable if you don’t reach them…

  6. kilfour Says:

    The software is of poor quality because people can get away with selling poor quality software. Basic economics.

    This will resolve itself over time though. Currently the guys that are paying for the projects, learned about computers during their carreer and when something goes wrong, they assume it to be normal. There’s a generation coming for whom computers are a natural thing and they throw a program out the window for being slightly unresponsive (I’m thinking of my kids here ;-) ).

    The next step will be the realization that it really should not take three weeks time and a huge budget to add sorting to a list control. Then budgets will get smaller and programmers will have to improve, or be out of a job.

    If our industry were as strict as construction or medical …
    It is if you’re developing a product for these areas. The SLA document for a medical piece of software is quite a chunk of bladibla. Acompanied by a zillion required documents that are supposed to increase quality. And they do… at the cost of time. There are less bugs when they go into production because they spend more time on testing in order to meet the SLA’s.
    The quality of the code or coding however is not influenced. So certification is only partially usefull.

    Education can be improved as it probably should be focusing more on Great Habits (K.Beck) than on languages, libraries, the current architectural hype of the moment, etc…, but I also think it is one of those subjects that don’t fit well into a classroom. Akin to music. You can learn how to play an instrument, but that’s not going to make you a good musician.
    Personally, I never made it through the 4th year of secundary school, but I recon I can explain the Y combinator better than any of my university degree carrying co-workers.

  7. Brian Dustman Says:

    I don’t think this is necessarily a failure of the educational system, rather a failure of the industry to place enough importance on the basics learned through a formal education. Like it or not, it is possible to make a fairly good living in this industry without knowing the first thing about good engineering practices or even fundamental computer science concepts like data structures.

    I would take Kilfour’s ‘basic economics’ argument one step further. As long as there are employers willing to hire programmers, ‘engineers’, etc simply because they are a wiz at the newest language or platform, without regard for their knowledge of the foundations of computer science, there will be substandard candidates lining up to fill these well compensated positions. It’s basic economics; if I can get a job that pays well and requires minimal education, why would I bother getting the education? Now there are obviously exceptions to this. Not all good engineers went to school and not all those who go to school become good engineers, but you can draw a straight line between those who have a solid understanding of the fundamentals of computer science and those who are or become good engineers.

  8. Liam McLennan Says:

    My perception is that the people who hire programmers generally do not care about quality. At least not until after their project has failed once or twice. If the people hiring don’t care about quality then there is no incentive for the developers to care about quality.

  9. OO Hacker Says:

    The main problem is that all our new mainstream languages are just overcomplicated.
    Using Wizards and predefined templates help to get startete but developers who do not understand the underlying concepts will fail after a few steps.
    Sometimes you have a guru in the project who knows about the lates features and who uses it to write unmaintainable or unreadable code…
    So less is sometimes more!

    There was and still is an alternative: Smalltalk. It’s pure object oriented (it only has the concept of objects and messages). Most software technologies like refactoring browser, unit testing, UI programming in general was invented in Smalltalk. Eclipse was mainly developed by Smalltalkers, …

    And the next revolution is again developed in Smalltalk: developing web applications on the server with full control on the workflow (including backtracking).
    Have a look at http://www.seaside.st or search for “Seaside” and “continuations” if you are interested.

    The interesting part is that Smalltalk is not a language – it’s a dynamic object oriented system. The language is implemented using messages and therefore easy to enhance. There are free MIT licensed development environments available like
    Pharo http://www.pharo-project.org or Squeak for all major platforms and small devices. Even after 5 years Java and 2 years C# inbetween I have to say that Smalltalk is the most productive platform …

    Commercial vendors include Cincom Smalltalk (VisualWorks) or Instantiations (VisualAge, formerly IBM), Dolphin Smalltalk for Windows, …

    Since anything is based on objects and messages (with only 5 keywords to remember) my expericence from large insurance and automotive projects is that also people who are not developers are able to work with it. With true OO they can care about the problem to solve – and not on how to satisfy the compiler or remember stupid language features/notations, …

  10. Dave Says:

    @OO Hacker: The language being used isn’t the fundamental issue, though. Your last comment about “only 5 keywords to remember” is a red herring; you have to remember a whole bunch else to use it effectively, just as in any other environment. Syntax is rarely the stumbling factor.

  11. fsilber Says:

    The ability to solve problems using abstraction and generalization depends a great deal on the programmer’s IQ …

  12. Santhosh Says:

    It is basic demand supply economics like Kilfour says. Every corporation, individual, group of every magnitude wants software, fast and cheap. To meet these demands, you need to hire in ever increasing numbers. So everyone gets a chance at software development, whether he/she understands OOPS, is only aware of OOPS (which for most people is public/private methods!!!) or only knows that OOPS is a cool acronym. What do you expect? What these people create reflects their lack of knowledge.

    Education does not help either. The theory of computer science is not appreciated by either students or the industry. How many companies will reward you for knowing relational algebra and writing the right and efficient query -vs- knowing SQL syntax to just return results.

    Once the demand moves towards better quality systems and not just “in time” and “on cost” system, things will change. No idea of when that will be ;-(

  13. Yves Goeleven Says:

    Santhosh…

    Education does not help either. The theory of computer science is not appreciated by either students or the industry. How many companies will reward you for knowing relational algebra and writing the right and efficient query -vs- knowing SQL syntax to just return results.

    –> Shouldn’t education teach you what your responsibilities are as a developer or architect, what all of the different options are, instead of these low level knitty gritty details …

  14. Mark Nijhof Says:

    I very much agree with your post, one thing I would also expect that these things where thought at school. I have also written something similar about this topic: http://blog.fohjin.com/blog/2009/2/21/Craftsmanship

    -Mark

  15. Torbjørn Marø Says:

    I think the education is more or less fine as it is today. One of the biggest problems is the assumptions that people can go from university and start producing code directly.

    As many people and the Craftmanship idea talks about we need good mentorship / trainee models and practices. After learning the theory people need to train in real life environments before they become true developers. And the industry (management, customers, etc.) need to Listen to the experienced developers. And experienced developers needs to keep developing – not go over to management or vague architect positions.

    Low quality can be fine in certain situations. Like if you need a website up and running, that will not live forever. But when creating systems that’s going to be maintained we need to let the experts rule.., developer who have proved that they can create maintainable solutions. Management often say they want quality, but they get affected by other conflicting concerns (or concerns that seam to be conflicting.., in the short term) – and this rubs off on the developers as well.

    The young/new developers jump to implement the requirements quickly, disregarding long term quality. More experienced developers don’t want to look bad and are basically overruled by the young guns.

    I’m currently moving from the young once to the old geezers. And I’m trying to find out how to make a difference, and make sure that as I’m slowing down and becoming more concerned about quality, the industry (or at least my company) moves with me. Time will tell how this goes…

  16. Skal vi aldri lære? Says:

    [...] Inquisitive Coder, Davy Brion, er lei seg og frustrert over tingenes tilstand i software-bransjen. Hvorfor lærer vi aldri, spør han. Hans blogpost reflekterer også min oppfatning for tiden, som er noe av grunnen til [...]

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>