Thursday, March 31, 2016

Software Principles



Software Principles to Teach Every New Recruit
http://techblog.chegg.com/2015/04/08/software-principles-to-teach-every-new-recruit/

Objectives
KISS — Keep It Stupid Simple
DRY — Don’t Repeat Yourself
YAGN — You Aint Gonna Need it
Symmetry — aka consistency
Robustness Principle — follow the rules, but don’t expect everyone will
DTDD — Documentation and Test-Driven Design
Effective Logging
Correctness
Behaviors
Self-reflection
The Deming Principle — failure behind the failure?
Mastery
Some coding styles are simply easier to read than others. For example, fewer levels of indentation and brackets is simpler.  Less checking of conditions is simpler (and more efficient.) 

Coding styles that use less context are easier to follow.  Our brains, don’t have huge stacks.  Following multiple indentation levels, just like following execution paths through extra code layers, uses up some of our limited capacity.  It makes groking the code harder.  The code sample on the right terminates execution quickly when it can.  The code sample on the left keeps all execution paths lingering all the way to the end of the function.  So, at every line later in the function, we have to keep track of what state we’re in at each indent level.  That’s not in the spirit of KISS.




Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts