天天看點

畢業兩年的反思

到今年6月份,已經畢業兩年了,在這兩年中換過一家公司,從銀行外包到安全行業,經曆過加班,也經曆過無所事事,心中有些感慨和想法與大家分享

時間真的是不等人,之前剛入行時我也是由一位老大哥帶着做項目,那個時候我差不多是項目組年齡最小的,而如今在現在的公司中,我成了唯二的老員工,我從去年入職現在的公司到現在公司經曆了一輪大的換血,老員工差不多都走了,而現在我也從當初的被别人帶轉換了角色變成了帶新人,新員工都是剛畢業的大學生,有志向,有抱負,有的也有能力,跟他們一比,真的有種長江後浪推前浪的感覺。心中不免有些惆怅,原來一年一年的混日子,時間過的這麼快。現在我真正了解了作為程式員必須的具備終身學習的能力。以及那種随時都有可能被新人給淘汰掉的危機感

第二個就是不能對技術太過于執着,現在很多程式員包括我在内總是唯技術,好像一些産品裡面用了某種牛逼的技術那它就值錢,就牛逼。其實真的不是這樣的,技術是為需求服務的,再好的技術也是為了解決現實中的問題,隻要能解決現實問題就算你用最low的算法,它也是一個好的産品。從這個角度來說,一個程式員的薪資水準跟他自身的技術水準并不是正相關的關系,薪資水準高低在于他能夠利用手中的技術為公司帶來多大效益或者說它能為多少人産生多大的價值。技術就是這樣沒有最好的,也沒有最壞的,沒有什麼所謂的最前言,也沒有什麼淘汰之說,隻有最合适它的平台,就拿彙編來說,很多地方的确用不上彙編了,但是在某些場合,比如說做安全進行HOOK的時候可能會需要,或者在一些對性能有着變态需求的地方,有的實在不能再優化了,隻有将C代碼改為對應的彙編代碼。沒有最好的技術隻有最合适的技術

既然說到終身學習,那麼下面就來說說程式員學習的事。學習首先得找一個方向,也就是經常說的職業規劃,一般來說剛入行的程式員可能并不知道自己該從事何種方向,就知道一心寫代碼,公司讓幹啥就幹啥,公司有啥業務就學啥業務。确實一般剛入行的新人可能對整個行業沒有一個整體的把握。我覺得入行後可以花1到2年的時間來關注業界相關新聞,不斷跳槽以便接觸更多方向,然後從中選擇一個适合自己的或者自己真正喜歡的方向,随後自己的精力需要完全投入到這個方向上來,學習的路線也應該圍繞着這個方向來進行。比如說我現在從事Web安全的開發,剛開始也是什麼都不懂,XSS、SQL注入等等完全不了解,這些涉及到的是Web的相關知識,是以針對這點我自己給的學習路線是,首先學習HTML、CSS這些前端的相關知識,然後學習Web開發、了解常見的一些架構和開發語言,比如PHP、Java等等,公司主要做的是一款掃描器,而掃描器中很重要的一個部分是爬蟲,現在爬蟲一般流行用Python,是以我又順便學習了Python的相關内容,而掃描器用來檢測漏洞的一些POC都是用Python寫的,這樣也必須的學習Python。而Web又是基于HTTP協定的是以必須得學習HTTP協定,順便可以學習TCP/IP協定的整個架構。是以這樣很容易就能理出一條學習的線路來。是以說在後續學習的時候需要找出自己真正喜歡的方向(不一定是喜歡,但是必須是自己不讨厭的),了解一下這個方向的主要内容,從中找出自己的不足來進行針對性的學習。然後可以嘗試着利用學到的知識寫點小工具等等,比如我自己常常使用Python搜集一些網上的POC來內建到自己的程式中用來制作簡單的漏洞探測工具。

我感覺現在整個IT行業存在一個浮誇、焦躁的環境。經常就是過段時間有一個新技術出來,然後大量的關于新技術的課程,文章,以及大量的招對應的開發人員,看着薪水好像挺高,似乎這個技術就是未來,其他的技術都過時了,而我們程式員很容易被這種風氣給帶歪了,他們會花時間去學習新技術,然後跳槽,然後從履歷上看他似乎什麼都做過,前端火的時候他是一個前端程式員,後來Python全棧火了,他又成了全棧,然後大資料火了,他又做大資料去了,而現在AI火了,然後他現在是一個AI的開發人員,似乎他什麼都會,但是後來發現就一個調用架構然後複制粘貼。當然我不反對學習新技術,學習新技術應該與應用相結合或者說與現實中的問題相結合,比如做掃描器經常會有誤報,怎麼消除誤報呢?AI是不是一個好方法,能不能用機器學習來減少誤報?如果可行,那麼就可以考慮去學習一下。還有我們如何從海量的日志資訊中找出具有攻擊行為的那些日志?這個可不可以利用大資料來進行檢索?利用機器學習來準确識别?我覺得這才是學習新技術的真正原因,而不是光看重新行業的薪水。還是前面說的技術是為需求服務的,學習也是一樣的,為現實中具體的需求來學習。歸根到底,學習應該是為了用新技術來解決現實問題。

