"There is one very good reason to learn programming, but it has nothing to
do with preparing for high-tech careers or with making sure one is computer
literate in order to avoid being cynically manipulated by the computers of
the future. The real value of learning to program can only be understood if
we look at learning to program as an exercise of the intellect, as a kind of
modern-day Latin that we learn to sharpen our minds." (Roger Schank, "The
Cognitive Computer: on language, learning, and artificial intelligence",
1984)
"Object-oriented programming increases the value of these metrics by
managing this complexity. The most effective tool available for dealing with
complexity is abstraction. Many types of abstraction can be used, but
encapsulation is the main form of abstraction by which complexity is managed
in object-oriented programming. Programming in an object-oriented language,
however, does not ensure that the complexity of an application will be well
encapsulated. Applying good programming techniques can improve
encapsulation, but the full benefit of object-oriented programming can be
realized only if encapsulation is a recognized goal of the design process."
(Rebecca Wirfs-Brock," Object-Oriented Design: A responsibility-driven
approach", 1989)
"It is important to emphasize the value of simplicity and elegance, for
complexity has a way of compounding difficulties and as we have seen,
creating mistakes. My definition of elegance is the achievement of a given
functionality with a minimum of mechanism and a maximum of clarity.""
(Fernando J Corbató, "On Building Systems That Will Fail", 1991)
"The real value of tests is not that they detect bugs in the code, but that
they detect inadequacies in the methods, concentration, and skills of those
who design and produce the code." (Charles A R Hoare, "How Did Software Get
So Reliable Without Proof?", Lecture Notes in Computer Science Vol. 1051,
1996)
"Extreme Programming is a discipline of software development with values of
simplicity, communication, feedback and courage. We focus on the roles of
customer, manager, and programmer and accord key rights and responsibilities
to those in those roles." (Ron Jeffries, "Extreme Programming Installed",
2001)
"Successful software development is a team effort - not just the
development team, but the larger team consisting of customer, management and
developers. [...] Every software project needs to deliver business value. To
be successful, the team needs to build the right things, in the right order,
and to be sure that what they build actually works." (Ron Jeffries, "Extreme
Programming Installed", 2001)
"The values of XP are simplicity, communication, feedback, and courage.
[...] Use simple design and programming practices, and simple methods of
planning, tracking, and reporting. Test your program and your practices,
using feedback to decide how to steer the project. Working together in this
way gives the team courage."" (Ron Jeffries, "Extreme Programming
Installed", 2001)
"Refactoring is the process of taking a running program and adding to its
value, not by changing its behavior but by giving it more of these qualities
that enable us to continue developing at speed." (Kent Beck, "Why
Refactoring Works", 2002)
"If the design, or some central part of it, does not map to the domain
model, that model is of little value, and the correctness of the software is
suspect. At the same time, complex mappings between models and design
functions are difficult to understand and, in practice, impossible to
maintain as the design changes. A deadly divide opens between analysis and
design so that insight gained in each of those activities does not feed into
the other." (Eric Evans, "Domain-Driven Design: Tackling complexity in the
heart of software", 2003)
"Much data in databases has a long history. It might have come from old
'legacy' systems or have been changed several times in the past. The usage
of data fields and value codes changes over time. The same value in the same
field will mean totally different thing in different records. Knowledge or
these facts allows experts to use the data properly. Without this knowledge,
the data may bc used literally and with sad consequences. The same is about
data quality. Data users in the trenches usually know good data from bad and
can still use it efficiently. They know where to look and what to check.
Without these experts, incorrect data quality assumptions are often made and
poor data quality becomes exposed." (Arkady Maydanchik, "Data Quality
Assessment", 2007)
"Features that offer value to a minority of users impose a cost on all
users." (Douglas Crockford, "JavaScript: The Good Parts", 2008)
"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", 2008)
"Prototypes should command only as much time, effort, and investment as is
necessary to generate useful feedback and drive an idea forward. The greater
the complexity and expense, the more 'finished' it is likely to seem and the
less likely its creators will be to profit from constructive feedback - or
even to listen to it. The goal of prototyping is not to create a working
model. It is to give form to an idea to learn about its strengths and
weaknesses and to identify new directions for the next generation of more
detailed, more refined prototypes. A prototype's scope should be limited.
The purpose of early prototypes might be to understand whether an idea has
functional value." (Tim Brown, "Change by Design: How Design Thinking
Transforms Organizations and Inspires Innovation", 2009)
"Interim solutions, however, acquire inertia (or momentum, depending on
your point of view). Because they are there, ultimately useful and widely
accepted, there is no immediate need to do anything else. Whenever a
stakeholder has to decide what action adds the most value, there will be
many that are ranked higher than proper integration of an interim solution.
Why? Because it is there, it works, and it is accepted. The only perceived
downside is that it does not follow the chosen standards and guidelines -
except for a few niche markets, this is not considered to be a significant
force." (Klaus Marquardt, [in Kevlin Henney’s "97 Things Every Programmer
Should Know", 2010])
"Agile methods universally rely on an incremental approach to software
specification, development, and delivery. They are best suited to
application development where the system requirements usually change rapidly
during the development process. They are intended to deliver working
software quickly to customers, who can then propose new and changed
requirements to be included in later iterations of the system. They aim to
cut down on process bureaucracy by avoiding work that has dubious long-term
value and eliminating documentation that will probably never be used." (Ian
Sommerville, "Software Engineering" 9th Ed., 2011)
"Users who continually find value in a product are more likely to tell
their friends about it." (Nir Eyal, "Hooked: How to Build Habit-Forming
Products", 2014)
"A value stream is a series of activities required to deliver an outcome.
The software development value stream may be described as: validate business
case, analyze, design, build, test, deploy, learn from usage analytics and
other feedback - rinse and repeat." (Sriram Narayan, "Agile IT Organization
Design: For Digital Transformation and Continuous Delivery", 2015)
"Development is a design process. Design processes are generally evaluated
by the value they deliver rather than a conformance to plan. Therefore, it
makes sense to move away from plan-driven projects and toward value-driven
projects. [...] The realization that the source code is part of the design,
not the product, fundamentally rewires our understanding of software."
(Sriram Narayan, "Agile IT Organization Design: For Digital Transformation
and Continuous Delivery", 2015)
"Teams are always works in progress, but they are also your best shot at
delivering value continuously and sustainably by aligning them with the
business. Ideally, teams should be long lived and autonomous, with engaged
team members. However, teams don't live in isolation. They need to
understand how and when to interact with each other. And these team
interactions need to evolve over time to support the distinct phases of
discovery and execution that products and technology go through during their
lifetimes." (Matthew Skelton & Manuel Pais, "Team Topologies: Organizing
Business and Technology Teams for Fast Flow", 2019)
"Engineering managers have a responsibility to optimize their teams. They
improve engineering workflows and reduce dependencies and repetitive tasks.
Self-sustaining teams minimize dependencies that hinder them in their
efforts to achieve their objectives. Scalable teams minimize software
delivery steps and eliminate bottlenecks. The mechanisms to achieve this may
include the use of tools, conventions, documentation, processes, or abstract
things such as values and principles. Any action that produces a tangible
improvement in the speed, reliability, or robustness of your team's work is
worth your consideration." (Morgan Evans, "Engineering Manager's Handbook",
2023)