1. 程式人生 > >How To Reject The Belief On The Silver Bullet

How To Reject The Belief On The Silver Bullet

In psychology there is a concept called Absolute Thinking. It represents a common tendency to think in "black and white" terms. It happens when someone provides two alternatives to a problem that doesn't have just two alternatives. This is also known as the "Black and White Fallacy" or "False Dilemma"

.

It's possible to observe the effects of Absolute Thinking in politics when people generalize a religion, ethnicity or any other group under the assumption that all individuals belonging to that group are the same. Humans are very bad in dealing with complexity so we tend to simplify things under the excuse that it will be easier for us to reason about it.

It's possible to observe a similar effect happening today in software development, which is when someone considers the solutions for a problem as "black and white". In this case, the “black” part represents not using any solution at all and the "white" part represents the perfect solution for all variations of that problem, a conclusion that fails to consider all the tradeoffs. We call this the "silver bullet", a pejorative term for the perfect solution that doesn't exist.

We work in an industry full of decisions and practices that have many tradeoffs. Most of the time there's no solution that works for all cases in every context and circumstance. Each of them is unique and we need to understand them first before jumping into a conclusion. As software developers, we tend to interpret "most" as "all", "sometimes" as "always" and "some things" as "everything". It's not intentional, it's not our choice, it's who we are.

As software developers, we tend to interpret "most" as "all", "sometimes" as "always" and "some things" as "everything"

One of the most common examples of Absolute Thinking that can lead developers to the conclusion of being a "silver bullet" is the Agile Manifesto.

The Agile Manifesto was written in 2001 and essentially states a series of recommendations for software development known as the best ways to produce valuable software at the time. They represent a series of principles learned by the industry after decades of pain and suffering.

The reason why the Agile Manifesto is a good example of Absolute Thinking is that most people ignore the last paragraph:

… while there is value in the items on the right, we value the items on the left more.
— The last paragraph of the Agile Manifesto

The last paragraph is supposed to make it clear that they are not recommendations that should be followed as absolute truths. It just says that there's more value in some things over others when developing software. There are circumstances where the less valuable practices from the Agile Manifesto can have more benefits for a project than the most valuable ones.

Absolute Thinking happens when someone reads the manifesto and just ignores everything on the right side of each recommendation, assuming it is a solution for all problems. This is clearly wrong. It's the Absolute Thinking affecting our capability of absorbing recommendations efficiently.

The interpretation of the Agile Manifesto is a good example of Absolute Thinking, instead of weighing the tradeoffs of each recommendation people tend to assume they are absolute rules that can't be broken and ignore situations where they don't work

One could argue that documenting things that are not absolute have no value because it doesn't allow us to apply them in any software project easily. However, if people only documented absolute practices, then there would be no progress. Subjective and context-specific techniques are part of software development and we need to understand how to handle them.

Another benefit of documenting principles that have tradeoffs is that they help to raise the discussion, a discussion that otherwise would never exist. This way each developer and their team can experiment and find out what works and what doesn't. We will still need practical experience to really know when something should be done and when it shouldn’t.

One of the best benefits of documenting principles that have tradeoffs is that they help to raise discussion, a discussion that otherwise would never exist

Are there situations where absolute principles are valid? Douglas Crockford thinks there is. When arguing about the value of certain features in programming languages, he usually says:

If a feature is sometimes useful and sometimes dangerous and if there is a better option then always use the better option.
— Douglas Crockford

However, how do we find the better option?

In the end, we need to fallback to the tradeoffs that will rely on the circumstances of that feature. We need to analyze if the better option is really better than the one that is dangerous. If it is, then it might make sense to always use it, otherwise, if there are use cases for the dangerous one, then we can't always recommend using the alternative.

Software developers tend to think in absolute terms and that can drive us to believe in silver bullets and make wrong conclusions

We need to be careful when using “always” to document a practice because it can drive misunderstanding and make someone pretend that there are silver bullets when in reality there are none. However, there are cases where it makes sense using it, and we need to be aware even though something is documented as "always" that doesn't mean it's absolute without tradeoffs.

If there's one thing we can always do is to be smart, understand our limitations as humans and reject the assumption that anything can be a silver bullet.

相關推薦

How To Reject The Belief On The Silver Bullet

