Creativity Flows Through Optimization

Eric Schwartz
Learn. Love. Code.
Published in
6 min readDec 7, 2016

Coming into Flatiron School, I had virtually no coding experience. And although I enjoyed the pre-work, it was impossible to tell in such a short period of time if I’d want to pursue coding as a career. Fortunately, that uncertainty was resolved within the first couple days of class. I definitely want to be a developer… and one of my favorite aspects of the coding process is optimizing my environment to work for me. Once I discovered how vital this is for developers, I knew I’d feel right at home.

The concept of setting up my computer in a way that will maximize productivity is something I do have experience with. As a live audio engineer, I needed to be able to take what I was hearing in my head and make the necessary changes happen in real-time for an audience. To make my life easier, I would spend a large part of sound check setting up the console in a way that would allow me to quickly access the controls I needed most. These days, most sound boards are digital, and therefore operate like big computers with knobs and faders. I could basically assign these knobs and faders to whatever variable I would need to control. The older analog boards don’t have the flexibility, and coming across one often meant physically re-patching cables, or simply dealing with the inconvenient layout I was given. Not ideal.

My favorite console, the Yamaha CL-5.

When I wasn’t on the road, I was an assistant engineer in a small recording studio. Actually, mixing studio would be a more accurate name. I spent 99% of my time there sitting in front of a computer, working on projects that had been previously recorded and sent to the studio to be mixed and mastered. There, I learned the value of templates and keyboard shortcuts. The concept was that the mouse should only be used when absolutely necessary. I had initially pursued a career in audio because I loved music, but I found that I equally enjoyed the process of maximizing productivity using software.

This became even more apparent when I was at home writing music for fun. I learned that the quicker I could get my ideas out of my head and into a recording, the the more successful my writing would be. I spent lots of time playing with different DAWs (Digital Audio Workstations) and setting them up in a way that meant I wouldn’t have to think about how to achieve a certain function. I could simply focus on making music without getting distracted by the technical aspects. For example, I could open a DAW, and I’d automatically have the mix window open on one monitor and the arrangement window on the other. (Producer lingo not crucial to the point.) I’d have several tracks loaded with virtual instruments and settings that I’d commonly use, including a piano sound to sketch out ideas and a drum kit preloaded with beats. I taught myself to use keyboard shortcuts for the most common functions related to recording and editing. I really had an efficient system and would have plenty to show for it if it weren’t for my apparent inability to finish a frickin’ project. But I digress…

My dual-screen setup

Midway through the second week of bootcamp, I can already see how much creativity is involved in coding, and just like in my home music studio, I don’t want my computer to get in the way of that creativity. I don’t want to think about scrolling around to find that broken method. I don’t want to get distracted while I’m spending a minute moving code from one place to another in my text editor. I don’t want to have to think about navigating through my folders before I clone down a new project. Also, if I’m going to be staring at a screen for several hours a day, I want its content to be pleasing on the eyes.

I’m sure my setup will evolve, but here are some tricks and tweaks that have been working for me so far. Even if they’re not new or directly helpful for you, hopefully they’ll spark an idea for your own coding environment.

Spectacle

Spectacle is an app that grants you the ability to quickly and easily arrange windows to your heart’s content using keyboard shortcuts. It has already become second-nature to me to set up the windows my way upon starting a lab. It’s also super easy to resize and reposition things in a pinch once you get a feel for the key commands. No more moving the mouse to grab edges.

.bash_profile

Edit your .bash_profile to create a one-word shortcut to important folders. Terminal always opens in your home folder, and I found it was tedious to type a full directory path every time I wanted to clone down a lab into the appropriate folder. To create a shortcut, open terminal and type:

atom ~/.bash_profile

This will open your bash profile settings in Atom. (If you don’t use Atom, replace “atom” with “subl” or whatever code corresponds with your editor.) In the bash profile settings, look for the Helpful Functions section and add the following:

function shortcut {
cd /Users/$USER/path
}

$USER is your home folder. Keep that as is, but replace the bold words with a shortcut word and the path to the folder that you want the shortcut to access. Now you can open Terminal, type in your shortcut, press return, and voila! Ready to git clone.

If the above doesn’t work for you, here is an easy alternative. Insert the following code into your bash profile instead:

alias shortcut = /Users/$USER/path

Atom Key Commands

Here is a list of my favorite Atom key commands to help get my ideas out of my brain and into the file as quickly as possible.

= command, = option, ^ = control, = shift

⌘-^-↑ = Move an entire line up; ⌘-^-↓ = Move line down. It’s super cool because it even indents the line appropriately depending where you move it.

⌘-d = Select word. Repeat as necessary to select identical words, and then type to replace them all at once.

^-⇧-k = Delete entire line and shift code up accordingly.

⌘-→ = Move cursor to end of line; ⌘-← = Move cursor to beginning of line. (Like end and home keys on larger keyboards)

⌘-f = Find in page. Almost as well-known as copy and paste, but it seemed necessary to include because of how incredibly useful it can be while coding. Esc exits the find window.

⌘-k-= Create a new column. Useful for comparing a ruby file to a spec file.

⌘-/ = Highlight multiple lines and use this to comment them out or back in.

⌘-] = Highlight multiple lines and indent them simultaneously; ⌘-[ = Un-indent them simultaneously

⌘-\ = Show or hide the side-bar. A crucial part of my “auto-pilot” setup when starting a lab. 1) Open necessary files. 2) Create new column for the spec files (⌘-k-→). 3) Hide the side-bar. Ready to rock.

There are an overwhelming amount of shortcuts, but these are my favorites of the moment. If you don’t use Atom, I bet similar actions are available in your editor of choice using different key commands. Worth a Google if any seem useful to you.

Aesthetics

My current font of choice: Inconsolata (In the “Bonus Setup” section of the pre-work track, I followed the link to Dan Benjamin’s Top 10 Programming Fonts and found this listed as his #1.) I previously explored fonts that I thought were nicer looking, but recently realized the value of a mono font for coding. Mono describes fonts in which all letters take up equal space to allow for evenly spaced columns. I could imagine this being hugely important, especially when dealing with large amounts of data. Inconsolata is my favorite of such fonts that I have seen so far.

My current Atom theme of choice: Atom Material. It follows Google’s Material Design principles. I think it looks pretty cool.

The File Icons package is another aesthetic tweak that helps you quickly distinguish between different file types. (Credit to Mohammed for showing me these last couple items)

Jumpy

This is an Atom package that you’ll just have to try for yourself. It’s definitely the coolest package I’ve seen so far. I could imagine it being quite helpful if you get the hang of it. (Credit to Joe for finding this one)

I’m always on the lookout for more tweaks, tricks, shortcuts, etc. If you know of any more cool ones, feel free to Slack them to me at @usetheschwartz!

:D

--

--

Eric Schwartz
Learn. Love. Code.

Full stack web developer with experience in JavaScript, React/Redux, and Ruby on Rails. Musician turned coder.