大學總結,技術與技術以外的事 | 掘金年度徵文

一直沒有寫年底總結的習慣,今年想寫,年前懶癌發做,元旦後也一直沒抽時間,也好久沒寫文章了,掘金的活動能夠算是一個動因吧,在這個比較重要的一年裏,寫一篇比較長的文章,也盤點一下平時思考過的一些東西。javascript

我的履歷

首先簡單自我介紹,我是2019應屆本科生,哈爾濱一所不知名學校軟件工程專業,前端開發者。今年事後,多年的學生生涯也到此結束了,盤點一下大學已通過去的三年半,真的沒白讀。css

個人經歷其實就是一個普通人的經歷,上大學以前,對軟件開發一無所知,不過我選擇這個專業還真不是道聽途說的「賺得多」,最初的認知來自於我是用的第一部智能手機。時至今日智能手機動輒10+128,也許不多有人能理解 RAM 512MB ROM 150MB的手機使用起來是一種什麼樣的感覺,那個時代獲取root精簡系統是多麼重要。那個手機我用滿了三年,也使我相信我能夠作這個工做。而後一切就和我想的同樣,我選擇到了一個合適的學校的對應的專業。html

剛到大學的時候真的不懂,學校的課程設置的也不是很好,大一上學期只有c一門專業課,藉着學校ACM校隊舉辦的集訓活動,學校c語言課上的基本內容在十一假期就學會了。而後我就在思考我應該作什麼。當時沒人指點我,我也不知道獲取有效信息的渠道,我只知道我想要在大二結束前能本身寫出android app,我只知道我須要先學會java(當時可不能用kotlin也沒有flutter)。我買過很侮辱智商的從入門到精通系列的書,固然後來主要是靠看視頻資料,懵懵懂懂的知道了面向對象是什麼,開始拿起郭霖老師的第一行代碼,正式開始學習開發android客戶端,前先後後半年左右吧,算是能寫本地應用了(不聯網那種)。大二的時候申報大學生項目,我也跟着參與了一下,想作app須要後端開發,提及來慚愧,就像我如今看外行人同樣,當時一個很外行的我是不管如何也不能理解,你看上去只有一個會聯網的app,看不到的是不知在何處的某一臺機器上運行着提供服務的另外一個應用。普通用戶不用知道server端存在,這並非壞事,可是做爲一個開發者,這但是極其不專業了。既然java能進行web編程,那我就用java寫吧,省的再學其餘編程語言了(naive)。ps:此時我還不知道我要學的那個東西叫後端。前端

java web學習這段路能夠說是拐的很偏了,如今回來看這段經歷,其實也是少不得的,一會還會再說。眼下,我就要開始學習java web了,當時主要的學習資料就是imooc上面的那些比較老的視頻(當時就處在過期的邊緣,如今真的不必看了),一邊學一邊還在想,jsp是否是寫頁面的嗎,這不是前端嗎,那我學這個幹什麼(根本不知道有後端),迷迷糊糊地就這麼學着(當時我是抱着留後路的態度,android開發已然趨於平靜,由於崗位的特殊性註定了機會不會不少,並且就是那一年小程序剛剛出現,多一種選擇何嘗不是好事)。後來跟着就是ssh(簡單看過而已,沒學),ssm,還有封裝好的spring boot,這時其實我在java的路上走的已經比較遠了,我也已經知道了web後端是什麼,先後端分離是什麼,我也考慮作一個java工程師,當時大概大三了,寫app這個目標已經實現了,我要作java,我開始考慮技術的廣度和深度。從jvm原理到框架源碼,從javaSE基礎到web框架熟練使用,從基礎算法到分佈式中間件,坑仍是很深的。其實這個時候,接下來學習java發展究竟如何,其實我是不肯定的,可是因爲以前的積累,我已經相信了編程語言只是工具而已,解決問題的方式有不少,在須要的時候選擇合適的就能夠。而真正讓我選擇前端,大概是從node.js開始。vue

