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