從程序員角度作一些思考

出於不少緣由, 我在線下的生活其實挺無聊, 偶爾逛逛公園, 就這樣了.
因此更多的時間我仍是在網上用文字和人打交道, 微博啦, Twitter 啦,
固然如今圖片漸漸多了起來, 從買了 Pad 之後, 視頻也多了起來.
之前的我, 相對於同齡人來講也是蒼白的, 蒼白到再學校裏只概念圖書館.
有了電腦之後另說. 總之我生活的環境不是頗有文化底蘊跟層次感的.
因此也不信教, 學校裏教科學, 就信科學了, 即使沒幾乎研究物理和數學.前端

因此理解這個社會的角度, 有很大的差異. 我並非先認識世界的.
我是先認識到了網絡怎樣運做, 學了好久怎樣寫程序構造程序,
用程序能拼湊出一個比較複雜的前端的應用, 只是我後端很粗淺,
但大體上我逐漸在理解從 CPU 內存到上層 MVC 架構, 中間各類套路.
因此我會以爲世界就是一個機器, 別人說世界是模擬的, 我也很好接受.
全部一切都基於最基礎的邏輯規律演化而成, 我也還能接受.
這感受就像看着浩瀚的網絡, 說這是人類寫的, 或者說是機器運行的, 都同樣.程序員

然而人類相比計算機來講, 雖然精緻, 但也缺失了不少不少東西,
好比頗有趣的例子, 好屢次微博上, 設置內部分享, 有人聊遞歸作事情的問題,
由於遞歸太厲害, 原來問題的重點反而沒有優先搞定, 鑽進了牛角尖裏.
計算機也有這個問題的, 會被分配到一個任務, 而後執行, 分紅更多任務.
可是, 計算機是不一樣的, 人們設計了算法, 任務不會一直佔用資源,
一段時間後, 任務會掛起, 而後分配給其餘任務運行, 而後再回來,
也就是說, 當計算機存在問題, 咱們會涉及更優異的算法去解決,
當人腦當中存在問題的時候, 咱們每每機關用盡, 只能期望人們自律.算法

一樣知識的傳播也是一個問題, 難題, 困擾人類從最初到如今.
咱們都知道計算機拷貝數據很快, 就是下載程序下載數據嘛,
但是好比說要教另外一我的下圍棋, 哪有那麼簡單, 並且怎麼也快不起來.
人類大腦存儲知識的結構並不見得優異, 會模糊, 會遺忘,
從前也許不會以爲怎麼差, 可是如今被計算機對比着, 就是愈來愈差了.
咱們拿着本身的特徵跟計算機去作對比, 望洋興嘆, 原來還能這樣!
一個爭強好勝的人, 確定是不樂意本身充當這樣一個愚蠢的角色的.編程

再說協做這個事情, 計算機也有一些模型, 好比 Actor 和 CSP,
當不一樣的進程之間存在數據的依賴阻塞了任務, 如何能高效,
計算機當中設計了信箱/管道/隊列, 多種多樣的數據結構,
以便一個進程能停下, 同時把任務可靠地傳遞給下一個工做流程,
而不一樣的進程將數據自己做爲協議和接口, 明確接下來的任務,
就這樣上千個程序鏈接在一塊兒, 就像自動化工廠裏的機器人.
而人類能作到這樣的效率麼, 我在網上可沒有見過這樣的例子.後端

在這同時, 機器逐漸成爲了人們生活當中必不可少的組成部分,
電話電視交通工具這樣的傳輸媒介自不用說, 特別是互聯網,
當微博上出現一個熱點話題的時候, 每每就開始了病毒式傳播的過程,
一我的就像是鏈接在互聯網上的一臺肉雞, 天然而然地被感染,
或者準確說來是一個新聞事件, 每一個人都會下載下來做爲本身的談資.
對, 我想說就像是一臺機器同樣, 只不過這臺機器有着不少的奇怪現象.
可是想象一下, 就像 Google 期待的那樣, 人們不要思考有 Google 就行了,
把機器當作一個大腦, 人就是一個緩存, 這難道不是極可能的一種將來嗎?緩存

我想說的是, 人就像是機器, 或者也很像咱們本身寫出來的程序,
只是人類更加複雜, 複雜到本身沒法理解, 也就是一臺複雜到沒法理解的機器,
可是那些基本的規則它依然遵照, 只是說有時候呈現出一些隨機性罷了,
好比說依賴關係, 依然存在吧, 一個新想法會依賴已有知識, 確定吧,
幾乎沒有事情能脫離其緣由而出現, 就算是人們的創意或者靈感,
只是這麼多年了咱們以爲是人類的偉大創造, 心理上不以爲是機械的規則,
並且, 這些機器進一步組成更大的尺度上的機器, 就像是社會學現象同樣.
到了這裏也許人們看待問題的角度都會有差異, 但我這樣說, 就像是集羣那樣.網絡

