.

Tags:

An engineer relies on his best tools to carry out tasks which are repetitive, error-prone, or time consuming. For a software engineer, an advanced language tool can improve his life. One of the immediate impacts of using the right tool is the reduced amount of mistakes.

The following picture is something I have shown to some people, including when I did my EmpireJS talk some weeks ago. It looks rather cryptic and I think my 30-second explanation never conveyed the real message of the diagram. Hopefully the following description is easier to understand.

The charts basically show the contour lines of the mistake probability as a function of application complexity (vertical axis) and developer skill (horizontal axis). The zone where the mistakes are less produced is where the happy cat is located. The opposite of this is obviously the disaster area where there is nothing but mistake, one after another. When a tool is used to reduced coding mistakes, the contour map is transformed from the left chart to become something like in the right side. In other words, the tool is successful if it enlarges the area where mistakes are low.

We can imagine a situation where a genius programmer, perhaps also a coding ninja, does not really need an advanced tooling to build an application. Yet, as the complexity of his application increases, he will become more and more vulnerable to mistakes. There is a physical limitation of human brain, at one point something will crack. I don’t know about you but I have witnessed seasoned developers making stupid little mistakes, sometimes when using their own framework (ironic, isn’t it?). Heck, even a chess champion may enjoy a serious blunder from time to time.

Granted, when the developer is not as skilled, he is at a disadvantage compared to his ninja-grade coworker. Even if the application does not really get too complicated, he will be exposed to various traps, the ones which someone usually manage to avoid based on the past experiences. For a really really newbie, the collection of rookie’s mistakes is waiting patiently in that dark corner, ready to jump at any moment of weakness. For this group of developers, a proper development tool is very valuable so that their destiny becomes something like the one depicted in the right contour map. Mistakes might still happen, but the overall situation is not as bad as in the left chart.

The fact that a tool might improve the development workflow is often forgotten if one sees it only from a one-dimensional point of view. For example, a veteran hacker can have a knee-jerk reaction “I don’t need a stinking IDE, I live and die with my Vim” because he projects the value of such an IDE in his own skill axis. Even then, if we enlarge that particular skill corner, people with different Vim skill can use a variety of scripts to improve their life. For example, plain vanilla Vim is useful yet many developers become more productive with additional time-saving functionalities, anything from a fast file navigation to an easy-to-use syntax validator. The same goes for the common phenomena when a new stuff is announced (whether it is a programming language or a development paradigm): a lot of snarky comments. While some of the them are just random short-term poking fun or a show of passionate analysis, a few other opinions are dangerously in the border between militant and passive-aggresive.

The key is here is simple, let us think about other people. Take a look at JavaScript, an expressive language which is easy to learn. Nothing is more rewarding than making a little JavaScript application which does a simple task. Yet, there are gotchas and latent pitfalls in many places. We may not be able to help those who do not posses basic computer science skills, but there are many programmers out there who are capable enough to carry out complex web development even though they don’t have rockstar-esque expertise. This is of course not a question of intelligence (again, another overrated one-dimensional axis). Your mentor at the local chess club isn’t always a grandmaster and your physics professor didn’t always have his internship at CERN. Not everyone has a photographic memory and remembers everything from the 258-page ECMAScript 5.1 specification.

