摘要:與此類似,理所當然的,我們程序員也會有自己的圣經。這便是程序員的圣經三個原則我認為做為一個程序員,最神圣的就是三個原則,它幾乎能完整無誤的定義做為一個程序員應該如何去編碼。
這是個隱喻。
在敏捷軟件開發的原則中,其中一個原則就是使用隱喻。我在這里也仿照了它的做法。
程序員是個群體,當我們說一個群體,一定意味著它有一些共通點,不然不能稱之為群體。而每一個群體必然有一個大家都認同的價值觀,否則不能形成群體。
什么叫大家都認同的價值觀?
舉個例說,信仰基督教的人,它們歸為一個群體,那它們的共同的價值觀是什么?或者換個說法,是什么在指引他們行事?
當然是圣經,對吧。
每一個基督教徒都把圣經做為最神圣的事物,遵守圣經的教導是基督教徒的行事標準,對吧。
與此類似,理所當然的,我們程序員也會有自己的"圣經"。
那做為一個程序員,當你在寫代碼時,你有沒有思考過,自己的"圣經"是什么?
從本周起,我將闡述我對編碼之道的理解與思考,這是第一篇:程序員的"圣經"
由于我過去的經歷,我編碼的經驗遍歷后端,移動端以及前端,所以我清楚幾乎每一個方向的程序員的日常工作是怎么樣的。
當然,如果我們就每一個方向來談論它們所涉及到技術,它們肯定是各不相同,甚至是技術上沒有太多交集。
后端的人大多使用的Java,并且與Java生態打交道,他們的詞匯是:并發,集群,緩存,性能等
移動端的人則分為幾類,iOS,Android原生開發,React Native或Flutter等跨平臺開發等,它們用到的技術也各不相同,比如OC,Java或JavaScript等
而前端則主要是與JavaScript或TypeScript打交道,他們更關注的可能是兼容性與體驗,樣式等
似乎沒有太交集?
完全不是,在我看來,這些工作其實毫無區別。無論是我在從事哪個技術方向的開發時,我遵守的原則幾乎一致。
想像一下,你怎么看待技術?
你會發現,在你編碼的職業經歷中,你會遇上各種各樣的技術,新的語言,更好的框架,更函數式的語法,面向大數據的技術等,你可能會認為自己熟悉某些特定的語言,認定自己使用這些語言會更好。
我認為這是一個完全的錯誤。
我把所有的語言,框架或各種各樣的開源的玩意當成工具,它們都是我的工具。把自己想像成一個建筑師,我擁有很多工具,這些工具都是我在建造建筑時可以考慮使用到的東西。
我從不會限定自己只使用什么,我這些年也是這樣做的,從一個后端架構師,使用的Java,再去用Java編寫一個Android程序,再去用OC去編寫一個iOS程序,再去用TypeScript去編寫一個跨平臺桌面程序,又去用Kotlin+Vert.x投入到響應式編程的世界中,這些語言也好,技術也好,框架也好,都是我的工具而已。
我有一大堆工具,我意識到了,當我要編寫下一個程序,解決下一個問題時,我其實有非常多的工具可以選擇了。
做為一個程序員,我從來不對特定的語言表達虔誠,但我想程序員也得有自己的虔誠,我想要尋找一個編碼的"圣經",它足以讓我虔誠的遵守它,守護它,捍衛它。
這便是程序員的"圣經"
我認為做為一個程序員,最神圣的就是三個原則,它幾乎能完整無誤的定義做為一個程序員應該如何去編碼。
它也不是空洞的理論,每一個原則都是可以通過技術實實在在的做到。而是否遵守這些原則,也是區分一個程序員是否優秀的標準。
這三個原則就是程序員的"圣經",
它們分別是:
編碼滿足需求的代碼
這應該非常易于理解。
我們要編寫的代碼不是憑空產生的,一定是為了解決某種特定的需求。
當然,需求的來源可以有許多種,比如來自于客戶,來自于產品經理,或來項目經理,也許來自于自己的一些想法。這些都無所謂。
但是,最起碼的原則就是:我們要寫出滿足需求的代碼
編寫代碼就是實現契約的過程,提出需求的一方是期望我們理解并實現他們的需求,他們并不明白與理解我們是如何用代碼實現他們的需求的,但重要的是他們認為與我們定義了一個契約,這個契約就是:
請你們用代碼來實現我們的需求吧,拜托了
連這一點都做不到的,我認為就不要稱自己是程序員了。
編寫可維護的代碼
寫出能運行的代碼這個太簡單了,但編寫出可維護的代碼,則是個巨大的挑戰。
想必很多程序員都經歷過類似的痛苦,可能進入了一份代碼中,這份代碼在可維護性上已經差到令人發指了,但還是得要繼續。于是常見的現狀是:修改一個BUG越來越困難,而且會引發更多的BUG,添加一個穩定的新功能越來越不可能。那些不懂代碼的管理者也不知所措,于是往這個糟糕的項目中添加新的人員,或延長每日工作時間成為了必然的選擇,但絕大多數情況下,情況壓根不會好轉,可能會更糟糕。
很多程序員想必理解我在說什么對吧,我也經歷過類似的項目,記得當時整個團隊花了幾乎幾個月的時間就是去修復BUG,每天有專門人統計每日的BUG修復情況,領導們也為大家打氣。
但最終項目不可逆轉的失敗了。
當然,我們不去談論具體原因,但無論是什么引發這種情況,做為程序員,我們都不能否定一個事實就是:
那些由我們負責編寫的一行行代碼,當它們合在一起的時候,分工協作與合作卻越來越困難,如同一群相互嫌棄的人硬被我們堆在一起一樣。
這是典型的不可維護的代碼的表現。
做為一個程序員,你有責任讓自己的代碼具有可維護性,在技術的所有特性中,我認為最重要的一個特性就是:
代碼一定要具有可維護性
做為一個程序員,你要努力寫出可維護的代碼。
編寫易于閱讀的代碼
代碼的可閱讀性我把它分為三個層次:
無論你的代碼寫的多差勁,只要它接受一個輸入,并能輸出一個符合期望的結果,那你這份代碼就達到了機器能讀懂的境界了。
再往上一層的要求就是讓自己讀懂。可能很多人會認為自己寫的代碼怎么會自己讀不懂?
當然,我說的不是讓你去閱讀自己上周寫的代碼,而是說讓你去閱讀你過去的,你已經有一段時間沒有參與的代碼中,我相信一定有一些人可能對于自己過去寫的代碼可能不是非常理解了,得費勁思考一下才能明白當初自己寫的這份代碼是干什么的。
要求最高的就是讓別人讀懂,在我們程序員這個群體中,幾乎有一個共通性,就是不太愿意接手別人的代碼。我想這之中一個很重要的原因就是,別人寫的代碼我們不太容易讀懂。
這也從反面反應出,寫出一份能讓別人讀懂的代碼,其實是有著一定的難度的。
想要寫出易于閱讀的代碼,就得寫出簡潔的代碼,寫出優雅的代碼,能做到這種程度的程序員實在不多。
理所當然的,能遵守并做到上述三個原則的程序員,都可稱之為優秀的程序員,反之則不是。
所以,我把這幾個原則稱為"圣經"。
只要稍微思考下,無論你是后端,前端或是移動端還是其它什么技術方向,這幾個原則幾乎無一例外的能覆蓋到你編碼這件事情上。
這便是我所思考的程序員的最高原則。
我將它們時刻牢記在心,虔誠的遵守它們,守護它們。
你做為一個程序員,有沒有思考過自己的原則?
這就是我這一次要講的原則,做為一個程序員,你一定得有你覺得對你而言,你不得不去遵守的原則。
一旦你能為自己確立一個正確的原則,那它將迫使你成為一個越來越優秀的程序員,因為只有足夠優秀才能守護你的原則。
我很難想像一個不優秀的程序員能做到編寫滿足需求的代碼,編寫可維護的代碼以及編寫易于閱讀的代碼。
你的原則時刻守護著你,有了原則之后,下一步是什么?
你有沒有思考過這一個問題,做為一個程序員,編碼是用來做什么的,它會產生什么價值?
下一篇,繼續談編碼之道:編碼之道(二):軟件的價值
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/119094.html
摘要:本周,編碼之道的最終章,做專業的程序員。言必行,諾必達程序員的職業素養中有個章節就是在講程序員如何說是,也就是怎么去做承諾。我覺得我們的文化有更優雅的詞來形容它,就是言必行,諾必達程序員需要謹慎的做出承諾,而一旦做出承諾,就要努力做到。 ...
摘要:對于專業的開發者來說,單元測試是一項必備的技能,多數的程序員卻不具備測試驅動開發的能力。對于工程來說,開源項目基本都嚴格遵守執行單元測試,而很多商業的工程則在單元測試方面有所缺失。一個擁有單元測試的項目會變得更加容易維護和更改。 作為一名合格的Java程序員,日常工作除了上班擼代碼就是加班擼代碼。擼碼其實不難,無非詢問Google,StackOverflow,解決方法和demo一籮...
摘要:所謂對稱加密,就是加密和解密使用同一秘鑰,這也是這種加密算法最顯著的缺點之一。非對稱加密算法由于對稱加密在通信加密領域的缺陷,年和提出了非對稱加密的概念。非對稱加密,其主要缺點之一就是慢,適合加密少量數據。 1. 加密的目的 加密不同于密碼,加密是一個動作或者過程,其目的就是將一段明文信息(人類或機器可以直接讀懂的信息)變為一段看上去沒有任何意義的字符,必須通過事先約定的解密規則才能將...
摘要:所謂對稱加密,就是加密和解密使用同一秘鑰,這也是這種加密算法最顯著的缺點之一。非對稱加密算法由于對稱加密在通信加密領域的缺陷,年和提出了非對稱加密的概念。非對稱加密,其主要缺點之一就是慢,適合加密少量數據。 1. 加密的目的 加密不同于密碼,加密是一個動作或者過程,其目的就是將一段明文信息(人類或機器可以直接讀懂的信息)變為一段看上去沒有任何意義的字符,必須通過事先約定的解密規則才能將...
摘要:大家好,我是冰河有句話叫做投資啥都不如投資自己的回報率高。馬上就十一國慶假期了,給小伙伴們分享下,從小白程序員到大廠高級技術專家我看過哪些技術類書籍。 大家好,我是...
閱讀 1295·2021-10-08 10:04
閱讀 1922·2021-09-04 16:40
閱讀 2535·2019-08-30 13:21
閱讀 2279·2019-08-29 15:10
閱讀 2848·2019-08-29 12:35
閱讀 1188·2019-08-26 17:41
閱讀 3062·2019-08-26 17:03
閱讀 1135·2019-08-26 12:01