Skip to content

Instantly share code, notes, and snippets.

Rich Hickey on becoming a better developer

Sorry, I have to disagree with the entire premise here.

A wide variety of experiences might lead to well-roundedness, but not to greatness, nor even goodness. By constantly switching from one thing to another you are always reaching above your comfort zone, yes, but doing so by resetting your skill and knowledge level to zero.

Mastery comes from a combination of at least several of the following:

  • Knowledge
  • Focus
@pjstadig
pjstadig / .gitconfig
Created September 5, 2013 12:08 — forked from gnarf/..git-pr.md
[alias]
pr = "!f() { git fetch -fu origin refs/pull/$1/head:pr/$1; } ; f"
prr = "!f() { git fetch -fu $1 refs/pull/$2/head:pr/$2; } ; f"
pru = "!f() { git fetch -fu upstream refs/pull/$1/head:pr/$1; } ; f"
pr-clean = "!git for-each-ref refs/heads/pr/* --format='%(refname)' | while read ref ; do branch=${ref#refs/heads/} ; git branch -D $branch ; done"
function rm () {
local path
for path in "$@"; do
# ignore any arguments
if [[ "$path" = -* ]]; then :
else
local dst=${path##*/}
# append the time if necessary
while [ -e ~/.Trash/"$dst" ]; do
dst="$dst "$(date +%H-%M-%S)
;; let's create a simple protocol that just returns a number
user> (defprotocol NumberP (number [_]))
NumberP
;; now we'll create an implementation that always returns '1'
user> (deftype One [] NumberP (number [_] 1))
user.One
;; unsurprisingly, this type only has a single static value, which wraps the '1'
> (-> One .getDeclaredFields seq)
(use '(clojure.contrib monads str-utils))
(defn tag* [the-tag & attrs]
(let [attrs (map (fn [[k v]]
(format "%s=\"%s\"" (name k) v)) (partition 2 attrs))
opening (apply str "<" the-tag (when (seq attrs) " ") (concat attrs [">"]))
closing (str "</" the-tag ">")]
{:opening opening
:closing closing}))
@pjstadig
pjstadig / gist:4585215
Last active December 11, 2015 10:09 — forked from hiredman/gist:4583350
(defn indent-as-defun []
""
(interactive)
(let [s (symbol-at-point)]
(put-clojure-indent s 'defun)))
@pjstadig
pjstadig / nrepl.sh
Created September 28, 2012 17:55 — forked from hiredman/nrepl.sh
shell + clojure
#!/bin/sh
#_(
exec "/home/root/jdk1.7.0_06/bin/java" -Dfile.encoding=utf8 -cp clojure-1.5.0-master-SNAPSHOT.jar:tools.nrepl-0.2.0-beta8.jar clojure.main $0
#{})
(use '[clojure.tools.nrepl.server :only (start-server stop-server)])
(defonce server (start-server :port 7888))
(println "nrepl is running")
@pjstadig
pjstadig / midirepl.clj
Created July 13, 2012 19:57 — forked from alandipert/midirepl.clj
Midi REPL
(import '(javax.sound.midi MidiSystem Synthesizer))
(def keymaps
'{:colemak {a 60
r 62
s 64
t 65
d 66
h 67
n 68
@pjstadig
pjstadig / latency.markdown
Created June 7, 2012 19:45 — forked from hellerbarde/latency.markdown
Latency numbers every programmer should know

Latency numbers every programmer should know

L1 cache reference ......................... 0.5 ns
Branch mispredict ............................ 5 ns
L2 cache reference ........................... 7 ns
Mutex lock/unlock ........................... 25 ns
Main memory reference ...................... 100 ns             
Compress 1K bytes with Zippy ............. 3,000 ns  =   3 µs
Send 2K bytes over 1 Gbps network ....... 20,000 ns  =  20 µs
SSD random read ........................ 150,000 ns  = 150 µs

Read 1 MB sequentially from memory ..... 250,000 ns = 250 µs

@pjstadig
pjstadig / gist:2596392
Created May 4, 2012 17:30 — forked from ddillinger/gist:2258880
Conkeror on Unity