As a company that uses a lot of automation, optimization, and machine learning in their day-to-day business, Google is set on developing AI in a socially responsible way.
Fortunately for us, Google decided to share their principles and best practices for us to read.
Google’s Objectives for AI applications
The details behind the seven objectives below you can find
Be socially beneficial. Avoid creating or reinforcing unfair bias. Be built and tested for safety. Be accountable to people. Incorporate privacy design principles. Uphold high standards of scientific excellence. Be made available for uses that accord with these principles.
Moreover, there are several AI technologies that Google will not build:
Google’s best practices for Responsible AI
For the details behind these six best practices, read more
Use a Human-centered approach (see also here) Identify multiple metrics to assess training and monitoring When possible, directly examine your raw data Understand the limitations of your dataset and model Test, Test, Test, Continue to monitor and update the system after deployment
Robert Martin’s book
i.e. “Uncle Bob”‘s Clean Code principles) are applicable to any programming language. At least, I recognize many of the best practices I’d teach data science students in R or Python.
Knowing these won’t immediately make you a better software developer, and working with them for many years doesn’t mean you won’t make mistakes. Every piece of code starts as a first draft, like wet clay getting shaped into its final form. Finally, we chisel away the imperfections when we review it with our peers. Don’t beat yourself up for first drafts that need improvement. Beat up the code instead!
Here are some of the principles listed, with
But there are
many, many more! Have a look at . the original repo
I came across this 1999-2003 e-book by Eric Raymond, on
. It contains several relevant overviews of the basic principles behind the Unix philosophy, which are probably useful for anybody working in hardware, software, or other algoritmic design. the Art of Unix Programming
First up, is a great list of
17 design rules, explained in more detail in the original article:
Rule of Modularity: Write simple parts connected by clean interfaces. Rule of Clarity: Clarity is better than cleverness. Rule of Composition: Design programs to be connected to other programs. Rule of Separation: Separate policy from mechanism; separate interfaces from engines. Rule of Simplicity: Design for simplicity; add complexity only where you must. Rule of Parsimony: Write a big program only when it is clear by demonstration that nothing else will do. Rule of Transparency: Design for visibility to make inspection and debugging easier. Rule of Robustness: Robustness is the child of transparency and simplicity. Rule of Representation: Fold knowledge into data so program logic can be stupid and robust. Rule of Least Surprise: In interface design, always do the least surprising thing. Rule of Silence: When a program has nothing surprising to say, it should say nothing. Rule of Repair: When you must fail, fail noisily and as soon as possible. Rule of Economy: Programmer time is expensive; conserve it in preference to machine time. Rule of Generation: Avoid hand-hacking; write programs to write programs when you can. Rule of Optimization: Prototype before polishing. Get it working before you optimize it. Rule of Diversity: Distrust all claims for “one true way”. Rule of Extensibility: Design for the future, because it will be here sooner than you think.
Moreover, the book contains a shortlist of
some of the philosophical principles behind Unix (and software design in general):
Everything that can be a source- and destination-independent filter should be one. Data streams should if at all possible be textual (so they can be viewed and filtered with standard tools). Database layouts and application protocols should if at all possible be textual (human-readable and human-editable). Complex front ends (user interfaces) should be cleanly separated from complex back ends. Whenever possible, prototype in an interpreted language before coding C. Mixing languages is better than writing everything in one, if and only if using only that one is likely to overcomplicate the program. Be generous in what you accept, rigorous in what you emit. When filtering, never throw away information you don’t need to. Small is beautiful. Write programs that do as little as is consistent with getting the job done.
If you want to read the real book, or if you just want to support the original author, you can buy the book
Let me know which of these and other rules and principles you apply in your daily programming/design job.