📜 ⬆️ ⬇️

Beware of productivity tools

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

Mark Seeman is a software architect living in Copenhagen. Previously, he worked as a developer and architect at Microsoft. Now Mark is an independent consultant. Mark is also the author of the notorious book Dependency Injection in .NET
The article is a translation of a post from the blog Mark Seeman.
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, should there be an interesting translation in the future and post it here (and maybe from its old records translate something)?
Next comes the translation of Mark's post.

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

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

The only productivity tool I’m currently using is Visual Studio 2012, but I’m even worried about it. You could say that this is just my personal choice and that would be a bit of truth. But I am not writing this post to protect myself. On the contrary, I am writing because I believe that you should beware of the problems presented here. Perhaps you will become a better developer if I manage to involve you in an independent and conscious consideration of the choices that you can now take for granted.
How did I get sucked into these bright Twitter feeds? Why do people even care about which productivity tool I use? First of all, I can’t help but admit that occasionally I do trolling : I just enjoy juggling, as in the message thread listed here.
There is a reason for such behavior, beside the mere desire to befooled. I want you to think about your own choice of tools, and not to 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 I program a lot during these presentations. Whenever I speak and program live, I rehearse a lot before this and use specialized snippets to avoid annoying the public with a trivial part of programming. Here is an example of how someone tweeted during a speech, complaining that I did not use ReSharper. However, the purpose of the speech is not to write the code in the least amount of time. The goal is to teach code writing. If I program too slowly, the audience may fall asleep, but if I program very quickly, then no one can understand anything. I'm just not convinced that specifically in this case, the use of a “productivity tool” will be a better choice.
')
How can you even live without one or another productivity tool?

The most common reaction of people when they find out that I do not 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 Decompose the Mind? ". This is a long article, but it is definitely worth reading. You should go and read it right now.
In case you don’t want to spend time reading this article (on the other hand, you’re already reading this rather long article), I’ll explain its main meaning: through IntelliSense, code generation, setup wizards and providing simple drag and drop capabilities, Visual Studio it helps, but it also pushes us to write (or not to 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 in this way? I would say - not really.
Despite the fact that Visual Studio, in many ways, is an impressive and very useful software, I am concerned that I am very dependent on it. To learn new techniques, I try to keep track of what happens outside the .NET \ Microsoft ecosystem. Clojure looks like a very interesting programming language. It seems that Erlang is 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 been claiming high productivity. Git is the version control system that is best for Microsoft to offer.
However, I feel constrained by my dependence 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 ties with Visual Studio. Using simple ordinary Visual Studio is the least I can do to expand my horizons.

Increase productivity

The main argument for productivity tools is that using them makes you a more effective programmer. “ Without ReSharper, my productivity drops by 50%, I'm surprised that you can cope without it .” This is a very interesting statement. How do you measure performance?
In the name of argumentation, let's pretend for a minute that a programmer’s performance 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 if so, how many lines per day do you write on average? 100? 200? Are you really going to say that the narrow neck of your productivity is determined by how fast you can type ? Seriously? Then learn to type faster.
Suppose that most of the time, the code is read, not written. The code should be optimized for reading and not for 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 by how quickly this piece of code can be written.
Moreover, if you think that pair programming is a good and efficient way of producing software, then you also need to understand that with pair programming, at any given time, at least one person does not print anything at all.
As Martin Fowler explained this: “Pair programming would reduce productivity by half if typing was the most difficult part of programming.” In my experience, typing is not the most difficult part. Thus, I am not convinced that “productivity tools” make someone a more effective programmer.
If you have ever looked beyond the Microsoft echocamera over the past 10 years, then you should be aware of the development team, famous for unparalleled levels of performance. This is a Ruby on Rails developer. Later, it seems to me, many advanced geeks began to javascript (and especially Node.js ). What about Python and Clojure? As it seems to me, in all cases, the departure from .NET of the most advanced programmers towards other languages ​​and technologies is caused by an increase in their own performance. What do these languages ​​generally offer? Well, the preferred development environment is definitely not Visual Studio. All these programmers successfully use 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.

Pointing the way

Charles Petzold drew attention in his remarkable article to the fact that Visual Studio enforces a bottom-up style that doesn’t fit in with the needs of the business. Visual Studio (with or without a productivity tool) makes it difficult (but not impossible) to develop outside-in .
I believe that by helping us act in a strictly defined way, the tool closes many other possibilities for us. We may not even be aware of what 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 don’t mind helping the tool from time to time, but the rest of the time I would prefer to make an informed decision, taking into account all the available information on my own. I think that at least you need to understand that accepting 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 I lose the opportunity to learn. Not only that, the more I rely on the assistance of an instrument, the more dependent I become on it. To denote this situation, even the word special is. It sounds like “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 am moving, I recorded a half-hour TDD session . There is nothing so special about it. I chose her not to impress anyone. I did not choose the “best” from the many possible options. I just wrote down how I worked and downloaded. 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 still, somehow, I manage to create software of such a 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 a productivity tool will not do me any good. Having once studied the productivity tool, its use may not slow me down, but it will not make it more productive, so why should I bother using it?
This is just my opinion about the “productivity tools”. This is not a suitable solution for all occasions. If you think you benefit from using your favorite “productivity tool”, I won’t dissuade you. Nor does I have to be judged for the fact that I do not use any particular tool. Some respected programmers use ReSharper. But I respect them not because of this, but rather in spite of.

Source: https://habr.com/ru/post/170443/


All Articles