在這兩年中,我越來越覺得基礎知識的重要性,當初在學校時總覺得很多東西會用就行,不需要糾結它的細節,什麼快速排序,二叉樹等等這些都有現成的庫函數,沒必要去了解它們,是以沒有好好學習這些内容。現在看來這種看法很有問題,學習基礎就好像當時很多人嘲諷買菜不用微積分那樣覺得生活中用不到它們。現在也有很多人跟我說過,學習那些算法沒有用,這些都由老外在寫,人家那麼大的組織機構來維護,你自己寫的肯定效果上沒有别人的好,到時候會用就行。但是我想如果作為一個程式員如果隻是把自己限制在使用别人的庫,隻會複制粘貼别人的代碼,這樣永遠是一個底層的碼農,而做不了真正的程式員,還是那句話讓它服務于具體的應用,比如你學習了HTTP協定之後,能不能仿照它,做一個能在嵌入式裝置中使用的微型的HTTP伺服器而不是直接上Apache,或者我能不能利用它的設計思想來提供類似的功能。而不是說為了使用HTTP而使用,學習這些算法與基礎的意義并不在于會用别人寫的庫,而在于根據具體的情形選擇并設計編寫出适當的代碼。或者能更好的使用這些開源庫,而不是僅僅把别人demo的東西照搬過來。

在當今網際網路時代,學習東西比過去友善了許多,但是網際網路也有許多問題,第一個就是網際網路上資源太豐富了,以至于想學一個課程但是找不到合适的,比如說我想學下C語言,你會發現網上一大片C的内容,有視訊有部落格還有電子/實體書,但是各種資源的品質良莠不齊,很難抉擇。經常聽到有建議說自學能力強的選擇看視訊或者看書,但是對于初學者來說很難分辨一個資源的好壞,我當時自認為自學能力很強,在大學期間找了各種視訊,看了各種書,吃過很多虧走過很多彎路,才學會了點C的皮毛,經常就是一個視訊看完了,感覺基礎學會了,想找一些實踐的東西,然後發現很多都是前面一點快速把基礎過一遍,然後開始做項目,最後發現跟着視訊項目做出來了,但是并沒有學到什麼東西,反倒是丢了視訊好像什麼都不會,然後就會産生一定的挫敗感。我自己當時也是被虐到懷疑人生也常常在思考我是不是适合這個行業。但是好在我從來沒有在我應該學習C/C++這條路上産生過懷疑。說到這裡,我想說說我對教育訓練機構的看法,現在很多人說到教育訓練機構總是一副喊打喊殺的語氣,好像教育訓練機構毀了整個IT行業。其實教育訓練機構很不錯的,他至少能帶你入門,我們常說師傅領進門,修行在個人。跟着教育訓練機構就好像有一個前輩一直在帶你,給你分享他的見識,分享他的思路,而且教育訓練機構能讓你快速融入這個圈子,畢竟你的同學老師都是從事這個行業的。從這個角度來看好的教育訓練結構能使你受用終身。每個行業都有好有壞,不要一杆子打倒一片。但是一般包就業,并承諾薪資的一般是坑。

網際網路的另一個壞處就是造就了一批伸手黨,他們混迹于各大論壇,QQ 群,經常就是甩出一段代碼然後告訴你這個跟他想的不一樣,該怎麼改。最可恨的是有的還給的是截圖,你想給他調都沒辦法,難道要别人一個一個的照着敲,拜托大家都很忙好吧。其實很多問題都是你自己單步調試一下就可以解決的,很多人就是不願意,一句我是初學者,我不會,是以你幫我看看,一般像這種看了真的是讓人火大;另外一種人就是自認為是大神的,經常有初學者提問說,我想學下XXX,請問該怎麼學,這個時候總有那麼幾個大神會告訴人家,你學這個沒用,還不如去學XXX,或者說這個不用學,有現成的代碼,然後甩一個連接配接給段代碼,這種人也是令人火大的,人家初學者想學一個東西,你沒有系統的學過就不要回答了,我覺得這樣完全是誤人子弟。

是以你看:現在網際網路雖然友善,但是學習的路并似乎沒有變得輕松,它隻是以另一種形式增加了你學習的成本而已,過去很多東西報個班或者找個老師花點錢就給你講明白了,但是現在網際網路時代很多人覺得資源應該共享,應該免費。但是從某種程度上學習成本其實基本沒變,而且是以一種無形的成本來展現出來的,通常這種成本是最難發覺的,可能對你造成的誤導是最深的。

以上都是本人的一些突發奇想,寫這些的時候是跟以前的同學一起喝過酒的,很多地方都有點胡言亂語的意思。請各位見諒。。。。。