From e212e6fed5c8d94b3ec761939e2212dcb8786311 Mon Sep 17 00:00:00 2001 From: russoj88 Date: Fri, 10 Apr 2020 17:19:18 -0700 Subject: [PATCH 01/13] Fix bind address. --- Dockerfile.dev | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.dev b/Dockerfile.dev index 259b716..64308a7 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -8,4 +8,4 @@ ENV GO111MODULE=on RUN go get -u github.com/gohugoio/hugo@v0.69.0 # Run the development server -ENTRYPOINT cd /src && hugo server +ENTRYPOINT cd /src && hugo server --bind 0.0.0.0 -- 2.45.2 From 2b391b1c7ccb059cf2ef58b20e001e3aa91871f9 Mon Sep 17 00:00:00 2001 From: russoj88 Date: Fri, 10 Apr 2020 21:38:38 -0700 Subject: [PATCH 02/13] Updates from 04-10. --- content/blog/complexity.md | 46 +++++++++++++++++++++++++++++++++++++ static/img/complexity.jpg | Bin 0 -> 86741 bytes 2 files changed, 46 insertions(+) create mode 100644 content/blog/complexity.md create mode 100644 static/img/complexity.jpg diff --git a/content/blog/complexity.md b/content/blog/complexity.md new file mode 100644 index 0000000..4dc508b --- /dev/null +++ b/content/blog/complexity.md @@ -0,0 +1,46 @@ +--- +img: /img/complexity.jpg +title: Complexity +author: Jeff Russo +pdate: March 28,2020 +desc: What is complexity as it relates to software? +--- +The most [relevant definition of complexity](https://www.lexico.com/en/definition/complex) for this blog post is: (adj) "Not easy to analyze or understand; complicated or intricate." Intuition of complexity is important if you are designing, writing, or reading software. If you are purchasing software, it is important to prioritize simpler options; it will be cheaper in the long run. In this blog post, I will discuss identifying complexity, why it's bad, why simple is good, and how software engineers manage complexity. + +## Identifying Complexity +Before being able to manage complexity, it must be identified. In addition to the definition it is helpful to know indicators and examples. Seasoned engineers sometimes call these smells; complexity is not black and white, but more of an intuition. Some things that are simple now will be come complex in the future. + +#### Indicators + +* Incomprehensible: Something complex is difficult to comprehend or articulate. It may have too many parts, or the interaction between the parts is complicated. +* Fragile to change: Complex things are not easily modified. An internal combustion engine is complex. If one was to modify the bore of the cylinders, special machining and new parts are required. +* Multi-purpose: A tool that can, "do it all," usually does nothing well due to its complexity. + +#### Examples + +* Run on sentences: Sentences that have too many clauses become complex because they are trying to express too many independent, but possibly related, although sometimes unrelated thoughts, and they take more mental energy to comprehend, causing the now frustrated reader to reread it until they can ascertain the author's meaning. +* Chess: At a glance, chess is straightforward. There are only six types of pieces, and the board is 8x8. The complexity comes from the [permutation of games](https://www.youtube.com/watch?v=Km024eldY1A). It takes [a dedicated decade](https://www.quora.com/How-long-does-it-take-to-become-a-chess-grandmaster) to become a grand master. +* Humans: No two humans are the same. DNA on its own is complex; factoring in the expression of DNA is beyond the understanding of any single person. + +## Complex Software is Undesirable +All software is complex. Small programs, written in a high-level language, may compile to thousands of lines of low-level language. Modern software may be tens of millions of lines of high level language. By size alone, these systems are complicated. Factoring in the global communication they have to do, the complexity goes up exponentially. + +While some complexity is unavoidable, it is best minimized. Left unchecked, it will become unmanageable and will have to be scrapped to begin again. Complex software is difficult to reason about and therefore difficult to rule out problems. This is code that an adversary would enjoy combing through, trying to find an exploit. + +## Software engineers program, but programmers do not engineer +A programmer understands software languages and can program a computer to accomplish tasks. A software engineer will do the same, with the addition of minimizing the program's complexity. In fact the act of minimizing the complexity may take up almost all the time of a software engineer. Many other tasks such as designing, testing, documenting, refactoring, and code reviews are much more time intensive -- and important -- than the actual programming. +Software engineers must create programs that are simple enough to be understood by other engineers. This enables others to work on the project and create something greater than the sum of the engineers' abilities. + +## Simple is difficult, but effective +[An antonym of complexity is simplicity.](https://www.thesaurus.com/browse/complexity) Although it is easy to express what a [simple system](https://simplesystems.tech/blog/post/simplicity) is, it is not easy to create one. Simplicity is so effective to software, there are many books, blogs, and principles written on the topic -- even if not explicitly. A few examples of principles: + +* Encapsulation: This is a very powerful idea, especially when some complexity cannot be changed. It can still be encapsulated. +* UNIX philosophy: "Make each program do one thing well." This can save software from becoming an indominable mess. Constantly adding features to the same program will eventually make it collapse in on itself. +* Composition: Software should be composed of interchangable modules. The boundaries between modules and modules responsibilities must be well defined. + +None of these principles are easy to carry out. There is both a science and art aspect of designing and building something in a simple manner. Once a system becomes simple, the benefits are exponential. One important benefit for teams to think about is number of engineers who can work on a project. If a system becomes an interconnected mess, usually only 1 or 2 people can work on it simultaneously. If a system is well designed, especially using modularity, the number of engineers who can work on it simultaneously is practically unlimited, because each module is independent. + +##### ? Monero provides a simple interface, but it was not easy to create. There is a lot going on behind the scenes. +##### Reference Rob Pike's comments on GC (The simplest interface is none at all) https://www.youtube.com/watch?v=rFejpH_tAHM +##### MVCC ? Maybe a complex topic for a post on reducing complexity +##### ? design patterns diff --git a/static/img/complexity.jpg b/static/img/complexity.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e3272b6daa41bffffcd2fe674a2b73ccdb89536 GIT binary patch literal 86741 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

