GithubBack in college, I stored all of my side projects on an external hard drive and carried it around in my bag. If I made a change to the code and broke something, there was no way to revert back to a working state other than hitting undo several times in each file. With an online version control service like Github, I have the ability to revert back to any previous state. I also have a log of who made any changes, why they did, and when. Since Github offers free online repositories, I use it as remote backup for my projects, in case my computer craps out. I couldn't imagine my life without a service like Github, and I'm never going back to storing projects on a hard drive to carry in my bag!
VimThe learning curve can be pretty steep, but after taking some time to learn it, Vim is one of the most productive text editors out there. Since adopting Vim, I find myself longing for the key-bindings in any application where I have to edit text! Rather than clicking around or reaching for the arrow keys, I can easily reposition the cursor by switching to command/visual mode. All without leaving the comfort of home row! Vim commands also force me to plan out my actions prior to manipulating any text. I quickly brainstorm what needs to be done, type the proper command, and execute. This makes the act of editing text feel a little more like programming, which keeps my mind in a problem-solving state while writing code.
TmuxTmux is a terminal multiplexer. In short, it lets users manage several terminal sessions within a single terminal window. It supports cool things like window splitting and tabbing, which lets developers customize their own layouts. While those features are awesome, I really appreciate the ability to attach and detach from individual Tmux sessions. If I'm in the middle of working on a Rails feature, and I'm suddenly interrupted, I can detach from my current session and create a new one. Once I'm done tending to the interruption, I can reattach to my previous session and continue where I left off. My terminal layout and running processes are preserved!
TDDI started working with Ruby on Rails and test-driven development a couple of years ago without any prior experience with either. Two years later, I am convinced that a well-written test suite is essential to any project. TDD is a process that relies on developers writing automated tests prior to any production code. By following this paradigm, I'm forced to think about the design of my objects before I implement the code. Later down the road, when I inevitably refactor those objects, my tests help ensure that my code changes don't break the original contract. That is, the objects' original behavior and interface remain the same. TDD and testing provide a nice safety net for any project, why be without it?
HackerNewsHN is my go-to resource for anything and everything related to software and tech. The concept is simple: users share links to articles about anything from hot new web frameworks to clever programming techniques. In the comments, participants can share their experiences and insights. They also often have fiery debates, giving readers several different perspectives on any number of issues affecting the software community. Overall, HN gives me the content and community I need to make myself better at what I love to do.
So, with all that said, I want to give a big thank you to the creators and maintainers of the aforementioned tools and techniques! You've made my job and hobby easier and more enjoyable!
What are you thankful for this year? Let me know in the comments!