1. 27

Hey guys,

I just started my internship yesterday (first internship woo!). I feel awkward and new, especially because they have me using Windows and Java (my two least liked things!) but at least I get to use Jira and Stash.

I was wondering what other people’s workflows, or just the assets you use on a daily bases, are. So, if you feel comfortable sharing yours go ahead!


  2. 15

    I wasn’t sure sharing my tools/workflow would help you much, as you state you’re on Windows, but I saw your comment saying you’re waiting for an Ubuntu install.

    I don’t use anything particularly out of the ordinary: i3 window manager, rxvt-unicode, zsh, vim. But what I will certainly advocate the use of: tmux. If you’re not already a user, pick it up, use it heavily. It changed the way I work for the better.

    It really helps keep things organized - for instance, I always have 3 sessions running: management, support, and personal. Each session will dictate what kind of tools are open or what kind of actions I carry out. I’m a sysadmin, so maybe these session names don’t speak wonders to you, but I’m sure there’s certain ‘categories’ that segment your workflow, and embodying that in a few shells can really help manage how you conduct your work.

    I am, of course, only pointing out one tiny feature that I find really useful, tmux is so much more, go read up on it if you’re unfamiliar.

    1. 4

      Yup I’ve been using tmux for a decent amount of time, it’s great!

      1. 1

        And a tip for anyone who has been a heavy user of screen long time, you can change the keybindings to similar of screen. (CTRL+A etc)

        With this the switch from screen is really simple.

        1. 1

          As it’s similar, I’ll join mine right here.


          • FreeBSD 11.0-CURRENT on a 13.3" UltraBook
          • i3 window manager – the WM_CLASS to workspace magic is gold.
          • xterm
          • zsh
          • ssh-agent (with different ssh keys for different purposes, think login to
          • hosts, pull from git repos, …) and this helpful snippet in ~/.ssh/config:

            Host *

            ControlPath ~/.ssh/sockets/master-%l-%r@%h:%p

            ControlMaster auto

            ControlPersist yes

            TCPKeepAlive yes

            ServerAliveInterval 5

            ServerAliveCountMax 1

          • tmux (with exposed SSH_AGENT_PID and SSH_AUTH_SOCK variables)

          • git (for work and fun)
          • svn (for FreeBSD purposes)
          • mutt
          • gpg
          • irssi

          When it comes to development practices:

          … and of course, the practice of not doing releases on Fridays.

        2. 9

          Development: iTerm 2 + zsh + Vim + Spf13.vim + the REPL for whatever language I’m working in + Git.

          I’ve also been using Idris-mode a lot lately and really enjoying it.

          Communication: IRC + Email

          1. 9

            Since everyone already posted a ton of shells, editors, and everything else, I’d like to emphasize the utility of git while developing locally. Loads of my co-workers only touch git to push code, but it’s such a fantastic tool while writing code. I continuously check my git diff to keep perspective on what I’ve written so far, and review myself as I move forward. Usually I write some code, review the diff, and git add once I have it the way I like.

            Every so often I check git diff --staged, to review all the changes I’ve made, and commit once I’m solid on that work. I try to commit everything I’ve done that’s essentially finished by the end of every day, only leaving the stuff that is definitely not ready uncommitted. Since it’s all local, this doesn’t bother anyone else. git add -p is essential for staging things piece by piece.

            Reminding myself what I’ve already done, and reviewing my own diffs continuously helps me write better code, and feel like I always know where I am. When mucking around in huge projects it’s easy to forget what you’ve touched, unless you check your diffs often!

            A pad of paper is also extremely useful, to map out whatever code you are working with. I like to keep small notes of what classes or methods do, especially interesting or unexpected characteristics, so I can quickly reference those notes while reading other code. Visually mapping out the relationships between modules/classes/functions is also useful to me, so I can easily see where a bit of code fits in to the big picture.

            Basically, I really don’t like the feeling that I’m forgetting something.

            1. 4

              I spend more time reading my diffs than writing code. I even git show after commiting just to be sure.
              Sometimes, a quick glance at a diff without context and pretty colors help you spot mistakes.

              git, vim and i3 are the three things I need to work efficiently and git is not the least of them.

              1. 3

                I’m quite fond of using Git to keep things in perspective as well. I found git stash -k to be a really helpful tool while doing that – it essentially stashes all changes except the ones you’ve staged. This is very useful for testing code that I’d like to partially commit (i.e. things I’ve staged with git add -p) just to make sure I didn’t forget to stage an important dependency of the soon-to-be-commited code.

              2. 7

                My goal for general computing and work is to avoid using the mouse whenever possible.

                Computer: Lenovo W540, Intel i7-4930MX, 16GB RAM, 128GB SSD

                OS: Gentoo

                Window Manager: awesome

                Terminal: urxvt

                Shell: bash with lots of aliases, functions, and scripts

                Text editor: vim

                Task management: taskwarrior

                Chat: weechat running in screen on a VPS to connect to IRC, bitlbee, and slack’s IRC gateway

                Email: mutt

                Browser: firefox with pentadactyl for vim-like keybindings

                Revision control: git

                Testing: vagrant + virtualbox to spin up a, typically Ubuntu, VM to run whatever I want to test

                Typically I will spin up a local VM with the code I am working on in a shared folder, then while I’m editing in one terminal (outside the vm), I can test in another terminal which has sshed into the vm. I find that it works quite well, and I don’t have to pollute my main OS with tons of stuff I don’t care about except for the project I’m currently working on. An extra benefit is that I never have to care about version inconsistencies, since when my VM is provisioned I know it has exactly the version that project needs.

                I am considering switching to packer + docker to do this, since it will use less memory and disk space while starting up faster.

                1. 1

                  Thanks for the taskwarrior link, looks like it may be what I’ve been looking for to manage project based todo lists.

                2. 6

                  Ubuntu on a mbp with some custom gesture support. Go + emacs and Cassandra for development. Irc and hipchat for communications. Git.

                  1. 1

                    Could I ask what you’re developing?

                    1. 3

                      It’s basically an indexed http request log. We have several thousand requests a second we need to log and index.

                  2. 5

                    Work: Mac Mini with OS X - terminal.app, zsh, tmux, vim

                    Home: Thinkpad X230 with (openbsd / debian) - spectrwm, xterm, zsh, tmux, vim, mutt

                    I’m a boring dude.

                    1. 3

                      For work (if you can) you should look at iterm2 :)

                      1. 2


                        1. 1

                          http://www.iterm2.com/#/section/documentation/highlights - follow mouse
                          - growl support for build processes allows you to kinda walk away/surf away and know when it’s done anyway.
                          - autocomplete (if you don’t hate it)
                          - themes is a huge one for me I use a few different themes depending on the atmosphere I am currently in to help with contrast so I don’t need to increase my screen brightness to blinding levels when I am in a darker area and vise versa

                          1. 2

                            I’m using iTerm2. I must say that I’m not impressed after 2 weeks of usage. The growl support is kinda silly, most of the times is not needed. The autocomplete feature, is nowhere to be found (my bad probably) and the lack of ctrl+click on links makes me kinda crazy.

                            I think I’ll go back to Terminal. That said, it’s always nice to have options. Better have iterm2 around than nothing.

                            1. 1

                              Sorry I’m a big fan of highlighting and color terminals so iterm2 was beautiful I use zsh for auto complete though I was told iterm2 itself has auto complete I really like the built in tonic though that probably is the biggest feature for me

                    2. 5

                      I spend most of my time in Emacs. I’ve set it up so that I can do anything development-related directly from within it - I use it to edit code, as a file manager, to manage git repos (Magit is fucking awesome) and as a terminal emulator. It’s also what I use to organize my life (Org mode + agenda mode).

                      I use Skype for personal IM and HipChat for work-related IM. I also use Screenhero for pair programming, Safari for web browsing, Mailplane for email and work calendar. And that’s about it.

                      1. 2

                        org-mode is seriously awesome and addictive. (I enjoy vanilla org-mode, + agenda, org-habit, org-drill, and various other circles of Org’s Inferno.) Curating my org-workflow is seriously encroaching on other aspects of my life and I love every meticulously tree structured second of it.

                      2. 4

                        I’ve moved all my chat communication to an EC2 node running ERC (an Emacs IRC client) and bitlbee (which bridges xmpp chats to IRC and lets me connect to my work accounts for Google chat and HipChat).

                        The trick is to run your client in a tmux session and connect to the node over mosh. That way you can move your laptop around, and mosh automatically reconnects practically instantly once the network comes back up.

                        The one downside is that you can’t browse URLs directly from your chat client. But I use urxvt as my terminal emulator, which lets me open any link displayed in the terminal using the keyboard: https://github.com/muennich/urxvt-perls

                        1. 4

                          Editor: Sublime Text on a GUI, VIM on a console (if I’m ssh-ing or something). May use Visual Studio if I’m doing C++ or C#.

                          OS: Any OS, really, I’ve had OS X in the past, I’m using Windows currently and all my laptops have some sort of FreeBSD or Linux distro on it. Though even if I’m on Windows on my home pc I always have a VM booted up with either FreeBSD or Linux for testing server apps.

                          Also, tmux / zsh / git / ssh / f.lux and finally grunt+livereload for web apps

                          1. 4

                            emacs (all development, org-mode, notation workflow, magit, shell, SLIME, cider/nrepl, general purpose text editing, file system management, and more).

                            leiningen + various plugins


                            Incanter (standalone and as libraries)

                            OS/dist: OS X, Debian

                            1. 4

                              Too many mouse haters in here. I’m a big fan of the acme editor. It took me a bit of time to really figure out, but once I did it fit very well.

                              Looking at it right now it’s handling my mail, tailing a development server, and has a handful of open files that I’m editing. I’ve got a few plumber rules so I can right-click a ticket ID & it’ll open up in JIRA, whack a certain link & have it open up a wiki page, etc. I’ve got a few plumber rules that’ll hit internal webpages & dump the output back into an acme window.

                              Acme is my one stop shop for everything - and if it’s not I’ll whack up a helper script so it is.

                              That said I’m also a weirdo that edits with a proportional font so maybe don’t listen to me?

                              1. 3

                                Development: OSX, iTerm 2, zsh + oh-my-zsh, Vim + spf13, TotalTerminal (when I need to exec one-time commands or if I need to read documentation + try stuff on the command-line at the same time) and git.

                                1. 3

                                  Great to see the tmux votes here. Changed my computer life too, also for the better.

                                  Day to day I use OSX and Terminal.app with basically tmux, bash, vim, git. I use homebrew for any other libraries or tools needed; I was loyal to MacPorts for ages but eventually realised it was just too painful and brew is so much easier, neater and less prone to requiring a 13th install of some obscure Perl version.

                                  I try to learn the default configurations of pretty much any app I use so that I never have to freak out because I’m on some unfamiliar computer and the mappings aren’t what I’m used to. Recently I’ve been getting heavily into using all the emacs bindings in bash, to the extent of ^H for backspace, ^M for enter and ^R/^P/^N for history instead of arrow keys, simply to avoid moving my hands too much.

                                  At work I email in alpine & Gmail, browse the web in Chrome, and any code I write is most likely Javascript against Python on App Engine. At home I use Safari for web and email in Mail.app; for personal/side projects I write JS for Chrome/Canary against Chicago Boss (erlang) & Tokyo Tyrant. Not that I’m particularly good at erlang, I’m not, though I’m learning - but even then CB makes integrating websockets into MVC web apps a total breeze.

                                  1. 5

                                    ^R for bck-i-search was a game changer for me. I will often follow my very complex terminal commands with a comment, just so I can ^R for them, like:

                                    git log | grep -B1 ‘Author: MyGitName’ | grep commit | awk ‘{print $2}’ | xargs git show | grep -E “^(+|-)\s” | awk ‘{print $1}’ | sort -rn | uniq -c # TOTAL_PLUS_MINUS

                                    1. 2

                                      Never thought of the comment at the end. Thanks!

                                  2. 3

                                    github, emacs, tmux, zsh, cmake, ninja, markdown, golang, clang, arch, irccloud, buildbot, freshdesk, google docs

                                    1. 2

                                      For dev: I’ll be using Windows (until IT can hook me up with Ubuntu), Jira, Stash, Java 1.7, AWS SDK, some in house tools.

                                      For communication/ office stuff: Google collection, cam scanner, and myPocket.

                                      1. 2

                                        development: VIM, gcc, linux, gnome3, rxvt, darcs, git, CMake communication: IRC, email

                                        1. 2

                                          development: OSx, IntelliJ with VIM & Scala plugins, iTerm, Jira, Git (and Tig) communication: my company uses Slack instead of email, Google docs for collaborative stuff, and confluence for mostly static stuff. For external email I use Airmail

                                          1. 2

                                            I’m doing RoR at the moment, so my kit for development is: OSX, iTerm2, zsh, oh-my-zsh, tmux, vim (ruby_focused_unit_test, pathogen, nerdtree, ctrl-p, endwise, fugitive), git.

                                            Lots of Ruby-specific stuff as well: RVM, pry, better_errors, binding_of_caller, meta_request, guard, pry-rails, m, etc.

                                            Then there’s the shared scaffolding: Gerrit, jenkins, gitweb, a series of cloud VMs, home grown build scripts, etc

                                            Workflow… well I primarily work from home on a small but very distributed team (I am 1 of 3 core devs, all in a different country/timezone). I typically develop in a local branch, writing unit/functional/integration tests as I go, push to the appropriate gerrit refs, and then we have a code review process as well as an automated test/build verification process. Then code gets merged, QA’d, and pushed out to production.

                                            Edit: communication is primarily via Skype, simply because the less-technical team members (product, managers, etc) can use it without the learning curve IRC has. We all would rather be using IRC :)

                                            1. 2

                                              Work is an all-Windows shop, so:

                                              C# in VS2012 with VsVim, SQL Server with Management Studio, using SQL Complete, TFS source control and build, WPF, NHibernate ORM. Communication and coordination using Bugzilla, Rally, email, Lync, and face-to-face. I’ve been doing some automation scripts using Ruby also, mostly in Notepad, sometimes in Rubymine that I already have for personal use

                                              Personal project: Rails webapp, using git and Heroku for hosting, written sometimes with vim with tmux and assorted extensions, and sometimes Rubymine (I find debugging in it to be easier so far). Naturally using Postgres and Activerecord, Devise, CanCan, and some other accessories.

                                              1. 2

                                                First off, congratulations on your internship! Enjoy your time and learn a bunch. Don’t get too upset about using Java and Windows, amazing software has been writing using both. Java itself is seeing a revival, as the JVM is very performant.

                                                I use OS X with MacVim, Terminal.app, Git, and SizeUp, writing Go, Ruby, and Python. For communication, my company uses a mix of Slack, GMail, Hackpad, Google Groups, Google Drive, and GitHub.

                                                1. 1

                                                  Thanks! I understand that amazing software has been written using both! Unfortunately I’m just (a lot more) comfortable with Unix/ Unix-Like systems.

                                                  With the languages you use it sounds like you have a very interesting stack!

                                                2. 2

                                                  tmux + tmuxp for terminals; hop for moving around; vim for file editing. (All of my $HOME configuration is up on Github.) A single vagrant box which itself runs docker + docker containers for managing databases (e.g. postgres, mongo, elasticsearch).

                                                  UNIX for everything else – because UNIX is the kitchen of the software chef.

                                                  1. 2

                                                    Development: MBP, iTerm 2, tmux, fairly customized vim setup, ever-present sbt console, sometimes IntelliJ with the Scala plugin; git (often via tig) for source control; github’s pull requests for code review. Macports for package management, though I do have a few things installed with homebrew.

                                                    Hipchat for chatting with coworkers, IRC for keeping a finger on the pulse of various open-source projects.

                                                    Gmail for work mail, fastmail for personal, jira (with greenhopper “agile” plugin) for shared task tracking, well-formatted text file as my engineer’s notebook. Confluence has documentation.

                                                    1Password for password managment.

                                                    Alfred for an application launcher, clipboard manager, URL-d/encoding text, opening terminals from a Finder window, simple math.

                                                    Dash for documentation, accessed via an Alfred command.

                                                    I was very happy switching to tmux. For a long time I thought screen was good enough; tmux is notable nicer.

                                                    1. 2

                                                      Communication: Slack, E-mail, SMS

                                                      Development Tools: Terminal ( Pro Theme ) with some custom formatting + Sublime Text 2 and Lint/Error Checking Plugins + DiffMerge for merge conflicts + Every browser excluding Internet Explorer ( I know thats a luxury ).

                                                      Languages: Python, JavaScript ( AngularJS ), LESS & CSS

                                                      Database: Postgres

                                                      Products / Services: Heroku, Amazon S3, Memcached, MongoDB, Rabbitmq, Celery, Selenium

                                                      Hardware: MBP Retina with Mavericks, Hackintosh that triple boots Ubuntu, Windows 7, and OSX at home for testing, iPad, iPhone.

                                                      1. 2

                                                        iTerm2 + fish + vim/Android Studio + git on OSX(Mainly)/SmartOS(One Project)

                                                        I use this setup for python/C/Java which is 90% of my personal language usage. I also use Matlab a lot for my PhD but that setup is basically just Matlab + git on a windows machine in my office.

                                                        Seems to be a lot of zsh usage in this thread, does anyone have a good argument for it over fish? If you haven’t tried fish perhaps why is it superior to bash?

                                                        1. 2

                                                          Compaq (that’s right) netbook running Ubuntu 14.04. I was actually on Windows for a while, but it became impossible to handle the Windows command prompt and package management.

                                                          My stack is pretty varied.

                                                          Python: Flask, Sublime Text 3 with SublimeCodeIntel

                                                          Nodejs: expressjs, Gulpjs, Bower, ST3 with JShint

                                                          Golang: Goji with the stdlib, Godep, ST3 with GoSublime (easily the best ST3 package)

                                                          I’ll usually use sqlite3 for smaller databases and rethinkDB for larger ones.

                                                          Frontend is done all vanilla.

                                                          EDIT: Oh, and I push to an Ubuntu 14.04 dokku server on Digital Ocean. Here’s a link if you want to check out the running processes: http://nucleol.us:5555

                                                          1. 2

                                                            Version control and issue tracker: GitHub

                                                            Email + documents: Google Apps

                                                            Virtual Linux servers (each developer has a few): Linode

                                                            Chat, video, screensharing: Kato.im

                                                            1. 2

                                                              I use Linux (Gentoo ~amd64), Openbox, xfce4-terminal, Bash, Vim, Git, Firefox, Skype, Redmine, ClusterSSH and MediaWiki.

                                                              1. 2

                                                                I live my development life in tmux and vim. I generally use Ubuntu, though I used to use debian, which was probably better . It doesn’t matter much what distro you pick for your workstation. Ubuntu’s not great, but it’s easy to set up.

                                                                I’ve started using Google Docs, though I really preferred writing design docs in HTML (or markdown) and getting feedback over email instead.

                                                                Almost all of my communication is over email, though I use irssi for IRC.

                                                                1. 2

                                                                  My setup really changes between what project I am working on.

                                                                  Most of my coding is on Windows or a remote connection to a different operating system from the first machine. This way all the core tools like browser etc stays always the same. I also prefer this because I don’t want to reboot my computer to play games.

                                                                  C++ coding

                                                                  For C++ coding my choice is VS 2013 with following extensions:

                                                                  • vsvim
                                                                  • Go to definition
                                                                  • VisualGDB

                                                                  For source control I use git. The VS has currently pretty solid git tools build in, but I still use the msysgit on the side.

                                                                  When coding stuff for Linux in c++. (Servers, etc.) VisualGDB is amazing. I need to consider buying it after the trial.

                                                                  Coding on Linux

                                                                  If I end up coding on Linux directly. (PHP, random scripts, something) I use tmux, vim, git and other tools.

                                                                  I prefer to run Linux on a VPS/virtualmachine and directly connect to it over SSH. I do not currently have any GUI installed on any of my Linux boxes.

                                                                  Documentation and source control

                                                                  On my personal projects documentation is in the code and some random .txt files in the codebase. I am currently not using issue trackers on my personal projects, other than a todo.txt file that I fill with stuff thats broken.

                                                                  For source control I use Git, with Github for public projects and Bitbucket for private stuff.

                                                                  1. 2

                                                                    Mostly webdev but I currently have a mobile dev job.

                                                                    Home: osx, node, terminal, Postgres, git, Sublime Text, browsers, sometimes XCode and Android Studio when doing mobile apps.

                                                                    Work: Ubuntu with Android Studio and the whole SDK, Sublime Text, TFS (I’m the weird Android guy in a mostly-Windows shop). This changes after tomorrow with a new job to something more like my home setup.

                                                                    1. 2

                                                                      tmux + vim for ruby and related frameworks :-)

                                                                      1. 1

                                                                        I use vim, screen, git. I also use a “launcher” app of my own called fed that does some fuzzy-searching to find the files I want to edit in the directory structure, and opens up an extension-specific editor (so if I want to edit text, it’ll open vim, but if I say fed logo.png it’ll open up Gimp). Here’s a timelapse of my working screen (5 minute video): http://www.youtube.com/watch?v=Hwn7mfmo0SQ

                                                                        Main dev machine is a simple Samsung laptop with Xubuntu 14.04.

                                                                        1. 1

                                                                          At my company, we use Slack, Asana, and Bitbucket to collaborate between our Minneapolis and San Francisco offices. We’re on Macs exclusively and use Xcode for iOS dev and IAR Workbench for embedded dev. Most of us use Sublime Text for everything else.

                                                                          1. 1

                                                                            Eclipse, saddled with every plugin I can find for aspirational hacking. Work is all Java. Fun is mostly Scala. But then sometimes I get frustrated and pull out the therapeutic SLIME mode for Common Lisp.

                                                                            Previously Emacs. You can never quit emacs. Nowadays I use it mostly to clean up and format data, but also for Scala and Common Lisp. Outside SLIME, Ensime and org-mode, I really don’t use many emacs modes.

                                                                            iTerm is my terminal of choice. I use my high-end Macbook Pro like a 4.4BSD: . I have hacked on every machine I have ever owned, and learned it at the systems level. But not my Mac. I’m entirely unexcited about the Apple platforms. I use it with resentment, only because Ubuntu is invariably on shit hardware. I am NOT a Mac power-user.

                                                                            Brew for downloading. Git for version control. I actively pay for Free Software.

                                                                            1. 1

                                                                              Editor: Brackets (It markets itself as a web coding tool but it’s very extensible and easy to use, yet powerful)

                                                                              Shell: oh my zsh (powerful git and mercurial plugins!)

                                                                              I automate a lot of tasks with javascript. BitchX is my favorite irc client

                                                                              1. 1

                                                                                I use Emacs for development (even though I’m comfortable with vim) except for Java, where I use Eclipse. When I used Microsoft Windows I always installed Cygwin, but maybe MSWin has gotten better since then; last time I had to use MSWin for work was 2001. (Also on Windows NT, I found Vim invaluable because it didn’t lose my edits when the OS crashed. I hear that’s less of a problem these days.)

                                                                                I use source control for even small personal projects, and for that I’ve moved over the years from RCS to CVS to Darcs to Git. Mercurial would be about as acceptable as Git, I think. You can use Git even to manage your local work on projects where the team is using some other source control system; it has good SVN integration, for example. (This is often very valuable for fixing problems.) There’s really no reason for not using source control once you’re more than a few hours into a project. I believe this so strongly that at one point I wrote my own primitive source control system because I was using my wife’s Mac and didn’t have an internet connection.

                                                                                These days I spend a lot of time reading Stack Overflow to figure out how to do things.

                                                                                We recently had an article about what tools to use with Java whose author seems to know a lot more than I do. One of the things about Java these days is that there are a few different higher-level languages that can integrate smoothly into Java systems: the Rhino JavaScript interpreter, of course, has been part of the JDK since at least Java 6, but there’s also Jython, Clojure (which I haven’t tried, but it’s high-performance, extensible, and comes with a library of efficient immutable data structures), Scala (which I have tried, and don’t recommend, even though it’s also high-performance) and this thing called “Kotlin” that I hadn’t heard of before.

                                                                                For remote pair-programming I’ve been using VNC (either x11vnc to share my normal X display, or x4vncserver, which works more reliably), using ssh -R to export the VNC port to a remote server where my pair can reach it, and Skype, which sucks more and more all the time.

                                                                                Shells, editors, and window managers are relatively minor by comparison, I think, except for Eclipse for Java. I kind of gave up customizing them a long time ago. However, I found GNOME 3 and Ubuntu Unity sufficiently frustrating that I switched to XFCE. Most of the time I’m just looking at a two-megapixel browser or editor window, and I just want the window manager to get the fuck out of the way and stop stealing my damn function keys.

                                                                                (It’s also nice to use js3-mode in Emacs for JS, since it supports comma-first style and gives you instant syntax error messages and color-coding for undeclared variables.)

                                                                                I’m running screen on the (Ubuntu) server with dstat and iostat to keep an eye on things. Maybe I should switch to tmux.