node.js據說過好久了,可是不知道是幹什麼的,以前也和不少不了解狀況的人同樣,js確定是前端框架了,後來使用hexo搭建博客,安裝了node.js環境,不過並不知道爲何要安裝。說來慚愧,第一次知道node.js是由於一家培訓機構的廣告。不少學校都有那種,培訓機構來學校作推廣的課程,我第一次知道node.js,它是用來開發後端的,它主推的異步流程和我熟悉的多線程同步模型大相徑庭(當時並不知道vert.x,Netty是什麼,只是據說過)。培訓機構我不喜歡可是也不排斥,可是我絕對不認同一點:不是全部的本科學生都沒有自學能力,雖然這是大機率,可是否定全部人的論調就是會讓我以爲不舒服,換一門語言又不是不能寫增刪改查,試試就試試。我開始瞭解node.js,我知道學會js以後有機會學習前端,我順便關注了一些前端話題(那個時候我還記得,當時正是vue做者尤雨溪老師和谷歌angular中國區佈道者大漠窮秋老師在知乎大戰的時候,沒入前端門先認識了前端娛樂圈,ps:後面也真的是,每隔幾個月必有大新聞)。學習node.js時候我已經徹底知道本身在作什麼了,先後端分離的邊界在哪,每一部分須要作的是什麼,js語法什麼的,已經不存在什麼很大的問題了,知道想要學什麼,尋找須要的東西去學習就能夠了。在學習node.js時候要感謝咱們學校jser club騰哥的幫助,他是Node.js Foundation的成員之一,我是在他推薦後瞭解的egg.js(迄今爲止我最喜歡的node.js web框架,無論阿里出品口碑如何,egg.js絕對是我心中至關優秀的框架,又免費廣告了一波,天豬老師大概也不會看到),後來寫第一個正式項目時候,參考了騰哥以前寫的一個工程。node.js固然不僅有web一部分,各類其餘功能我也瞭解過,我也知道它做爲前端工程師的工具,發揮的做用是極其巨大的。時機差很少了,我正式開始學習前端了。java

前端的門檻在門裏邊,html,css,以及對於一個寫過node人來講的js,入起門來其實很容易。簡單看了看基本經典的基本資料圖書,以後就開始學習vue.js了,選擇vue最主要是由於漸進性學習路線,能夠從使用script標籤引入開始學習,最後到webpack工程化的學習。學習vue主要得益於黃軼老師的音樂播放器視頻(這裏也不是廣告,不過實名推薦,我心中目前最好的學習視頻,沒有之一),這個項目基本上涵蓋了從零開始搭建完整vue工程的每個方面,吹爆。以後我使用vue和egg獨立完成學校的一個大學生項目,這是我第一次使用vue,也是第一次使用egg,一上來就完成完整項目既是實戰也是學習,此後算是正式入門前端。我和大多數前端都不同,我不是從html,css開始學起的,我也沒有過寫靜態頁面的常規練習,能夠說是路子比較野了。我此時徹底堅信也印證了一點,軟件工程理論真的是相通的,所謂的客戶端開發也好服務端開發也罷,瀏覽器開發原生開發,它們各有各的特色,可是總能抽象出共通的東西來。再之後就是大三下學期了,從寫js開始到入門前不到半年的我開始尋找實習了,機緣巧合吧,去了我第一家實習公司。以後面試了幾家暑期實習,也經過了幾家,最後選擇了我如今的公司。在這段先後的時間接觸的新東西很少,可是成長仍是有的,我的開發和企業開發自己有很大差距,創業型公司的實踐模式和大型互聯網公司的實踐模式仍是有必定差異的,等等諸多不便細表。後面的故事就是由於工做時間緣由,我沒參加秋招(算是小遺憾吧),拿到了如今公司的offer,目前待畢業入職狀態(也可能還看機會)。node

覆盤回顧

整個大學就是這樣的,如今回顧過去,有時候確實會想,是否是有些彎路不必走?有些東西學習了以後對我如今有幫助嗎?若是讓我從新選擇一次我會怎麼走?等等一系列問題,接下來也算是本身回答本身,作一個覆盤。python

爲何幾經波折最後選擇了前端?

我是一個用情不專的人嗎?我是一個看什麼好就幹什麼什麼都想作的人嗎?我以爲我不是,我作的每個決定都有本身的道理,我不能說本身是對的,可是絕對是符合我我的意志的。學習android開發是由於最初的興趣點,並且時至今日大前端的發展我用js仍舊能夠開發android也算是繞了一圈不忘初心了。java後端開發是我冷靜思考事後選擇的正路,按照我當時的見識和眼界,這是最合適的東西,並且也是常規選擇,不能說沒幹正事。至於爲何後來又變了,由於對我而言,放棄java學習前端的緣由之一是我對互聯網公司的追求(互聯網公司是個神奇的東西,至於我選擇互聯網公司的道理,一句兩句話說不清楚,在此不展開了)。首先一個事實就是,後端語言多種多樣,java只是其中之一,並且java普遍應用於傳統軟件行業,在互聯網行業裏面,java的應用多可是沒有絕對優點,而互聯網前端,js是繞不開的。若是我學習的是其餘一門後端編程語言,我大概就不會改了,可是java,這是一個在傳統行業大放異彩的東西,我要學習一個在互聯網行業中有這麼高地位的東西。另外一點也是最重要的一點緣由是如今前端工程師所發揮的做用愈來愈大,大前端的概念我的認爲沒那麼誇張,可是是存在的。時至9012年要是還有人認爲前端只是切圖的,那他是絕對的外行了。若是是曾經的逐個靜態頁面分別開發的時代,我是不可能喜歡前端的。我以爲如今的前端行業是真正的工程,它還在發展,它正在日漸完善,這裏面有我想要的東西。react

