三十功名塵與土——資深程序員生涯自白

摘要:作者Codist(網名)在程序員崗位上工作了三十多年,在這期間他悟出了一些真理,比如,成功來自對失敗的總結學習;條條大路通羅馬,羅馬并不在乎你用什么方式到達。你在生活中積累了哪些經驗呢?不妨與我們分享下。

在程序員崗位上工作了三十多年,我學到了也明白了一些事情,希望在這里跟大家一起分享:

  • 看不到實物,客戶不會知道自己想要什么

一個功能性原型系統的展示,能夠省下無謂低效的贅述。

  • 只要給予足夠的時間,任何安全措施都不安全

安全是目前系統運維的重大挑戰,我們每時每刻都想方設法來保護系統和數據,但是黑客只要成功一次,我們所有努力就極有可能都付諸東流。

  • 系統被攻破后造成的影響,依賴于事前的準備功夫

如果能夠預先估計防護系統失效的后果,做足準備措施,例如:把關鍵數據單獨分離存儲,對數據進行加密等,那么或許可以減少日后上頭條的機會。

  • 良好的安全部署不僅僅是開銷,而是戰略資產,如果吝嗇于此,代價將不菲

在工作中,我總會聽到人們常常抱怨安全運維是多么的復雜和昂貴,因此,總不時看到某些企業為了蠅頭小利,以犧牲安全性來節省開支,最后不得不多吞下N倍的苦果。

  • 復雜問題簡單化,遠比普通問題復雜化困難得多

在任何創造性藝術領域,如:編程,設計,這都是個常見現象。我會盡力把代碼寫得簡單易懂,不論是為了自己還是別人;如果你想展示自己的聰明才干,而故意把代碼變得復雜,那么維護會是件可怕的事情。當然從保護知識產權角度來看,這本無可厚非,但或許會失去開源軟件的活力與創造力。

  • 成功來自對失敗的總結學習,如果一再容忍失誤,失敗與成功注定是兩條平行線

當人們對自己的錯誤習以為常,那么創造出來的可能是毫無價值的產品。我們需要訂下目標:只允許自己犯同類型的錯,一次。只有嚴控錯誤頻率,才能不斷提高軟件開發水平。

  • 永遠不變的是變化

僅根據今天的情況來制訂明天的計劃,是不明智的。特別是在編程的世界里,沒有亙古不變的死路子。反對技術進步,閉關自守,不接受或嘗試新事物,注定是不會成功的。

  • 終身學習

我最喜歡的一個說法是:我們背后都跟著一個大滾筒,只要稍微停下,就有可能給絆得人仰馬翻,因此,我們必須比它跑得更快,不斷前進。當我們自認已掌握一切后,殊不知其實是倒退的開始。

  • 整個軟件業充斥著野驢猜想

古時候,先知者如果預言失敗,會給石頭活活砸死;而現在,即使預判失敗,專家們都可全身而退,不過去做另外一次預判罷了。因此,野驢猜想盛行,人人都喜歡去預判下論斷,一個浮躁的年代。

  • 條條大路通羅馬,羅馬并不在乎你用什么方式到達

客戶不會關心你會遇到什么問題,他們只想你的軟件能解決他們的問題。系統宕機,硬件損壞,黑客攻擊,這些對客戶來說毫無趣味可言。如果不幸發生這些囧事,老實交代是較好的做法,特別是被客戶清晰知道你將如何解決這些問題前。

  • 客戶才是最好的質量標準

不論你有多少的測量指標,進行了多少回代碼回顧,通過了多少個驗收清單,這些其實都是次要的;最關鍵是我們做到客戶所期望的,沒有做多余的無用的。記住,客戶才是最后把關的QA。

  • 無記錄,不成功

時至今日,我仍然覺得人們如果不去收集日志,崩潰報告等有用信息,是多么的我伙呆。我一直堅持做的是進行盡可能詳細的記錄,追蹤崩潰情況,閱覽復核報告和備注,和其它任何能迅速定位錯誤的事情。

  • 盡管存在更好的辦法,但是時間不會停下來等你

在做評估時,最困難的是取得終止和繼續之間的平衡。如果終止,或許會失去找出更好辦法的機會,但如果這辦法需要耗費過長時間,其實沒多大價值。這是個艱難的抉擇,但有時候今天做出的快速選擇,會比明年才得出的好選擇更管用。

  • 尋找有錢的金主

曾合作過的一名銷售人員的觀點讓我印象深刻:找到一個不懂技術但有很多錢的人,如同找到了一個大金礦。聰明的人會問太多問題,貧窮的人不能給予你回報。我由衷地為自己成為程序員感到高興!

  • 我的工作是對客戶撒謊,你的工作是讓我看起來是一個好人

還是前述的那名銷售人員,他喜歡口頭允諾客戶完成不可能的任務,并在我們最終完成任務后,捷足先得我們的獎賞與贊譽。盡管挑戰難題會很有成就感,但每次的副作用是無盡的痛苦。我的建議是:盡快尋找另外一個更好的銷售!

作者簡介:

作者Codist(網名),目前從事iPhone 應用開發,擁有10年的Java架構師/開發經驗,現已轉投PHP;擅長Fortran、Pascal及各種匯編語言包括C、 C++、 SQL、Objective-C、Java、JavaScript、PHP;同時他還是一名Web設計師,專注HTML/CSS/Ajax等領域。

英文出自:Thecodist

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

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

相關文章

linux/unix核心設計思想

1) 程序應該小而專一,程序應該盡量的小,且只專注于一件事上,不要開發那些看起來有用但是90%的情況都用不到的特性; 2) 程序不只要考慮性能, 程序的可移植性更重要,shell和perl&…

操作系統環境變量

