先不用說“無論什么語言都是一種工具”。工具是我們身體的一部分,解放軍解放臺灣靠“小米加步槍”? “工具無所謂”論可以休矣。對于實際的軟件工程工具和平臺的選擇是很重要的,有時候是致命的
1. perl是強大的, perl=shell+awk+sed+一堆命令行工具。
但是反過來也一樣shell+awk+sed+一堆命令行工具可以替代perl.
2. shell的簡約,可讀性比perl好,工具之間通過命令行stdio管道通信,任何一個小部分都可以拿出來測試和試驗,程序維護/修改很容易。學(xué)習(xí)曲線和積累方式比perl更優(yōu)。
3. perl是跨平臺的呀!java,sysv標(biāo)準(zhǔn), posix是跨平臺工具和標(biāo)準(zhǔn)。oracle還跨平臺呢! 但是實際軟件部署是需要選擇平臺的,一旦選擇好了就希望這個平臺穩(wěn)定。雖然unix/linux的命令行工具在不同的平臺特性稍有不同,但是你一旦選定了平臺,那么這個平臺上的shell/命令行工具就是非常穩(wěn)定的可依賴集合,不但可靠而且基本不會有變化。軟件開發(fā)商的投資也因此受到了保護。perl和python則處于不斷的變化當(dāng)中,新的數(shù)據(jù)庫DBI模塊/某種功能的版本來臨,需要perl/python升級到新的版本。那么新的版本是否可靠,是否影響原有系統(tǒng)的運行參數(shù)? 那么需要很多的回滾測試。perl可以寫文件到某個路徑,win下面用盤符開頭,*nix下面用/路經(jīng)開頭---軟件開發(fā)和部署的成本并沒有因為perl跨平臺而減少。
如果perl只是用來作為“膠水”粘合其他的程序,那么跨平臺也就無從談起了。效率也比不上shell
4. python是面向?qū)ο蟮难?!不錯,只是沒有了shell使用管道拼接程序,難以單獨拿出某一塊來跑跑看看有什么效果。你必須讀完整個程序才能發(fā)現(xiàn)出了什么問題。開發(fā)成本不比shell低。
5. Unix的Kiss原則,perl和python都違反了。我剛學(xué)習(xí)shell,用的很爽。腳本里面有一部分是sed和awk,我不懂不要緊,我留給以后學(xué)習(xí)“sed和awk”。盡管如此我可以看到sed和awk的輸入輸出是什么,不影響我理解程序。我有用了,可以學(xué)學(xué)awk,學(xué)學(xué)find的高級用法。這些都不會使得原先的shell程序過時。perl呢? 就像java, swing出來了awt就過時了,一個新框架出來了老框架就得推導(dǎo)。作為一個語言,問題域太大。而shell恰恰做到了kiss,它只做好自己的事情。
6. 作為弱類型語言的perl,雖然避免了類型的繁瑣開銷,同時也使得程序的調(diào)試更加困難,反而不如shell的文本IO來的直觀。
7. DBI很強大嗎? 我們的系統(tǒng)如果選定了oracle那我就在shell腳本里面sqlplus然后直接sql語句,用dbi豈不累死(5倍以上的代碼),難里理解,難以調(diào)試,可讀性也級差!為了dbi屏蔽了db的不同,提供統(tǒng)一的接口? 如果db要改變,那么定義文件,存儲過程,函數(shù)什么的全都要重寫!腳本調(diào)用只是一小部分。python也存在同樣的問題。如果完全不用存儲過程呢? 那么j2se+hibernate+spring好了,真正的跨平臺。perl/python的思想是大而全,和win+vs如出一轍。
8. python的很多用戶來自win,因為上面默認(rèn)沒有shell,哈哈
9. python的運行取決于變量,像perl一樣,無法如同shell一樣提取IO的結(jié)果來直觀的調(diào)試和修改。
10.是的, linux的anaconda安裝界面,yum都是基于python的,gnome/kde也大量依賴perl。那是為了有一個“像腳本一樣運行的c/c++”。
但是問題是操作系統(tǒng),虛擬機,桌面管理器都是嚴(yán)肅的東西,那些系統(tǒng)級別的perl/python的代碼有牛人和牛組織來保證。如果是普通的應(yīng)用軟件開發(fā)呢(賣錢的那種),用perl/python的人會因為各種目的,有的是為了程序今后的擴展性(其實他離開以后這個版本就完結(jié)了),有的是為了移植性(其實大部分的系統(tǒng)都被綁定在一個特定的平臺),有的是為了趕時髦(很多python用戶都是這么來的),還有的是為了顯示自己的編程多么厲害使用一堆perl/python的高級特性:總之,這個豪華的工具就是雙刃劍,對于普通的項目普通的軟件開發(fā)者來說,會給我們展示一個虛擬的天國(其實團隊達不到那樣的把握水準(zhǔn)),然后會把事情弄得一團糟。
所以我選擇古老的shell,古老而且穩(wěn)定,保守而久經(jīng)考驗,足夠而且簡潔。M16會被更好的M4取代,但是AK47卻是永恒的。
-
python
+關(guān)注
關(guān)注
56文章
4811瀏覽量
85075 -
Shell
+關(guān)注
關(guān)注
1文章
366瀏覽量
23475 -
PERL
+關(guān)注
關(guān)注
0文章
14瀏覽量
10417
發(fā)布評論請先 登錄
相關(guān)推薦
只用TLK2711的發(fā)送通路,不用接收通路,請問與接收通路相關(guān)的信號管腳應(yīng)該怎么處理?
兩個ADS1278輸出十六通道只用到DOUT1,其他的幾個輸出管腳都不用?
華為云 Flexus X 實例下的場景體驗——小企業(yè)的福星——最簡單的 php 環(huán)境搭建
![華為云 Flexus X 實例下的場景體驗——小企業(yè)的福星——最簡單的 <b class='flag-5'>php</b> 環(huán)境搭建](https://file1.elecfans.com//web3/M00/04/88/wKgZPGd2DxaABe9vAAGEG30XQlU997.png)
請問AFE4400為什么要用22位AD轉(zhuǎn)換而不用16位?
Linux從零到精通:最簡單的Shell腳本入門教程
![Linux從零到精通:最簡單的<b class='flag-5'>Shell</b>腳本入門教程](https://file1.elecfans.com/web3/M00/01/1E/wKgZPGdRCS2ACku7AAAiM7-x7u0394.png)
perl語法
TCSH shell 編程入門
shell具有的功能和特點
shell腳本編寫之本地腳本的編寫和執(zhí)行
shell基本介紹及常用命令之shell介紹
如何設(shè)置power shell的默認(rèn)路徑為工作文件夾?
esp-idf-tools-setup-offline-2.11.exe編譯提示Could NOT find Perl,這個Perl如何安裝?
云服務(wù)器apache如何配置解析php文件?
云服務(wù)器的linux中如何搭建php運行環(huán)境?
深入剖析Shell命令運行機制與權(quán)限管理
![深入剖析<b class='flag-5'>Shell</b>命令運行機制與權(quán)限管理](https://file1.elecfans.com/web2/M00/C4/3B/wKgaomXqlkeAbiJWAAAXOctxl84592.png)
評論