學習前端以前的學習經歷有意義嗎?

答案是確定的,不但有,甚至一點也不能少。android客戶端開發是用戶端開發,其實web前端開發也是客戶端開發,它們只是作同一件事的不一樣方式,在實際開發中遇到的問題也有不少類似性,好比android中數據變化須要同步ui展現,而web中也須要作這個同步處理,而各類現代數據驅動的web開發框架,其中的一件重要的事就是實現了這個同步過程的自動化,這些東西我在android中理解了在web前端中也就懂了。更重要的一點就是,在那個時間點上,學習android編寫的大量java程序,使我從迷迷糊糊到完全弄懂面向對象,而學校最先接觸面向對象的課程是在半年多以後。還有一點算是很幸運也多是很不幸,我選擇的編程語言java,它是教科書式的面向對象編程語言(至於爲何說不幸,下面會說)。android

後來的java web學習真的是走了很多彎路,可是,它的不可替代性在於,經過這段學習我真正弄懂了前端後端都是什麼,先後端分離是什麼,爲何要ajax異步請求,http請求與響應之間數據是怎麼流動的......這些東西時至今日也是極其受用的。並且這段時期的大量編碼真的是很巨大的成長,能夠說,直到此時,我纔開始具有成爲開發工程師的基本條件。

以後的node.js,若是把它做爲後端js的運行環境,可能大多數時候都只存在於我的項目中。可是當它做爲前端工程師的基本工具時,它的地位能夠說是很是重要了。其實不少時候咱們會須要一些小工具,它們能夠用來自動化的解決遇到的重複性問題。這些東西其實任何一門編程語言均可以作到,可是要考慮運行成本,實際上更多時候由腳本語言來充當這個任務。對於其餘工程師而言,python是一個不錯的選擇,可是對於前端工程師而言,js已是一門強大的編程語言了,node.js又可讓它走出瀏覽器,天然成爲了開發這類工具的絕佳選擇。並且我先學習的node.js,ES6,typescript接觸的都很是早,這對於現代前端開發是有很大意義的。

若是成新選擇一次,我會選擇前端嗎?

聊聊技術

我認爲不得不說的技術以外的事

談一談我對技術工做的見解。曾經不短的時間裏,我和不少人同樣,認爲做爲一個開發者,技術就是所有,要不斷學習新的東西,提高本身的編程能力。這些話不能說不對,可是如今看來,仍是眼界太窄。

我只是一個還沒畢業初入職場的年輕人,我作的話只表明我的見解。我知道不少技術從業者,包括我在內,一直在心中存在一個矛盾:在公司大多數人在寫業務,無非就是擰螺絲的工做,而我的成長鬚要提高技術能力,公司作的很low的工做我不想去作,他不會給我帶來什麼好處。這個觀點不能說錯,可是要考慮一個問題,開發工程師創造的價值在哪?要知道對於資本家而言,他們根本不會關注產品開發的過程,一切的收益都會以創造的商業價值爲準。誠然,一些框架類庫的開發提高了開發人員的工做效率,可是以後呢,高效的開發目的也是要節約開發維護的成本,要用更少的投入來創造更大的價值。從這個角度來看,一個商業化產品,不管是產品、設計、推廣、開發、運營,每一各環節都只不過是其中之一而已,若是單純只經過技術的角度來看一個產品,無異於管中窺豹。

這不表明技術不重要,並且術業有專攻,該作好的事本應該作到足夠專業。我想說的是,這種看問題的方式,影響了一個開發工程師的眼界。其實咱們工做的時候只要可以抽象建模,全部遇到的問題最終都不過是UI和數據流的處理。可是咱們爲何要去了解業務?爲了可以建模,這只是其中的緣由之一。瞭解業務以後整個開發過程當中咱們能夠不把本身當作一個只會寫代碼的,咱們能夠從產品自己出發,思考爲何要作?如何去作?帶來的價值是什麼?這個過程也是咱們思考本身工做意義的過程。

個人前端技術棧

