程序員應該有哪些碼德?


作為一個在碼工界干過15年的人來說,最有碼德的事情我認為應該是絕不加班。
----------------------------------
可能對於剛乾這行不久的碼工來說,絕不加班就是逃避工作的代名詞。但是作為過來的老人很明確的告訴你,想做到這點還能安心的拿錢公司還不能對你嗶嗶啥是沒那麼容易的。

一般來說,要加班趕工的項目,問題其實都出在最開始的階段,要麼目標不明,要麼跟用戶交流不暢,要麼誇大海口結果給自己惹來一堆麻煩。而開始一旦出問題,造成的錯誤會形成累計效應,越到後面很可能越麻煩,甚至驗收後都無法收場。

剛開始工作的時候,項目的談判都是由商務組的傢伙去談的,這些傢伙基本沒有什麼節操,他們的收成只跟項目提成有關係,所以他們在談判的時候會答應不現實或者很扯淡的技術要求,主動跳進對方給出的售後服務陷阱(比如說並沒寫明售後服務範圍和時間範圍)只為求快速簽署合同。甚至根本沒明白對方說了啥就拿回來一個離題萬里的需求,反正只要工程驗收後他們就能拿到提成,所以他們並不在乎會帶來多大麻煩。這樣的干法就只會帶來無窮無盡的加班,哪怕你代碼寫的再好再利於維護加班到猝死,都沒任何意義,因為從一開始就錯了。

後來在我工作一段時間後,幹掉了幾個難以驗收的項目。我這時候覺得不能放任那幫根本沒有軟體思維的傢伙去跟客戶胡扯,我對boss表示開發人員應該參與商務談判。而且事實證明本公司商務對客戶的思維理解經常都是離題萬里的,boss也早已被各種爛尾搞的頭痛不已。但是出於傳統(不讓技術人員跟客戶接觸,以避免技術人員挖了客戶自己玩)他開始並沒有採納意見。但是有一次在大連做項目,本地的軟體公司已經做了客戶一部分的工作,boss利用關係半路截胡。本地公司當然不願意,然後兩邊開始撕比,本地公司要求我們完全包容他們的系統,而客戶急著趕快完工趕奧運的趟。這時候商務開始乾瞪眼了,因為牽涉到了軟體問題,這爛事丟在了我頭上。我去後跟對方客戶交流,客戶要求1個月內系統上線工作,而boss對我說的是你得讓客戶相信這破事一個月肯定做不完,這樣我們就能成功的趕跑本地公司。我跟本地公司的技術總監胡扯了一晚上,對方年紀有些大了,最後被侃暈了承認1個月搞不完。然後這事就變成了本地公司出硬體,直接上咱們的成熟軟體,一個月完成。

從這事以後,boss才算看明白商務談判不能缺乏技術的重要性,後來數次工程,都先讓我去跟客戶談判。在清晰的了解客戶的需求,有了完整完善的前期設計和完備清晰的驗收項目合同後,基本再也沒加過班。對於這種談判能力,其實是碼工的一個很好的轉型,畢竟代碼民工是不能長期乾的,而這種跟人打交道的技術工作,其實很適合碼工轉型。當然,你要是你很靦腆,見人就臉紅那就沒招了。我參與技術談判有幾點心得:你得完全了解你所在公司的軟硬體實力,明白有那些弱點和特長,在談判的時候你得敏銳的分析出客戶的想法有那些可能會很難搞又沒有多大意義。你得引導客戶往本公司擅長的技術上去思考。你得引導客戶,而不是只聽客戶怎麼說你就怎麼做。在我朝現在做軟體應用,3分看技術7分看人,應用性的軟體一般不追求技術上的頂級高端,出的問題多半在於人與人的交流錯誤上。你得做一個擅長與人交流的碼工才能真正應付。

當然,你要是是做手機軟體之類玩人氣吸眼球的項目,我這套並不太適合。


