摘要:編寫不可維護(hù)的代碼是一個特殊的技能,但奇怪的是,似乎對某些開發(fā)者來說是很自然的。維護(hù)人員沒有時間去理解你的代碼。你的代碼不能看起來不可維護(hù)因為別人會懷疑的它必須是不可維護(hù)。我希望你相信你自己也能做到,你也可以編寫不可維護(hù)的代碼。
譯者注:這是一篇很棒文章,使用有趣的敘述方式,從反面講解了作為一個優(yōu)秀的 PHP 工程師,有哪些事情是你不能做的。請注意哦,此篇文章羅列的行為,都是你要盡量避免的。
隨著失業(yè)率越來越高,很多人意識到保全自己的工作是多么的重要。那么,什么是保住自己工作,并讓自己無可替代的好方法呢?一個很簡單的事實是只要你的代碼沒有人能夠維護(hù),那么你就成功保住了工作。編寫不可維護(hù)的代碼是一個特殊的技能,但奇怪的是,似乎對某些開發(fā)者來說是很自然的。不過對于剩下的開發(fā)者來說,這里有一些技巧和提示來讓你開始寫不可維護(hù)的代碼。
首先要做的事情第一步,從找工作開始。你應(yīng)該尋找合適的公司,在那里你可以盡情發(fā)揮并實現(xiàn)你那不可維護(hù)的潛力。 你不一定需要成為公司的 PHP 大牛如果是那更好。找工作時,如果工作描述提到需要從其它的遷移到 PHP (所以你知道你會做主),或者也可以搜索那種需要10年 PHP5 工作經(jīng)驗的誤導(dǎo)性工作,再加上熟練使用 FrontPage 和 Netscape Composer 。
一旦你獲得這種千載難逢的機會,從第一天開始就要采取措施。在會議上發(fā)言,讓你的意見被聽到。大膽談?wù)撁嫦驅(qū)ο蟮募軜?gòu)設(shè)計,企業(yè),改革方案,怎樣讓夠好變得更好,當(dāng)然你也得做出相應(yīng)的承諾。確保每個人在重要的編碼環(huán)節(jié)都咨詢你的意見。
不可維護(hù)的核心靈感來源于優(yōu)秀的文章 “Writing unmaintainable code” (想要保住工作的人一定會看的), 以下是你需要掌握和精通的兩個重要概念:
你應(yīng)該讓別人無法輕易地修改任何東西,除非他破壞另外一些東西。
維護(hù)人員沒有時間去理解你的代碼。 可維護(hù)的代碼意味著能夠在堆積如山的代碼中快速定位到特定的部分,能夠快速明白它是如何工作的并且在不破壞一些東西的情況下進(jìn)行修改。你不能這樣做。 不能讓別人能輕易地搜索到某些東西或者在他們期待的地方找到。
你的代碼不能“看起來”不可維護(hù)(因為別人會懷疑的), 它必須“是”不可維護(hù)。
代碼在維護(hù)人員看起來應(yīng)該是正常的,但要在他們最意想不到的時候給他們一個驚喜。
最佳實踐禁止代碼約定。?關(guān)于編碼和命名約定的對罵無窮無盡。這樣的情況絕不能在你優(yōu)秀的組織中出現(xiàn)。你有牛逼的項目要做,你不可能花上無數(shù)的時間來討論用 tab 還是還是空格。再說了,約定就是限制。如果一個新人入職,并且他不習(xí)慣你的約定,他會很痛苦。不快樂的程序員是沒有效率的程序員。誰問你你就向他們解釋。讓每個人都用他們自己喜歡的風(fēng)格寫代碼。至于你自己的代碼 - 變換你的約定。周一用 camelCase 小駝峰命名,周二用 all_lowercase 全小寫命名,周五混合著用,在每個 2 月 29 日 使用匈牙利命名法。
不寫注釋。?你的代碼很優(yōu)美,它不需要注釋。如果有人不理解你的代碼,那么很有可能他們不是那么好的程序員。如果,有這個可能的話,你被強迫要求寫注釋,那么直接夸張的寫。詳細(xì)描述最明顯和最不重要的代碼,跳過其它的。
// 下面這一塊代碼 // 我們增加兩個變量: // 命名為變量 a 和變量 b // 兩個都是整數(shù) // 聲明變量 a // 并給它賦值整數(shù) 1 $a = 1; // 聲明變量 b $b = 2; // 給變量 a 和 b 求和 // 聲明和初始化見上面 // 并且將結(jié)果賦值給 // 一個新的變量 c $c = $a + $b;
使用記事本編碼。 或者使用其他沒有代碼縮進(jìn)展示的編輯器。使得其他人忍受痛苦最終離開團(tuán)隊。這樣你就不用總是聽他們的抱怨了。如果有人問你為什么使用記事本,準(zhǔn)備好解釋:因為它來自于 Windows (當(dāng)今唯一一個,為富有創(chuàng)造性的程序員準(zhǔn)備的操作系統(tǒng)),無需任何必要的培訓(xùn),也不需要花費任何代價。我相信你能在網(wǎng)上找到你可以使用任何程序的參考文獻(xiàn),甚至包括 Word,來編寫你的網(wǎng)頁代碼,但是只有記事本才是真正的權(quán)威,畢竟,你們公司雇傭的人只有你才是權(quán)威。
拒絕單元測試。 向任何質(zhì)疑你的人解釋,你是被雇傭過來編寫高質(zhì)量并且沒有漏洞的代碼的(因此,無需測試)。為什么會有頭腦正常的人會花時間來寫無關(guān)緊要的測試來證實代碼能否正常運行?有些事情在生活中就像-天空是藍(lán)色的,太陽從東方升起,你的代碼是能夠正常運行的,因此非常感謝。繼續(xù)(就像評論一樣,如果被迫接受測試,那么準(zhǔn)備好測試那些顯而易見的內(nèi)容然后跳過其他的部分)
不使用模板引擎。 模板引擎能夠幫助你區(qū)分業(yè)務(wù)邏輯層與展示層。它可以保證代碼的可維護(hù)性所以你不能遵守這個規(guī)定。PHP 之父 Rasmus Lerdorf 說過:“PHP 就是模板引擎”。即使你迫不得已使用模板引擎,也要找到對應(yīng)的方法濫用它,例如放一些業(yè)務(wù)代碼在模板中,或者是小心的將HTML(和 CSS 和 JavaScript)代碼混合在數(shù)據(jù)庫訪問層中。
一般來說,盡可能在同一行代碼中的將你的 PHP,HTML,CSS 和 JavaScript 代碼理直氣壯地混合在一起。在 PHP 代碼中創(chuàng)建 JavaScript 和帶內(nèi)聯(lián)樣式的 HTML 代碼。如果別人問到,告訴他們這種模式叫做“封裝”,你會對你的代碼負(fù)全部責(zé)任。
版本控制。?雖然這很難避免,但是使自己擺脫任何形式或版本控制很值得嘗試。你可以在討論的時候向大家證明這樣做提高了團(tuán)隊成員之間的溝通,而不是去依賴?yán)溲陌姹究刂栖浖H绻銢]有說服任何人,請不要絕望。 你提交的時候可以不 commit?all?。 在本地保留一些自己的代碼。這樣如果你以外的人試圖構(gòu)建和部署的話,這些小而致命的代碼片段將會破壞這個項目。 如果被抓了,就辯解說這些代碼還不適合展示,畢竟,你提交了能夠教育初級團(tuán)隊的高質(zhì)量的代碼和優(yōu)秀的解決方案。這些小男孩和小女孩將會仰望著你并充滿期待!
構(gòu)建一個框架。?然后你不可避免地成為架構(gòu)師,你的權(quán)威毋庸置疑。這樣你就可以添加一些秘密約定(當(dāng)然其中大多數(shù)有時是自相矛盾的),即使是最有經(jīng)驗的維護(hù)人員也察覺不出。 你的框架將負(fù)責(zé)所有的事情,不需要任何人費心地去理解它,大家會很開心因為你一個人讓開發(fā)變得更容易而且提高了整個公司的產(chǎn)能。不要以開源的方式發(fā)布你的框架,因為 a) 這個框架是公司的資產(chǎn)而且公司投入了人大量的資金, b) 開源社區(qū)會嘲笑你,而且這將成為你虛張聲勢的結(jié)局。
命名相關(guān)你的變量名應(yīng)該起的神秘一些,最好只有一個字母。 這樣誰都無法通過簡單的搜索找到需要的內(nèi)容。
類名和方法最好也使用一個字母來定義。如果你確實想定義一個正常點的名字,那就一直使用它吧 —— 記住,隱藏信息的最好方法就是頻繁的使用它。 當(dāng)重復(fù)使用相同名稱(稱為“面向?qū)ο蟮木幊獭保r,如果將圓括號和花括號放在新的一行,這將有助于提高代碼的可讀性,并且讓隊友在你的代碼中尋找任何東西時,都得重溫一下正則表達(dá)式。考慮一下吧:
$noodles = 1; class noodles { var $noodles = 2; function noodles () { $noodles["noodles"] = "noodles"; } } function noodles() { return new noodles; } $noodles = noodles(); var_dump($noodles);
你也可以使用奇特的字符集來命名變量。西里爾字母就非常合適,因為有些字母看起來跟羅馬字母一樣, 但其實不是(所有這些:xopekacMEBCTAKXOPH)。那么下面的輸出是:
$alert = 1; $аlert = 2; echo $alert;
2?如果第二個?alert以西里爾字母"a"開頭,則不可以!
引用相關(guān)即使你非常正常的定義來一些東西,但并不意味著你不能以有趣的方式來使用它。主要的武器有:
eval()
可變變量
可變類,比如$strudels = "noodles"; $noo = new $strudels;
call_user_func()
基本上任何將代碼視為字符串的語言結(jié)構(gòu)都是你的好朋友。
// calling abc(); $z = "A"; call_user_func($z ."bC");大寫
字母例子,函數(shù)方法名不區(qū)分大小寫,濫用這個特點。
function abc(){ echo "abc"; } AbC();
另一方面,數(shù)組的?。╧ey) 對大小寫敏感,也濫用這個特點。
$a["UseConvetionsOnlyTobreakThem"] = 1; if (isset($a["UseConvetionsOnlyToBreakThem"])) { // ?? 大寫 B !!1! }重寫
在不期望的情況下重寫全局變量,尤其是超全局變量。盡早重寫$_GET數(shù)組中的屬性,多次重寫,$_POST亦是如此。在$_REQUEST上做一些不起眼的重寫作為點綴。如果是在WTF-ed上,你可以解釋是在防止用戶輸入的 XSS 攻擊、注入攻擊以及其他的病毒攻擊。
控制結(jié)構(gòu)使用、混合、匹配所有備選的if,while,for,foreach,switch語法。如果被問起來,所有的這些,請解釋說你正在培訓(xùn)新員工學(xué)習(xí)真正的語言。
if ($a > 5): if ($a > 4) { while ($a > 0): echo --$a; endwhile; } endif;
嵌套三元運算符,沒有比這個更好、更簡潔的代碼了。
// 猜猜這里輸出什么 echo true ? "true" : false ? "t" : "f";
在for的循環(huán)體內(nèi),再次增加$i以保持所有人的注意?;蛘?,通過不使用$i來實現(xiàn)循環(huán)增量的驚喜。從不。
嵌套循環(huán)、深入,然后突然跳出它們(循環(huán))。像 break 2 和 break 3 這樣的代碼存粹是為了娛樂,尤其是當(dāng)混合了奇怪的縮進(jìn)代碼時。
這是一個開始!這就是今天的全部。我希望你相信你自己也能做到,你也可以編寫不可維護(hù)的代碼。現(xiàn)在你的未來就在你的手中!當(dāng)然,你也可以編寫可讀性比較高的代碼,但是冒著被替代的風(fēng)險。
更多現(xiàn)代化 PHP 知識,請前往 Laravel / PHP 知識社區(qū)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28786.html
摘要:本教程主要基于大神的開源商城,為大家解讀的源碼,由于原版商城更多是針對國際業(yè)務(wù),因此本教程會適當(dāng)修改,使其更適合于微信環(huán)境。 本教程主要基于 terry 大神的開源商城 Fecshop,為大家解讀 Fecshop 的源碼,由于原版商城更多是針對國際業(yè)務(wù),因此本教程會適當(dāng)修改,使其更適合于微信環(huán)境。由于商城源碼復(fù)雜,本教程將長期更新。本人也是邊學(xué)習(xí)邊寫這份教程,過程中難免會出現(xiàn)錯誤,還請...
摘要:利用以太坊的智能合約可以輕松編寫出屬于自己的代幣,代幣可以代表任何可以交易的東西,如積分財產(chǎn)證書等等。要求我們在實現(xiàn)代幣的時候必須要遵守的協(xié)議,如指定代幣名稱總量實現(xiàn)代幣交易函數(shù)等,只有支持了協(xié)議才能被以太坊錢包支持。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:創(chuàng)建自己的數(shù)字貨幣(ERC20 代幣)進(jìn)行 ICO原文已更新,請讀者前往原文閱讀 本文從技術(shù)角度詳細(xì)介紹如何基于以太坊ERC20創(chuàng)...
摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接一步步教你開發(fā)部署第一個去中心化應(yīng)用寵物商店原文已更新,請讀者前往原文閱讀今天我們來編寫一個完整的去中心化區(qū)塊鏈應(yīng)用本文可以和編寫智能合約結(jié)合起來看。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:一步步教你開發(fā)、部署第一個去中心化應(yīng)用(Dapp) - 寵物商店原文已更新,請讀者前往原文閱讀 今天我們來編寫一個完整的去中心化(區(qū)塊鏈)應(yīng)用(Dapps), 本...
摘要:層疊樣式表二修訂版這是對作出的官方說明。速查表兩份表來自一份關(guān)于基礎(chǔ)特性,一份關(guān)于布局。核心第一篇一份來自的基礎(chǔ)參考指南簡寫速查表簡寫形式參考書使用層疊樣式表基礎(chǔ)指南,包含使用的好處介紹個方法快速寫成高質(zhì)量的寫出高效的一些提示。 迄今為止,我已經(jīng)收集了100多個精通CSS的資源,它們能讓你更好地掌握CSS技巧,使你的布局設(shè)計脫穎而出。 CSS3 資源 20個學(xué)習(xí)CSS3的有用資源 C...
摘要:加入的擴展一般在,如果找不到,請自行百度里面有很多文件。如果使用模式,需要重啟,這樣我們就應(yīng)該有擴展,具體可以通過查看不會請自行百度編寫代碼既然說編寫擴展可以提高運行效率,因此在這里,我們通過使用擴展和直接使用代碼來進(jìn)行對比,測試性能。 1、寫在最前 隨著互聯(lián)網(wǎng)飛速發(fā)展,lamp架構(gòu)的流行,php支持的擴展也越來越多,這樣直接促進(jìn)了php的發(fā)展。 但是php也有腳本語言不可避...
閱讀 1704·2021-11-24 09:39
閱讀 3176·2021-11-22 15:24
閱讀 3108·2021-10-26 09:51
閱讀 3297·2021-10-19 11:46
閱讀 2910·2019-08-30 15:44
閱讀 2231·2019-08-29 15:30
閱讀 2550·2019-08-29 15:05
閱讀 792·2019-08-29 10:55