Next time someone steps up and promotes a way to improve someone’s coding quality, think about the beyond-the-horizon implication. Like Jason Fried once wrote, give it five minutes, because the right idea could start out life as the wrong idea.

  • Jeff Schwartz

    Great article and I hope it is received well. I’m a big fan of IDEs for exactly the reasons you mentioned – assisting me with dealing with all the complexity in even minor projects. I enjoy watching all the established players using their code editors when giving lectures. It looks really cool but deep down inside I know it is a deceptively cool image that doesn’t translate well to at least the world of development that I’m familiar with. Glad to have stumbled onto your blog. I’ve bookmarked it and will be coming back.

    • http://ariya.ofilabs.com/ Ariya Hidayat

      Thanks for the kind words! I hope you’ll enjoy the future articles as well.

  • Nino Miletich

    I see how an IDE could help, but I don’t find most IDEs intuitive and every time I tried one I would spend more time learning about the IDE than programming ;(

    • Jeff Schwartz

      Using a modern IDE like WebStorm for example is no harder than using Sublime Text 2 or any other sophisticated editor today but I need to expand somewhat ofn that. Out of the box, I know of no editor that could provide the features I need to develop web sites and their backing applications. While they may be excellent at handling text, they don’t provide support for version control, syntax highlighting, linting, contextual code completion and formatting, and the list can go on much longer than this. In order for an editor to provide these capabilities requires the use of editor plugins to achieve what is already provided out of the box by any decent IDE, WebStorm being the very best of them in my humble opinion. So in affect one must first transform their editor, which out of the box is basically just a text editor, into a more featured and productive too by the inclusion of numerous plugins. Sublime Text 2 and Textmate are exemplars in this category. The problem with this is that the inclusion of various plugins can make these editors highly unstable to the point of them being useless. I recently experienced this with Sublime while attempting to add the various plugins that would provide a similar feature set as WebStorm does. Unfortunately, the various plugins I added (sublime linter, git, code intelligence) resulted in an unstable environment having Sublime crash after saving a file. Yes, I can spend my time debugging Sublime Text 2 and possibly fixing the problem or at least reporting an informative description of the problem to the plugin’s author but I certainly don’t have that kind of spare time on my hands. As you can probably surmise from my experience with Sublime Text 2, I have abandoned it and will not purchase it. So it comes down to me needing something that works, out of the box, with no excuses. Oh, and it has to be attractive to because I don’t want to stare at ‘ugly’ for 12 hours a day. WebStorm’s editor, yes, I am in love with this IDE, can be configured to look just as ‘pretty’ as Sublime Text 2 or Textmate, offering me a minimalist non intrusive coding environment. You can read my review of WebStorm here at http://adoseofjavascript.wordpress.com/2012/10/25/the-tools-of-my-trade/. And WebStorm boots up quicker than Sublime did once I had added all the plugins I required. Yes, it looks real cool to knock out code using just an editor but in order to do that that editor had to have been transformed into an IDE first but like I said, that look is very deceptive.

      • Nino Miletich

        Hmm, I have never had stability problems with Sublime2 (although, it takes up to 2 seconds to open really big files, sometimes) and I’ve been using it for years to work with a number of languages.

        I don’t feel ‘less cool’ when I use a text editor, it is just the tools I prefer to use. They might seem primitive to you, but I like them. I have nothing against people who use IDEs, but they are just way too obtrusive, and they want too many things to be “done their way.”

        • http://twitter.com/jefftschwartz Jeff Schwartz

          “I have nothing against people who use IDEs, but they are just way too obtrusive, and they want too many things to be “done their way.”

          With all due respect, you apparently haven’t tried WebStorm or you just never bothered to learn it. WebStorm is no more obtrusive or opinionated than any modern day editor, which by the way, also require a modicum investment of your time to master. Even Sublime requires that you memorize its keyboard shortcuts for you to get any kind of real work done. And Sublime also requires that you ‘shop around’ for plugins that you need to extend its very basic editing and formatting capabilities and then each plugin requires that you learn how to use it. Speaking of plugins, aren’t they reflective of their authors opinions about how they should work and therefore aren’t they obtrusive and imposing their opinions on you?

          If you haven’t mastered Sublime — or whatever editor or IDE you are using — you are just wasting your time and therefore it really doesn’t matter what editor or IDE you choose because you will never be really productive with it. Imo & ymmv.

          Jeff

    • http://ariya.ofilabs.com/ Ariya Hidayat

      You have to judge whether the effort spend mastering IDE would help reducing any mistakes in the long run or not. If that is not the case, then move on and use another tool.

  • Hwang Dongseong

    I can’t understand how some people can be satisfied with vim or emacs. When changing from vim to EclipseCDT as c++ programmer, I feel my productivity jump to 10x times. Now, without Eclipse I’m nothing.