Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Productivity Tricks
Search
Stefan Kanev
May 30, 2013
Programming
7
5.6k
Productivity Tricks
Various tricks to become more productive.
I.T.A.K.E. Unconf, Bucharest 2013
Stefan Kanev
May 30, 2013
Tweet
Share
More Decks by Stefan Kanev
See All by Stefan Kanev
Въведение в (Machine|Deep) Learning
skanev
0
75
GraphQL
skanev
0
370
Automated Testing: Getting it Right
skanev
1
49
From Novice to Expert
skanev
0
420
Inbetween Code and Profession
skanev
0
370
Clojure & ClojureScript
skanev
2
100
Extreme Programming
skanev
0
620
За смъртта на TDD
skanev
0
510
Python 0 2014
skanev
1
1.6k
Other Decks in Programming
See All in Programming
これが俺の”自分戦略” プロセスを楽しんでいこう! - Developers CAREER Boost 2024
niftycorp
PRO
0
190
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
Semantic Kernelのネイティブプラグインで知識拡張をしてみる
tomokusaba
0
180
20年もののレガシープロダクトに 0からPHPStanを入れるまで / phpcon2024
hirobe1999
0
130
Beyond ORM
77web
1
160
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
1
370
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
290
Recoilを剥がしている話
kirik
5
6.6k
たのしいparse.y
ydah
3
120
コンテナをたくさん詰め込んだシステムとランタイムの変化
makihiro
1
120
14 Years of iOS: Lessons and Key Points
seyfoyun
1
770
rails statsで大解剖 🔍 “B/43流” のRailsの育て方を歴史とともに振り返ります
shoheimitani
2
930
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
32
6.3k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
Facilitating Awesome Meetings
lara
50
6.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
How GitHub (no longer) Works
holman
311
140k
Designing Experiences People Love
moore
138
23k
How STYLIGHT went responsive
nonsquared
95
5.2k
Making Projects Easy
brettharned
116
5.9k
Transcript
Productivity Tricks Stefan Kanev http://skanev.com/ @skanev I.T.A.K.E. Unconf 30 May
2013 Bucharest
Hi, I’m Stefan!
Every time
PAIN
3. 14159265358979323846264338327950288419716939937510 58209749445923078164062862089986280348253421170679 82148086513282306647093844609550582231725359408128 48111745028410270193852110555964462294895493038196 44288109756659334461284756482337867831652712019091 45648566923460348610454326648213393607260249141273 72458700660631558817488152092096282925409171536436 78925903600113305305488204665213841469519415116094 33057270365759591953092186117381932611793105118548
07446237996274956735188575272489122793818301194912 98336733624406566430860213949463952247371907021798 60943702770539217176293176752384674818467669405132 00056812714526356082778577134275778960917363717872 14684409012249534301465495853710507922796892589235 42019956112129021960864034418159813629774771309960 51870721134999999837297804995105973173281609631859 50244594553469083026425223082533446850352619311881 71010003137838752886587533208381420617177669147303 59825349042875546873115956286388235378759375195778 18577805321712268066130019278766111959092164201989 38095257201065485863278865936153381827968230301952 03530185296899577362259941389124972177528347913151 55748572424541506959508295331168617278558890750983 81754637464939319255060400927701671139009848824012 85836160356370766010471018194295559619894676783744 94482553797747268471040475346462080466842590694912 93313677028989152104752162056966024058038150193511 25338243003558764024749647326391419927260426992279 67823547816360093417216412199245863150302861829745 55706749838505494588586926995690927210797509302955
instance Show Board where show (Board ps) = let ordered
= (sort . swap) ps ranks = map (showRank ordered) [8,7..1] board = intersperse "--+--+--+--+--+--+--+--" ranks rlabels = intersperse " " (map (\n->(show n)++" ") [8,7..1]) flabels = " a b c d e f g h" in unlines $ zipWith (++) rlabels board ++ [flabels] where swap = map (\(a,b)->(b,a)) showRank ps r = let rnk = filter (\(p,_)->(rank p)==r) ps cs = map (showPiece rnk) [A .. H] in concat (intersperse "|" cs) showPiece ps f = maybe " " (show . snd) (find (\(p,_)->(file p)==f) ps)
None
None
None
None
None
Follow me on: skanev skanev
None
Programmer
None
None
❤Programming Languages
None
About of this talk
productivity |prɒdʌkˈtɪvɪti| noun the ability to maximize the work done
while minimizing the effort spent
Ruby Programmer Bias DISCLAIMER
None
YMMV DISCLAIMER
I. General II. Work III. Code IV. Tools
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20 21 22 23 24
slightly unusual format
everything is timeboxed
I should involve you
Intro 4min Q&A 4min Q&A 4min Q&A 4min Q&A 4min
I. General 10min II. Work 10min III. Code 10min IV. Tools 10min
I General
1 Maintain three lists
1. ToDo: things you must do obligations, commitments 2. Watch:
things you have to remember follow up, wait for somebody, remind yourself 3. Later: things you want to do when you have the time
pick 3-5 items before bed write them down (index card)
do them on the next day
Once you start, you’ll be surprised how often you didn’t
get 3-5 significant things done during a day
Timers & alarms 2
flow |fləʊ| noun the mental state of operation in which
a person performing an activity is fully immersed in a feeling of energized focus, full involvement, and enjoyment in the process of the activity
use alarms to divorce yourself form the clock
Periodically checking the time breaks your flow and stresses you
timers can put pressure* on you * the good kind
of pressure
Seinfeld calendars 3
“We are what we repeatedly do. Excellence, then, is not
an act, but a habit.” – Aristotle
None
put a calendar on a wall choose an action to
reinforce a habit put an X on each day you perform the action don’t break the chain
Seinfeld calendars gamify habit acquisition. They can serve as a
good motivator.
Keep notes 24x7 4
capture insight summarize information enhance the thinking process
Always have ready means of taking notes around you.
a small moleskine a large moleskine a Dropbox folder a
large notebook
voice memos index cards wiki Evernote, etc.
Skim over your notes regularly. Do it on the bus,
during breakfast or even set up a reminder.
Control decision fatigue 5
decision fatigue |dɪˈsɪʒ(ə)n fəˈtiːg| noun phrase [In decision making and
psychology, decision fatigue refers to] the deteriorating quality of decisions made by an individual, after a long session of decision making.
Making decisions wears you down. It is paramount to separate
the important from the unimportant.
http://lifehacker.com/5944198/president-obamas-productivity-tactics
Avoid making decisions by establishing strict routines.
where to go for lunch? what to listen to? when
to check my mail? when to leave work? what to do next?
Learn how to learn 6
Our ability to learn is our most important asset as
knowledge workers
None
II Work
No instant messengers 7
Eliminating distractions is the key to flow and instant messaging
is the mother of all distraction
Turn Instant Messengers Off
Not replying doesn’t work, since messages can still distract you
the price of distractions is twofold time to deal with
the distraction time to recover previous context
Create a second account for work if you have to.
Don’t give it to anyone, except your colleagues (and your spouse).
carry this further: remove all notifications email, twitter, facebook, etc.
Use two browsers 8
Work Personal stuff
Even the small effort to open Firefox in order check
Twitter is enough to discourage me
Choose any two browsers you want. You can even configure
one with different profiles.
Each browser can be customized to the job at hand
The ToDo list 9
a specific way of using a ToDo list
start with an empty list write down what you have
to do pick an item and start it don’t interrupt - use the list pick another one when finished carry unfinished items to tomorrow
It is important not to interrupt your current task. It
is also important not to tax your brain with keeping track.
refactorings phone calls emails writing documentation taking notes
start of the day
end of the day
Schedule email checks 10
Designate specific time slots for dealing with email and process
it only during those slots
Dealing with unexpected email can distract you
Once you open your inbox, you don’t know how long
you are going to be there
Control your email - don’t let it control you
Always leave your inbox empty afterwards
The perfect schedule would be twice a day - in
the beginning and in the end. It is probably not realistic.
The Pomodoro Technique 11
my secret weapon
None
Touch typing 12
we are professional typists
Typing can be the bottleneck if your typing speed is
low
Micro-interruptions: slowing down to type something can break your train
of thought
OK speed: 80 wpm Good speed: 100 wpm * for
programmers
For results, just pick a typing tutor and spend 10
minutes a day practicing touch typing* * ten fingers, no peeking
do NOT stress your hands
There is little point in picking up an alternative layout,
especially if you are not a native English speaker * it gives you street cred, though
III Code
Utilize shortcuts 13
Using keyboard shortcuts lets you do more things in less
time and
all shapes and sizes
None
Introduce shortcuts gradually: 1-2/day
Create a cheat sheet and put it next to your
monitor
Reread the cheat sheet occasionally
some examples
^⇧↑ Select enclosing element ⌥⌘L Extract local variable Eclipse
None
^⇧↑ ⌥⌘L
None
⎋Q Pause current command ⎋H Open man page for current
command ⎋E Open current command in editor zsh
Selenium IDE to walk pages 14
Selenium ≠ Selenium IDE
When you cannot write a full-blown test, you can record
a macro to walk the functionality you are developing
Shell aliases 15
Create shell aliases for all the commands you run often
faster execution command customization making long commands useful
! rsc rake spec cucumber ! rdm rake db:migrate !
rmig add_users rails generate migration add_users ! be spork bundle exec spork
! tmux attach tmux -2 attach ! clj rlwrap --quote-characters=\”’\”
--command clojure clj
git log --graph --decorate --pretty=oneline --abbrev-commit --all
! git lola git log --graph --decorate --pretty=oneline --abbrev-commit --all
! spj bundle exec xvfb-run specjour --rsync-port=8081
OH MY ZSH https://github.com/robbyrussell/oh-my-zsh
Guard and watchr 16 * or their non-Ruby equivalents
Both monitor the filesystem of your project for changes and
react on certain triggers
Top usage: run the corresponding test when you save a
file
continuous testing
immediate feedback
There are other uses for Guard: compilation, static checking, linting,
uploading, checking out and so on...
None
Cache stuff locally 17
Cache oft-referenced materials (documentations, guides) locally
You still pay a penalty for accessing the Internet. As
a bonus, you can use it on an airplane.
Putting things within an arm’s reach makes you more likely
to use them
wget rake
Spike when uncertain 18
It is very hard to test-drive with unfamiliar technology, especially
frameworks
Shave?
spike |spʌɪk| noun a small test-free time-boxed throw-away exploratory solution
used primarily for learning
Get the speed hit by going cowboy on the code
Throw it away and TDD it up from scratch. Resist
the urge to keep it.
IV Tools
Automate the environment 19
Automate everything you can possibly automate
Automation can store knowledge: you reduce the things you need
to remember
shells scripts: zsh, bash, ... build tools: rake, make, ant,
... scripts: ruby, perl, python, ...
some examples
installing my configuration (dotfiles)
! git clone http://github.com/skanev/dotfiles ! rake install vim, zsh, tmux,
git, xmodmap, etc... ! rake vim:bundles:update updates my vim bundles
SICP study group
03/14.scm 03/tests/14-tests.scm
! rake generate[3, 14] create 03/14.scm - add a header:
; SICP exercise 3.14 generate 03/tests/14-tests.scm - add a test scaffold start continuous testing open both files in vim ! rake next
SSH key on a new machine
! install-key new-machine.example.org
Try carrying it to the extreme: you will waste time
in unnecessary automation, but get a lot better at it
Build your own 20
Build your own tools when the need for them arises
recurring usage one-offs
iPhone version of the Bulgarian railroad network screen scraping &
web.py
sites to check each day Ruby on Rails
everybody reads all commits every day comment on GitHub best
for me: start of day
github.com was slow and clumsy git log -p was hard
to comment on
$ git catchup
None
None
git shell less lesskey
recurring usage duct tape 㲗 small apps
tools for small apps sinatra.rb, Flask, PerlDancer redis, MongoDB Twitter
Bootstrap
one-off
6 cap colors 6 bowtie colors 4 ears patterns 96
versions 4 sizes of each
None
zsh imagemagick
Keep your one-offs somewhere - they make great references in
the future
Personalize your editor 21
step 0: pick a generic editor
Vim Emacs SublimeText/TextMate
IDEs are fine - your Java productivity in (say) Vim
will probably never be as good as it is in (say) Eclipse DISCLAIMER
Editors are great in environments where you don’t have a
good IDE - all the “cool” new languages, for example
As programmers, we live in our editors - all improvement
we can squeeze out of them are worth it
Popular editors have lots of plugins - this is a
good way to easily improve your workflow
Learn the existing tools 22
Play with as many tools as you can - if
you know what one does, you will understand the what is possible to build
Dive deep. Trying doing it the hard way. That way
you’ll learn best.
your editor git zsh awk & sed / perl curl
& wget tmux ImageMagick GraphViz
Learn from others 23
talk with your coworkers pair with them try their (crazier)
ideas
https://github.com/search?q=dotfiles dotfiles in GitHub
Play by Play https://peepcode.com/screencasts/play-by-play ScreenCasts Destroy All Software https://www.destroyallsoftware.com/screencasts
Share 24
Publish it in GitHub, blog about it, or give a
talk. Put it out there - it will be useful for someone.
Books!
None
None