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