With every new technology, comes new challenges along with it. These challenges can entail learning a whole new language, a completely different environment, or an entirely different way of thinking. New development platforms are emerging everyday. With the latest introduction of Virtual Reality, Augmented Reality, and Voice Recognition into the mainstream product line, the ability to learn and utilize these technologies to stay relevant has become key to creating innovate applications. All new technologies may seem like a monster to tame. It takes the right tools for the job to create an enjoyable workflow. Leaving you time to focus on what is new, and not what you already know.

Most recently here at Shockoe, I have been working in web development to tackle a project based around Angular 2 and a RESTful API service with Hapi for Node.js. Working mainly with iOS development during the majority of my time here, transitioning to these platforms held its own set of challenges. XCode Integrated Development Environment (IDE) for iOS development greatly helps to guide and assist the developer to correct syntax errors, track source control changes, assists in library/framework references, and warn you of potential issues before compilation. With Angular 2 and Hapi, the tools that are needed to be used to assist in development are left up entirely to the developer.

After working for some time with a closed source text editor Sublime, I was introduced to an open source text editor Atom. Atom advertises being modern, approachable, and hackable to its core. It is a text editor for developers, by developers. Being open source, anyone can collaborate and assist in improving Atom for everyone. This allows Atom to be much more expansive and reach a wider audience of needs for the text editor. Atom has over 5000 packages that can help with completion, linting, source controller, formatting, and much more. Atom’s support for packages and customization allows you to tailor the text editor to your specific needs. The auto-completion features of Atom provide built in suggestions for syntax completion by looking through the open solution and buffers to match strings. Atom also has configuration settings to standardize the format of the code you write; keeping it organized and easy to read. Also, users can install and set different Themes to alter the UI of Atom.

As I began development in Angular 2, it was faced with a problem. It’s written in a new language, Typescript. While the concepts were not new, the syntax for implementing them were. The Atom-typescript package gave me everything I needed to ensure that I was writing in Typescript properly and without having to reply on catching small issues at time of compilation. This greatly boosted my productivity and confidence when working with this new framework. Some source control packages that have posed the most use to me are Git Blame and Merge Conflicts. Git Blame will show you the last person to make edits to a file line by line. Merge Conflicts will allow you to detect potential merge conflicts before they happen so they can be resolved before you put up that next pull request. Atom has some great extensibility into Git source control, but what it lacks can be compensated by the terminal. More specifically, with a bash shell alternative, Z-shell (Zsh).

Z-shell (Zsh) is a Unix shell that is designed for interactive use. It contains many of the features of bash, but incorporates many of its own to improve upon bash. Zsh improves upon bash in a few different ways that make it much more interactive and user friendly. Zsh “cd completion” will list all sub directories using the command “cd <tab>” or “cd d<tab>” in a case sensitive and well formatted manner to allow the users to traverse the directories with the <tab> key. Allowing the User to quickly and easily chose the preferred destination without knowing the exact path by memory. These commands can then be chained to complete full directory paths. “Git completion” assists the user in finding the necessary git commands more quickly. For example, when changing a branch in bash, the user will need to know the full case sensitive name of the branch. With Zsh, a user could write “git checkout <tab>” and be presented with a well formatted and easy to traverse list of branches for the given repository. I have only touched on a couple of the useful features of Zsh but there are many more ways Zsh can be used to make life using the terminal easier.

Zsh really shows it colors when combining it with iTerm 2 and Oh my Zsh. iTerm 2 is a terminal emulator that extends terminal features into allowing for Split panels for multiple terminals in a single window, paste history from your clipboard, and configurability to change the appearance. Oh my Zsh can be used in conjunction with iTerm 2, or the MAC terminal, to manage Zsh configurations. The framework provides plugins and themes to further extend the features of your terminal. The themes provided by Zsh are great and let the user add a touch of personality to a historically boring prompt.

As our team began working on this new Web Development project, we needed to be able to manage our tasks, record time taken for each, and be able to jump between other projects we are working on.  Oh my Zsh and the ‘Avit’ theme have helped me to manage my time and tasks. With the theme, I can see what my current branch is in any given directory. The branch will be listed alongside the current directory path to indicate where my source is pointing to. Along with the branch name, an indication is given by a checkmark or “X” symbol to notify me of a clean directory or if I have outstanding changes that need to be committed. These two indicators alone save time from listing branches and checking statuses often, thus increasing productivity. A big feature of this theme that is not seen in many others, is a time stamp from your last commit. Along with branch and commit status information, a timestamp in seconds, hours, minutes, days is shown to indicate how long you have been working. Many times during the development process a developer can lose track of time while focused on the task at hand. Leaving the developer scratching there head and giving a rough estimation of the time it took them. With this handy tool, time estimations can be much more accurate.

With these tools combined, productivity can be greatly increased to improve workflow. A decluttered workflow allows for a decluttered mind. Whether it’s a new technology or an existing one, either of the tools can be used to boost your productivity and confidence to taken on a monster problem. Atom and Oh my Zsh have many more features and I only scratched the surface of what is possible. Check out the Atom website and Oh my Zsh repository for more information on features and how to get started. I highly recommend implementing these tools into your current setup to see how you can make them work for you.