北京尚學堂:程序員的本質

版權聲明:本文爲北京尚學堂原創文章,未經容許不得轉載。html

不少人認爲計算機變得如此智能,因此在不久的將來將再也不須要程序員。另一些人認爲程序員是天才,他們在電腦前能不斷地解決複雜的數學難題。甚至很多程序員對他們是作什麼的都沒有清晰的概念。在這篇文章中,筆者想給不知情的人解釋一下程序員究竟是作什麼的。程序員

程序員是將人類想法翻譯成計算機語言的譯者。算法

他們是兩種世界之間的紐帶。你認爲維護這個紐帶很容易嗎?編程

程序員的本質微信

人類世界的背景編程語言

The problem with people is that they’re only human. – Bill Watterson單元測試

人類的問題是,他們只是人而已。——比爾·沃特森學習

人類是生物進化的產物,而且擁有獨特而寶貴的器官——大腦,它能爲程序員提供想法。大腦有組合複雜的新大腦皮層(對人類而言是獨特的),還有從哺乳動物和爬行動物繼承的舊結構。舊的大腦結構主要負責生殖(性)和生存(尋找食物或者躲避危險)。新大腦皮層進化成可以更好地支持這些功能,可是,它開始產生奇怪的反作用——意識、思考和好奇心。幸好這些反作用的影響,人類產生了文明並在數千年後發明了計算機。測試

一些人相信通過數千年的發展,人類應該變成徹底沉悶的、理性的、可預測的生物,可是這並無發生。人類舊的大腦結構、複雜的心理和社會行爲每每令人們不理性,不可預測並帶有欺騙性。而且,人類有糟糕的記憶力、強烈的情感和我的興趣。可是,程序員無法選擇與更理性的物種工做,他們不得不與人類共事而且把人類的想法翻譯成計算機語言。更多精彩內容關注微信公衆號:北京尚學堂。url

計算機世界背景

Part of the inhumanity of the computer is that, once it is competently programmed and working smoothly, it is completely honest. – Isaac Asimov

計算機非人性的一部分表現是,一旦完成編譯而且順利運行,它將忠實地完成工做。——艾薩克·阿西莫夫

計算機是人類文明的最佳發明。它由CPU、主板、內存、硬盤驅動器、顯示器和其餘部分構成。計算機將咱們的文明推入一個新的水平,使咱們的生活更有意義並充滿樂趣,還彌補了咱們大腦的缺陷。極可能計算機比人類更聰明。(不過,我有點關心若是這成爲現實後,計算機還須要人類程序員嗎?)

現代計算機具備徹底邏輯性、直接性和順從性。若是你知道它應該作什麼而且知道如何命令它,那麼和計算機一塊兒工做是快樂的。惟一的問題是,計算機只會作你告訴它去作的。所以,你應該有清晰的思路而且在見你的上司或客戶時保證計算機不出岔子。更多精彩內容關注微信公衆號:北京尚學堂。

在人類和計算機之間的翻譯

翻譯中會遇到三個主要的挑戰:

1. 語言歧義。人類語言是模糊、複雜而且雙關的,例如:「這個程序不能提供良好的用戶體驗」。文化、背景和上下文語境都會對溝通和含義形成影響。與之相反,全部計算機語言都是準確、直接的,與上下文無關。

2. 細節層次。人類的溝通是籠統而不帶有過多細節的,例如:「我想讓這該死的程序運行起來」。這樣能夠節省時間與精力,但因爲缺乏詳細信息,會產生兩個比較大的問題——誤解和不肯定性。而計算機須要全部細節——每件事都要說清楚。

3. 思惟模式。人類習慣於思考需求、結果與解決方案之間的關係,例如:「這份報告應該在2秒內運行,而不是2個小時」。然而,計算機須要算法——按照步驟去達到想要獲得的結果。

爲了寫出優秀的軟件,程序員們必須克服這些困難,理解人們的想法並將之轉換成計算機語言。更多精彩內容關注微信公衆號:北京尚學堂。

一名優秀程序員所具有的能力

咱們能夠看到,一名優秀程序員應該具有應付兩個不一樣世界的兩套技能。

理解人類的需求並提出解決方案:

1. 溝通——與人創建聯繫的能力,可以同他人親密的交談,並有勇氣去嘗試分享本身的觀點。

2. 意圖——從談話中提取有用的信息,理解並使之有意義。

3. 邏輯——爲不懂讓步的計算機整理、剔除那些人類思想中含糊而有爭議的內容。

4. 創造力——挖掘、轉變人類的想法,從而建立優秀的解決方案。

5. 構思——利用人類友好的接口和便捷的互動性來包裝編程思想。

6. 大局觀——清楚解決方案是如何適應全世界的用戶、企業以及其餘,從而使你的程序更有用。

告訴計算機該作什麼,並創建解決方案:

1. 邏輯(再次強調)——把程序員的想法組織整理成有凝聚力的軟件思想和計算機指令

2. 技術——發現並理解科技黑箱(對於99%的人來講是黑箱)。

3. 編程語言——學習美觀的、富有邏輯的、清晰明瞭的語言,從而把程序員的想法提供給電腦。

4. 算法——精通讓計算機完成任務最高效的方法。

5. 建模——在軟件代碼中創建抽象和模型,從而掌握並操控想法。

6. 實踐(好比代碼重構、單元測試、持續集成)——週期性活動,以保持系統可靠、健康與可改變。

面向人類和麪向硬件對象/系統的程序員有很大不一樣。

不與人溝通的程序員不是好程序員。一個優秀的解決方案須要計算機世界與人類世界的雙重技能。只有鏈接起兩個世界,才能成爲一個真正的優秀程序員。更多精彩內容關注微信公衆號:北京尚學堂。​

若是你的目標是就業,而且是高薪就業,那麼北京尚學堂是你正確的選擇。北京尚學堂一直在爲改變中國IT教育努力着。十年以來,北京尚學堂堅守「爲莘莘學子改變命運而講課」這份情懷,不忘初心。感謝你們的閱讀!​

更多猛料!歡迎掃描上方二維碼關注北京尚學堂官方微信公衆號(資料領取驗證消息:156)

本文做者北京尚學堂原創。如需轉載請聯繫做者受權,未經受權,轉載必究。

相關文章
相關標籤/搜索