The Scribe's Oath • Robert "Uncle Bob" Martin • GOTO 2017
We are the modern day scribes. Nothing happens in our society without us. But so far, we are unorganized, undisciplined, and we have no unifying ethics or standards. Society is becoming aware of us.
Software developers have become both villains and heroes in our culture. More importantly, our society depends critically upon us. What oath, if any, should we swear? How would we enforce it?
The Programmer's Oath
In order to defend and preserve the honor of the profession of computer programmers, I Promise that, to the best of my ability and judgement:
- I will not produce harmful code.
- The code that I produce will always be my best work. I will not knowingly allow code that is defective either in behavior or structure to accumulate.
- I will produce, with each release, a quick, sure, and repeatable proof that every element of the code works as it should.
- I will make frequent, small, releases so that I do not impede the progress of others.
- I will fearlessly and relentlessly improve my creations at every opportunity. I will never degrade them.
- I will do all that I can to keep the productivity of myself, and others, as high as possible. I will do nothing that decreases that productivity.
- I will continuously ensure that others can cover for me, and that I can cover for them.
- I will produce estimates that are honest both in magnitude and precision. I will not make promises without certainty.
- I will never stop learning and improving my craft.
Software Development Envionment
- Vagrant vs. Docker: Which Is Better for Software Development? - When Vagrant arrived on the scene, they introduced several different virtualization tools in order to provide an easy and consistent cross-platform experience for developers. Docker then combined the Vagrant model with some Linux-specific technologies and took our ability to recreate environments to the next level.
- Vagrant vs Docker: Which is Better for Development? - Docker and Vagrant are based on the idea of “virtual” computing environments, where your application will run in a predictable and repeatable way. The goal is that if your buddy says “It works on my machine”, you know it will work on yours too, and the production server.
- Docker vs. Vagrant: What’s Right for Development - According to research, “Docker and Vagrant are two tools that could be used to provision infrastructure. Vagrant is a tool used to automate the configuration of virtual machines, while Docker encapsulates the project into containers.
- Git Version Control : Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
- Git Setup : Getting Started - First-Time Git Setup
- Git Processes : Git Core Processes
- Gitflow Workflow : A Git Workflow is a recipe or recommendation for how to use Git to accomplish work consistently and productively.
- GitHub-Flow Branching Strategy : GitHub flow is a lightweight, branch-based workflow.
- Microsoft GitHub : GitHub, Inc. is a provider of Internet hosting for software development and version control using Git.
- Trunk-Based Development Branching Strategy : Trunk-based development is a version control management practice where developers merge small, frequent updates to a core “trunk” or main branch.
- Atlassian Bitbucket : Bitbucket gives teams one place to plan projects, collaborate on code, test, and deploy.
- AWS CodeCommit : AWS CodeCommit is a fully-managed source control service that makes it easy for companies to host secure and highly scalable private Git repositories.
- Object-Oriented : In computer science, an object can be a variable, a data structure, a function, or a method, and as such, is a value in memory referenced by an identifier.
- Agile Software Development : Agile software development is a group of software development methods in which requirements and solutions evolve through collaboration between self-organizing, cross-functional teams.
- Iterative and Incremental Development : Iterative and Incremental development is any combination of both iterative design or iterative method and incremental build model for development.
- Refactoring : Refactoring consists of improving the internal structure of an existing program's source code, while preserving its external behavior.
- Agile Modeling : Agile Modeling (AM) is a practice-based methodology for effective modeling and documentation of software-based systems.
- Extreme Programming (XP) : Extreme Programming (XP) is an agile software development framework that aims to produce higher quality software, and higher quality of life for the development team.
- Lean Software Development : Lean software development is a translation of lean manufacturing principles and practices to the software development domain.
- Version Control : Version control, also known as source control, is the practice of tracking and managing changes to software code.
- Subversion (SVN) Version Control : Subversion is an open-source, centralized version control system.
- Test Driven Development (TDD) : Test-driven development (TDD) is a software development process that relies on the repetition of a very short development cycle
- xUnit Family of Unit Test Frameworks : xUnit Family of Unit Test Frameworks
- Peer Code Review : Code Review is an integral process of software development that helps identify bugs and defects before the testing phase.
- Testing and Quality Assurance : Software Quality Assurance (SQA) is a set of activities for ensuring quality in software engineering processes that ultimately results, or at least gives confidence, in the quality of software product
- Functional Testing : Functional Testing is a type of software testing whereby the system is tested against the functional requirements/specifications.
- User Acceptance Testing : Acceptance Testing is a level of software testing where a system is tested for acceptability.
- Robot Framework : Robot Framework is a generic open-source automation framework for acceptance testing, acceptance test-driven development (ATDD), and robotic process automation (RPA).
- Cypress : Cypress is the new standard in front-end testing that every developer and QA engineer needs.
- User Interface and User Experience : The user interface (UI), in the industrial design field of human–computer interaction, is the space where interactions between humans and machines occur.
- SQL Database : SQL (Structured Query Language) is a domain-specific language used in programming and designed for managing data held in a relational database management system (RDBMS)
- MariaDB : MariaDB Community Server is the open source relational database loved by developers all over the world.
- MySQL : MySQL Community Edition is the freely downloadable version of the world's most popular open source database.
- PostgreSQL : PostgreSQL is a powerful, open source object-relational database system that uses and extends the SQL language combined with many features that safely store and scale the most complicated data workloa
- SQLite : SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine.
- NoSQL Database : A NoSQL database provides a mechanism for storage and retrieval of data that is modeled in means other than the tabular relations used in relational databases.
- Integrated Development Environment (IDE) : An integrated development environment (IDE) is software for building applications that combines common developer tools into a single graphical user interface (GUI).
- PHPStorm - The Lightning-Smart PHP IDE : PHPStorm - The Lightning-Smart PHP IDE
- PyCharm - The Python IDE for Professional Developers : PyCharm - The Python IDE for Professional Developers
- IntelliJ IDEA - The Java IDE for Professional Developers : IntelliJ IDEA The Java IDE for Professional Developers
- DataGrip - The Cross-Platform IDE for Databases and SQL : DataGrip, database IDE that is tailored to suit the specific needs of professional SQL developers.
- Visual Studio : Visual Studio dev tools & services make app development easy for any developer, on any platform & language. Develop with our code editor or IDE anywhere for free.
- Visual Studio Code : Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.
- Atom Editor : A text editor is at the core of a developer's toolbox, but it doesn't usually work alone.
- Coding Standards and Guidelines : Coding Standards and Guidelines
Cracking the Coding Interview: 189 Programming Questions and Solutions
Cracking the Coding Interview, 6th Edition is here to help you through this process, teaching you what you need to know and enabling you to perform at your very best. I've coached and interviewed hundreds of software engineers. The result is this book.
The Mythical Man-Month
Few books on software project management have been as influential and timeless as The Mythical Man-Month. With a blend of software engineering facts and thought-provoking opinions, Fred Brooks offers insight for anyone managing complex projects. These essays draw from his experience as project manager for the IBM System/360 computer family and then for OS/360, its massive software system. Now, 20 years after the initial publication of his book, Brooks has revisited his original ideas and added new thoughts and advice, both for readers already familiar with his work and for readers discovering it for the first time.
Code Simplicity: The Fundamentals of Software
The book exists to help all programmers understand the process of writing software, on a very fundamental level that can be applied to any programming language or project, from here into eternity. Code Simplicity is also written in such a way that even non-technical managers of software teams can gain an understanding of what the “right way” and the “wrong way” is (and why they are right and wrong) when it comes to software design. The focus of the book is primarily on “software design,” the process of creating a plan for a software project and making technical decisions about the pattern and structure of a system.
Understanding Software: Max Kanat-Alexander on simplicity, coding, and how to suck less as a programmer
In Understanding Software, Max Kanat-Alexander, Technical Lead for Code Health at Google, shows you how to bring simplicity back to computer programming. Max explains to you why programmers suck, and how to suck less as a programmer. There's just too much complex stuff in the world. Complex stuff can't be used, and it breaks too easily. Complexity is stupid. Simplicity is smart.
Software Engineering at Google: Lessons Learned from Programming Over Time
The approach to and understanding of software engineering at Google is unlike any other company. With this book, you'll get a candid and insightful look at how software is constructed and maintained by some of the world's leading practitioners.
Building Maintainable Software
Have you ever felt frustrated working with someone else's code? Difficult-to-maintain source code is a big problem in software development today, leading to costly delays and defects. Be part of the solution. With this practical book, you'll learn 10 easy-to-follow guidelines for delivering Java software that's easy to maintain and adapt. These guidelines have been derived from analyzing hundreds of real-world systems.
Building Software Teams: Ten Best Practices for Effective Software Development
Why does poor software quality continue to plague enterprises of all sizes in all industries? Part of the problem lies with the process, rather than individual developers. This practical guide provides ten best practices to help team leaders create an effective working environment through key adjustments to their process.