background preloader

Design

Facebook Twitter

Requirements

API Design Matters. By Michi Henning Communications of the ACM, Vol. 52 No. 5, Pages 46-56 10.1145/1506409.1506424 Comments After more than 25 years as a software engineer, I still find myself underestimating the time it takes to complete a particular programming task.

API Design Matters

Sometimes, the resulting schedule slip is caused by my own shortcomings: as I dig into a problem, I simply discover it is a lot more difficult than I initially thought, so the problem takes longer to solve—such is life as a programmer. Just as often I know exactly what I want to achieve and how to achieve it, but it still takes far longer than anticipated. When that happens, it is usually because I am struggling with an application programming interface (API) that seems to do its level best to throw rocks in my path and make my life difficult.

How to Design Programs, Second Edition. Investigating architecture and design. Architecture and design in software have resisted firm definitions for a long time because software development as a discipline has not yet fully grasped all their intricacies and implications. But to create reasonable discourse about these topics, you have to start somewhere. This article series concerns evolutionary architecture and emergent design, so it makes sense to start the series with some definitions, considerations, and other ground-setting. Defining architecture Architecture in software is one of the most talked about yet least understood concepts that developers grapple with. At conferences, talks and birds-of-a-feather gatherings about architecture pack the house, but we still have only vague definitions for it. Application architecture Application architecture describes the coarse-grained pieces that compose an application.

The other interesting aspect of application architecture describes how the logical pieces of the application fit together. Enterprise architecture. The Big Redesign In The Sky. The first rule of holes: Many software developers take this to mean that if you have a huge legacy mess in your software you should stop working on it and rewrite it from the ground up. Everyone wants to work in a green field. In a green field you don’t have to deal with the mess that’s accumulated over the years.

In a green field you can be clean. In a green field you can build the perfect system. What a crock. Why do green fields become messes? OK, I’ve taken the metaphor too far. Your messes matter. Administrative Debris. Since watching Edward Tufte's critique of the iPhone a few months ago, I've been enamored with his demonstration and description of "computer administrative debris": The idea is that the content is the interface, the information is the interface - not computer administrative debris.

Administrative Debris

The basic concept would seem easy enough to grasp and is something any regular reader of this site will no doubt admire and understand. I nodded violently throughout the video, delighted to see such a clear explanation of what I thought I knew as a fundamental principle of simplicity in design. After thinking about it a bit more, though, I came to the realization that Tufte's concept of "administrative debris" represents something entirely new for me. Or, at least, it represents a severe sharpening of existing ideas that end up providing an entirely new level clarity. The Secret of Building Effective Software Systems. I can’t wait to share this simple secret with you right now.

The Secret of Building Effective Software Systems

The Secret: Effective Software Systems are the systems that easy to understand and operate with human brains. Programmers are more productive with effective software systems. Programmers can better learn and grow these system. Design Will Define You (Whether You Embrace It or Not) An Interview with Daniel Dociu. [Image: Daniel Dociu. View larger! This and all images below are Guild Wars content and materials, and are trademarks and/or copyrights of ArenaNet, Inc. and/or NCsoft Corporation, and are used with permission; all rights reserved].

Seattle-based concept artist Daniel Dociu is Chief Art Director for ArenaNet, the North American wing of NCSoft, an online game developer with headquarters in Seoul. Most notably, Dociu heads up the production of game environments for Guild Wars – to which GameSpot gave 9.2 out of 10, specifically citing the game's "gorgeous graphics" and its "richly detailed and shockingly gigantic" world. Dociu has previously worked with Electronic Arts; he has an M.A. in industrial design; and he won both Gold and Silver medals for Concept Art at this year's Spectrum awards. [Image: Daniel Dociu; view larger!]. [Image: Daniel Dociu; view larger!]. [Image: Daniel Dociu; view larger!]. [Image: Daniel Dociu; view larger!]. Mandarin Design: CSS Boxes and Borders.

IS-STRICTLY-EQUIVALENT-TO-A. Favor object composition over class inheritance.

IS-STRICTLY-EQUIVALENT-TO-A

Maxims like this drive me crazy. On the one hand, there in one sentence is some of the best advice I can imagine for designing Object-Oriented software. On the other hand, following this advice without any idea why one favors one over the other, without any idea when class inheritance is the right thing to do… As Basho said, “Do not seek to follow in the footsteps of the men of old; seek what they sought.”