Daniel Lemire's blog

, 7 min read

My programming setup

9 thoughts on “My programming setup”

  1. icsa says:

    I’m in strong agreement regarding the use of debuggers and IDEs. IMO, the principal disadvantage of these tools is the ability to create software too complex (or complicated) for writers or readers to understand without the use of said tools.

  2. Roland says:

    The biggest surprise for me in reading your post is that you don’t use code completion. Can you elaborate a bit on why not?

    1. I find it distracting. If I cannot remember the name of a function, it is easy enough to look it up. If one finds oneself constantly looking up each and every function name, then one has probably not spent enough time reading the documentation.

      Reverse engineering the documentation with code completion is a bad idea. You get into bad designs. To code well, you need a lot more than the name of the functions.

      I do not have an extraordinary memory. If anything, I have a very average memory. However, I find that in most projects, on a given day, you are only going to mostly use a small set of functions, so it is easy enough to keep them in mind.

  3. James says:

    What are some fancy regular expressions techniques you use?

    1. This would warrant a new blog post!

  4. Cristian Vasile says:

    “I never use code completion.”
    You should try tabnine (https://www.tabnine.com/) it is simply magic.

    1. The time I spent typing is tiny compared to the time I spend thinking about what I am going to type or reflect on what I typed. Furthermore, being helped in producing more code is not necessarily a net positive.

  5. antek says:

    One advantage of IDEs is the “jump to symbol” function. That’s probably the only feature that decides that I don’t use vim, but an IDE instead of it.

    I’ve used Vim for lots of years, but this one option was always a problem. It’s true that today there are solutions such as LSP servers, but their stability is quite low; sometimes it’s not easy to get it working on larger C++ codebases, sometimes they’re crashing, and sometimes they don’t work as intended, and IDEs have much more complete support in this area.

    There are situations that a plugin-packed Vim can indeed fill lots of missing functionality, but then the number of different Vim plugins needed, and their dependencies, make the Vim config management harder and more time consuming than it needs to be.

    By the way, ctags is not a solution for the jump-to-symbol problem :), neither is grep.

    1. One advantage of IDEs is the “jump to symbol” function. That’s probably the only feature that decides that I don’t use vim, but an IDE instead of it.

      The blog post you are responding to only mentions vim in the following paragraph: “Importantly, I am not “locked in” with Visual Studio Code. I can switch to any other text editor in an instant. And I sometimes do. If I need to change a file remotely, I might often use vim.”

      I do not use vim as my primary editor. The blog post states that I use Visual Studio Code.

      Visual Studio Code, like many other editors, does support advanced navigation fonctions, including “find where this variable is declared” or “find where this function is defined”, see https://code.visualstudio.com/Docs/editor/editingevolved