成爲前端工程署以前,首先要是一個軟件開發工程師,計算機網絡,操做系統,算法數據結構等等東西,包括設計模式,軟件工程理論等等在學校學的東西東西不能丟了。說它們沒用只能說是由於太菜了,作的工做太low以致於根本不須要這些東西。學校教的有時候不夠,加上本身學習的,這部分有一個簡單的知識體系。

做爲前端開發者,首先確定要學習html,css,javascript了,雖然我早期沒寫過大型靜態頁面,可是html,css至少是過關的,css3動畫寫的相對少一些,JavaScript的書我看過很多。本身不是一開始就從前端學起來的,和他們相比基礎知識沉澱的時間不夠長,,因此在學習的早期基礎知識方面投入的比較多,我認爲能用原生js思考問題很重要,用不用和會不會是兩個概念。

框架工具在工做中主要使用的是vue,固然我以爲技術老是用來解決問題而存在的,框架之爭沒什麼意義。我本身比較喜歡寫react,純屬我的喜愛問題,本身寫東西我就使用react寫了。

node.js仍是不能丟的,在前端中主要是各類自動化工具,輔助開發的。node.js作web開發在生產中可能沒機會實踐,可是若是是我本身寫東西玩,我就直接用egg了。

typescript是一個很好的東西,不是跟風,怎麼說呢,用的時候起初我真沒感覺出來好,多寫了不少類型接口定義,甚至一度以爲本身是給本身找麻煩。但是當我一旦再回去寫js時候,我驚奇地發現我曾經以爲沒那麼糟糕的js原來這樣難用(我用過java,熟悉靜態類型,可是js些時間久了我以爲動態類型也挺好的,直到趕上ts)。用了就很難回去,大概感覺它的到好處的人才會懂吧。

跨平臺技術一直是你們的熱點話題,目前我寫東西主要用react native,由於它的生態相對完整,雖然至今沒出1.0,可是有很多生產環境使用的案例,一些常見問題也都有比較成熟的解決方案。flutter是比較熱門的,從設計理念來講,它是更先進的,若是發展的好,可能將來真的會成爲主流,目前還很年輕,觀望中吧。

以微信爲首的各類小程序也屬於前端工程師的開發範疇,這類東西我寫的很少,若是有須要的話會去學習。

我很樂意去學習函數式編程相關的東西,FP和OOP自己並非針鋒相對的,兩者也沒有誰好誰壞,解決問題的方式不少,選擇哪一種須要考慮的點也不少。在公司中天然要統一編程風格,若是是本身寫東西,我很願意適當的使用fp解決問題。對我來講一個比較大的挑戰多是有時候思想被OOP限制了,有些東西仍是要不斷地去學習,包括響應式的Rx.js等等。

還有不少值得了解的,graphql,pwa,ssr,electron,webassembly等等,這些東西我會去找機會學習,有須要我也願意主動去使用它們。要了解的東西不少,人的精力有限,對我而言兩者之間的平衡點在於,這個東西是否值得。

大概是學習規劃吧

目前的任務大概是作畢業設計,寫論文。畢業設計中也能夠學習react native,electorn等等東西,後面可能還會去了解一些docker等等工具,整個完成提高的可能不只僅是技術能力,還有對於產品設計,對於開發流程把控等等方面能力。而後我會去補充學習一些前面提到的值得了解的東西,隨時保持一個比較新的狀態。此外還有基礎的沉澱。另外一方面就是技術的深度,包括各種工具的底層原理,公共類庫的內部實現方式等,這方面的學習一方面能加深對於這些工具自己的認知,另外一方面經過閱讀也能提高本身的能力。還有一些性能問題等實際生產中才會遇到的問題,這些東西也是工做以後的一些認識吧,有機會須要提高一下。最後仍是個人觀點,技術只是一小部分,要提高本身的眼界。

一點想說的話

其實也曾經問過本身,累嗎?後悔嗎?個人學校很普通,也沒趕上相關愛好的組織,身邊的同窗準備讀研天然也沒人和我同路。我本身堅持的動力大概來自於編故事的某乎社區。別人都行我爲何不行,我就是想有一天也能夠像他們同樣輕描淡寫的一句--這東西一學就會了,這東西看看文檔就能上手,這東西很簡單。我知道背後的不易,可是我以爲我能夠。不過真正到了今天,最後的我什麼都不想說了,之後回首往事,我會很感謝今天的本身。(其實這裏以前寫了不少話,又刪了)

最後感謝全部人,還有最愛的她。


掘金活動

掘金年度徵文 | 2018 與個人技術之路 徵文活動正在進行中......

相關文章
相關標籤/搜索