9 ms·
I've worked in 4 different software shops over the last 15 years. My general observation is the developers who rely on heavily automated/magic tooling are sign
by ARandomerDude 5y ago
I've worked in 4 different software shops over the last 15 years. My general observation is the developers who rely on heavily automated/magic tooling are significantly outclassed by those who use the terminal + a basic text editor.
Terminal + Vim or Emacs/VSCode (depending on configuration) is not only all you need, it also produces developers who understand the systems they work with.
I know a lot of people will disagree but my advice to more junior guys is always get rid of the toys and learn the tools.
- artwr 5y agoI would tend to agree for most languages I have touched (Python, C, ...) but I have mostly worked in medium codebases. Do people think it is still the case for large code bases and Java? I find the ability to quickly jump to definition in the IDE a huge help when on boarding into a new codebase.
- tl 5y agoI work "unofficially" on Java code because the Swift code I'm officially responsible for executes Java code (via HTTP request). I'm "not licensed" to use real Java IDEs. Visual Studio Code's Java support is not great and I do not have jump to definition. Find " name_of_function(" in files is good enough and catches a few useful cases outside Java's understanding, particularly when you have naming consistency throughout a codebase. Code's not as good as Emacs, but it's reliability installed on nearly every developer's machine regardless of discipline or at least the subset who are willing to ask for help when they encounter problems.
- egeozcan 5y agoI especially love (!) the Java projects that run only if you have eclipse with specific plugins. "I don't know how to make it work with IntelliJ" is one comments I often hear from some Java devs. I personally would be too embarrassed to say something like that. I guess the same applies to some VS projects, msbuild was dragon territory when we had to deal with it (so, before dotnet cli came).
- tylerscott 5y agoDefinitely prefacing this with the fact I use “just” a text editor and terminal so obviously I am biased. I couldn’t agree with you more. I feel like at some point in a career, a developer should try to shove off from an IDE if that is their daily driver. I also feel this way about high level languages. Speaking personally, I have ALWAYS benefited by doing those uncomfortable deep dives.
- spoils19 5y agoAgree 100%. Moving off an IDE fixed my impostor syndrome and instantly made all my code more readable and maintainable. Even my manager has commented on how much profit our team is generating ever since we moved to text editors.
- fn1 5y agoI have programmed Java/Kotlin/TypeScript for 5+ years in terminal/vim. Then for 3 years in Eclipse. Then for 8 years in Intellij IDEA. I would never go back to VIM for coding.
- legerdemain 5y agoYou were coding in Kotlin and TypeScript 16+ years ago?
- fn1 5y agoNo, Kotlin since 2015, TypeScript since 2017.
- spacechild1 5y ago> get rid of the toys and learn the tools A good IDE is not a toy, it is a very powerful tool. How do you work in a large C++ code base using only a text editor? You will certainly need a couple of plugins, e.g. for linting, definitions/implementation look up, auto complete, etc. Then what is the actual difference to an IDE?
- iio7 5y ago> How do you work in a large C++ code base using only a text editor? You will certainly need a couple of plugins, e.g. for linting, definitions/implementation look up, auto complete, etc. Then what is the actual difference to an IDE? In the beginning I felt I needed linting, definitions, etc, so I began by stuffing Vim with plugins. Then I discovered that I was much more productive when I didn't use any of that, but actually kept the documentation close by. Now I just remember most of the definitions or quickly look them up and combine the usage of console applications like grep, find, sed, etc. with Vim. I have about 3 custom made Vim functions that serve as shortcuts for at few of the things I need often. Personally it's the most productive for me and the tool gets out of the way.
- z3t4 5y agoRemembering the core syntax and api's are like magic for productivity, you no longer think in words or variables, you think in data structures and how different endpoints and functions interact, your hands type the code via muscle memory. Only problem is that the code can sometimes become a bit terse if you do not have an autocomplete, a dumb autocomplete is often enough though.
- spacechild1 5y agoDoes this also work for large code bases? In my experience it doesn't, but maybe my memory is just not very good :-)
- z3t4 5y agoIt depends how you manage scope. When there are thousands of global variables it will be impossible, but if the language (like Dlang) allows local scoping of imports it's manageable... If you are very strict about what is an actual dependency or just a magic global. The rule is that if the import can be used in other programs/code-bases you can import it. But if it's just a way to get around using global variables you should rethink the architecture. ... Yes IDE's will find the definitions in your spaghetti code-base, but then they become part of a problem loop where the code-base would be unmanageable without the IDE. Namespaces are also a good solution to use instead of globals or magic globals. But it might become a category theory problem like where in the hierarchical structure you should put something. The best solution of course is to keep the code base small :)
- beertoagunfight 5y agoI used to do my share of vim in the past, but I really don't have time for this shit anymore. I just want something that works out of the box across languages, without having to tinker around. Vim is a great text editor, and that is exactly what I want it to do. The IdeaVim plugin gets the job done for me.
- sombremesa 5y agoI strongly disagree. It’s true that people who do not understand how to use something basic to accomplish their goals are far behind in terms of fundamentals compared to those who do, but it’s provably false that primitive tooling is superior to modern IDEs. Even just adding NERDTree or ctags to vim dramatically improves productivity. Repeat ad nauseam and you have the modern IDE. The advice “get rid of the toys and learn the tools” doesn’t do much other than reveal your (subjective) bias for “toys” vs “tools”.
- martythemaniak 5y agoI might have agreed with you, until I saw an experienced Java/Kotkin guy work with IJ and a large code base. He was narrating his thought process and coding at the speed of though / speech. It was a thing of beauty that no text editor can help you achieve.
- newaccount74 5y agoSometimes I worry that powerful IDEs just make people write more complicated code. If all you have is a basic text editor, you are limited by what can fit inside your head. If your IDE makes navigation too easy, you end up writing callbacks that call callbacks that call callbacks until you end up in abstraction hell and have no idea what your code is doing anymore. Then again, better tooling makes refactoring/simplifying code easier so it may just as well lead to easier to understand code...
- mrfox321 5y agoCould this not simply be explained by the fact that devs who use older tools are more experienced? Maybe that needs to be controlled for, too.
- TillE 5y agoManaging a large project with basic tools is a nightmare, it also sucks for learning an API. I've tried to use VS Code for C++ and C# stuff, but it's such a poor tool compared to Visual Studio proper. I don't feel I'm learning anything useful by wrestling with the fiddly JSON build configurations in VS Code.
- notpachet 5y agoFor me, it comes down to one's affinity with the command line. I've known developers who use an IDE but who are still very fluent in the command line, and in fact could probably do just fine if you took the IDE away and made them work in Vim for a while instead. The problem is when a developer can't make that jump when necessary. A big part of our ability to build systems for computers relies on our ability to traverse those computers at a low level, and that means command line instructions. It means being able to work with the filesystem, and streams of input/output. I don't use Vim because I think it's a superior text editor, I use it because of the fluidity it offers me in terms of getting streams of text from the console in and out of an editor. I can just pipe things to it, or execute arbitrary commands and capture the output, and so on. Now, granted, seasoned developers can often get that same degree of command-line fluidity while still working in an IDE. But I think that requires them knowing the importance of that fluidity in the first place, which is something that you aren't necessarily going to learn as long as the IDE is holding your hand and doing a lot of it for you.
- jaegerpicker 5y agoI've seen this be sorta true over the last 25 years at numerous places but only in limited environments where 99% of the code written was scripting based web languages. I most often work in Python now professionally (mostly security), at home it's C++ and Swift (gamedev). In Python/Js web work that holds some truth, in Security a little more, but in data science/engineering A LOT less where Jupyter and PyCharm are huge. My outside work is 100% in IDE's, XCode - CLion - PyCharm - Intellij, and in game dev or mobile native app dev? The vast majority of great developers are on IDE's. So to me drawing that conclusion is very risky in general and often bad advice to give to Jr's IMO unless they have a very narrow focus on the Web.
- iio7 5y agoI agree 100%, I have the same observations.
- tomjen3 5y agoMy experience is that those who still use Vi/Emacs to code are close minded and unwilling to change. It’s certainly possible to code without support, but if you value your productivity, why spend five minutes doing a manual renaming when your ide can do it in a few seconds? Why wouldn’t I want my ide to indent correctly, according to eslint rules in the given project? Sure for none coding task emacs is great, and git is more powerful on the command line. I therefore use the most powerful tool I can. Edit: this comment became overly critical, it is quite possible that it is a coincidence, my N is quite low.
- lvass 5y ago>why spend five minutes doing a manual renaming when your ide can do it in a few seconds That's a LSP feature, you do not need an IDE.
- strangetortoise 5y agoAt the risk of being pedantic; it's just a feature, it does not have anything to do with LSP. Plenty of non-LSP IDE's have these features as well (XCode, Visual Studio Classic, etc).
- nouveaux 5y ago"that those who still use Vi/Emacs to code are close minded and unwilling to change." Vi is not just an text editor in the terminal. It's a different way to interact with text. To say that Vi users are close minded is like saying people who use the terminal are closed minded. GUIs and the mouse have significantly improved the way we interact with computers. However, many things are still better in the terminal with a keyboard. In that same vein, IDEs have improved the way we write code but it has not improved on the way we interact with text enough. For those of us who love Vi as an expressive language to interact with text, we choose to forgo the benefits that IDEs give us when writing code. Personally, when I write code, I love the experience of tmux with neovim. It's something I try to replicate in the gui every couple of years in MacOS but it always so bad. On the point of manual renaming, Vim is perfectly capable of project based search and replace.
- uvdn7 5y agoThis. Let me state my assumption and philosophy first. I believe strongly in learning and investing in the fundamentals — things that stay more or less the same for a long time. There will be another new and _modern_ IDE tomorrow. Why invest and learn something that keeps changing? It’s like spending most of your time learning React or Angular, while you could have spent the same time learning JavaScript itself. I am not saying tools are not useful. IDEs, high level frameworks absolutely boost productivity. If your goal is to get something done fast, sure use these tools. But if you want to make long term investments, you should learn the fundamentals and later potentially use these frameworks (when you understand how they work) to further boost your productivity. But people often get used to the tools they use, so people with a learning mindset, who start with the fundamental tools tend to stick with them. That’s why I think a correlation exists between engineers who have a good deep understanding of how a system works and engineers who use basic tools.
- marginalia_nu 5y agoI do think there is room for nuance. I learned to code like you suggest. I started with C, in vi, I learned it from the words of Kernighan and Ritchie and I had no forums or syntax highlighting or anything to hold my hands, and when stuff didn't work, I got compiler error messages so obtuse they might as well have been in Linear B, I walked uphill both ways and it was -40 and blizzard even in the summer. I do absolutely concede the type of language-understanding and skill set this promotes does make you a better developer. However. I do not think that stubbornly refusing to use an IDE makes you a better developer. A good IDE is powerful, and can be a real force multiplier that makes you able to work with much larger systems and significantly cuts down on the amount of time you spend doing menial repetitive typing. You can absolutely subsist on the simplest of tools, but you can absolutely do more with the more powerful ones.
- pjmlp 5y agoUsing toys since Turbo Basic 1.0 and Turbo Pascal 3.0. Somehow my 35 years of coding experience have shown me that I rather play with those toys than be frozen in past I grew up on (ZX, MS-DOS, UNIX and CP/M).
- dzhiurgis 5y agoDoes it coincide that terminal masters are also order of magnitude older - and more experienced? To me it’s a red flag when developer uses notepad++ instead of jetbrains.