《碼農(nóng)翻身》讀后感

碼農(nóng)翻身.png

前言

不錯的好書,作者本身是從事JAVA為主茁瘦,但以從業(yè)15年的角度看待計(jì)算機(jī)語言的發(fā)展史,有個概括通俗易懂的角度來講述編程方面的知識。

程序員的精進(jìn)

  1. 對技術(shù)的好奇心/興趣是一切的基礎(chǔ)扒怖。
    如果你看到新技術(shù)、新產(chǎn)品沒有像小孩看到新玩具那樣兩眼放光业稼,沒有立刻在自己的電腦上試試的沖動盗痒,你就需要仔細(xì)考慮一下是否真的對軟件開發(fā)有興趣。如果根本沒興趣低散,那不要浪費(fèi)時間俯邓,還是趁早轉(zhuǎn)行,有更多適合你的職業(yè)在等著你熔号。沒有好奇心稽鞭,就不愿意追本溯源,追求技術(shù)的本質(zhì)引镊。
    沒有好奇心朦蕴,就難以靜下心來,耐得住寂寞弟头,遠(yuǎn)離浮躁吩抓,更難以跨過這個行業(yè)所帶來的種種挑戰(zhàn),走到架構(gòu)師這個位置亮瓷。
    沒有好奇心琴拧,就不愿意學(xué)習(xí)新技術(shù)。一名架構(gòu)師嘱支,如果沒有對技術(shù)的敏感度和前瞻性一直抱著一套技術(shù)架構(gòu)不變蚓胸,估計(jì)很快就會被淘汰挣饥。

  2. 很多人會語法,也懂框架沛膳,但是在基本功上卻不過關(guān)扔枫,因而只能在初級程序員上踏步。
    這個基本功的訓(xùn)練就是數(shù)據(jù)結(jié)構(gòu)和算法锹安,我的經(jīng)驗(yàn)是多做習(xí)題短荐,讓這種思維在腦子里固化,以后的編程就可以信手拈來了叹哭。

  3. 計(jì)算機(jī)的組成原理忍宋、操作系統(tǒng)、編譯原理风罩、計(jì)算機(jī)網(wǎng)絡(luò)糠排、數(shù)據(jù)庫、匯編語言超升,把這些知識融會貫通入宦,打通任督二脈,在我們的腦海里建立一幅計(jì)算機(jī)運(yùn)算的圖景室琢。
    計(jì)算機(jī)軟硬件的基本思想在這幾十年里其實(shí)變化不大乾闰,如緩存、增加抽象層等盈滴。有了這些基本思想的武裝涯肩,去學(xué)習(xí)新的東西不但學(xué)得快,而且理解得會更透徹巢钓。要透徹地理解一門技術(shù)的本質(zhì)宽菜。

  4. 公司里基本上不會有空閑的時間,一個個新需求壓得大家透不過氣來竿报。偶爾有空閑時間铅乡,大家也都犯懶了,總是想著休息烈菌。
    慣性的力量是驚人的阵幸,大家都愿意待在舒適區(qū)里,不愿意變化芽世,雖然也看到了新工具的好處挚赊,但大家都懶得換新的。

抽象能力

  1. 把亂無頭緒的需求抽象成一些“概念”济瓢,在概念的層次進(jìn)行思考荠割,用于系統(tǒng)的設(shè)計(jì)
  2. 把紛雜的事物抽象到數(shù)學(xué)層面是最高的抽象。但是抽象成數(shù)學(xué)模型和算法通常是可遇而不可求的,在這種情況下蔑鹦,我們需要退而求其次夺克,試圖抽象成若干個正交的概念,以此來降低復(fù)雜度嚎朽。
  3. 抽象能力的訓(xùn)練沒有捷徑铺纽,就是經(jīng)驗(yàn)的積累,勤于思考和學(xué)習(xí)哟忍。
    例如: 學(xué)習(xí) Java Web開發(fā)的可以思考一下為什么Spring有Controller狡门、ViewResolver這樣的概念?學(xué)習(xí)Android的可以思考一下Android是怎么對未知的锅很、紛繁復(fù)雜的應(yīng)用程序進(jìn)行抽象的其馏?為什么有 Activity、Service爆安、 BroadcastReceiver尝偎、ContentProvider 這四大組件?

學(xué)習(xí)相關(guān)

  1. 自認(rèn)為掌握了一門技術(shù)鹏控,其實(shí)并沒有真正掌握,大腦只是對這個技術(shù)點(diǎn)建立了一個整體的概念肤寝,在一些細(xì)節(jié)處做了想當(dāng)然的假設(shè)当辐,等到你用語言再來表達(dá)的時候就會發(fā)現(xiàn),原來這個假設(shè)并不完全成立鲤看,是有問題的缘揪。

  2. 如果你能把一門技術(shù)通俗易懂地給別人講明白,那就說明你已經(jīng)掌握了义桂。這種“轉(zhuǎn)教別人(Teach others)”的辦法屬于主動學(xué)習(xí)找筝,效率是最高的。
    既然沒法給別人講慷吊,那就退而求其次吧袖裕,把自己的理解寫出來。

  3. 技術(shù)文章溉瓶,不是泛泛地記流水賬急鳄,或者把幾個孤立的點(diǎn)羅列在那里,而是要把思路厘清楚堰酿,尤其要寫出為什么要有這門技術(shù)疾宏、這門技術(shù)解決了什么問題,然后才是這門技術(shù)是怎么使用的触创。當(dāng)你逼著自己去回答這些問題的時候坎藐,很快就會發(fā)現(xiàn),自己的理解還不夠哼绑,還需要查找更多的資料岩馍。

  4. 在網(wǎng)上查找資料過程中碉咆,整理資料和思考的過程是很珍貴的,只有這樣才能把信息變成你自身的知識兼雄。
    如果實(shí)在搞不定吟逝,就帶著問題去論壇提問,去QQ群發(fā)言赦肋,找大牛請教块攒,總是可以解決的。
    網(wǎng)上的大部分文章都是復(fù)制佃乘、粘貼的囱井,大部分都在講述怎么使用,對于“為什么”從來都是只字不提趣避,或者猶抱琵琶半遮面庞呕,羞羞答答地不說出來。

  5. 不把自己的理解寫出來程帕,很容易放棄深度思考住练。你會覺得,我已經(jīng)知道是怎么回事兒了愁拭,然而其實(shí)一些關(guān)鍵的細(xì)節(jié)被大腦給忽略了讲逛。寫作會逼著你去思考,梳理知識體系岭埠,防止自己被碎片所填滿盏混。
    其實(shí)很多人都知道寫作是一件很好的事情,就是犯懶惜论,執(zhí)行不下去许赃。還是行動起來吧!逼自己一把馆类,對自己狠一點(diǎn)混聊!有自制力的人、能夠堅(jiān)持的人才更有可能成功乾巧!
    我們已經(jīng)進(jìn)入了一個碎片化的時代技羔,我們的大腦已經(jīng)養(yǎng)成了碎片化的習(xí)慣,一天不看碎片化的信息就覺得不舒服卧抗,這樣下去會慢慢地喪失深度思考的能力藤滥。

  6. 優(yōu)秀和平庸的差別可能就是那一點(diǎn)點(diǎn)堅(jiān)持吧!堅(jiān)持不懈地做一件事社裆,每天前進(jìn)一點(diǎn)點(diǎn)拙绊,最后量變會發(fā)生質(zhì)變。
    每個季度定一個小目標(biāo),努力達(dá)成标沪,獲得成就感榄攀,就能刺激自己更進(jìn)一步,改善半途而廢的毛病金句。

代碼相關(guān)

  1. 發(fā)現(xiàn)工作中的“痛點(diǎn)”,并且真正動手解決它給公司帶來價值檩赢。這是提高自己,讓自己和別人區(qū)分開來的重要方法。
    大部分人只會抱怨項(xiàng)目很無趣违寞、沒有挑戰(zhàn)遇到問題也只會安于現(xiàn)狀贞瞒。

  2. 面向?qū)ο蟮拇a由于是針對接口編程的,所以每當(dāng)你去找接口實(shí)現(xiàn)的時候是比較費(fèi)勁的趁曼,比起直接的面向過程代碼讀起來是一個不小的障礙军浆。

  3. 重構(gòu)必須有測試,先有測試用例再重構(gòu)挡闰,重構(gòu)的過程就是一個重新學(xué)習(xí)的好過程

  4. 框架是一個半成品乒融,是無法獨(dú)立運(yùn)行的,必須由開發(fā)人員按照它定義的規(guī)則摄悯,把項(xiàng)目的代碼放置到指定的地方赞季,由框架整合起來,這才是一個完整的應(yīng)用程序奢驯。是前輩們把各種經(jīng)驗(yàn)固化下來的最佳實(shí)踐
    現(xiàn)在很多 Java Web Spring MVC申钩、 Hibernate、 MyBatis ixf這樣的流行框架構(gòu)造起來的叨橱,框架不得不學(xué)。但是如果只會使用框架断盛,只會填充代碼罗洗,那只能是一名HTML填空人員。
    你如果對Java后端編程感興趣钢猛,那還有很多東西可學(xué)伙菜。用框架實(shí)現(xiàn)了業(yè)務(wù)只是很小一方面,還有系統(tǒng)架構(gòu)設(shè)計(jì)命迈、緩存贩绕、性能、高可用性壶愤、分布式淑倾、安全、備份等很多內(nèi)容征椒。你學(xué)得越多娇哆,就會發(fā)現(xiàn)無知的領(lǐng)域更多,所謂學(xué)無止境,就是如此碍讨。

  5. 關(guān)于遺留代碼的見解
    你別看我們的代碼爛治力,它可是在生產(chǎn)環(huán)境下運(yùn)行的代碼,每天有無數(shù)用戶在用勃黍,經(jīng)歷了這么多年的嚴(yán)酷考驗(yàn)宵统,已經(jīng)把系統(tǒng)中方方面面的Bug,尤其是一些深層次的Bug暴露得差不多了覆获,也改得差不多了马澈。之前看到了很多FiⅸBug這樣的注釋,每個注釋和對應(yīng)的修改都是無數(shù)前人心血和時間的結(jié)晶锻梳,這里面有多少加班和熬夜你知不知道箭券?你如果從頭再來,能保證考慮到這么多種情況嗎疑枯?能保證把邊邊角角辩块、犄角旮旯的東西都包括進(jìn)去嗎?
    每個程序員都夢想從頭寫一個東西荆永,不愿意讀別人的代碼废亭,甚至同行相輕,瞧不起別人的代碼具钥。但實(shí)際情況是豆村,自己重寫一遍,不見得能比現(xiàn)在已經(jīng)運(yùn)行的代碼好到哪里去骂删,甚至更差掌动!除非你了解了所有的細(xì)節(jié)用大量的時間仔細(xì)規(guī)劃、小心編程宁玫,但是現(xiàn)實(shí)中哪有時間讓你這么玩按只帧?

測試相關(guān)

  1. 那些不存在的或者難以new出來的對象(比如訪問數(shù)據(jù)庫的對象欧瘪、訪問網(wǎng)絡(luò)的對象)可以使用Mock工具( EasyMock Jmockit等)來“造假”眷射。

  2. 優(yōu)秀的單元測試:
    (1)單元測試是“白盒測試”,應(yīng)該覆蓋各個分支流程佛掖、異常條件妖碉。
    (2)單元測試面向的是一個單元(Unit),是由Java中的一個類或者幾個類組成的單元芥被。
    (3)單元測試的運(yùn)行速度一定要快欧宜!
    (4)單元測試一定是可重復(fù)執(zhí)行的!
    (5)單元測試之間不能有相互依賴拴魄,應(yīng)該是獨(dú)立的鱼鸠!
    (6)單元測試代碼和業(yè)務(wù)代碼同等重要猛拴,要一并維護(hù)!

  3. 如果測試代碼需要很復(fù)雜的setup才能開始測試蚀狰,說明業(yè)務(wù)代碼接口的設(shè)計(jì)很有問題

  4. 單元測試的關(guān)鍵愉昆,在于如何處理遺留代碼。

其它

  1. 領(lǐng)域特定語言( Domain Specific Language麻蹋,DSL)跛溉,專門為某個領(lǐng)域而定制的語言

  2. Maven,通過約定大于配置的概念扮授,形成自動化Build環(huán)境

  3. JAVA動態(tài)生成代理類的方法有兩種:
    第一種是使用Java動態(tài)代理技術(shù)芳室,這種技術(shù)要求業(yè)務(wù)類必須有接口(Interface)才能工作;
    第二種是使用 CGLib刹勃,只要業(yè)務(wù)類沒有被標(biāo)記為 final就可以堪侯,因?yàn)樗鼤梢粋€業(yè)務(wù)類的子類來作為代理類。

  4. 三次握手:
    第一次握手:京城發(fā)信荔仁,縣衙收到了伍宦,此時縣衙就會明白,京城的發(fā)信能力和自己的收信能力是沒問題的乏梁。
    第二次握手:縣衙發(fā)信次洼,京城收到了,此時京城就會明白遇骑,京城的發(fā)信和收信能力都是沒問題的卖毁,縣衙的發(fā)信和收信能力也都是沒問題的。但是縣衙還不知道自己的發(fā)信能力如何落萎,所以需要第三次握手亥啦。
    第三次握手:京城發(fā)信,縣衙收到了练链,其實(shí)第二次握手的時候京城已經(jīng)知道雙方的收信翔脱、發(fā)信能力都是沒問題的,這次回應(yīng)的目的只是消除縣衙對自己的發(fā)信能力和京城的收信能力的擔(dān)憂而已兑宇。

  5. 程序編譯的過程:


    編譯的過程.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碍侦,一起剝皮案震驚了整個濱河市粱坤,隨后出現(xiàn)的幾起案子隶糕,更是在濱河造成了極大的恐慌,老刑警劉巖站玄,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枚驻,死亡現(xiàn)場離奇詭異,居然都是意外死亡株旷,警方通過查閱死者的電腦和手機(jī)再登,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門尔邓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锉矢,你說我怎么就攤上這事梯嗽。” “怎么了沽损?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵灯节,是天一觀的道長。 經(jīng)常有香客問我绵估,道長炎疆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任国裳,我火速辦了婚禮形入,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缝左。我一直安慰自己亿遂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布盒使。 她就那樣靜靜地躺著崩掘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪少办。 梳的紋絲不亂的頭發(fā)上苞慢,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機(jī)與錄音英妓,去河邊找鬼挽放。 笑死,一個胖子當(dāng)著我的面吹牛蔓纠,可吹牛的內(nèi)容都是我干的辑畦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼腿倚,長吁一口氣:“原來是場噩夢啊……” “哼纯出!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起敷燎,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤暂筝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后硬贯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體焕襟,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年饭豹,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸵赖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片务漩。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖它褪,靈堂內(nèi)的尸體忽然破棺而出饵骨,到底是詐尸還是另有隱情,我是刑警寧澤茫打,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布宏悦,位于F島的核電站,受9級特大地震影響包吝,放射性物質(zhì)發(fā)生泄漏饼煞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一诗越、第九天 我趴在偏房一處隱蔽的房頂上張望砖瞧。 院中可真熱鬧,春花似錦嚷狞、人聲如沸块促。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竭翠。三九已至,卻和暖如春薇搁,著一層夾襖步出監(jiān)牢的瞬間斋扰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工啃洋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留传货,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓宏娄,卻偏偏與公主長得像问裕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子孵坚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容