開發語言很重要!!!
在我還是小白的時候,經常聽公司里老鳥們叨叨各種開發語言,最后幾個老鳥總會把話題落在 “討論這個沒意義,開發語言不重要,最重要的是邏輯”,然而10年的開發經歷讓我覺得,開發語言對于一個程序員來說非常重要,甚至可能會左右一個程序員的職業規劃。
“開發語言不重要”這句話,也許應該換個方式理解為“每種語言都各有特點,各得其所”。因此,不同的語言確實不太適合在某一個特點上進行比較。
比如動態語言Javascript,PHP、Python 用來與語言Java、C++、Golang進行比較性能、開發效率都是不公平的。
關于靜態語言與動態語言
動態語言被發明出來本來就是為了提高開發效率,降低學習門檻,讓更多的人能夠最快的掌握并使用它們;為了降低難度,動態語言通常都使用解釋器執行動態語言,犧牲了性能。
我認識的支持動態語言的人中絕大部分都深信計算機的發展會讓語言對性能的影響變得微乎其微,而開發效率和難易程度直接影響產品投入市場的時機以及團隊成員相互配合的深度,開發語言設計出來本就是為了提高開發效率、降低開發門檻,如果一味注重性能何不直接使用匯編語言?
支持靜態語言的人則認為,靜態語言不僅效率高,而且結構非常規范,便于調試,類型安全更有利于保障運行時的穩定性;目前大部分靜態語言的語法已經非常簡單易用,搭配合適的IDE開發效率并不比動態語言差;靜態語言運行效率更高,更高的效率能夠提高軟件工作瓶頸,在互聯網軟件高頻、高并行的需求下,任何性能的優勢都能帶來極大的好處。
相信我,很多關于語言的爭論在程序員中間非常激烈,甚至有一些社區里關于開發語言的爭論已經接近狂熱的宗教偏見,本文只是以動態語言和靜態語言舉例,現實中很多關于語言的爭論是間于某一種語言與其他語言的,所以實際情況復雜很多,如果你是一名新手,并且很不幸的看到了這些爭論,可能會讓你陷入迷茫。
新手如何選擇第一門開發語言
首先,從我自己的經驗以及身邊認識的程序員的真實情況來看,從事軟件開發只掌握一門開發語言是不可能的;絕大多數程序員至少學過3種開發語言,不過肯定有1種比其他的掌握得更深入更精通。
在有經驗的程序員眼里,不同的語言就如同木匠手中不同的工具,在項目中的不同部分使用最適合的工具。
對于新手而言,可能這有一些困難,不可能在短時期內掌握太多語言,并且也不推薦新手這樣做。更好的方法是先學習一門自己最容易學習的語言。
找到“最容易學習”語言最常見的方法是看看身邊的程序員(可能是你的朋友、同事、前輩、學長)他在用什么語言。
對于新手而言,語言的學習是一個辛苦的過程,從一無所知到成為高手需要長時間的練習,如果身邊有一個有經驗的前輩,他可能會讓你學習起來少走很多彎路,并且你可以從他身上很清楚的看到你學習這門語言后能夠做什么,即便在你還什么都寫不出來的階段。
有一種情況是你身邊有足夠多的選擇,這時,對于新手最好可以先從一門動態語言開始你的程序員人生。
前面說過,動態語言的好處就是入門門檻低,學習速度快。很多人還在學習階段可能就打退堂鼓了,選擇動態語言可以花盡量少的時間體會到開發的樂趣,更快的知道用計算機語言編寫程序是什么滋味,或者讓你更快的勝任一個工作崗位。
所以:
- 看看身邊的朋友、同事、前輩在用什么語言,跟他學
- 如果他們使用的語言中有動態語言(例如JavaScript、Python、Lisp、PHP),那么試試先從這些語言學起。
看到這里,也許你會覺得我要說的是新手選擇語言“從身邊人著手、從動態語言著手”,主要與個人際遇相關,語言本身根本不重要。
別誤會,我的觀點依然是“語言很重要”
想當壽司師傅,至少得先吃幾頓日本料理吧;想當賽車手至少得先開過幾次車吧;在開始你的程序生涯前,至少能寫點代碼運行起來吧。(大多數程序員心中埋下的那顆種子都是從一句簡單的腳本開始的,或則一個指令,甚至是游戲里的指令,比如 show me the money
, black sheep wall
)
開發語言如何影響程序員的?
說說我的個人經歷。
在我學會第一門語言:ASP(當時挺流行),并開始用它做一些有興趣的事情后,它漸漸的不再滿足我的需要,當時的我想學會一門能夠開發桌面應用的語言(ASP是專門用來開發動態網頁的腳本語言),于是學習了C#,之后微軟推出.Net框架,C#可以同時開發ASP.net這樣的Web應用,又可以開發Windows環境下的桌面應用和服務端控制臺程序,這讓我非常滿足,當時的我沉浸在C#給我帶來的好處。大概5年之后,由于工作的原因,我手上負責的項目客戶要求在Linux服務器上運行。當時我并不愿意,Windows服務器雖然飽受詬病,但是我能夠熟練的配置和使用,可以節省很多時間,而且我很討厭面對Linux服務器黑黑的終端界面,不過如果項目能夠運行在Linux服務器上不僅可以大大提高中標機率,客戶還愿意為之付出更多的報酬。
我不得不學習Java,并用它完成了那個項目,逐漸的我發現,Java也非常不錯,雖然沒有C#那么多微軟預設好的解決方案,需要依賴很多第三方的包;剛開始花費不少時間去掌握這些第三方的包并學會搭配它們,但是也正是因為Java生態環境,讓我逐漸的喜歡上了它。然而之后的事情改變了我之前接近7年對軟件開發的理解。
我不再迷信于某一種開發語言,慢慢的我有意識的去學習在不同領域表現優秀的語言,C++、JavaScript、PHP、Lua、Python、Lisp、Golang、Rust、Swift,有的深入,有的淺嘗,每一種語言的存在都是有道理的。
語言的適用性并不是說哪些語言擅長哪類項目,當今開發語言的發展來看,很多開發語言的功能是交叉的,例如原先只用來做Web前端腳本的JavaScript現在可以通過Node.JS開發服務端軟件、桌面軟件,也可以通過Hybrid或React Native開發手機應用;Python隨著版本的不斷更新,開發大型服務端程序案例也越來越多;C#將能夠運行在Linux操作系統上(6年前如果能的話,如今可能我不會寫這篇文章)、Swift同樣也可以開發服務端軟件而不只是IOS軟件;各種開發語言都不甘落后,進化自己使其可以做更多的事情。
那么,開發語言的選擇在今天已經不僅是根據你要開發什么項目,而可能需要考慮更多的因素。
- 團隊成員擅長什么?
- 你所在的城市哪種開發人員更好找?
- 你的團隊希望吸收的精英擅長什么語言?
- 你想購買的云服務支持哪些語言
- 你所從事的領域的最著名的開源項目使用的哪種語言?
包括但不限于以上因素都可能是如今你考慮學習、使用第二門開發語言的因素,不再是僅僅討論哪門語言擅長做什么這么簡單了。
選擇多不等于不重要
是的,現在新手也成為一名程序員可以選擇的開發語言比過去多多了,而且每一門開發語言都很優秀,正因為如此,開發語言的選擇比過去更加重要,需要考慮更多因素。
歡迎大家簡書或我的個人博客與我交流