我把這些看成是作為一個程序員的基本素質,多數是編碼之外的事情:

  • 代碼每天備份;(預防意外導致的任何損失)
  • 上傳代碼時寫清楚log信息;(為維護這個模塊的人著想,有可能是你自己)
  • 提供介面時不要把問題拋給使用介面的人,升級或者變更介面時不要刪掉原來的介面;(為使用你介面的同事著想)
  • 變數命名要見名知意;(起碼不能誤導別人)
  • 在工程中新建一個doc文件夾將項目相關的文檔放在該目錄下,方便後面維護的人員理解項目和代碼;(為維護這個模塊的人著想,有可能是你自己)
  • 簽署bug或者轉辦bug時寫明分析結果和轉辦原因;(讓測試員知道你的改動是否對其它功能有沒有影響,讓改這個bug的人知道你的分析結果和轉給他的原因)
  • 向身邊的同事或者在網上提問時,先要有自己的分析和思考;(不要浪費他人的時間)
  • 不私自接受功能變更,不私自增刪功能;(做一個執行者,決策會有該做決策的人去做)。
  • 離職或者換崗的時候做好工作交接;(善始善終)

記住:程序是寫給人看的,順帶能在機器上運行!


道義:出現 BUG 時,應該首先想到自己的同伴。
禮貌:抄別人的代碼時,不要忘記禮貌的修改 copyright 信息以及介面部分的函數名。
信譽:使用了開源的技術時,應該遵守契約精神的在不起眼的地方提它一句。
智慧:系統里你留下的後門,別人看代碼都找不出來。
勇氣:想把別人的代碼換掉前,要拿出勇氣來告訴上司和其他人,那是一坨shi。
仁愛:對同事充滿友愛,即使想拍死人家的需求,也要充滿關愛的向人指出那是想入非非。
寬容:上司對自己的批評要懂得寬容,上司也不容易,等他說完就大度的讓這事情過去吧。
低調:出現問題時如果意識到是自己的bug,要低調點,等事情過去後,不經意間修正。
務實:虛的項目(沒錢途)不要去惹,虛的理想不要去聽。


樓上說得太複雜了。所謂碼德只有一條:寫得足夠清楚易懂,如果代碼本身不能清楚易懂,寫清楚易懂的注釋。
這麼做的原因有兩條:
一,你以後有可能還會維護你的代碼,所以要有對你自己友好的碼德,簡稱你碼德。
二,你的代碼可能由他人來維護,所有要有對他人友好的碼德,簡稱他碼德。


碼德這個詞兒。。能把我國國罵洗白不?
難道讓我們誇同事:
你碼德真好。


作為一個從95年就開始寫代碼,05年開始正式以編碼為職業的老碼農,我覺得很重要並且一直以此來要求我自己和我的團隊的一點就是,遇到問題不要推給並發的線程用到的庫使用的ide基於其上的操作系統以及不確定的各種隨機因素,而是踏踏實實找到根源,是自己的問題坦然說出,不是自己的問題就找到對應的人。

另外補充兩點:
1. 寫恰到好處的log. 恰到好處的意思就是,log可以反應出關鍵信息,不太多,不太少,足夠在遇到問題時候給出進一步分析的方向。

2. 不以cannot repro拒絕qa開出來的bug. 想要達到2,其實也需要做好補充的1。qa能repro更好,但很多時候也很難,但偶發的bug在用戶量大的時候是必然會發生的。

總之,做最好的自己。


所有答案匯總成四個字:「草擬碼德」


求求一些同學們把別人的代碼看懂了再寫好么。。。不要隨意嚇加啊。。。

本來改個常數就好的事情生生的給多寫出了好幾行啊。。。自己累不說,別人還要去整理啊,到處滿篇都是常數啊。。。

還有一個函數寫一遍,別人不看,又寫一遍,再寫一邊,搞毛啊這都。。。

然後什麼東西就知道加加加加加啊,最後一個class裡面老子開ide看structure都看不全啊。。。
然後不該寫在這個地方的code瞎寫啊,分明那個file是專門用來連接前後端的,老子在後端看code看了半天覺得有東西不對啊,結果看到結果被送到那個file又有幾十行代碼才送到前段啊。。。

然後滿世界都在get前端的東西啊。。。我看一個函數順著裡面的東西trace 800 層才看到你的request.form。。。坑爹那!一直以為你沒用那個variable。。。


