常言道:“工欲善其事,必先利其器身弊”偬”開發(fā)人員時常需要使用各種工具列敲,來加快其代碼的編寫速度。就算在代碼的測試環(huán)境帖汞,他們也會趨向使用各種腳本與工具戴而。通過與業(yè)界許多經(jīng)驗豐富的開發(fā)和測試人員的深入交流,我們收集了目前七種最常用的代碼工具翩蘸,可方便您提高團(tuán)隊的整體工作效率所意。
1. Linux I3窗口管理器(Window Manager)
開發(fā)人員一直能夠受益于Linux所提供的靈活性和自由度。而I3就是在此基礎(chǔ)上催首,提高了用戶對于編程環(huán)境的完全掌控能力扶踊。總的說來郎任,I3窗口管理器針對Linux提供了輕量級秧耗、開源的平鋪風(fēng)格,可用于控制窗口在屏幕上的外觀和位置舶治。由于被平鋪顯示在操作系統(tǒng)的GUI(圖形用戶界面)頂部分井,因此I3可以通過自動調(diào)整窗口大小和重新排列窗口,來避免用戶的工作屏幕上出現(xiàn)窗口的重疊霉猛。以下是I3窗口管理器的主要特點:
簡單高效:作為一款輕巧的工具杂抽,I3是專為開發(fā)人員設(shè)計的、具有最小的處理能力韩脏。
鍵盤控制:I3內(nèi)置了廣泛的缩麸、適用于不同操作的快捷鍵組合。當(dāng)然赡矢,您也可以將其他快捷方式直接添加到其config文件中杭朱,以移動平鋪的方式,打開終端吹散,更改布局等代替鼠標(biāo)的操作弧械。
有效地使用屏幕:通過使用I3提供的平鋪,您不必在同一個窗口中切換大量的選項卡空民,而能夠以平鋪的方式打開任意數(shù)量的窗口刃唐。這對于那些需要在多個終端上來回切換的系統(tǒng)管理員,以及需要使用和測試多個終端的用戶來說十分方便界轩。
自定義主題:您可以根據(jù)自己的偏好画饥,來自定義I3的外觀,包括微調(diào)其背景浊猾、窗口外觀與操作行為抖甘、以及通知界面等。
專家建議:使用I3的工作區(qū)
I3有一項非常實用的功能:開發(fā)人員可以將各個窗口分組為帶有不同編號的工作區(qū)葫慎,以便在不同的區(qū)域運行不同的工作流衔彻。您可以通過索引或按下super按鈕的方式薇宠,來隱藏其他的窗口,只突顯主工作區(qū)窗口艰额,并能夠保持在不同的工作區(qū)之間快速切換澄港。
此外,對于擁有雙顯示器的用戶而言柄沮,他們可以在每臺顯示器上先打開一個工作區(qū)慢睡,然后只需一次性快捷鍵操作,便可將主工作區(qū)切換并投射到指定顯示器上铡溪。這將大幅提高他們的生產(chǎn)率漂辐。
2. Vim
適用于各大主流平臺的Vim,是大多數(shù)編程語言的首選文本編輯器棕硫。它可以通過為開發(fā)人員提供自定義的快捷鍵組合髓涯,來提高編程的效率。Vim具有多種文本編輯模式哈扮,其中每一種模式都可以針對某項特定的任務(wù)進(jìn)行優(yōu)化纬纪。例如:您可能為Python設(shè)置一種模式,而為C++設(shè)置另一種模式滑肉。這些模式允許相同的快捷鍵針對不同的語言包各,發(fā)出迥異的操作命令。此外靶庙,用戶可以在共享的.vimrc.文件中问畅,配置Vim的快捷方式。
專家建議:使用DRY的原則六荒,來設(shè)置Vim快捷方式
開發(fā)人員一直推崇著DRY(Don’t Repeat Yourself)的思想护姆,即:不要重復(fù)實現(xiàn)自己已實現(xiàn)的功能。也就是說掏击,盡量將需要重復(fù)實現(xiàn)的功能性代碼模塊化卵皂,以便在下次需要的時候,直接調(diào)用之砚亭。我們可以在設(shè)置Vim快捷方式時灯变,延用類似的原則。例如捅膘,如果您發(fā)現(xiàn)自己手頭的工作添祸,經(jīng)常需要使用Java來實現(xiàn)某個二進(jìn)制搜索樹時,則可以通過設(shè)置快捷方式篓跛,以粘貼一段已寫好的二進(jìn)制搜索樹的模板膝捞。
3.Bash
Bash是一款為GNU項目開發(fā)的免費Unix shell。一直以來愧沟,它都被用作Linux蔬咬、MacOS、甚至是Windows 10的默認(rèn)登錄shell沐寺。其實林艘,Bash還能支持?jǐn)?shù)百種可以從應(yīng)用程序內(nèi)調(diào)用的命令。
Bash的亮點體現(xiàn)在腳本上混坞。用戶不必逐一輸入一組命令狐援,而可以通過一個包含了所有執(zhí)行命令的shell腳本文件,讓它們依次自動執(zhí)行究孕。同時啥酱,由于Bash里的命令比較偏底層,因此用戶無需打開桌面應(yīng)用厨诸,即可操縱各種文件與內(nèi)存镶殷。例如,您可以創(chuàng)建一個Shell腳本微酬,在無需調(diào)用文件管理器的情況下绘趋,系統(tǒng)性地將某個硬盤內(nèi)的全部內(nèi)容傳輸?shù)搅硪慌_設(shè)備上】殴埽可見陷遮,Bash不但效率更高,而且能夠執(zhí)行更為專門的任務(wù)垦江。
專家建議:使用Bash的歷史
您可以使用如下Bash歷史的獲取方式帽馋,來進(jìn)一步提高執(zhí)行的效率與能力:
多窗口的歷史記錄:
默認(rèn)情況下,Bash只會記錄已打開的第一個實例的歷史命令比吭,而不會記錄后續(xù)窗口的歷史信息茬斧。不過,您可以通過命令:shopt -s histappend梗逮,讓所有活動的Bash窗口都可以記錄歷史命令项秉。
重復(fù)上一條命令:
您可以使用鍵盤上的向上箭頭、或ctrl+p組合鍵慷彤,來查看最近執(zhí)行過的一條命令娄蔼。
反向搜索歷史:
您只需按下ctrl+r的組合鍵,即可在Bash的歷史中搜索過去的命令底哗。Bash會使用自動填充的方式進(jìn)行匹配岁诉。如果有多行匹配,您可以再按一次ctrl+r跋选,以便在其中循環(huán)選擇涕癣。
4.函數(shù)式編程(Functional Programming)
函數(shù)式編程是一種聲明式編程范例,可用于構(gòu)造那些具有純函數(shù)集合的程序前标。這些程序往往是由一些基本的函數(shù)單元坠韩,組合構(gòu)造而成距潘。值得注意的是,聲明式編程關(guān)注的是構(gòu)建什么只搁,而不是如何去實現(xiàn)音比。它通過提供數(shù)學(xué)上和邏輯上的范例,來方便用戶輕松地設(shè)計出聲明式編程氢惋。
函數(shù)式編程比其他方法更具模塊化洞翩。它通過將程序拆分為較小的功能函數(shù),以便用戶在整個程序中實現(xiàn)復(fù)用焰望。當(dāng)然骚亿,用戶也可以根據(jù)模塊化的函數(shù),僅復(fù)用整個方案中的某一部分熊赖。
此外来屠,由于函數(shù)式編程里的數(shù)據(jù)保持不變,因此不會產(chǎn)生任何副作用秫舌。例如我們有某個函數(shù)是從n開始的妖,需要將n傳遞給function1,然后將function1的結(jié)果輸入給function2足陨。下面是兩種不同方法的偽代碼(pseudo-code):
塊式方法:
int n = 5; n = function1(n); n = function2(n); return n;
函數(shù)式方法:
int n = 5; return function2(function1(n));
在函數(shù)式方法中嫂粟,我們通過function1(n)直接將n傳遞給function2,而不是去擴(kuò)充n墨缘,因此這種聲明方式保證了n所傳遞的值不會發(fā)生改變星虹,進(jìn)而保證了該函數(shù)在使用中不會產(chǎn)生任何副作用。
專家建議:函數(shù)式思維镊讼,不僅僅是語言
適合此類范例的函數(shù)式編程語言有:Clojure宽涌、Scala和Haskell等。盡管它們的功能強大蝶棋,但是對于初學(xué)者來說并不容易上手卸亮。新手程序員需要先在自己熟悉的編程語言中,試著通過如下方法玩裙,來訓(xùn)練和使用函數(shù)性思維:
利用map兼贸、reduce等操作,改變以前的塊式編程思想吃溅。
練習(xí)在每次編程中溶诞,使用局部作用域的變量和函數(shù),來減少副作用决侈。
由于遞歸方案需要函數(shù)性思維螺垢,因此在實踐中優(yōu)先考慮遞歸方案。
5.Reflect
回歸測試是確認(rèn)已開發(fā)的軟件,能夠在更新后仍可正常運行的過程枉圃。這幾乎是每個開發(fā)人員必經(jīng)的過程功茴。但是由于需要涵蓋所有可能的錯誤,因此該過程也會相當(dāng)繁瑣讯蒲。
Reflect通過為任何網(wǎng)站創(chuàng)建自動化回歸測試來解決此類問題痊土。它不需要任何安裝肄扎,即可與任何JavaScript框架協(xié)同使用墨林。其具體操作步驟如下:
進(jìn)入“記錄測試”模式
加載網(wǎng)站的當(dāng)前工作頁面
單擊需要測試的功能
停止記錄測試,這將生成一個測試腳本犯祠,以模擬各種點擊
輸入目標(biāo)網(wǎng)站的測試版本地址
激活測試腳本
查看記錄下的結(jié)果
通常旭等,測試結(jié)果會將發(fā)生問題時的截屏片段,發(fā)送到JavaScript控制臺衡载,以便用戶從源頭處迅速開展問題診斷搔耕。這種“一次性創(chuàng)建錄屏,多次模擬測試”的方式不僅可以為用戶節(jié)省大量的手動測試時間痰娱,還可以自動生成每個測試的視頻記錄弃榨,以展示確切的錯誤信息。簡而言之梨睁,鑒于Reflect的簡單性鲸睛、可重復(fù)性和準(zhǔn)確性,它正在開發(fā)人員中變得越來越流行坡贺。
專家建議:Reflect的高級功能
除了上面介紹的Reflect主要服務(wù)官辈,它還能夠提供如下高級功能:
通過規(guī)劃某項測試在停頓任意時間間隔后進(jìn)行,可確保目標(biāo)網(wǎng)站能夠在無人值守的情況下遍坟,照常提供服務(wù)拳亿。
將測試計劃與故障通知相結(jié)合,以減少網(wǎng)站在中斷時的響應(yīng)時間愿伴。
如果需要更改測試肺魁,只需編輯和重新記錄某個單擊操作或某幾個部分,而不必重新錄入整個過程隔节。
在更改網(wǎng)站的界面時鹅经,可使用自動化的視覺檢測工具,來檢測那些與輸入預(yù)期值相距甚遠(yuǎn)的故障元素官帘。
6.正則表達(dá)式
正則表達(dá)式(Regular expressions瞬雹,regex)是用來描述搜索模式行為的一組字符。它們通常被用到字符串的搜索算法中刽虹,以實現(xiàn)模式的查找與匹配酗捌。
前文提到的Bash,有一個唯一的正則表達(dá)式運算符 =~,可用于搜索給定正則表達(dá)式模式中的匹配項胖缤。例如:if [[ $digit =~ [0-9] ]]; then語句尚镰,是在字符串中搜索任何數(shù)字實例。當(dāng)然哪廓,除了Bash之外狗唉,Python和Java也能夠支持正則表達(dá)式類型的參數(shù)。
由于它們僅需幾個字符涡真,即可實現(xiàn)非常復(fù)雜的參數(shù)搜索分俯,因此它們對于數(shù)據(jù)的驗證,以及其他類型的文本處理任務(wù)哆料,都是非常實用的缸剪。同時,由于是計算機領(lǐng)域的通用語言东亦,因此正則表達(dá)式得到了全世界開發(fā)人員的認(rèn)可杏节。您可以通過學(xué)習(xí)Bash、Java或Python的相關(guān)功能典阵,來進(jìn)一步掌握正則表達(dá)式奋渔。
專家建議:使用正則表達(dá)式進(jìn)行網(wǎng)頁的爬取
由于正則表達(dá)式可以從大量待搜索的字符串中,提取與參數(shù)想匹配的字段壮啊,因此嫉鲸,正則表達(dá)式的一種最常見的使用場景是:從大量網(wǎng)站中提取特定的信息,即網(wǎng)頁抓取他巨。例如充坑,您可以通過$:\s+([^\s]+),從競爭對手的網(wǎng)站上染突,搜索給定產(chǎn)品的價格捻爷。一旦表達(dá)式搜索到了$后面的相關(guān)內(nèi)容,它就會將其提取到單獨的文件中份企。
7. RegExr
常言道“知易行難”也榄,正則表達(dá)式雖然容易上手,但是要用好它就比較復(fù)雜司志。例如甜紫,下面這個正則表達(dá)式是專門用來匹配某個特定類型的URL。您是不是被其復(fù)雜性驚得虎身一顫?
^(http|https|ftp):[\/]{2}([a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,4})(:[0-9]+)?\/?([a-zA-Z0-9\-\._\?\,\'\/\\\+&%\$#\=~]*)
為了更容易地理解那些復(fù)雜的正則表達(dá)式骂远,免費工具—RegExr能夠可視化和測試給定的正則表達(dá)式囚霸。由于正則表達(dá)式往往是標(biāo)準(zhǔn)化的,因此RegExr可以解析出表達(dá)式中的關(guān)鍵部分激才,并將其轉(zhuǎn)換為解釋性的句子形式拓型。同時额嘿,當(dāng)您將鼠標(biāo)懸停在內(nèi)容說明上時,該工具能夠突顯其對應(yīng)在表達(dá)式中的確切位置劣挫。下圖便是上面那個復(fù)雜示例的具體功能性說明册养,以及對應(yīng)的、以顏色編碼的形式突顯出的不同部分压固。
在節(jié)省開發(fā)人員解讀冗長的正則表達(dá)式的寶貴時間的同時球拦,RegExr還消除了用戶對于公式庫的死記硬背。在其界面的一側(cè)帐我,您可以查找到完整的公式庫坎炼,及其對應(yīng)的用途說明。您只需單擊它們焚刚,即可將公式插入表達(dá)式中点弯。此外扇调,RegExr還可以向待測試的表達(dá)式中矿咕,填入各種文本,以提高測試的覆蓋率狼钮。
專家建議:避免使用冗長的正則表達(dá)式
盡管RegExr可以協(xié)助我們解析較長的正則表達(dá)式碳柱,但是此類長表達(dá)式畢竟晦澀難懂。而且熬芜,讓單個表達(dá)式來完成所有的搜索參數(shù)莲镣,往往是一個既耗時,又容易出錯的過程涎拉。因此瑞侮,在實際項目中,您的團(tuán)隊?wèi)?yīng)當(dāng)優(yōu)先考慮那些便于理解且較短的表達(dá)式表現(xiàn)形式鼓拧。例如半火,我們可以嘗試著構(gòu)建多個較小的表達(dá)式,讓每個表達(dá)式都僅搜索一到兩個字符串季俩。這樣不僅解決了上述問題钮糖,而且能夠方便您在后續(xù)的項目中,對部分或所有表達(dá)式進(jìn)行重用酌住。
小結(jié)
綜上所述店归,我們介紹了7種能夠協(xié)助開發(fā)團(tuán)隊提高效率的代碼相關(guān)工具和軟件。其中最為常用的莫過于Vim酪我、Reflect和RegExr了消痛。盡管這些工具的學(xué)習(xí)曲線緩陡程度不盡相同,但是只要您掌握了它們都哭,并且能夠靈活地使用它們秩伞,就一定能夠節(jié)省出數(shù)小時的開發(fā)時間谴古,以及數(shù)千次的鼠標(biāo)擊鍵〕砬福快去試試吧掰担。