2016-2022 All Rights Reserved.平安財(cái)經(jīng)網(wǎng).復(fù)制必究 聯(lián)系QQ280 715 8082 備案號:閩ICP備19027007號-6
本站除標(biāo)明“本站原創(chuàng)”外所有信息均轉(zhuǎn)載自互聯(lián)網(wǎng) 版權(quán)歸原作者所有。
作為開發(fā)人員,我們在職業(yè)生涯的不同階段會犯不同類型的錯(cuò)誤。特別是在WordPress開發(fā)中,隨著我們對WordPress代碼庫熟悉程度的增加,我們會犯不同類型的錯(cuò)誤。
幾年前,我聽馬特·穆倫維格說過一句話:大多數(shù)人都會重復(fù)他們的錯(cuò)誤,更聰明的人會從他們的錯(cuò)誤中學(xué)習(xí),而最聰明的人則會從別人的錯(cuò)誤中學(xué)習(xí)。我很喜歡這個(gè),我再加上一個(gè)推論:每個(gè)人都會犯錯(cuò)誤,謙虛的人會私下分享這些錯(cuò)誤,最大膽的人會把它們寫下來并在博客上發(fā)表!
但是以后還有時(shí)間思考。你讀這篇文章是因?yàn)槟阆胫阑疖囅嘧驳氖拢沂枪こ處?。沒有更多的序言,和我一起回顧一下我作為一個(gè)WordPress開發(fā)者所犯的五個(gè)最尷尬的錯(cuò)誤。
那時(shí)我剛從CraigsList網(wǎng)站上一個(gè)非常不起眼的編碼工作中畢業(yè),在一個(gè)真正的廣告公司工作。我已經(jīng)到了!在沙發(fā)以外的地方工作,穿著睡衣以外的衣服,這讓我很緊張。但即便如此,我還是知道WordPress做錯(cuò)了還是對的,而且我發(fā)現(xiàn)吹噓WordPress的最佳實(shí)踐是一件很愉快的事,就像從來沒有“侵入核心”一樣。
我在這個(gè)機(jī)構(gòu)的第一項(xiàng)wordpress開發(fā)任務(wù)是恢復(fù)一個(gè)停滯的項(xiàng)目——對我當(dāng)時(shí)的技能來說,這是一個(gè)相當(dāng)復(fù)雜的項(xiàng)目。它涉及到WordPress注冊和登錄流程的大量定制。前一位開發(fā)人員通過簡單地編輯corewp-loginfile就取得了顯著的進(jìn)展。
我知道這是不可持續(xù)的,所以我的第一件事就是安裝一個(gè)備份/恢復(fù)插件,用一個(gè)新下載的版本替換WordPress核心。我很有信心,到目前為止,在這個(gè)項(xiàng)目中沒有任何令人印象深刻的東西被執(zhí)行,而且我可以通過過濾器來模仿現(xiàn)有的特性集。
在那個(gè)時(shí)候,無論我是否具備編程能力,很快就變得無關(guān)緊要了,因?yàn)槲业男鹿椭鞣浅I鷼?。她不理解“hacking core”的意義,而我也不夠成熟,無法用一種容易理解的方式來解釋。我向她保證,我可以通過我安裝的備份/恢復(fù)插件來恢復(fù),這讓她的額頭暫時(shí)涼了下來。
你能猜到這是怎么回事嗎?
那個(gè)插件,就像命運(yùn)所希望的那樣,只備份了wp-contentfolder。不管核心文件中的WordPress hack是什么,都永遠(yuǎn)消失了。我還記得我給她的電子郵件(那時(shí)她早已把我趕回了家里的辦公室):
我真的準(zhǔn)備好了通過過濾器和動作來完成她想要的功能設(shè)置,但是她不聽。她當(dāng)場就把我解雇了,還威脅說要告我,而且她連我兩周辛苦工作的工錢都沒有付。我感到很丟臉。
[閱讀:這是每個(gè)開發(fā)人員應(yīng)該知道的關(guān)于設(shè)計(jì)的東西]
從這次經(jīng)歷中,我可以學(xué)到很多東西(現(xiàn)在很明顯了)。一個(gè)普遍的教訓(xùn)是,只有經(jīng)過演練和確認(rèn),備份才算備份,這是一個(gè)很好的教訓(xùn)。但更讓我印象深刻的是關(guān)于如何在WordPress中進(jìn)行備份的具體教訓(xùn)——尤其是在WordPress核心中。
我已經(jīng)學(xué)會了真正珍惜像WP-Engine這樣具有健壯備份/恢復(fù)系統(tǒng)的托管環(huán)境。許多精品主機(jī)都有各種命令行工具和其他針對開發(fā)人員的用于執(zhí)行備份的特性,但WP-Engine是我的最愛。它非常快,除非你有一個(gè)非常大的網(wǎng)絡(luò)。UI很簡單。所有知道如何使用WordPress的人都可以使用它。即。與一些可能更快的CLI方法或隱藏在Plesk中的一些晦澀的東西相比,我的客戶可以使用它、理解它、監(jiān)視它并驗(yàn)證我正在使用它。我是你的超級粉絲。
當(dāng)時(shí)我還不太熟悉專業(yè)的工作環(huán)境,而且一直都是Windows操作系統(tǒng)的忠實(shí)用戶。然而,我的新工作是在一家Mac商店,我很快就愛上了它的一切。嗯,幾乎一切。我似乎在使用“魔法鼠標(biāo)”時(shí)遇到了很多麻煩?!拔矣锌赡軙ニ{(lán)牙連接,導(dǎo)致在重新連接后出現(xiàn)意外的拖放操作。不僅如此,我只是對一項(xiàng)新的精細(xì)的運(yùn)動技能笨手笨腳。
現(xiàn)在,我們的WordPress開發(fā)流程仍然包括通過FTP部署到產(chǎn)品中。對我來說,花上整個(gè)工作日來寫代碼、聊天、回復(fù)電子郵件、通過我的新魔法鼠標(biāo)來來回回的情況并不少見,而Cyberduck則在我的桌面上開放生產(chǎn)。天哪,這聽起來糟透了!但事情就是這樣。
有一天我們的整個(gè)平臺都不見了。我們的系統(tǒng)管理員很快就假設(shè)它是某種DDoS,或者通常在他的級別上的東西。至于我們開發(fā)人員,我們相信他的直覺,并認(rèn)為他很快就會明白的。
幾個(gè)小時(shí)過去了。這一天來了又去。仍然下降。
第二天早上,一切都恢復(fù)了,我們的首席技術(shù)官溫柔地邀請我去會議室和她一起開會。我們的系統(tǒng)管理員已經(jīng)發(fā)現(xiàn)了問題。他拉出FTP日志,發(fā)現(xiàn)我的用戶將我們的整個(gè)平臺移動到一個(gè)兄弟目錄中。也就是說,wp-contenthad嵌套在wp-include之下。
我很沮喪,但我們的CTO很棒。她可以看出,我基本上是一個(gè)樂于助人、負(fù)責(zé)任的員工,但她要求我不僅僅是悔悟,還要想辦法防止這種情況再次發(fā)生。我發(fā)現(xiàn)了兩件非常有用的事情。
第一個(gè)是定位一個(gè)CLI命令來阻止Cyberduck允許遠(yuǎn)程到遠(yuǎn)程的文件移動。這是一個(gè)很好的安全措施,我們立即將其作為公司的政策。
其次,我對通過Git進(jìn)行部署非常感興趣。最后,我編寫了一個(gè)WordPress插件,將Bitbucket版本編入正常的wp-adminupdate流程中。從那時(shí)起,我們幾乎沒有任何理由不去接觸生產(chǎn)。這個(gè)插件是我最喜歡的專業(yè)成就之一。當(dāng)然,對Git的親和力是當(dāng)今開發(fā)人員的先決條件。
到目前為止,我真的認(rèn)為我已經(jīng)很聰明地使用了WordPress。該請求是在某一類別的文章上附加一個(gè)“徽章”。出于某種原因,我想到只有新手才會在模板文件中添加這樣的條件,所以我很自豪地實(shí)現(xiàn)了以下過濾器:
這有什么不對嗎?我在階段測試中快速測試了它,以確認(rèn)必要的帖子獲得了他們的徽章。然后我部署了它,把工作留給了今天。你可能猜到了,宇宙爆炸了。
具體來說,結(jié)果就是沒有徽章的帖子會被渲染到?jīng)]有任何內(nèi)容的前端!你知道為什么嗎?問題是,我沒有返回$contentin我的保護(hù)條件,而是返回false。但這里確實(shí)有很多層次的錯(cuò)誤。
為什么我只測試帖子是否收到了徽章?為什么我沒有測試其他帖子是否完好無損?為什么我這么晚才部署到生產(chǎn)部門?為什么我們的質(zhì)量控制完全是由我點(diǎn)擊和刷新頁面組成的呢?
所有這些問題的答案可以總結(jié)為成熟。在我們開始投資于諸如視覺回歸測試和單元測試之類的東西之前,只是需要一段時(shí)間來厭倦犯這種類型的錯(cuò)誤。這個(gè)特殊的錯(cuò)誤是數(shù)百個(gè)錯(cuò)誤中的一根稻草,最終壓斷了駱駝的脊背,使我對inphpUnit和xDebug投入了很多。反過來,這些工具教會了我如何編寫可測試代碼,這可能比測試本身防止了更多的bug。
客戶請求重新格式化WordPress博客的文章,這樣日期就會變成“XYZ前”,而不是“2011年11月10日”。我不太確定如何做到這一點(diǎn),但我意識到這是一種越來越流行的日期格式,谷歌博士很快就給了我一個(gè)片段。它在我的本地成功了!里面有很多數(shù)學(xué),特別是除法。我不太清楚它為什么能工作——有很多嵌套的循環(huán)、余數(shù)、四舍五入等等。但它是在谷歌上,它似乎工作,我很高興部署到生產(chǎn)。
大約30分鐘后,我收到了系統(tǒng)管理員發(fā)來的不友好的Skype。生產(chǎn)下降。死在水里。他問我最近是不是除以了0,我不知道他指的是什么。這是發(fā)生了什么事。
信不信由你,我發(fā)現(xiàn)的不可讀的“在我的本地工作”片段,給定足夠大的樣本大小,可能會產(chǎn)生一些異常行為。由于提供了一些天、小時(shí)和分鐘的不幸組合,Rube Goldberg循環(huán)偶爾會嘗試將一個(gè)數(shù)字除以0。回想高中數(shù)學(xué):
在普通算術(shù)中,該表達(dá)式?jīng)]有意義,因?yàn)闆]有數(shù)乘以0得到a(假設(shè)a≠0),因此除0沒有定義。維基百科
那么這對計(jì)算機(jī)意味著什么呢?通常日志中只有一條錯(cuò)誤消息,但在我的例子中,情況更糟:數(shù)學(xué)錯(cuò)誤干擾了循環(huán)邏輯,導(dǎo)致嵌套循環(huán)未完成就運(yùn)行——一個(gè)無限循環(huán)導(dǎo)致白屏死機(jī)。更糟的是!由于循環(huán)的每次迭代都編寫一個(gè)除以0的錯(cuò)誤,因此錯(cuò)誤日志增長到不可思議的比例,并開始妨礙我們的文件系統(tǒng)。這產(chǎn)生了DDoS攻擊的效果,盡管這是一種荒唐的自找的攻擊。
這個(gè)錯(cuò)誤的壞處是,它導(dǎo)致一個(gè)高流量的網(wǎng)站癱瘓。這個(gè)錯(cuò)誤的好處是,它極大地改變了我的工作方式。最令我羞愧的是,我愿意在沒有理解的情況下實(shí)施。我發(fā)誓再也不會在沒有盡一切努力理解每一行的情況下粘貼代碼片段,甚至在必要時(shí)還會跟蹤代碼片段的作者。
更重要的是,我發(fā)誓再也不會發(fā)布對新手開發(fā)人員可讀性不高的代碼。我開始著迷于WordPress的編碼標(biāo)準(zhǔn)、文本編輯器擴(kuò)展、內(nèi)聯(lián)評論和文檔塊,甚至制表符對空格,那經(jīng)典的通過程序的方式!總之,我決定更關(guān)心讀代碼有多容易,而不是寫代碼有多容易。這種對沒有理解的粘貼的反叛使我對管理第三方依賴產(chǎn)生了濃厚的專業(yè)興趣,這個(gè)主題在接下來的十年里為我提供了各種寫作和演講機(jī)會。
我完成了一個(gè)非常吸引人的項(xiàng)目。我將是技術(shù)主管和WordPress開發(fā)工程師,我將有一個(gè)亞馬遜AWS Lambda開發(fā)人員和一個(gè)在JavaScript方面的專家向我報(bào)告。這是我第一次有多人向我匯報(bào)工作,也是迄今為止我參與過的最復(fù)雜的項(xiàng)目。即使把它稱為一個(gè)WordPress項(xiàng)目也大大低估了它的重要性,但是WordPress是將整個(gè)項(xiàng)目結(jié)合在一起的粘合劑,所以我作為技術(shù)領(lǐng)導(dǎo)者是很有意義的。
因?yàn)槲业闹饕巧菄?yán)格意義上的技術(shù)人員,也因?yàn)槲蚁矚g極簡主義,我從來沒有想過實(shí)現(xiàn)像Jira或Basecamp或任何真正的任務(wù)管理平臺。項(xiàng)目的第一次迭代進(jìn)展得相當(dāng)順利。我們能夠開發(fā)自己的獨(dú)立組件,將客戶規(guī)范文檔作為產(chǎn)品路線圖,并且在需要將東西組合在一起時(shí)通過Slack相互聯(lián)系。
當(dāng)我們開始向客戶展示進(jìn)展并執(zhí)行他的反饋時(shí),問題就出現(xiàn)了。剛開始的這個(gè)三人團(tuán)隊(duì)立刻感覺自己被帶到了一個(gè)新的數(shù)量級:不清楚誰負(fù)責(zé)哪一點(diǎn)反饋,不清楚執(zhí)行反饋的狀態(tài),甚至不清楚誰在和誰交談。我們多次超過了Gmail的限制,每個(gè)線程回復(fù)100個(gè)!
事情開始變得不舒服了。我認(rèn)為客戶感覺他失去了對項(xiàng)目方向的控制,同樣重要的是,他感覺他失去了對項(xiàng)目狀態(tài)的可見性。我的亞馬遜開發(fā)人員有一天提到,“我想知道我們是否應(yīng)該使用Trello?!?/p>
嗯,我想。一個(gè)三人團(tuán)隊(duì)需要這樣的平臺嗎?同樣,我通常傾向于使用更少的工具,更少的開銷,更少的復(fù)雜性。但是這個(gè)項(xiàng)目已經(jīng)把我們都拖下水了,那么嘗試一下有什么害處呢?
我梳理了我們所有的電子郵件,所有的規(guī)范文檔,所有不同的評論線程,并把它們都映射到Trello板上。很快,這個(gè)項(xiàng)目就從它的數(shù)字墳?zāi)怪袕?fù)活了,因?yàn)槲覀兛梢杂酶俚哪X力開銷進(jìn)行交流。我們沒有在我的電子郵件收件箱或過時(shí)的規(guī)范文檔中搜索文本,而是使用了可愛的板、列表和卡片??梢院苋菀椎乜吹饺魏翁匦缘臓顟B(tài)、包含反饋和分配新任務(wù)。感覺就像我們漸漸失明了,速度如此之慢以至于我們都沒有注意到,然后突然又能看見了。
當(dāng)然,代碼不是自己編寫的,它仍然是一個(gè)非常具有挑戰(zhàn)性的項(xiàng)目,我們?nèi)匀槐仨毷褂梦覀兊拿恳环旨夹g(shù)技能。但這就是重點(diǎn):因?yàn)槲覀兘K于有了一個(gè)理解項(xiàng)目的基礎(chǔ)設(shè)施,我們現(xiàn)在可以自由地應(yīng)用我們的技術(shù)技能了。
我很高興地說,那個(gè)項(xiàng)目的完成讓客戶非常滿意。現(xiàn)在,我認(rèn)為Trello或Jira是兩個(gè)或更多團(tuán)隊(duì)的實(shí)際需求。
這是我在軍隊(duì)里聽到的最聰明的事情之一:“中尉犯中尉的錯(cuò)誤沒關(guān)系,上尉犯上尉的錯(cuò)誤也沒關(guān)系?!鄙衔痉钢形镜腻e(cuò)誤,或者中尉犯私人的錯(cuò)誤,都是不對的?!?/p>
換句話說,就你目前的責(zé)任水平而言,犯一些常見的錯(cuò)誤是理所當(dāng)然的。更重要的是你如何從中成長。
我希望我們作為開發(fā)人員,能夠在別人犯錯(cuò)時(shí)學(xué)會同情他們,希望別人也能這樣對待我們。我希望在我犯錯(cuò)誤的時(shí)候保持好奇心和責(zé)任感,這樣我就可以繼續(xù)創(chuàng)新。我希望身邊總是有一群鼓舞人心的wordpress專家,我可以從他們的錯(cuò)誤中吸取教訓(xùn),避免犯同樣的錯(cuò)誤。最重要的是,我希望其他人能從我的經(jīng)驗(yàn)中學(xué)習(xí),比如我在這里分享的WordPress錯(cuò)誤。
2016-2022 All Rights Reserved.平安財(cái)經(jīng)網(wǎng).復(fù)制必究 聯(lián)系QQ280 715 8082 備案號:閩ICP備19027007號-6
本站除標(biāo)明“本站原創(chuàng)”外所有信息均轉(zhuǎn)載自互聯(lián)網(wǎng) 版權(quán)歸原作者所有。