人類進步史本質上是一部抽象史

若是你問我人類能從其餘物種中脫穎而出,最重要的能力是什麼?我會說是「抽象的能力」。簡單來講,就是隱藏底層細節、操做表層接口實現目標的能力。 尤瓦爾·赫拉利在《人類簡史》中說:人和其餘物種的根本區別在於想象力。咱們可以透過現象看本質,把繁瑣複雜的具體過程封裝起來,「抽象」成簡單易用的接口,以後其餘人想要理解這件事,就不須要再深刻到細節裏面了,只須要看暴露的接口便可。git

人類進步史本質上是一部抽象史

人類發展歷史上有幾個足以改變人類的抽象概念。 第一,數字。從羊羣這個具體的概念到數字這個抽象的概念,是具備劃時代意義的。若是沒有數字,三個蘋果和三個梨子是沒有任何關聯的,咱們也就沒法從天然現象中找到任何規律了。 第二,國家。國家是咱們想象出來的一個概念,你們都承認,才能朝着一個一致的目標前進,人類的集體能力就體現出來了。 第三,貨幣。貨幣是一個極其強大的工具,咱們說的「有錢能使鬼推磨」就是這個意思。這裏的貨幣不是特指某一種金錢,而是對付出的勞動的一種抽象承認。貨幣使得咱們沒必要任何事情都要事必躬親,我只要用貨幣支付必定的勞動報酬,這大大下降了我的的複雜度。github

科學裏的抽象就更普遍了,咱們能夠認爲全部的科學理論和定理都是一種抽象。物體的質量是一種抽象,它不關注物體是什麼以及它的形狀或質地;牛頓定律是對物體運動規律的抽象,咱們如今知道它不許確,但它在常規世界裏,卻依然是一個至關可靠的抽象。在科學和工程裏,經常須要創建一些模型或者假設,好比量子力學的標準粒子模型、經濟學的理性人假設,這些都是抽象。甚至包括如今 AI 裏經過訓練生成的模型,某種程度上說,也是一種抽象。web

分工合做離不開抽象

抽象無處不在,能夠說沒有了抽象,現代人生活步履維艱。咱們人人都使用手機,可是沒有幾我的知道手機的工做原理是什麼,事實上咱們也根本不關心。咱們天天都乘坐各類交通工具,可是歷來沒操心過輪子究竟是怎麼轉起來的。咱們叫清潔阿姨上面打掃衛生,咱們只須要支付相應的酬勞就好了,至於她是怎麼坐車過來的,用的是哪款洗潔精,咱們不須要操心。 以上這些,抽象一下,咱們就能夠把一件事情分紅三個部分:編程

  • 目標
  • 實現目標的具體底層細節
  • 爲了實現目標我須要作的事情 咱們的目標是發短信、瀏覽網頁,實現這個目標,底層細節是電子電路,是複雜的通訊協議,我須要作的是觸控屏幕。 咱們的目標是前往目的地,底層細節是汽油的工做原理,發動機的工做原理,我須要作的是踩油門、操控方向盤。 咱們的目標是保持房間衛生,底層細節是總得有我的購買清潔用品、打掃房間,我須要作的是請清潔阿姨代替咱們完成,而後支付報酬。

若是你再往下仔細想一想,抽象是一層接一層,沒完沒了,越往下暴露的複雜度越高。光從生產洗衣粉這件事來講,具體的複雜度高嗎?很高,這裏面牽涉到了複雜的化學原理,製造工藝,外行很難徹底搞明白。可是你說購買使用洗衣粉複雜嗎?很簡單。那是由於洗衣粉製造商爲咱們把去除污漬這件事的複雜度給咱們抽象掉了。瀏覽器

咱們小時候上政治課,講到經濟全球化,咱們的平常生活都是創建在全球分工合做基礎上的。分工合做,分爲兩部分:一方面要分工,知道什麼事情須要本身作,什麼事情須要交給別人作;另外一方面須要合做,這要清晰地定義好交互邊界上的交互行爲,約定好信息的含義和格式。安全

細細品味一下分工合做這件事,理想的狀況下,咱們都在努力促成一個大目標的達成,可是咱們不須要也不必關心對方的行動細節,對方具體是怎麼作的不重要,我只須要調用對方在領域邊界上暴露給個人抽象層就好了。bash

計算機領域的抽象

學過計算機的對「抽象」這個概念應該都不會陌生,計算機科學領域有句名言: 計算機科學領域的任何問題均可以經過增長一個間接的中間層來解決。 這個「間接的中間層」,就是一個抽象層。服務器