0.自己測試自己寫的代碼。
1.寫注釋
2.追求卓越
3.自己的bug自己解決。
4.遵守代碼規範,
5.勇於重構自己和別人的代碼。
6.提交代碼前一定保證編譯通過。
7.解決bug,而不是隱藏bug
8.勇於造輪子,對偉大的輪子也頂禮膜拜
9.保持好奇心和學習心態。


這是我一前同事...


推薦一位IT精英的博客,博客地址:

  • zhuweisky - 博客園

不為繁華易匠心

做技術是需要匠心的。什麼是匠心?我們原本是有匠心的,我們如今還有匠心嗎?我們為什麼沒有匠心了?為什麼我們要重拾匠心?如何重拾匠心?


一. 做技術是需要匠心的

中國古時的玉匠,切磋琢磨,用繩與砂漿,費數十載心力,終將渾然璞玉製成傳世珍品,千年遺音在,猶見當年寂寞心。

日本傳統的刀匠,將千錘百鍊之鋼反覆鍛鑿、淬火、打造、磨製,每一處技至精微,每一處心入幽明——刀中有魂!

歐洲中世紀的石匠,在哥特式教堂的飛檐上雕刻出了靈獸狀噴水嘴,雖不為世人所見,仍一絲不苟——每一鑿中都有天堂!

米蓋朗基羅花四年雕刻出了震驚世人的《大衛》,曹雪芹批閱十載創作出了藝術巔峰的《紅樓》——任何偉大的作品背後都有一顆匠心。


二. 什麼是匠心?

匠心是對於作品而言的。

匠心是傾注於作品之中的精神、情感、乃至魂魄。

匠心發自於愛,是對作品視如己出的拳拳之心,是恆久忍耐又有恩慈。

匠心是出於這份愛的對於完美的追求,是追求中不避艱苦,是追求中自得其樂。

匠心是涵泳在作品之中的自我實現,是我與作品的相互完成,彼此造就。

在匠心看來,作品是我的至親之物,棲居著我的精神,安放著我的靈魂。

匠心即是愛心 + 恆心 + 一片苦心 + 七竅玲瓏心 + 出離心 + 寂寞心 + 金剛心 + 歡喜心 + 其人雖已歿,千載有餘情。

三.我們原本是有匠心的

我們原本是有匠心的。

當年Ken Thompson 和 Dennis M.Ritchie 一起在貝爾實驗室里苦心孤詣。

如今,沒有人不知道Unix意味著什麼,C意味著什麼。

他們的匠心也彰顯在Unix和C中令無數人為之驚嘆、感懷。


四.我們如今還有匠心嗎?

如今,我們再也難得見到「作品」問世。

甚至於「產品」也是少見。見得最多的則是「商品」。

對於我們而言,做什麼東西並不重要,重要的是做這個掙不掙錢。於是我們沖著掙錢做了各種項目,C/S、B/S、前端、後端、資料庫、Java、.Net、安卓——彷彿無所不知,無所不曉,十年之後回首,覺得自己已然是全才。

我們從事了大量的勞動,寫了幾十萬行代碼。我們的工資越來越高,並為此沾沾自喜。

可是,這樣的成就,無非是一個熟練工人的成就。

我們何曾擁有匠心?

五.我們為什麼沒有匠心了?

隨著大生產時代的到來,那種田園詩般的男耕女織、帶月荷鋤歸的工作方式,早已一去不復返。社會分工越來越細碎化,我們面對的是一個又一個的局部。在這之中需要的是規格化、標準化、量化和同質化。換言之,你所做的工作必須是合乎統一規範的,具有統一規格的單元,如此才能拼接到整體的工作中。因此,任何的創造性,任何私人性質的感情和精神的注入,歸根到底,只是錯誤的根源。 ——我們於何處安放匠心?

