Beware of productivity tools

    Attention! The article is a translation of a post from Mark Seaman's blog.

    Mark Seeman is a software architect based in Copenhagen. Previously worked as a developer and architect at Microsoft. Mark is now an independent consultant. Mark is also the author of the notorious book Dependency Injection in .NET. This
    article is a translation of a post from Mark Seeman's blog.
    In the comments, excluding, of course, discussions of the post of Mark himself, I would like to hear opinions about the quality of the translation, and most importantly, is it worthwhile to make a translation and post it here in the future when interesting notes appear (or maybe translate something from his old records)?
    Next is the translation of the post of Mark.

    This article addresses developers using productivity tools.
    From time to time I am embroiled in a heated debate about the advantages and disadvantages of ReSharper . This debate usually takes place on Twitter, where the limit is 140 characters per message, which is not a good condition for detailed discussions. I do not want empty talk, so let's start a detailed discussion.
    This post will not constitute an attack on ReSharper. In fact, I don’t have any dissenting opinion about ReSharper as well as about other “productivity tools”, but I’m more often involved in disputes about ReSharper than, for example, JustCode or CodeRush. I believe this is because most people are passionately in love with ReSharper.
    In fact, I'm going to expand this discussion to a wider range of “productivity tools,” such as (but not limited to, presented below):

    And why are we even going to have such a discussion?

    The only productivity tool I'm currently using is Visual Studio 2012, but I'm even worried about that. You could say that this is just my personal choice and there would be a piece of truth in it. But I am not writing this post to protect myself. On the contrary, I write because I believe that you should beware of the problems that are presented here. Perhaps you will become better as a developer if I manage to attract you to an independent and informed consideration of the choice that you can now take for granted.
    How was I generally embroiled in these vibrant Twitter presentations? Why do people even care about what productivity tool I use? First of all, I cannot but admit that occasionally I do trolling: I just enjoy the twitching, as in the link provided in the link.
    There is a reason for such behavior, besides the simple desire to be disgraceful. I want you to think about your own choice of tools, and not engage in fanaticism.
    Again, there is a more rational and deeper reason that people are interested in what I do: I show a lot of presentations about the code and during these presentations I program a lot. Whenever I speak and program live, I rehearse a lot before that and use specialized snippets so as not to bother the public with the trivial part of programming. Here is an example of, as during a speech, someone tweeted, complaining that I did not use ReSharper. However, the purpose of the presentation is not to write code in the least amount of time. The goal is to teach you how to write code. If I program too slowly, the audience may fall asleep, but if I program very quickly, no one can understand. I'm just not convinced that specifically in this case, the use of a “productivity tool” would be a better choice.

    How can you even live without one or another productivity tool?

    People’s most common reaction when they find out that I don’t use their favorite “productivity tool” is bewilderment.

    What is my dissatisfaction with productivity tools? It is much deeper than hostility to any particular instrument. Charles Petzold has already described his attitude to Visual Studio 2005 in an excellent article entitled “ Does Visual Studio Corrupt the Mind? ". This is a long article, but it is definitely worth reading. You should go read it right now.
    In case you don’t want to waste time reading this article (on the other hand, you are already reading this rather long article), I will outline its main meaning: through IntelliSense, code generation, setup wizards and the provision of simple drag and drop capabilities, Visual Studio gives us helps, but it also pushes us to write (or not write) code in a specific way. Wednesday guides us.
    Does this make us more productive? I don’t even know how to measure developer productivity, so I can’t give an answer. Do we learn when we program this way? I would say - not really.
    Despite the fact that Visual Studio, in many respects, is an impressive and very useful software, I am worried that I am very dependent on it. To learn new techniques, I am trying to keep track of what is happening outside the .NET \ Microsoft ecosystem. Clojure looks like a very interesting programming language. Erlang seems to be able to solve some complex problems in a simple way. Storm is far ahead of everything Microsoft has to offer. For years, Ruby programmers have claimed high productivity. Git is a version control system that is best at what Microsoft has to offer.
    However, I feel constrained due to my dependency on Visual Studio. I want to learn and use many other technologies, like .NET, so I'm not looking for tools at all that will strengthen my bonds with Visual Studio. Using plain Visual Studio is the least I can do to expand my horizons.

    Increase productivity

    The main argument for the productivity tools is that using them makes you a more efficient programmer. " Without ReSharper, my performance drops by 50%, I am surprised that you can do without it ." This is a very interesting statement. And how do you measure performance in general?
    For the sake of argumentation, let's pretend for a moment that programmer’s productivity is measured by the number of lines of code written. There is a fairly common myth that a professional programmer writes only 10 lines of code per day . Perhaps this is not true, but even so, how many lines per day do you write on average? 100? 200? Are you really going to argue thatthe narrow neck of your productivity is determined by how fast you can print ? Seriously? Then learn to type faster.
    Suppose that most of the time, code is read, not written. The code should be optimized for reading, not writing. Thus, performance, if it can be measured at all, should be measured by how quickly programmers can read and understand a piece of code, and not how quickly this piece of code can be written.
    Moreover, if you think that pair programming is a good and effective way of producing software, then you should also understand that when pair programming at any given moment, at least one person does not print anything at all.
    As explainedthis is Martin Fowler: “Pair programming would cut productivity by half if printing were the hardest part of programming.” In my experience, typing is not the hardest part. Thus, I am not convinced that "productivity tools" make someone a more efficient programmer.
    If you've ever looked outside the Microsoft echo chamber for the past 10 years, then you should be aware of the development team, famous for its incomparable level of performance. It's about developers on Ruby on Rails . Later, it seems to me, many advanced geeks began to gravitate to JavaScript (and especially Node.js ). What about Pythonand clojure? It seems to me that in all cases when .NET leaves the most advanced programmers to other languages ​​and technologies, the reason is an increase in their own productivity. What do these languages ​​generally offer? Well, the preferred development environment is definitely not Visual Studio. All these programmers have successfully used Vim , Emacs , Sublime Text, and many other editors. It becomes obvious that you can be “terribly productive” without using Visual Studio and a productivity tool.

    Path indication

    Charles Petzold drew attention in his wonderful article to the fact that Visual Studio forces the style of development from the bottom up, which does not fit very well with the needs of the business. Visual Studio (with or without a performance improvement tool) makes it difficult (but not impossible) to develop from the outside to the inside .
    I believe that by helping us to act in a strictly defined way, the tool closes many other possibilities for us. We may not even suspect that it remains hidden from us, but if we can get rid of such a helping hand, then we may be able to see other possibilities.
    I am not opposed to having the tool occasionally help me, but the rest of the time I would prefer to make an informed decision, taking into account all the available information myself. I think that at least you need to understand that making help means making decisions for us. It turns out not a win-win situation. Maybe I get the opportunity to complete the task faster, but lose the opportunity to learn. Not only that, the more I rely on the assistance of the instrument, the more dependent I become on it. To indicate such a situation, there is even a special word. It sounds like a " vendor-lock » (vendor lock-in).

    Final thoughts

    All that has been stated here is solely my personal and subjective opinion. My personal approach is to be leisurely and calm. I move slowly to move fast.
    In order to show how slowly I move, I recorded a half-hour TDD session. There is nothing so special about her. I chose her not to impress anyone. I did not choose the “best” out of the many possible options. I just wrote down how I work and uploaded. I challenge you to watch this session from start to finish. It will be boring. You will see long periods of downtime and how long I think. This is actually a real picture of how I work. But so far, somehow, I have been able to create software of such quality that people come back to me again to pay and offer a new job.
    If you watch at least five minutes from this video, it will become obvious to you that using the productivity improvement tool will not do me any good. Once having studied the productivity tool, its use may not slow me down, but it will not make me more productive, so why should I bother with using it?
    This is just my opinion about “productivity tools.” This is not a solution suitable for all occasions. If you think that you are benefiting from using your favorite “productivity tool” I will not convince you. As well as I do not need to be judged for the fact that I do not use any particular tool. Some of my respected programmers use ReSharper. But I respect them not because of this, but rather contrary to it.

    Also popular now: