看了下樓主的問題,手又癢癢了,那就寫點東西一塊兒分享下吧,話題我把它叫作《「甕中捉鱉」與「森林冒險」》。程序員
編程這個職業,也就是程序員,相比於其餘職業,例如工人,廚師等等這些一眼就看得出工做範疇的崗位,有一個巨大的區別,就是龐大的複雜性。有人說程序員的工做也是一眼就能看出工做範疇的啊,就是編程啊。這就是沒有看穿程序員工做的本質。編程
任何複雜的概念或者系統,均可以用一個簡單的詞彙歸納,例如地球,宇宙,航天系統。但實際上這些詞彙所承載的現實世界中的事物,都是複雜的。編程也是這樣的一個例子,簡單的編程兩個字,承載的是解決這個世界中複雜問題的方法,好比你寫了一個緩存類,不僅是用手敲擊了鍵盤寫了一段代碼那麼簡單,背後的意義是操縱了存儲系統中的機制去優化數據讀寫,再深一層的意義是解決了服務端高併發,高訪問的問題,是的,編程背後的意義,遠超過咱們表面看到的。不僅是編程,生活當中許多領域都是這樣的,簡單的表象背後,隱藏着極度的複雜性。總結爲一句話,編程是複雜的工程,生活當中充滿複雜性。緩存
那麼編程那麼複雜,變化無窮,咱們不知道怎麼應對,來了新的任務和功能,咱們內心害怕,不知道如何解決,該怎麼辦呢?網絡
人,對未知的東西,都會產生恐懼。那麼要想解決這個問題,其實也簡單,就是把陌生的東西,變的熟悉。併發
樓主要說了,你這不是廢話麼,要是熟悉了,還用在這提問麼。樓主別急,咱們在慢慢的消化一下。高併發
剛纔說了編程的複雜,大千世界中,有那麼多的領域,那麼多的問題須要用信息化的手段去解決,怎麼可能去一個一個的熟悉他們呢,那麼重點來了,是有方法能夠花費相對較少的時間去熟悉更多事物的。優化
我有個故事想和樓主分享下,說有個老師要考本身的學生,就在黑板上寫了一萬個數字,要求學生們在最快的時間內記得更多,更準確。最後的結果是,全班全部的學生,把全部一萬個數字都背了下來,並且沒有一個學生的答案是錯誤的。搜索引擎
很詫異吧,有人說你這是瞎扯,能記那麼多數字的確定都是神童,哪裏有一個班都是神童的班級,那還不全國出名,都得上微博了,這樣的消息咱們能不知道嗎。spa
對於這個我還真沒騙你們,是有這樣的班級的,並且全國各地都有這樣的班級和學生 ..........操作系統
很吃驚吧,那麼如今我來揭曉答案,關鍵就在於那一萬個數字,是從1,到一萬順序排列下來的,也就是說黑板上那一萬個數字是 : 1,2,3 ...... ,9999,10000。
簡單的故事,蘊含不簡單的道理。爲何咱們能夠記住10000個數字,咱們真的是記下來的嗎?
No,咱們是算出來的。咱們只須要記住起始數字和計算規則,就能夠得出第二個數字,而第二個數字運用規則就能夠得出第三個數字,以此類推。整個過程咱們實際上只記住了兩條信息,初始量,還有計算規則。是的,這就是短期內,熟悉大量陌生事物的方法。要記一些東西,更重要的是理解另外一些東西。
一樣的道理,咱們知道1+1=2, 1+2=3,那麼11432 + 12454 等於多少呢,成年人心算就能算出來,爲何?由於咱們從小就背了小九九,理解了規則,就能夠推導出其餘的結果,而這些其餘的結果就是咱們曾經未知的東西。
數學計算只是一個例子,應用到其餘地方,道理也是同樣的。理解核心知識,推導其餘未知知識,而後將推導出的知識記憶,這些記憶就是工做多年後沉澱的經驗和心得。
能夠看出,什麼知識是須要理解的,而什麼知識能夠暫時忽略,實際應用的時候再去記憶,這個理解與記憶的把控,是至關重要的。
一開始咱們定的主題是《「甕中捉鱉」與「森林冒險」》,如今該是扣題的時候了。
解決問題有兩種模式。
1.森林冒險
先說森林冒險,提到這個詞,咱們腦海裏浮現的,大概會是一個荒島落難的人類,爲了生存,與周圍惡略環境搏鬥的場景。而森林中有多少野獸,有多少陷阱,又有多少同伴和咱們同樣,都是未知的,咱們面對的是巨大的未知環境,這時候的人們,一定是虛弱與恐懼的。
在工做當中,咱們不少時候面對的就是這樣的場景,需求模糊,人員分配混亂,利益相關者的百般刁難,等等這些,都是森林冒險式的境況,咱們無能爲力,哀嚎連天。
2.甕中捉鱉
每次提到這個詞,我總想起《亮劍》裏,李雲龍帶領部隊爬在山頭,看着日軍華北觀摩團的大部隊進入包圍圈的場景。最後,觀摩團被全殲了,一個不剩。相對於森林中的未知,甕中捉鱉這種對敵人洞察到毫釐的掌控程度,是咱們程序員最理想的狀態。面對模糊需求,咱們能夠根據本身的經驗協助需求人制定詳細需求,人員配置,一個項目該用多少人,用什麼樣的人,咱們也瞭如指掌,那作項目還怕啥,對於這種人爲可控的風險,解決後,那些未知不可控的bug,也就讓人輕鬆多了。
以上就是兩種程序員工做狀態的描述,咱們都應提倡掌控全局,避免短視,盲目的森林視角。
那麼怎樣才能作到掌控全局呢。
答案是,如飢似渴的讀書。
把本身的知識面撐起來,掌握的越多,複雜性就相對下降了,不要以一個點爲中心去周圍搜索問題而後解決,要一開始就把問題框在咱們的範圍當中,而後逐步縮小包圍圈,最後解決問題。這樣,掌控全局,就容易的多了。
對於編程來講,瞭解的越多,解決定位問題的能力就越強,編譯原理,計算機體系結構,軟件工程,網絡知識等等等等,若是想練就一眼就定位問題的能力,這些知識領域是必須涉及的。
再說個下降複雜度的例子,好比公司如今要讓樓主去補位IOS開發(坑爹的公司),那麼做爲Android出身的咱們來講如何解決問題呢,那就是把Android和IOS當作是一種,是的,它們都是操做系統——移動操做系統,若是樓主買過操做系統的書籍的話,你會發現Android和IOS具體實現是不一樣的,可是底層原理,也就是凌駕於具體平臺的那些操做系統知識,是同樣的,去理解操做系統原理後再去看Android和IOS,就和剛纔的算術問題同樣,只是一棵樹上的兩個分支,之後再接觸其餘的手機系統,也從操做系統這個樹幹入手,那麼就能夠達到「學一知萬」的程度了。
這只是其中一個例子,總而言之就是系統化本身的核心知識主幹,而後去推導記憶具體的技術細節。
當年我就是在工做了一段時間後,出現了認知瓶頸,而後我就去查了一下清華大學計算機課程都有哪些,而後本身去了解了下那些課程所在領域內的東西。
另外,編程這東西,其實不僅計算機領域的要懂,真要成神,成爲萬中無一的技術大神,其餘領域的知識,數學,物理學,管理學,情報與新聞學等等這些若是有涉獵,那麼將得到「近神」的力量,那時候就像God同樣俯瞰着編程領域的疑難問題,還會害怕嗎。樓主若是有興趣,能夠去搜索引擎搜索「學科代碼」,會出現國內目前全部的學科分類狀況。別嫌多,活到老學到老吧,誰讓我們選擇了編程行業呢,學吧。
最後要提的一點是,知識,理論當然重要,可是沒有實踐也是不行的,學了東西以後就要去實踐檢驗,實踐能驗證理論,加深理論的理解與記憶,可讓咱們的理論更加堅深,有了強大的理論支撐,咱們就能夠寫出好的代碼和程序,這是個相輔相成的關係。技術的路上道阻且長,但願樓主可以堅持初心,一路前行,加油,我挺你!
http://www.oschina.net/question/2553420_2192673?sort=default&p=2#answers
其實文憑不過是一張火車通行證,清華是軟臥,本科是硬臥,專科是硬座,民辦是站票,成教是在廁所擠着。火車到站,都下車找工做,才明白老闆並不太關心你是怎麼來的,只關心你會幹什麼。
https://my.oschina.net/u/818901