The Magpie Developer

I've often thought that software developers were akin to Magpies, birds notorious for stealing shiny items to decorate their complex nests. Like Magpies, software developers are unusually smart and curious creatures, almost by definition. But we are too easily distracted by shiny new toys and playthings.


This is a companion discussion topic for the original blog entry at: http://www.codinghorror.com/blog/2008/01/the-magpie-developer.html

"Doesn’t that mean that if you stick with Java or C# you will not have to worry about any of this? "

A little bit. At least for the next five years this will be the case. I’ve noticed that C++ almost never adds anything significant anymore. the Java folks seem to have been burned by implementing generics and seem a lot more hesitant to do continuations. C# is newer than Java and they seem to throw stuff in at a pretty consistent basis.

What I take from this is that languages accumulate some momentum and it becomes harder and harder to change direction the longer they have been rolling. Libraries, legacy code and backwards compatibility are big burdens for successful languages.

I bet over half of the code in the world is still written in COBOL!

Well, at least a third…

Talk about old and dull, but it still keeps processing those millions of insurance claims every night.

I’ve grown weary of the new Paradigms. I am happy as long as I can code, compile, run and test without much hassles. I don’t even want to learn the intricacies of new features, I just want to know what’s the new syntax for my old tricks. What’s the name and syntax of the new queue, deque, list, arraylist, collection, stack whatever you want to call it… How do I concatenate my strings and index them…

Jeff,

I am curious as to what exceptions would qualify a transition to a new shiny technology as not MagPie? If the new shiny technology would say reduce code complexity and developer effort by 10% would it not be worth it? Or is only bringing on the new technology just for the sheer fact that it would be “cool” constitute as being MagPie?

What are your thoughts? How do the exceptions fall into place?

The only “shiny” new trinket I use these days is Notepad++. Just give me Visual Studio and Notepad++ and I’m pretty happy.

The worst part about chasing all the shiny objects is that eventually it wears you down to the point that you start to dislike that which you loved before…

I bailed on programming for a few years just because I got so sick of the continual chase, year after year after year. I’ve had a long enough vacation now that I feel the love again and am getting back in. :slight_smile: Started off with some nice easy x86 asm and C (where most of my time was spent before), then tried some Ruby on Rails (ugh, what WERE they thinking? Easy to do “quick and dirty” web stuff, but maintainability is a nightmare), and finally settled on Java (which appears to have become a nice stable business platform, entirely different from the Java that was coming out just as I was bailing on programming…).

Excellent post. It’s important to always that real-life experience is part of the “best tool for the job” evaluation and will in many cases out-weigh subtle “fewer lines of code” benefits.

Well written and a good point. I’ve often thought about the same thing - to use all the latest toys, I have to spend more time researching/learning those then writing actual code.

Lately I’ve started to use plain “vanilla” Visual Studio - no fancy refactor tools, no snippet inserter, no nothing. And I get along just fine.

I honestly think this was all obvious to real developers from the start but it was again a well-researched post. As you have said you are blogging for your own sake, there’s really no point in saying stuff like “Well. Duh!”.

I am a little curious though; what makes you think software developers are smart and curious, almost by definition? What’s the definition you are using, really?

It’s turles all the way down. For every developer getting sucked into the new and shiny, there’s eight managers helping weight down the bandwagon hoping for the silver bullet to solve all their problems.

Shiny new things look really appealing when you don’t have a life. Instead of Magpies I was thinking of Monkeys that get fascinated by some shining object in a stream.

God help us with what the VS team is dreaming up. 2008 doesn’t seem to have one thing that isn’t shiny, new, and totally useless unless you have an IQ of 170.

Hear hear! Vanilla Visual Studio!

Seeing Scot’s big page of shiny stuff, I just have to browse through them! Maybe I should try out something better then notepad paint…

The thing with some of those programs is that once you’re used to them, there’s no going back! Good example would be tabbed browsing.

