-
1 # 嗝屁鏟屎官
-
2 # 我低端就改我名
先說C語言,真正有用的程式碼可能就3行,前面幾百行只用一次的宏定義,中間幾百行輸入引數檢驗,後面幾百行輸出錯誤處理。中間插著幾個指標轉換加地址運算的炫技程式碼(老手都要反應半天)。寫完特有成就感。然後編譯前,齋戒沐浴,焚香禱告…
再說PHP,無論你用什麼模型,框架,都要記得,你只有一個程序。任何程式碼都可以輸出,任何程式碼都可以結束整個會話…你終於完成了一個分頁模組,發現裡面多出一個大於號。你找遍自己的程式碼都沒發現大於號。經過九九81個小時的折磨,發現是呼叫人家的字串拼接函式有個小bug…
再說java,佔個坑,等有時間寫。TODO:nodejs, oc, bash
-
3 # 慕課網
每種程式語言都會有或多或少的黑點吧……速度快的寫起來麻煩,寫起來簡單的速度又慢,所以大家也不要在較真了,用適合自己的語言就好~不過,要說被黑得最慘烈的語言,小慕就不得不先從PHP說起……
PHPPHP招黑一直被業內人士所熟知,因為PHP本來就是Personal Home Page(PHP最初的全稱),對於很多程式語言的高階特性並不支援。原作者拉斯姆斯當年無論如何都想不到他只是用來製作個人網頁的CGI程式,經過多年的迭代會在業界得到如此廣泛的應用。從那個時候開始PHP就被批評不支援面向物件、沒有名稱空間(namespace)、並不真正支援多執行緒、弱型別和效能差等,但PHP本身也在不斷自我完善和發展,從PHP4開始支援面向物件,從PHP5.3開始支援名稱空間和pthreads多執行緒擴充套件,在PHP7的版本更新中大幅提升了效能。
除此之外,PHP還經常被批評函式名混亂,因為在長年累月的迭代中,為了保證程式的相容性,很多當年的函式名不可能一言不合說改就改。比如同樣是內建函式的getmypid和get_current_user採用了兩種不同的命名風格,甚至還有一些形如rtrim的詭異的縮寫形式。
PHP:雖然被黑的最慘的總是我,但我還是要說出那句“PHP是最好的語言”。
C++、Java、python、JavaScript:……C++C++幾乎是主流語言中最容易讓你寫出“hello world”的語言,找個ide裝上,寫完了只需要點一下編譯並執行,不用像java還要加環境變數,不用像python還要安裝。所有的理工科專業幾乎都要開C或C++的課,但當你寫過一些程式碼,並考出計算機二級,覺得自己能用C++找口飯吃的時候,C++就會殘忍的告訴你,什麼叫“飯裡有毒”。
你會發現,自己的c++和官方的c++,就像LOL裡己方的“兒童劫”和對面的“火影劫”一樣,差距非常誇張。歸根結底,是源於C++的複雜性。
Sort原始碼片段:
JavaJava就像一個老學究,時時刻刻在警告你 “我認為你這種寫法不是很面向物件”。Java過於標準的寫法導致了程式碼十分冗長,在新手眼裡可能比較友好,但是在老手眼裡卻並不這樣。因為Java程式設計師有時候為了少打點字甚至都會修改資料結構,所以即使有程式碼自動補全也仍會讓人頭大。
例如把單詞的字母放進hashset裡,再打印出來。用java寫就要比c++冗長的多……
Java:
C++:
再說一個Java的小坑,Java 和 JavaScript 雖然是巴基斯坦和卡巴斯基的關係,但是Java的Integer 還是可以挑戰一下JavaScript的九九真值表。
Python縮排
其實遊標卡尺的問題真的不能算黑點,整齊的縮排非常有利於程式的可讀性。雖然絕大多數程式語言的編譯器對縮排並沒有什麼要求,但是為了程式碼的可讀性,程式設計師都會寫出帶有優雅層級的程式碼。而python乾脆把大括號這種範圍表示符號省略了,直接用縮排來對程式碼分層。其實買上一塊4k帶魚屏豎起來,一個帶有對齊線的開發工具,寫python完全就可以為所欲為。
python 可以快速成型,可以為所欲為,但它並不是沒有缺點,有時會讓一個開發者脫離了計算機科學的基本理念。一個python程式設計師寫的求一個數的階乘末尾有多少個0的
小演算法:
和正確程式碼比較
程式碼非常相似,結果完全一樣。大家都喊著python慢的,真的只是怪解釋型語言的原因嗎?
JavaScript同樣被黑得夠嗆的還有JavaScript,這個傳說從設計到完工只需10天的程式語言。JavaScript跟Personal Home Page一樣,當初可能只是為了實現一些簡單的頁面互動功能,在應用越來越廣泛後,各種缺陷才慢慢開始浮現。比如神奇的隱式型別轉換,運算1+”2”的結果是12,JavaScript會自動將整數1轉換為字元1,然後與字元2相互拼接,然而1+2+”3”的結果卻是33。
除此之外,JavaScript全域性變數的使用也極易在不同模組之間產生相互汙染,所以很多JavaScript的教材當中都強調要慎用全域性變數,或使用閉包,避免造成全域性汙染。
PerlPerl語言在當年也頗受詬病,比如在一些邋遢、愛炫技的程式設計師寫出的Perl程式碼,恐怕只有本人才看得明白。因為Perl實在太自由靈活了,再加上諸如@_$%&!<>等各種眼花繚亂符號,你完全可以把程式寫成一串天書,跟拿著遊標卡尺寫出來的Python程式碼比起來,簡直就是兩個極端。
另外Ruby的效能差和python2 和python3不相容也算是黑點,python可能是輪子多太方便了,為了讓自己冷靜一下,所以一個熱門的語言同時流行著兩個互不相容的版本。
被黑較少的語言相對處於所謂dominant地位的,「黑點」最少的應該只有兩類。一種比如Haskell和Lisp等「學院派」程式語言,它們處於鄙視鏈頂端,由於難以真正掌握,一般程式設計師想黑但無從下手;還有一種是已經漸漸淡出歷史舞臺的程式語言,比如曾經熱門的ASP。
那些在程式設計師圈子內口口相傳,津津樂道的「黑點」,除了因程式語言本身設計和開發遺留的客觀因素之外,其實還有一小部分主觀因素。比如某程式語言得益於簡單易用,很多缺乏理論基礎和經驗的程式設計師經過簡單培訓、短期自學,都能寫出可以實現功能但質量可能經不起推敲的程式碼。如果出於對這部分尚待提高的程式設計師的排斥,而遷怒於程式語言,小慕認為有失偏頗。
總之無論基於什麼理由,只要還在被黑就證明了這門語言還活著。
比如PHP今年在TIOBE排行榜上下降了一位,但依然排名第八;
JavaScript得益於風頭正盛的HTML5技術,在移動網際網路時代依然大放異彩,甚至憑藉Node.js從前端走到了後端。
所以語言避免被黑也取決於:能否在技術上得以不斷的自我完善,商業機構或者開源社群是否提供持續的維護,在應用上能否得到業界不斷的充實和創新。
其實有些時候,一種語言的缺點也會是它的優點。語言只是工具,只要你用它能達到目的就行啦~
回覆列表
Java: 一個能把小專案做成中等專案,中等專案做成大專案的語言Python:一代更比一代慢,看書附帶遊標尺……Rust: 論可變的trait物件的list的寫法: Vec<Rc<RefCell<Box<Trait_Name>>>>。還有Rust寫起來程式就感覺自己在咆哮啊啊啊println!C++: 原來你什麼(feature)都想要……Perl: 天啟式的神秘語言,非常有助於對鍵盤上那些特殊符號鍵位的掌握。LISP: 括號括號還是括號Node.js: callback hell...Html/CSS: 恩?對不起,亂入了,這是討論程式語言的地方lisp: 面向腳踏板程式設計javascript:java不是我爹java:一次編寫,到處除錯C++:設計模式裝逼犯集中營C: C++不是我兒子python: 最慢的指令碼語言perl: 面向正則表示式程式設計易語言:面向木馬外掛程式設計php: php是世界上最好的語言