程序員的本質

Computers are useless. They can only give you answers. – Picasso
  計算機沒有什么作用。他們只能告訴你答案。——畢加索

  很多人(包括我岳母)認為計算機變得如此智能,所以在不久的未來將不再需要程序員。另外一些人認為程序員是天才,他們在電腦前能不斷地解決復雜的數學難題。甚至不少程序員對他們是做什么的都沒有清晰的概念。

  在這篇文章中,我想給不知情的人解釋一下程序員到底是做什么的:

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

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

程序員的本質

  人類世界的背景

  The problem with people is that they’re only human. - Bill Watterson
  人類的問題是,他們只是人而已。——比爾·沃特森

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

  一些人相信經過數千年的發展,人類應該變成完全沉悶的、理性的、可預測的生物,但是這并沒有發生。人類舊的大腦結構、復雜的心理和社會行為往往使人們不理性,不可預測并帶有欺騙性。并且,人類有糟糕的記憶力、強烈的情感和個人興趣。但是,程序員沒法選擇與更理性的物種工作,他們不得不與人類共事并且把人類的想法翻譯成計算機語言。

  計算機世界背景

  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. 實踐(比如代碼重構、單元測試、持續集成)——周期性活動,以保持系統可靠、健康與可改變。

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

  不與人溝通的程序員不是好程序員。一個優秀的解決方案需要計算機世界與人類世界的雙重技能。只有連接起兩個世界,才能成為一個真正的優秀程序員。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452515.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452515.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452515.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

模式-視圖-控制器模式2.0

1 MVC的實現   1.1 分析應用問題,對系統進行分離   分析應用問題,分離出系統的內核功能、對功能的控制輸入、系統的輸出行為三大部分。設計模型部件使其封裝內核數據和計算功能,提供訪問顯示數據的操作,提供控制內部行為的操作…

總體設計的原理

1 模塊化 2 抽象 3 逐步求精 4 信息隱藏和局部化 5 模塊獨立

android 手動回收對象,Android Studio Studio回收列表中的JSON對象