好比一個技術社區當中的信息流動, 信息來源, 信息傳遞者, 受衆,
每一個單元, 會被創造着儘量傳播和散開, 目標是能被接收到,
受衆, 或者說小白開發者, 在實際遇到技術問題須要信息時, 努力會去尋找,
無論他是閱讀博客, 看微博, 刷 Google, 怎樣獲取的信息, 最終獲取了,
而傳遞者在其中而找到屬於本身的位置. 我想說的是, 整個就像是程序,
最終的開發者, 就像是求值器, 而獲取信息就像是惰性計算,
惰性計算最終會分解到單元, 或者數據源頭, 給出一個答案, 而後傳播,
而這中間爲了性能, 也會作嚴格求值, 提早提供好數據, 以便快速有答案.數據結構

當一個社區的運轉開始啓動以後, 就像是公司或者國家, 分化出不一樣的角色的須要,
有的人生產知識, 有的人傳播, 有的人消費知識從而創造其餘領域的價值,
並且越是爲了效率, 這種分工愈加明確, 就像在程序裏拆分文件似的,
其實不拆分文件也無所謂, 機器也能運行, 可是拆分文件開發效率更高,
除了文件, 還要拆分出各類不一樣的架構分層, 還要作隔離和防禦, 甚至優化,
本來或許只是覺得學一門技術作點小事, 但事情就不是那麼簡單,
大量同時進行的任務, 須要管理, 須要肯定智能, 須要約定和規章等等.
它慢慢就變成了像是機器同樣運轉, 每一個人要充當其中的幾個齒輪或者螺絲釘.架構

而一個技術社區到這種程度, 怎樣的規劃, 就和寫程序設計架構有點類似了,
要弄明白設置怎樣的結構, 爲了會遇到怎樣的場景, 而後被迫進行怎樣的演化,
因而要優先作好取捨, 儘可能保證變化來臨時能堅持住怎樣的架構模式,
再就是部署實施具體的代碼和方案, 開始運行, 一點點排除掉 bug.
這大概不是問題的所有, 可是從設計程序的角度去思考, 是天然而然的一種可能,
全部的人, 就像是數據, 函數, 甚至進程, 他們會相互做用, 但存在規律,
而基於底層規律足夠的可靠性, 咱們一層一層建造出高樓大廈.
同時, 爲了提升效率, 咱們不得不去認識規律, 尊重規律, 甚至濫用規律.函數

從另外一個角度也反映出來, 即使作程序員, 也不是擅長寫代碼這一件事就夠了,
若是一生只是寫代碼, 也許. 可是要承載做爲社區當中不一樣的角色, 還要不少,
好比前面說的信息來源, 首先須要有生產信息的能力, 同時保證信息的可靠性,
而其基礎, 一方面是研究領域早先的知識積累, 另外一方面是實踐的反饋,
基於這些開發打磨好信息以後, 還要適當地發散出信息, 一遍準確無誤,
而後是傳遞者對信息進行解讀, 衍生, 以便可以更加普遍地覆蓋到更多人.
整個過程, 標準化, 文檔寫做, 站點設計, 渠道推廣, 都須要之外的技能.
甚至如今演講仍是程序員圈子一個不大不小的技能點, 才能存成傳播的可靠性.

記得羅振宇曾經給一個規律, 新的領域不適合文人開闢, 卻須要文人來完善.
編程漸漸體現出來了, 起初只須要一些人探索, 但要普遍傳播, 須要不少,
須要大量的語言, 文字, 甚至與演講, 視頻創做, 界面設計人員的協助.
也就是說, 爲了把技術社區搞好, 咱們須要的不只僅是程序員,
那些具有表達, 表演, 各類技能的人, 會逐漸進入程序員社區這個無聊的地方,
整個社區須要各類各樣的螺絲釘和齒輪, 極可能就會空缺大量這樣的位置.
當具有了這些, 技術社區自己甚至能進入到更大的體量, 更不同的發展方式.
而這從國外的技術社區複雜的多樣的形態當中, 能夠看到一些樣子.

把話題繞回來, 也就是說, 編程領域一些的知識點, 在具體生活也適用,複雜的程序的運轉須要一些內在結構來支撐, 而人類的團體也一樣是,當咱們吐槽人們作事緩慢, 亟需改進時, 就像咱們改進程序效率的作法相似,就像程序應該分化職能, 制定流水線同樣, 真實的任務也有這樣的構造.在生活當中, 因素複雜, 難以辨認. 然而程序做爲一個模型, 卻清晰得多.換一個角度說, 人們總結生活得出規律的作法, 跟分析代碼得出結論差不太多.所以學好程序, 反過來讓世界變得更美好, 這種想法仍是有點現實意義的.

相關文章
相關標籤/搜索