當前位置:
首頁 > 知識 > 這多年來我一直在鑽研的技術

這多年來我一直在鑽研的技術

這多年來我一直在鑽研的技術



來自:酷 殼 – CoolShell


作者:陳皓


因為我是看到tinyfool 《那些年我趕過的時髦技術趨勢》,在讚歎的時候,也讓我對我有好些回憶,所以想寫一篇回憶貼,本來覺得回憶是件挺讓人沮喪的事,因為是老了的表現,但我寫著寫著,就歪了樓。看來,我還不老,還在拼博。下面是很多我的嘮叨,你喜歡就讀讀,不喜歡就TLDR – Too Long, Don』t Read!

自從98年畢業,到今天,參加工作有18個年頭了,加上在大三的時候就為兩個在外面接活的老師程序,到今天,寫的程序被用到生產線也有18個年頭了。


背景經歷


要說明我技術上的「性取向」,還得我說說的我的一些背景和經歷。


我這18年,大約分三個階段:


1. 1996年-2000年:入門亂來期,大三大四加在銀行工作的兩年。


1.1用Powerbuilder/Delphi在WindowsNT/SQL Server上做了好多個MIS管理軟體,有酒店的,有送水的,有OA的。


1.2用Java的Applet做了一個Web的教學課件,用於在Win95/IE3.0中演示操作系統中的各種調度和演算法的動畫,得了個全國大學生挑戰者杯的鼓勵獎。


1.3用Delphi的ISAPI技術以及PHP/ASP給一些公司和大學做過幾個網站。


2. 2000年-2010年:技術學習期,這十年,我主要的編程語言是C/C++。


2.1前兩年在銀行用C語言在Unix(AIX/Solaris/Sco Unix/HP-UX..)寫各種銀行業務(用C語言寫),用C寫操作SQL,操作界面,寫業務交易邏輯,一切都用C……,這是一個C語言的年代,當時,全國的銀行都在做大集中,銀行是當時行業里最大的軟體系統了,所以,我確定了C/C++/Unix的技術方向,我當時的網上簽名是,C/C++/Unix才是大規模殺傷性武器。

2.2然後,2002年在Platform做一個全平台的(包括Unix/Linux/Windows)高性能計算的軟體產品,很像今天的Hadoop,當時叫Grid Computing,主要用低廉的x86集群進行大規模的並行計算,主要用於晶元設計行業,如:ARM和德州儀器,或是科研,如NASA,或是國家安全,如美國國防部的影像分析,或是3D動畫渲染,如怪物史瑞克……從05年以後,發現很多用戶開始從Unix遷移到Linux,於是開始更為關注Linux的Kernel知識。Platform有一套很嚴謹的軟體工程體系,我對嚴謹的軟體工程以及很多的基礎的技術的認識在這裡形成.


2.32007年在路透做路透全球金融數據Real-Time網路的高性能調優(我在《性能測試應該怎麼做?》一文中透露過這個公司的性能要求,是一個實時的數據網路,對於99.9%的網路傳輸在100K的tps下要低於1ms,技術挑戰是很大的),在路透,我只干一個事,就是性能優化,我把我負責的幾個系統的性能都提升了8倍到15倍的樣子,09年年底的時候,我已把未來3年的優化的活都幹完了。所以,這個時期,我也開始了我的經理生涯。我對性能調優,高可用系統架構,研發管理的很多是在這裡形成的。


3. 2010年到今天,技術沉澱期,這個時間段,主要的編程語言是Java。


3.1這段時間,我加入了Amazon和Alibaba,也就是所謂的互聯網公司。在Amazon幹了兩個事,一個是把Amazon全球的marketplace連起來,跨大洲的數據中心的通信,還有一個是第一次接觸大數據和機器學習——用戶需求預測系統。在Alibaba干過電商雲平台聚石塔和阿里雲,去阿里最主要的是經歷雙十一。


3.2這段時間,對我影響比較大的是Amazon,技術不再是我的瓶頸,大規模的系統,對我也不是問題,而讓我收穫最大的是,世界前沿的軟體設計架構和解決方案,以及做技術的態度和工程的方法,我的眼界、腦洞和視野都巨大的打開,並且在技術管理、工程管理、產品管理、人員管理、公司管理等等管理方面的思維有了質的提升。這段時間,才是我真正技術沉澱的時期。


我的這個背景本來可以更好一些,只可惜運氣不太好,本來可以走的更快的,無奈在最關鍵的時候遇到了兩次金融危機,本來可以去矽谷更牛更好的公司見世面,無奈父母身體欠安,只能放棄。


