編程語言吐槽之Java與C


 

包含各種偏見和武斷,請謹慎閱讀。

為什么在學校學習的C,拿到企業生產中不起作用?

而為什么企業級的程序員,依然對C/C++無法掌控?在算法各方面不夠精湛?

根本原因還是應用場景的不同。企業級的開發,主要是為了能夠快速出活,能夠快速將業務需求轉換為可執行的代碼,立馬部署上線開始工作。這就需要Java這樣的重型機槍。在這里,重點是能夠快速地做出一個“轉換”,把復雜的business model快速轉換為代碼的“表達能力”。

而C/C++所解決的問題,其實更多的是底層,也就是為上面的“快速構建”和“客戶需求的轉換能力”,提供底層庫的支持。所以,它的視角和范圍,根本不是去關心如何表述客戶的業務需求,它也不擅長去表述業務需求關系。

它真正擅長的是表述計算機的運轉關系!所以在這個層級,你的算法各方面就開始有了用武之地。因為在這個層次上,你的優化、算法的效率,都和計算機如何運轉息息相關。例如:你的代碼如何被加載進內存,在CPU內又是如何調用相應的指令集,內存分配上又會經歷哪些過程,這一個個的環節都關乎你想要去追求的效率。

另一方面,高層語言和底層語言又是相互結合的:上層的Java這些確實善於描述business model,但是,沒有底層庫的支撐,它的表述無異於一紙空文。

而下層的庫,如果沒有上層的語法糖和high level的抽象,就不得不一直局限在計算機無盡的運轉細節里,永遠無法跳出來,為經濟生產、為解放生產力、發展生產力的現實用途服務。

所以,回到最初那個問題,為什么你學校學習的C那些在企業級生產中不管用?因為它的適用范圍是為了解決計算機底層的問題。而企業級應用的高級程序員,他擅長的其實是快速准確地把現實的客戶訴求,轉換為可工作的代碼,並能夠掌控大規模的代碼量,這是他的核心競爭力。但他其實少有關注底層的實現,少有去關心如何配合計算機的機械性地運作方式。

基於此,很多人對語言的評價是極其不中肯的。

有的人說,Java真是簡單,傻瓜式的語言,沒啥意思。可這就完全搞錯了重點,簡單易學,正是能夠快速表達客戶需求的一個大前提。而精髓呢?精髓是看你如何運用這個工具,一方面能夠精准地表述出實際的業務模型,另一方面是看你能夠用這個工具,能夠如何巧妙地組織各個模塊,使得它們能夠具備擴展性、可重用性,從而能夠應對快速變化需求的挑戰。

另一部分人說,C太不安全了、沒法做好的異常、沒法做精准的泛型、更無法做漂亮的繼承。可是,C的應用范圍就是底層啊。這里提到的一堆面向對象的理念,其實是現實世界的運作思維模式,但這個不是計算機機械式的思考方式。機械式的思考模式,就是匯編、就是語句跳轉、就是內存分配。在這個體系里,其重點就是為higher level制造工具,為你設想的那些面向對象的思維概念制造工具。

這就好比是,你拿到的是一塊原木,你非得去抱怨,它怎么不長成圓盤形,為什么不長成方形,為什么不長成螺絲帽的形狀,這都不能用好吧?!這TM不廢話么!你的工作不就是對這些天然的原木做工,把它們制作成可以供其它生產環節使用的工具么。

一個是快速地開發出一個程序,另一個是開發出快速的程序。這就是本質的差別。

前者需要的是貼近人的、現實的思維模式,需要用到的從現實到計算機的轉換越少越好。

后者需要的是貼近計算機的思維模式,越是能夠從計算機運轉機制角度思考問題越好。

 

 

 

 

 

近期回顧

減法 、認知、核心
一次艱難debug的反思
J2EE導論 | 疑惑篇

 

 

 

如果你喜歡我的文章或分享,請長按下面的二維碼關注我的微信公眾號,謝謝!

 

 

   

更多信息交流和觀點分享,可加入知識星球:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM