軟件開發從業者的職責
軟件與我們的生活息息相關。我們的汽車中裝載了各種軟件,我們的交流建立在軟件的基礎之上,我們日常生活中幾乎每個的設備都包含了軟件部分。最近所發生的 一些事件向我們警示了使用軟件的潛在問題和危險。eBay、Sony和其他公司的海量客戶數據被盜。本文的許多讀者肯定也深受其害。此外,愛德華·斯諾登 所曝光的信息也向我們展示了軟件給我們的隱私所帶來的巨大影響。在過去的幾年中,我意識到如下事實:讓這些丑聞成為可能的是我們這些軟件開發從業人員。我 們的軟件影響了這個星球上大部分人的生活。我們的系統被黑客攻擊并利用。我們的雇主和客戶使用我們的軟件改變世界,無論好壞。歸根結底,是我們構建了這樣 的軟件。在過去幾十年中,我們已經學到了許多關于如何構建良好可信的軟件的知識。軟件危機讓我們能夠意識到自身的技術限制,作為優秀的工程師,我們發明了 流程和方法以掌控復雜性。不幸的是,我們忽略了超出技術挑戰之外的東西,忘記了我們所需承擔的越來越多的責任。軟件行業仍然十分年輕。第一個現代化程序設 計語言發明于五十年前。三十年前,個人電腦尚未在家庭中普及。與此同時,在這五十年中軟件行業所帶來的影響也是史無前例的。圖版印刷的發明曾經一直不斷地 改變著我們的世界,這一變化持續了將近300年的時間。汽車的發明也讓我們的世界發生了一些變化。而汽車的大規模推廣則花費了大概150年的時間。如今, 幾乎每個國家都有獨立的機構以保證汽車的安全性,驗證新的模型可以為公眾使用。醫學或土木工程這類職業已經有幾千年的歷史。這些學科有足夠的時間開發一套 像希波克拉底誓言一樣的道德規范集。而這些規范成為這些職業的職責還需要一些培養。古希臘的建筑師必須要和其家人一起在新建的橋梁下居住一個星期。如果橋 梁的建造質量太差,那么他們就會為此承擔相應的后果。作為軟件開發從業人員,在相當短的時間里我們就已經累積了巨大的影響。但同時,在同樣短的時間內我們 也必須面對伴隨這一影響而來的責任。在過去的幾年中,我一次又一次地碰到相同的話題,關于責任我與許多優秀的軟件開發人員也有過非常有意思的討論。基于這 些討論,我與其他人共同創建了“ 良心軟件開發宣言 ”,以此鼓勵與我們的責任相關的想法和討論。在后續的章節中,我將為讀者講述宣言中各個方面背后的邏輯。
良心軟件開發宣言為了培育自由和公平的社會,我宣誓我將會憑著我的良心和尊嚴從事我的職業。我將嚴格遵守如下原則:
從道義的角度出發,我將為我的決定負責并且會遵從良心行事。軟件對我們生活方方面面的影響正在持續不斷地增長。我確認我們的工作對人類和環境所造成的影響。
我不會開發意圖侵犯人權和公民自由的軟件。隨著現實世界與數字世界之間的界限越來越模糊,使用軟件侵犯個人或人權的可能性也隨之增加。我深知一旦軟件發 布,便再也無法控制,因此在開始實施之前,我有責任思考我的軟件是否有可能侵犯人們權益。我將拒絕參與會促進這種情況發生的項目。
我會做一個值得信任的行業專家。對于大部分用戶來說,復雜軟件的使用不當所帶來的潛在負面影響是難以想象的。因此作為軟件開發從業人員,我們有責任與用戶明確溝通正確使用軟件的邊界。當意識到我所發布的軟件不再適用時,我至少需要讓潛在和已有用戶了解這一情況。
我只會收集完成任務所必需的數據。并且只會在需要時才保存數據。我的應用可能會收集個人信息。我會保護這些信息并且只有經過信息提供者授意時才會使用這些信息。我會將用戶的數據完全當作自己的數據看待。
我會盡我最大的努力防止能量和資源的浪費。裝載軟件的設備數量的增長對全球的資源和能量的使用具有十分強烈的影響。
我鄭重地做出這些承諾,自主的并以我的人格保證。 從道義的角度出發,我將為我的決定負責并且會遵從良心行事。 軟件對我們生活方方面面的影響正在持續不斷地增長。我確認我們的工作對人類和環境所造成的影響。 當我在尋找第一份專職的軟件開發工作時,我給自己制定了一條簡單的規則。我永遠不會為武器制造商編寫軟件。關于這一條規則,過去幾年中我和別人有過非常激 烈的討論并且我也知道我的這一決定的支持方和反對方都有很好的理由。武器是一個非常有爭議的話題。每個人都有各自的觀點,并為自己的觀點辯護。不過我們應 該不斷搜尋我們的工作可能帶來的意想不到的負面影響并根據個人的價值觀做出決定。我認識一些為武器系統編寫軟件的人。他們用愛國主義和國防事業為自己的這 種行為辯護,但當防空防御導彈被叛軍竊取,并用于摧毀一架乘坐了298名無辜乘客的民用飛機時又會怎樣?最初,當我將武器、核能、飛機或計算機游戲方面的 工作排除在外時,向我開放的潛在工作機會也隨之減少。但是只要我開始了一份工作或一份合約,我就必須為我的工作所帶來的影響承擔相應的責任。武器是一個非 常引人注目的話題。每個人都有各自的觀點,并為自己的觀點辯護。不過我們應該不斷搜尋我們的工作可能帶來的意想不到的負面影響并根據個人的價值觀做出決 定。
我不會開發意圖侵犯人權和公民自由的軟件。 隨著現實世界與數字世界之間的界限越來越模糊,使用軟件侵犯個人或人權的可能性也隨之增加。我深知一旦軟件發布,便再也無法控制,因此在開始實施之前,我有責任思考我的軟件是否有可能侵犯人們權益。我將拒絕參與會促進這種情況發生的項目。 愛德華·斯諾登曝光的信息向我們展示了如今可能的監視程度。到底有多少人的隱私受到影響超乎想象。關于監視的必要性的辯論與關于武器的辯論一樣富有爭議。 但事實是我們擁有確保無辜群眾隱私權的法律。如今這一隱私權已經被軟件大大削弱,我們距離喬治·奧威爾的1984已經不遠了。作為軟件開發從業人員,我們 更應該意識到一旦軟件發布,就無法再撤回。有時我們的程序會出現在我們創建它們時永遠無法想象的地方。也許我們在嘗試建立下一代人臉識別算法之前,就應該 思考可能會出現的濫用?
我會做一個值得信任的行業專家。 對于大部分用戶來說,復雜軟件的使用不當所帶來的潛在負面影響是難以想象的。因此作為軟件開發從業人員,我們有責任與用戶明確溝通正確使用軟件的邊界。當意識到我所發布的軟件不再適用時,我至少需要讓潛在和已有用戶了解這一情況。
作為軟件開發從業者,很難理解大部分用戶為什么對技術限制缺乏理解。關于這一點,有影響了大批的用戶和開發者的真實案例。直到“心臟出血”漏洞被 曝光之前,只有少數的開發者考慮過OpenSSL的安全性。幾乎沒人知道當時只有一名員工負責OpenSSL。沒有人意識到OpenSSL的限制。我無法 檢查所有外部庫的缺陷和安全問題。我依賴于文檔和其他開發人員的陳述。這意味著其他開發人員也會依賴于我的陳述。當我成為某個特定活動領域的專家并且發布 或售賣軟件時,我應該十分清晰地傳達相關的技術限制。我的軟件的用戶通常對它的性能缺乏經驗,因此我有責任讓它更加容易理解。
我只會收集完成任務所必需的數據。并且只會在需要時才保存數據。 我的應用可能會收集個人信息。我會保護這些信息并且只有經過信息提供者授意時才會使用這些信息。我會將用戶的數據完全當作自己的數據看待。 有一些來自于“永久保存一切”這一心態的擁躉們的論據。他們聲稱“我們只保存元數據,而非真實數據”。他們聲稱“我們需要所有的數據以便為我們的客戶提供 更好的服務。“這兩個論據都是虛偽,不誠實的。如今搜集和販賣數據已經是十分常見的商業模型。如果你想這么做,那就誠實一點,不要將真正的目的掩藏在虛偽 的論據之后。即使你并非有意販賣數據,有一些危險你也必須了解并加以控制。大量數據所帶來的能量總會引來第三方不必要的注意力。當你存儲了大量數據時,就 會有人試圖竊取這些數據。這在像 Sony 和 eBay 這樣的公司已經發生過;你怎么能確定這不會發生在你身上呢?而且即使你可以保護自己不受黑客的攻擊,還會有政府部門像你索要 服務器的訪問權限 。如果有人竊取了你的數據,最好的情況是聲譽上的損失。如果運氣不那么好,甚至會有官司纏身。你可能會因為你是一個理想主義者并且相信世界是美好的,而考慮數據保密性。即使這不是真的,也有很多很好的對自己有利的理由值得你仔細考慮所搜集和保存的數據。
我會盡我最大的努力防止能量和資源的浪費。 裝載軟件的設備數量的增長對全球的資源和能量的使用具有十分強烈的影響。 谷歌和其他一些公司在再生能源上數以億計的投資必定有其原因。數據中心的操作會消耗大量的能源。優化軟件使其具有更佳的能源效率,當這一優化擴展到上千臺 服務器上時,就會產生很大的影響。與此同時,當一個寫的很糟糕的應用在數小時內就耗盡智能手機的電量時,我們每天都在經受低效軟件所帶來的苦果。作為軟件 從業人員,我們對系統的能源消耗有著巨大的影響。除了顯而易見的生態方面的原因之外,進行資源優化也有經濟方面的考慮。數據中心中的高效軟件可以降低我們 的服務器的運營成本。耗電過高的應用在應用商店中的評分會很差。這兩種場景都能夠有真金白銀的費用浪費或節省。無論你想要拯救世界或只是拯救你的工作場 所,花些心思在我們軟件的能源消耗上都是相當重要的一項任務。
總結
上述所列的所有主題都是老生常談。但大部分的軟件開發從業人員仍未意識到我們對社會和個體的影響有多么大。這種影響日益增加并且短期內會一直持續下去。我 們通常也會忽略那些看似微小的決策對社會和生態所產生的影響。作為一個年輕的行業,我們應該直面我們所應承擔的責任并應對我們的產品和項目所帶來的影響。 在此我想鼓勵所有的讀者仔細思考各自的工作場所和最近的項目。關于應該回絕哪些工作,是否有條紅線?關于公司如何存儲數據,是否有一定規范?與你的同事討 論這些話題和 宣言 。你會很驚訝地發現,他們中許多人的觀點你并不了解。
關于作者
Nils L?we 是 Vedaserve 的聯合創始人和CEO,這是一家專注于利用 proofler 之類的工具完成基于知識的決策的技術型初創公司。他幫助有潛力的創始人塑造并測試他們的商業模型以及創建最初的原型和最小化可行產品(MVP)。Nils采用整體處理法并且喜歡擔任多個角色,如開發人員、架構師、教師和經理。了解更多信息可以訪問 nils-loewe.de 。