計算機是個很好的工具箱
對於自稱碼農的軟體工程師來說,計算機就是個工具箱,裡面有很多很好用的工具,而且大部分都是免費的。比如我當時要做伺服器端的違章查詢,需要識別驗證碼的功能,就找了圖像處理工具ImageMagick和文字識別工具GOCR。不同網站的驗證碼有不同的規律,有的要先通過人的經驗把驗證碼裡面的雜色干擾去掉,變成單色,有的呢則要先做一些裁剪,把連著的文字拆開,總之這兩個工具可算是幫了大忙。
今天說的不是工具,而是工具箱,就是各種工具的集合,可以規規整整的把眾多的工具組織起來,其實就是軟體包管理系統。
不同的操作系統有不同的包管理系統,以常見的Linux為例,就有N種包管理系統。這幾年我用的最多的是Ubuntu,通過apt-get安裝軟體非常好用。十幾年前用過RedHat,當時還是本地的RPM管理系統,後來RedHat的繼承者Fedora裡面有了yum,但是總是覺著不如apt-get好用。我最近在玩樹莓派,裡面是改過的Debian系統,叫做Raspbian,也可以使用apt-get,最大的問題是裡面的軟體太老了。
FreeBSD裡面的包管理系統非常有意思,安裝軟體的時候是基於源代碼編譯的,後來Gentoo Linux借鑒了這個系統,號稱優點是可以為你的CPU來優化。我一開始沉迷於這種系統,每次系統升級都要編譯幾個小時,後來就釋然了,其實優化不優化根本看不出來,還是老老實實下載別人編譯好的吧。
本來Mac和Windows一樣,並沒有一個官方的包管理系統,但是macOS是基於BSD的,有深厚的Unix基因,所以有人做了第三方的包管理工具。我早的時候用的是MacPorts,後來用的是HomeBrew。不管是哪一個,總覺著沒有Linux裡面的包管理工具好用,估計是第三方做的原因吧,開源的支持力度還是不一樣的。
在所有的操作系統中,Windows是對開源界最不友好的,直到最近的Windows 10 周年更新放出來才有了改觀。這一次微軟突破了所有人的想像,在Windows系統裡面集成了一個Linux子系統,而且還是和Ubuntu合作的,所以裡面可以apt-get install各種工具。我用了很長一段時間,感覺對於大多數場景來說可以不用裝Linux虛擬機了。當然還有很多問題,比如沒有好用的Terminal,一些系統服務在Windows上面沒有,但總比以前強太多了。
除了各種Linux桌面發行版,面向路由器的OpenWRT社區也很活躍,這裡面的包管理系統是opkg。我前幾天把WRT1900acs刷成了OpenWRT,發現這個系統真的是太強大了,隨便設置了一下,就把網路搞掛了,只好恢復出廠設置,差點沒吐血。我還專門下載了SDK,用來編譯我喜歡的插件,當然主要是用來科學上網,科學才是第一生產力。
除了這些包管理工具之外,其實還有另外一種基於腳本語言的工具箱,對於程序員更為有用。比如nodejs的npm,可以安裝一系列在代碼裡面可以調用的模塊,從而很快就能寫出一段有用的代碼。當年我做驗證碼識別還是用命令行工具來組合,現在估計可以直接用nodejs這樣的了。其它動態語言,Python、PHP和Perl都有自己的模塊社區,我用的不多,就不多講了。
比如有一個nodejs插件叫做Homebridge,可以把一些智能家居產品接入到蘋果HomeKit裡面,比如說Nest等。我這幾天用nodejs寫了一個Homebridge插件,只要幾百行代碼,就可以把小米的多功能網關集成進去,各種感測器開關都會出現在HomeKit裡面。通過寫這個小插件,發現nodejs效率確實很高,不得不服。我自己家裡已經用上了,有圖為證,當然我的代碼還有不少bug,需要再修改一下才能發布。
現在有一個趨勢,全世界都號召從小朋友開始學習編程,再過幾十年,這些工具估計會變成像家裡的鉗子和螺絲刀一樣的人人會用。那個時候,每個人家裡必備的工具箱就是一台計算機了,當然形態可能和現在的完全不一樣。
推薦閱讀:
※為什麼晶圓都是圓的不是方的?
※談談為什麼上scala?
※把「hotkey」翻譯為「熱鍵」是否不妥?
※500GB三星筆記本硬碟標本
※家用一體機電腦該如何選擇?