學(xué)了兩門編程語(yǔ)言后才知道的一些事
曾經(jīng)聽(tīng)大佬說(shuō):作為軟件從業(yè)人員,至少每年學(xué)一門新的編程語(yǔ)言。但事實(shí)往往是知易行難,工作了十多年,除非實(shí)踐中用到了,才會(huì)去學(xué)習(xí)和運(yùn)用一些。
但最近兩個(gè)月?lián)Q了新工作,連續(xù)學(xué)了兩門新的編程語(yǔ)言:Python和Golang。本身自己做了十多年的Java開(kāi)發(fā),從比較復(fù)雜的面向?qū)ο笳Z(yǔ)言向Python和Golang轉(zhuǎn)型,學(xué)習(xí)曲線還是非常平滑的。兩周左右一個(gè)Python項(xiàng)目已經(jīng)上線,不到一周的時(shí)間已經(jīng)可以寫(xiě)Golang代碼。
曾經(jīng)對(duì)全棧工程師很是羨慕,沒(méi)想到自己也慢慢成為了他們??赡苁窃袐D效應(yīng)吧,當(dāng)學(xué)習(xí)和關(guān)注全棧開(kāi)發(fā)(多門編程語(yǔ)言)之后,發(fā)現(xiàn)有很多事已經(jīng)存在很久。
下面分享一些關(guān)于學(xué)習(xí)全棧之后才關(guān)注的人、事、思考:
一、超哥之前也是搞Java的,突然有一天看到他在朋友圈虎虎生風(fēng)地敲Golang代碼,一問(wèn)才知道,他已經(jīng)成功轉(zhuǎn)型全棧工程師,Java、Golang、Python都搞了起來(lái)。當(dāng)時(shí)那是非常羨慕,沒(méi)想到兩個(gè)月后,自己也成為了他。有一次技術(shù)峰會(huì)遇到,沒(méi)想到他也轉(zhuǎn)到教育相關(guān)領(lǐng)域,也在玩GPT。
二、最近在大量看Golang的簡(jiǎn)歷,發(fā)現(xiàn)大量PHP從業(yè)人員開(kāi)始轉(zhuǎn)Golang。雖然說(shuō)PHP是世界上最好的語(yǔ)言,但的確有些老了,也有一些沒(méi)落了。無(wú)論是大廠,還是中小企業(yè),要么直接以Java開(kāi)始,要么開(kāi)始重構(gòu)為Golang。據(jù)百度的同事說(shuō),百度的某些業(yè)務(wù)板塊已經(jīng)開(kāi)始著力將PHP的項(xiàng)目重構(gòu)為Golang。同時(shí)也得知,從PHP到Golang的學(xué)習(xí)曲線要比從Java到Golang的學(xué)習(xí)曲線稍微陡峭一些。
三、自己的親身感受:學(xué)習(xí)Python和Golang并不難,從語(yǔ)言本身來(lái)講它們比Java簡(jiǎn)化了許多語(yǔ)法,只需要幾天時(shí)間熟悉它們的編碼風(fēng)格和語(yǔ)法差不多就能上手了,不要怕。
四、看到一份簡(jiǎn)歷,原本是PHP工程師,但在簡(jiǎn)歷中明確注明:可轉(zhuǎn)其他語(yǔ)言。從大量的簡(jiǎn)歷看來(lái),如果是PHP工程師,那么轉(zhuǎn)Golang好像是PHP從業(yè)者的大趨勢(shì)。當(dāng)然,如果你能夠超越語(yǔ)言本身,可隨便轉(zhuǎn),那就更好了。
五、Python在數(shù)據(jù)計(jì)算、圖表展示、人工智能方面,簡(jiǎn)直不要太便利。一行命令,一個(gè)復(fù)雜的數(shù)學(xué)函數(shù)便實(shí)現(xiàn)了;幾行命令一個(gè)圖標(biāo)便出現(xiàn)了;幾行命令,一個(gè)人工智能的算法便驗(yàn)證了……當(dāng)用于各類腳本編寫(xiě),Python太方便了。
六、Golang在云原生、高并發(fā)方面應(yīng)用的比較廣。我們知道的k8s和docker都是基于Golang編寫(xiě)的。但Golang的精專人員并不多,大多數(shù)是其他編程語(yǔ)言轉(zhuǎn)過(guò)來(lái)的,或者在寫(xiě)主業(yè)務(wù)的同時(shí),用它來(lái)寫(xiě)一些輔助功能??赡軜颖居姓`,但相對(duì)來(lái)說(shuō)應(yīng)該沒(méi)偏差太多。
七、昨晚一朋友打電話,詢問(wèn).net是否要轉(zhuǎn)Java,我說(shuō),還猶豫啥,必須轉(zhuǎn),即便不轉(zhuǎn),多學(xué)一門語(yǔ)言也多了一些生存的空間。
八、學(xué)習(xí)了Python之后,才了解原來(lái)靜態(tài)語(yǔ)言(Java)和動(dòng)態(tài)語(yǔ)言(Python)在發(fā)布流程上有很大的區(qū)別。像Java和Golang,強(qiáng)類型,在編譯期即可發(fā)現(xiàn)一些錯(cuò)誤,但Python就不一樣了,不運(yùn)行,你可能不知道它有錯(cuò)。當(dāng)對(duì)照學(xué)習(xí)時(shí),才發(fā)現(xiàn)之前以為正確的,完美的流程,可能并不適合另外一門語(yǔ)言。當(dāng)時(shí)還有一段感想:當(dāng)我們固執(zhí)的堅(jiān)持這是最好的時(shí)候,往往是受到思維、認(rèn)知和水平等限制,找不到看問(wèn)題或解決問(wèn)題更多維度的外在表現(xiàn)。
九、在學(xué)習(xí)Golang時(shí),發(fā)現(xiàn)Golang的結(jié)構(gòu)體(struct)與Java的類(class)很像,但又不一樣;Golang的切片(slice)和Java的ArrayList很像;Golang的指針(point)類型與Java的引用類型很像,但又不一樣,但對(duì)于方法(或函數(shù))參數(shù)來(lái)說(shuō),它們本質(zhì)上都是值傳遞。Java基礎(chǔ)類型是直接復(fù)制值,引用類型復(fù)制引用,而Golang的值類型直接復(fù)制一份當(dāng)前值,指針類型復(fù)制指針指向的地址。還有其他很多可對(duì)照的。
十、當(dāng)學(xué)習(xí)了多門語(yǔ)言之后,會(huì)發(fā)現(xiàn)沒(méi)有十全十美的語(yǔ)言,只有最適合某一場(chǎng)景的語(yǔ)言。
曾經(jīng)有人說(shuō),當(dāng)你學(xué)習(xí)一門外語(yǔ)之后,便擁有了他們的思考方式。對(duì)于編程語(yǔ)言來(lái)說(shuō),也同樣如此。曾經(jīng)以為程序就應(yīng)該這么寫(xiě),這發(fā)布,這么運(yùn)維……但當(dāng)學(xué)習(xí)一門新的語(yǔ)言之后,你會(huì)發(fā)現(xiàn),還有一群人,在用著另外一種方式改造著世界。
現(xiàn)在該我對(duì)大家說(shuō)了:沒(méi)事多學(xué)一門編程語(yǔ)言吧,即使做不到一年新學(xué)一門。學(xué)習(xí)一門新的語(yǔ)言,它能讓你的編程思想更加抽象和豐富,它能給你提供一種全新的思維方式,它能促進(jìn)對(duì)原有語(yǔ)言的對(duì)照理解,它也能夠給你更多的求職機(jī)會(huì),它也能讓你結(jié)識(shí)另外一群不一樣的人。
另外,告訴大家一個(gè)可怕的事實(shí):Java語(yǔ)言的排行逐年在下滑。