程序員該如何學(xué)習(xí)技術(shù)
前言
??學(xué)習(xí)是第一生產(chǎn)力,我從來都是這么認(rèn)為的,人只有只有不斷地學(xué)習(xí)才能意識到自己的缺點(diǎn)和不足,身為程序員,我更認(rèn)為人們應(yīng)當(dāng)抱著終身學(xué)習(xí)的想法實踐下去,這是我所一直踐行且相信的。
??高處不勝寒,只有站在更高的地方,才能欣賞更多的風(fēng)景,當(dāng)年老時再回味這一切,你會發(fā)現(xiàn)這都是值得的。
?
?
「查閱文檔」
??這是我認(rèn)為是最快也最好的學(xué)習(xí)方法。對于自己工作中常用到的技術(shù),抽時間把官方文檔通讀一遍(其實篇幅都不大),絕對收獲滿滿,因為官方文檔內(nèi)藏很多細(xì)節(jié),真的值得一讀。沒事的時候多翻翻自己使用的框架/系統(tǒng)/平臺的API,看看有哪些自己不知道或者沒用過的功能,想想這個功能可以用來做什么,能不能解決現(xiàn)存的問題,或者優(yōu)化當(dāng)下的解決方案。
讀過 Spring Boot/Spring 的官方源碼之后我才知道:
-
如果你想使用基于XML的配置,SpringBoot 也完全支持,只要先使用
@Configuration
加載核心配置,然后通過@ImportResource
注解就可以使用 XML 配置文件啦。?
-
總所周知,Spring Boot的自動配置是出了名的,如果你想了解當(dāng)前應(yīng)用的都配置了哪些自動配置,那么可以打開
--debug
開關(guān),這樣做可以啟用核心日志器進(jìn)行日志調(diào)試并且將具體情況輸出到控制臺。?
-
什么依賴注入方式最好?看過Spring的官方文檔就會知道,Spring 官方通常提倡使用構(gòu)造器注入,因為它能夠?qū)崿F(xiàn)應(yīng)用程序的組件作為不可變對象并且會確保所需依賴不為
null
。此外,構(gòu)造器注入組件總是在返回客戶端(調(diào)用)代碼中處于完全初始化狀態(tài)。但作為旁注,大量的構(gòu)造器參數(shù)是一種糟糕的代碼,這意味著類或許有太多的職責(zé),應(yīng)該重構(gòu)代碼以更好解決適當(dāng)?shù)年P(guān)注點(diǎn)分離問題。
?
??如果你是前端工程師,通讀 HTTP 協(xié)議和 ECMAScript 標(biāo)準(zhǔn),就能秒殺 95% 的同行,不開玩笑。不過如果實在沒時間,我們也可以把官方文檔當(dāng)成工具書,有問題的時候翻一翻,我相信大部分的問題都能通過官方文檔找到很好的解決方案
?
「閱讀源碼」
??都說細(xì)節(jié)決定成敗,所以此方法是深入學(xué)習(xí)開源技術(shù)的唯一途徑。程序員只有理解了某個功能在底層是如何實現(xiàn)的,我們才能真正把握這段代碼或這個方法又或者是工具類更適合用來做什么,不能用來做什么。
??舉幾個例子,Java 語言中最常用的 String 類,如果你沒看過 String 的源碼那你不會知道 String類 toString
方法底層實現(xiàn)就是返回了字符串本身;
/**
* 此對象(這已經(jīng)是一個字符串了) 返回自身
*
* @return 字符串本身
*/
public String toString() {
return this;
}
??Collections 工具類的 sort 方法底層其實調(diào)用了 Arrays.sort() 方法進(jìn)行排序,我第一次看的時候覺得很不可思議,JDK官方在代碼復(fù)用這點(diǎn)上確實很厲害!
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
// 這里調(diào)用了Arrays.sort()方法對數(shù)組進(jìn)行排序
Arrays.sort(a, (Comparator) c);
// 然后使用迭代器重新設(shè)置元素
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}
??此外,HashSet 的底層實現(xiàn)你沒看過的話,絕對出乎你的意料,其空參構(gòu)造僅僅就是 new
了一個 HashMap 而已,也就是說 HashSet
近乎就等于 HashMap
。高情商: HashSet
青出于藍(lán)而勝于藍(lán);低情商: HashSet
就是套皮了的 HashMap
/**
* 構(gòu)造一個新的,空的set集合,其底層的HashMap實例默認(rèn)初始化容量(16)、加載因子(0.75)
*/
public HashSet() {
map = new HashMap<>();
}
??有興趣的話,大家還可以看看 LinkedHashSet
、TreeSet
的底層實現(xiàn)和上面的是近乎一般無二的。
??正如就算不明白怎么造汽車,我們也能把車開好。而如果多少知道一點(diǎn)底層的東西,開起來就會更得心應(yīng)手。當(dāng)車出現(xiàn)問題時,也不至于完全束手無策,只能蹲在路邊等待救援。你Spring框架用了多少年了,卻連一行源碼都沒讀過?如果它是你女朋友,估計早該分手了。
?
「勇于嘗試」
??每個人都有機(jī)會,但不是每個人都有勇氣,只要你勇敢地踏出這一步我認(rèn)為你就成功了一半。這世界上有很多牛逼的程序員不一定是因為學(xué)的很多然后學(xué)歷很高就非常厲害,反而是因為踩到的坑多了,遇到的bug多了,經(jīng)歷了這么多的事物,慢慢地可以應(yīng)對所有的情況,最終成長為了一個牛逼的大佬 (PS:可能頭發(fā)也會掉光)
??魯迅曾說過一句話:這世上本沒有路,走的人多了,也便有了路。文章來源:http://www.zghlxwxcb.cn/news/detail-428962.html
??我認(rèn)為勇于嘗試是學(xué)習(xí)任何技術(shù)的必經(jīng)之路。在有保護(hù)的環(huán)境下進(jìn)行大量的試錯,是最高效的學(xué)習(xí)方法?,F(xiàn)在虛擬機(jī)技術(shù)已經(jīng)那么成熟,云服務(wù)器也很便宜,為什么不能分分鐘搭建一個自己的服務(wù)器,然后在上面花式作死呢?我相信很多新手都聽說過無數(shù)次 rm -rf /
的事故,但是你嘗試過這個命令么?你知道這個命令輸出之后是什么樣子嗎?你不知道,公司為我們提供的最有價值的東西,其實就是實戰(zhàn)的機(jī)會。 我們所學(xué)習(xí)的技術(shù),最終還是需要通過工作來變現(xiàn),成為我們的經(jīng)驗。通過公司我們可以接觸到真實的數(shù)據(jù),了解真實的用戶,觀察真實的系統(tǒng)是怎樣運(yùn)轉(zhuǎn)的,積累真正的經(jīng)驗…… ,給自己投資比什么都劃算, 但是所謂的機(jī)會,只屬于提前準(zhǔn)備好的人,而大部分人只會隨波逐流, 不要等到工作都安排到你身上了再去嘗試。公司不是你的試驗田,你也不該拿用戶當(dāng)小白鼠。若是公司沒有給你機(jī)會,那只能說明你還沒有準(zhǔn)備好。文章來源地址http://www.zghlxwxcb.cn/news/detail-428962.html
到了這里,關(guān)于程序員該如何學(xué)習(xí)技術(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!