- Good developers spend time on them
- A good workflow equals better output
- The best workflow could be better
Zach Fogg
@zfogg

I think we’re seeing the emphasis shift from valuing trivia to valuing tools.
As an engineer, there is a short list of tools that you must be rabid about. Rabid. Foaming at the mouth crazy.
Text editor
Terminal
This is where you will spend most of time.
You should know your text editor best of all.
Your text editor should be
customizable
extendable
informative
a ' magic wand '
on a scale of ed to vi
Notepad.exe
A stick
Notepad++
Harry Potter's broken wand
Sublime Text 2
Your standard magic wand
Emacs
Merlin's wand
Vim
Gandalf the White's staff, fully automatic and turbocharged
Keyboard shortcuts are a GoodThing™
Host gh
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
$ git clone gh:zfogg/zfogg Cloning into 'zfogg'...
$ alias please="sudo" $ touch /newfile touch: cannot touch ‘/newfile’: Permission denied $ please touch /newfile $ $ alias ls="ls --color=auto" # You can't avoid typos $ alias sl="ls" # Upgrade your `cat`! Syntax highlighting for any language $ alias cat="pygmentize -O style=monokai -f console256 -g" # Grab the IP addresses of a domain $ alias ipaddr="dig +short myip.opendns.com @resolver1.opendns.com" # Instant HTTP server in the current directory $ alias server="python -m SimpleHTTPServer"
$ sudo !!
$ z somewhere
$ sudo pacman -S typo-package
$ ^typo^correct^
or
$ !!:s/typo/correct
$ wget -O - http://placekitten.com/$[500 + RANDOM % 500]
* { box-sizing: border-box }

#header-bottom-left .tabmenu li a { direction: rtl; unicode-bidi: bidi-override; font-family: "Webdings";}
#header-bottom-left .tabmenu li { height: 28px; border: 0px; margin: 0px 5px; display: inline-block; }
#header-bottom-left .tabmenu li a {width:70px;color:#98C4F0;background:none;padding: 5px 2px!important;}
#header-bottom-left .tabmenu li a:hover {color:#002B4D;}
#header-bottom-left .tabmenu li.selected a {color:#002B4D;border:none!important;}
#header-bottom-left .tabmenu li.selected a:before {content:"XD"}
#header-bottom-left .tabmenu ul { width: 425px !important; height: 36px !important; z-index: -1 }
#header-bottom-left .tabmenu li { list-style-type: none; display: inline-block !important; margin: 0px; padding: 0px }
#header-bottom-left .tabmenu li a { color: #5F4444 !important; font: normal 14px/34px "Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif; }
.center-horizontal {
margin: 0 auto;
// :)
}
.center-vertical {
margin: auto 0;
// :(
}
!(new Boolean(false)) === !(new Boolean(true)); // true
1 == false; // true
(function () {
return
{ haha: "ha!" };
}
)(); // undefined
var a = {};
a.b === undefined; // true
undefined = 42;
a.b === undefined; // false
(╯°□°)╯︵ ┻━┻
var is stupid== is broken
1 == true # false
foo?.bar?() # `foo` and `bar` may not exist
[k,v] for k,v of { x:1, y:2, z:3 } # [["x", 1], ["y", 2], ["z", 3]]
times_two = (xs) -> 2*x for x in xs
doubles = times_two [1..5] # [2, 4, 6, 8, 10]
1 < doubles[0] < 3 # true
[x, y] = [1, 2] # x = 1; y = 2
{pow} = Math # pow = Math.pow
good_enough = "#{ 22 / 7 } is a decent approximation of π" # string interpolation
StuffHandler = (stuff) ->
@stuff = stuff # //this.stuff = stuff;
$("#stuff").click (event) => @stuff.doSomething event
Array::head = -> @[0]
Array::tail = -> @[1..]
map = (f, xs) ->
f x for x in xs
zip = (xs, ys) ->
[xs[i], ys[i]] for i in [0...Math.min xs.length, ys.length]
fold1 = (f, xs) ->
fold f, xs.tail(), xs.head()
fold = (f, xs, acc) ->
if xs.length > 0
fold f, xs.tail(), (f xs.head(), acc)
else acc
class Mascot
constructor: (@icon) ->
@icon or= "img/default.png"
draw: (x=0, y=0) ->
drawPNG @icon, x, y
class Roboto extends Mascot
constructor: ->
super "img/roboto.jpg"
draw: (x=0, y=0) ->
drawJPG @icon, x, y
partial = (f, args1...) -> (args2...) ->
f.apply @, args1.concat args2
partial$ = (f, args) ->
partial.apply @, [f].concat args
sum = do -> partial fold1, ((x,y) -> x+y)
product = do -> partial fold1, ((x,y) -> x*y)
factorial = (n) -> product [1..n]
curry = (n, f, args...) ->
curry$ (n - args.length), (partial$ f, args)
curry$ = (n, f, args...) ->
if n > args.length
partial curry$, (n - args.length), (partial$ f, args)
else f.apply @, args
Function::curry = (args...) ->
curry.apply @, [@length, @].concat args
Math.pow.curry()(2)(5) # 32
Math.pow.curry()(2, 5) # 32
Math.pow.curry(2, 5) == Math.pow.curry(2)(5) # 32
multiply = (x, y) -> x*y
times_two = (xs) -> xs.map multiply.curry(2)
is not your only option
AltJS - list of languages that compile to JS
Don't like CS? Need more language features?
Choose another altjs language!

You should know how to:
$ git add -p
$ git stash
$ git rebase -i
$ git merge
oh-my-zsh plugins git and git-extras
$ alias | grep 'git'$ git whatchanged -p --abbrev-commit --pretty=medium$ git delete-submodule # Doing it yourself is messy.$ git delete-branch # Local and remote$ git undo # Undo last commit.Scaffolding for new projects.
Build from source; the equivilant of a Makefile.
Frontend dependency manager.
Chrome and Firefox:
Almost better at debugging than your fancy IDE