程序猿,你該如何寫好程序?

2021-02-15 千鋒教育


為了能幫程式設計師如何正確高效書寫程序

減少bug,小千也是經過一番地毯式的搜索
總得出一下經驗

這既不是九陰真經

又不是葵花寶典

有的只是小對泥萌的一片苦心

閱讀本篇文章只要三分鐘喲!

寫代碼絕不是簡單無聊的勞動,程式設計師首先必須了解計算機的運行原理,然後需要把現實問題建模,並在計算機的世界裡精確地還原出問題的解決方案。既然代碼要交給功能強大的計算機去嚴格執行,程式設計師要擔負的責任就相當大,因為代碼的任何一點差異,都有可能影響程序最終的運行結果——因為程序的細小缺陷導致航天任務失敗的例子已經有好幾次了。

反過來說,程式設計師能掌握的權力相當大,成為「合格程式設計師」的門檻也相當高,雖然這種門檻並不為許多人所知,所以,要想成為稱職的程式設計師,必須正視寫代碼。

學校裡通常會安排程式語言的課程,但不會教「怎樣把程序寫好」的課程。許多人對計算機的理解還停留在「科學與理論」的角度,只要程序能「對」,能輸出正確結果就可以;卻不知道如今與計算機相關的大量工作,其重心已經轉移到實踐和工程意識的方面了。這種錯誤的理解,導致很多程式設計師在工作之後相當長的時間裡,學習的內容還局限於鑽研理論和算法,一直忽略了「把程序寫好」的補習。

其實市面上已經有一些教人「把程序寫好」的書籍,認真讀完這些書,認真落實其中的規範,至少能保證把程序寫「合格」,不會有明顯的缺陷,為將來把程序寫好奠定堅實的基礎。從我和身邊朋友的經驗出發,我覺得《代碼大全》、《重構》、《編程珠璣》、《程式設計師修煉之道》這幾本書都是很不錯的,如果能耐心讀完並認真思考,寫程序的水平會有相當的保證。

我們時常開玩笑說,現在很多程式設計師的工作,就是從網上下載一些開源項目,然後改改參數。其實這並非玩笑,而是很多程式設計師工作的真實寫照。充其量,他們還要做一些穿針引線的工作,把這些項目粘合組裝起來。

這看起來確實是簡單機械的勞動,也不會給人多少提升。但事實並非如此。很多好的程式設計師就在這個過程中學會了把代碼越寫越好。因為他們保持了好奇心,去探究這些開源項目的內部實現,把應用的過程當成了學習的途徑。在使用一個現成方案之前,先想想如果自己去解決要怎麼辦,再看看其他人的現成代碼,確保自己懂得了這些代碼蘊含的思維。

在談到寫程序時,經常有人引用奧卡姆剃刀原則,說「如無必要,勿增實體」;也有人引用愛因斯坦的話,「要足夠簡單,但不應該過於簡單」。由此證明,好的程序應當是足夠簡單而且非常優雅的。

在大方向上,我認同這種說法。但在具體的問題上,它未必正確。因為編程是與工程密切相關的工作,與工程密切相關就意味著大量的權衡、取捨。無論奧卡姆剃刀原則還是愛因斯坦的話,原本的主題都是針對理論的,所以兩者並不能嚴格劃等號。

在實踐中我見到過很多過份迷戀簡單、美感的程式設計師,我稱之為「玩套路」——他們太在意程序的形式美感,為了刻意追求那種嚴謹整齊的感覺而忽略了現實,也不懂得針對現實做出取捨,最終把自己套了進去。結果,用戶明明需要的一畝菜地,他們交付的卻是一份盆景,還振振有辭地指責用戶不懂技術。這樣的人,往往既當不好程式設計師,也成不了軟體開發工程師。

Code Review是提高代碼質量的有效手段,這一點大家公認。但是在很多場合,Code Review很難推行起來,原因之一就是程式設計師內心難以接受其他人對自己代碼的批評。

