5 ms·
I prefer developing with Linux. There are generally more tools available than Mac and Windows. Some of the ones I use are xmonad, tmux, vim (nvim), ag, ycm, c
by uxcn 11y ago
I prefer developing with Linux. There are generally more tools available than Mac and Windows. Some of the ones I use are xmonad, tmux, vim (nvim), ag, ycm, clang, gcc, gdb, cmake, make, ninja, perf, valgrind, strace, etc... Compared to Windows, even just having a decent shell with coreutils is huge. If there is something that a tool doesn't already do, I can generally combine other ones to do it. For example, sed can handle basic refactoring. It's also generally easier to install new tools through the package manager (I use Funtoo).
I know a lot of people tend to prefer cleanly polished IDEs, and I do use eclipse and eclim for java development, but normally IDEs tend to get in the way for me. As for the specific questions, building definitely isn't an issue and there are plenty of cross-platform build systems when it's needed. Continuous integration is usually handled separately on a build server (hudson, jenkins, team city, etc...). In fact, a lot of the collaborative tools for things like continuous integration and issue tracking are mostly usable via web applications (bugzilla, jira, etc...).
My biggest frustration is when tools that aren't usable on Linux get standardized on. Outlook is the easiest example, but for anything where it's absolutely necessary it's extremely easy to run a virtual machine with kvm and libvirt.
- WorldWideWayne 11y agoSome of those exact tools you mentioned might not exist on Windows, but comparable tools absolutely do exist. You might even have to pay for them, but I bet in those cases, you at least get a nice UI as compared to none.
- uxcn 11y agoThere are some similar tools on Windows (e.g. Sysinternals). UIs generally aren't scriptable, which is a serious limitation for me.
- WorldWideWayne 11y agoThe fact that UIs aren't generally scriptable doesn't mean that the dev tools I'm referring to aren't scriptable or otherwise able to be automated. There are a lot of trade-offs that I think Unix-centric devs don't realize, for the simple fact that they don't venture outside of their own ecosystem for various reasons. One of those trade-offs in my opinion is a certain lack of polish that seems to pervade the Unix-dev-tools landscape. There are thousands of instances of this, but one that I recently encountered was that Vim just can't do code folding very well. You can make it fold on syntax or on markers, but not both. AutoFold tries to remedy this, but as you add plugins to make Vim do things that Visual Studio does well, performance goes down. Another things that annoys me when I'm working on nix systems is that I feel like I always have to cobble together my kit before I can begin any real work. I'll take a well thought out, professional dev-kit from a big name company any day over a disparate set of single-purpose bins and libs that I have to string together.
- uxcn 11y agoThe difference for me is largely flexibility. Windows tools tend to be monolithic, which is okay for certain things, but it's generally difficult to extend. As a developer, modularity is important to me. Even GCC I can't use to build any development tools since it's monolithic. LLVM is extremely modular though and even provides an intuitive API to interface with the AST, which makes building any new tools simpler (ycm is based on it). I disagree on the well thought out IDE. A lot of people I know are more productive with them, but the functionality tends to actually slow me down. The interfaces are generally point and click oriented, which I prefer to avoid. Another issue is that non-typical functionality tends to be hidden behind deep, unintuitive menus. Doing simple things often means digging through documentation, searching the web, or even manually digging through menus which wastes a lot of time for me. For example, building a static LUT with 255 entries. With vim (nvim), all I need to do is... qqILUT[<c-r>=i<cr>] = y;<cr><esc>:let i+=1<cr>q254@q. I'd be skeptical there's a way to do that in an IDE. I personally haven't had any issues using syntax based or explicit code folding in vim (nvim), but it's rare that I actually need it. Normally I can navigate by searching, code reference, generated documentation, or a code search and cross-reference tool though.
- WorldWideWayne 11y agoI think the scripting example is a little contrived, but yes that is someting you'd need a plugin for in most IDEs. There are certainly features of IDEs that vim doesn't provide out of the box too. Personally I just use SQL for generating sets.
- buildops 11y agoAre you having issues with speed? You can't accelerate Scons or most other Make tools, and CI is still slow when running thousands of tests.
- uxcn 11y agoNo. In most scenarios, make can parallelize builds and where compiling and re-compiling are still bottlenecks distcc and ccache generally scale. LLVM also tends to compile faster. For larger projects, cmake can also theoretically generate a configuration for ninja (faster than make) only changing the command line. As for testing, I haven't really seen bottlenecks with integration and unit tests. If anything, running continuous integration on Linux should be as fast or faster though. I tend to use googletest where I can.