Currently viewing the category: "Design"

A truly superb list of aspirational qualities for software developers. It includes symptoms of each particular quality and guidelines on how to acquire the desired traits.

Signs that you’re a good programmer

1. The instinct to experiment first
2. Emotional detachment from code and design
3. Eager to fix what isn’t broken
4. Fascinated by the incomprehensible
5. Compelled to teach

Signs that you’re a fantastic programmer

1. Incorruptible patience
2. A destructive pursuit of perfection
3. Encyclopedic grasp of the platform
4. Thinks In Code
5. When In Rome, Does As Romans Do
6. Creates their own tools

Signs that you’re destined for more

1. Indifferent to Hierarchy
2. Excited by failure
3. Indifferent to circumstances
4. Unswayed by obligations
5. Substitutes impulse for commitment
6. Driven by experiences

Tagged with:
 

A blood-curdling selection of negative traits and anti-patterns that programmers should recognise and avoid. Remedies are included for the ailing.

Signs that you’re a bad programmer

1. Inability to reason about code
2. Poor understanding of the language’s programming model
3. Deficient research skills / Chronically poor knowledge of the platform’s features
4. Inability to comprehend pointers
5. Difficulty seeing through recursion
6. Distrust of code

Signs that you are a mediocre programmer

1. Inability to think in sets
2. Lack of critical thinking
3. Pinball Programming
4. Unfamiliar with the principles of security
5. Code is a mess

Signs that you shouldn’t be a programmer

1. Inability to determine the order of program execution
2. Insufficient ability to think abstractly
3. Collyer Brothers syndrome
4. Dysfunctional sense of causality
5. Indifference to outcomes

Tagged with:
 

Antipatterns (styles of design or process that may proliferate, but are ineffectual or counter-productive) can confound even the most battle-hardened of developers. Only knowledge can set us free, and to that end Source Making’s list of antipatterns is a welcome reminder.

Good software structure is essential for system extension and maintenance. Software development is a chaotic activity, therefore the implemented structure of systems tends to stray from the planned structure as determined by architecture, analysis, and design.

Software Development AntiPatterns

Parallelism

The Code Player‘s tagline is “Video style walkthroughs showing cool stuff being created from scratch”.

The left pane of the screen shows the programmer’s commands, the right pane shows the output, and there are options to play back in realtime, 5x, 10x and 20x. They offer “HTML5, CSS3, Javascript and more..” and it makes for compelling viewing.

Tagged with:
 

Symantec Logo

Deadliest Web Attacks has published an article rallying against the dearth of high quality, secure code. Although most code is never seen by anyone but the core development team, in light of the recent Symantec source code theft the article is particularly pertinent:

How would you alter the risks associated with your web site if its source code were stolen? Hard-coded passphrases? String concatenation of SQL statements? How much security relies on secrecy of functionality versus secrecy of data? Think of it in terms of Kerchoff’s Principle, roughly “The system must not require secrecy and can be stolen by the enemy without causing trouble”. Kerchoff was writing about cryptography, but the concept applies well to software.

This would be a good time to double-check the OWASP Top Ten Vulnerabilities and re-watch the OWASP Appsec Tutorial Series.

Tagged with:
 

Top Marks

A competent programmer is expected to have many strings to their bow, to keep up with the latest technologies and to produce beautiful, efficient and secure code – a non-trivial task.

To that end, here are some links on the nature of programming and the eternal quest to be a better programmer: through secure, optimised design; offering effective UI; and understanding and predicting what users want.

The Principles of Good Programming
by Christopher Diggins

An excellent round-up of acronyms (DRY, KISS, YAGNI) and precepts (Separation of Concerns, Principle of least astonishment etc).

Teach Yourself Programming in Ten Years
by Peter Norvig

Why programming is difficult, how you should approach it and the lessons learnt in the author’s last 10 years.

Iterative vs. Incremental
by Bradley Holt

Thoughts on the conflation of “iterative” and “incremental” in software development.

Encyclopedia of Human-Computer Interaction
by Mads Soegaard et al

A new (as yet incomplete) free encyclopedia including videos and commentaries from luminaries in the many fields of HCI.

Front End Development Guidelines
by Tait Brown

A collection of browser-targeted practices encompassing Accessibility, HTML, CSS and JavaScript.

How to understand your users with personas
by Brad Colbow

How to assign personas to you users in an effort to better understand their thought processes and needs.

OWASP Appsec Tutorial Series
by OWASP

The OWASP Appsec Tutorial Series breaks down security concepts in an easily accessible, friendly way.