程式員的本質

來源:互聯網
上載者:User

很多人(包括我嶽母)認為電腦變得如此智能,所以在不久的未來將不再需要程式員。另外一些人認為程式員是天才,他們在電腦前能不斷地解決複雜的數學難題。甚至不少程式員對他們是做什麼的都沒有清晰的概念。在這篇文章中,我想給不知情的人解釋一下程式員到底是做什麼的:

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 iscompetently 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點。)
  •   面向人類和面向硬體對象/系統的程式員有很大不同。

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

    譯文出處:伯樂線上- 職場部落格 - 程式員
      譯文連結:http://www.jobbole.com/entry.php/821

      原文:Andriy Solovey  文章推薦:關關  翻譯:敏捷翻譯 - 魏哲

     

     

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.