The document discusses the principles of minimalism in software development. It advocates removing unnecessary code to improve quality, focusing on the essential functionality, and expressing ideas simply without redundant elements. Minimalism seeks to reduce code to its purest form while still achieving the intended purpose.
Code smells and Other Malodorous Software OdorsClint Edmonson
A code smell, also known as bad smell in computer programming code, refers to any symptom in the source code of a program that possibly indicates a deeper problem. Join us in this lively session where we will get a whiff of some aromas encountered in the field and how we can neutralize them.
Code smells and Other Malodorous Software OdorsClint Edmonson
A code smell, also known as bad smell in computer programming code, refers to any symptom in the source code of a program that possibly indicates a deeper problem. Join us in this lively session where we will get a whiff of some aromas encountered in the field and how we can neutralize them.
Protecting JavaScript source code using obfuscation - OWASP Europe Tour 2013 ...AuditMark
The goal of code obfuscation is to delay the understanding of what a program does. It can be used, for example, in scenarios where the code contains Intellectual Property (algorithms) or when the owner wants to prevent a competitor for stealing and reusing the code. To achieve it, an obfuscation transformation translates easy to understand code into a much harder to understand form. But in order to be resilient, obfuscation transformations need also to resist automatic reversal performed using static or dynamic code analysis techniques. This presentation focuses on the specific case of JavaScript source obfuscation, main usage cases, presents some obfuscation examples and their value in providing real protection against reverse-engineering.
This talk was given in the Israeli Scala Meetup, Underscore, on February 13, 2018.
Video (Hebrew): https://youtu.be/57iAD9X_1jI
These days sbt is the de-facto build tool for Scala, but most of us just write the minimum viable build.sbt file, import the libraries we need (and maybe throw in some sbt-assembly) and forget about it.
In this Good Practices session, you will learn about making your build safer and more robust by making the Scala compiler work for you and through using some sbt plugins.
This talk will be quite high-level. There will be no need for prior knowledge of sbt and it should be beneficial for you even if you don’t use sbt.
Presented to "Austin on Rails" May 28, 2013. Describes what technical writers bring to your development team. Also explains what you can do to document your development effort.
How Functional Programming Made Me a Better DeveloperCameron Presley
With the rise in popularity recently, functional programming has become ""The Next Big Thing"". As of today, there are tons of frameworks and tools that can be used for front-end, back-end, desktop, and mobile development. With that being said, the majority of us are still using object-oriented languages for our day jobs and don't need to learn functional programming, right?
In this talk, I'll walk you through my experiences learning functional programming over the last year, how my style of programming has changed, and how I now think about programming with regards to both functional and object-oriented paradigms.
JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"JSFestUA
As a subset of the JS community, react has seen a lot of so-called ""good practices"" these last years, made out of libraries and design patterns. As if it wasn't hard enough to stay sane in a crazy JS world, we're now doing the same in react.
Together, let's explore how such abundance of new techniques can actually be embraced, without making you lose your mind !
Building DSLs: Marriage of High Essence and Groovy MetaprogrammingSkills Matter
DSLs or Domain Specific Languages focus on a domain or a particular problem. They serve as an effective human-machine interaction tool as they're highly expressive. Their scope is fairly focused and that keeps them simple and small from the user's point of view. However, designing and implementing DSLs is not easy. Typically this involves steep learning curve and difficult parsing techniques. This is where Groovy comes in. You can take advantage of the flexible syntax of Groovy and it's metaprogramming capability to create what are called internal DSLs, that is, DSLs hosted using a higher level language.
In this fast paced highly interactive presentation you will start out learning the characteristics and types of DSLs. Then you will learn about the challenges in designing DSLs and deep dive into Groovy features that can ease the pain of implementing DSLs. Then, using some live coding, Venkat will show you how to create and implement internal DSLs using Groovy. Along the way you'll learn some tricks to facilitate desirable syntax for your DSL.
Protecting JavaScript source code using obfuscation - OWASP Europe Tour 2013 ...AuditMark
The goal of code obfuscation is to delay the understanding of what a program does. It can be used, for example, in scenarios where the code contains Intellectual Property (algorithms) or when the owner wants to prevent a competitor for stealing and reusing the code. To achieve it, an obfuscation transformation translates easy to understand code into a much harder to understand form. But in order to be resilient, obfuscation transformations need also to resist automatic reversal performed using static or dynamic code analysis techniques. This presentation focuses on the specific case of JavaScript source obfuscation, main usage cases, presents some obfuscation examples and their value in providing real protection against reverse-engineering.
This talk was given in the Israeli Scala Meetup, Underscore, on February 13, 2018.
Video (Hebrew): https://youtu.be/57iAD9X_1jI
These days sbt is the de-facto build tool for Scala, but most of us just write the minimum viable build.sbt file, import the libraries we need (and maybe throw in some sbt-assembly) and forget about it.
In this Good Practices session, you will learn about making your build safer and more robust by making the Scala compiler work for you and through using some sbt plugins.
This talk will be quite high-level. There will be no need for prior knowledge of sbt and it should be beneficial for you even if you don’t use sbt.
Presented to "Austin on Rails" May 28, 2013. Describes what technical writers bring to your development team. Also explains what you can do to document your development effort.
How Functional Programming Made Me a Better DeveloperCameron Presley
With the rise in popularity recently, functional programming has become ""The Next Big Thing"". As of today, there are tons of frameworks and tools that can be used for front-end, back-end, desktop, and mobile development. With that being said, the majority of us are still using object-oriented languages for our day jobs and don't need to learn functional programming, right?
In this talk, I'll walk you through my experiences learning functional programming over the last year, how my style of programming has changed, and how I now think about programming with regards to both functional and object-oriented paradigms.
JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"JSFestUA
As a subset of the JS community, react has seen a lot of so-called ""good practices"" these last years, made out of libraries and design patterns. As if it wasn't hard enough to stay sane in a crazy JS world, we're now doing the same in react.
Together, let's explore how such abundance of new techniques can actually be embraced, without making you lose your mind !
Building DSLs: Marriage of High Essence and Groovy MetaprogrammingSkills Matter
DSLs or Domain Specific Languages focus on a domain or a particular problem. They serve as an effective human-machine interaction tool as they're highly expressive. Their scope is fairly focused and that keeps them simple and small from the user's point of view. However, designing and implementing DSLs is not easy. Typically this involves steep learning curve and difficult parsing techniques. This is where Groovy comes in. You can take advantage of the flexible syntax of Groovy and it's metaprogramming capability to create what are called internal DSLs, that is, DSLs hosted using a higher level language.
In this fast paced highly interactive presentation you will start out learning the characteristics and types of DSLs. Then you will learn about the challenges in designing DSLs and deep dive into Groovy features that can ease the pain of implementing DSLs. Then, using some live coding, Venkat will show you how to create and implement internal DSLs using Groovy. Along the way you'll learn some tricks to facilitate desirable syntax for your DSL.
Experience our free, in-depth three-part Tendenci Platform Corporate Membership Management workshop series! In Session 1 on May 14th, 2024, we began with an Introduction and Setup, mastering the configuration of your Corporate Membership Module settings to establish membership types, applications, and more. Then, on May 16th, 2024, in Session 2, we focused on binding individual members to a Corporate Membership and Corporate Reps, teaching you how to add individual members and assign Corporate Representatives to manage dues, renewals, and associated members. Finally, on May 28th, 2024, in Session 3, we covered questions and concerns, addressing any queries or issues you may have.
For more Tendenci AMS events, check out www.tendenci.com/events
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus
As part of the DOE Integrated Research Infrastructure (IRI) program, NERSC at Lawrence Berkeley National Lab and ALCF at Argonne National Lab are working closely with General Atomics on accelerating the computing requirements of the DIII-D experiment. As part of the work the team is investigating ways to speedup the time to solution for many different parts of the DIII-D workflow including how they run jobs on HPC systems. One of these routes is looking at Globus Compute as a way to replace the current method for managing tasks and we describe a brief proof of concept showing how Globus Compute could help to schedule jobs and be a tool to connect compute at different facilities.
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteGoogle
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-pilot-review/
AI Pilot Review: Key Features
✅Deploy AI expert bots in Any Niche With Just A Click
✅With one keyword, generate complete funnels, websites, landing pages, and more.
✅More than 85 AI features are included in the AI pilot.
✅No setup or configuration; use your voice (like Siri) to do whatever you want.
✅You Can Use AI Pilot To Create your version of AI Pilot And Charge People For It…
✅ZERO Manual Work With AI Pilot. Never write, Design, Or Code Again.
✅ZERO Limits On Features Or Usages
✅Use Our AI-powered Traffic To Get Hundreds Of Customers
✅No Complicated Setup: Get Up And Running In 2 Minutes
✅99.99% Up-Time Guaranteed
✅30 Days Money-Back Guarantee
✅ZERO Upfront Cost
See My Other Reviews Article:
(1) TubeTrivia AI Review: https://sumonreview.com/tubetrivia-ai-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
A Comprehensive Look at Generative AI in Retail App Testing.pdfkalichargn70th171
Traditional software testing methods are being challenged in retail, where customer expectations and technological advancements continually shape the landscape. Enter generative AI—a transformative subset of artificial intelligence technologies poised to revolutionize software testing.
First Steps with Globus Compute Multi-User EndpointsGlobus
In this presentation we will share our experiences around getting started with the Globus Compute multi-user endpoint. Working with the Pharmacology group at the University of Auckland, we have previously written an application using Globus Compute that can offload computationally expensive steps in the researcher's workflows, which they wish to manage from their familiar Windows environments, onto the NeSI (New Zealand eScience Infrastructure) cluster. Some of the challenges we have encountered were that each researcher had to set up and manage their own single-user globus compute endpoint and that the workloads had varying resource requirements (CPUs, memory and wall time) between different runs. We hope that the multi-user endpoint will help to address these challenges and share an update on our progress here.
Unleash Unlimited Potential with One-Time Purchase
BoxLang is more than just a language; it's a community. By choosing a Visionary License, you're not just investing in your success, you're actively contributing to the ongoing development and support of BoxLang.
We describe the deployment and use of Globus Compute for remote computation. This content is aimed at researchers who wish to compute on remote resources using a unified programming interface, as well as system administrators who will deploy and operate Globus Compute services on their research computing infrastructure.
Developing Distributed High-performance Computing Capabilities of an Open Sci...Globus
COVID-19 had an unprecedented impact on scientific collaboration. The pandemic and its broad response from the scientific community has forged new relationships among public health practitioners, mathematical modelers, and scientific computing specialists, while revealing critical gaps in exploiting advanced computing systems to support urgent decision making. Informed by our team’s work in applying high-performance computing in support of public health decision makers during the COVID-19 pandemic, we present how Globus technologies are enabling the development of an open science platform for robust epidemic analysis, with the goal of collaborative, secure, distributed, on-demand, and fast time-to-solution analyses to support public health.
Listen to the keynote address and hear about the latest developments from Rachana Ananthakrishnan and Ian Foster who review the updates to the Globus Platform and Service, and the relevance of Globus to the scientific community as an automation platform to accelerate scientific discovery.
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Globus
The U.S. Geological Survey (USGS) has made substantial investments in meeting evolving scientific, technical, and policy driven demands on storing, managing, and delivering data. As these demands continue to grow in complexity and scale, the USGS must continue to explore innovative solutions to improve its management, curation, sharing, delivering, and preservation approaches for large-scale research data. Supporting these needs, the USGS has partnered with the University of Chicago-Globus to research and develop advanced repository components and workflows leveraging its current investment in Globus. The primary outcome of this partnership includes the development of a prototype enterprise repository, driven by USGS Data Release requirements, through exploration and implementation of the entire suite of the Globus platform offerings, including Globus Flow, Globus Auth, Globus Transfer, and Globus Search. This presentation will provide insights into this research partnership, introduce the unique requirements and challenges being addressed and provide relevant project progress.
Check out the webinar slides to learn more about how XfilesPro transforms Salesforce document management by leveraging its world-class applications. For more details, please connect with sales@xfilespro.com
If you want to watch the on-demand webinar, please click here: https://www.xfilespro.com/webinars/salesforce-document-management-2-0-smarter-faster-better/
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfJay Das
With the advent of artificial intelligence or AI tools, project management processes are undergoing a transformative shift. By using tools like ChatGPT, and Bard organizations can empower their leaders and managers to plan, execute, and monitor projects more effectively.
Into the Box Keynote Day 2: Unveiling amazing updates and announcements for modern CFML developers! Get ready for exciting releases and updates on Ortus tools and products. Stay tuned for cutting-edge innovations designed to boost your productivity.
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamtakuyayamamoto1800
In this slide, we show the simulation example and the way to compile this solver.
In this solver, the Helmholtz equation can be solved by helmholtzFoam. Also, the Helmholtz equation with uniformly dispersed bubbles can be simulated by helmholtzBubbleFoam.
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisGlobus
JASMIN is the UK’s high-performance data analysis platform for environmental science, operated by STFC on behalf of the UK Natural Environment Research Council (NERC). In addition to its role in hosting the CEDA Archive (NERC’s long-term repository for climate, atmospheric science & Earth observation data in the UK), JASMIN provides a collaborative platform to a community of around 2,000 scientists in the UK and beyond, providing nearly 400 environmental science projects with working space, compute resources and tools to facilitate their work. High-performance data transfer into and out of JASMIN has always been a key feature, with many scientists bringing model outputs from supercomputers elsewhere in the UK, to analyse against observational or other model data in the CEDA Archive. A growing number of JASMIN users are now realising the benefits of using the Globus service to provide reliable and efficient data movement and other tasks in this and other contexts. Further use cases involve long-distance (intercontinental) transfers to and from JASMIN, and collecting results from a mobile atmospheric radar system, pushing data to JASMIN via a lightweight Globus deployment. We provide details of how Globus fits into our current infrastructure, our experience of the recent migration to GCSv5.4, and of our interest in developing use of the wider ecosystem of Globus services for the benefit of our user community.
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns
Unlocking Business Potential: Tailored Technology Solutions by Prosigns
Discover how Prosigns, a leading technology solutions provider, partners with businesses to drive innovation and success. Our presentation showcases our comprehensive range of services, including custom software development, web and mobile app development, AI & ML solutions, blockchain integration, DevOps services, and Microsoft Dynamics 365 support.
Custom Software Development: Prosigns specializes in creating bespoke software solutions that cater to your unique business needs. Our team of experts works closely with you to understand your requirements and deliver tailor-made software that enhances efficiency and drives growth.
Web and Mobile App Development: From responsive websites to intuitive mobile applications, Prosigns develops cutting-edge solutions that engage users and deliver seamless experiences across devices.
AI & ML Solutions: Harnessing the power of Artificial Intelligence and Machine Learning, Prosigns provides smart solutions that automate processes, provide valuable insights, and drive informed decision-making.
Blockchain Integration: Prosigns offers comprehensive blockchain solutions, including development, integration, and consulting services, enabling businesses to leverage blockchain technology for enhanced security, transparency, and efficiency.
DevOps Services: Prosigns' DevOps services streamline development and operations processes, ensuring faster and more reliable software delivery through automation and continuous integration.
Microsoft Dynamics 365 Support: Prosigns provides comprehensive support and maintenance services for Microsoft Dynamics 365, ensuring your system is always up-to-date, secure, and running smoothly.
Learn how our collaborative approach and dedication to excellence help businesses achieve their goals and stay ahead in today's digital landscape. From concept to deployment, Prosigns is your trusted partner for transforming ideas into reality and unlocking the full potential of your business.
Join us on a journey of innovation and growth. Let's partner for success with Prosigns.
May Marketo Masterclass, London MUG May 22 2024.pdfAdele Miller
Can't make Adobe Summit in Vegas? No sweat because the EMEA Marketo Engage Champions are coming to London to share their Summit sessions, insights and more!
This is a MUG with a twist you don't want to miss.
Enhancing Research Orchestration Capabilities at ORNL.pdfGlobus
Cross-facility research orchestration comes with ever-changing constraints regarding the availability and suitability of various compute and data resources. In short, a flexible data and processing fabric is needed to enable the dynamic redirection of data and compute tasks throughout the lifecycle of an experiment. In this talk, we illustrate how we easily leveraged Globus services to instrument the ACE research testbed at the Oak Ridge Leadership Computing Facility with flexible data and task orchestration capabilities.
Enhancing Research Orchestration Capabilities at ORNL.pdf
Minimalism
1. Minimalism
A Practical Guide to Writing Less Code
kevlin@curbralan.com
Kevlin Henney
JAOO 2002 http://www.curbralan.com 2
Minimalism
• A movement in art, architecture, music and
interior design
• More generally, a tendency towards less
rather than more
Seeking the minimum, the lowest point on a curve
It isn't necessary for a work to have a lot of things to look at, to compare, to analyse
one by one, to contemplate. The thing as a whole, its quality as a whole, is what is
interesting. The main things are alone and are more intense, clear and powerful.
Donald Judd
2. JAOO 2002 http://www.curbralan.com 3
Less Code, More Software
• Creeping featurism and code verbosity do not
add to the used functionality of the software
Functionality is weakly correlated with the
number of lines of code written
• On the other hand, minimalism is not the
reduction of source code to line noise
Code should be sufficient and fit for purpose
The difference between a good and a poor architect is that the poor architect
succumbs to every temptation and the good one resists it.
Ludwig Wittgenstein
JAOO 2002 http://www.curbralan.com 4
Remove to Improve
• Yes, it's OK to delete code
Controlled and considered code implosion shows
that a project is maturing
• But remember, minimalism is not nihilism
Refactoring is a disciplined practice
The minimum could be defined as the perfection that an artefact achieves when it is
no longer possible to improve it by subtraction. This is the quality that an object
has when every component, every detail, and every junction has been reduced or
condensed to the essentials. It is the result of the omission of the inessentials.
John Pawson
3. JAOO 2002 http://www.curbralan.com 5
A Programmer's Dozen
Refactoring, Repairing and Regaining Control
programmer a person who writes computer programs.
dozen a group or set of twelve.
The New Oxford Dictionary of English
Asymmetric bounds are most convenient to program in a language like C in which
arrays start from zero: the exclusive upper bound of such an array is equal to the
number of elements! Thus when we define a C array with 12 elements, 0 is
inclusive lower bound and 12 the exclusive upper bound for the subscripts of the
array.
Andrew Koenig
A baker's dozen contains thirteen items as opposed to the familiar twelve. This
dates from the time when bakers were subject to heavy fines if they served under-
weight bread. To avoid this danger bakers provided a surplus number of loaves, the
thirteenth loaf in the dozen being called the vantage loaf.
Lock, Stock & Barrel
JAOO 2002 http://www.curbralan.com 6
Recommendation 0
Follow Form
• Suitable idioms in code should be followed to
improve communication
Ideolects reduce general comprehensibility
• But idioms should not be followed slavishly if
they make little sense or detract from quality
This principle, that of parallel construction, requires that expressions similar in
context and function be outwardly similar. The likeness of form enables the reader
to recognize more readily the likeness of content and function.
Strunk and White
4. JAOO 2002 http://www.curbralan.com 7
Recommendation 1
Don't Break Contracts
• Methods have a contract for their use
Assertions may or may not be enough to enforce
the contract fully
• Subclassing and implemented interfaces
should follow substitutability
Unsupported operations or operations that do a
little less or expect a little extra add complexity
Politicians are the same everywhere. They promise to build a bridge even when
there's no river.
Nikita Khrushchev
JAOO 2002 http://www.curbralan.com 8
Recommendation 2
Include Only What You Need
• A class typically defines an interface backed
by an implementation
Separate the usage type from the creation type
"I wish you wouldn't keep appearing and vanishing so suddenly: you make one
quite giddy!"
"All right," said the Cat; and this time it vanished quite slowly, beginning with the
end of the tail, and ending with the grin, which remained some time after the rest of
it had gone.
"Well! I've often seen a cat without a grin," thought Alice; "but a grin without a
cat! It's the most curious thing I ever saw in all my life!"
Lewis Carroll
5. JAOO 2002 http://www.curbralan.com 9
Recommendation 3
Express Independent Ideas Independently
• Normalise dependencies
Consolidate common argument lists and decouple
roles within interfaces
• Watch out for porous layers and noosely
coupled code
Weak wrapping and cyclic package dependencies
propagate dependencies unnecessarily
What do you get when you cross a mosquito with a rock climber?
Nothing, you can't cross a vector and a scalar.
JAOO 2002 http://www.curbralan.com 10
Recommendation 4
Parameterize from Above
• Global packages, Singletons and bundles of
constants should be rationalised or eliminated
They introduce coincidental coupling, so code is
less adaptable and harder to test
• Use arguments and interfaces to invert
dependencies
While moon sets
atop the trees,
leaves cling to rain.
Bashō
6. JAOO 2002 http://www.curbralan.com 11
Recommendation 5
Manage Resources Symmetrically
• Garbage collection is insufficient for any
resource other than memory
And even then, it can be less than perfect
• Resource management should be explicitly
balanced or fully encapsulated
Consider using block objects to wrap resource use
As the sunrise to the night,
As the north wind to the clouds.
Percy Bysshe Shelley
JAOO 2002 http://www.curbralan.com 12
Recommendation 6
Encapsulate
• Encapsulation is more than just data hiding
Self-containedness includes exception safety,
thread safety, ease of use, transparency, etc.
• Encapsulation reduces affordances
encapsulate enclose (something) in or as if in a capsule.
express the essential feature of (someone or something) succinctly.
enclose (a message or signal) in a set of codes which allow use by or transfer
through different computer systems or networks.
provide an interface for (a piece of software or hardware) to allow or
simplify access for the user.
The New Oxford Dictionary of English
7. JAOO 2002 http://www.curbralan.com 13
Recommendation 7
Flow Don't Jump
• Jumpy control flow should be used sparingly
It is easy to get addicted to break and early returns
— and continue and goto (where it exists)
throw is an exception
• Control flow that doesn't flow can be hard to
comprehend and refactor
Structured programming is not completely dead
Still glides the Stream, and shall for ever glide;
The Form remains, the Function never dies.
William Wordsworth
JAOO 2002 http://www.curbralan.com 14
Recommendation 8
Sharpen Fuzzy Logic
• Many verbose coding practices are justified
because they simplify debugging
This is solving the wrong problem
• Boolean algebra is not rocket science
Although you may use it for that purpose
This above all: to thine own self be true,
And it must follow, as the night the day,
Thou canst not then be false to any man.
William Shakespeare
8. JAOO 2002 http://www.curbralan.com 15
Recommendation 9
Hand Redundant Code its Notice
• Code may be less than the sum of its parts
Redundant code is code that has no genuine effect
• Redundant code acts as a speed bump to
understanding — remove it
Unreachable code, synchronising non-thread
affected code, unused code, etc.
Omit needless words.
Strunk and White
JAOO 2002 http://www.curbralan.com 16
Recommendation 10
Let the Code Make the Decisions
• There is no need to spell everything out in
minute detail
Control flow becomes a patchwork of special cases
• Code can also appear to do more than the sum
of its parts
Polymorphism, lookup tables, grouped actions on
collections, double dispatch, etc.
His had been an intellectual decision founded on his conviction that if a little
knowledge was a dangerous thing, a lot was lethal.
Tom Sharpe
9. JAOO 2002 http://www.curbralan.com 17
Recommendation 11
Consider Duplicate Code to be a Mistake
• A lot of programs suffer from a persistent case
of the common code
Duplicate code is long grass in which bugs thrive
• Visible duplication is a problem best solved
by refactoring the commonality
Into a class, a method or a block surrounded by
clearer logic
You cannot step twice into the same river.
Heraclitus
JAOO 2002 http://www.curbralan.com 18
Recommendation 12
Prefer Code to Comments
• Code that is not code needs a clear role
Most comments do not qualify
1. If a program is incorrect, it matters little what the documentation says.
2. If documentation does not agree with the code, it is not worth much.
3. Consequently, code must largely document itself. If it cannot, rewrite the code
rather than increase the supplementary documentation. Good code needs fewer
comments than bad code does.
4. Comments should provide additional information that is not readily obtainable
from the code itself. They should never parrot the code.
5. Mnemonic variable names and labels, and a layout that emphasizes logical
structure, help make a program self-documenting.
Kernighan and Plauger
10. JAOO 2002 http://www.curbralan.com 19
Summary
• Baroquecratic practices and just-in-case code
have a br(e)aking effect
The measure of code is in software behaviour
• Developmental requirements are as important
as functional and operational requirements
Attention to developmental requirements makes
other requirements easier to address
Remember that there is no code faster than no code.
Taligent's Guide to Designing Programs