這種現象倒也情有可原,因為寫程序這回事,大家多少認為是有絕對標準,可以分出高下的。對大多數人來說,潛意識裡也確實很難區分「對我的工作的批評」和「對我的批評」。所以面對其他人對自己代碼的批評,除非是來自上級,否則多少有些面子上掛不住,天然有爭辯的衝動。

我們需要明白,不經歷挑戰和批評,人是很難提高的。其他人的批評,只要不是惡意的,總是能提供不一樣的視角,幫助我們更深入或者更全面的認識問題,這是很好的成長機會。

另一方面,團隊領導也應當營造平等合理的協作氣氛,倡導「對事不對人」的價值觀。這樣,才能讓更多的成員坦然接受對自己代碼的批評。

歸根到底,「榮譽感」是驅動個人不斷追求更高境界的源動力。對沒有榮譽感的程式設計師來說,「把程序寫好」充其量是不得已背上的負擔;而對於具有榮譽感的程式設計師來說,「把程序寫好」是需要不斷追求的目標。

程式設計師應當屬於德魯克說的「知識工作者」。對於知識工作者,我們就不能像對待機器和工人那樣去嚴格約束工作的過程,只能要求結果,或者說「找到合適的人,提供合適的環境,期待美好的事情發生」,這也是很多程式設計師享受的方式。但是,如果程式設計師不在乎自我驅動和追求,把寫程序當作不需要任何想像力和創造力簡單重複勞動,那麼「血汗工廠」的工作方式可能更能保證生產效率。

想獲取更多精彩內容

請關注千鋒互聯喲!