我想在recyclerview中顯示一些JSON對象,并且希望它們在日期之后排序,我該如何實現?下面是下載從JSON URL的數據的方法:Android Studio Studio回收列表中的JSON對象public void downloadFromSkistar(){try{URL url new URL("…

剖析管理所有大數據組件的可視化利器:Hue

歡迎關注大數據和人工智能技術文章發布的微信公眾號:清研學堂,在這里你可以學到夜白(作者筆名)精心整理的筆記,讓我們每天進步一點點,讓優秀成為一種習慣! 日常的大數據使用都是在服務器命令行中…

Django博客--5.讓博客支持 Markdown 語法和代碼高亮

文章目錄0.前言1.安裝 Python Markdown2.在 detail 視圖中解析 Markdown3.safe 標簽4.代碼高亮5.效果展示0.前言 Markdown 是一種 HTML 文本標記語言,只要遵循它約定的語法格式,Markdown 的解析工具就能夠把 Markdown 文檔轉換為標準的 HTML 文檔&#…

耦合

模塊的獨立性很重要,因為有效的模塊化(即具有獨立的模塊)的軟件比較容易開發出來。 獨立的模塊比較容易測試和維護。 模塊的獨立程度可以由兩個定性標準度量,這兩個標準分別稱為內聚和耦合。 耦合 耦合是對一個軟件結構內不同模塊之間互連程度的度量。…

成為更優秀的開發人員:第二步-知道你的核心競爭力

編者按:原文作者羅布沃林(Rob Walling)從事Web應用開發10年之久,擔任過業內顧問、自由開發人員和全球最大的信用卡預付公司City of Pasadena的開發經理。現居住于加州中部城市弗雷斯諾(Fresno)。關注并指導…

android 字體間間隔,TextView設置行間距、字體間距

一、設置行間距1、設置行間距:android:lineSpacingExtra,取值范圍:正數、負數和0,正數表示增加相應的大小,負數表示減少相應的大小,0表示無變化2、設置行間距的倍數:android:lineSpacingMultipl…

破解mysql數據庫的密碼

發現的1小問題 語句打錯以后應該退出本語句,再繼續打新語句.也可以打\c,退出本語句. 如何破解數據庫的密碼: 1:通過任務管理器或者服務管理,關掉mysqld(服務進程) 2:通過命令行特殊參數開啟mysqld Mysqld --skip-grant-tables 3:此時,mysqld服務進程已經打開,并且,不需要權限檢…

Diango博客--6.Markdown 文章自動生成目錄

文章目錄0.思路引導1.在文中插入目錄2.在頁面的任何地方插入目錄3.美化標題的錨點 URL0.思路引導 Markdown 在解析內容的同時還可以自動提取整個內容的目錄結構,本文內容將從以下幾個方面展開: 1)在文中插入目錄; 2)在…

Java中對象和引用的理解

2019獨角獸企業重金招聘Python工程師標準>>> 偶然想起Java中對象和引用的基本概念,為了加深下對此的理解和認識,特地整理一下相關的知識點,通過具體實例從兩者的概念和區別兩方面去更形象的認識理解,再去記憶。12一、對…

android怎樣封裝,如何封裝屬于自己的博客網站安卓APP 源碼家園

說實話我今天在寫這個文章的時候是我使用易語言(E4A\易安卓)的第一天,我也是易小白,但是的確可以用!我為什么寫這個文章呢?因為之前我也想封裝自己的網站,然后去網上找的在線封裝生成APP,果然能封裝好了&am…

程序員常犯的5個非技術性錯誤

一個好的軟件開發人員需要培養兩種技能:技術技能和非技術技能。不幸的是一些開發者只注重技術的部分,以致養成一些陋習,下面是最常犯的5個非技術性錯誤: 0. 缺乏自律 Jim Rohn曾經說過:自律是目標和成果之間的橋梁。我…

Redis進階實踐之二十 Redis的配置文件使用詳解

一、引言   寫完上一篇有關redis使用lua腳本的文章,就有意結束Redis這個系列的文章了,當然了,這里的結束只是我這個系列的結束,但是要學的東西還有很多。但是,好多天過去了,總是感覺好像還缺點什么…

web流程設計器 工作流的 整合視頻教程 activiti畫圖 SSM和獨立部署

本視頻為activiti工作流的web流程設計器整合視頻教程整合Acitiviti在線流程設計器(Activiti-Modeler 5.21.0 官方流程設計器)本視頻共講了兩種整合方式1. 流程設計器和其它工作流項目分開部署的方式2. 流程設計器和SSM框架項目整合在一起的方式視頻大小 1.13 GB ~【…

Diango博客--7.自動生成文章摘要

文章目錄0.思路引導1.方法一:覆寫 save 方法2.方法二:使用 truncatechars 模板過濾器0.思路引導 博客文章的模型有一個 excerpt 字段,這個字段用于存儲文章的摘要。 若在 django admin 后臺手動為文章輸入摘要,每次手動輸入摘要…

android 增加觸摸范圍,android seekBar 增加點擊和滑動范圍

seekBar的的范圍有限,有時候設計師要求高度為4dp,此時范圍太小,很難滑動成功。因此,我們需要在不改變 UI 的前提下,增加點擊和滑動范圍。直接上代碼:public class MainActivity extends AppCompatActivity …

特斯拉股價暴跌,瘋狂燒錢是否真的能夠帶來高額回報?

“瘋狂燒錢”并不能成為公司持續虧損的理由,反而可能成為公司升級轉型的關鍵所在。 上周三,特斯拉發布第四季度財報,其后特斯拉CEO馬斯克在電話會議上表示,特斯拉虧損收窄,營收同比增長88%,但與此同時其首…

android gravity參數,Gravity - [ Android中文手冊 ] - 在線原生手冊 - php中文網

Gravity版本:Android 4.0 r1結構繼承關系public class Gravity extends Objectjava.lang.Objectandroid.view.Gravity類概述用來在一個更大容器中布置對象的標準常量和工具。常量public static final intAXIS_CLIP原始位控制右/底邊界是否被剪切到它的容器中&#x…