比方說 Web 開發,咱們開發過程當中使用的 Web 框架和高級抽象語言,算是比較高的抽象層次了,對於大部分開發者來講,咱們的業務邏輯位於這個抽象層。這一層往下,是低級語言,好比 Python 底層實際上用的是 C 語言。再往下,是操做系統,操做系統這一層暴露了最基本的文件操做、socket 接口。操做系統往下,是硬件,硬件也有接口,只不過從出廠那一刻起就已經焊死了。咱們的數據到了服務器網卡這個位置,須要傳到用戶的電腦上了,這時候來到了 TCP/IP 協議這一層,IP 協議確保了咱們的數據不會跑錯地方,TCP 協議確保咱們的數據能完整且以正確的順序抵達。這還沒完,要把字符成功顯示在用戶的瀏覽器上,還要通過不少抽象層呢,咱們就不一一羅列了。用軟件開發者的話來講,這就是不關心底層實現細節,只面向接口編程。正式這樣一層一層地抽象和封裝,才使得咱們如今編寫程序變得極其簡單。session

Authing 作的是什麼以及 Authing 存在的意義

從爲用戶抽象掉部分複雜度來講,咱們和阿里雲作的其實是一回事。阿里雲的 IaaS 平臺把管理物理機房的複雜度抽象掉了,讓咱們這些軟件從業者不須要爲硬件操心;Authing 就是致力於幫助開發者把身份認證的複雜度抽象掉,讓開發者不用操心諸如密碼安全、單點登陸、用戶增加分析這些重要可是瑣碎的事,騰出精力作真正有業務產出的核心業務。正如你很難自建機房而且達到阿里雲的水準同樣,你也很難在有限的時間和資源的前提下把身份認證這件事作的和 Authing 同樣好。app

層次越高,開發效率越高,創造的價值越大。Authing 經過本身對身份認證領域的認知,把身份認證這件很複雜的事情抽象成了一系列規範的步驟,提供 user-friendly 的 SDK 和美觀的後臺控制檯,幫助開發者下降系統的總體複雜度。 Authing 內置了不少實用的 Feature,好比

  • 登陸熱點圖

  • 用戶地理位置分佈

  • 易用美觀,五行代碼便可集成的登陸表單

  • 支持社會化登陸

支持各類社會化登陸是一種很費時的重複性勞動,Authing 容許你在後臺自定義所要支持的社會化帳號服務商,真正的一鍵開啓、0 行代碼:

這些至少是上千行的代碼量,一個月人天的工做量。

  • 支持單點登陸

再看看 Authing 是怎麼實現單點登陸的:10 行代碼,完成須要數千行代碼才能完成的任務。

const authing = new AuthingSSO({
    appId: "5d70d0e991fdd597019df70d",
    appDomain: "sample-sso.authing.cn"
});
const res = await authing.trackSession();
if(!res.session){
    // 未登陸,執行登陸邏輯,這會調起 Authing 的登陸表單
    authing.login()
}else{
    // 已經登陸,打印用戶信息
    console.log(res)
}
複製代碼

注:相關源代碼能夠在此 GitHub 倉庫找到:github.com/Authing/web…

前面說過,Authing 在身份認證領域持續耕耘,已經把身份認證這件事情抽象成了不少個規範的過程,Authing 後續會全面支持函數計算,讓開發者經過插件化的方式,全流程自定義化。

Authing 目前支持 OAuth二、OIDC、LADP、 SAML 等主流身份協議,協議一直都在演進,可是開發者對身份認證的需求一直沒變:那就是安全穩定、簡單高效、終端用戶體驗良好。對於開發者來講,底層的協議變化是一個不重要的細節,就像你開的汽車究竟是用電仍是用油同樣。

就像你的確能夠自建機房同樣,這些東西你的確能夠本身作,可是從投入產出比來看,未必值得。

咱們都是站在前人的肩膀上繼續前進,利用好前人提供給咱們的抽象層,沒人會試圖拋開一切已有的資源從零開始,也只有這樣人類文明才能不斷進步。

身份是一個看上去簡單其實很複雜的事情,這件事至今仍未獲得很好的解決,這也是咱們堅持將 Authing 作好的緣由。咱們是一個鏈接器,會將全球的平臺都鏈接起來,這也是咱們偉大使命的一部分。

Authing 官方網站 ~

相關文章
相關標籤/搜索