In psychology there is a concept called Absolute Thinking. It represents a common tendency to think in "black and white" terms. It happens when someone pro

A practical ES6 guide on how to perform HTTP requests using the Fetch API

In this guide, I’ll show you how to use the Fetch API (ES6+) to perform HTTP requests to an REST API with some practical examples you’ll most likely encoun

How to solve can't see the Add Virtual Function/Add Windows Message Handler menus on the menu of the class in VC6

Step 1 : Delete the *.clw file in the program's directory. Step 2 : Open the project (open the *.dsw file). Step 3 : Open the ClassWizard,

How To Update Android Apk Outside The Playstore

Let’s learn how to update android apk outside the playstore in this short post! Perhaps you have a scenario where you don’t want to publish your app in

【Benson的專欄】Learning, staying up to date, and working on the latest and greatest in languages and APIs is what k

Learning, staying up to date, and working on the latest and greatest in languages and APIs is what k

Our long road to getting virtual reality on the road

Our long road to getting virtual reality on the roadVirtual reality might allow you to travel to far away worlds with the touch of a button but travelling

Ask HN: How do you stay fresh on the basics of computer science?

I had an uncomfortable experience last week where I realized I'd forgotten the basics of condition variables (in particular, how to prevent the thundering

Simpson’s Paradox: How to Prove Opposite Arguments with the Same Data

Simpson’s Paradox occurs when trends that appear when a dataset is separated into groups reverse when the data are aggregated. In the restaurant recommenda

How to steal every vote in the state of Georgia

Disclaimer: vote tampering of any kind is a felony. Accessing computer systems without proper authorization is a felony. This post was not written with int

How to Win at SEO in the Age of Machine Learning

In the recent past, we have been hearing a lot about machine learning, but do we really know what is machine learning? And how it can change the organic se

DotNet Core5000埠無法繫結解決方案(Unable to bind to http://localhost:5000 on the IPv6 loopback interface)

    解釋:5000埠不能夠繫結,所以繫結到其他埠進行Nginx反向代理   解決方案 第一步 新增host.json {   "server.urls": "http://*:8010" } 第二步 &nb

How to use "man" effectively in the development of Linux

man is the system's manual pager.      The table below shows the section numbers of the manual followed by the types of pages they cont

How to add one perference into the settings option

under the settings ,it has alot of options for us to set, there are two ways to add some app into the setting perference. 1. write an ap

How to fix yum errors on CentOS, RHEL or Fedora

http dsm list plain ... prop package cat cse Yum is a package management tool for installing, updating and removing rpm packages on Red

WPF:How to display a Bitmap on Image control

bug con 另一個 spa and maps api 如果 reat 一個Bitmap文件,叫做screenShotFile, 你可以這樣顯示到Image控件上。 BitmapImage bi = new BitmapImage();

How-to Install VMware Tools on Debian Stretch 9 32/64bit Linux+GNU

網絡配置 bsp install com tutorial des linux 虛擬機 top 在虛擬機VMWARE上安裝debian9 安裝vmwaretools時候遇到問題 詢問我IFCONFIG安裝在哪裏? 新版的debian不知道是用戶權限問題還是使用了其他網絡

How to Install VMware Tools on RHEL 7/CentOS 7

advance paste rman rip prot disable features box etc The original address Mware Tools is one of important components for virtual mach

dispatch_sync:As an optimization, this function invokes the block on the current thread when possible

沒有 pos bsp syn nbsp 優化 func 是否 GC 兩件事情: 1、是否是一個線程; 2、queue task 的目標線程是否有未完成的task。 模型:一個線程處理當前的task還有通過gc d派發來的待執行task。 猜測: 如果目標thread

How to increase JVM memory on Tomcat 8

  https://docs.oracle.com/cd/E40520_01/integrator.311/integrator_install/src/cli_ldi_server_config.html   Creating a setenv file It is

ACM-ICPC 2018 南京賽區網路預賽 B. The writing on the wall(暴力)

題目連結:傳送門   題意:詢問你在一個n*m的矩陣中,有一些方塊被塗成了黑色,其他的方格為白色,讓你統計白方格形成的子矩陣的個數。   思路:比賽的時候沒有想去做,賽後補題的時候發現優美的暴力就能過,也有點遺憾。 觀看了大佬的部落格後~~~ 首先我們會求