寫十年程序是什麼感覺?

今年剛畢業,一年Java學習,一年iOS學習,一年iOS開發,三個月PHP開發,目前在學習python開發的程序媛表示很好奇做了十年及其以上的計算機開發大腿的感受,希望各位大佬表達下自己想法。


工作到現在並沒有10年。如果是從Hello world開始算的話,反正我從來也沒有停過,那應該是2011年的事情,那年GacUI剛開始寫(逃。其實這份代碼原本是放在codeplex上的,後來轉移到了github上。但是之前codeplex要關閉了,所以我也把舊的代碼備份到了github。現在我一共有3個不同時期的GacUI的repo,唯一在使用的是 https://github.com/vczh-libraries/GacUI 。

於是這就造成了我github上第一個commit比註冊時間還早的奇妙現象。

第4年

我從高中開始就在寫UI庫,第一個版本的UI庫十分簡陋,放到今天我應該一個下午就能做出來。機制十分簡單,每一個控制項都是菜單,保存在一個txt文件裡面。最後還有一個UI文件,把所有的控制項的文件名寫在裡面,然後就可以跑了。當時是用Delphi搞自己的遊戲的時候做的,編輯器也十分簡陋——當然我還是寫了的(逃

控制項編輯器(可以看出是右對齊的):

UI文件因為只是個列表,所以只有預覽功能:

遊戲會在需要的時候載入窗口,所有的回調都是返回寫好的字元串,最後一個超大的if來跑。

Procedure GLSMouseUp(X,Y:Integer);
var Cmd:String;
I:Integer;
Begin
Cmd:=GWGetCommand(GWindows[5],X,Y);
If Cmd="OK" Then
Begin
If SaveLastSS=GSSLogo Then
frmGame.ShowLogo;
GDXSPlayClickOK;
GLSClose;
End
Else
Begin
For I:=0 To 9 Do
If Cmd=IntToStr(I) Then
Begin
Case ScreenStyle Of
GSSLoad:
Begin
If GVGetValueAsBoolean(SaveInfos[I],"Save.Exist")=True Then
Begin
GDXSPlayClickOK;
GLSLoad(I);
End
Else
Begin
OpenMessage("此存檔為空存檔。");
GDXSPlayRefuse;
End;
End;
GSSSave:
Begin
GDXSPlayClickOK;
GLSSave(I);
OpenMessage("保存成功。");
GWindows[5].Menus[WinItem].Items:="$CC"+GVGetValueAsString(SaveInfos[I],"Save.DT");
GWindows[5].Menus[WinPicture].Bmps[0].Canvas.Draw(0,0,SavePics[I]);
End;
End;
End;
End;
GWindows[5].Menus[WinList1].Items:="";
GWindows[5].Menus[WinList2].Items:="";
For I:=0 To 4 Do
GWindows[5].Menus[WinList1].Items:=GWindows[5].Menus[WinList1].Items+
"$CC"+GVGetValueAsString(SaveInfos[I],"Save.Caption")+chr(13)+chr(10);
For I:=5 To 9 Do
GWindows[5].Menus[WinList2].Items:=GWindows[5].Menus[WinList2].Items+
"$CC"+GVGetValueAsString(SaveInfos[I],"Save.Caption")+chr(13)+chr(10);
End;

運行結果:

後來RPG的程序寫到了2.0,UI也升級到了一個新的、支持文字特效的版本(譬如說做凹凸的3D效果之類,純GDI實現),但是做劇情的時候突然就失去了興趣,就沒有繼續做下去了。

第六年

到了大學,C++的大作也就是一個OpenGL實現的控制項庫,那個時候已經做得有模有樣了,不過因為太垃圾,大二又寫了一次。我覺得到此為止我已經能夠完爆絕大部分的在職程序員了。不過這顯然還是不夠專業,譬如說輸入法窗口永遠處於左上角,還有菜單不能夠伸到窗口的外面等等。不過當時用OpenGL就是想著給遊戲做的,所以也沒有去管。後來發現Windows用OpenGL簡直愚蠢,再加上發現業界對那些沒趕上好項目的遊戲程序員實在是太爛了,於是就干別的事情去了。

第七年

我跑去微軟實習做Visual Studio了,但是晚上很無聊,於是就封裝Windows API的GUI部分。這份代碼的CreateWindow那一大片最終成為了GacUI在Windows上的窗口驅動的一部分。

第八年

實習回來了,但是還沒畢業,那半年很無聊,於是瞎寫,弄了一個簡化後的C語言到x86機器碼的編譯器,運行的時候載入程序,編譯完直接是一個函數指針,就地調用。

工作之後,我突然就明白了,為什麼GUI必須是矢量圖,不能跟以前一樣每控制項一個Draw函數然後瞎畫。而且我開始有了一種data binding的想法,於是做了一個感覺上像是HTML+data binding的東西,當然裡面既沒有HTML,也沒有真正的data binding。Demo用的還是上一段提到的UI庫,GDI部分則用了自己寫的模仿GDI+的一些高級功能的庫。

這個東西的排版完全是腳本寫的,腳本是使用data binding觸發的,所以運行起來就像會自動排版一樣。但是跟GacUI那種通過求迭代解約束來做的做法簡直是天與地的區別。

第九年

終於第一次做出了滿足現代架構的帶智能提示的編譯器,見這裡、這裡和這裡。後來覺得編譯器用C++寫,結果GUI用C#,之間溝通變得超級麻煩。我還不得不用C#把parser重新寫一遍,滿足編輯器的性能要求,不能老是跨dll到處做serialization。

第十年

終於積累了足夠的知識,開始做GacUI了。一寫就是6年。


Dos-&>Win32:終於不用斤斤計較內存了。

Desktop-&>Laptop:蛤,還要操心用電?

Laptop-&>Server: 沒有 Delphi/VB 差評,不過有多路CPU大內存撒開了用!

Server-&>Embedded:一朝回到解放前……

Embedded-&>Mobile:給應用32兆內存都算高級的?!

Mobile -&> Web SPA:為什麼有種把十年前的折騰重演一遍的感覺?


謝謝邀請!

我大概是92年或者93年開始寫程序的,那年我還沒上初中,剛開始是在家用小霸王學習機,沒多久就去少年宮開始培訓參加NOI,到現在有25個年頭了,也許比這裡的很多年輕的朋友歲數都大。要說全職寫程序的日子,也有十三、四多年了,這其間滄海桑田,我就不多啰嗦了,咱只談談現如今對當下新技術的感受吧。

現在新技術以及新語言更新很快,更加在乎開發者的體驗,同時降低學習難度,提高開發者的效率。比如說最經典的C++, 從thread,auto,lamda還有type deduction,其實都是讓新來的開發者更容易上手。JVM更是老而彌堅,不但讓後端服務可以處理以前不敢想像的並發情況,我還記得十幾年前每台伺服器也就處理200請求每秒,而現在單台幾千請求每秒的服務也並不少見。這些年程序員們在微服務架構和非阻塞IO上的探索都功不可沒。新來的graal也給JVM對各種script的支持提供了非常容易的介面,相信不久的將來jvm下開發的體驗會更好。nodejs這兩年在性能上略微有點後勁不足,但可用的js開源項目不管數量還是質量都越來越好,使用起來都非常容易。js的yarn也是讓人眼前一亮。微軟也搞了.net core 2.0, 其實微軟這幾年搞了好多開源或者免費的技術,是值得大家稱道的,雖然我還是不看好.net的前途,但.net core多少也給大量的不願轉語言的c#程序員留了點希望。機器學習就更厲害了,十幾年前還是用matlab,和傳統語言結合一直不太友好,也scale不上去,現在的機器學習框架就好太多了。這些技術進步,讓以前幾百行做不好的東西,現在寫個幾行就跑起來了。

剛入行的時候總是想把功能做出來,那個時候資料也少,很多時候項目能做出來,就是大牛了。那時候總想著快點做出新功能,現在得多想怎麼才能做的好,怎麼做才能問題少,當然天下也沒有免費的午餐,有一得往往就有一失,每天都在各種權衡中度過,這讓我還挺羨慕現在很多剛入行的只要功能能實現,就不管不顧的那股勁頭。

各種工具和IDE也多,各種監控、數據分析和可視化的東西幫助非常大,不用再手動去看幾個G的日誌了。雖然我還是經常用那個emacs,但我也不排斥idea intellij這樣的IDE。各種打包部署的東西也真是方便,docker和mesos等帶來的進步是革命性的。以前部署要幾個小時,現在點個按鈕就扔那不管了。

正可謂時無英雄,令豎子成名。咱們這個行業沒啥權威,你行你上,你不行你就下,老技術不適合新場景的時候,就要給新技術讓路,同樣年輕人也有機會亂拳打死老師傅。如果你不能把學習新技術看作一個非常快樂的事,不能站的高看得准,就只能成為年輕人討厭的那種人,還不如乖乖給年輕人讓了路算了。


編程二十年,它已成為生活中難以分割的一部分。


我入行十四年了,寫到十年程序的時候是在2013年前後,正在創業公司。

那時候感覺天下真沒有難寫的程序,難的是應付變化的需求和訓練其他程序員。

程序這玩意,就是拿指令完成一件事,有精妙和粗糙之分,不過真沒什麼難的,但是,要「完成的事」卻不是確定的,這就造成很大麻煩。只有大公司經歷的別抱怨需求變化多,你那都不算啥,創過業的朋友才能理解到啥叫需求變化快。

自己一個人寫好程序也不難,畢竟自己幹了十年,沒吃過豬肉也見過豬跑,但是很多新手真的啥也不懂,要是有自知之明知道自己不懂虛心學也好,有的人是自己不懂還以為自己很懂,教給他他當年我點頭說懂了,放手做事還是拿自己那一套錯誤方法來。當然,後來我也想開了,我教多少是多少,沒那福氣學得會怪不了我。

總之,編程不難,編程之外的事才難呢。l

了解更多行業道理請關注@程墨Morgan


一個老程序員了,從大學算起,算算寫了20好幾年的代碼了。這個話題讓我有點感慨了,十年已經不短了,何況20多年?真是歲月催人老啊。看看自己的娃,而大學時光彷彿就在昨日,那是怎樣的一種感慨呢?

Yesterday Once More...

大學時期用的最多的就是C/C++和Pascal了,用的當然是當時如日中天的Borland系工具,記得有一次鬼使神差般地在Pascal開發環境里寫C代碼,居然渾然不知,寫得還開開心心的,然而編譯時才發現自己鬧了個大烏龍......所以現在看到好些年輕程序員的問題,感同身受,誰都是從撲棱撲棱的菜鳥起步的,誰又不曾不嘗盡苦頭?也許過個10年、20年、30年......這卻恰好是自己懷念的的真實記憶呀?!

以前WPS在DOS時代可是字編輯軟體的翹楚。自己用C語言模擬了一個簡易版WPS,雖然功能完善性無法媲美WPS,但基本的操作功能已經具備了。當時自己的那個樂啊,好像自己離求伯君近了不少......再後來,環境中慢慢不太用C/C++了,現在C/C++在記憶中已經變得很模糊了。其實不止是C/C++,MFC、COM、DBase/FoxBase/FoxPro、Pascal/Delphi、UCDOS、PCTools、Fortran等等等等的這麼多技術都如同生命中匆匆而過的過客,用了這個、用了那個,但終究世間萬物都逃不過命運的安排,Borland沒了、Sun沒了,Oracle還是那個Oracle,這些安排誰又能知道呢?只能在5年、10年後,你才會不禁「哦」的一聲:「原來歷史是這樣的......」

「漫長的」開發歲月,就這樣一直在學習,一直在迎接各種生命的安排,Java、Python、Perl、Ruby、PHP、Scala、Clojure、Go、Kotlin、Android、JS、BI,再到現在在看的Rust,經歷的技術太多太多......

現在已經不在一線開發了,但對技術的追求與熱愛從未淡泊下來。看到年輕朋友們痴迷某種技術/語言/框架,然後吵來吵去的,而洗盡鉛華之後我的心情里,失去的是對某一類技術的「不允許別人說它不好的情感」,留下的是對編程普遍價值的濃濃心境。不要問我學這麼多語言幹嘛?編程早已是我的一種生命態度。我也早過了膜拜什麼技術大牛的年紀,因為,技術的強大、以及對技術的狂熱與激情早已不再是我追求的東西了,我要的是自己沉浸在編程里的一種快樂,一種自如且自在駕馭編程的感覺。這種快樂和感覺,是很平靜、綿長而心悅的......

被話題帶進去了,戳到了,話匣子一打開怕有點收不住,心情滾來滾去般澎湃不已,啥也不說了。去聽當年屬於我們的老歌:卡朋特兄妹的「Yesterday Once More」......

祝各位年輕程序員朋友未來的編程之路安好!


入行十一年。

高中時候的願望就是寫程序,經歷過一些難以言說的曲折以後,畢業的時候終於開始寫程序了。

使用的第一門語言是還是古老的VB,在第一次用VB一個人完成商業級軟體的開發之後,鄭重的統計了一下代碼行數,4w多行。這種成就感竟然伴隨了我一年多。

一直混跡於創業公司,見證過從幾個人發展到行業巨頭的公司,也經歷過如煙花般璀璨過後迅速消亡的明星公司。

曾經也迷茫過,不知道技術路漫漫,什麼時候才能熬出頭。

曾經也轉過行,經歷過人性黑暗之後,甚至還惹了一身官司,又重回到IT行業。

寫過很多代碼,但仔細想想,可能那些代碼也許都已經消亡了吧,並沒有繼續產生多少價值。

當然,這十年來,我個人收穫的更多。

十年前,我認為編程就不用和人打交道。

十年後的現在,我認為編程就是和人打交道。

。。。

十年前的我和十年後現在的我完全是兩種人。

十年編程,錘鍊了我的思維,讓我看這個世界看的更加透徹。

十年編程,擴展了我的眼界,讓我明白原來這一切才剛剛開始。


很小的時候就一直有在接觸編程了,但正式開始寫第一個意義上的程序,是在讀初三的時候。到目前為止,剛好寫了有十年。按照時間前後排序,學過的語言有 ActionScript、VB、C++、Lua、Java、Python、Kotlin。感受是,讀書時能經常在同學面前顯擺,例如給課堂講座上的電腦寫上「病毒」,在同座的文曲星上寫遊戲解悶,大學時因為寫代碼厲害泡到了前女友,工作時又因為起步比別人早,拿到了很多便利。


工作到今年正好十周年,經歷了大中小,各個國家的公司以及創業,從死磕一個語言到死磕一種語言的實現,到隨便使用一個語言,一個框架一個系統,我其實最感謝的是這些年一起過來的各位高人。

從手上緊捏著一把劍到心裡有劍,從死磕實現到make impact.

最近碰到一些人問我,你現在做管理了,還會寫代碼嗎?

那種感覺就好像搞搖滾樂的掙了錢,你就是偽搖了。

其實不是的,正確的比方是:你學會了騎自行車,是一種肌肉反應。

從你自己騎車,到教人騎車,教人怎麼起好車這個過程。


吹牛逼時間到了,如果真從頭算,有21年了。。。小學五年級自學的basic,玩了一年多,拿來寫遊戲,當然是小遊戲。中間高中做過半年OI,剩下時間就沒動了。再撿起編程已是大一,到現在也13年了。

現在的感受是:

技術學不完,要學會取捨,早點找好自己的方向,反正我還在成長。

行業大得很,不止要提高技術,各方面能力都在成長中。

再干三十年!


編程21年,入行18年,壘了5,6年代碼,後面基本做系統設計了,設計的功能越來越大,越來越複雜。

現在編程的感覺就是對大項目一點也不擔心,習慣了自頂而下的思考模式,習慣了各種抽象,腦子裡裝了很多現成的方案隨時可以用。

費勁的地方是演算法,感覺有點想不動了。


工作剛好十年了~

第一年在物理研究所做oa辦公系統的實施,寫點js和存儲過程。

然後北上到京都入職中國數碼,寫一大把CMS後台。

第二年跳到無限立通,做短彩wap,開始思考一個問題,為什麼程序員要寫像屎一樣的代碼?

還有第二個問題,我是程序員,還是垃圾製造器?

帶著這個困惑我試圖重構手上的系統,未獲支持。

同年無意中拿到搜狐的offer~當年搜狐還是數一數二的互聯網公司呢~

瞬間視野上升到新高度,參與白社會項目的開發,學會了至今為止,對我幫助最大的技能點,工程師的職業素養。

見證了身邊各種優秀又低調的工程師,在後面幾年成為行業大牛的過程,這是後話。

單純對技術而言,白社會改變了我寫代碼的方式。架構,方案,測試,並發,安全,分散式,全部是在這個項目中學習,實踐,優化。

然後又有了第二個困惑,我年紀大了之後怎麼辦?有什麼工作是年齡越大,經驗越豐富,價值越大的?

是的,我選擇了演算法。

第三年跑到創業公司,帶著對演算法的期望,帶著對創業的憧憬,來到了融匯,無意中進入金融圈。

依靠碩士期間的積累,用crf做了實體識別,還學會了分詞,詞行標誌,去重,實時索引,分類,知識庫等等。

哦 還有hadoop。

第四年又覺得很無聊,收集語料,調參,驗證結果,優化 不是我感興趣的,而自己無意中成了技術部的leader。

所以架構 ,流程,管理等接觸的特別多,時間也分散的嚴重。

第五年突然對drools感興趣,用規則引擎做了很多和好玩的東西,如殺人遊戲,捉鬼遊戲,多人掃雷等等等等,藉此機會學習了前端js,websocket,半抄半改用Erlang搭了一個comet伺服器,支持兩種通訊方式,而且不會丟數據。

第六年的時候變本加厲,精力分散的更厲害,突然間發現程序員改變不了世界,於是就轉向pm,運營,數據分析,做了一個薦股,24小時自動抓取完成的財經熱點。

為了提高團隊的開發效率,做了一個代碼生成工具哈哈,好喜歡這個東西 現在也一直在用 對所有能提升效率的事情我都覺得很開心。

第七年的時候,總看不到公司的發展方向,不想在高層爭鬥中勾心鬥角,跑去龍湖旗下做o2o,成功將低壓拼到120,兩個月帶著一群小孩子搭建一套電商,微信公眾號,裝修等。

為防止他們拖進度,我說,你們全部寫js,後端讓我一個人來寫~

對了,jenkins技能++,敏捷開發流程已經小成,團隊管理能力++

同年跳到p2p公司,做CTO,正式邁入高管生涯,迷之學習金融邏輯,商業模式,人脈關係,繼續從無到有搭建團隊,框架,一個半月之內從拉團隊到改造一套原來的系統到上線,增加了新手標,微信版,接入第三方資金託管,UI全部重繪~app端上線~

全棧技能++,管理能力小成,金融知識小成~

一不開心策划了一個小運營活動,戳戳紅包會變大~半夜12點,上千人同時戳紅包~

第八年入職另一家金融公司,管理80人研發團隊,從頭到尾梳理敏捷開發流程,培養團隊骨幹,制定各種績效考核制度~

同年終於腦子抽風,為了夢想從CTO華麗轉身,邁入CEO的台階。

化身為救火隊員,請不起技術大牛,也請不起技術小牛,從UI到pm到JAVA到qa到js到Android到iOS全部自己或找人帶新人,嗯,開著3000塊錢的工資,教他們寫代碼。

教的心好累,做完功能了教他們提升性能,性能上去了教他們重構,重構做好了教他們解決線上bug,bug處理好了,教他們開發流程,流程教完了,再教他們做架構設計 設計做完了,再教他們怎麼學習新框架~

想想還有一點點難過的感覺。

但沒辦法,事情沒想的那麼容易,兩年過去了,當初跟我的小夥伴已經各自離開。

畢竟公司的成長比不上小夥伴自己的成長,某種程度上也是我帶人效果好啊~

第九年更抽風~

沒辦法,android和iOS技能++,商務談判能力++,管理能力爆棚,產品能力++,運營能力++

期間為了交付一個項目,為了工程師的榮耀,帶隊7天睡了18個小時的覺。

第一天通宵 ,到第二天晚上12點,回家1點左右睡覺。

第三天七點開始繼續通宵,到第二天晚上12點。

嗯,最終靠點小手段順利交付,工程師榮耀之光在我身上仍然有效。

同期終於邁向互聯網技術培訓,對於怎麼樣培養出真正的工程師操碎了心。

哦,知心小哥技能滿點,不下於500人給我講過他們的凄慘經歷,目標大多數只有一個,學費可不可以便宜點?

或者是我很迷茫,我該怎麼辦?

第十年,也就是今年,好像除了幫這群菜雞解決問題,沒怎麼碰過代碼了。

敏捷開發能力大成,團隊管理能力大成,演講能力++,融資能力起步~講故事(huyou)能力起步~

哦,還有各行各業的理解力爆棚~畢竟這三年以來接觸不少行業了~

回顧這十年,很遺憾自己並未能在某一個領域專註更長的時間,曾經想過很多次,如果我在技術領域裡更專註,不去做這些管理 產品 運營 流程 模式等等,會是什麼結果。

年輕的時間有很多方向可以選擇,我也在各個分叉口徘徊過,也許我應該繼續留在搜狐,或者調到bat,而不是選擇做演算法。

也許我應該一直做演算法直到今天,而不是選擇做管理。

也許我應該留在證券行業,而不是做社區。

也許我應該抱著龍湖大腿,而不是更看重自己做的事情正確與否。

又或許我不該離開金融圈,又或者就該跟著有錢的老闆走。

或者我要創業,也不要選擇苦逼創業,抱一些機構的大腿,或者是別想要自己把握方向,安心只寫代碼。

又或者我不該堅守自己的一些原則,認定不放棄每一個想要努力學習的小屁孩,他找不到工作活該,我也不應該反覆強調工程師的概念 逼著他們自己找資料,解決問題,遵守流程。

但是就這麼一路走來,我想我看到了更多的風景,我接觸到了更多的人,我了解了更多的行業,我見過更多人的內心。

我有點迷戀這種感覺,我也很喜歡寫代碼,喜歡把一件事情弄清楚,喜歡去優化現有的問題,喜歡做重構,喜歡抽絲剝繭的追蹤驗證問題的原因,喜歡底層的知識體系和邏輯推理 喜歡寫各種提高效率的工具,喜歡指定流程規範確保不再踩坑。

可是我同樣更喜歡眼下這種從無到有的創造性。

在我之前 沒有修真院,在我之後 也未必會有。

修真院的理念,價值,遠遠超出現在的認知,而我能夠一點點把它實現出來 降臨在這個煩躁的世界上,用自己的力量扭轉命運的琴弦,就會覺得更好玩兒~

感謝過去的自己,一路選擇走到今天,我想我自己最大的念頭就是把奇思異想變成現實。

我學會了寫代碼,我變成了半桶子全棧,我學會了做產品,我會一點點運營,我了解了資本的遊戲怎麼玩,我找到了更多的合作夥伴。

沒有程序員的基礎,我對做一件事情不會有底氣。而單純做技術,又無法實現自己心裡那隱隱約約又懶得向世界解釋的夢想。

所以,這種選擇是對是錯,我不知道。

也很遺憾,未能在技術上更專註。

有時候,大概一個人選擇走自己的方向,終究會錯過別人的狂歡。

所以如果你是一個程序員,你最好不要像我一樣,而是專心的在一個領域裡做深入。

放棄夢想,大概才會得到理想。

希望對各位新人有幫助~


哈哈,怎麼這麼巧?真不是我自問自答的呀!剛寫完,給兩個鏈接:

入坑IT十年(二)技術以外·一起幫

入坑IT都快十年了·一起幫


08年本科第一次接觸程序 若按此計算 應該快十年 這樣算的話 感嘆是程序之路漫漫 感覺猶如剛開始踏上求道之路

另一個很有意思的是第一門語言是C++ 現在依然在做C++相關的工作 想起以前老師說C++沒有十年別說精通 另一位老師說C++日薄西山了 快跪了 然而現在我覺得他們說的都不對


我開始接觸程序時比較小。從高一參加NOI開始算吧(幼兒園接觸過QB,小學學過LOGO,但是都是玩性質的),到現在也寫了十多年程序了。

感受就是,頭幾年專註於一個問題應該怎麼解決,後幾年致力於應該去解決什麼問題。


99 年入行時是美工

00年轉了兼任前端

01年又兼了產品

03年轉程序員

05年轉專業Java程序員

08年發起開源項目 Nutz (http://nutzam.com),現在社區(http://nutz.cn)很活躍,GitHub 的 Repo 超過了千贊。和項目的第二提交者(現在是項目管理員)Wendal 也認識8年了。

現在是一個小公司的 CTO,我們也同時在做另外一個很酷的秘密項目

對於編程的理解,在這10多年的時間裡不斷的變化,不過我並不認為這些理解對於其他人有用。對於編程的感悟是一個很自我的過程。長達5年的時間裡,我一直不斷糾結變數的命名,代碼注釋的格式,程序的結構。今天,我很少糾結這些問題了。

所以老程序員的好處就是,有套路。套路並不意味著僵化,而是你可以把精力節省下來,對付真正重要的問題,那些不太重要的問題,套路搞定即可。

想成為真正程序員的同學,一定要掌握三門語言:

  1. C : 讓你更理解計算機和操作系統(注,不是C++)
  2. Python/Javascript/Ruby 等現代腳本的任何一個,讓你理解什麼是函數式編程
  3. Java/Go/C++ 等任何一個工業級語言,讓你理解什麼叫做軟體工程

如果你想掌握更多的語言,隨你便,但是你基本不會因為掌握再多的語言,而提高自己的編程境界了。

這十多年的時間,真正指導我編程的就一句話:『One, Just One』

即,最大限度的消除重複。這需要你在程序結構,演算法等諸多方面絞盡腦汁。《程序員的七種武器》,《編程珠璣》之類的書建議多看看,會提高很多人對於『重複』的認知。我見過很多人拉拉雜雜的寫了一堆代碼,然後,實際上一行正則表達式就能搞定的有沒有。正則表達式,耗時的是編譯,運行起來並不慢。很多新手總是說:『要考慮效率啊,正則太慢』其實他們的慢主要是沒有做預編譯而已。

隨著你經驗的豐富,除了知道越來越多可以避過的坑,主要是你眼中,一個項目,會有越來越多的重複。那麼你的程序往往會比新手簡潔,好調試,易收斂。因為新手認識不到那麼多重複,所以代碼比較繁瑣,和沒有分寸。

這十多年的時間,基本上指導我職業選擇的,就一個精神:『如果這公司了,找不到可以學習的人了,跳槽』

我一直堅持在一線工作,記得多年前在入職某個也算500強的外企時,最後和Hr聊的時候,我強調:『別攛掇我去走管理,我必須要每天寫代碼,我只會走技術那條階梯』對方很錯愕,問『可是中國人在這裡,走技術升上去的機會很少啊。』我說:『如果升不上去,我就辭職。我只寫代碼』後來入職幾個月後,和她有次閑聊,她說:『你好特別』我回答:『我只是比較喜歡寫程序』

後來在另外一個公司,老闆要我帶團隊,我推了一年,躲不過了才答應。當時帶了了兩個團隊,一個是設計團隊,一個是伺服器後台團隊。我也一直在一線寫代碼。那個時候學會的是,可以允許別人的代碼質量差一點。算是很大的一個收穫。

我管理團隊的方法是,把每個人想像成一個組件,我會觀察研究對方,然後搞明白他的介面。再後,設計一下整個團隊的集成方法。管理團隊的過程就是不斷監控調整和消除 bug 的迭代過程。和計算機編程一樣,團隊管理也是有基礎科學支撐的,不過不是數學,而是心理學。

總之:

一個十年以上的,能自稱是程序員的人,必然會有很多成熟的套路和經驗;

至少掌握了3門完全不同的語言,從而能深刻理解計算機系統,函數,以及軟體工程;

他們對已一個工程的掌握,無論是代碼上,還是團隊上大多數問題洞若觀火;

他們產出的代碼,簡練,易調試,上線後Bug會迅速收斂;

其他人很難再較大規模的精簡他們的代碼;

他們必然在人生之前的某個階段,瘋狂的迷戀和鑽研自己認為性感的編程技術;

同時,在10年後的今天,他們會有或多或少的哲學上的感悟;


07 年在學校開始給師兄的公司做開發,到今年正好十年。

感覺就混了十年,真沒多大長進。那天我還在群里問,你們幾年前寫不出來的程序,現在能寫出來嘛?

大部分也說仍然不能。

但是對業務倒是可以滔滔不絕的講很久,不過這個是應該的。

大概能談到長進的,大概就三點:

第一是對有點規模的項目更有把控能力了。十年前面對幾十萬行代碼的程序,是懵逼的,只敢在一個模塊里修修改改,現在應該可以比較自如的重構了。

第二是從底層解決問題的能力有提升。開始寫程序的時候,往往都是從上層想辦法,現在面對問題往往先想能不能直接改底層。

第三是藉由第三方模塊實現功能的能力有提升。以前特別怕使用那種複雜的庫,文檔看不懂,調半天調不通。現在基本上只要方案能說得通,各種對接都比較流暢。

在這十年裡面,感覺真正對自己有幫助的項目,其實不多。甚至在有選擇的情況下,也花了很多冤枉時間,浪費了技術更新的機會。我記得 14 年那會兒,我還把大把的時間花在用 Qt 給客戶寫各種表單,在亂成一團麻的客戶端代碼里給客戶加功能的事。我要是猛一點,當時就會把項目幹掉用 web 重做。

回顧一下自己的開發歷程,在學校和工作的前幾年,基本上都是瞎搞搞而已,也就最近幾年有點意思,總結成一句話大概就是「奔向 web 前端」。

談得上有成就感的項目大概一下這麼幾個:

搞了幾個性能優化項目,都獲得了數量級的提升。其實沒動用多複雜的技術,但是獲得了某種「小聰明變現」的快感。

第一個獨立負責的模塊,給一個大項目寫信令轉發伺服器,就是一個 socket 服務。傻不拉幾的不知道用第三方庫,自己擼了一個 tcp 服務,堪堪能用。現在這個服務應該還在四川省的變電站里跑。

第一次搞自己覺得「有技術含量」的項目,為了解決各種第三方開發包的兼容性和穩定性問題,把一個桌面軟體改成了多進程模式,一家一個進程,用 windows 消息通訊。

第一個獨立負責的產品,給前前公司的設備做開發包。特色是重新實現了供應商不給我們公開的一個演算法,我們靠這個拿了他們的中國總代。遺憾是那時候不太會設計代碼,照著半懂不懂的《設計模式》搞出來的架構很外行。

開發了一套桌面軟體。果斷讓手下的開發同事集體轉 web 前端。設計了一個類似 electron 的容器裝網頁,特色是網頁裡面還能再嵌套 c++ 寫的控制項,遺憾是沒有把 nodejs 放進去。我們當時可能是行業內第一個拋棄 ie 內核的團隊。

開發了一套小型前端框架。特色是能方便的處理組件嵌套問題(原來我們用backbone,嵌套問題非常討厭),遺憾是這個項目壓根就不該做。我也是一時上頭,沒選用新型的開源方案,還好前公司不喜歡用開源,不然會被罵死。

開發了一套全景視頻播放引擎。特色一是支持windows/mac/android/ios/網頁,非跨平台,而是在每個平台上完全重寫,二是純 openGL手寫,不依賴任何第三方庫,三是根據業務需要開發了很多市面上不常見的視角。遺憾是代碼寫的潦草,文檔寫的也不好。

去年覺得自己 hold 業務的能力太弱,得鍛煉鍛煉,正好挺想做前端,就換了一家公司專門堆業務網頁,現在好像有點後悔T_T 幹嘛非得干自己做不好的事兒呢。

業務上能吹牛逼的事兒,好像還挺多的,反正都是吹牛逼嘛。早年間做電力和安防。不少電廠的操作票系統有我的貢獻;08 年奧運保電,上海電網的電力遙視設備有不少是我接入的;山東省超高壓電力遙視平台視頻串流問題,遺留了不知道多久,是我解決的;國內若干公安機構的應急指揮系統大屏,是我做的。

然而這些好像和我現在做的事兒沒多大關係……


不請自來。感覺這個問題會是個懷舊場。

已脫離職業程序員苦海,業餘時間還是會寫一些代碼的。大致簡單地講講我的經歷吧。

writeln("Hello, World!");

初識

2002年,夏

15年前,我還是一個沉迷奧林匹克數學的5年級小學生,直到我遇到了人生的那個她。

那年,大香山一中把11年市奧數競賽拿獎的一批小學生拉到一起(沒記錯那年我拿的應該是市二),在假期參與了一系列的培訓。

其中有一門課就是Pascal,從小我就對計算機相當感興趣,經常在家折騰各種計算機的東西。

上課的第一天,遇到了Pascal,便讓我深深地喜歡上編程,在藍色編輯器下敲擊鍵盤,寫上簡單的幾行命令,就能在黑色Console中列印「Hello,World!」。感覺十分美妙,似乎我想要什麼,她就能幫我實現,那應該就是編程的感覺。

在假期夏令營里,雖然期間也惹到了阮志遠老師,哈哈,但我學會了從條件控制到類與對象、簡單演算法等等一系列編程入門的內容。

很不幸的是,我的英語和語文水平不到位,失去了留在一中的資格。我也以各種借口,向父親講了一個我對編程不感興趣的謊言,暫時跟編程分道揚鑣了,就好像失戀的感覺。

2003年

整個6年級,有時也會偷偷在家寫一些代碼,平時在學校向留在一中的方同學和譚同學請教,就像在跟好友打聽她近期的消息一般。

alert("你好還嗎?");

回眸

2003年,夏

一起學編程的小夥伴去了一中,我去了僑中,覺得或許再也不會去碰編程了吧。

2003年,暖冬

我參加學校的網頁設計課後興趣班。因為有之前寫Pascal的經驗,很快掌握了JavaScript的開發,也拿到了網頁比賽的省一等獎。帶網頁設計的袁港老師推薦我去上樑潔老師的NOI課。

那似乎像是昨天發生的一樣,一些都如當初那麼美好。再次回眸、想見,心中有說不出來的激動,而又有太多的委屈與難過。

總之,一切都好。

2004年,2005年,2006年

在這段時間裡,梁潔老師給我們系統地補了一些知識。像計算機原理、數據結構之類的,我們編程的意義是什麼?我們要解決什麼樣的問題?對她有一個更深入的了解,懂得了她的內涵所在。

但這兩年的國賽,我都只拿了三等。

Console.WriteLine("Love");

熱戀

2007年,夏

如果說,之前5年是在打基礎,那麼從07到13年這幾年,是我真正開始用好編程的6年。

高中期間,認識了不少大神,2次國賽,還是三等,高考只加分數,沒有保送資格。而方同學和陳前輩已經拿到NOI國一和國際金獎,一個去了清華,另外一個去港科大。(剛才去查了一下,陳前輩已經在斯坦福讀博了,仰視大佬)

這時期在學校老師以及大神們的教導下,除了學J2EE和窗體開發以及設計模式之外,我對計算機網路、安全演算法和演算法效率方面有一個很大的提升,自己也寫了一些編譯器、安全演算法,做部分演算法優化,接了一些網站的外包賺點零花錢,但資料庫知識方面相對欠缺。

高中也就這樣糊裡糊塗地過去了,沒有太多的精彩,也沒有太多的墮落,一直在和計算機編程培養感情。

2009年,冬,上海比想像中的要冷

使用一門語言編程就像和女孩子談戀愛一樣,你知道她哪裡不好,你會選擇去容忍她不好的地方,會發現她的優點,「縱容」她去展現這一面。

就像用Python,端莊優雅而不失活潑,有時候會顯得比較固執。

高考後沒有保送,我選擇了從廣東來到了上海,離開家鄉,去看看外面的世界。

大學幾年跟著導師做項目,也做了電力數據分析、機器學習的一些項目。杜老師是帶資料庫的課的,正好彌補了我過去資料庫知識不足的地方。

2010年,夏,2013年,夏

這些年見證了移動互聯網的崛起,加入了開源的大圈子,也接了不少外包項目,初期參與開發過的項目現在居然已過十億、百億市值,有點後悔當初沒輟學。期間有幸參與了萌百的開發、編輯,而參與過的CloudaJS已然沒落。

這些年,無論是在大學與戀人相識還是到後面走出社會、參加工作,計算機編程一直陪伴我成長。

畢業後,我在一嗨租車有了很大的提升,把代碼優化真正地上到刀刃上去。另外就是是項目的管理方面的提高,一個互聯網公司技術部門怎麼搭建以及了解了真正的IT架構如何實施。

Debug.Log("短暫的離別才是永久的相聚。");

離別

2014年,夏

14年年初,我認識Litpo團隊的學弟們,後來學弟組建了幻刃網路,讓我也過來做項目,期間我負責了項目大致的管理,特效研發,BD等等事務。

創業十分艱苦,團隊成員們經常11點才回家,有時候甚至熬到通宵。

在這2年的創業路上感受很深,和以前工作不同。自己寫代碼,雖說在工作上也是挺認真的,經常連續加班,但沒有那種使命感,而創業不同,會考慮更多,自己的一個不願意可能會讓項目進度停滯,或者是出現其他問題。在做事方面會更加成熟,去考慮更多。或許只有創過業的人才能懂得。

2016年,春

《ICEY》差不多完成的時候,因為我個人想要發展別的方向的原因,帶著沉重的心情離開了團隊,開始新一輪的創業。

即便現在脫離了程序開發的工作了,我也會一直關注計算機編程的發展,或許只有這樣才不會厭倦她,才是永久的相聚。

最後,感謝編程給我人生帶來的改變,不能說好,不能說壞,反正沒有遺憾,一切都像當初與Pascal想見那般美好。


工作十年的那年,發生了不少事情。

0、那時候flash還沒死透。

1、第一個產品同合作者分贓不均,跟他吵架,差點鬧翻。

2、私人發生一些事情,搞的至今很痛苦。

3、有個互聯網小公司(又拍網, 繪生活)的老闆拉我入伙,因為2,婉拒。如今該公司也算全國知名的行業翹楚。

4、當時自己寫的第二個產品(http://www.flashdemo.net),銷售並不理想。

已經轉向第三個產品(http://www.axmag.com),和一個74年的前輩一起寫代碼。

5、剛買了第二套房。去年賣掉了,扣掉按揭成本,只賺了50來萬。

6、那時候很看不上阿里...

總之,包括後續幾年,自我感覺還是 井底之蛙。

-------------------------------------------------------------------

看錯題目了,代碼十年,工作也就8年半的樣子。

其實代碼寫到第五年的時候,代碼層面已經練滿級了,

剩下的都是看做出了什麼像樣的成就,參與什麼項目,賺了多少錢。

好比武功大成,沒出門就嗝屁的也白搭。《東成西就》王重陽?

是不是英雄好漢,主要還看有沒幹出什麼除暴安良的事迹。

-------------------------------------------------------------------

關於技能要求,

到5年之後,基本三條打怪升級的道路:

1、升級至技術專家路線,繼續深耕技術。

2、轉職技術管理,重點需要人員、時間等資源統籌。

3、轉職產品設計,重點面向需求分析、功能設計。

具體怎麼選擇,完全看自己選擇的環境。

比如2007、8年的時候,當時代碼寫了差不多也有9年的樣子,

我開始寫第二個產品,也不匿了:

FlashDemo Studio

當時代碼方面很有自信,拿來一個同類產品就開始抄功能。

第一個抄襲的對象是 ViewletCAM,屬於小而美,抄了一陣子出了個版本。

後發現業內爆款TechSmith Camtasia,轉而跟隨該產品。造成功能和底層重構。

「畫虎不成反類犬」,這是這幾年的最大經驗教訓。

原因很簡單,作為程序員,雖然當時任何功能只要有時間的確可以山寨一個出來。

然而對於用戶需求提煉、競品功能的取捨,就遠遠超越了一個技術人員的要求。

當時環境受限,既要設計、又要實現、還要測試發布、甚至美工的活也得干。

包攬了所有活,不能專精某項。

尤其產品設計的入門技能點開太晚,磕磕絆絆走了很多彎路。


幹網某核心節點的核心路由……發現藏有一顆彩蛋。

唔,十年前的親身體驗。

另,彩蛋作者已被擒獲,正老老實實於某省某單位某職務任上服刑。通過認認真真為人民服務,保障人民群眾生命財產安全的形式贖罪。不過其所在單位,可能近期要被省府批評了……


推薦閱讀:

為什麼 iPhone 6 Plus 要將 3x 渲染的 2208x1242 解析度縮小到 1080p 屏幕上?
如何系統學習iOS網路編程?
想用業餘時間學習 iOS 開發,零基礎,有沒有推薦自學用的書?
QQ 音樂 iOS 新版能夠在鎖屏界面顯示動態歌詞,如何做到的?
零編程基礎,學習 iOS 開發應該採取什麼路徑?

TAG:程序員 | Python | PHP | iOS開發 | Java程序員 |