“
DNA is like a computer program but far, far more advanced than any software ever created.
”
”
Bill Gates (The Road Ahead)
“
Truth can only be found in one place: the code.
”
”
Robert C. Martin (Clean Code: A Handbook of Agile Software Craftsmanship)
“
There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.
”
”
C.A.R. Hoare
“
The ideal architect should be a man of letters, a skillful draftsman, a mathematician, familiar with historical studies, a diligent student of philosophy, acquainted with music, not ignorant of medicine, learned in the responses of jurisconsults, familiar with astronomy and astronomical calculations.
”
”
Vitruvius
“
The information contained in an English sentence or computer software does not derive from the chemistry of the ink or the physics of magnetism, but from a source extrinsic to physics and chemistry altogether. Indeed, in both cases, the message transcends the properties of the medium. The information in DNA also transcends the properties of its material medium.
”
”
Stephen C. Meyer (Darwinism, Design and Public Education)
“
The general tendency is to over-design the second system, using all the ideas and frills that were cautiously sidetracked on the first one.
”
”
Frederick P. Brooks Jr. (The Mythical Man-Month: Essays on Software Engineering)
“
The heart of software is its ability to solve domain-related problems for its user.
”
”
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
“
The big optimizations come from refining the high-level design, not the individual routines.
”
”
Steve McConnell (Code Complete: A Practical Handbook of Software Construction)
“
Software design as taught today is terribly incomplete. It talks only about what systems should do. It doesn’t address the converse—things systems should not do. They should not crash, hang, lose data, violate privacy, lose money, destroy your company, or kill your customers.
”
”
Michael T. Nygard (Release It!: Design and Deploy Production-Ready Software (Pragmatic Programmers))
“
Programming is about managing complexity: the complexity of the problem, laid upon the complexity of the machine. Because of this complexity, most of our programming projects fail.
”
”
Bruce Eckel (On Java 8)
“
Your job as a developer is not just to create code that you can work with easily, but to create code that others can also work with easily.
”
”
John Ousterhout (A Philosophy of Software Design)
“
At Apple, we never would have dreamed of doing that, and we never staged any A/ B tests for any of the software on the iPhone. When it came to choosing a color, we picked one. We used our good taste—and our knowledge of how to make software accessible to people with visual difficulties related to color perception—and we moved on.
”
”
Ken Kocienda (Creative Selection: Inside Apple's Design Process During the Golden Age of Steve Jobs)
“
We see a lot of feature-driven product design in which the cost of features is not properly accounted. Features can have a negative value to customers because they make the products more difficult to understand and use. We are finding that people like products that just work. It turns out that designs that just work are much harder to produce that designs that assemble long lists of features.
”
”
Douglas Crockford (JavaScript: The Good Parts)
“
Jobs's intensity was also evident in his ability to focus. He would set priorities, aim his laser attention on them, and filter out distractions. If something engaged him- the user interface for the original Macintosh, the design of the iPod and iPhone, getting music companies into the iTunes Store-he was relentless. But if he did not want to deal with something - a legal annoyance, a business issue, his cancer diagnosis, a family tug- he would resolutely ignore it. That focus allowed him to say no. He got Apple back on track by cutting all except a few core products. He made devices simpler by eliminating buttons, software simpler by eliminating features, and interfaces simpler by eliminating options.
He attributed his ability to focus and his love of simplicity to his Zen training. It honed his appreciation for intuition, showed him how to filter out anything that was distracting or unnecessary, and nurtured in him an aesthetic based on minimalism.
”
”
Walter Isaacson (Steve Jobs)
“
As Tony Hoare observed: There are two ways of constructing a software design: one way is to make it so simple that there are obviously no deficiencies and the other is to make it so complicated that there are no obvious deficiencies.
”
”
Kevlin Henney (97 Things Every Programmer Should Know: Collective Wisdom from the Experts)
“
Quantum Machine Learning is defined as the branch of science and technology that is concerned with the application of quantum mechanical phenomena such as superposition, entanglement and tunneling for designing software and hardware to provide machines the ability to learn insights and patterns from data and the environment, and the ability to adapt automatically to changing situations with high precision, accuracy and speed.
”
”
Amit Ray (Quantum Computing Algorithms for Artificial Intelligence)
“
Life 1.0”: life where both the hardware and software are evolved rather than designed. You and I, on the other hand, are examples of “Life 2.0”: life whose hardware is evolved, but whose software is largely designed. By your software, I mean all the algorithms and knowledge that you use to process the information from your senses and decide what to do—everything from the ability to recognize your friends when you see them to your ability to walk, read, write, calculate, sing and tell jokes.
”
”
Max Tegmark (Life 3.0: Being Human in the Age of Artificial Intelligence)
“
User interface is the process of shifting from chaotic complexity to elegant simplicity.
”
”
Akshat Paul (React Native for iOS Development)
“
Organizations which design systems are constrained to produce systems which are copies of the communication structures of these organizations.
”
”
Frederick P. Brooks Jr. (The Mythical Man-Month: Essays on Software Engineering)
“
Science does not work by proving statements true, but rather by proving statements false.
”
”
Robert C. Martin (Clean Architecture: A Craftsman's Guide to Software Structure and Design)
“
All race conditions, deadlock conditions, and concurrent update problems are due to mutable variables.
”
”
Robert C. Martin (Clean Architecture)
“
Conceptual integrity in turn dictates that the design must proceed from one mind, or from a very small number of agreeing resonant minds.
”
”
Frederick P. Brooks Jr. (The Mythical Man-Month: Essays on Software Engineering)
“
Duplication is the primary enemy of a well-designed system. It represents additional work, additional risk, and additional unnecessary complexity.
”
”
Robert C. Martin (Clean Code: A Handbook of Agile Software Craftsmanship)
“
From a shamanic perspective, the psychic blockade that prevents otherwise intelligent adults from considering the future of our world - our obvious lack of future, if we continue on our present path - reveals an occult dimension. It is like a programming error written into the software designed for the modern mind, which has endless energy to spend on the trivial and treacly, sports statistic or shoe sale, but no time to spare for the torments of the Third World, for the mass extinction of species to perpetuate a way of life without a future, for the imminent exhaustion of fossil fuel reserves, or for the fine print of the Patriot Act. This psychic blockade is reinforced by a vast propaganda machine spewing out crude as well as sophisticated distractions, encouraging individuals to see themselves as alienated spectators of their culture, rather than active participants in a planetary ecology.
”
”
Daniel Pinchbeck (2012 The Year of the Mayan Prophecy)
“
By documenting a design, the designer exposes himself to the criticisms of everyone, and he must be able to defend everything he writes. If the organizational structure is threatening in any way, nothing is going to be documented until it is completely defensible.
”
”
Frederick P. Brooks Jr. (The Mythical Man-Month: Essays on Software Engineering)
“
Cloud first software architecture is critical to designing efficient systems. All the hardware need to be capable of the most sophisticated things and then we can focus our attention on improving software capabilities.
”
”
Hendrith Vanlon Smith Jr.
“
Good software designs accommodate change without huge investments and rework. When we use code that is out of our control, special care must be taken to protect our investment and make sure future change is not too costly.
”
”
Robert C. Martin (Clean Code: A Handbook of Agile Software Craftsmanship)
“
Dijkstra once said, “Testing shows the presence, not the absence, of bugs.” In other words, a program can be proven incorrect by a test, but it cannot be proven correct. All that tests can do, after sufficient testing effort, is allow us to deem a program to be correct enough for our purposes.
”
”
Robert C. Martin (Clean Architecture: A Craftsman's Guide to Software Structure and Design)
“
Software will give you respect, but hardware will give you the Power.
”
”
Akshat Paul (Rubymotion Ios Develoment Essentials)
“
Without requirements and design, programming is the art of adding bugs to an empty text file.
”
”
Louis Srygley
“
This ability of Life 2.0 to design its software enables it to be much smarter than Life 1.0
”
”
Max Tegmark (Life 3.0: Being Human in the Age of Artificial Intelligence)
“
SRP is one of the more important concept in OO design. It’s also one of the simpler concepts to understand and adhere to. Yet oddly, SRP is often the most abused class design principle.
”
”
Robert C. Martin (Clean Code: A Handbook of Agile Software Craftsmanship)
“
Much of our work today has entered its own B-17 phase. Substantial parts of what software designers, financial managers, firefighters, police officers, lawyers, and most certainly clinicians do are now too complex for them to carry out reliably from memory alone. Multiple fields, in other words, have become too much airplane for one person to fly. Yet it is far from obvious that something as simple as a checklist could be of substantial help.
”
”
Atul Gawande (The Checklist Manifesto: How to Get Things Right)
“
If your code is undergoing review and a reviewer tells you that something is not obvious, don’t argue with them; if a reader thinks it’s not obvious, then it’s not obvious. Instead of arguing, try to understand what they found confusing and see if you can clarify that, either with better comments or better code.
”
”
John Ousterhout (A Philosophy of Software Design)
“
So if you can figure out a way to get in a design war with a company big enough that its software is designed by product managers, they’ll never be able to keep up with you. These opportunities are not easy to find, though. It’s hard to engage a big company in a design war, just as it’s hard to engage an opponent inside a castle in hand-to-hand combat.
”
”
Paul Graham (Hackers & Painters: Big Ideas from the Computer Age)
“
Just as the Hare was overconfident in its speed, so the developers are overconfident in their ability to remain productive.
”
”
Robert C. Martin (Clean Architecture: A Craftsman's Guide to Software Structure and Design)
“
It takes fastidiousness to write code that doesn’t just do the right thing but also says the right thing.
”
”
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
“
A model is a selectively simplified and consciously structured form of knowledge.
”
”
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
“
A design that doesn’t take change into account risks major redesign in the future.
”
”
Erich Gamma (Design Patterns: Elements of Reusable Object-Oriented Software)
“
Bugs will happen. They cannot be eliminated, so they must be survived instead.
”
”
Michael T. Nygard (Release It!: Design and Deploy Production-Ready Software (Pragmatic Programmers))
“
First, nothing is as permanent as a temporary fix. Most of these remained in place for the next year or two.
”
”
Michael T. Nygard (Release It!: Design and Deploy Production-Ready Software (Pragmatic Programmers))
“
This is the monstrosity in love, lady, that the will is infinite, and the execution confined; that the desire is boundless, and the act a slave to limit. —William Shakespeare
”
”
Robert C. Martin (Clean Architecture: A Craftsman's Guide to Software Structure and Design)
“
The first value of software—behavior—is urgent but not always particularly important. The second value of software—architecture—is important but never particularly urgent.
”
”
Robert C. Martin (Clean Architecture: A Craftsman's Guide to Software Structure and Design)
“
Most testers I’ve known are perverse enough that if you tell them the “happy path” through the application, that’s the last thing they’ll do. It should be the same with load testing.
”
”
Michael T. Nygard (Release It!: Design and Deploy Production-Ready Software (Pragmatic Programmers))
“
Clean code is simple and direct. Clean code reads like well-written prose. Clean code never obscures the designer’s intent but rather is full of crisp abstractions and straightforward lines of control.
- Grady Booch author of Object
Oriented Analysis and Design with
Applications
”
”
Robert C. Martin (Clean Code: A Handbook of Agile Software Craftsmanship)
“
Methods containing hundreds of lines of code are fine if they have a simple signature and are easy to read. These methods are deep (lots of functionality, simple interface), which is good.
”
”
John Ousterhout (A Philosophy of Software Design)
“
Secrecy is essential to the command and control of nuclear weapons. Their technology is the opposite of open-source software. The latest warhead designs can’t be freely shared on the Internet, improved through anonymous collaboration, and productively used without legal constraints.
”
”
Eric Schlosser (Command and Control: Nuclear Weapons, the Damascus Accident, and the Illusion of Safety)
“
From the earliest days at Apple, I realized that we thrived when we created intellectual property. If people copied or stole our software, we’d be out of business. If it weren’t protected, there’d be no incentive for us to make new software or product designs. If protection of intellectual property begins to disappear, creative companies will disappear or never get started. But there’s a simpler reason: It’s wrong to steal. It hurts other people. And it hurts your own character.
”
”
Walter Isaacson (Steve Jobs)
“
The approach to digital culture I abhor would indeed turn all the world's books into one book, just as Kevin (Kelly) suggested. It might start to happen in the next decade or so. Google and other companies are scanning library books into the cloud in a massive Manhattan Project of cultural digitization. What happens next is what's important. If the books in the cloud are accessed via user interfaces that encourage mashups of fragments that obscure the context and authorship of each fragment, there will be only one book. This is what happens today with a lot of content; often you don't know where a quoted fragment from a news story came from, who wrote a comment, or who shot a video. A continuation of the present trend will make us like various medieval religious empires, or like North Korea, a society with a single book.
The Bible can serve as a prototypical example. Like Wikipedia, the Bible's authorship was shared, largely anonymous, and cumulative, and the obscurity of the individual authors served to create an oracle-like ambience for the document as "the literal word of God." If we take a non-metaphysical view of the Bible, it serves as a link to our ancestors, a window. The ethereal, digital replacement technology for the printing press happens to have come of age in a time when the unfortunate ideology I'm criticizing dominates technological culture. Authorship - the very idea of the individual point of view - is not a priority of the new ideology. The digital flattening of expression into a global mush is not presently enforced from the top down, as it is in the case of a North Korean printing press. Instead, the design of software builds the ideology into those actions that are the easiest to perform on the software designs that are becoming ubiquitous. It is true that by using these tools, individuals can author books or blogs or whatever, but people are encouraged by the economics of free content, crowd dynamics, and lord aggregators to serve up fragments instead of considered whole expressions or arguments. The efforts of authors are appreciated in a manner that erases the boundaries between them.
The one collective book will absolutely not be the same thing as the library of books by individuals it is bankrupting. Some believe it will be better; others, including me, believe it will be disastrously worse. As the famous line goes from Inherit the Wind: 'The Bible is a book... but it is not the only book' Any singular, exclusive book, even the collective one accumulating in the cloud, will become a cruel book if it is the only one available.
”
”
Jaron Lanier (You Are Not a Gadget)
“
I’ve found that refactoring helps me write fast software. It slows the software in the short term while I’m refactoring, but it makes the software easier to tune during optimization. I end up well ahead.
”
”
Martin Fowler (Refactoring: Improving the Design of Existing Code)
“
In software development, “perfect” is a verb, not an adjective. There is no perfect process. There is no perfect design. There are no perfect stories. You can, however, perfect your process, your design, and your stories.
”
”
Kent Beck (Extreme Programming Explained: Embrace Change)
“
I conclude that there are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.
The first method is far more difficult. It demands the same skill, devotion, insight, and even inspiration as the discovery of the simple physical laws which underlie the complex phenomena of nature. It also requires a willingness to accept objectives which are limited by physical, logical, and technological constraints, and to accept a compromise when conflicting objectives cannot be met. No committee will ever do this until it is too late.
”
”
C.A.R. Hoare
“
Almost every software development organization has at least one developer who takes tactical programming to the extreme: a tactical tornado. The tactical tornado is a prolific programmer who pumps out code far faster than others but works in a totally tactical fashion. When it comes to implementing a quick feature, nobody gets it done faster than the tactical tornado. In some organizations, management treats tactical tornadoes as heroes. However, tactical tornadoes leave behind a wake of destruction. They are rarely considered heroes by the engineers who must work with their code in the future. Typically, other engineers must clean up the messes left behind by the tactical tornado, which makes it appear that those engineers (who are the real heroes) are making slower progress than the tactical tornado.
”
”
John Ousterhout (A Philosophy of Software Design)
“
The software engineers who labored over the interface would have probably resorted to the standard lament: “RTFM”—“Read the (ahem) Manual.” For design thinkers, however, behaviors are never right or wrong, but they are always meaningful.
”
”
Tim Brown (Change by Design: How Design Thinking Transforms Organizations and Inspires Innovation)
“
Girls practically invented programming,” she said. “Jean Bartik, Marlyn Wescoff, Fran Bilas—they all programmed ENIAC.” I had no idea what she was talking about. “And don’t forget Margaret Hamilton. She wrote the software that let Apollo 11 land on the moon.” “I meant programming video games,” I said. “Dona Bailey, Centipede. Brenda Romero, Wizardry. Roberta Williams, King’s Quest. She designed her first computer game at the kitchen table. I interviewed her for school last year.
”
”
Jason Rekulak (The Impossible Fortress)
“
In 2016, Rachael Tatman, a research fellow in linguistics at the University of Washington, found that Google’s speech-recognition software was 70% more likely to accurately recognise male speech than female speech – and it’s currently the best on the market.
”
”
Caroline Criado Pérez (Invisible Women: Data Bias in a World Designed for Men)
“
We used the word “heuristics” to describe aspects of software development that tip toward the liberal arts. Its counterpart, “algorithms,” was its alter ego on the technical side. Heuristics and algorithms are like two sides of the same coin. Both are specific procedures for making software do what it does: taking input, applying an operation, and producing output. Yet each had a different purpose.
”
”
Ken Kocienda (Creative Selection: Inside Apple's Design Process During the Golden Age of Steve Jobs)
“
1. “First make it work.” You are out of business if it doesn’t work. 2. “Then make it right.” Refactor the code so that you and others can understand it and evolve it as needs change or are better understood. 3. “Then make it fast.” Refactor the code for “needed” performance.
”
”
Robert C. Martin (Clean Architecture: A Craftsman's Guide to Software Structure and Design)
“
What would the world be like if you had to develop a power yourself before you could use it? Just as a silly example: How would the comment section on YouTube change if, to use it, you had to have the schooling necessary to have a basic understanding of how computers and the internet work? More seriously, would anyone smart enough to know how to design and build a tank, or a laser guided anti-aircraft missile, or a computer and video editing software be stupid enough to join ISIS? In fact, if such knowledge was required—would it even be possible for there to be standing armies?
”
”
John C. Wright (Sci Phi Journal, Issue 2, November 2014: The Journal of Science Fiction and Philosophy)
“
It’s still unmessed-with country. You like to think it goes on forever, but the colonisers are coming. The suits and tenderfeet. You can hear the blue-eyed-soul music over the ridgeline. There’s already a half dozen well-funded projects for designing software to crawl the Deep Web –”
“Is that,” Maxine wonders, “like, ‘Ride the Wild Surf’?”
“Except summer will end all too soon, once they get down here, everything’ll be suburbanised faster than you can say ‘late capitalism.’ Then it’ll be just like up there in the shallows. Link by link, they’ll bring it all under control, safe and respectable. Churches on every corner. Licenses in all the saloons. Anybody still wants his freedom’ll have to saddle up and head somewhere else.
”
”
Thomas Pynchon (Bleeding Edge)
“
The books said that the problem with autism was in the brain, and that made me feel like a faulty computer, something that should be sent back or scrapped. All the interventions, all the training, were like software designed to make a bad computer work right. It never does, and neither did I.
”
”
Elizabeth Moon (The Speed of Dark)
“
In short, capitalism depends on ever-growing amounts of state intervention in the market for its survival, and the system is hitting the point where the teat runs dry.
The result is a system in which governments and corporations are increasingly hollowed out. And meanwhile, growing up within this corporate capitalist “integument,” things like open source software and culture, open-source industrial design, permaculture and low-overhead garage micromanufacturing eat the corporate-state economy alive. An ever-growing share of labor and production are disappearing into relocalized resilient economies, self-employment, worker cooperatives and the informal and household economy. In the end, they will skeletonize the corporate dinosaurs like a swarm of piranha.
”
”
Kevin A. Carson
“
While any software system introduces some kind of formalization of the world, HCI (like AI) deals with formalizations of human cognition and activity. These are the issues that have lay at the heart of philosophical debate for centuries. In some ways, it would be hard to imagine a more philosophical enterprise.
”
”
Paul Dourish
“
Here is a minimal list of the things that every software professional should be conversant with: • Design patterns. You ought to be able to describe all 24 patterns in the GOF book and have a working knowledge of many of the patterns in the POSA books. • Design principles. You should know the SOLID principles and have a good understanding of the component principles. • Methods. You should understand XP, Scrum, Lean, Kanban, Waterfall, Structured Analysis, and Structured Design. • Disciplines. You should practice TDD, Object-Oriented design, Structured Programming, Continuous Integration, and Pair Programming. • Artifacts: You should know how to use: UML, DFDs, Structure Charts, Petri Nets, State Transition Diagrams and Tables, flow charts, and decision tables. Continuous
”
”
Robert C. Martin (Clean Coder, The: A Code of Conduct for Professional Programmers (Robert C. Martin Series))
“
Will highly comprehensible code, by virtue of being easy to modify, inevitably be supplanted by increasingly less elegant code until some equilibrium is achieved between comprehensibility and fragility? Perhaps simple on the outside/fragile on the inside can be an effective survival strategy for evolving artifacts.
”
”
Brian Foote Joseph Yoder
“
A good program must be written many times. This is true of the programs we show. The first draft may not clearly separate out the concerns, but by making that draft the programmer learns the structure of the problem. We will show two different implementations, which will reveal the evolution of the program as we identify shortcomings in our draft.
”
”
Chris Hanson (Software Design for Flexibility: How to Avoid Programming Yourself into a Corner)
“
Ecofont is designed to save ink, money and eventually the planet, but heaven save us from worthy fonts. Ecofont is a program that adds holes to a font. The software takes Arial, Verdana, Times New Roman and prints them is if they had been attacked by moths. They retain their original shape but not their original form, and so lose their true weight and beauty... a study at the University of Wisconsin claimed that Ecofonts, such as Ecofont Vera Sans, actually uses more ink and toner than lighter fonts such as Century Gothic...
”
”
Simon Garfield (Just My Type: A Book About Fonts)
“
The vital detail about the design is captured in the code. A well-written implementation should be transparent, revealing the model underlying it.
”
”
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
“
Architecting for the enterprise, when all you really need is a cute little desktop tool, is a recipe for failure.
”
”
Robert C. Martin (Clean Architecture: A Craftsman's Guide to Software Structure and Design)
“
Design with skepticism, and you will achieve resilience.
”
”
Michael T. Nygard (Release It!: Design and Deploy Production-Ready Software)
“
The trouble is, the human brain isn’t designed to make us happy and fulfilled. It’s designed to make us survive. This two-million-year-old organ is always looking for what’s wrong, for whatever can hurt us, so that we can either fight it or take flight from it. If you and I leave this ancient survival software to run the show, what chance do we have of enjoying life?
”
”
Anthony Robbins (Unshakeable: Your Financial Freedom Playbook)
“
If you need to visualize the soul, think of it as a cross between a wolf howl, a photon, and a dribble of dark molasses. But what it really is, as near as I can tell, is a packet of information. It’s a program, a piece of hyperspatial software designed explicitly to interface with the Mystery. Not a mystery, mind you, the Mystery. The one that can never be solved.
To one degree or another, everybody is connected to the Mystery, and everybody secretly yearns to expand the connection. That requires expanding the soul. These things can enlarge the soul: laughter, danger, imagination, meditation, wild nature, passion, compassion, psychedelics, beauty, iconoclasm, and driving around in the rain with the top down. These things can diminish it: fear, bitterness, blandness, trendiness, egotism, violence, corruption, ignorance, grasping, shining, and eating ketchup on cottage cheese.
Data in our psychic program is often nonlinear, nonhierarchical, archaic, alive, and teeming with paradox. Simply booting up is a challenge, if not for no other reason than that most of us find acknowledging the unknowable and monitoring its intrusions upon the familiar and mundane more than a little embarrassing.
But say you’ve inflated your soul to the size of a beach ball and it’s soaking into the Mystery like wine into a mattress. What have you accomplished? Well, long term, you may have prepared yourself for a successful metamorphosis, an almost inconceivable transformation to be precipitated by your death or by some great worldwide eschatological whoopjamboreehoo. You may have. No one can say for sure.
More immediately, by waxing soulful you will have granted yourself the possibility of ecstatic participation in what the ancients considered a divinely animated universe. And on a day to day basis, folks, it doesn’t get any better than that.
”
”
–Tom Robbins, from “You gotta have soul”, Esquire, October 1993
“
It is not enough for code to work. Code that works is often badly broken. Programmers who satisfy themselves with merely working code are behaving unprofessionally. They may fear that they don’t have time to improve the structure and design of their code, but I disagree. Nothing has a more profound and long-term degrading effect upon a development project than bad code.
”
”
Robert C. Martin (Clean Code: A Handbook of Agile Software Craftsmanship)
“
In 1948, while working for Bell Telephone Laboratories, he published a paper in the Bell System Technical Journal entitled "A Mathematical Theory of Communication" that not only introduced the word bit in print but established a field of study today known as information theory. Information theory is concerned with transmitting digital information in the presence of noise (which usually prevents all the information from getting through) and how to compensate for that. In 1949, he wrote the first article about programming a computer to play chess, and in 1952 he designed a mechanical mouse controlled by relays that could learn its way around a maze. Shannon was also well known at Bell Labs for riding a unicycle and juggling simultaneously.
”
”
Charles Petzold (Code: The Hidden Language of Computer Hardware and Software)
“
Let me try to explain to you, what to my taste is characteristic for all intelligent thinking. It is, that one is willing to study in depth an aspect of one's subject matter in isolation for the sake of its own consistency, all the time knowing that one is occupying oneself only with one of the aspects. We know that a program must be correct and we can study it from that viewpoint only; we also know that it should be efficient and we can study its efficiency on another day, so to speak. In another mood we may ask ourselves whether, and if so: why, the program is desirable. But nothing is gained—on the contrary!—by tackling these various aspects simultaneously. It is what I sometimes have called "the separation of concerns", which, even if not perfectly possible, is yet the only available technique for effective ordering of one's thoughts, that I know of. This is what I mean by "focusing one's attention upon some aspect": it does not mean ignoring the other aspects, it is just doing justice to the fact that from this aspect's point of view, the other is irrelevant. It is being one- and multiple-track minded simultaneously.
”
”
Edsger W. Dijkstra (Selected Writings on Computing: A personal Perspective (Monographs in Computer Science))
“
Thankfully for frustrated women around the world, Tom Schalk, the vice president of voice technology at car navigation system supplier ATX, has come up with a novel solution to fix the ‘many issues with women’s voices’.26 What women need, he said, was ‘lengthy training’ – if only women ‘were willing’ to submit to it. Which, sighs Schalk, they just aren’t. Just like the wilful women buying the wrong stoves in Bangladesh, women buying cars are unreasonably expecting voice-recognition software developers to design a product that works for them when it’s obvious that the problem needing fixing is the women themselves. Why can’t a woman be more like a man?
”
”
Caroline Criado Pérez (Invisible Women: Data Bias in a World Designed for Men)
“
Usability, fundamentally, is a matter of bringing a bit of human rights into the world of computer-human interaction. It's a way to let our ideals shine through in our software, no matter how mundane the software is. You may think that you're stuck in a boring, drab IT department making mind-numbing inventory software that only five lonely people will ever use. But you have daily opportunities to show respect for humanity even with the most mundane software.
”
”
Joel Spolsky (User Interface Design for Programmers)
“
Today I am more convinced than ever. Conceptual integrity is central to product quality. Having a system architect is the most important single step toward conceptual integrity. These principles are by no means limited to software systems, but to the design of any complex construct, whether a computer, an airplane, a Strategic Defense Initiative, a Global Positioning System. After teaching a software engineering laboratory more than 20 times, I came to insist that student teams as small as four people choose a manager and a separate architect. Defining distinct roles in such small teams may be a little extreme, but I have observed it to work well and to contribute to design success even for small teams.
”
”
Frederick P. Brooks Jr. (The Mythical Man-Month: Essays on Software Engineering)
“
Darwin’s world-changing idea unfolded inside his brain, but think of all the environments and tools he needed to piece it together: a ship, an archipelago, a notebook, a library, a coral reef. Our thought shapes the spaces we inhabit, and our spaces return the favor. The argument of this book is that a series of shared properties and patterns recur again and again in unusually fertile environments. I have distilled them down into seven patterns, each one occupying a separate chapter. The more we embrace these patterns—in our private work habits and hobbies, in our office environments, in the design of new software tools—the better we will be at tapping our extraordinary capacity for innovative thinking. 3
”
”
Steven Johnson (Where Good Ideas Come From)
“
A woman's sexual desire must be filtered through a careful appraisal of potential risks. During human prehistory, women who blindly gave in to every sexual urge likely faced a host of daunting challenges, including - in the extreme cases - death. Most important, from an evolutionary point of view, her children would have a harder time surviving than the children of a woman who limited the expression of her sexual urges to a strong and decent man willing to invest in a stable, long-term, child-rearing relationship. All modern women are the fruit of feminine caution. The result of this whittling away of the impulsive branches of our ancestral maternal tree is a female brain equipped with the most sophisticated neural software on Earth. A system designed to uncover, scrutinize, and evaluate a dazzling range of informative clues.
”
”
Ogi Ogas (A Billion Wicked Thoughts: What the World's Largest Experiment Reveals about Human Desire)
“
I write them to improve my productivity as a programmer. Making the quality assurance department happy is just a side effect. Unit tests are highly localized. Each test class works within a single package. It tests the interfaces to other packages, but beyond that it assumes the rest just works.
Functional tests are a different animal. They are written to ensure the software as a whole works. They provide quality assurance to the customer and don't care about programmer productivity. They should be developed by a different team, one who delights in finding bugs.
”
”
Martin Fowler (Refactoring: Improving the Design of Existing Code)
“
Insight, then. Wisdom. The quest for knowledge, the derivation of theorems, science and technology and all those exclusively human pursuits that must surely rest on a conscious foundation. Maybe that's what sentience would be for— if scientific breakthroughs didn't spring fully-formed from the subconscious mind, manifest themselves in dreams, as full-blown insights after a deep night's sleep. It's the most basic rule of the stymied researcher: stop thinking about the problem. Do something else. It will come to you if you just stop being conscious of it...
Don't even try to talk about the learning curve. Don't bother citing the months of deliberate practice that precede the unconscious performance, or the years of study and experiment leading up to the gift-wrapped Eureka moment. So what if your lessons are all learned consciously? Do you think that proves there's no other way? Heuristic software's been learning from experience for over a hundred years. Machines master chess, cars learn to drive themselves, statistical programs face problems and design the experiments to solve them and you think that the only path to learning leads through sentience? You're Stone-age nomads, eking out some marginal existence on the veldt—denying even the possibility of agriculture, because hunting and gathering was good enough for your parents.
Do you want to know what consciousness is for? Do you want to know the only real purpose it serves? Training wheels. You can't see both aspects of the Necker Cube at once, so it lets you focus on one and dismiss the other. That's a pretty half-assed way to parse reality. You're always better off looking at more than one side of anything. Go on, try. Defocus. It's the next logical step.
”
”
Peter Watts (Blindsight (Firefall, #1))
“
Over the past four decades, much evidence has accumulated suggesting that responsiveness — a software application’s ability to keep up with users and not make them wait — is the most important factor in determining user satisfaction. Not just one of the most important factors - the most important factor.
”
”
Jeff Johnson (GUI Bloopers 2.0: Common User Interface Design Don'ts and DOS)
“
When you're designing for extremes with software, the three most important "extremes" to remember are:
1. Design for people who can't read.
2. Design for people who can't use a mouse.
3. Design for people who have such bad memories they would forget their own name if it weren't embossed on their American Express
”
”
Joel Spolsky (User Interface Design for Programmers)
“
It is important to note that the design of an entire brain region is simpler than the design of a single neuron. As discussed earlier, models often get simpler at a higher level—consider an analogy with a computer. We do need to understand the detailed
physics ofsemiconductors to model a transistor, and the equations underlying a single real transistor are complex. A digital circuit that multiples two numbers requires hundreds of them. Yet we can model this multiplication circuit very simply with one or
two formulas. An entire computer with billions of transistors can be modeled through its instruction set and register description, which can be described on a handful of written pages of text and formulas. The software programs for an operating system,
language compilers, and assemblers are reasonably complex, but modeling a particular program—for example, a speech recognition programbased on hierarchical hidden Markov modeling—may likewise be described in only a few pages of
equations. Nowhere in such a description would be found the details ofsemiconductor physics or even of computer architecture. A similar observation holds true for the brain. A particular neocortical pattern recognizer that detects a particular invariant
visualfeature (such as a face) or that performs a bandpass filtering (restricting input to a specific frequency range) on sound or that evaluates the temporal proximity of two events can be described with far fewer specific details than the actual physics and
chemicalrelations controlling the neurotransmitters, ion channels, and other synaptic and dendritic variables involved in the neural processes. Although all of this complexity needs to be carefully considered before advancing to the next higher conceptual level,
much of it can be simplified as the operating principles of the brain are revealed.
”
”
Ray Kurzweil (How to Create a Mind: The Secret of Human Thought Revealed)
“
Still allergic to PowerPoints and formal presentations, he insisted that the people around the table hash out issues from various vantages and the perspectives of different departments.
Because he believed that Apple's great advantage was its integration of the whole widget- from design to hardware to software to content-he wanted all departments at the company to work together in parallel. The phrases he used were "deep collaboration" and "concurrent engineering." Instead of a development process in which a product would be passed sequentially from engineering to design to manufacturing to marketing and distribution, these various departments collaborated simultaneously. " Our method was to develop integrated products, and that meant our process had to be integrated and collaborative," Jobs said.
This approach also applied to key hires. He would have candidates meet the top leaders-Cook, Tevanian, Schiller, Rubinstein, Ive- rather than just the managers of the department where they wanted to work. " Then we all get together without the person and talk about whether they'll fit in," Jobs said.
”
”
Walter Isaacson (Steve Jobs)
“
Conway's Law predicts: "Organizations which design systems are constrained to produce systems which are copies of the communication structures of these organizations."[1] Conway goes on to point out that the organization chart will initially reflect the first system design, which is almost surely not the right one. If the system design is to be free to change, the organization must be prepared to change.
”
”
Frederick P. Brooks Jr. (The Mythical Man-Month: Essays on Software Engineering)
“
Pham Nuwen spent years learning to program/explore. Programming went back to the beginning of time. It was a little like the midden out back of his father’s castle. Where the creek had worn that away, ten meters down, there were the crumpled hulks of machines—flying machines, the peasants said—from the great days of Canberra’s original colonial era. But the castle midden was clean and fresh compared to what lay within the Reprise’s local net. There were programs here that had been written five thousand years ago, before Humankind ever left Earth. The wonder of it—the horror of it, Sura said—was that unlike the useless wrecks of Canberra’s past, these programs still worked! And via a million million circuitous threads of inheritance, many of the oldest programs still ran in the bowels of the Qeng Ho system. Take the Traders’ method of timekeeping. The frame corrections were incredibly complex—and down at the very bottom of it was a little program that ran a counter. Second by second, the Qeng Ho counted from the instant that a human had first set foot on Old Earth’s moon. But if you looked at it still more closely. . .the starting instant was actually some hundred million seconds later, the 0-second of one of Humankind’s first computer operating systems.
So behind all the top-level interfaces was layer under layer of support. Some of that software had been designed for wildly different situations. Every so often, the inconsistencies caused fatal accidents. Despite the romance of spaceflight, the most common accidents were simply caused by ancient, misused programs finally getting their revenge.
“We should rewrite it all,” said Pham.
“It’s been done,” said Sura, not looking up. She was preparing to go off-Watch, and had spent the last four days trying to root a problem out of the coldsleep automation.
“It’s been tried,” corrected Bret, just back from the freezers. “But even the top levels of fleet system code are enormous. You and a thousand of your friends would have to work for a century or so to reproduce it.” Trinli grinned evilly. “And guess what—even if you did, by the time you finished, you’d have your own set of inconsistencies. And you still wouldn’t be consistent with all the applications that might be needed now and then.”
Sura gave up on her debugging for the moment. “The word for all this is ‘mature programming environment.’ Basically, when hardware performance has been pushed to its final limit, and programmers have had several centuries to code, you reach a point where there is far more signicant code than can be rationalized. The best you can do is understand the overall layering, and know how to search for the oddball tool that may come in handy—take the situation I have here.” She waved at the dependency chart she had been working on. “We are low on working fluid for the coffins. Like a million other things, there was none for sale on dear old Canberra. Well, the obvious thing is to move the coffins near the aft hull, and cool by direct radiation. We don’t have the proper equipment to support this—so lately, I’ve been doing my share of archeology. It seems that five hundred years ago, a similar thing happened after an in-system war at Torma. They hacked together a temperature maintenance package that is precisely what we need.”
“Almost precisely.
”
”
Vernor Vinge (A Deepness in the Sky (Zones of Thought, #2))
“
The label “jack-of-all-trades but master of none” is normally meant to be derogatory, implying that the labelee lacks the focus to really dive into a subject and master it. But, when your online shopping application is on the fritz and you’re losing orders by the hundreds as each hour passes, it’s the jack-of-all-trades who not only knows how the application’s code works but can also do low-level UNIX debugging of your web server processes, analyze your RDBMS’s configuration for potential performance bottlenecks, and check your network’s router configuration for hard-to-find problems. And, more important, after finding the problem, the jack-of-all-trades can quickly make architecture and design decisions, implement code fixes, and deploy a new fixed system to production. In this scenario, the manufacturing scenario seems quaint at best and critically flawed at worst.
”
”
Chad Fowler (The Passionate Programmer: Creating a Remarkable Career in Software Development (Pragmatic Life))
“
Program maintenance involves no cleaning, lubrication, or repair of deterioration. It consists chiefly of changes that repair design defects. Much more often than with hardware, these changes include added functions. Usually they are visible to the user. The total cost of maintaining a widely used program is typically 40 percent or more of the cost of developing it. Surprisingly, this cost is strongly affected by the number of users. More users find more bugs.
”
”
Frederick P. Brooks Jr. (The Mythical Man-Month: Essays on Software Engineering)
“
Jobs spent part of every day for six months helping to refine the display. “It was the most complex fun I’ve ever had,” he recalled. “It was like being the one evolving the variations on ‘Sgt. Pepper.’ ” A lot of features that seem simple now were the result of creative brainstorms. For example, the team worried about how to prevent the device from playing music or making a call accidentally when it was jangling in your pocket. Jobs was congenitally averse to having on-off switches, which he deemed “inelegant.” The solution was “Swipe to Open,” the simple and fun on-screen slider that activated the device when it had gone dormant. Another breakthrough was the sensor that figured out when you put the phone to your ear, so that your lobes didn’t accidentally activate some function. And of course the icons came in his favorite shape, the primitive he made Bill Atkinson design into the software of the first Macintosh: rounded rectangles. In session after session, with Jobs immersed in every detail, the team members figured out ways to simplify what other phones made complicated. They added a big bar to guide you in putting calls on hold or making conference calls, found easy ways to navigate through email, and created icons you could scroll through horizontally to get to different apps—all of which were easier because they could be used visually on the screen rather than by using a keyboard built into the hardware.
”
”
Walter Isaacson (Steve Jobs)
“
Software developers come mainly from engineering and don’t see how similar their industry has become to the one that produces magazines, newspapers, books, TV shows, and movies. Most software developers haven’t yet learned to develop and follow strict standards for layout and graphic design and to pay as much attention to detail as traditional publishers and media studios do. As a result, graphic design and layout bloopers often get a “Who cares? It looks OK to me!” reaction from developers.
”
”
Jeff Johnson (GUI Bloopers 2.0: Common User Interface Design Don'ts and DOS)
“
Life of a software engineer sucks big time during project release. Every single team member contribution is very important. At times, we have to skip breakfast, lunch and even dinner, just to make sure the given ‘TASK’ is completed. Worst thing, that’s the time we get to hear wonderful F* words. It can be on conference calls or on emails, still we have to focus and deliver the end product to a client, without any compromise on quality. Actually, every techie should be saluted. We are the reason for the evolution of Information Technology. We innovate. We love artificial intelligence. We create bots and much more. We take you closer to books. Touch and feel it without the need of carrying a paperback. We created eBook and eBook reader app: it’s basically a code of a software engineer that process the file, keeps up-to-date of your reading history, and gives you a smoother reading experience. We are amazing people. We are more than a saint of those days. Next time, when you meet a software engineer, thank him/her for whatever code he/she developed, tested, designed or whatever he/she did!
”
”
Saravanakumar Murugan (Coffee Date)
“
In 2003, a Dutch clinical psychologist named Christof van Nimwegen began a fascinating study of computer-aided learning that a BBC writer would later call “one of the most interesting examinations of current computer use and the potential downsides of our increasing reliance on screen-based interaction with information systems.”26 Van Nimwegen had two groups of volunteers work through a tricky logic puzzle on a computer. The puzzle involved transferring colored balls between two boxes in accordance with a set of rules governing which balls could be moved at which time. One of the groups used software that had been designed to be as helpful as possible. It offered on-screen assistance during the course of solving the puzzle, providing visual cues, for instance, to highlight permitted moves. The other group used a bare-bones program, which provided no hints or other guidance. In the early stages of solving the puzzle, the group using the helpful software made correct moves more quickly than the other group, as would be expected. But as the test proceeded, the proficiency of the members of the group using the bare-bones software increased more rapidly. In the end, those using the unhelpful program were able to solve the puzzle more quickly and with fewer wrong moves. They also reached fewer impasses—states in which no further moves were possible—than did the people using the helpful software. The findings indicated, as van Nimwegen reported, that those using the unhelpful software were better able to plan ahead and plot strategy, while those using the helpful software tended to rely on simple trial and error. Often, in fact, those with the helpful software were found “to aimlessly click around” as they tried to crack the puzzle.
”
”
Nicholas Carr (The Shallows: What the Internet is Doing to Our Brains)
“
0.1 second: This is the limit for perception of cause-and-effect between events. If software waits longer than 0.1 second to show a response to your action, cause-and-effect is broken: the software’s reaction will not seem to be a result of your action. Therefore, on-screen buttons have 0.1 second to show they’ve been clicked; otherwise users will click again. If an object the user is “dragging” lags more than 0.1 second behind the cursor, users will have trouble placing it. This 0.1-second deadline is what HCI researcher Stuart Card calls the perceptual “moment.” It is also close to the limit for perception of smooth animation: 0.063 second/frame (16 frames/second)
”
”
Jeff Johnson (GUI Bloopers 2.0: Common User Interface Design Don'ts and DOS)
“
There was no escape: The entire Elliott 503 Mark II software project had to be abandoned, and with it, over thirty man-years of programming effort, equivalent to nearly one man’s active working life, and I was responsible, both as designer and as manager, for wasting it. ...
How did we recover from the catastrophe? First, we classified our 503 customers into groups, according to the nature and size of the hardware configurations which they had bought ... We assigned to each group of customers a small team of programmers and told the team leader to visit the customers to find out what they wanted; to select the easiest request to fulfill, and to make plans (but no promises) to implement it. In no case would we consider a request for a feature that would take more than three months to implement and deliver. The project leader would then have to convince me that the customers’ request was reasonable, that the design of the new feature was appropriate, and that the plans and schedules for implementation were realistic. Above all, I did not allow anything to be done which I did not myself understand. It worked! The software requested began to be delivered on the promised dates. With an increase in our confidence and that of our customers, we were able to undertake fulfilling slightly more ambitious requests. Within a year we had recovered from the disaster. Within two years, we even had some moderately satisfied customers.
”
”
C.A.R. Hoare
“
So, if you are predominantly a producer of intangible assets (writing software, doing design, producing research) you probably want to build an organization that allows information to flow, help serendipitous interactions, and keeps the key talent. That probably means allowing more autonomy, fewer targets, and more access to the boss, even if that is at the cost of influence activities. This seems to describe the types of autonomous organizations that the earlier writers, like Charles Leadbeater, had in mind. And it also seems to describe the increasing importance of systemic innovators. Such innovators are not inventors of single, isolated inventions. Rather, their role is to coordinate the synergies that successfully bring such an innovation to market.
”
”
Jonathan Haskel (Capitalism without Capital: The Rise of the Intangible Economy)
“
Because ease of use is the purpose, this ratio of function to conceptual complexity is the ultimate test of system design. Neither function alone nor simplicity alone defines a good design. This point is widely misunderstood. Operating System/360 is hailed by its builders as the finest ever built, because it indisputably has the most function. Function, and not simplicity, has always been the measure of excellence for its designers. On the other hand, the Time-Sharing System for the PDP-10 is hailed by its builders as the finest, because of its simplicity and the spareness of its concepts. By any measure, however, its function is not even in the same class as that of OS/360. As soon as ease of use is held up as the criterion, each of these is seen to be unbalanced, reaching for only half of the true goal.
”
”
Frederick P. Brooks Jr. (The Mythical Man-Month: Essays on Software Engineering)
“
Why is programming fun? What delights may its practitioner expect as his reward?
First is the sheer joy of making things. As the child delights in his first mud pie, so the adult enjoys building things, especially things of his own design. I think this delight must be an image of God’s delight in making things, a delight shown in the distinctness and newness of each leaf and each snowflake.
Second is the pleasure of making things that are useful to other people. Deep within, we want others to use our work and to find it helpful. In this respect the programming system is not essentially different from the child’s first clay pencil holder “for Daddy’s office.”
Third is the fascination of fashioning complex puzzle-like objects of interlocking moving parts and watching them work in subtle cycles, playing out the consequences of principles built in from the beginning. The programmed computer has all the fascination of the pinball machine or the jukebox mechanism, carried to the ultimate.
Fourth is the joy of always learning, which springs from the nonrepeating nature of the task. In one way or another the problem is ever new, and its solver learns something; sometimes practical, sometimes theoretical, and sometimes both.
Finally, there is the delight of working in such a tractable medium. The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures. (As we shall see later, this very tractability has its own problems.)
Yet the program construct, unlike the poet’s words, is real in the sense that it moves and works, producing visible outputs separate from the construct itself. It prints results, draws pictures, produces sounds, moves arms. The magic of myth and legend has come true in our time. One types the correct incantation on a keyboard and a display screen comes to life, showing things that never were nor could be.
Programming then is fun because it gratifies creative longings built deep within us and delights sensibilities we have in common with all men.
”
”
Frederick P. Brooks Jr. (The Mythical Man-Month: Essays on Software Engineering)
“
told my people that I wanted only the best, whatever it took, wherever they came from, whatever it cost. We assembled thirty people, the brightest cybersecurity minds we have. A few are on loan, pursuant to strict confidentiality agreements, from the private sector—software companies, telecommunications giants, cybersecurity firms, military contractors. Two are former hackers themselves, one of them currently serving a thirteen-year sentence in a federal penitentiary. Most are from various agencies of the federal government—Homeland Security, CIA, FBI, NSA. Half our team is devoted to threat mitigation—how to limit the damage to our systems and infrastructure after the virus hits. But right now, I’m concerned with the other half, the threat-response team that Devin and Casey are running. They’re devoted to stopping the virus, something they’ve been unable to do for the last two weeks. “Good morning, Mr. President,” says Devin Wittmer. He comes from NSA. After graduating from Berkeley, he started designing cyberdefense software for clients like Apple before the NSA recruited him away. He has developed federal cybersecurity assessment tools to help industries and governments understand their preparedness against cyberattacks. When the major health-care systems in France were hit with a ransomware virus three years ago, we lent them Devin, who was able to locate and disable it. Nobody in America, I’ve been assured, is better at finding holes in cyberdefense systems or at plugging them. “Mr. President,” says Casey Alvarez. Casey is the daughter of Mexican immigrants who settled in Arizona to start a family and built up a fleet of grocery stores in the Southwest along the way. Casey showed no interest in the business, taking quickly to computers and wanting to join law enforcement. When she was a grad student at Penn, she got turned down for a position at the Department of Justice. So Casey got on her computer and managed to do what state and federal authorities had been unable to do for years—she hacked into an underground child-pornography website and disclosed the identities of all the website’s patrons, basically gift-wrapping a federal prosecution for Justice and shutting down an operation that was believed to be the largest purveyor of kiddie porn in the country. DOJ hired her on the spot, and she stayed there until she went to work for the CIA. She’s been most recently deployed in the Middle East with US Central Command, where she intercepts, decodes, and disrupts cybercommunications among terrorist groups. I’ve been assured that these two are, by far, the best we have. And they are about to meet the person who, so far, has been better. There is a hint of reverence in their expressions as I introduce them to Augie. The Sons of Jihad is the all-star team of cyberterrorists, mythical figures in that world. But I sense some competitive fire, too, which will be a good thing.
”
”
Bill Clinton (The President Is Missing)