相關焦點

  • 程序猿的故事,看罷不禁捂緊胸口...
    」科比:「你知道洛杉磯凌晨四點是什麼樣子嗎? 」程序猿:「知道,一般那個時候我還在寫代碼,怎麼了?」科比:「額…….」二、女神:你能讓這個論壇的人都吵起來,我今晚就跟你走。程序猿:PHP語言是最好的語言!論壇炸鍋了,各種吵架。
  • 零基礎馴養一頭程序猿:從入門到結婚(上)
    程序猿胸前通常都會掛著公司的門禁卡,如果不在胸前,可以注意是不是揣到了口袋或者掛在背包上。戴手錶的猿類並不多,因為會妨礙敲鍵盤。可能會有一些圖新鮮的猿買來了各種智能手錶,為了證明沒有亂花錢而帶了幾天,最終都是放在一邊吃灰。為了保證寫代碼的手部舒適性,很多已婚程序猿也不會佩戴婚戒,除非你強力要求。
  • 做程序猿的老婆應該注意的一些事情
    來到這裡,你不懂程序都難。今天來說說一位女青年的老公以及他們的事兒。如有雷同,純屬巧合。十一年前我和程序猿第一次見面,還是大一軍訓期間。我甚至不確定程序猿是否記得那是第一次見面。當時不小心裝偽文藝參加了吉他社,想借一本吉他入門書,然後同在吉他社熱心的海哥說他一同學有,就帶著我去拿書了。
  • 30 個跟程序猿有關的成語
    花好約猿指花兒開得正好,周末無比美妙,增長黑客卻約程序猿一起去公司加班。自猿其說指程序猿有一套自己的語言規範,和程序猿溝通時,必須按照其語言規範來說話。猿氣大傷指出現BUG之後,程序猿一直自問,我到底哪裡做錯了。猿分已盡指程序猿離職後,常對老東家說的話。
  • 和觀世音菩薩做兄弟——一個程序猿的學佛體會
    和觀世音菩薩做兄弟—— 一個程序猿的學佛體會和觀世音菩薩做兄弟?沒錯。你哪個單位的?夢工廠嗎?我只是一個普通的程序猿。這就好像程序猿要靠自己一句一句寫代碼,寫出一個功能強大的軟體,恐怕很多年都不能完成,但如果能通過函數名來調用他人開發好的函數,實現起來就很容易了。
  • 如何做一個優秀的程序猿呢?答案原來在這裡……
    怎樣做一名合格的程序猿呢?很多人寫了很多年的代碼,不思考,結果就造成了只會寫代碼,不會思考代碼的陋習。這對自己的軟體編程生涯是很不友好的。下面我就來給大家分享下自己的一些感悟吧!技術是解決問題的工具,不是解決問題的根本:所有的代碼實現僅僅是用於幫助我們解決問題的簡單工具,真正能夠體現我們的能力的是我們的邏輯思維,我們的思考;少寫代碼:這句話看起來很矛盾。程式設計師的工作不就是寫代碼麼?
  • 程序猿轉項目經理?且看技術人才如何玩轉PM
    程序猿是青春飯嗎?加班熬夜的摧殘,代碼迭代的暴擊,從普通碼農到CTO,全憑一口仙氣撐著。也有人禁不住誘惑,轉型做了項目經理。卻發現項目經理的門檻也很高~轉崗項目經理之痛:程序猿屬性太強程序猿出身的項目經理,身上總有一種技術範兒。他們有的是技術大神,寫代碼吊打一片。團隊中有人摸魚,一眼就能識破。身經百戰,甲方的需求也能直擊痛點。然鵝,管理的BUG無處不在。
  • 把軟萌程序猿鼓勵師裝進VScode?最強交互彩虹屁,GitHub2.5k星標
    大數據文摘出品作者:笪潔瓊程序猿鼓勵師一直都有相當大的潛在市場,尤其是程式設計師因為工作內心焦躁時,如果有妹子坐在旁邊給他加油鼓勁,那麼寫代碼就沒有那麼難了。這個項目的名字叫RAINBOW FART,簡稱程序猿鼓勵師,當程序猿在敲代碼時,當敲到import,就會聽到軟妹子的聲音:「我的美貌已成功導入」,當敲到Fuck/shit之類的,則會聽到「要不要把產品經理揍一頓」。
  • 「程序猿計劃」C語言概述
    科技喵:大家好鴨~我是科技喵本喵~今天是第一次程序猿計劃的專題文章,我帶來了一個好盆友:程序喵~程序喵:各位大盆友小盆友叔叔阿姨爺爺奶奶弟弟妹妹們好!我叫程序喵~鑽研編程已有4年啦!不知各位喵友們的水平怎麼樣呢?
  • 程序猿才懂的幽默
    《c++程序設計語言》比《c程序設計語言》厚了幾倍。。。果然有了對象就麻煩很多。。//程序猿不會有這種麻煩的吧,應該2.昨天,看到一段腦殘到爆的Code,忍不住罵了句:靠,這特麼是哪個SB寫的?仔細一看,原來是自己上個月寫的……//中槍的,請躺好。。
  • 520程序猿用最時尚的方式說愛你
    520程序猿不遺餘力的想你的一天程序猿浪漫起來更讓人動心!程序猿可以用詩詞暗示對方,山有木兮木有枝,心悅君兮,君不知窈窕淑女,君子好逑。程序猿表白起來更讓人驚心!,代表著程序猿的熱情真愛,你 get 到了嗎?
  • 程式設計師鼓勵師 美女端茶倒水擦汗程序猿的春天
    程式設計師鼓勵師 美女端茶倒水擦汗程序猿的春天時間:2015-04-02 16:14   來源:華東在線   責任編輯:毛青青 川北在線核心提示:原題:程序猿的春天:約聘網等招聘網站驚現程式設計師鼓勵師年薪10萬來源:天涯社區 導讀:【程式設計師鼓勵師 美女端茶倒水擦汗程序猿的春天】今年的網際網路界比較逗,各招聘網站相繼出現程式設計師鼓勵師
  • 如何寫好C/C++程序
    因此,對於工程師來說,不應把學習幾門程式語言作為最終目的,而是要多快好省的"使用工具"實現自己的目的,開發出優秀的軟體。 1.4. 馮·諾伊曼模型至今顛撲不破 存儲程序理論至今已有五十年歷史,馮·諾伊曼模型今後仍是計算機的基本模型,非馮模型不是不可能,但卻越來越遙遠。
  • 「程序猿計劃」C語言的數據類型
    今天我和程序喵要來講講C語言的數據類型。程序喵……咦?程序喵:呼……呼……科技喵:(我竟無言以對)那……就讓我來先講講程序的主要組成吧!作為程序猿,我們要認真考慮數據結構以及操作步驟。(這啥玩意兒?看著78號字的稿子都讓我頭暈目眩!)程序喵:呼……呼?數據結構……操作……?!我醒了!你在說什麼?科技喵:!嚇我一跳,我還以為隔壁老王的煤氣灶炸了……程序喵:哼!別以為我不知道你的小心思!科技喵:???程序喵:又想趁我睡著講知識!
  • 為什麼程序猿的孩子普遍學習比較好
    我打賭,提到「程序猿」你腦子裡想到的是穿著背心大褲衩,深夜加班擼代碼的宅男形象。
  • 2020「程序猿等級測試題」,Are you ready?
    課小妹今天給大家準備了一套「程式設計師等級測試題」,快來看看你的「段位」到底處在哪個級別吧!◆2020程序猿等級測試題(全國卷)◆注意事項:1.本試卷共有10道單選題,每題10分,滿分100分。01、同行找你借1000元,想要湊個整,你應該給多少 ?A.1000元B.1024元C.1111元D.事兒真多,我不借你了 02、程序猿為什麼分不清萬聖節和聖誕節?
  • 吹爆程序猿的VSCode彩虹屁插件,釘宮理惠,英雄聯盟版現已生成,你...
    「啾,我的可愛已成功導入」VSCode幾乎支持所有主流語言,是一款程序猿常用的代碼編譯器,同時,它也支持各類擴展程序,Rainbow Fart就是其中之一。為了有更好的編譯體驗,這款插件還可以支持暗黑模式。不過,我們最關心的是它如何召喚蘿莉音?當你打開編輯面板,輸入「import」,它就已經出現了!」啾,我的可愛已成功導入!
  • 遊戲中最強的程序猿,僅憑IF語句創造遊戲,同行想破頭皮也沒明白
    ,今天我們就來說一說,遊戲之中的最強程序猿!相信提到這個程序猿,大家心裏面都有一個數了,這也是一個老生常談的話題,稍微懂點語言知識的玩家們就知道,如果說單憑一個IF語句去寫各種代碼的話,甚至說用大量的IF語句去製作一個遊戲,這其中的繁瑣程度暫且不提,光是想一想就已經知道了要出現各種各樣的BUG了。
  • 如何寫好你的程序?成為專業程式設計師的6個技巧
    在網絡上找你真正喜歡的作者和開發人員,閱讀他們寫的內容。訂閱他們的博客。了解你使用的框架和庫。知道事物的工作原理,有助於你更好地應用它們。如果你使用的是開源資源,那麼你真的很幸運。使用調試器單步執行代碼,以查看內部究竟是怎麼回事。你也可以去看看那些確實比你聰明的人是如何編寫和審查代碼的。當你犯了錯誤,修復bug,或者遇到問題的時候,試著去真正理解發生了什麼事情。
  • 一位程序猿的經歷與現實:我只想要一個倉庫!
    結果戴維斯根本不打算給他回信,只是把信箋原封不動地退了回去,並在信後潦草附註:「你惡劣的風格,只有更增添原本惡劣的風格。」  卡耐基把事情搞砸了,我面前的「程序猿」(code monkey,一種非常特殊的 、可以從事程序開發、維護的動物)Harry Liu卻把我的眼光緊緊抓住。  29歲的他想逃離此處,於是便向我求助。