Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Try a little tenderness
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
masylum
July 01, 2013
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Try a little tenderness
masylum
July 01, 2013
More Decks by masylum
See All by masylum
IPFS
masylum
0
210
REST Clients Nordic APIs
masylum
3
240
REST clients
masylum
2
220
Building the best tech-team
masylum
4
230
I love async but I can't code like this
masylum
4
550
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
58k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
850
Become a Pro
speakerdeck
PRO
31
6.3k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
770
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Between Models and Reality
mayunak
4
470
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
590
Transcript
Coding is a fucking mess, big programs are complex and
troublesome... follow Ottis advice and Try a little tenderness
Who am I?
Pau Ramon CTO at Teambox ! @masylum github.com/masylum
This talk is about good code style principles
Why caring about style?
Development is not the bottleneck, maintenance is
Code may be ugly, but is what you stare at
all day
Mind your API Expose only what you need
Mind your API var obj = {}; obj.pi = 3.14;
obj.circumference = function (r) { return num * this.pi; };
Mind your API var obj = {}; var pi =
3.14; obj.circumference = function (r) { return r * a; };
Be verbose Good naming
Be verbose function avg(xs) { var s = i =
0; var l = xs.length; for(; i < l; i++;){ s += parseInt(xs[i]); } return s / l; }
Be verbose function average(numbers) { var sum = i =
0; var length = numbers.length; for(; i < length; i++;){ sum += parseInt(numbers[i]); } return sum / length; }
Explicit over Implicit Magic is for magicians
Explicit over Implicit function Dog() { this.speed = 4; }
require(‘run’); var dog = new Dog(); dog.run();
Explicit over Implicit function Dog() { this.speed = 4; }
Dog.prototype.run = require(‘run’); var dog = new Dog(); dog.run();
Careful with DRY It creates dependencies
Careful with DRY function truncateName(el) { var attr = el.type
=== ‘user’ ? ‘fullName’ : ‘name’; return el[attr].substring(0, 40); }
Careful with DRY function truncate(string) { return string.substring(0, 40); }
truncate(user.fullName); truncate(project.name);
Lines of code syndrome The myth of less is more
Lines of code syndrome function isUrgent(id) { if (task =
Task.find(id) && task.urgent) return true; return false; }
Lines of code syndrome function isUrgent(id) { var task =
Task.find(id); if (task && task.urgent) { return true; } return false; }
Self explanatory code Avoid inline comments
Self explanatory code function removeUser(id) { // find user var
user = User.find(id); ... // remove tasks return user.tasks.remove(); }
Self explanatory code function removeUser(id) { var user = findUser(id);
return removeTasks(user); }
Write contracts Document your API
Write contracts // removes the user function removeUser(id) ...
Write contracts /** * Removes the user and all his
* assigned tasks * * @param {Number} id - user id * @return {Boolean} - did work? */ function removeUser(id) ...
Beware of nesting Flow control complexity
Beware of nesting function isComplete(task) { var comment = task.comment;
if (comment) if (comment.status === 3) return true; return task.isResolved(); }
Beware of nesting function isComplete(task) { var comment = task.comment;
if (comment) { return comment.isComplete(); } return task.isResolved(); }
Beware of nesting setTimeout(function () { setTimeout(function () { console.log(‘B’);
}, 10); }, 20);
Beware of nesting ! function secondMethod() { console.log(‘B’); } function
firstMethod() { setTimeout(secondMethod, 10); } setTimeout(firstMethod, 20);
Use tools They are better than you
Use tools • Have static analyzers to detect bad code
practices and syntax errors • Use tools that can provide metrics • Integrate your tools with your editor • Integrate your tools with your process
Use tools • Javascript: JSHint • Ruby: Cane, Rubocop •
IDE • SAAS: Codeclimate
Avoid broken windows With metrics and processes
Avoid broken windows • Before pushing: Git hooks • Before
merging a branch: Travis • Before deploying a release: Jenkins