$2N|=MF%KBDeeO2_)+z-(A@^!3g@x9 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 Date: Sun, 12 Apr 2020 18:32:59 -0700 Subject: [PATCH 03/13] Updates from 04-11 1832. --- content/blog/complexity.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/content/blog/complexity.md b/content/blog/complexity.md index 4dc508b..923ac33 100644 --- a/content/blog/complexity.md +++ b/content/blog/complexity.md @@ -19,11 +19,13 @@ Before being able to manage complexity, it must be identified. In addition to t #### Examples * Run on sentences: Sentences that have too many clauses become complex because they are trying to express too many independent, but possibly related, although sometimes unrelated thoughts, and they take more mental energy to comprehend, causing the now frustrated reader to reread it until they can ascertain the author's meaning. -* Chess: At a glance, chess is straightforward. There are only six types of pieces, and the board is 8x8. The complexity comes from the [permutation of games](https://www.youtube.com/watch?v=Km024eldY1A). It takes [a dedicated decade](https://www.quora.com/How-long-does-it-take-to-become-a-chess-grandmaster) to become a grand master. +* Chess: At a glance, chess is straightforward. There are only six types of pieces, and the board is 8x8. The complexity comes from the [permutation of games](https://www.youtube.com/watch?v=Km024eldY1A). It generally takes [a dedicated decade](https://www.quora.com/How-long-does-it-take-to-become-a-chess-grandmaster) to become a grand master. * Humans: No two humans are the same. DNA on its own is complex; factoring in the expression of DNA is beyond the understanding of any single person. ## Complex Software is Undesirable -All software is complex. Small programs, written in a high-level language, may compile to thousands of lines of low-level language. Modern software may be tens of millions of lines of high level language. By size alone, these systems are complicated. Factoring in the global communication they have to do, the complexity goes up exponentially. +All software is complex; it is one of the most complex man-made things. Physical creations such as space ships, submarines, and skyscrapers may be complex, but they are limited by the laws of physics. Software has no such limit. Using [scc](https://github.com/boyter/scc), a tool to estimate the size of codebases, it is shown to take about 16 years with 500 people to recreate [FreeBSD](https://www.freebsd.org/). + +Considering the global communication they have to do, the complexity goes up exponentially. While some complexity is unavoidable, it is best minimized. Left unchecked, it will become unmanageable and will have to be scrapped to begin again. Complex software is difficult to reason about and therefore difficult to rule out problems. This is code that an adversary would enjoy combing through, trying to find an exploit. @@ -34,7 +36,7 @@ Software engineers must create programs that are simple enough to be understood ## Simple is difficult, but effective [An antonym of complexity is simplicity.](https://www.thesaurus.com/browse/complexity) Although it is easy to express what a [simple system](https://simplesystems.tech/blog/post/simplicity) is, it is not easy to create one. Simplicity is so effective to software, there are many books, blogs, and principles written on the topic -- even if not explicitly. A few examples of principles: -* Encapsulation: This is a very powerful idea, especially when some complexity cannot be changed. It can still be encapsulated. +* Encapsulation: This is a very powerful idea, especially when some complexity cannot be mitigated. It can still be encapsulated. * UNIX philosophy: "Make each program do one thing well." This can save software from becoming an indominable mess. Constantly adding features to the same program will eventually make it collapse in on itself. * Composition: Software should be composed of interchangable modules. The boundaries between modules and modules responsibilities must be well defined. -- 2.45.2 From f83b6725e9c36b87177ad6f100e3a9e1665fbf8d Mon Sep 17 00:00:00 2001 From: steverusso Date: Sun, 12 Apr 2020 21:39:13 -0400 Subject: [PATCH 04/13] Minor fixes. --- content/blog/complexity.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/complexity.md b/content/blog/complexity.md index 923ac33..085d1a6 100644 --- a/content/blog/complexity.md +++ b/content/blog/complexity.md @@ -8,7 +8,7 @@ desc: What is complexity as it relates to software? The most [relevant definition of complexity](https://www.lexico.com/en/definition/complex) for this blog post is: (adj) "Not easy to analyze or understand; complicated or intricate." Intuition of complexity is important if you are designing, writing, or reading software. If you are purchasing software, it is important to prioritize simpler options; it will be cheaper in the long run. In this blog post, I will discuss identifying complexity, why it's bad, why simple is good, and how software engineers manage complexity. ## Identifying Complexity -Before being able to manage complexity, it must be identified. In addition to the definition it is helpful to know indicators and examples. Seasoned engineers sometimes call these smells; complexity is not black and white, but more of an intuition. Some things that are simple now will be come complex in the future. +Before being able to manage complexity, it must be identified. In addition to the definition, it is helpful to know indicators and examples. Seasoned engineers sometimes call these smells; complexity is not black and white, but more of an intuition. Some things that are simple now will become complex in the future. #### Indicators -- 2.45.2 From 4c235a8ee0129d64530b3390dcedf1db060a981d Mon Sep 17 00:00:00 2001 From: russoj88 Date: Sun, 12 Apr 2020 19:49:39 -0700 Subject: [PATCH 05/13] Updates from 04-12. --- content/blog/complexity.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/content/blog/complexity.md b/content/blog/complexity.md index 085d1a6..7e1362a 100644 --- a/content/blog/complexity.md +++ b/content/blog/complexity.md @@ -23,24 +23,23 @@ Before being able to manage complexity, it must be identified. In addition to t * Humans: No two humans are the same. DNA on its own is complex; factoring in the expression of DNA is beyond the understanding of any single person. ## Complex Software is Undesirable -All software is complex; it is one of the most complex man-made things. Physical creations such as space ships, submarines, and skyscrapers may be complex, but they are limited by the laws of physics. Software has no such limit. Using [scc](https://github.com/boyter/scc), a tool to estimate the size of codebases, it is shown to take about 16 years with 500 people to recreate [FreeBSD](https://www.freebsd.org/). - -Considering the global communication they have to do, the complexity goes up exponentially. +All software is complex; it is one of the most complex man-made things. Physical creations such as space ships, submarines, and skyscrapers may be complex, but they are limited by the laws of physics. Software has no such limit. [FreeBSD](https://www.freebsd.org/) is an operating system that was first released in 1993. Using [scc](https://github.com/boyter/scc), a tool to estimate the size of codebases, it is shown to take about 16 years with 500 people to recreate FreeBSD 12.1. -While some complexity is unavoidable, it is best minimized. Left unchecked, it will become unmanageable and will have to be scrapped to begin again. Complex software is difficult to reason about and therefore difficult to rule out problems. This is code that an adversary would enjoy combing through, trying to find an exploit. +While some complexity is unavoidable, it is best minimized. Complex software is difficult to reason about and therefore difficult to rule out bugs. This is code that an adversary would enjoy combing through, trying to find an exploit. +{ reasons it is undesirable } -## Software engineers program, but programmers do not engineer +## Software Engineers Program, but Programmers do not Engineer A programmer understands software languages and can program a computer to accomplish tasks. A software engineer will do the same, with the addition of minimizing the program's complexity. In fact the act of minimizing the complexity may take up almost all the time of a software engineer. Many other tasks such as designing, testing, documenting, refactoring, and code reviews are much more time intensive -- and important -- than the actual programming. Software engineers must create programs that are simple enough to be understood by other engineers. This enables others to work on the project and create something greater than the sum of the engineers' abilities. -## Simple is difficult, but effective -[An antonym of complexity is simplicity.](https://www.thesaurus.com/browse/complexity) Although it is easy to express what a [simple system](https://simplesystems.tech/blog/post/simplicity) is, it is not easy to create one. Simplicity is so effective to software, there are many books, blogs, and principles written on the topic -- even if not explicitly. A few examples of principles: +## Simple is Difficult, but Effective +[An antonym of complexity is simplicity.](https://www.thesaurus.com/browse/complexity) Although it is easy to express what a [simple system](https://simplesystems.tech/blog/post/simplicity) is, it is not easy to create one. Simplicity is so effective in software that many books and blogs are written on the topic. A few examples of simplifying principles: -* Encapsulation: This is a very powerful idea, especially when some complexity cannot be mitigated. It can still be encapsulated. -* UNIX philosophy: "Make each program do one thing well." This can save software from becoming an indominable mess. Constantly adding features to the same program will eventually make it collapse in on itself. -* Composition: Software should be composed of interchangable modules. The boundaries between modules and modules responsibilities must be well defined. +* Encapsulation: This is a very powerful idea, especially when some complexity cannot be mitigated -- it can still be encapsulated. +* UNIX philosophy: "Make each program do one thing well." This can save software from becoming an indomitable mess. Constantly adding features to the same system will eventually make it collapse in on itself. +* Composition: Software should be composed of interchangeable modules. The boundaries between modules must be well-defined. -None of these principles are easy to carry out. There is both a science and art aspect of designing and building something in a simple manner. Once a system becomes simple, the benefits are exponential. One important benefit for teams to think about is number of engineers who can work on a project. If a system becomes an interconnected mess, usually only 1 or 2 people can work on it simultaneously. If a system is well designed, especially using modularity, the number of engineers who can work on it simultaneously is practically unlimited, because each module is independent. +None of these principles are easy to incorporate into an engineering process. There is both a science and art aspect of designing and building something in a simple manner. Once a system becomes simple, the benefits are exponential. One important benefit for teams to think about is number of engineers who can work on a project. If a system becomes an interconnected mess, usually only 1 or 2 people can work on it simultaneously. If a system is well designed, especially using modularity, the number of engineers who can work on it simultaneously is practically unlimited, because each module is independent. ##### ? Monero provides a simple interface, but it was not easy to create. There is a lot going on behind the scenes. ##### Reference Rob Pike's comments on GC (The simplest interface is none at all) https://www.youtube.com/watch?v=rFejpH_tAHM -- 2.45.2 From eae3547012f3118b08278d3f8c3b7b082a9de976 Mon Sep 17 00:00:00 2001 From: russoj88 Date: Mon, 13 Apr 2020 20:22:24 -0700 Subject: [PATCH 06/13] Updates from 04-13. --- content/blog/complexity.md | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/content/blog/complexity.md b/content/blog/complexity.md index 7e1362a..bd7380c 100644 --- a/content/blog/complexity.md +++ b/content/blog/complexity.md @@ -8,40 +8,52 @@ desc: What is complexity as it relates to software? The most [relevant definition of complexity](https://www.lexico.com/en/definition/complex) for this blog post is: (adj) "Not easy to analyze or understand; complicated or intricate." Intuition of complexity is important if you are designing, writing, or reading software. If you are purchasing software, it is important to prioritize simpler options; it will be cheaper in the long run. In this blog post, I will discuss identifying complexity, why it's bad, why simple is good, and how software engineers manage complexity. ## Identifying Complexity -Before being able to manage complexity, it must be identified. In addition to the definition, it is helpful to know indicators and examples. Seasoned engineers sometimes call these smells; complexity is not black and white, but more of an intuition. Some things that are simple now will become complex in the future. +Before being able to manage complexity, it must be identified. In addition to the definition, it is helpful to know indicators and examples. Seasoned engineers sometimes call these smells; complexity is not black and white, but more of an intuition. Some things that appear simple now may become complex in the future. #### Indicators * Incomprehensible: Something complex is difficult to comprehend or articulate. It may have too many parts, or the interaction between the parts is complicated. + * Fragile to change: Complex things are not easily modified. An internal combustion engine is complex. If one was to modify the bore of the cylinders, special machining and new parts are required. + * Multi-purpose: A tool that can, "do it all," usually does nothing well due to its complexity. #### Examples -* Run on sentences: Sentences that have too many clauses become complex because they are trying to express too many independent, but possibly related, although sometimes unrelated thoughts, and they take more mental energy to comprehend, causing the now frustrated reader to reread it until they can ascertain the author's meaning. +* Run on sentences: Sentences that have too many clauses become complex because they are trying to express several independent, but possibly related, although sometimes unrelated thoughts, and they take more mental energy to comprehend, causing the now frustrated reader to reread it until they can ascertain the author's meaning. + * Chess: At a glance, chess is straightforward. There are only six types of pieces, and the board is 8x8. The complexity comes from the [permutation of games](https://www.youtube.com/watch?v=Km024eldY1A). It generally takes [a dedicated decade](https://www.quora.com/How-long-does-it-take-to-become-a-chess-grandmaster) to become a grand master. -* Humans: No two humans are the same. DNA on its own is complex; factoring in the expression of DNA is beyond the understanding of any single person. + +* Humans: No two humans are the same. DNA on its own is complex; factoring in the expression of that DNA is beyond the understanding of any single person. ## Complex Software is Undesirable -All software is complex; it is one of the most complex man-made things. Physical creations such as space ships, submarines, and skyscrapers may be complex, but they are limited by the laws of physics. Software has no such limit. [FreeBSD](https://www.freebsd.org/) is an operating system that was first released in 1993. Using [scc](https://github.com/boyter/scc), a tool to estimate the size of codebases, it is shown to take about 16 years with 500 people to recreate FreeBSD 12.1. +All software is complex; it is one of the most complex man-made things. Physical creations such as space ships, submarines, and skyscrapers may be complex, but they are limited by the laws of physics. Software has no such limit. [FreeBSD](https://www.freebsd.org/) is an operating system that was first released in 1993. Using [scc](https://github.com/boyter/scc), a tool to evaluate the size of codebases, it estimates about 16 years with 500 people to recreate FreeBSD 12.1. -While some complexity is unavoidable, it is best minimized. Complex software is difficult to reason about and therefore difficult to rule out bugs. This is code that an adversary would enjoy combing through, trying to find an exploit. -{ reasons it is undesirable } +While some complexity is unavoidable, it is best minimized. Here are a few reasons to minimize the complexity of software: + +* Expensive changes: As software gets more complex, the cost to change increases exponentially. A module bound to several business concerns is more expensive than a module that does one thing. Engineers, business representatives, and managers need to work together instead of just handing a simple task to an engineer. + +* Time: While money can be acquired, time keeps ticking. If a project becomes expensive, some larger companies can handle it. If the software is complex enough, the bottleneck becomes time and at that point it is too late. By analogy, if the task is to carry a gallon of water 100 meters, it could be put in a car(expensive, but fast) and cover the distance pretty quickly. If the water must be converted to steam and then back to water, it will take much longer, and the car will not help with delivering it. + +* Engineer retention: Engineers who work on simple software run into less frustrating walls. This is more fulfilling work, and will keep engineers on the team. Engineers are less likely to take ownership of problems and code if it is part of a complex mess. ## Software Engineers Program, but Programmers do not Engineer -A programmer understands software languages and can program a computer to accomplish tasks. A software engineer will do the same, with the addition of minimizing the program's complexity. In fact the act of minimizing the complexity may take up almost all the time of a software engineer. Many other tasks such as designing, testing, documenting, refactoring, and code reviews are much more time intensive -- and important -- than the actual programming. +A programmer understands software languages and can program a computer to accomplish tasks. A software engineer will do the same, with the addition of minimizing the program's complexity. In fact the act of minimizing the complexity takes up most of the engineer's time. Many other tasks such as designing, testing, documenting, refactoring, and code reviews are much more time intensive -- and important -- than the actual programming. + Software engineers must create programs that are simple enough to be understood by other engineers. This enables others to work on the project and create something greater than the sum of the engineers' abilities. ## Simple is Difficult, but Effective -[An antonym of complexity is simplicity.](https://www.thesaurus.com/browse/complexity) Although it is easy to express what a [simple system](https://simplesystems.tech/blog/post/simplicity) is, it is not easy to create one. Simplicity is so effective in software that many books and blogs are written on the topic. A few examples of simplifying principles: +[An antonym of complexity is simplicity.](https://www.thesaurus.com/browse/complexity) Although it is easy to explain a [simple system](https://simplesystems.tech/blog/post/simplicity), it is not easy to create one. This is the classic investment mindset applied to time. It is better to think twice and code once. A few examples of simplifying principles: * Encapsulation: This is a very powerful idea, especially when some complexity cannot be mitigated -- it can still be encapsulated. + * UNIX philosophy: "Make each program do one thing well." This can save software from becoming an indomitable mess. Constantly adding features to the same system will eventually make it collapse in on itself. + * Composition: Software should be composed of interchangeable modules. The boundaries between modules must be well-defined. None of these principles are easy to incorporate into an engineering process. There is both a science and art aspect of designing and building something in a simple manner. Once a system becomes simple, the benefits are exponential. One important benefit for teams to think about is number of engineers who can work on a project. If a system becomes an interconnected mess, usually only 1 or 2 people can work on it simultaneously. If a system is well designed, especially using modularity, the number of engineers who can work on it simultaneously is practically unlimited, because each module is independent. ##### ? Monero provides a simple interface, but it was not easy to create. There is a lot going on behind the scenes. ##### Reference Rob Pike's comments on GC (The simplest interface is none at all) https://www.youtube.com/watch?v=rFejpH_tAHM -##### MVCC ? Maybe a complex topic for a post on reducing complexity ##### ? design patterns +##### Simplicity is so effective in software that many books and blogs are written on the topic. -- 2.45.2 From f45c4db91fd6606b62c43899085a4e741be8217c Mon Sep 17 00:00:00 2001 From: russoj88 Date: Tue, 14 Apr 2020 19:50:31 -0700 Subject: [PATCH 07/13] Updates from 04-14. --- content/blog/complexity.md | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/content/blog/complexity.md b/content/blog/complexity.md index bd7380c..886bfd3 100644 --- a/content/blog/complexity.md +++ b/content/blog/complexity.md @@ -24,36 +24,33 @@ Before being able to manage complexity, it must be identified. In addition to t * Chess: At a glance, chess is straightforward. There are only six types of pieces, and the board is 8x8. The complexity comes from the [permutation of games](https://www.youtube.com/watch?v=Km024eldY1A). It generally takes [a dedicated decade](https://www.quora.com/How-long-does-it-take-to-become-a-chess-grandmaster) to become a grand master. -* Humans: No two humans are the same. DNA on its own is complex; factoring in the expression of that DNA is beyond the understanding of any single person. +* Humans: No two are the same. DNA on its own is complex; factoring in the expression of that DNA is beyond the understanding of any single person. ## Complex Software is Undesirable -All software is complex; it is one of the most complex man-made things. Physical creations such as space ships, submarines, and skyscrapers may be complex, but they are limited by the laws of physics. Software has no such limit. [FreeBSD](https://www.freebsd.org/) is an operating system that was first released in 1993. Using [scc](https://github.com/boyter/scc), a tool to evaluate the size of codebases, it estimates about 16 years with 500 people to recreate FreeBSD 12.1. +All software is complex; it is one of the most complex man-made things. Physical creations such as space ships, submarines, and skyscrapers may be complex, but they are limited by the laws of physics. Software has no such limit. [FreeBSD](https://www.freebsd.org/) is an operating system that was first released in 1993. Using [scc](https://github.com/boyter/scc), a tool to evaluate the size of codebases, it estimates it would take about 16 years with 500 people to recreate FreeBSD 12.1. While some complexity is unavoidable, it is best minimized. Here are a few reasons to minimize the complexity of software: * Expensive changes: As software gets more complex, the cost to change increases exponentially. A module bound to several business concerns is more expensive than a module that does one thing. Engineers, business representatives, and managers need to work together instead of just handing a simple task to an engineer. -* Time: While money can be acquired, time keeps ticking. If a project becomes expensive, some larger companies can handle it. If the software is complex enough, the bottleneck becomes time and at that point it is too late. By analogy, if the task is to carry a gallon of water 100 meters, it could be put in a car(expensive, but fast) and cover the distance pretty quickly. If the water must be converted to steam and then back to water, it will take much longer, and the car will not help with delivering it. +* Time: While money can be acquired, time keeps ticking. If a project becomes expensive, some larger companies can handle it. If the software is complex enough, the bottleneck becomes time and at that point it is too late. By analogy, if the task is to carry a gallon of water 100 meters, it could be put in a car(expensive, but fast) and cover the distance quickly. If the water must be converted to steam and then back to water, it will take much longer, and the car will not help with delivering it on time. -* Engineer retention: Engineers who work on simple software run into less frustrating walls. This is more fulfilling work, and will keep engineers on the team. Engineers are less likely to take ownership of problems and code if it is part of a complex mess. +* Engineer retention: Engineers who work on simple software run into less frustrating walls. This is more fulfilling work, and will keep engineers on the team. Engineers are less likely to take ownership of problems and code if it is part of a complex mess. -## Software Engineers Program, but Programmers do not Engineer +## Simple is Difficult, but Effective +An antonym of complexity is [simplicity](https://www.thesaurus.com/browse/complexity). Although it is easy to explain a [simple system](https://simplesystems.tech/blog/post/simplicity), it is not easy to create one. This is the classic investment mindset applied to time. It is better to think twice and code once. Here are a few examples of simplifying principles: + +* Encapsulation: This is a very powerful idea, especially when some complexity cannot be mitigated -- it can still be encapsulated. The inner workings of an automatic transmission are quite complex, but it is encapsulated so well that the driver simply selects "D". As [Rob Pike](https://twitter.com/rob_pike) points out in this [video](https://www.youtube.com/watch?v=rFejpH_tAHM&t=789), the simplest interface is no interface at all; garbage collection is completely encapsulated. + +* UNIX philosophy: "Make each program do one thing well." This can save software from becoming an indomitable mess. Constantly adding features to the same system will eventually make it collapse in on itself. + +* Composition: Software should be composed of interchangeable modules. The boundaries between modules must be well-defined. Chess software should have 2 players, but those players do not need to be humans on a computer. By keeping the player module separate, it can be swapped for an AI player module. This enables better testing, and more interesting games. + +These principles are not easy to incorporate into an engineering process. There is both a science and art aspect of designing and building something in a simple manner. Once a system becomes simple, the benefits are exponential. One important benefit for teams to think about is number of engineers who can work on a project. If a system becomes an interconnected mess, usually only 1 or 2 people can work on it simultaneously. If a system is well designed, especially using modularity, the number of engineers who can work on it simultaneously is practically unlimited, because each module is independent. + +## Software Engineers Manage Complexity A programmer understands software languages and can program a computer to accomplish tasks. A software engineer will do the same, with the addition of minimizing the program's complexity. In fact the act of minimizing the complexity takes up most of the engineer's time. Many other tasks such as designing, testing, documenting, refactoring, and code reviews are much more time intensive -- and important -- than the actual programming. Software engineers must create programs that are simple enough to be understood by other engineers. This enables others to work on the project and create something greater than the sum of the engineers' abilities. -## Simple is Difficult, but Effective -[An antonym of complexity is simplicity.](https://www.thesaurus.com/browse/complexity) Although it is easy to explain a [simple system](https://simplesystems.tech/blog/post/simplicity), it is not easy to create one. This is the classic investment mindset applied to time. It is better to think twice and code once. A few examples of simplifying principles: - -* Encapsulation: This is a very powerful idea, especially when some complexity cannot be mitigated -- it can still be encapsulated. - -* UNIX philosophy: "Make each program do one thing well." This can save software from becoming an indomitable mess. Constantly adding features to the same system will eventually make it collapse in on itself. - -* Composition: Software should be composed of interchangeable modules. The boundaries between modules must be well-defined. - -None of these principles are easy to incorporate into an engineering process. There is both a science and art aspect of designing and building something in a simple manner. Once a system becomes simple, the benefits are exponential. One important benefit for teams to think about is number of engineers who can work on a project. If a system becomes an interconnected mess, usually only 1 or 2 people can work on it simultaneously. If a system is well designed, especially using modularity, the number of engineers who can work on it simultaneously is practically unlimited, because each module is independent. - -##### ? Monero provides a simple interface, but it was not easy to create. There is a lot going on behind the scenes. -##### Reference Rob Pike's comments on GC (The simplest interface is none at all) https://www.youtube.com/watch?v=rFejpH_tAHM ##### ? design patterns -##### Simplicity is so effective in software that many books and blogs are written on the topic. -- 2.45.2 From c4ed9d560c65c7f3c01e3eb273ac00f6e3e0efd1 Mon Sep 17 00:00:00 2001 From: russoj88 Date: Tue, 14 Apr 2020 19:59:55 -0700 Subject: [PATCH 08/13] Updates from 04-14. --- content/blog/complexity.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/complexity.md b/content/blog/complexity.md index 886bfd3..1fe52a3 100644 --- a/content/blog/complexity.md +++ b/content/blog/complexity.md @@ -46,7 +46,7 @@ An antonym of complexity is [simplicity](https://www.thesaurus.com/browse/comple * Composition: Software should be composed of interchangeable modules. The boundaries between modules must be well-defined. Chess software should have 2 players, but those players do not need to be humans on a computer. By keeping the player module separate, it can be swapped for an AI player module. This enables better testing, and more interesting games. -These principles are not easy to incorporate into an engineering process. There is both a science and art aspect of designing and building something in a simple manner. Once a system becomes simple, the benefits are exponential. One important benefit for teams to think about is number of engineers who can work on a project. If a system becomes an interconnected mess, usually only 1 or 2 people can work on it simultaneously. If a system is well designed, especially using modularity, the number of engineers who can work on it simultaneously is practically unlimited, because each module is independent. +These principles are not easy to incorporate into an engineering process. There is both a science and an art aspect to designing and building something simply. Once a system becomes simple, the benefits become evident quickly. One important benefit for teams to think about is the number of engineers who can work on a project. If a system becomes a convoluted mess, usually only 1 or 2 people can work on it simultaneously. A system designed well, especially using modularity, will increase the number of engineers who can work on it simultaneously. ## Software Engineers Manage Complexity A programmer understands software languages and can program a computer to accomplish tasks. A software engineer will do the same, with the addition of minimizing the program's complexity. In fact the act of minimizing the complexity takes up most of the engineer's time. Many other tasks such as designing, testing, documenting, refactoring, and code reviews are much more time intensive -- and important -- than the actual programming. -- 2.45.2 From e43dd030dbc8c4b05e71f8c780b4c312deea784b Mon Sep 17 00:00:00 2001 From: russoj88 Date: Fri, 17 Apr 2020 08:29:06 -0700 Subject: [PATCH 09/13] Updates from 04-17. --- content/blog/complexity.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/content/blog/complexity.md b/content/blog/complexity.md index 1fe52a3..126f029 100644 --- a/content/blog/complexity.md +++ b/content/blog/complexity.md @@ -27,13 +27,13 @@ Before being able to manage complexity, it must be identified. In addition to t * Humans: No two are the same. DNA on its own is complex; factoring in the expression of that DNA is beyond the understanding of any single person. ## Complex Software is Undesirable -All software is complex; it is one of the most complex man-made things. Physical creations such as space ships, submarines, and skyscrapers may be complex, but they are limited by the laws of physics. Software has no such limit. [FreeBSD](https://www.freebsd.org/) is an operating system that was first released in 1993. Using [scc](https://github.com/boyter/scc), a tool to evaluate the size of codebases, it estimates it would take about 16 years with 500 people to recreate FreeBSD 12.1. +All software is complex; it is one of the most complex man-made things. Physical creations such as space ships, submarines, and skyscrapers may be complex, but they are limited by the laws of physics. Software has no such limit. [FreeBSD](https://www.freebsd.org/) is an operating system that powers parts of [Netflix](https://www.phoronix.com/scan.php?page=news_item&px=Netflix-NUMA-FreeBSD-Optimized), [WhatsApp](https://www.quora.com/Why-did-WhatsApp-choose-FreeBSD-over-Linux), and [PlayStation 4](https://en.wikipedia.org/wiki/PlayStation_4_system_software). Using [scc](https://github.com/boyter/scc), a tool to evaluate the size of codebases, it estimates it would take about 16 years with 500 people to recreate FreeBSD 12.1. While some complexity is unavoidable, it is best minimized. Here are a few reasons to minimize the complexity of software: * Expensive changes: As software gets more complex, the cost to change increases exponentially. A module bound to several business concerns is more expensive than a module that does one thing. Engineers, business representatives, and managers need to work together instead of just handing a simple task to an engineer. -* Time: While money can be acquired, time keeps ticking. If a project becomes expensive, some larger companies can handle it. If the software is complex enough, the bottleneck becomes time and at that point it is too late. By analogy, if the task is to carry a gallon of water 100 meters, it could be put in a car(expensive, but fast) and cover the distance quickly. If the water must be converted to steam and then back to water, it will take much longer, and the car will not help with delivering it on time. +* Time: While money can be acquired, time is scarce. If a project becomes expensive, some larger companies can handle it. If the software is complex enough, the bottleneck becomes time and at that point it is too late. By analogy, if the task is to carry a cup of water 100 meters, it could be put in a car(expensive, but fast) and cover the distance quickly. If the water must be converted to steam and then back to water, it will take much longer, and the car will not help with delivering it on time. * Engineer retention: Engineers who work on simple software run into less frustrating walls. This is more fulfilling work, and will keep engineers on the team. Engineers are less likely to take ownership of problems and code if it is part of a complex mess. @@ -46,11 +46,12 @@ An antonym of complexity is [simplicity](https://www.thesaurus.com/browse/comple * Composition: Software should be composed of interchangeable modules. The boundaries between modules must be well-defined. Chess software should have 2 players, but those players do not need to be humans on a computer. By keeping the player module separate, it can be swapped for an AI player module. This enables better testing, and more interesting games. -These principles are not easy to incorporate into an engineering process. There is both a science and an art aspect to designing and building something simply. Once a system becomes simple, the benefits become evident quickly. One important benefit for teams to think about is the number of engineers who can work on a project. If a system becomes a convoluted mess, usually only 1 or 2 people can work on it simultaneously. A system designed well, especially using modularity, will increase the number of engineers who can work on it simultaneously. +These principles are not easy to incorporate into an engineering process. There is both a science and an art aspect to designing and building something simply. Once a system becomes simple, the benefits become evident quickly. One important benefit for teams to think about is the number of engineers who can work on a project. If a system becomes a convoluted mess, usually only a couple people can work on it. A system designed well, especially using modularity, will increase the number of engineers who can work on it. ## Software Engineers Manage Complexity -A programmer understands software languages and can program a computer to accomplish tasks. A software engineer will do the same, with the addition of minimizing the program's complexity. In fact the act of minimizing the complexity takes up most of the engineer's time. Many other tasks such as designing, testing, documenting, refactoring, and code reviews are much more time intensive -- and important -- than the actual programming. +A programmer understands software languages and can program a computer to accomplish tasks. A software engineer will do the same, with the addition of minimizing the program's complexity. In fact the act of minimizing the complexity takes up most of the engineer's time. Many other tasks such as designing, testing, documenting, refactoring, and reviewing code are much more time intensive -- and important -- than the actual programming. -Software engineers must create programs that are simple enough to be understood by other engineers. This enables others to work on the project and create something greater than the sum of the engineers' abilities. +Software engineers must create programs that are simple enough to be understood by other engineers. This enables others to work on the project and create something greater than the sum of the engineers' abilities. Creating obvious software is a skill acquired through working with others. One of the most useful abilities of that skill is to use [design patterns](https://en.wikipedia.org/wiki/Software_design_pattern). When the writer and reader of a program know a common design pattern, they can quickly communicate its intent. -##### ? design patterns +## Conclusion +Writing software is easy, but writing good software is not. Seek simplicity to save the business and other engineers time and money. -- 2.45.2 From cf5b9796cf567a863ca2f73b2f6f6b5a040056ec Mon Sep 17 00:00:00 2001 From: russoj88 Date: Fri, 17 Apr 2020 09:17:30 -0700 Subject: [PATCH 10/13] Updates from 04-17 (2). --- content/blog/complexity.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/blog/complexity.md b/content/blog/complexity.md index 126f029..b4ac2d9 100644 --- a/content/blog/complexity.md +++ b/content/blog/complexity.md @@ -27,13 +27,13 @@ Before being able to manage complexity, it must be identified. In addition to t * Humans: No two are the same. DNA on its own is complex; factoring in the expression of that DNA is beyond the understanding of any single person. ## Complex Software is Undesirable -All software is complex; it is one of the most complex man-made things. Physical creations such as space ships, submarines, and skyscrapers may be complex, but they are limited by the laws of physics. Software has no such limit. [FreeBSD](https://www.freebsd.org/) is an operating system that powers parts of [Netflix](https://www.phoronix.com/scan.php?page=news_item&px=Netflix-NUMA-FreeBSD-Optimized), [WhatsApp](https://www.quora.com/Why-did-WhatsApp-choose-FreeBSD-over-Linux), and [PlayStation 4](https://en.wikipedia.org/wiki/PlayStation_4_system_software). Using [scc](https://github.com/boyter/scc), a tool to evaluate the size of codebases, it estimates it would take about 16 years with 500 people to recreate FreeBSD 12.1. +All software is complex; it is one of the most complex man-made things. Physical creations such as space ships, submarines, and skyscrapers may be complex, but they are limited by the laws of physics. Software has no such limit. For example, [FreeBSD](https://www.freebsd.org/) is an operating system that powers parts of [Netflix](https://www.phoronix.com/scan.php?page=news_item&px=Netflix-NUMA-FreeBSD-Optimized), [WhatsApp](https://www.quora.com/Why-did-WhatsApp-choose-FreeBSD-over-Linux), and [PlayStation 4](https://en.wikipedia.org/wiki/PlayStation_4_system_software). Using [scc](https://github.com/boyter/scc), a tool to evaluate the size of codebases, it estimates it would take about 16 years with 500 people to recreate FreeBSD 12.1. While some complexity is unavoidable, it is best minimized. Here are a few reasons to minimize the complexity of software: * Expensive changes: As software gets more complex, the cost to change increases exponentially. A module bound to several business concerns is more expensive than a module that does one thing. Engineers, business representatives, and managers need to work together instead of just handing a simple task to an engineer. -* Time: While money can be acquired, time is scarce. If a project becomes expensive, some larger companies can handle it. If the software is complex enough, the bottleneck becomes time and at that point it is too late. By analogy, if the task is to carry a cup of water 100 meters, it could be put in a car(expensive, but fast) and cover the distance quickly. If the water must be converted to steam and then back to water, it will take much longer, and the car will not help with delivering it on time. +* Time: While money can be acquired, time is scarce. If a project becomes expensive, some larger companies can handle it. If the software is complex enough, the bottleneck becomes time, at which point it is too late. Cars travel quickly on highways, partly due to their straight path (simple). If the only way to get from A to B is a winding mountain road (complex), more time will be needed than the highway, no matter how fast a car you buy. * Engineer retention: Engineers who work on simple software run into less frustrating walls. This is more fulfilling work, and will keep engineers on the team. Engineers are less likely to take ownership of problems and code if it is part of a complex mess. -- 2.45.2 From 55ae48e7d46486d2e3cbcde64b66c71308247bfd Mon Sep 17 00:00:00 2001 From: russoj88 Date: Fri, 17 Apr 2020 10:22:35 -0700 Subject: [PATCH 11/13] Updates from 04-17. --- content/blog/complexity.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/blog/complexity.md b/content/blog/complexity.md index b4ac2d9..511446a 100644 --- a/content/blog/complexity.md +++ b/content/blog/complexity.md @@ -44,9 +44,9 @@ An antonym of complexity is [simplicity](https://www.thesaurus.com/browse/comple * UNIX philosophy: "Make each program do one thing well." This can save software from becoming an indomitable mess. Constantly adding features to the same system will eventually make it collapse in on itself. -* Composition: Software should be composed of interchangeable modules. The boundaries between modules must be well-defined. Chess software should have 2 players, but those players do not need to be humans on a computer. By keeping the player module separate, it can be swapped for an AI player module. This enables better testing, and more interesting games. +* Composition: Software should be composed of interchangeable modules. The boundaries between modules must be well-defined. Chess software should have 2 players, but those players do not need to be humans on a computer. By keeping the player module separate, it can be swapped for an AI player module. This enables better testing and more interesting games. -These principles are not easy to incorporate into an engineering process. There is both a science and an art aspect to designing and building something simply. Once a system becomes simple, the benefits become evident quickly. One important benefit for teams to think about is the number of engineers who can work on a project. If a system becomes a convoluted mess, usually only a couple people can work on it. A system designed well, especially using modularity, will increase the number of engineers who can work on it. +Removing complexity requires both science and art. These principles are not straightforward to incorporate into an engineering process. Once a system becomes simple, the benefits become evident quickly. One important benefit for teams to think about is the number of engineers who can work on a project. If a system becomes a convoluted mess, usually only a couple people can work on it. A system designed well, especially using modularity, will increase the number of engineers who can work on it. ## Software Engineers Manage Complexity A programmer understands software languages and can program a computer to accomplish tasks. A software engineer will do the same, with the addition of minimizing the program's complexity. In fact the act of minimizing the complexity takes up most of the engineer's time. Many other tasks such as designing, testing, documenting, refactoring, and reviewing code are much more time intensive -- and important -- than the actual programming. -- 2.45.2 From a161811066e9fb59ca02564e1353a55cd13b65ea Mon Sep 17 00:00:00 2001 From: russoj88 Date: Sun, 19 Apr 2020 14:43:51 -0700 Subject: [PATCH 12/13] Updates from 04-19. --- content/blog/complexity.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/content/blog/complexity.md b/content/blog/complexity.md index 511446a..5bcb4a0 100644 --- a/content/blog/complexity.md +++ b/content/blog/complexity.md @@ -8,7 +8,7 @@ desc: What is complexity as it relates to software? The most [relevant definition of complexity](https://www.lexico.com/en/definition/complex) for this blog post is: (adj) "Not easy to analyze or understand; complicated or intricate." Intuition of complexity is important if you are designing, writing, or reading software. If you are purchasing software, it is important to prioritize simpler options; it will be cheaper in the long run. In this blog post, I will discuss identifying complexity, why it's bad, why simple is good, and how software engineers manage complexity. ## Identifying Complexity -Before being able to manage complexity, it must be identified. In addition to the definition, it is helpful to know indicators and examples. Seasoned engineers sometimes call these smells; complexity is not black and white, but more of an intuition. Some things that appear simple now may become complex in the future. +Before being able to manage complexity, it must be identified. In addition to the definition, it is helpful to know indicators and examples. Seasoned engineers sometimes call these smells; complexity is not black and white, but more of an intuition. Things that appear simple now may become complex in the future. #### Indicators @@ -31,7 +31,7 @@ All software is complex; it is one of the most complex man-made things. Physica While some complexity is unavoidable, it is best minimized. Here are a few reasons to minimize the complexity of software: -* Expensive changes: As software gets more complex, the cost to change increases exponentially. A module bound to several business concerns is more expensive than a module that does one thing. Engineers, business representatives, and managers need to work together instead of just handing a simple task to an engineer. +* Expensive changes: As software gets more complex, the cost to change increases exponentially. A module bound to several business concerns is more expensive than a module that does one thing. Engineers, business representatives, and managers need to work together on multi-purpose modules instead of handing a simple task to an engineer to work on a single-purpose module. * Time: While money can be acquired, time is scarce. If a project becomes expensive, some larger companies can handle it. If the software is complex enough, the bottleneck becomes time, at which point it is too late. Cars travel quickly on highways, partly due to their straight path (simple). If the only way to get from A to B is a winding mountain road (complex), more time will be needed than the highway, no matter how fast a car you buy. @@ -40,18 +40,20 @@ While some complexity is unavoidable, it is best minimized. Here are a few reas ## Simple is Difficult, but Effective An antonym of complexity is [simplicity](https://www.thesaurus.com/browse/complexity). Although it is easy to explain a [simple system](https://simplesystems.tech/blog/post/simplicity), it is not easy to create one. This is the classic investment mindset applied to time. It is better to think twice and code once. Here are a few examples of simplifying principles: -* Encapsulation: This is a very powerful idea, especially when some complexity cannot be mitigated -- it can still be encapsulated. The inner workings of an automatic transmission are quite complex, but it is encapsulated so well that the driver simply selects "D". As [Rob Pike](https://twitter.com/rob_pike) points out in this [video](https://www.youtube.com/watch?v=rFejpH_tAHM&t=789), the simplest interface is no interface at all; garbage collection is completely encapsulated. +* Encapsulation: When the complexity of software cannot be mitigated, it can still be encapsulated. This powerful idea is what enables the internet to work smoothly; each packet of information sent across it is an envelope. The inner workings of an automatic transmission are quite complex, but it is encapsulated so well that the driver simply selects "D". As [Rob Pike](https://twitter.com/rob_pike) points out in this [video](https://www.youtube.com/watch?v=rFejpH_tAHM&t=789), the simplest interface is no interface at all; garbage collection is completely encapsulated. * UNIX philosophy: "Make each program do one thing well." This can save software from becoming an indomitable mess. Constantly adding features to the same system will eventually make it collapse in on itself. -* Composition: Software should be composed of interchangeable modules. The boundaries between modules must be well-defined. Chess software should have 2 players, but those players do not need to be humans on a computer. By keeping the player module separate, it can be swapped for an AI player module. This enables better testing and more interesting games. +* Composition: Software should be composed of interchangeable modules. The boundaries between modules must be well-defined. Chess software should have two players, but those players do not need to be humans on a computer. By keeping the player module separate, it can be swapped for an AI player module. This enables better testing and more interesting games. -Removing complexity requires both science and art. These principles are not straightforward to incorporate into an engineering process. Once a system becomes simple, the benefits become evident quickly. One important benefit for teams to think about is the number of engineers who can work on a project. If a system becomes a convoluted mess, usually only a couple people can work on it. A system designed well, especially using modularity, will increase the number of engineers who can work on it. +Removing complexity requires both science and art. These principles which bring about simplicity are not straightforward to incorporate into an engineering process. Once a system becomes simple, the benefits become evident quickly. One important benefit for teams to think about is the number of engineers who can work on a project. If a system is a convoluted mess, usually only a couple people can work on it. A simple system can be worked on concurrently by more engineers, making it a much more effective piece of software. ## Software Engineers Manage Complexity -A programmer understands software languages and can program a computer to accomplish tasks. A software engineer will do the same, with the addition of minimizing the program's complexity. In fact the act of minimizing the complexity takes up most of the engineer's time. Many other tasks such as designing, testing, documenting, refactoring, and reviewing code are much more time intensive -- and important -- than the actual programming. +A programmer understands software languages and can use them to have a computer accomplish tasks. A software engineer will do the same, with the addition of minimizing the program's complexity. In fact the act of minimizing complexity takes up most of an engineer's time. Many other tasks such as designing, testing, documenting, refactoring, and reviewing code are much more time intensive -- and important -- than the actual programming. -Software engineers must create programs that are simple enough to be understood by other engineers. This enables others to work on the project and create something greater than the sum of the engineers' abilities. Creating obvious software is a skill acquired through working with others. One of the most useful abilities of that skill is to use [design patterns](https://en.wikipedia.org/wiki/Software_design_pattern). When the writer and reader of a program know a common design pattern, they can quickly communicate its intent. +Software engineers must create programs that are simple enough to be understood by other engineers. This enables others to work on the project and create something greater than the sum of the engineers' abilities. Creating obvious software is a skill acquired through working with others. One of the more useful abilities of that skill is to use [design patterns](https://en.wikipedia.org/wiki/Software_design_pattern). When the writer and reader of a program know a common design pattern, they can quickly communicate its intent. + +Documentation is important no matter how simple the code. Programs always appear simpler to their author than the reader. This skill is necessary to work on teams that are spread across time zones. Delays due to misunderstanding undocumented code can be costly. Documentation manages the complexity of software by writing in clear terms what the code will do. ## Conclusion -Writing software is easy, but writing good software is not. Seek simplicity to save the business and other engineers time and money. +Writing software is easy, but writing good software is not. Seek simplicity to save the business and other engineers time and money. Engineers should hone their complexity-reducing skills to write better software. -- 2.45.2 From 8e42fc6e6d7dace4a2ee688549f718b63a8fd20b Mon Sep 17 00:00:00 2001 From: russoj88 Date: Sun, 19 Apr 2020 15:10:20 -0700 Subject: [PATCH 13/13] Fix date. --- content/blog/complexity.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/complexity.md b/content/blog/complexity.md index 5bcb4a0..eb44ae4 100644 --- a/content/blog/complexity.md +++ b/content/blog/complexity.md @@ -2,7 +2,7 @@ img: /img/complexity.jpg title: Complexity author: Jeff Russo -pdate: March 28,2020 +pdate: April 19,2020 desc: What is complexity as it relates to software? --- The most [relevant definition of complexity](https://www.lexico.com/en/definition/complex) for this blog post is: (adj) "Not easy to analyze or understand; complicated or intricate." Intuition of complexity is important if you are designing, writing, or reading software. If you are purchasing software, it is important to prioritize simpler options; it will be cheaper in the long run. In this blog post, I will discuss identifying complexity, why it's bad, why simple is good, and how software engineers manage complexity. -- 2.45.2