在 Java中,許多類都是 Iterable ,主要包括所有的 Collection 類(但不包括各種 Maps )。 例如,下面的代碼可以顯示所有的操作系統環境變量: // collections/EnvironmentVariables.java // {VisuallyInspect…

用Unix的設計思想來應對多變的需求

摘要:無論是Unix設計,還是面向對象設計,還是別的什么如SOA,ECB,消息,事件,MVC,網絡七層模型,數據庫設計,等等,他們都在干三件事——解耦&#xff…

學習較底層編程:動手寫一個C語言編譯器

動手編寫一個編譯器,學習一下較為底層的編程方式,是一種學習計算機到底是如何工作的非常有效方法。 編譯器通常被看作是十分復雜的工程。事實上,編寫一個產品級的編譯器也確實是一個龐大的任務。但是寫一個小巧可用的編譯器卻不是這么困難。…

Arrays.deepToString() 方法同時適用于基元數組和對象數組

Arrays.deepToString() 方法同時適用于基元數組和對象數組: import java.util.*;public class MultiDimWrapperArray {public static void main(String[] args) {Integer[][] a1 { // Autoboxing{ 1, 2, 3, },{ 4, 5, 6, },};Double[][][] a2 { // Autoboxing{ {…

高效程序員的7個共同特征

要想成為高效的程序員,你需要具備一定的綜合素質才能夠讓你用你所掌握的技能、經驗和知識編寫出有效的代碼。有一些開發人員在技術方面具備一定的技巧,但他們永遠無法成為高效的程序員,就是因為他們缺乏所需的其它幾項特質。本文將給出成為一…

java.util.Array中的方法

概述 asList(): 獲取任何序列或數組,并將其轉換為一個 列表集合 (集合章節介紹了此方法)。 copyOf():以新的長度創建現有數組的新副本。 copyOfRange():創建現有數組的一部分的新副本。 equals():比較兩…

有關編程的12個猜想

摘要:編程世界的將來如何目前仍難預料,但可以肯定的一點是技術一直在加速發展。本文搜羅出12個獨特的編程視角猜想,一起來看看有哪些猜想在不久的將來就能變為現實。 編程世界的將來如何目前仍難預料,但可以肯定的一點是技術一直…

面試中如何剔除“魚目混珠”程序員?

公司招聘面試事宜是一個耗時耗錢的項目,從挑選簡歷開始,還要花更多的時間面試候選人。有的時候這些人才機構會向你保證這些人都是Java天才、SQL專家、堆棧開發者等等,但實際上真實情況遠不及你想想的。對于一個公司來說,執行招聘面…

InputStream 類型

輸入流類型 I/O-1 類功能構造器參數如何使用ByteArrayInputStream允許將內存的緩沖區當做 InputStream 使用緩沖區,字節將從中取出作為一種數據源:將其與 FilterInputStream 對象相連以提供有用接口StringBufferInputStream將 String 轉換成 InputStr…

java容器相關問題

同步類容器 1,這些復合操作在多線程并發地修改容器時,可能會表現出意外的行為,最經典的便是ConcurrentModificationException,原因是當容器迭代的過程中,被并發的修改了內容,這是由于早期迭代器設計的時候…

趣文:如果編程語言是車

C語言是全能手,小巧,強大,所向披靡,可靠,任何事情都能對付。 C是新的C,雙倍的能力,雙倍的尺寸,適應險惡的環境,但是你如果沒練好就去駕駛,很可能會撞車。 C#是…

Java 線程安全

線程安全 線程安全概念:當多個線程訪問某一個類(對象或方法)時,這個類始終都能表現出正確的行為,那么這個類(對象或方法)就是線程安全的。synchronized:可以在任意對象及方法上加鎖…

開發者應該了解的API技術清單!

摘要:有人說,有API的地方就有App,借助這些API開發者輕松構建出一款應用,極大地提高開發效率和開發質量。文中整理了一份API服務清單,內容涵蓋:監控/調試、 CDN 、數據庫、儀表盤、支付、通信等方面&#xf…

提高程序員職場價值的10大技巧

如果你已經是個很牛叉的程序員,但是依然覺得覺得還不夠的話,歡迎閱讀此文。本文旨在幫助各位更上一層樓。 你是不是覺得自己已經掌握了所有的編程技巧?別太自以為是了! 會寫代碼的確很重要,但是要拿到更好薪水&#…

google python的風格規范

點擊鏈接,查看內容

IT人應當知道的10個行業小內幕

如果你打算從事IT行業或剛進入這個行業,也許本文下面的小內幕會嚇到你,因為這些事平常都不會公開討論的。如果你是IT資深人士,或許你已經遇到其中的大部分了。如果你愿意,請一起來參與討論吧。 這些內幕大多數是針對網絡管理員、…

Volatile原子性一致性JVM指令重排

概念 Volatile概念:Volatile關鍵字的主要作用是使變量在多個線程間可見。作用: 在多線程間可以進行變量的變更,使得線程間進行數據的共享可見 阻止指令重排序,happens-before package com.example.core.cas;import com.example.c…

python修改文件內容,不需要read,write多個動作。

python 要修改文件內容,常用 是先read,后write , 再 rename,很不爽。 比如:需要 把 yuv_dir "../HD/" # "H:/HD_Master/1080i25/" 改為 yuv_dir "C:/HD/" # "H:…

Atomic系列類

Atomic系列類別 Atomic系列類封裝了一系列的基礎類型和對象操作,其主要目的就是為了實現原子性,主要核心類如下 AtomicIntegerAtomicLongAtomicBooleanAtomicIntegerArrayAtomicLongArrayAtomicReference 原子性的引用對象在對Atomic類操作的時候&…