一晃做程序員也有十年了,總覺(jué)得時(shí)間過(guò)的很快,仿佛第一次寫程序還是去年的事情。雖然到現(xiàn)在也已經(jīng)換了三四家公司了,但總有種自己沒(méi)有做過(guò)什么的感覺(jué)。于是便想把個(gè)人的經(jīng)歷寫下來(lái),留給以后的自己作為個(gè)回憶。
大學(xué)時(shí)代
我原本并沒(méi)有想過(guò)學(xué)計(jì)算機(jī)。在高中時(shí)我搞過(guò)化學(xué)競(jìng)賽,2005年考大學(xué)時(shí)填的志愿也和計(jì)算機(jī)無(wú)關(guān),然而機(jī)緣巧合,我的分?jǐn)?shù)只能服從專業(yè)調(diào)劑分配,誤打誤撞進(jìn)入了計(jì)算機(jī)專業(yè),屬于沒(méi)有任何編程基礎(chǔ)的”普通學(xué)生“。在大學(xué)的時(shí)候一直仰望著各種信息學(xué)競(jìng)賽大神,在被碾壓中渡過(guò)了四年本科時(shí)光。大一大二的時(shí)候?qū)τ诰幊淌怯X(jué)得既新奇又畏懼,常常在語(yǔ)法上被困擾半天,又或是為了一個(gè)邊界條件而調(diào)試半個(gè)小時(shí),算法也一直是我的短板,只到現(xiàn)在還是會(huì)對(duì)算法面試有一種天生的緊張。如果說(shuō)在本科的大學(xué)時(shí)光中有什么事情是我對(duì)于寫程序這件事情產(chǎn)生熱愛(ài),那便是大三時(shí)選修的一門《基于Visual C++的MFC編程》。MFC技術(shù)已經(jīng)作古多年,知道這個(gè)名詞的程序員估計(jì)也都年紀(jì)不小。雖然這門課程上學(xué)到的知識(shí)在后來(lái)的工作中并沒(méi)有用到,但是第一次寫出在Windows上可以運(yùn)行的非常簡(jiǎn)單的界面程序,那種成就感,比大一大二抄書本調(diào)試出來(lái)的遞歸程序要高的多,這門小技術(shù)也讓我在大三大四的許多大作業(yè)上沾了些光:畢竟助教比起在命令行運(yùn)行的指令,更喜歡鼠標(biāo)點(diǎn)點(diǎn)就可以出來(lái)的界面。自此我便在單機(jī)圖形界面程序上興趣大增,大四的時(shí)候用C#寫WinForm的程序作為軟件工程課的大作業(yè),和大部分其他用Java寫出的界面”劃清界限。
移動(dòng)應(yīng)用工程師
學(xué)生時(shí)代寫程序并不能作為”程序員“的經(jīng)歷,我真正的成為一名程序員要從大四開始說(shuō)起。大四的時(shí)候保研結(jié)束,有些空閑的時(shí)間,想著找一些事情做做。機(jī)緣巧合認(rèn)識(shí)了一個(gè)大很多屆的師兄,自己開了一個(gè)公司做智能手機(jī)應(yīng)用。那是2009年,現(xiàn)在二分天下的蘋果和安卓的代表手機(jī)還是iPhone 2G和HTC G1,系統(tǒng)的版本是iPhone OS 2和Android 1.5. 我進(jìn)公司實(shí)習(xí)的第一個(gè)應(yīng)用是把一個(gè)在iPhone上的工具類程序移植到Android上。當(dāng)年的Google還可以訪問(wèn),但是Android的代碼示例也幾乎只有官方的Demo,公司里也并沒(méi)有沒(méi)有別的會(huì)寫Android程序的程序員。正是在這樣一抹黑的情況下,我邁出了移動(dòng)開發(fā)的第一步。當(dāng)時(shí)每天去公司就是把一臺(tái)G1連上筆記本電腦,改兩行代碼后花上半分鐘運(yùn)行一下,看看效果,不行再改兩行再試。效率非常的低下。功夫不負(fù)有心人,做了三個(gè)月之后程序終于上線了。雖然反響也并不好,沒(méi)有達(dá)到iPhone上的營(yíng)收效果,沒(méi)多久就從Market上撤下來(lái)了;但不管怎么說(shuō),也是我第一次寫的產(chǎn)品代碼,我在程序員的道路上邁出了第一步。
09年畢業(yè)后上了研究生,研究的項(xiàng)目也正好是基于Android的,期間做過(guò)Android系統(tǒng)程序的修改,包括修改Java代碼和底層的C代碼,現(xiàn)在看來(lái)都很簡(jiǎn)單粗糙,完全不值一提。但是最寶貴的可能就是讀了大部分Android的框架代碼,雖然現(xiàn)在已經(jīng)面目全非,但是在以后的工作中看再大的代碼庫(kù)也不會(huì)覺(jué)得無(wú)力。
研究生期間”不務(wù)正業(yè)“又輾轉(zhuǎn)做了幾個(gè)公司的intern,當(dāng)時(shí)為了能兼顧實(shí)驗(yàn)室和intern,特意都選擇了可以remote的實(shí)習(xí)。其中包括兩家在美國(guó)的公司。在這兩家公司最大的收獲便是鍛煉了英語(yǔ)讀寫說(shuō)的能力,從一開始面試的時(shí)候連名詞都聽不明白,到后來(lái)可以和老外侃侃而談,在這里邁出的第一步很關(guān)鍵。另一個(gè)收獲就是除了Android之外,又接觸了iOS的編程(當(dāng)時(shí)還叫iPhone OS),學(xué)習(xí)了一門叫Objective C的語(yǔ)言,以至于很長(zhǎng)一段時(shí)間在Java和Objective C之前切換的時(shí)候會(huì)不自覺(jué)的打出括號(hào)和點(diǎn)的組合。
整個(gè)研究生期間我的技能點(diǎn)幾乎都點(diǎn)在了移動(dòng)開發(fā)上,關(guān)注各種安卓蘋果操作系統(tǒng)的新功能,也會(huì)借著職務(wù)的便利去玩一些新的機(jī)型硬件。加之那幾年移動(dòng)應(yīng)用的發(fā)展迅速,市場(chǎng)是對(duì)于移動(dòng)應(yīng)用開發(fā)者還有很大的需求,于是自己對(duì)自己的定位為一名移動(dòng)應(yīng)用開發(fā)者,并將至作為自己畢業(yè)后找工作的方向。
2012年7月研究生畢業(yè),在年初的時(shí)候我開始了找工作,由于實(shí)驗(yàn)室的背景關(guān)系好多師兄畢業(yè)后都選擇去了國(guó)外大公司工作,于是我也在期待著可以步師兄們的后塵。無(wú)奈自己的硬實(shí)力不夠,沒(méi)有能夠通過(guò)國(guó)外大廠的面試。在國(guó)內(nèi)的找工作也并沒(méi)有非常好的進(jìn)行,大公司并沒(méi)有很多移動(dòng)開發(fā)者的職位,待遇比較不錯(cuò)的職位投遞了簡(jiǎn)歷卻并沒(méi)有得到回應(yīng)。在機(jī)緣巧合之下,有幾家日本的IT公司來(lái)到中國(guó)招聘畢業(yè)生,我參加了其中一家公司的招聘會(huì)并順利的通過(guò)了面試,來(lái)到了日本東京開始了自己的程序員生涯。
我的正式職業(yè)生涯的第一家公司(暫且稱之為D社),在當(dāng)時(shí)是一家移動(dòng)手機(jī)游戲?yàn)橹黧w運(yùn)營(yíng)業(yè)務(wù)的公司,在當(dāng)年憑借著功能機(jī)上的游戲地位站在日本手游界的Top2位置。D社雖然其收購(gòu)了美國(guó)的一家公司在舊金山也有分部,并且也連續(xù)幾年在海外招聘了一些外國(guó)的畢業(yè)生程序員,但是本質(zhì)上還是一個(gè)比較偏傳統(tǒng)的日式IT公司。
D社對(duì)于新加入公司的畢業(yè)生程序員的培訓(xùn)不得不說(shuō)還是做的比較到位,首先對(duì)于海外招聘的畢業(yè)生,提供了日語(yǔ)的全日制培訓(xùn)以及之后正式入崗后的日語(yǔ)追加培訓(xùn)。其次,在正式分配部門之前,有為期兩個(gè)月的技能培訓(xùn)。技能培訓(xùn)的內(nèi)容是將公司內(nèi)的Perl框架簡(jiǎn)化后讓大家進(jìn)行一個(gè)類似于填補(bǔ)作業(yè)的項(xiàng)目,并全程有老師指導(dǎo),每階段需要提交代碼并且答辯。答辯不通過(guò)的話需要再等兩天后才可以預(yù)約下一次答辯?,F(xiàn)在看來(lái)過(guò)于嚴(yán)苛和形式主義,但是在以后的工作中,越來(lái)越體會(huì)到新人培訓(xùn)的重要性,因?yàn)樵谥蟮墓緩臎](méi)有過(guò)這樣細(xì)致到“手把手”式的培訓(xùn)。
我自己覺(jué)得受益比較深的幾點(diǎn):
對(duì)于每一句寫下的代碼,老師會(huì)問(wèn)為什么這么寫,有沒(méi)有別的寫法,各種寫法有什么不同?會(huì)細(xì)扣到代碼的順序,變量名的命名,注釋的語(yǔ)法等等。實(shí)際上這是非常細(xì)致的代碼審查(Code Review)流程,大部分新人程序員著眼于如何快速的實(shí)現(xiàn)功能,有時(shí)會(huì)不假思索的借鑒來(lái)代碼,而我之后供職的公司并沒(méi)有這樣的培訓(xùn),大多數(shù)的代碼審查也只是停留在錯(cuò)誤檢查和性能上。個(gè)人覺(jué)得在一開始寫程序時(shí)養(yǎng)成良好的習(xí)慣非常重要,尤其是對(duì)于剛脫離校園環(huán)境的程序員。
老師也教會(huì)了很多工具的使用,比如vim,git,bash等基本操作,比如用bash完成對(duì)Apache log的簡(jiǎn)單統(tǒng)計(jì)分析等等。這個(gè)其實(shí)是程序員的提高生產(chǎn)效率的方法,在之后的公司中遇到太多的新人進(jìn)入公司好幾個(gè)月還在git提交上遇到各種困難?;蛘卟坏貌缓馁M(fèi)體力做一些簡(jiǎn)單腳本可以解決的問(wèn)題。比起教會(huì)的知識(shí),更重要的收獲是萬(wàn)事都可以腳本化的信念,不會(huì)因?yàn)樽约旱谋韭毠ぷ鞑话▽懩_本而對(duì)于腳本就打退堂鼓。
在D社的培訓(xùn)結(jié)束后加入了一個(gè)臨時(shí)的崗位,做了三個(gè)月的Perl的網(wǎng)站開發(fā),之后又調(diào)去了別的部門操刀舊業(yè),維護(hù)公司的門戶App,說(shuō)實(shí)話門戶App的技術(shù)含量真心不高,就是WebView封裝出來(lái)的。期間做了唯一一件有些技術(shù)含量的事情是把App內(nèi)的聊天功能加上了推送功能。在客戶端啟動(dòng)時(shí),在服務(wù)器端注冊(cè)客戶端的推送口令,在客戶端的網(wǎng)頁(yè)里通過(guò)api來(lái)通知服務(wù)器把消息放進(jìn)隊(duì)列,服務(wù)器端有定時(shí)任務(wù)去消化隊(duì)列中的消息。 這其實(shí)是一個(gè)非常普通的小系統(tǒng),也比較成熟,對(duì)于個(gè)人來(lái)說(shuō)主要的作用就是獨(dú)立設(shè)計(jì)并且完成了一個(gè)完整的系統(tǒng),并且在生產(chǎn)環(huán)境中實(shí)際的運(yùn)行起來(lái)。
在D社的日子沒(méi)有持續(xù)很長(zhǎng)時(shí)間,最后在公司的半年被調(diào)任到游戲部門,做了一款基于Unity2D的手游,雖只有短短的四個(gè)月經(jīng)歷,但是也可成為是個(gè)人職業(yè)生涯中出品的第一款游戲,它是一款抄襲了FlappyBird的山寨游戲,在制作的過(guò)程中重溫了一回用C#,順便熟悉了一下Unity2D開發(fā)環(huán)境。
反思一下自己在D社的1年半,在職場(chǎng)的第一份工作并沒(méi)有能夠很好的積累。而只是停留在完成布置的任務(wù)階段,并沒(méi)有去主動(dòng)的學(xué)習(xí)。
后端程序員
在D社待了一年半之后跳槽到了I社,I社是一家在美國(guó)以工作搜索引擎為主體業(yè)務(wù)的公司,被日本R社收購(gòu)后在日本開張了辦公室。加入I社的時(shí)候辦公室只有二十名不到的程序員,等到離職的時(shí)候已經(jīng)超過(guò)兩百人,可以說(shuō)見證了I社在東京辦公室的快速發(fā)展時(shí)期。
在I社的前三年我一直在SEM組工作,SEM(Search Engine Marketing)組的主要任務(wù)是自動(dòng)的將公司投放在搜索引擎上的廣告優(yōu)化。這是一個(gè)純后端的組,以前的工作經(jīng)驗(yàn)在這里并沒(méi)可以發(fā)揮的地方。我的工作內(nèi)容,從一開始去開發(fā)維護(hù)一個(gè)基于Python的內(nèi)部工具網(wǎng)站(后來(lái)知道老板看我的簡(jiǎn)歷是做App的,誤以為我是前段能手),三個(gè)月之后Python工具網(wǎng)站的開發(fā)告一段落,開始接觸競(jìng)價(jià)算法(Java后臺(tái)程序)。當(dāng)時(shí)正適逢移動(dòng)流量開始漸漸追趕并超過(guò)個(gè)人電腦的流量,針對(duì)移動(dòng)端廣告進(jìn)行競(jìng)價(jià)調(diào)整(Bidding Adjustment)是一個(gè)重要的功能。正是在進(jìn)行這一工作的時(shí)候,我有機(jī)會(huì)去主導(dǎo)從MySQL切換到RabbitMQ的解決方案,解耦合算法端和API端的緊密聯(lián)系。并且通過(guò)和系統(tǒng)工程師的配合,解決了首次部署RabbitMQ中遇到的問(wèn)題,并設(shè)置了警報(bào)規(guī)則去監(jiān)視系統(tǒng)的運(yùn)行健康狀況。在切換的過(guò)程中,為了保證無(wú)故障的切換,先后采用了試運(yùn)行(Dry Run)的方式模擬從MySQL切換到RabbitMQ的場(chǎng)景,接著運(yùn)用了A/B test的工具分出少量流量測(cè)試RabbitMQ流程的穩(wěn)定性,最后達(dá)到100%切換后進(jìn)行代碼的清理。在這個(gè)項(xiàng)目中我學(xué)到了很多寶貴的經(jīng)驗(yàn),對(duì)于以后進(jìn)行的一些重構(gòu)式工程有很重要的方法論上的參照意義。
在SEM組的工作使我從一個(gè)入門的初級(jí)程序員,成長(zhǎng)到可以去帶新人的mentor,除了做每個(gè)季度組里的季度目標(biāo)意外,我也參與到全公司的推進(jìn)的項(xiàng)目中。比如JDK從1.6升級(jí)到1.7,從舊的部署系統(tǒng)遷移到新的部署系統(tǒng),啟用CI/CD模型等等,在做這些項(xiàng)目的同時(shí),自己接觸到了在平常的開發(fā)過(guò)程中不會(huì)遇到的問(wèn)題,比如如何解決庫(kù)中的class沖突,CI/CD模型適用/不適用的情況等等。
于此同時(shí),自己也不滿足于只是去做分配下來(lái)的任務(wù),開始觀察并思索作為工程師的痛點(diǎn)。比如,每次上游的一些庫(kù)會(huì)莫名其妙的改變一些公有接口,導(dǎo)致下游的項(xiàng)目構(gòu)建收到影響,結(jié)果給下游項(xiàng)目的開發(fā)人員帶來(lái)了額外的負(fù)擔(dān)。另一方面,上游庫(kù)的開發(fā)者要想改變刪除過(guò)期的接口讓下游項(xiàng)目遷移到新的接口,又苦于在公司內(nèi)部喊嗓子得不到有效的回應(yīng),下游項(xiàng)目的工程師沒(méi)有動(dòng)力去及時(shí)的跟進(jìn)改變,導(dǎo)致過(guò)期接口的刪除遲遲不能進(jìn)行。在這種情況下,如何可以減少不必要的公有接口修改,同時(shí)又能提高必要公共接口修改的曝光性?在研究了公司的構(gòu)建系統(tǒng)之后,我決定在構(gòu)建系統(tǒng)上,利用一些開源工具和Java編譯插件的技術(shù),實(shí)現(xiàn)了兩個(gè)小功能:1. 在發(fā)布庫(kù)的新版本是總是和最后一個(gè)舊版本比較API的修改,如果有任何公有接口的修改或缺失則給出警報(bào)。2. 提供編譯期的注解(Annotation),讓程序員可以對(duì)公有接口(類)設(shè)置過(guò)期時(shí)間,在過(guò)期時(shí)間到來(lái)之時(shí)下游的項(xiàng)目如果有引用則會(huì)出發(fā)構(gòu)建失敗。這兩個(gè)功能我是一前一后做出來(lái)并在公司內(nèi)部發(fā)布,但是風(fēng)評(píng)卻是前一個(gè)平平偏向負(fù)面,后一個(gè)得到不少的點(diǎn)贊和使用,但也引起了不少麻煩。然而由于當(dāng)時(shí)急功近利的心里,并沒(méi)有很好的去follow。
I社是我從一名初級(jí)程序員向著高級(jí)程序員成長(zhǎng),隨著在公司的時(shí)間增長(zhǎng),手頭的工作也很快不能夠滿足自己的興趣,在SEM組待了將近三年之后我的經(jīng)理建議我換組,在經(jīng)歷了一番掙扎后我選擇了去一個(gè)有前段以及順帶一些移動(dòng)應(yīng)用的組,在這里我又重操了一段做移動(dòng)端應(yīng)用的經(jīng)歷,并且又學(xué)習(xí)了一些前段方面的知識(shí)。
在I社待了3年半的時(shí)間,當(dāng)公司越來(lái)越大之后,時(shí)常會(huì)感到個(gè)人的貢獻(xiàn)越來(lái)越有限,感覺(jué)個(gè)人的成長(zhǎng)也在逐步的緩慢。在對(duì)比了其他同事的晉升道路后,仿佛看到了自己在N年后的場(chǎng)景。但是之前覺(jué)得在日本沒(méi)有比I社更適合自己的公司了,于是也一直沒(méi)有去尋求新的機(jī)會(huì)。去年隨著幾位前同事的離職,自己也開始認(rèn)真的考慮換工作的事情。
恰逢也同樣是美國(guó)總部的H社在東京開始招全棧程序員,雖然同樣是美國(guó)公司,但是H社還尚未上市,團(tuán)隊(duì)也較小,所以抱著去施展一番拳腳的想法去面試了H社全棧工程師的職位,并于去年7月加入了H社公司。
全棧程序員
加入H社后首先感到的很大的Gap,便是在公司的技術(shù)上。在I社,我所碰到的領(lǐng)域都已經(jīng)有了成熟的解決方案。但是在H社,跟I社所對(duì)應(yīng)的一系列基礎(chǔ)設(shè)施建設(shè)卻遠(yuǎn)遠(yuǎn)稱不上完善。這讓我進(jìn)入公司之后很是懷疑了自己的選擇。在進(jìn)入公司的前兩個(gè)月,我經(jīng)常會(huì)發(fā)信給全公司的程序員,去探討為什么我們要這么做而不是那么做。并且也提交了很多改進(jìn)方案,希望可以改成我在I社所接觸到的方案。當(dāng)然這些都并不是很順利,在H社的老人們給了非常強(qiáng)力的反擊。在拿不出充分證據(jù)論證的情況下,我只好選擇了暫時(shí)蟄居,先處理好眼下自己手頭的工作。
加入H社后的首個(gè)項(xiàng)目是將一個(gè)年頭已久的PHP前段+后端網(wǎng)頁(yè)改成PHP + Apache Thrift + GraphQL + NodeJS +React的新框架,作為全棧(Full Stack)工程師,我需要從PHP到React頭到尾都做一遍。首先便是讀原來(lái)的PHP代碼,并抽象成Thrift服務(wù)。其次便是在NodeJS服務(wù)器端將Thrift服務(wù)映射成GraphQL的Schema,并實(shí)現(xiàn)GraphQL的Resolver邏輯,然后便是用一個(gè)Node應(yīng)用代替PHP的前段,用React的框架來(lái)渲染出一模一樣的網(wǎng)頁(yè)。在短短的幾個(gè)月內(nèi),從一竅不通的React小白,到完成了整個(gè)頁(yè)面的遷移,自己對(duì)于React框架的應(yīng)用和一些實(shí)踐有了自己的理解。GraphQL也是一個(gè)對(duì)我新鮮的概念,在GraphQL的實(shí)踐中,我感到這個(gè)框架其實(shí)也很適用于我在I社工作的第二個(gè)組,甚至可以在腦海中把原來(lái)的API用GraphQL一一對(duì)應(yīng)起來(lái)。這種相互印證的感覺(jué)讓我再次意識(shí)到做出換工作的決定并沒(méi)有錯(cuò)誤,否則我的思路會(huì)很長(zhǎng)時(shí)間局限在I社的框架中。
在加入H社的三個(gè)月之后我相通了這樣的道理:一個(gè)什么都做的很完美的公司,或許更不是一個(gè)什么都不完美的公司,因?yàn)榍罢咦屓耸チ巳ジ倪M(jìn)的機(jī)會(huì),而后者卻給予了很多這樣的機(jī)會(huì)。于是,我便在工作中,擠出一部分精力去做一些力所能及的改變。首先便從使用的GraphQL入手,通過(guò)調(diào)試發(fā)現(xiàn)存在著過(guò)度查詢(Over fetching)的情況,某些查詢代價(jià)較大的字段,明明沒(méi)有出現(xiàn)在查詢語(yǔ)句中,但是后臺(tái)卻仍然將其返回。于是我通過(guò)標(biāo)注(Annotation),在Resolver層面講字段和Thrift服務(wù)的參數(shù)進(jìn)行映射,使得GraphQL被翻譯程序Thrift請(qǐng)求時(shí)可以自動(dòng)的附上請(qǐng)求字段的列表,在服務(wù)器端根據(jù)字段的列表可以選擇性的返回字段,達(dá)到“減負(fù)”的目的。
春節(jié)期間利用閑暇時(shí)間,把公司的A/B測(cè)試系統(tǒng)進(jìn)行了優(yōu)化,這個(gè)優(yōu)化也是我剛進(jìn)入H社時(shí)最想改變的一點(diǎn),然而遭到很多質(zhì)疑的點(diǎn),于是我在進(jìn)公司提出的propse基礎(chǔ)上做了退讓,專注于解決最基本的痛點(diǎn),加入了基于不同域名實(shí)行不同的分配(Bucketing)。在于現(xiàn)行系統(tǒng)并存的情況下一步一步的將功能發(fā)布了出來(lái),在公司內(nèi)獲得了好評(píng)。
下一個(gè)十年
從2009年第一次實(shí)習(xí)經(jīng)歷算起,一眨眼我已經(jīng)做了十年的程序員。我也過(guò)了而立之年,眼看著行業(yè)里自己已經(jīng)算年齡偏大的從業(yè)人員。
縱觀我的程序員經(jīng)歷,從移動(dòng)應(yīng)用開發(fā),到后端、前段,以及零星的DevOps和Release Engineering的經(jīng)驗(yàn),我覺(jué)的我自己是朝著“全才”的方向發(fā)展。然而全才意味著什么都懂一些,但是又說(shuō)不上是哪個(gè)領(lǐng)域的專家。
近兩年來(lái)在各種媒體上看到大齡程序員的囧境,時(shí)常會(huì)思考自己的以后的方向。我時(shí)常仍會(huì)關(guān)注國(guó)內(nèi)程序員招崗的要求,發(fā)現(xiàn)大多數(shù)崗位還是需要領(lǐng)域?qū)<业娜瞬牛皇侨?。我也時(shí)常會(huì)質(zhì)疑自己,是否太過(guò)貪多嚼不爛。然而我最近似乎想通了一點(diǎn),領(lǐng)域?qū)<襳s全才,兩種人在這個(gè)行業(yè)都是被需要的,只是一般的崗位確實(shí)會(huì)需要你只會(huì)干某一樣便可以。這并不意味著會(huì)的越多就沒(méi)有施展的地方,在初期的創(chuàng)業(yè)公司,以及新成立的部門,這樣的人才還是很有必要的。既然自己的興趣在于了解和挑戰(zhàn)不同的領(lǐng)域,不如索性就將其發(fā)展到極致。
下一個(gè)十年,我想我任會(huì)熱愛(ài)程序員這個(gè)工作,我在現(xiàn)在的崗位上,便朝著填補(bǔ)我技能樹上的空白努力,爭(zhēng)取在下一份工作,可以將自己全部的所學(xué)都能夠用上。
-
程序員
+關(guān)注
關(guān)注
4文章
954瀏覽量
30409
發(fā)布評(píng)論請(qǐng)先 登錄
潤(rùn)和軟件穩(wěn)居數(shù)字業(yè)務(wù)類解決方案市場(chǎng)第一名
阿里云升級(jí)通義靈碼AI程序員,全面上線
TMS320C55x DSP CPU程序員參考補(bǔ)充

睿創(chuàng)微納五年&十年功勛員工頒獎(jiǎng)大會(huì)圓滿舉行
達(dá)實(shí)再度榮獲十大出入口控制品牌第一名
UCD3138A64/UCD3138128程序員手冊(cè)

蔚來(lái)獲得CACSI車型滿意度和售后服務(wù)滿意度第一名
機(jī)械革命發(fā)布CODE AI程序員本
Linux驅(qū)動(dòng)程序程序員指南

AI編程工具會(huì)不會(huì)搶程序員飯碗
第五屆長(zhǎng)沙·中國(guó)1024程序員節(jié)開幕
90后程序員的職業(yè)成長(zhǎng)漫談

十年預(yù)言:Chiplet的使命

評(píng)論