如今,商品成為了一切物所具有的普遍的形式。沒有什麼不是商品。商品是以交換為目的的。我們生產任何勞務、產品、或服務,都是為了交換,為了換取一般等價物,即貨幣,即金錢。因此,錢成為了衡量一切的準繩。如今不乏偉大的商品誕生,可是偉大的作品卻乏善可陳。商品需要的是批量生產,需要對消費者投其所好,當然商品也需要創意,可是那不是匠心!在一個由商品拜物教統治的時代,我們於何處安放匠心?

世界如此繁華,匠心未免太奢侈了!我們在喧嘩與騷動中度日,有太多的追求,太多的比較,太多的你追我趕,太多的惶惶終日。每天有看不完的新聞,刷不完的微博,做不完的手頭工作。我們為無盡的事情發愁,疲於奔命。匠心未免太奢侈了!早在我們出生的那一刻,我們就開始照著大家來活,大家都在讀書,大家都在考學,大家都在找工作,大家都在結婚,大家都在買房,大家都在炒股,當我們跟著大家忙忙碌碌的時候,匠心自始就已沉淪!


六.為什麼我們要重拾匠心?

假使我們沒有匠心,我們將不會在工作中獲得真正的快樂。因為我們不能自覺自由地工作,我們的工作是boss定義的,而不是自己定義的。如此一來,我們就與我們的勞動之間切斷了血肉聯繫。我們的勞動成為了壓迫我們、奴役我們的異己力量。我們淪為被迫勞動。我們真正的生活在下班之後開始。我們不停地抱怨:要不是為了幾個臭錢,我才不要干這些。如何才能回歸到那種田園詩般的勞作之中——我們必須重拾匠心!

唯有在擁有匠心之後,我們才能走向真正的自我實現。馬斯洛將人的最高層次的需求定義為自我實現。一個自我實現的人,一個將自己的才能發揮到最大限度的人,才是那個獲得最大心理滿足的人。現實生活中唯有少數精英才能夠成為自我實現人。但是這並不妨礙我們追求自我實現。一個有著庸碌之心的人,是不可能走向自我實現的。唯有重拾匠心,我們才能佔有工作的全部意義,才能不避艱苦、精益求精,與自己的作品相互完成,彼此造就。

七.如何重拾匠心?

對於如何重拾匠心的問題,恐怕要留給每一個人來思考。而且是一個需要始終思考的問題。

在這裡我並不想給出答案。

只希望能在這篇文章中能夠看見你,看見我,看見大家。

能見眾生便是如來,不易匠心方得始終。

參考閱讀:

程序員的出路之一

——————————————————————————————————


密碼加密!密碼加密!密碼加密!
我很難形容csdn密碼泄漏那一刻對我的衝擊有多大,我剛畢業的時候都知道密碼要md5加密保存,為什麼csdn連最基本的加密都沒有?別跟我說應付檢查一類的,設置萬能密碼或第二密碼就可以了。
在我看來,密碼不加密存儲,就是一種無道德的體現,很多小白網民的大部分密碼都是一個,那麼存明文幹嘛?後台寫個輪詢破解qq淘寶郵箱嗎?我使用csdn的時候還沒畢業,出於對csdn的信任,密碼設置成跟qq一致,泄漏後沒幾天,我所有的qq密碼全丟了!當然也是我不小心,但那一刻我對csdn充滿了失望!


懶惰,傲慢,缺乏耐心。


perl大法好!


這個不是碼德,只是執行碼德,為人處世的指南。
尊重只給值得尊重的人,道德只給理解道德的人。


喜歡寫代碼的, 就別想著搞別的
不喜歡寫代碼的,趕快轉換行業


資料備份(三份)
代碼注釋


寫的東西至少讓自己沒有罵人的衝動


寫注釋,標準化命名,不寫死數值。


第一碼德,respect other"s code, responsible to my code


推薦閱讀:

看了柴靜的《穹頂之下》,程序員可以為對抗霧霾做些什麼?
看機器學習論文時,看不懂數學公式怎麼辦?
為什麼知乎上 winter、趙劼、vczh三人常常被相提並論?
利用爬蟲技術能做到哪些很酷很有趣很有用的事情?
編程中,有哪些好的習慣從一開始就值得堅持?

TAG:互聯網 | 程序員 | 編程 | 程序 | 做人 |