經歷決定思維方式


通過我的背景經歷,大家不難看到,我基本上都是做一些規模比較大的系統和軟體,而且,主要用C/C++/Unix/Linux這樣比較晦澀的語言和操作系統。我們知道用C和C++開發,基本上要處理的錯誤都是和系統底層相應的東西,而上規模的系統和軟體,又總是會遇到很多「稀奇古怪」的問題,這些問題,都會逼著我要去了解很多的操作系統、計算機系統、網路、資料庫、中間件等等的各種基礎或底層技術。


而且我經歷的基本上都是非常嚴謹的軟體工程,不能馬虎,我有幾次馬虎的經歷,給我造成了非常大的心理影響,比如,曾經被定性為不適合寫代碼,因為我的代碼太爛,或是出了嚴重的故障,幾乎要跑路去了。另外,全球gloabl式的oncall,經常讓我在凌晨被電話叫起來解決問題,這個經歷比較痛苦。所以,我的整個經歷,讓我養成了,在軟體開發上必需也不得不嚴謹的習慣和價值觀體系。


大家想想,用C/C++開發一個幾乎不能出故障的軟體系統,你需要多仔細和多嚴謹的態度才能達到要求?因此,我的經歷讓我不能馬虎,也不能應付工作,更不能在標準上有所妥協,還需要不斷地提高標準,所以,時間一長,我必然,會有如下的習慣:

1. 要做到——知其然,知其所以然。


所以,只能不斷的學習基礎知識以及和這個技術關聯的知識,就像Wikipeida一樣,當你進入一個詞條的時候,就會伴隨時一堆新詞條,於是,當多年後,我看到 「知識廣度是深度的副產品」這句話時,簡直就是說到我的心裡去了。


2. 要做出工業級的軟體。


從銀行到Platform到Thomson Reuters再到Amazon,軟體開發上都會有SLA的要求。我認為,一個軟體是工業級還是民用級的,除了功能正確之外,最重要的一個指標之一就是在性能和穩定性上有沒有SLA。絕大多數的互聯網公司和開源軟體都沒有SLA。所以,達不到工業級的標準。要達到工業級的標準,就需要花費時間、人力和財力進行非常繁瑣的設計、測試評估以及運維管理。


3. 工業級的軟體來自工業級專業人員和專業軟體工程。


3.1 專業的人員。為什麼絕大多數的外國公司需要的是CS(Computer Science)背景畢業的工程師?因為他們要做的是工業級的軟體,這是一門科學,即然是科學,就需要受過良好的科學教育的CS專業的人。


3.2 專業的工程。工業級的軟體需要有工業級的軟體工程,比如,嚴謹的Design/Code Review,嚴格的測試,以及完備的線上運維。


3.3 專業的工具。這個時候,你就會發現,要做到高級別的SLA,比如包括5個9以上的SLA,人肉乾活的能力已經完全跟不上了,你需要大量的專業的與之配套工具。人類之所以聰明是因為會發明工具,所以,這也是工業級的另一個標準——你有多少現代化的支撐工具?


在之前的《開發團隊的效率》一文中,我說過——你總需要在一個環節上認真,這個環節越往前就越有效率,越往後你就越沒效率。要麼你設計和編碼認真點,不然,你就得在測試上認真點。要是你設計、編碼、測試都不認真,那你就得在運維上認真,就得在處理故障上認真。你總需要在一個地方認真。


認真是痛苦和艱難的,也是需要苦苦堅持的,因為人太容易妥協了,這對每個人來說都是一種不小的挑戰。老實說,我與很多人對「認真」的標準不一樣,所以,產生了很多分歧,很多人說我太理想了。其實,我能理解他們,一方面是因為我的標準是比較高了,另一方面是他們只做過民用級的軟體。

另外,在一開始,做慣了工業級軟體的我極度地不適應於那些糙快猛的開發方式。不過,我也在調整自己,畢竟,世界不只一種價值觀,有的是工業級的軟體,有的則是民用級的,還有的只是個玩具,而且還有Java這門語言非常有效地屏蔽了很多底層和基礎知識,所以,也不可一概而論,我也在適應一些民用級的軟體開發的方式。


後記


從去年我從阿里離開到現在14個月了,這段時間內,我給大約40多家公司做過相應的技術諮詢和解決過很多技術問題,絕大多數公司都是因為性能和穩定性的問題來找我的,我給這些公司解決問題的時候,基本都是這樣的Pattern:


