作為程序員,我到底在恐慌什麼
作為程序員,我到底在恐慌什麼
程序員們會覺得恐慌么?有時候我會。
或者說,現在也會。
這種恐慌大概是在上學的時候就有了。
上學的時候我不知道怎麼入門,去書店裡看書,C,VisualBasic,Java,C#,C++,Pascal,這些語言讓我困惑。
特別是學的數據結構,計算機網路,演算法,這些東西學了之後,倒底能幹嘛,我知道UDP是有可能不按順序到達的,我知道數據鏈路層是在物理層之上的,
我知道了可以深度遍歷,可以廣度遍歷一棵樹,但是這跟寫代碼有什麼關係呢?
Access,Mysql,Oracle這三種又該學什麼呢?
還有JSP,PHP,ASP,這些書上講的很多概念,都讓我恐慌。
我覺得我是陷在了一個知識的海洋,不是知識的泥沼中,或者是知識的酒池肉林,迷宮,黑暗森林,摺疊空間。
要找工作了,我該找什麼工作?
迷失方向,無所適從,這是我作為初學者的恐慌。
好在我選擇了考研,總算把這種恐慌,推遲了三年。
讀研的時候,漫無目標的選方向,人工智慧,那是什麼鬼。
數據挖掘?挖掘機嗎?
自然語言處理?我可不想當翻譯。
信息安全?算了,看到那些加密解密我就頭大,還是福爾摩斯密碼有意思~~
網路安全?得,OSI七層協議我已經學的夠夠的,讓滑動窗口見鬼吧。
圖形圖像處理。。。。。不想當一個畫圖的。
模式識別。。。難道以後我就要去當成一個魚類分撿器嗎。
我只是想老老實實寫代碼而已啊,嗯。基於Agent的軟體工程,這個不錯~~~
一直想知道軟體怎麼開發出來的,這個Agent的概念看起來好厲害的樣子,而且也很容易和我以後的工作聯繫起來。
單只憑自己當年的認知,很難在分叉口決定倒底應該選擇哪條路走下去。
然後,又到了找工作的環節。
鬼使神差的選擇了Java。
大概惟一的原因,就是招聘網站上,招java的公司太多了。
我每天都在刷網站,每天都在認真的記錄招聘網上倒底要什麼技能。
我每次面試都要解釋自己沒有工作經驗,只是做了一個兼職,會了點ASP。
我在北京的街頭來回遊走,在一個陌生的城市四處奔波,我學會了表達自己,但長進最大的技能就是問路。
保安可以問,打掃衛生的阿姨可以問,警察可以問。
年輕人不能問,過路的人不能問。
中關村圖書大廈,就是我的圖書館。
把書按斤賣的二手書店,就是我的導師。
而每次面試,都是我糾正方向,貪婪的學習新知識的課堂。
到底什麼樣的水準,能讓我找到一份工作?這是在找到工作之前,最大的恐慌。
終於入職了一家公司,然後就是鋪天蓋地的新知識點,新環境。
第一次上班,我也去看了一些職場上要注意的點,可是總覺得陌生又不敢嘗試。
我害怕跟其他同事交談,惟恐他們知道了我是一個菜雞。
我連什麼是IDE都不知道,一直分不清Eclipse和Myeclipse的區別,在那一個月里,我主動熬了兩個通宵,
周末就是學寫JDBCTemplate,Mysql,JSP,Html,CSS,JavaScript,Struts,Spring。
各種In Action。
我覺得那一個月里,我弄明白了很多東西,這些都是以前我上學的時候沒有學過的,我覺得自己是在嘗還債務。
我想,科班出身的人,應該不會像我一樣吧?畢竟我本科不是計算機專業啊。
學了這麼多之後,我開始有了自己的思考。
我不喜歡那家公司的命名方式,也不喜歡現在他們做的事情,每天就是寫CMS,每天就是寫CMS。
入職以後,自己的個人成長應該往哪個方向走?
到了第二家公司,又學會了WebService,學會了Maven,學會了Shell,學會了解析XML,學會了版本命名。
到了搜狐之後學會的東西更多,哇,那個驚天地泣鬼神,無助,弱小,可憐的萌新菜雞,在大神面前瑟瑟發抖。
他們展示給我看了一個優秀技術人員的素養:熱情,主動,嚴謹。
而在這個時候,我不斷的衡量自己和他們的差距,最終的結論就是,大概在五年之內,我都不可能達到他們的高度。
我該怎麼辦?最初是恐慌自己會不會被團隊發現我是一個菜逼,然後被開除,被恥笑。
然後是困惑,自己看到了眼前有神一樣的人,好像是無法突破的大山。
他們能夠在兩個星期之內搞懂Erlang,並且用到線上,還能夠推廣給全團隊。
他們能夠猜出來Facebook的開放平台是如何實現,討論各種不同的技術方案最後整理出來了自己的一套標籤庫。
他們能夠直接修改Tuscany的源碼,把ActiveMQ完美的嵌入進Tuscany的框架里,讓我們用到消息隊列的時候,根本不用關注細節。
而我。。。剛入行一年的程序員,連JDK的源碼都沒看過。
而且,那個時候一直在有人說,程序員在30歲以後就沒辦法寫代碼了,我該怎麼辦?
我的同學,在畢業之後,一直做自然語言處理,而我也終於明白了自然語言處理是做什麼的。
他們做分類,做聚類,每天抓取Twitter的內容,玩的很開心。
我想我應該選擇去做演算法,畢竟,做演算法的人,越老越吃香,而程序員呢?總會有新的技術被代替。
在演算法和架構之間,其實是程序員對於未來生存能力的恐慌。
於是我到了一家做演算法的公司,在那裡又開始了新的領域。
我學會了抓取,學會了分詞,用CRF寫了實體識別,還學會了Hadoop和Cassandra,順帶又學會了什麼叫實時搜索。
到現在我都記得,這是跟原來當程序員的時候,完全不一樣的體驗。每天看英文文檔,每天倒騰語料,每天調整參數。
而我身邊的人呢,每一個都有自己擅長的領域,做搜索的小朋友手把手教我怎麼調試Lucene的高亮演算法,做Hadoop的小朋友告訴我一個Job倒底該怎麼寫,怎麼跑。
而我做NLP的朋友,教會我如何生成語料,怎麼樣自動抽取新詞,做去重的小朋友告訴我什麼是Spotsig演算法。
在那個時候,我能體會到的就是每個領域的深不可測,想在一個領域裡做成專業,精通的人,都很困難。
我們老大告訴我說,公司里的每一個人,都是聰明人。
我認真的對比現在和當初的選擇,不管怎麼樣,我知道很多人比我聰明的多,在這些專業的領域裡,我比不上他們。
而在演算法上的恐慌,就來自於根底不足,好後悔當初在碩士的時候,為毛沒好好學習數據挖掘和演算法。
不僅如此,我們還要做搭建一個知識庫。什麼是知識庫?什麼是OWL?
什麼是三元組?
知識庫又是一個新的大門,而我,在當時,可能是搭建了一個全國唯一的一個證券領域的知識庫系統。
這套系統的價值,到現在都沒被發揮出來,但是我對知識庫的畏懼,從不曾消除。
老大找的是一個博士,來協助我做相關的工作。在跟那個博士交流的過程中,我越發的畏懼。
是對知識的畏懼。這些東西,恐怕我要在知識庫領域裡,沉澱很久才會明白。
可是在這個時候我有了一點厭倦,做了大概一年演算法的時候,慢慢就明白,沒有科研功底,想改變演算法是完全不現實的事情。
演算法更多的就是在調整參數,調優,優化,把正確率和準確率一點點的提升。
而我原來在搜狐的時候,未完全消化的團隊協作模式,敏捷開發流程,系統架構能力,卻又是當前公司最需要的。
除了我,他們都不懂這些。
而我這個時候其實是很害怕的,畢竟在搜狐是大神們搭好了框架體系,而我,現在是要自己來。
從使用別人的架構體系,到自己從頭開始搭建一套體系,小心謹慎的犯錯並解決問題,這是初級程序員走向中級程序員的畏懼之心。
在這個時候,我開始瘋狂的刷Apache,Spring等各種開源框架,每天都想去看看,他們有沒有新的版本,有沒有新的框架可以應用在我們自己的領域上。
我用了QPID替代ActiveMQ做為自己小型系統中的消息隊列,用了OSCache作了頁面級的緩存,用MongoDB替代了Cassandra。
我還做了運維的工作,手忙腳亂的搭私服,搭Hudson,搭confluence,搭SVN伺服器。
這些基礎的東西,包括敏捷開發的流程,包括多團隊並行開發的管理,線上Bug的修復,所有的這些,都在這段時間裡,由搜狐留下的種子,慢慢生根發芽。
老大帶我去參加Qcon大會的時候,跟我說,你就是我們公司的架構師。
我是么?我覺得有點不太可能。我只是一個工作不到三年的架構師,我跟原來的大神們比起來差遠了。很多時候我只能反來複去的解決問題,我不知道問題的根源在哪裡,我也沒有時間也沒有耐心去認真的讀他們的源碼。
又或者我看了他們的源碼之後,根本不是自己喜歡的風格,我去讀重構,去讀設計模式,去學習什麼是優雅代碼,去看敏捷開發。一直都覺得自己太菜了,太弱小了,什麼都不會。
身上有了責任之後,恐慌往往就來自於,你就是全公司最後的技術支柱,別人解決不了的問題,你必須解決,完成最後一擊的人,必須是你。
而到了後來,因為個人對殺人遊戲的喜歡,又迷戀上了規則引擎。早就對這種棋類遊戲的開發看不慣了~~
這明顯就是規則引擎應該處理的啊。
殺人遊戲,象棋,捉鬼,完全就是規則的問題,於是又死命的學Drools,學RETE演算法,欲仙欲死。
寫了N多的規則,雖然不爽,但是很開心啊,很多底層的東西沒弄明白,但是已經摸索出來一套可行的東西了。
在此期間又折騰了Erlang,Erlang的語法真心是。。。如果不是我剛好懂了點Drools,百分百不明白。為了配合公司的應用場景,保證不丟消息,實現Comet的過程中又改了點東西。
後來在做多人掃雷的時候,發現Comet完全支撐不了延時,一次點擊大概會有18MS~38MS的延遲,根本無法達到實時遊戲的效果,怎麼辦?
WEBSocket又橫空出世,於是又去看WebSocket怎麼做,看Jetty,還是Tomcat,還是Resin支持。
這個時候就特別的恐慌,太多東西不明白,太多底層的東西需要花時間理解,每一個方向上都能遇到比你了解更深入,更專業的人,我需要怎麼做?
不旦如此,我在管理上面的成長也非常快,而且對於PM產生了極大的興趣。
厭倦了總是成為別人手裡的工具,程序員代碼寫的再好,也彌補不了產品本身的缺陷,加班熬夜再多,也只能修復Bug,不能帶來流量。
所以在做需求評審的時候,有一種衝動,想去做產品。
這個時候又是一個轉折點,到底應該是繼續做技術,或者是做管理,或者是做產品?
我選擇了去學習產品和運營。
這種恐慌,還是來自於對技術的不確定性,總以為命運掌握在別人手裡。
我還學了前端,JQuery,Bootstrap,AngularJS。
可是每過一段時間,就會出現一些新的知識點和概念。
當Go語言出現的時候,他們說Let"s Go。
當ReactNative出現的時候,當Swift出現的時候,當Kotlin出現的時候,當Vue出現的時候,當區塊鏈出現的時候。
甚至連一直平靜的演算法界也出現了深度學習的時候。
Devops一直讓人眼花瞭亂,從Docker,Ansible,到openstack,到現在的離線運維,雲服務的概念讓運維升了仙。
灰度發布,彈性擴容,隨著雙11,春節,各種高並發的場景層出不窮。
而中國的互聯網率先走向國外,異地數據同步的問題又扔到了人前人後。
還包括VR和AR,ibeacon還未能完全發揮熱量,可能就已經被遺忘了,支付的快速發展,讓支付寶和微信的支付SDK幾乎成為了標配。
而IM的興起,第三方統計數據的SDK更是占所一席之地,不用說分享組件和第三方登錄組件了。
微信公眾號不斷的開放介面,小程序又落地誕生,科大訊飛的語音識別也越走越遠,直播的興起讓技術又一次走上高潮。
Openresty+Lua在微服務的世界裡開心了一會兒,Spring Cloud和Spring Boot 和Shiro 又出現在眼前。
Json快要成為標配的時候,yaml說我更簡潔。
Maven在後端領域成為了標準的王者,Android的世界卻打上了Gradle的烙印。
還不用說前端領域一片亂戰。
這是一個技術讓人瘋狂的時代,每一項技術都爆發出來迷人的光輝和色彩,而我卻在他們的照耀之下,面色慘白。
我到現在還有很多東西不明白,而這些又是讓我無限恐慌的來源,很多時候,你被逼著要懂很多東西,是因為你要去做的東西,必須這麼干。
Zabbix還沒有完全獲勝,各大雲服務廠商已經推出來自己的監控API。
而如今你想做一個餐飲系統,對接美團,餓了么這些外賣平台的坑,是必然要走的。
還有萬惡的金融,銀行存管的事情,他們又有了各自的介面。
我們得知道,如何在O2O平台中,計算用戶周邊有哪些便利店,這樣要用到MongoDB。
我們得知道,ElasticSearch能夠做到實時索引,而且比Solr更簡單。
我們還得知道,大數據那一套龐大的體系正在不斷的孵化新的東西,Spark這些東西還在遠方閃閃發亮。
我不知道這對於程序員來講算什麼,而我心裡其實一直很恐慌。
我還在努力的學習PM,學習運營,學習公司管理,學習商務談判,更重要的,在我熟悉的領域裡,學習如何教導更好的程序員。
是不斷的學習,或者是一個人的學習能力,最終能讓一個程序員心安么?
還是各種東西觸類旁通,我們不用太過擔心,總是能輕易而舉的在該用到的時候,會用到他們?
又或者,無論外界怎麼變換,我都可以用我的SSH打遍天下無敵手。
還是說,我只需要在區塊鏈上有深入研究,就足以讓我做到退休。
與此截然不同的,又是大部分人的工作,都不會接觸到這些東西。
是這個行業細分的越來越嚴重了么?
還是在20%的領域裡才會這麼細分,80%的人都不用關注到這些內容?
所以每每有前端工程師,大喊著我要用NodeJS打遍天下的時候,我都忍不住回想一下所有所有這些後端中我列出來的內容。
現在還有誰敢稱自己是全棧工程師,全棧皮毛黨都很難做得到吧。
在之前,這種恐慌,是我一直在努力學習的動力,因為恐慌而去掌控世界。
而現在,這種恐慌,很難讓我再沉下心去學習,這又帶來了新的恐慌。
這個世界,是屬於這些90後的。
我對著自己說,對著自己身邊的朋友說。
「總不能一直敲代碼吧?」
「為什麼不可以一直敲代碼?可以的。」
「過不了多久,就可以用演算法寫代碼了。」
「那到時候,我們幹嘛?」
「我們可以寫演算法啊。」
「如果有一天,連演算法都可以用演算法寫了呢?」
「放心,你活不到那一天。」
※滿意度最高職業:程序員成最大贏家
※這是一件微軟、雅虎和諾基亞都干過的壞事
TAG:程序員之家 |