7 coding tools that will maximize your effectiveness
Tags: bash, testing, productivity, programming
Published: 2020-08-18 18:51:37

When learning to code, developers-to-be are usually taught to code vanilla software. In the workplace, however, developers use many tools to speed up their coding. Common tasks like testing, running various scripts, and programming environment control are just a few examples of when an extra tool comes in handy.

The trouble is, there are many of these tools on the market, and it’s hard to know which are best. It often takes years of trial and error to discover which tools are the most helpful. To save you that effort, we asked some experienced developers about the tools that have helped them become better coders and maximize their efficiency on the job.

<br>

**Today, we'll look into these 7 tools:**
* [I3 Window Manager](#I3)
* [Vim](#vim)
* [Bash](#bash)
* [Functional programming](#functional-programming)
* [Reflect](#reflect)
* [Regex](#regex)
* [RegExr](#regexr)

<br>

<br>

<h3> <b> Stuck at home? Get 6 front-end courses for free </b>
 
Educative is providing 6 free front-end development courses for people whose life or livelihood has been interrupted by Covid-19. Build new skill sets and increase your hireability at the same time.
 
<b>[Covid-Relief Scholarship](https://www.educative.io/covid-scholarship)

<br>
 
<a name="I3"></a>

## 1.  Linux I3 Window Manager 

Developers have long used Linux for its flexibility and customization options. I3 furthers these options to provide near-complete control over your programming environment.

I3 is a lightweight open-source tiling window manager for Linux. Window managers are used to control the appearance and placement of windows on a screen. Tiling window managers take this a step further by automatically resizing and rearranging windows to always use the full-screen space without overlapping. This tiling works over the top of your operating systems graphical user interface (GUI) to make changes directly.


Here are some ways I3 Window Manager (i3wm) stands out:

* **Lightweight:** I3 is simple and efficient. It contains only essential functions without extra fluff and is specially designed for developers to use minimal processing power.

* **Keyboard Controlled:** I3 has extensive keyboard shortcuts built-in for any desired behavior. You can also add additional shortcuts directly to your `config` file. You can move tiles, open the terminal, change layouts, and more, all without touching the mouse.

* **Total Screen Usage:** By using tiling, I3 ensures you never have to search a pile of tabs for a single window. You can have as many tiles open as you want while minimizing eye strain with bigger windows. This kind of tiling system is perfect for system administrators who need multiple terminals or anyone who needs test and draft terminals.

* **Custom Themes:** I3’s appearance is fully customizable to fit your aesthetic. Operating systems like Windows or macOS have certain visual elements set as unchangeable. With I3, every inch of the screen is yours to customize. Fine tune your background, window appearance/behavior, notification appearance, and more.

<br>

### Expert tip: Workspaces with I3

One of I3’s most useful tools is the ability to group windows into numbered workspaces. Developers often set workspaces for different parts of their workflow. You can quickly switch between workspaces by pressing `super` and the index of the workspace. This will hide all current windows and position the windows of the selected workspace.

Optimal use of workspaces speeds up productivity. They’re also useful for dual-monitor setups as you have a workspace open on each monitor and quickly switch which monitor a workspace is currently on in just one keypress.

<br>

<br>
 
<a name="vim"></a>

____

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/h0aqulypmmybsxb35ry7.png)

____


## 2. Vim
Vim is a text editor for most programming languages. This developer-focused text editor focuses on key binding customization and coding efficiency. 

It’s a modal text editor, meaning it can have multiple modes that are each optimized by the user for a specific task. For example, you may have one mode set up for Python and one for C++. These modes allow one keystroke to have different behavior depending on the language, such as language-specific shortcuts. 

Like I3, Vim is entirely keyboard controlled. By cutting mouse use, you can reduce downtime and reduce workflow interruptions. Vim is also designed to work on nearly any major platform, which is ideal for team collaboration. 

Finally, Vim’s shortcuts are all configured in a sharable `.vimrc.` file. Many developers post their tested files on Github. Starting with one of these files allows you to benefit from your peers’ experiences while leaving your personal version available for individual editing.

<br>

### Expert tip: Setup Vim shortcuts using the DRY principle

One of the most core paradigms held by programmers is DRY: Don’t Repeat Yourself.

We see this in code as the ability to recognize and extract repeated code behavior into a modular method. This modular thinking allows you to type each behavior only once and then simply call the method whenever you need that behavior later.

Use this same paradigm to set up your Vim shortcuts for efficiency. For example, if you notice that your work frequently requires you to implement a binary search tree in Java, you can set up a shortcut to paste a binary search tree template. 

<br>
 
<a name="bash"></a>

___

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/jeqoorreecx4n1xb8lz4.jpg)

___

## 3. Bash 

[Bash](https://www.educative.io/blog/bash-shell-command-cheat-sheet) is a free Unix shell developed for the GNU Project. It has long been used as the default login shell for Linux, and more recently, MacOS and Windows 10. Other than logins, Bash supports hundreds of commands that can be called from within the application.

Bash is known for its scriptability. Rather than typing in a set of commands each time you want them, you can instead save one shell script file that contains all those commands. Each command will execute in the order that they’re entered.

Bash acts at a near-bottom level, meaning these commands can manipulate files and memory all without opening a desktop app medium. For example, you could create a shell script that systematically transfers the full contents of a hard drive to another device without ever opening a file manager like File Explorer.

By bypassing desktop applications, Bash can work more efficiently and often allows for more specialized tasks. 

>*See Educative’s article on [Top 25 commands and creating custom commands](https://www.educative.io/blog/bash-shell-command-cheat-sheet) for a cheat sheet of all the best commands for developers.*

<br>

### Expert tip: Use your Bash history

Effective use of Bash history can make the difference between competency and mastery. To make sure you’re getting all you can out of your history, here are a few helpful commands you won’t want to forget:

**Multi-Window Enabled History**

By default, Bash only records history from the first instance opened while all subsequent windows have their histories lost. The following command enables all active Bash windows to write to the history, so you never lose a command again.
```shopt -s histappend```

**Repeat Last Command**

Repeating the last command executed is a common function in Bash. You can enter any of the following 4 commands:
* Press up on the arrow keys to view the last command and `enter` to execute it
* Press `ctrl+p` to view the last command and `enter` to execute it
* Type `!!` in the command line
* Type `1-!` in the command line

>You can add additional elements to commands repeated with `!!` by including them before or after: ``sudo !!``

**Reverse Search History**

You can search Bash’s history for past commands. Simply press `ctrl-r` and begin typing your search to have Bash autofill with matching lines. If multiple lines match, press `ctrl-r` again to cycle through them.

<br>

<a name="functional-programming"></a>

## 4. Functional programming

Functional programming is a declarative programming. Programs are constructed through single or combinations of small first-class functions that do not have side effects. Declarative programming focuses on building solutions to follow *what* is to be done rather than *how* it will be done. You can easily design declarative programs thanks to the mathematical, logical roots of the paradigm.

Functional programming is more modular than other approaches. Splitting your program into smaller functions allows you to reuse them across your program. Larger problems can be solved by combining these smaller modular functions. This allows you to reuse any part of your solution individually.

Finally, functional programming functions do not have side effects. This means that data is never changed in functional programming. 

For example, say I wanted to make a program that starts with `n`, then passes `n` to `function1`, and finally passes the result of `function1` into `function2`. Let’s see how this differs in pseudo-code:

**Block Approach**

```
int n = 5;
n = function1(n);
n = function2(n);
return n; 
```

**Functional Approach**
```
int n = 5;
return function2(function1(n));
```

In the functional approach, there are no side effects to our function as `n`’s value is used but never changed. By passing `function1(n)` directly into `function2` rather than an augmented `n`, we have solved the problem declaratively. 

<br>

### Expert tip: Functional mindset, not language

There are functional programming languages that enforce this paradigm, such as Clojure, [Scala](https://www.educative.io/blog/scala-101-a-beginners-guide), or Haskell. While these have great capabilities, they can be a difficult transition if you’re unused to functional programming.

To start out, try programming in your current language using a functional mindset. Here are a few ways to do that:
* Use `map`, `reduce` and similar operations over counters and loops to shift your thinking away from block programming
* Use local scope variables and functions to practice cutting downside effects. Try to notice and reduce the side effects each time you code.
* Prioritize recursive solutions as recursive solutions require functional thinking to create. This will give effective practice before moving to fully functional.

<br>
 
<a name="reflect"></a>

____

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/oxewm8m4c9jb17uoxi4v.PNG)

____

## 5. Reflect

Regression testing is the act of confirming that developed software still functions after an update. This is an important part of a developer’s life, as updates are so common. Unfortunately, the process can be highly tedious when we have to cover all possible error conditions.

Reflect solves this problem by creating automated regression tests for any website. This software doesn’t require any installation and can be used with any JavaScript framework.

**Here's how it works:**

1. Enter the “record a test” mode
2. Load up your site’s current, working page
3. Click through the functionality that you wish to be tested
4. Stop recording the test; this will generate a test script to replicate your clicks
5. Enter the URL of your site’s test version
6. Activate the test script
7. View recorded site results.


The results of the test will be a video of what happened as well as prints of network requests and the JavaScript console. Getting all this info at once allows you to diagnose the problem quickly and at its source.

You can create the test case once and repeat it an unlimited number of times across a site's lifetime. Not only will this save you countless hours of manual testing, but it also automatically generates video recordings of each test to document the exact error case. 

In short, Reflect is becoming popular with developers because of its simplicity, repeatability, and accuracy.

<br>

### Expert tip: Reflect’s advanced functions

What we covered above is just the tip of the iceberg for what Reflect can do. Here’s a list of some other helpful functions you can use with Reflect:
* Schedule tests to be completed at any interval to ensure your site is functioning properly even when you’re not around.
* Combine scheduled tests with failure notifications to decrease response time to site outages
* If you need to change a test, you can edit and re-record individual clicks or multiple sections within a Reflect test rather than re-recording the entire process
* Use the automated visual detection tool when changing site appearance to detect malfunctioning elements too different than the input expected case

<br>
 
<a name="regex"></a>

## 6. Regex
Regular expressions, or regex, are a set of characters that describe the behavior of a search pattern. They’re often used for string-search algorithms to find sections matching the pattern.

Bash has a unique regex operator `=~` which searches for matches of the given regex pattern. For example, ``if [[ $digit =~ [0-9] ]]; then`` would search a string for any instance of a digit.

Other than Bash, both Python and Java support regex parameters.

These are great for data validation and other text processing tasks because they can implement very complex search parameters with just a few characters. They’re also recognizable by developers across the world as they’re part of *regular language* established by computer language theorists.

Overall, they’re quick to pick up, widely understood, and have great complexity potential. Learning regex is a great way to widen your skillset and give you access to a powerful tool on Bash, Java, or Python.

<br>

### Expert tip: Web scraping with regex

One of the most common uses of regex today is web scraping, a process of extracting select information from a mass collection of websites. This is because you can use regex to extract substrings matching the parameters from the greater searched string. 

There are many applications of this, for example, you could search a competitors site for their prices on a given product:

```js
	$:\s+([^\s]+)
```
This regex searches for anything that comes after a dollar sign and extracts it to a separate file. Once complete, this file would allow your company full access to compare prices across dozens of products.

The above is just one example using only a single expression. Web scraping is a powerful tool for modern companies and will continue to grow in popularity. Learning regex for web scraping can give you a competitive advantage in more analytical development positions.

<br>
 
<a name="regexr"></a>

___

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/2xhqs1jlduxswz56k6k4.png)

___

## 7. RegExr
While regex starts off easy, they can quickly get very complicated. Look no further than this regex to match specific types of URL.

```
^(http|https|ftp):[\/]{2}([a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,4})(:[0-9]+)?\/?([a-zA-Z0-9\-\._\?\,\'\/\\\+&amp;%\$#\=~]*)
```

You can clearly see just how complicated they can get.

RegExr is a free regex visualization and testing tool that aims to make it easier to understand complex regex functions. As regex is standardized, RegExr simply parses all sections of the regex and translates their meaning into an explanatory sentence form. You can also hover over these explanations to see highlights of exactly where in the expression it was found. 

Below, I input the complex example used above and used the explain function. See how the explanation is color-coded with the given section highlighted:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/uo2izl0tzgznmfkc5zal.PNG)

RegExr saves you time of working with longer regular expressions. It also removes the need for library memorization. On the site’s side, you can find a full bank of regex formula and their uses. Simply clicking them inserts these formulas into your expression.

Finally, RegExr can be used to test your expressions by filling the “test” area with example text. RegExr will apply the drafted regex to search the example text to highlight any matches. You can hover over these matches to get more information on them, like what section of the expression caused this to be picked up.

<br>

### Expert tip: Avoid long regex

While RegExr can help to explain long regexes, they’ll always be harder to understand than shorter expressions. Prioritizing shorter expressions will allow you and your team a better shot at understanding the expression at a glance. Further, getting a single expression to complete all search parameters is a time-consuming process that becomes more prone to error.

Try applying multiple smaller expressions that each search for one or two things. This not only fixes the problems stated above but allows you to reuse some or all of the expressions in later projects.

<br>
 
<a name="next"></a>

## Wrapping up and more resources

With that, we’ve completed our look at 7 tools and software to help you be a more efficient programmer. From Vim, to Reflect, to RegExr, we explored some of the most used and beloved tools suggested by developers, for developers.

While some of these tools have a learning curve, I assure you that you’ll ultimately save hours of time and thousands of keystrokes by mastering them.

**Do you have any other pro tips or tools that have helped you? Leave a comment below!**

<br>

### Continue reading about productivity 

* [10 tips for managing time estimations on coding projects](https://www.educative.io/blog/10-tips-for-managing-time-estimations-on-coding-projects)
* [COVID-19 Work from Home Series](https://www.educative.io/blog/work-from-home-devices-for-developers)
* [15 JavaScript Tips: best practices to simplify your code
](https://www.educative.io/blog/javascript-tips-simplify-code)