Computers are useless.They can only give you answers.–Picasso
計算機沒有什么作用,他們只能告訴你答案,——畢加索
C/C++的學習裙【七一二 二八四 七零五 】,無論你是小白還是進階者,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多干貨和技術資料分享!
很多人認為計算機變得如此智能,所以在不久的未來將不再需要程式員,另外一些人認為程式員是天才,他們在電腦前能不斷地解決復雜的數學難題,甚至不少程式員對他們是做什么的都沒有清晰的概念,
在這篇文章中,我想給不知情的人解釋一下程式員到底是做什么的:
程式員是將人類想法翻譯成計算機語言的譯者,
他們是兩種世界之間的紐帶,你認為維護這個紐帶很容易嗎?
人類世界的背景
The problem with people is that they’re only human.–Bill Watterson
人類的問題是,他們只是人而已,——比爾·沃特森
人類是生物進化的產物,并且擁有獨特而寶貴的器官——大腦,它能為程式員提供想法,大腦有組合復雜的新大腦皮層(對人類而言是獨特的),還有從哺乳動物和爬行動物繼承的舊結構,舊的大腦結構主要負責生殖(性)和生存(尋找食物或者躲避危險),新大腦皮層進化成能夠更好地支持這些功能,但是,它開始產生奇怪的副作用——意識、思考和好奇心,幸虧這些副作用的影響,人類產生了文明并在數千年后發明了計算機,
一些人相信經過數千年的發展,人類應該變成完全沉悶的、理性的、可預測的生物,但是這并沒有發生,人類舊的大腦結構、復雜的心理和社會行為往往使人們不理性,不可預測并帶有欺騙性,并且,人類有糟糕的記憶力、強烈的情感和個人興趣,但是,程式員沒法選擇與更理性的物種作業,他們不得不與人類共事并且把人類的想法翻譯成計算機語言,
C/C++的學習裙【七一二 二八四 七零五 】,無論你是小白還是進階者,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多干貨和技術資料分享!
計算機世界背景
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.實踐(比如代碼重構、單元測驗、持續集成)——周期性活動,以保持系統可靠、健康與可改變,(關于代碼重構,可參見伯樂在線博客《明星軟體工程師的10種特質》這篇文章中的第3點,)
面向人類和面向硬體物件/系統的程式員有很大不同,
不與人溝通的程式員不是好程式員,一個優秀的解決方案需要計算機世界與人類世界的雙重技能,只有連接起兩個世界,才能成為一個真正的優秀程式員,
如果你對C/C++感興趣,想學編程,成為程式員,小編推薦一個C/C++技術交流群【點擊進入】!
涉及到了:編程入門、游戲編程、網路編程、Windows編程、Linux編程、Qt界面開發、黑客等等......
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/247955.html
標籤:其他
上一篇:PDF轉文本 & 圖片ORC - 在線App自動轉 - 資料處理 (R)
下一篇:maven打包時排除組態檔