一開始,發現都是一些技術知識點的問題,


然後,馬上進入到系統架構方面方面的問題,


當再解決架構問題的時候,我發現,已經是軟體工程的問題,


而軟體工程問題的後面,又是公司管理上的問題


而公司管理的問題,結果又到了人的問題上


而人的問題,又到了公司文化的問題……


你看,很多問題,一環扣一環,最終都不是一個簡單的技術問題。我倒不是說,我在抱怨這些問題,我更不是在說能解決這些問題,因為,就像軟體工程沒有銀彈一樣,無論你給什麼樣的解決方案都會有問題,沒有問題才是不科學的。我能做的是,觀察這個公司的業務形態、和相關的思維方式,以及現有的資源和相應的技術實力,幫助他們從技術到管理上緩解或改善現有的問題。

所以,我基本上來說,這近20年來,我只在專心研究一個事——如何做出一個性能高穩定性好的大規模的系統。在這個方向中,除了很多的基礎和底層技術我需要吃透,我還需要在軟體的開發工藝,軟體工具,以及軟體的線上運維,以及相關的管理上不斷學習和思考,因為,只有技術、工具、工程、運維、人員這幾個方面搞好了,才可能出現一個性能高且穩定性好的系統。


之前對於我來說,我一直在鼓吹先進的管理和軟體工程以及技術和工具。今天,對我來說,遇到最大的問題就是,在沒有這些所謂的先進的東西的時候,除了我自己上手外,我是否還能解決相應的問題?因為我自己已經完全Scale不開了。


有問題就有挑戰,我每天都在思考,如何在不完美甚至殘缺的環境下,解決這些公司的技術問題。每個人都要給自己一個目標。目前,我給自己的目標是——在殘缺的環境下,能讓用戶不改一行代碼,不動任何的架構,不改變用戶很糟糕的軟體開發的習慣,也不讓用戶作任何管理上的調整,能提升用戶的軟體系統的性能和穩定性。


因為我相信技術,我相信有更好的技術,可以為用戶完全透明的提升性能和穩定性,我大致找到了相應的解,現在,我正在實踐的路上,這也許是筆大買賣,所以我不知天高地厚地註冊了自己的公司……


本文編號2308,以後想閱讀這篇文章直接輸入2308即可。


輸入m可以獲取到文章目錄


本文內容的相關公眾號推薦


Java編程


程序員的那點事


更多推薦15個技術類公眾微信


涵蓋:程序人生、演算法與數據結構、黑客技術與網路安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序猿 的精彩文章:

程序猿技能表:Java、C/C+、Android、iOS、PHP、前端……
學會編程,而不是學會Java
試試Linux下的ip命令,ifconfig已經過時了
這本演算法書寫了七年
HTTPS的中那些加密演算法

TAG:程序猿 |

您可能感興趣

我國這個武器世界第一,美鑽研幾十年無法破解
小哥在家鑽研縫紉機一個月,女友不解直到看到這件衣服
為了讓爺爺不再走丟,一個少年鑽研出了特別暖心的發明
為了不讓人打擾,男子在橋洞下面住了三年,一門心思鑽研彩票
這是一隻刻苦鑽研技術辛苦越獄只為求抱抱的黃鼠……
老股民研究十年「止損技巧」鑽研精髓,四分鐘幫你走出虧到底的結果
中國這款武器公認世界第一 美鑽研幾十年也無法破解
西方發展早期的一些罕見照片,感覺那時西方人一直在創新鑽研
養魚是一門大學問,值得用一輩子去鑽研!
又要落後美國20年?美海軍正鑽研這技術將讓其成為未來全球主宰
頂級操盤手鑽研多年的「買入精髓戰法」,只分享一次看懂就是股市高手
多年鑽研祖國語言,我終於發現了「對不起」的反義詞
太爺爺傳下來的青稞酒,他花了四年鑽研,釀出了香格里拉最令人陶醉的味道
他花30年鑽研出的紙雕境界,大師級技術讓人真心佩服
一品「簡單」的日本料理,他悉心鑽研了83年,連總統都被征服!
老外學中文笑料百出,還鑽研出5大禁忌!這不就是學英語的我么233
資深老股民十年苦心鑽研,終於發現一個下跌中找到黑馬股的方法!
一橫一豎鑽研、一撇一捺琢磨,學音樂的劉仲明,書作多韻律感
老股民研究10年周K線技巧鑽研精髓,在忙也得花三分鐘看完!