July 30, 2007
Ducklings and goslings imprint on the first creature they see shortly after birth.
[Austrian naturalist Konrad Lorenz] discovered that if greylag geese were reared by him from hatching, they would treat him like a parental bird. The goslings followed Lorenz about, and when they were adults they courted him in preference to other greylag geese. He first called the phenomenon "stamping in" in German, which was translated to English as imprinting. Lorenz thought that the sensory object met by the newborn bird was somehow stamped immediately and irreversibly onto its nervous system. In other experiments, he demonstrated that ducklings could be imprinted not only to human beings, but also to inanimate objects such as a white ball. He also discovered that there is a very restricted window of time after hatching that proves effective for imprinting.
Imprinting is a powerful biological imperative in certain species, particularly geese and ducks.
But humans also succumb to imprinting, in our own way; in computing this is known as Baby Duck Syndrome:
Baby Duck Syndrome is the tendency for computer users to "imprint" on the first system they learn, then judge other systems by their similarity to that first system. The result is that users generally prefer systems similar to those they learned on and dislike unfamiliar systems.
I'm as guilty of software imprinting as anyone. I was provided an evaluation copy of Visual SlickEdit, but I couldn't bring myself to try it out because I have already "imprinted" on the Visual Studio editor. I'm still learning ways to be more effective in my preferred editor; is it really worth my time to divide my effort and attempt to learn a new, unfamiliar editor that I may not even ultimately use? That's the software imprinting dilemma:
Baby duck syndrome affects the way you learn to use computers and software. It can make it hard for you to make the most rational decisions about which software to use or when the learning curve of a given thing is worth the climb. In general, it makes the familiar seem more efficient and the unfamiliar less so. In the short run, this is probably true -- if you're late for a deadline, the best thing to do is not to switch to a new operating system in the hopes that your productivity will increase. In the long run, it's worth trying a few things knowing that they won't all work out, but hoping to find the tools that match your style best.
It's impossible to understand the alternatives when you can't muster the energy to get past your own software imprinting. You can't rationally compare alternatives with no experience in the alternatives, and software imprinting robs you of that vital experience.
There are periodic Usenet group debates about programming editors where various people will proclaim with conviction that their preferred editor is the best. In some of these debates I've asked some of the believers of various editor faiths if they'd ever tried various other alternatives. Well, no. They had never used CodeWright or Visual Slick Edit or Multi-Edit or assorted other editors. Some claimed to have used another editor about 5 or 10 years ago, but not the latest version.
When I started asking around, I discovered that it's hard to find people who have used recent versions of two major editors, so it's hard to find anyone who can intelligently compare the features of various editors. I use Visual Slick Edit personally. There are things I want it to do that it doesn't do. But I don't know whether any other editor can do all the things I like about Slick plus the things I wish it did.
Maybe it's time to experiment with new operating systems, new applications, and new editors, even if we're happy with our status quo. We should put allegiances and familiarity aside, and push ourselves harder to go beyond our software imprinting-- otherwise, we literally won't know what we're missing.
Posted by Jeff Atwood
You have just explained why people still use Visual SourceSafe.
It's really sad to see that imprinting is such a strong characteristic of even *developers* that VSS still even EXISTS, especially given the existence of products that are superior in every way *and* free.
This is why I started playing with NetBSD at home. I liked it enough that it's the only thing on my main desktop. I do need to learn more about editors for it though, because I'd really rather use KDevelop than Vim for programming projects, but I still hate the automake system...
I think our IT department imprinted on Lotus Notes.
I agree that acquiring some level of experience with different editors/IDEs is very valuable. It has made me much more critical and curious about my user/developing experience, and how to make it better: shortcuts, add-ons, habits that might need changing...
I'm paid to work with C#/Visual Studio, but try very hard to come back to Java/Eclipse as much as possible for personal projects. I had experience working in Eclipse doing Java for at least a couple years before getting into .NET and thus VS2003. At first I hated VS because it was so far behind (or missing altogether) several of the Eclipse features that impressed me. With VS2005, the gap narrowed, and with ReSharper even more, but then my time working with Eclipse is also shrinking.
Meanwhile, I have never felt comfortable in either without having a session of UltraEdit open at the same time (for notes, random text/non-code files, extra (and cross-session persitent) clipboard storage, as well as certain editing function entirely missing from VS (and Eclipse) or just more comfortably done by me in UE (columnar-editing anyone?). I was imprinted to UE early on by my father using it for Java before Eclipse hit the community.
I now use a Macbook Pro for this exact reason. As a security professional, I need to be proficient in the top 3 desktop OSes or risk looking silly if I ever run across a Mac that I need to assess/audit. I also need to be able to run any tool out there on its native platform.
I'm trying to fight the OS religion by using all three on a daily basis (on the same laptop!). I'm a long time vi/vim user just because it is almost always available on a *nix system nowadays while emacs isn't.
I think the attitude of "right tool for the job" goes well with fighting the tendency to imprint on a given technology.
Weird, I think I didn't have that baby duck syndrome. My first IDE in college was visual C++ and I hated it. Then I used netbeans and I kinda tolerated it (damn! that thing's slow). Struts studio was the next IDE and I liked it very much, until I was forced to use eclipse. Now I LOVE eclipse. Maybe now I have the duckling bonding with this IDE, but it's my 4th IDE and I guess it doesn't have much in common with visual c++.
In addition to thinking of this in psychological terms (imprinting) it's also useful to think of switching editors in economic terms (switching cost: a href="http://en.wikipedia.org/wiki/Switching_costs"http://en.wikipedia.org/wiki/Switching_costs/a).
You have a point.
Thats the reason why I get upset when you say that 'Installiing an aplication in OSX is not designed well (no at all designed?) and someone else gets upset when I say that Vista security warnings are a pain...
By the way, I think one side effect of the Software Imprinting Syndrome is that we tend to follow the steps of the software imprinted in us in ALL THE PROGRAMS WE BUILD in the future. This, I think is more felt in GUIs (partially because they are the most visible parts).
When I design a JSP the buttons are always on the far right and when a Windows-imprinted person does, they are almost always on the center.
PS: Why 'Enter the Word' is always 'Orange' here??
D. Markle: dude, I CANNOT get my brain around anything other than VSS! I need help! I love VSS and have NEVER had a corruption issue. Everything else seems unreal and overly complex for just a couple of users!
This is a great post, Jeff - and a great term that I had not encountered before; thanks! There's a flip side, however, and I hope you'll write about it. That is: those who are perpetually trying new things in search of the "best" can have trouble developing expertise - or even fluency - with any one of them. I think developers tend to suffer more from this than from BDS.
I dunno, I can see this happening to me in some ways but not in others.
C++ is still close to my favorite language, quite probably because it was my first. C# is giving it a run for the money, but largely because it feels like C++ minus the bad parts.
On the other hand, you spoke a lot about editors, and I don't think I've imprinted at all on those. I started with a DOS based Borland IDE, but when I changed schools worked more with NEdit and g++ which I ended up liking better. On my internships there was CodeWarrior and ProjectBuilder. CodeWarrior was decent, but I didn't develop any attachment to it. Then when I finally started doing some coding at my current company it was with VS2003, which I upgraded to VS2005 after a few months.
I'd probably be hesitant to try another editor now (other than a new version of VS) but it's a bit late for it to be considered imprinting...
Steve Bush: The IT department at my company also imprinted on Notes. Unfortunately, I imprinted on Outlook 2003 long ago.
I really don't think people imprint on software. The situation with the geese and ducks seems quite different; they have had their entire biological behaviour altered as evidenced by the statement regarding their attempts to court with Lorenz.
With software, I believe the hesitancy to move on is simply (a) fear of the unknown and (b) laziness. As long as we don't know for sure that our software tools are holding us back, we will stick with them because it seems more difficult to switch and learn a new environment and we are afraid that that effort may be wasted if the tools don't pan out. I don't think most people are beholden to a software environment with the same level of passion as the term "imprinting" seems to suggest. People ask me why I don't install and use Ubuntu; the answer is just that Windows does what I need it to do and so I see no tangible gain to switching. Switching would take time and effort and would likely not provide me with anything that I can't get through Windows so I'm not going to make the transition.
I wouldn't dream of using VSS even for a single-user project, since I use multiple machines and multiple operating systems. However, I might just be imprinted on non-distributed concurrent versioning systems ...
So, I will be suppressing my advice to VSS users until I've worked with a distributed system for a while. After all, they find our use of non-distributed systems as horrifying as we find VSS (and other non-concurrent or pseudo-concurrent systems) ...
I regularly use Visual Studio, Emacs and Eclipse in their latest versions. There are still things I can accomplish easily in Emacs which are very difficult to do elsewhere (editing binary files, parameterizable keyboard macros, regexp search and replace, running external filters on a selected region, etc.. etc...).
Surprisingly I can also make this statement about eclipse. I can no longer easily digest a chunk of Java code without the ability to expand the call hierarchy of a function or find all references to a variable or a class without waiting for and endless churning and indexing of god knows what. Amazingly intuitive refactoring that just works.
I'm sure there are things VS is good for but so far I haven't discovered them.
Switching would take time and effort and would likely not provide me with anything that I can't get through Windows
Yes, but how can you *know* that without switching, at least for a little while?
I used to also have UltraEdit open all the time... But now it's Notepad++ which is also free :)
Imprinting or Cost of Switching or whatever you wanna call it has deep implications for developers as well.
If one is trying to replace (or at least provide an alternative for) some well established application, one should not try to be too original. When the user finds out that the shortcut keys xe memorized (or got imprinted in xis muscle memory) are not working, xe is instantly disgusted of the prospective replacement. Et cetera.
I tried SharpDevelop and it was awesome and it had all those great features not even occured to VS guys, but, ya know. It also had all those crazy key combinations that didn't even make sense (yeah, I don't even see CTRL-K+CTRL-D -- all I see is blonde, brunette, redhead...) and the IntelliSense (sorry, that's a (TM) so it's Code Completion, yep?) just didn't behave right, ya know? So SD's gathering dust in my HD while I kid myself that I'll give it another whirl sometime.
When Opera browser first went free (and stopped sucking at the same time) its devs had insistently insisted on not implementing CTRL-Enter for address completion. They honestly believed their way was better and more intuitive. This was almost a turnoff. Luckily they gave in after a few minor versions.
There's no question about which editor is the best. The best editor is vi.
"I CANNOT get my brain around anything other than VSS! I need help!"
Jeff, dead serious. I am forced to use Clear Case, which bites.
VSS rocks! (for = 3 people).
Loved this once again Jeff, what a great article. I hope your site isn't imprinting me though, as I'm starting to get strangely addicted to your codinghorror logo. keep up the good work...
The thing I'd worry about is, by acquiring a broader experience in my tools, I might become a jack of all trades, but master of none. But I suppose that's a question of balance.
It's no good to be super-efficient in one editor, but virtually useless in anything else. But it's also no good to be 50% as efficient in each of 5 different editors, when you're using just one of them 95% of the time.
So the key is probably to develop passable usage skills in a variety of tools, without neglecting your "primary" tool. You may be able to pump up your efficiency by filling the gaps in your favorite tool's functionality by booting up others as needed.
For example, when I am working in SQL, I usually have a query editor, a notepad instance, and an Excel instance open. The query editor is used for the bulk of the editing, but when I need to query all but two of the columns on a table, I can copy the column list out of a schema browser into excel, add commas and aliases to each column in the adjacent cells, use notepad to replace the tabs with nothing, or spaces repetitive manual typing or even pasting.
with nothing, or spaces repetitive manual typing or even pasting.
with nothing or spaces. All with minimal repetitive manual typing or even pasting.
Software imprinting is one thing that, for whatever reason, isn't a issue for me. I'm a geek at heart basically; I enjoy trying and getting proficient with new OS's and applications. I can use GUI and the Command Line, KDE/Gnome/Windows/Mac OS...
...but that said, IDEs take some getting use to, so I can't really switch between them willy-nilly on a given project. At the moment I'm using KDevelop under Debian. The hardest part was getting my head around the automake/separate compilation process, but once you've done that, it's easier than doing it by hand.
I'm suffering brain tumors because I daily use Visual Studio with C#, Eclipse with Java, Xcode with Obj-C++, and an IDE that I created for editing web pages. I hate them all. I've even sampled a few other tools (my biggest flirt was to try command line unix using emacs as the core editing tool), and I can only say that they are all universally awful.
I know that its bad form to use swearing in a post, but I really need to describe the available dev tools in lots of four letter words that would turn a sailor's hair disabled system grey.
We're software developers and develop the tools that we use - so the people that we need to point accusing fingers at are ourselves. Our lives are already hard so why are we making it harder by writing unusable software that we have to work with? Something seems crazy about that.
But while programmers remain poor software interface designers, this horrible situation will remain.
Steve, I can't believe you're serious.
SourceSafe is urine. Pure asparagus-tainted, post-workout, semi-dehyrdrated urine.
Let's just forget about the corruption issues for a moment. Let's forget about the stale-locking issues and all of the ludicrous artificial contention issues on project and solution files. Let's also forget about the poor performance over WANs, and forget about the incredibly annoying "VS Integration" that makes it all but impossible to easily copy your project to another location on your disk.
The real reason you need something better is this: VSS can't version directories. Without that feature, what is the point? I mean, really? You delete a file or folder in VSS. Where'd it go? Uh, somewhere. Oh, and if you add another file back to your project, VSS wants to know if you want to "recover" the old file? WTF? It's a different file, and the product should know that. What if you want to see a copy of your project as of a certain point in time? No way to reliably do that in VSS, not even with tags, since directories are not versioned. And don't tell me that you never go looking for old versions of your code -- the reason you don't do it is because you don't try because you know you can't.
If you want something simple for 3 users, download a copy of Subversion. Run the default install, without apache or BerkelyDB or any of that crap, just do a FSFS repository on your LAN on a file share, just like VSS to start. Run a copy of TortoiseSVN to integrate it with your desktop. Run AnkhSVN if you want VS integration.
I swear to God, I was interviewing this guy 3 months ago for a lead developer position. I asked him, "What do you use for SCC?" He said "VSS". He was *quite* proud of his "repeatable" build management and code control strategy, so I asked him what he did when a developer moved a file from one directory to another. He said, (I shit you not), "I punish that developer." This man did not get the job.
Spend some time working on better tools, and you will be a better programmer. Obviously you read this blog, so you're well on your way. Now take it to the next level. 4 hours spent on SVN, and you will never ever go back.
Sorry for the long post, but VSS is one of those things that just pushes my buttons.
My editor of choice is vi/vim, which I have user for ... well forever.
My opinion is that you cannot *try* an editor like vim. You have to use it day in, day out, learn every new trick you can, talk to all your friends that use it, and then over time you "get it" and editing becomes very fast and productive.
Until that time you are less productive.
The investment is so high that IMHO it doesn't make sense to "try it" and see if its better than what you are using now.
But why would anyone want to use anything but OSX? ;-)
Joseph, that's a cult. Totally different thing!
I've been learnt Microsoft stuff at school (VB, ASP and Access). We learned also with Oracle database.
After my training (Visual C), I got a job to work on OpenVMS with Cobol, DCL and Fortran. It was very interesting... Then I've been decided to install Linux(Red Hat) at home. Then I've been learnt many interesting tools like Perl, VIM...
I want to buy a Mac. I want it to continue to explore computer world. And also it's easier to use an Ipod with a Mac than Linux :-)
If someone really likes his job, he (or she :-) )find a way to improve himself, try new technics, push limits...
It's the reason why Christopher Colombus discovered America...
My chinese is worst than my english...
I agree with you because at first I thought linux was not for me but when I tried I love it more than windows and use it more and more for my programming tasks.
Either "The Pragmatic Programmer" or possibly "My Job Went To India" recommends learning unfamiliar development environments for precisely this reason. To avoid Baby Duck Syndrome. If you're used to Ruby and TextMate, build something in Java with Eclipse, etc. It's very tricky. The more gear-switching involved, the harder it will be. It's not the language or architecture that'll throw you, it's the little things. And it's hard to stay completely up to date in two languages at the same time. It's like being on top of slang and pop culture in both America and Japan at the same time.
Wow. You've just described every ColdFusion developer.
I can find examples of software imprinting in my own life, but at the same time I can find examples of bucking the imprints, as well.
My first experiences with a computer were with a TI-99 4/A, the first OS I really used to any extent was on the Apple II clones, the first GUI was on an Apple IIgs, the first code editor I used was emacs.
I'm currently using Windows 2000 and Vista (work and home, respectively) for my OS, and Visual Studio for my coding environment.
That being said, my switch to Intel was mostly due to the release of Doom and previous exposure to Wolfenstein 3D. My use of Windows was also largely related to games around the time DirectX 3.0 became widespread. The use of Visual Studio is largely related to exposure at work.
Today I find the largest block to switching any part of my development environment (OS, IDE) has to do with the fact that I find it easier to learn new languages than to learn new APIs. I've found that even most of my resistance to Java and many scripting languages has had to do with APIs more than the languages themselves.
The imprinted duck (forever stuck on what they learned at first) and the magpie (forever going after that next shiny object) represent the two extremes of the spectrum of tool use in the software development community. The important factor in this issue is understanding that the spectrum represents the use of tools.
What works best? There should be some criteria for choosing. This criteria should be based on economics (cost of switching minus the cost of extended benefits). It should also be based on the user satisfaction and the quality of the results. Why isn't there more discussion on that level?
Without some kind of objective analysis in the project we end up with the religious wars that we have been plagued with since the dawn of the computer nerd (e.g.: VSS is evil; no it's good!).
"There's no question about which editor is the best. The best editor is vi."
One of the things that really annoys me about openSUSE (or at least my particular installation, or even my own lack of skill) is my persistent inability to successfully compile Vigor. It makes Emo Kid cry.
D. Markle: thank you for the boost, at least I admit I need help.
What freaks me out (and you have solved this by outlining the precise steps I must take) it all the different stuff I have to do and load with some of these packages. I tend to go with as few "moving parts" as I can in order to give my brain relief and my life simpler.
I will do as you say!
Jeff: Thanks for letting this blog be a "rehab center" for those addicted to VSS!
Yes, but how can you *know* that without switching, at least for a little while?
All you ever do on this blog is express your thoughts by writing English. It might be that you're really best able to express yourself by writing in Japanese, or maybe Swedish or even Polish. How can you just continue to write in English, without switching to Japanese or Polish, at least for a little while?
It's a tradeoff between effort exerted and information gained. A lot of times, it is perfectly rational to choose not to exert the effort.
I think imprinting is not permanent, or I'd still be pining for the Commodore PET.
I actually spent a whole summer programming PETs, but after a two-year hiatus, my next exposure to microcomputers was a 512K Macintosh, and I managed to imprint all over again.
It's not imprinting; it's simply laziness. We get comfortable with something and don't want to spend effort to switch. Trust me, I know about this personally!
When writing apps in .NET i can't use anything other then VS2005. I tried few months ago to setup a PC with only free software (or at least cheaper alternatives to MS products). I almost succeeded but i couldn't replace VS. Whatever i tried it was like writing with my left hand: i could do it but it's clumsy and slow.
In my career, I have had to work on diverse systems, and it seemed like every time I learned an editor, I had to go work in an environment where my favorite editor was not available. I went through emacs (with a profile so customized that I never learned emacs), Edit on the Apple II, MPW, CodeWarrior, Brief, vi, Visual Studio, XEmacs, Project Builder, Xcode and Eclipse. I have learned never bother to learn command keys, shortcuts, macros, or anything else that I am likely to need to relearn. If I have to do something hard, I use the editor I have and write tcl code to do the hard stuff. Keeps me sane.
Yesterday I listened to an episode of In Business (program on BBC Radio 4) consisting of an interview with Tim Smit. At his company (which runs the Eden Project in Cornwall, UK), every year his staff have to read two books see one film and see one play which other people would say is not in their sphere of interest. The idea is to try new things, get new perspectives, avoid being stuck in ruts.
Picasso said: "I am always doing that which I cannot do, in order that I may learn how to do it."
Then again, I suspect some programmer also said: "I like eating, I like my kids to eat, and I like to avoid having my house repossessed." Learning new things is great, but it generally doesn't make money in the short term.
Oberon, Forth, and friends, they all expand the mind and remind break out of any mental ghetto.
Even Pascal is good as a /temp expirence . . .
Be 'agile and mobile in thought, and try make sure your own brain is not a stubborn limitation.
By the way "stubborn" is just a complex spelling of stupid.
I have to agree with Matthew Cuba. Imprinting solidly onto a single way of working is one thing, but at some point you'll have to be able to do something productive. I could spend all day trying new languages/IDEs/etc that somebody's been evangelising to me, but what about just settling on something for a while and just be productive?
I'm not saying a developer can stay stuck in the stone age forever; you have to advance with your time. But to a certain degree.
Moreover, most of the time I've tried some new stuff I ended up not liking it very much or finding the advantages did not outweigh the disadvantages. Given that experience I won't be hard pressed to 'try something new' unless I find the 'old' to be broken or if I see some new technology significantly improves over what I'm using.
Our IT department imprinted on Microsoft Bob.
Interesting notion about imprinting.
I'd say personally that it isn't laziness or stubborn resistance to change but rather an inclination to return to the tools that have served me well - until they don't.
For instance, I used vi for several years and it was fine as an editor. Then I moved to nedit and that was powerful too, but in a different way. I tried SlickEdit for a week at the encouragement of a coworker and found it to be better (though I have to admit that the muscle memory editing command of vi would surface periodically - that was interesting) than the other two. I was a bit of a SlickEdit evangelist after that.
When I started doing windows development, it took me a few weeks to become comfortable with Visual Studio, and now that I've been using it for a good while now, I'm very happy with it. I haven't sought out another editor lately (though notepad is quick and dirty and gets some attention during the day) mainly because VS has served me well.
C# is the same way. I wrote in C++ for about a decade. A little perl here and there and sometimes an application or some scripts in something else, but C++ and perl provided solutions to the problems I needed to solve. Now that I've been writing almost exclusively in C# for a bit, I tend to look for solutions in C#, since it is convenient and the syntax is fresh in my mind.
I like the idea of trying new languages, etc. and have been branching out a little on my own at home by running parallels on my mac and trying out other OS's and learning a little Applescript (verbose stuff) and XCode. Not sure I'll every write anything professionally in those, but it allows me to see how things are outside my own 'happy place coding environment' where I know the editor and the OS and language. It is probably good for the brain too - at least I hope it is.
Heh, we went from complaining about an extra feature on Google that was only useful to advanced users who learn how to use it to a post about needing to try new and different things, even operating systems...just because they might have extra features that take effort to learn.
David -- good notes about VSS (if a bit heated... you're passionate!).
Steve -- a really good primer on source control can be found from Erik Sink here -- a href="http://www.ericsink.com/scm/source_control.html"http://www.ericsink.com/scm/source_control.html/a
Have a read, folks in the biz know who Eric is and his opinion is generally well respected. His day job is writing a source control package, so he's biased, but he puts that up front and compares packages like VSS, Subversion, CVS, and Vault (his company's package). It is a great tutorial on the hows and whys of source control.
Jeff - good article. I think we all try to get beyond our own bias to see the Dark Side once in a while and maybe wonder if they have better stuff. I think sometimes the Mac folks wonder if you have too much of a Microsoft imprint going on and view the Mac through that lens too much, without realizing that you do so.
I came from University with a background in Unix and with a love for Emacs. If you couldn't do a thing in less than 3 keystrokes, it wasn't worth doing and who needed a mouse?!
Since 1995, I've invested enormous effort in "patching" Visual Studio to make it more Emacs-like, until VS2005, where some things are just plain impossible. Ah well, time to learn new tricks (Ctrl+S is save, you say .. right) :)
As for VSS vs any-other-SCC; I used to hate VSS from the first moment I used it, figuring this must be some sick joke from M$ .. until Perforce entered my life and sweet angels sang my joy from the rooftops (or someting).
How do I know I wouldn't be happier living in Brazil if I've never tried it?
I'm sure Brazil is a fabulous place. I'm sure I'd love it... if I knew the language, if I could get a good job, if any of my friends or family lived there...
It's an exaggeration, to be sure, but switching -- even experimenting -- carries a lot of cost. And there are so many other things in the world to learn than computer languages, editors, and operating systems.
Like the Samba!
My take on this is a little different, but I'm surprised I haven't read it in the comments yet... I see users tending to be imprinted on the software/systems they are using now especially when discussing providing changes to these same software/systems. For example, at my job we have a convoluted system that relies WAY too much on Excel workbooks.
The person in that dept who manages use of it COMPLETELY only knows how to think about any changes to that system in the terms of how that system is built (why don't we just add another Excel workbook? NO!!!).
Interestingly enough, the person in my dept (IT) who developed it COMPLETELY only knows how to think of any software in terms of Excel workbooks (once again NO!!!!).
My boss, myself and a few others were hired later to make sure that some one-minded takes on technology NEVER happen again :)
Needless to say, I completely agree with the commenters that have used various programming languages/IDEs/OSs/fill-in-the-blank. It really gives you some fresh perspective. I had a job (and still do the work on-the-side as contracting) doing Java development, but by and far all my work has involved ASP (years ago), ASP.NET, SQL Server and some other stuff.
I also agree with the commenter that said that when you switch back and forth between various things, it is hard to get fluent in one of them. For awhile, I was doing VB.NET at work, C# for a night-time contract, and Java for another night-time contract. Took a little bit every time to remember the shortcuts for debugging, compiling, etc. :)
Last thing - don't we all remember the "Everyone's Technology is Best" from February? It seems relevant to this. Here was my response to it back then:
Is it imprinting or is it just being practical. Text editors, development environments, operating systems. There of course is the comfort of the familiar, but there's also the pressures of being productive which stand in the way of "fiddling with the new x". I'm very productive in Microsoft's tools writing C and assembly language. Put me in a Linux environment writing Perl, Java or any other unfamiliar language and how many weeks (months) will it take to be productive again? Projects need to be finished, bills need to be paid. Only the young people without the pressures of making a buck have the freedom to climb the steep learning curve over and over.
As far as web development goes, I've tried about 5 different editors to include Dreamweaver, GoLive, Arachnophilia, even the little code editor in CuteFTP. Dreamweaver is still my favorite, but this isn't necessarily because it's better, as a matter of fact I used GoLive a while back to do some things to pages that Dreamweaver didn't do half as easily. I got suckered in by the FTP feature(I never use the WYSIWYG anyway) and after a while that just become my DE of choice. I think the biggest thing keeping me from using other editors is that I would have to get used to a new code-coloring key, and that would be downright painful for me.
I just hate OS's that doesn't work with HJKL keys, don't save with :w and do nothing when pressing Esc... am I imprinted? I don't think so, because everything else sucks... yeah! you heard me! Linux/SunOS/Windows/Max are just Frontends for Vim ;-)
I wonder if this is what drives the brace style wars.
I first read and used Alman style braces (Actually Begin End type of keywords in pascal). My brain got set up to look for the brace to find where the block begins and ends. Now I have a hard time reading code with KR style bracing, where you just look at the overall indentation. If I had read and used KR style first, I wonder if that would make a difference.
I believe that we imprint on the first tools we use. I cut my computing teeth on 8-bit platforms where BASIC was the "operating system", then moved to AmigaOS 1.3 at home and DEC Ultrix in university. Both had GUIs but really demonstrated their power at the command line shell. In fact I used AmigaOS as my primary OS in one form or another right through to early 2000 and almost always had a CLI shell open as I worked. KingCON with command and filename completion was way faster then pushing icons around.
Now I use Windows at work and do nearly everything using Cygwin command line tools. I use Linux at home and usually have multiple terminals open. My brief period of Windows usage at home just about drove me insane trying to do anything (I didn't know about Cygwin then).
I've developed something of a resistance to using GUIs for a lot of tasks, because I know I'll just get things done more slowly and feel frustrated by the experience. But for managing and manipulating photos, where the first tools I used were GUI-based, I wouldn't dream of using command line tools (even though the Imagemagick suite is very capable).
For imprinting I was a Mac user for a long time and occassionally jumped to Windows when it was necessary (school and work basically). When using Windows, Linux and Mac desktops you can see the shortcomings in all of them.
I've tried to use XCode on the Mac but couldn't get it. I'm much more comfortable with Visual Studio on Windows for some reason. But I think part of it is because I use it 8 hours a day instead of an hour or two after dinner.
I wouldn't say I'm imprinted but I do have my preferences. .NET and Java jobs pay way better than PHP based jobs. I use the free stuff when it will do, but I know I'm more productive when I have the tools for the job (visual studio, IIS 6, and SQL Server).
Could this ( (software) imprinting) also be the root of OS/IDE/Editor 'holy wars'?
In my own experience, early on in developing skills for Linux, I realized quickly I was going to have to move on from pico/nano if I was going to do anything 'serious'. And in the world of Linux, it mostly comes down to two choices: Vi or Emacs. I chose Vi, because it was the quickest for me to adapt to and be productive in.
I should probably take a tip from this article and the accompanying comments and take another stab at Emacs, now that there's no pressure to *have* to fix that 'XF86Config' file(it was something different in the 3.3 version...)!
And bravo to commenter who mentioned Forth!
complaining about an extra feature on Google that was only useful to advanced users who learn how to use it
That actually wasn't what I was complaining about; I was complaining about the fact that this advanced feature is on the homepage of *every single Google user*.
How can you just continue to write in English, without switching to Japanese or Polish, at least for a little while?
I hardly think trying a different editor is analogous to learning a new language. Heck, I don't even think learning a different *computer* language is remotely analogous to learning to speak and write a human language.
Regarding speaking different languages - I think this *is* similiar... but not something easily done given most of our ages (I say that because I've been informed that the younger you are, the easier it is to learn another language). I learned Spanish when I was a young teen, and it does show you (like living in another country for some amount of time) a different side of things that I think you wouldn't normally see.
Some things in Spanish just can't easily be translated into English.. and unless you can see that possibility (which is also possible with programming languages - you certainly may not be able to think about let's say object-oriented design when the only experience you have is with VB6 that really doesn't allow you to do it) it probably is very hard to think with those terms.
Wouldn't you agree?
As the years have passed (I lived there in 93), I barely recall the Spanish, but can still speak a little bit to some people.
Jeff 'The Shank' Atwood: "I hardly think trying a different editor is analogous to learning a new language. Heck, I don't even think learning a different *computer* language is remotely analogous to learning to speak and write a human language."
I'm not so sure about that. To a point, I agree with Danny's analogy, but not his conclusion. Leaning a foreign language gives you a new perspective on communication and may help you become more expressive, just like seeing what else is out there in IT-land may help you become more productive.
It's more about not keeping yourself insulated from the big, scary world out there than it is about "effort exerted vs. information gained".
imprinting can be leaveraged all the way to monopoly.
One thing that I try to be aware of when trying a new tool is to not develop an opinion of it too early. It's easy to dismiss something as being bad when it's really just different.
It takes time to learn the "best" way to perform the same task with different tools, and if we form our opinion quickly, and jump ship we probably didn't grasp the true potential of the tool.
This discussion reminds me of the old saying "If all you have is a hammer, all the world looks like a nail."
I'm all for trying new things in an attempt to improve my skills. However, biological imprinting of baby ducks (and humans for that matter) is actually a physical process of building neural pathways in the brain which provide the infrastructure to accomplish the learned tasks. This is the reason you can't teach an animal that has imprinted on a human to be like it's wild brethren. It's also one of the reasons languages are easier for young people to learn and harder for adults. Adults form those same hardwired infrastructures for complex repetitive tasks (although much more slowly). I think this biological factor frequently outweighs intellect in our decisions to try new things. In many situations it's probably a good thing though. It's our brain instinctually telling us that we're going to suck or that we are going to have to expend too much effort to learn something new that strays significantly from our imprinting because we don't have the right hardware. My brain tells me that I'm going to suck at things a lot.
YEAH AND I FOUND OUT THE MAC REALLY IS BETTER!!!!
I have things in my kitchen, arranged that way for over 10 years. I know where everything is, I don't even have to think about where things are when I'm cooking. I just automatically grab things. It's a beautiful dance.
If someone were to come into my home, re-arrange my kitchen in the most efficient manner, maybe optimizing my cooking time with the new layout, does that mean I will thank them and like it? I will have to relearn where the spices are, where the pots are, where the cooking ladel is... and, after a significant time investment, maybe I can cook meals faster. But while I am re-learning the location of my cooking implements, dinner will be delayed for a period of time. And if my husband does not allow delayed dinners, I'm gonna tell the person who re-arranged my kitchen to stuff it and leave me alone.
To a cook, knowing how to use your tools, where things are, and getting to them efficiently is very important. When someone wants to "help" us in utensil placement, they are usually chased out of the kitchen. We are creatures of habit.
Probably chimed in too late, but after watching the first demo of SlickEdit I'm left wondering what the heck the diff is - it seems like just another editor that does all the same things VS can do.
The titles of the other demos don't seem to indicate otherwise; can someone tell me about a feature that is compelling enough to make all the effort worthwhile?
Even though I'm just talking about SlickEdit, the same seems to apply to many other apps/systems. They just do the same thing in slightly different ways, right?
"Don't you know that 'ed' is The Standard System Editor?!?" ;-
(Or maybe punch cards. Honestly, punch card machines were better than many early editors! ;-)
Lately I have been trying to learn the D programming language. After using C# for so long, it's hard to be patient without good tools. Visual Studio spoils programmers with intellesense and a powerful debugger. When a new language like D comes out, there are no books, no tools - just a specification and a compiler. It's a big step backwards in productivity and it really hurts. D is a revolutionary new compiled language that is compatible with C and C++, compiles to native code, has many of the new programming constructs of C#, Ruby, Java, and Python, has garbage collection, autogenerates api docs like javadoc, and allows inline assembly language. It's remarkable in so many ways, yet I'm really having trouble getting motivated to code without good tools. That's one reason why it's so hard for some of us to break away.
Another good way to break a comfortable imprinting is to change your phone OS the next time you upgrade your phone. I went from the Treo (PalmOS) to the Samsung Blackjack (Windows Mobile) and making those adjustments to accommodate the new interface really shook up the old neurons.
I'm currently trying to switch from MS Office to OO.org and from PhotoShop to Gimp, and while the Office switch has gone fairly well so far I can't say the same about the Gimp. I've never been an "advanced" user in these programs though, and the most commonly used features are fairly similar (at least in the Office suites).
As a contrast, the switch I made from Visual Studio to SlickEdit some years ago gave me a huge performance boost. :) I got some help to set it up to work almost the same way as Visual Studio, but with a few extremely useful features easily accessible. It only took me ten minutes to get hooked, but someone without the same help would no doubt need at least 20. ;)
I still use Visual Studio occasionally (when I have to debug Windows SW) and it's gotten better than when I first switched, but I can't live without the superb code navigation features in SlickEdit.
My first system was a 286 with windows 3.1 with a 35mb drive. I don't know what they where smoking when they came up with this syndrome but I'm sure as hell not comparing anything against that
I'm with others here in that imprinting is both a user and developer phenomenon.
Bad developers tend to become "imprinted" in all kinds of ways that actually hinder their ability to grow a better system. It's the square peg / round hole syndrome all over again. Whether it's laziness or fear of change, these devs keep making the same system.
I've seen devs make these highly functional Access systems that they turn around in days instead of weeks (for all its faults, Access is definitely RAD). But then when they are dropped into a .NET environment they start making screens that look like these Access Detail Control edit screens even though it's actually bad for the app. I've seen the same thing with long-time web devs trying to build their first WinForms app. They're so used to thinking in terms of post-backs and Sessions that they start building UIs centered around hurdling these limitations, even though they no longer exist.
But users are definitely guilty of the same thing and worse. Many users tend to attach business processes to screens. I'm rewriting a system here soon where the primary user has been ritually "snowed" by her current system. Her current system incorrectly implements the processes, but she's been using it for so long and training others in its use and working around its limitations, that she hasn't really stopped to think about iwhat/i is actually going on or iwhy/i she's even having these data issues.
e.g.: every day they punch in data for Project X, then at the end of the week they punch in "weekly" data for Project X. But the weekly data is actually just 4 pieces of data for each day of the week, presented as 28 cells in a grid. Why not punch in this extra data every day along with everything else? "Because we need weekly totals from these numbers, they're for weekly reports." And if we punch them in every day, does that stop them from being part of the report? "OH yeah, no it doesn't" (that's a distilled 15 minutes conversation).
Personally, I think that users are actually the worst for Baby Duck Syndrome. Especially users who have always used the same system for their job. They get caught in the "system as process" rather than the "system implements process" line of thought.
Pfft. "People are sometimes resistant to change."
Whoa. Stop the presses! Shocking!
Ubuntu, wow unusual/cool name and not Microsoft. I guess that's enough for some people.
I imprinted on Forth, vi, C, and UNIX. So much so that it took ten years to figure out how to do object oriented work. Now I'm imprinted on C# ASP.NET, trying to learn Windows Forms for the first time. The imprinting process definitely happened for me.
Ubuntu- its a Xhosa/Zulu word, used a lot in South Africa by people of many backgrounds. the 'ntu' bit refers to people. the 'ubu' bit refers to abstract qualities. So ubuntu means something like humanity, humaneness, right behaviour for human beings, compassion for others, sharing, communal cooperation- its a VERY African word in other words, and one we could benefit from. I just wonder how the programmers in question came up with the name?
I think it goes a little deeper. I started back in the 70's on a PET 2001. I was on CBM machines until the late 80's.
I used Windows for quite a while, but it always felt wrong. It just did not work in a natural, intuitive way.
Looking for a web server, I found Free BSD. It was OK, but I noticed that there was a lot more software available for this Linux thing. I tried it, and it worked. I kept dual boot for a while, but eventually, just switched.
Linux is still more comfortable for me than Solaris or BSD.
Strangely enough, Linus Torvalds also started on CBM machines. Somehow even though it is a completely different system, something core is still the same. Somehow, it still has some of that feel, some of that comfort of where it all started.
Usually whatever the client or company is using it what is used, so I learn what I need to learn based on that need.
Some things I just stay away from because I just don't want to make the mental and time investment.
Does that make me a bad person or programmer? Maybe I am close minded about certain things, but I am usually open to listening to try new things if it is useful.
Certainly at this point I am not willing to learn something new for the sake of learning something new. I've already taken quite a few spins on the new technology/tool ride.
Additionally, I like to point out that I can't spend time on trying new things. I have deadlines to make, bugs to fix, etc. I can't tell my boss, "well those bugs didn't get fixed because I spent last week learning a new editor so it slowed me down a bit." That wouldn't go down very nicely.
Also, I leave work at work. I usually don't even turn on a computer while I am at home, except maybe for game playing once in a while. I spend my offtime with my family, so my ability to try new things is limited. But that's just my perspective.
I find that if the tool is adequate to the task, there's little incentive to take on the learning curve of a new tool on the off-chance that it might be marginally better.
Also, my employer can sometimes make it difficult to introduce new tools when he knows that your productivity will likely be at a reduced level for a time while you get up to speed with the new application.
Imprinting is very real in the software space. At my office, they use UltraEdit (which is actually very cool). I got hired as an avid Dreamweaver user. They didn't provide any license for me to use DW; so I put a trial copy in a Virtual PC and kept restoring every so often so I could keep DW around (it's really all about the syntax highlighting and code completion - better than any other IDE I've used).
Anyway, they wore me down and I've been using UltraEdit for about 9 months. I've even starting using it at home.
html_tag attribute="?= php value ?" will usually quote the whole string the same color rather than color the PHP differently.
If you're handwriting code, which is what many programmers do, the editor has to become an extension of our brain-to-keyboard-to-code mode of operation. Learning a new IDE can break that "bond" (at least temporarily) and slow that process down.
Practical? more likely