As to Sander:
Have to copy XML text in Visual Studio. Glad to use the addin “Smartpaster” which splits the lines and adds double quotes. Did save quite a bit of time.

The flip side to this is: “what are the important changes that should be seriously considered as reasons to change”. And since it is easier to use hindsight than prescience rephrase to “what were the important changes of the last 50 years in software development?”.

I would suggest, in roughly chronological (and probably importance):

  1. Representation of the software as an abstraction from the hardware it runs on (Basically compilers rather than assemblers, the world of fortran and C plus all those that died out).

  2. Functional languages, principally for their enabling of the elite gurus to some of the more potent tools and testbeds on which many of the later improvements would be based.

  3. Provision of large API’s not simply as a means of interacting with the OS but to do more common tasks/data structures independent of the actual environment.

  4. Managed Code. I.E. letting the system handle memory allocation and deallocation for you, the resulting sanity and safety checks that result.

  5. Sophisticated Integrated Development Environments where the code/build/[test|debug] cycle can be made faster and simpler.

Whilst I like OOP in many ways I have not included it because I don’t believe it justifies it’s presence amongst the above (though you could argue a well designed OOP language can make the the provision of the IDE easier/faster compared to many of the alternates)

I have not included the provision of code/data in electronic form (i.e. moving off punched cards) since the change was obviously massive but was more a change in the hardware.

IT should be noted that almost all of these changes required the increasing power (and readily available fast memory) of the computers of the time so you could argue that anything which enables moving to the latest shiny new computer hardware is good. As such you could argue the highly portable nature of modern languages are the most importance change…

I do not know where UI frameworks should feature here. They seem kind of orthogonal to the concept (since they improve in a similar fashion throughout but do not take over most needs in the same way (the creation of compilers eliminated the need for the vast majority of people to need to code in assembly, the provision of WIMP did not remove the need for decent command line tools in the same way). Certainly knowing how to do a quick WIMP system became an important part of many developers skill set.

In the same fashion Source Control must go in there somewhere as the most useful tool, but no really a programming paradigm shift like the others.

I think the really elite programmers use low level languages and assembler/byte code… and perhaps wonder why so much time is wasted on all this new flashy jazz. :stuck_out_tongue:

Ruby on rails is a great example of something I deemed a complete waste of time when it came about… I couldn’t see anything great about it other than another learning curve.

Stick to the tried and tested… to quote the old addage “if it ain’t broke, don’t fix it”.

I’ve never needed a tool beyond the latest Visual Studio… although I will use libraries etc… its a bit different… stuff like OpenGL, flex, bison etc… none of which are shiny or new. :slight_smile:

What’s all this “buying books and taking courses to learn a new language” business I hear mention of? Over 20+ years of programming and learning new languages (from assembly onwards…), I’ve never done either of those weird things :slight_smile:

I think its amazing with all the shiny and new stuff that I still find myself using vim/emacs and sed/awk when I really get backed into a corner.

Jeff , you must admit that all “shiny new toys” come with additional features and by your definition : “software developers are curious”.Thus we (software developers) can’t stop asking “what does this new feature do ?” actually meaning “how much of my work does this new feature do for me” .The hacks they provide make our day since we are lazy and wouldn’t want to do them manually.The next batch of new toys come out and and the cycle continues.

Erik I wasn’t trying to say one approach was better than the other in any particular field. I’m sure one could find plenty of examples of one approach being selectively better than the other at different times depending on the metric you used. And frankly I don’t think the hydraulic flight stick really goes against any particular point I was making – mine was a point about cultures of production, not specific things produced.

Jeff , you must admit that all “shiny new toys” come with additional
features and by your definition : “software developers are curious”.

Jeff’s a .net coder, so he’s probably installing vs2008 and wondering what it’s broken; then the first SP will be out; if it’s worth learning LINQ; what Silverlight will bring to the table etc etc!