入職以來總結
正式工作到現在也將近5個月了,之前一直很忙,沒怎麼做過總結。最近稍微好了一些,趁著週末簡單總結一下這幾個月來的收穫,以及不足,以及做一些簡單的規劃吧。
入職以來,其實很多事情都超出了自己的預料。首先職位上,之前一直做windows上面的java開發,做過一些web相關的J2EE開發,實習期間做的主要是J2SE,所以總的來說,其實自己比較熟悉的就是java,面試也是java相關的崗位。但是入職後被分配到了看著比較高大上的“雲端儲存”部門,做linux下的服務端開發。因為作業系統以及開發環境都不熟悉,而且入職兩週後,就讓負責比較坑的hls專案,所以壓力確實很大。現在想想,當時主要壓力來自幾個方面:一是對hls整體架構不熟悉,推流的rtmp協議一無所知,nginx的工作原理以及配置完全不熟悉,二是分散式的key-value資料庫redis和http伺服器gunicorn從來沒聽過,三是音視訊的處理的一些工具,比如ffmpeg完全不知道怎麼用,四是一些常用的分析工具,比如抓包工具也不知道怎麼使用,再加上對python這門語言本身不熟悉,所以剛開始一兩個月,經常面對問題,無從下手,當時覺得自己弱爆了,現在回過頭來想想也可以理解,畢竟面對完全陌生的開發,在缺乏比較全面指導的情況下,還是比較難的,而我自身的基礎又比較差,所以在開發,以及改進上面進展緩慢也是正常的。換句話說,如果讓我在已經成熟架構上面做一些業務邏輯的開發的話,我想我應該很快上手,過程也會順利很多。
說到總結,還是通過之前的工作,總結下自己的優缺點,以及亟待改進的地方吧。
首先,優點還是有的。
一個是感覺自己在學習新東西,新技能方面,比想象中的要快。比如說python也就看了兩個星期,就可以寫一些統計分析,郵件相關的程式;rabbitmq,redis,thrift協議這些大概也就各一週的時間就能夠學會基本的使用,能夠做一些基本的封裝;go語言也是邊學邊寫,能夠在邊學邊寫的過程中,用到一些相對來說比較複雜一些的特性,比如反射等等來改進程式碼。
第二點就是毅力方面還是不錯的,比如說即使面對完全陌生,無處下手的東西,也不會覺得自己要放棄,或者一味求助他人,而是能夠不斷找資料,一點點的熟悉,雖然過程中會走不少彎路,但是我覺得還是比較值得肯定的,做技術確實需要不服輸的精神。
下面主要說下自己的缺陷,通過工作可以發現,有一些缺陷很明顯。
一是知識面太窄,這個真是硬傷。以前一直搞搞資料結構,看看演算法,寫寫java的業務邏輯,就覺得自己不錯了,但是發現很多東西其實完全不會,也沒有系統學習過。比如網路層的協議,作業系統排程,執行緒、程序、協程方面的知識完全不瞭解,或者只是知道一些基本的概念,在寫程式的時候很少考慮這些,比如cpu分配,執行緒切換等等。
二是linux實在是太不熟了,作為linux下的服務端開發程式設計師,這個影響太大了,直到現在也只是知道常用命令的使用,很多時候還要google,對於linux的一些訊號量,什麼fork,中斷之類的完全不熟悉,這個也急需加強。
三是基礎太差,主要表現在網路方面的知識上。大學就不說了,計算機相關課程基本沒好好學,後來研究生後也主要看演算法,資料結構方面的東西多些,這個在面試中用處不小,但工作中感覺基本用不上。而且因為網路在考研中佔的比例小,基本沒好好看過網路相關的知識,以至於剛開始的時候TCP/IP協議,http協議,socket,長連線,短連線等等知識完全不熟悉,現在也只是一知半解,這個還是需要花時間好好學習下,系統學習下的。
四是一些基本的觀念沒有,比如說檢視原始碼,經常發現一個函式不好用,但是看api上面明明說可以這樣用,但是怎麼除錯都不行。後來求助他人,我發現他們第一時間都會進入原始碼看下,為什麼不行,然後很快就能找到原因。其實這個習慣主要還是因為之前做java做多了的緣故,java的api寫的很詳細,很全面,所以以前基本做什麼都首先看看api就搞定了,但是python,go還有一些開源的工具軟體,經常api就是一行,這樣的話根本看不出來怎麼用或者適用場合,還是得看下原始碼。這個確實費時間比較多,但是如果養成了這個習慣,進步也會不小。
目前發現的缺陷大概最主要的就這麼多,最後說下接下來幾個月或者一年的規劃:
一是系統的學習下linux的一些東西,包括shell,不一定要很精通,但是基本的指令碼要會寫,這個某些時候可以大大提高工作效率。比如說我發現很多同事,都自己私下寫了不少shell指令碼,方便自己某些工作。我暫時不需要達到掌握的程度,但是一些基本的,比如說在程式寫完之後,寫個shell指令碼作為入口,停止等,發一些訊號到程式中,這些還是必要的。
二是python還是得好好學下,指令碼語言確實很好用,而python用的又這麼廣泛,好好學下肯定沒錯。目前python已經上手,後面可以看下高階的特性,《深入python》,effective系列的書等等,這個應該工作用到的也比較多,而且對自己好處比較大。
三是把之前一些用到的開源工具搞熟,比如rabbitmq,redis,thrift協議這些,為什麼好用,原理是什麼,為什麼能夠應付大規模,併發情況等等,而不是限於簡單的會用,這個應該多看一些資料或者網上別人的見解,就會加深不少認識。
四是系統的看下網路方面的知識,《TCP/IP協議》兩卷,在有空的時候還是要看下的,socket程式設計,也是需要抽空看下,這個任務比較艱鉅,可能需要很長時間。
另外,還有一些以後工作中需要注意的:
經常晨會時候聽到說高可用,主從切換,叢集配置,這些基本思想是什麼,具體怎麼弄,可以在有空的時候瞭解下。
go語言,以後還是應該會用到比較多的,其實這門語言還不錯,學習成本不高,效能效率又比較好,而且是google搞的,應該還不錯,可以在工作中邊用邊學,多做些總結。
java,這個過段時間可能會寫一些android的sdk,java目前只能說是熟悉,網路程式設計,多執行緒等等高階的特性基本沒用過,不過java基礎還好,面向物件思想掌握的還是比較到位,學起來應該會較其他的輕鬆些。
多做總結,之前太忙了,以後工作上手了後,可以抽空寫點總結,比如寫點部落格加深理解,比較好。
目前想到的就這麼多,現在感覺自己還是比較菜,組裡的高手還是不少,特別是某位只比我早畢業一年的童鞋,你能單獨設計雲錄播的系統,能夠寫那麼多併發,高可用相關的模組,真的比我強太多了。希望我一年後,能夠達到你的水平,那樣這一年就收穫巨大了。
嗯,暫時這樣,且行切記,且行且珍惜。