Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Why I Don't Use an IDE

Why I Don't Use an IDE

As developers we strive to maximize our productivity by using tools that streamline workflow and by automating as many things as possible. An Integrated Development Environment (IDE) is software that is intended to streamline a developer's workflow by handling setup of the development environment and providing an easy to use GUI. While IDEs make many things easy they come at a cost of flexibility, transparency, and even developer productivity. By using a set of individual tools instead of an IDE we can create an environment that is extremely customizable and allows for greater productivity than that of a traditional IDE. In this talk I'll talk about my decision to not use an IDE and how I came to use the set of tools that I do now. I also demo the setup I have and go over the basics of each tool I use.

Trevor Brown

June 29, 2016
Tweet

More Decks by Trevor Brown

Other Decks in Programming

Transcript

  1. What is an IDE? An integrated development environment (IDE) is

    a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of a source code editor, build automation tools and a debugger. Most modern IDEs have intelligent code completion. – https://en.wikipedia.org/wiki/Integrated_development_environment
  2. Problems with IDEs • Often designed for a specific language

    or framework • Hard to find IDEs that provide good support for obscure languages • GUI is often a veil
  3. Advantages to Using an IDE • Easy to setup •

    Easy to learn • Some things automated out of the box
  4. Why No IDE? • I don't normally use a debugger

    • Unit tests and type analysis instead • Constantly trying out new languages and frameworks • Regularly use Erlang, Elixir, Bash, Ruby, and JavaScript, so I need something that works with a lot of languages • IDEs are often harder to customize than individual tools • Often proprietary
  5. What is a version manager? • Ensures the environment your

    project runs in has the right versions of it's dependencies available • May also handle building and installing the dependencies • Asdf is primarily focused on managing language versions • Asdf is intended to replace the language specific versions managers out there like...
  6. Existing Version Managers • Ruby's rvm, rbenv, ry and a

    dozen other version managers • Elixir's kiex and exenv • Erlang's evm, erln8 and kerl • Node.js's nvm and nvmw • ...
  7. asdf • Generic version manager • Created by Akash Manohar

    • MIT License • ~380 stars on GitHub • Support for each language comes in the form of a plugin • Plugins already exist for Elixir, Erlang, Go, Lua, Node.js, Python, Ruby, and Scala
  8. asdf is Simple • 100% Bash • Doesn't alter your

    path Adds one directory to your path • Doesn't affect any existing software • Doesn't replace the `cd` command • Plugins are just Git repositories
  9. How Does it Work? • Plugins for each language or

    dependency • Plugins handle downloading, building, and installation of available dependency versions • Asdf invokes Bash scripts contained in the plugins when needed • Asdf creates a shim for each executable found in the installed dependency
  10. Version 2 Version 1 How Does it Work? • Asdf

    creates shims for each executable found in the installed dependency • Shims invoke the correct version of the executable on the fly Binary Shell Binary Version 3 Binary Shim
  11. Similar Tools • Lots of similar tools out there. Most

    are more complex and don't offer any additional benefits • Nix is functional package manager that provides more guarantees about the environment your software runs in https://nixos.org/nix/
  12. Zsh

  13. Zsh • Advantages over Bash – Oh My Zsh –

    Better autocompletion – Plugins – Easier to customize the prompt • Similar to Bash • Custom aliases and scripts to make things even easier
  14. Vim

  15. Vim Plugins • Vundle • CtrlP • NerdTree • Syntastic

    • vim-easytags • vim-gitgutter • Vim-pencil • Language and framework specific plugins
  16. Vim Tips • Do things the right way (disable the

    arrow keys) • Don't use too many plugins • Be careful copying from others' vimrc files • Write your macros and functions • Learn VimL • Do everything in vim
  17. tmux • Tmux sessions • Sessions can contain multiple windows

    and panes • You can disconnect from a session and reconnect later • You can have multiple connections to a session • Tmuxinator automates setup
  18. tmuxinator • Allows you to define “projects” • Projects define

    the windows and panes present in a tmux session • Projects define what should be run in each window and pane • Projects also allow you to specify “pre” commands to be run
  19. Use Dotfiles! • Configuration is everything when using tools like

    these • Use Git to manage your dotfiles – Makes syncing between machines easier – Makes sharing easy
  20. Conclusion • Really happy with my workflow • Very performent

    • Had to read a lot of documentation, but learned a lot in the process • Took a lot of work • Not going to work for everyone • Could hinder me in the future?
  21. Advice • Learn one thing at a time • Setup

    a dotfile repository • Don't overload yourself • Don't copy the dotfiles of others • Look at the dotfiles of others to learn • If you need a command, tool, or plugin, it probably already exists. DuckDuckGo is your friend