怎么才能快速有效的學(xué)習(xí)sql
怎么才能快速有效的學(xué)習(xí)sql
sql是什么?sql應(yīng)該怎么學(xué)習(xí)?怎么才能快速有效的學(xué)習(xí)sql?相信大家都想了解這些問題,特別是想要學(xué)習(xí)sql的小伙伴,一起來看看,以下是學(xué)習(xí)啦小編分享給大家的學(xué)習(xí)sql的方法,希望可以幫到你!
學(xué)習(xí)sql的方法
掌握系統(tǒng)化的學(xué)習(xí)方法
如果學(xué)習(xí)到的知識不成體系,那么遇到問題時就會非常難解決。有些同學(xué)會出現(xiàn)這些情況,比如編碼時遇到問題百度搜索,如果百度上找不到答案,這個問題就解決不了。再比如,在開發(fā)中要用到某個技術(shù)點(diǎn),就學(xué)習(xí)下API,程序調(diào)通后就不再深入研究,淺嘗輒止,如果程序遇到其他問題也不知道如何解決。
以上情況我認(rèn)為叫**點(diǎn)狀學(xué)習(xí)**。遇到一個問題,解決一個問題,需要一項(xiàng)技術(shù),學(xué)習(xí)一項(xiàng)技術(shù)。那么如何由點(diǎn)到面,由面到體,形成系統(tǒng)化學(xué)習(xí)呢。
首先要確定學(xué)習(xí)的知識領(lǐng)域,需要達(dá)成的學(xué)習(xí)目標(biāo),針對目標(biāo)制定學(xué)習(xí)計劃,就像你要寫一本書一樣,先把目錄寫出來,然后根據(jù)目錄上的知識點(diǎn)逐步去學(xué)習(xí),最后把這些知識點(diǎn)關(guān)聯(lián)起來,形成一個系統(tǒng)化的知識體系。學(xué)習(xí)的時候,可以制定一個計劃,以周為單位,比如第一周學(xué)什么,第二周學(xué)什么。
比如我最近在學(xué)習(xí)人工智能,學(xué)習(xí)步驟是:
1: 高數(shù)基礎(chǔ)知識:線性代數(shù),微積分和統(tǒng)計學(xué)。最近在打德州撲克時,我也會用統(tǒng)計學(xué)里的知識計算下輸贏的概率。
2: 人工智能基礎(chǔ):買幾本書人工智能的基礎(chǔ)書籍,如《機(jī)器學(xué)習(xí)基礎(chǔ)教程》《Python機(jī)器學(xué)習(xí)》。
3:框架:TensorFlow等。
4:實(shí)戰(zhàn):在工作中找到一個應(yīng)用場景,把學(xué)到的知識運(yùn)用進(jìn)去。
知識如何內(nèi)化成能力
作家格拉德威爾在《異類》一書中指出,1萬小時的錘煉是任何人從平凡變成世界級大師的必要條件。1萬小時有多久?每天學(xué)習(xí)10小時,需要大約三年。但是很多人都工作了五年甚至更長,但是為什么成為世界級大師的卻非常少。讀者可以先自己思考下這個問題。接下來談?wù)勎业目捶ā?/p>
成長必須經(jīng)歷一個步驟,就是把知識內(nèi)化成能力。**知識是用腦記住的,能力是用手練習(xí)出來的**。在工作的幾年里,我們可能看過很多書,聽過很多技術(shù)講座和視頻,但是通過聽和看只是讓你能記住這些知識,這些知識還不能轉(zhuǎn)換成你的能力。
聽和看只是第一步,更重要的是實(shí)踐,通過刻意練習(xí)把聽到和看到的知識內(nèi)化成你的能力。
刻意練習(xí),就是有目的的練習(xí),先規(guī)劃好,再去練習(xí)。首先給自己定一個目標(biāo),目標(biāo)可以有效的引導(dǎo)你學(xué)習(xí),然后使用3F練習(xí)法:
1: 專注(Focus),專注在眼前的任務(wù)上,在學(xué)習(xí)過程中保持專注,可以嘗試使用番茄工作法。
2:反饋(Feedback),意識到自己的不足,學(xué)習(xí)完之后進(jìn)行反思,思考下自己哪些方面不足,為什么不足。
3: 修正(Fix),改進(jìn)自己的不足。
不停的練習(xí)和思考可以改變大腦結(jié)構(gòu),大腦像肌肉一樣,挑戰(zhàn)越大,影響越大,學(xué)習(xí)更高效,并且也會產(chǎn)生突破性。
廣度和深度的選擇
技術(shù)人員的學(xué)習(xí)路徑有兩個維度,深度和廣度。很多程序員都有這個疑問,是先深后廣,還是先廣后深呢?
通過這么多年的學(xué)習(xí)和思考,我的建議先深后廣,因?yàn)楫?dāng)技術(shù)學(xué)到一定深度后,就會有觸類旁通的能力,自己掌握的廣度也自然有了深度。但是在實(shí)際學(xué)習(xí)過程中,深度和廣度相互穿插著學(xué)習(xí),比如學(xué)習(xí)并發(fā)編程時,首先學(xué)習(xí)JDK源碼,然后學(xué)進(jìn)去之后,開始看JVM源碼,最后看CPU架構(gòu),在技術(shù)點(diǎn)逐漸深度研究的過程中,廣度也得到了完善。
所以無論哪種學(xué)習(xí)方式,學(xué)習(xí)態(tài)度才是最重要的,在廣度學(xué)習(xí)的時候有深入研究的態(tài)度就能達(dá)到一定的深度,在深度學(xué)習(xí)的時候,主動學(xué)習(xí)相關(guān)的技術(shù)點(diǎn),廣度也得到拓寬。
你需要學(xué)會的編碼習(xí)慣
程序員應(yīng)該學(xué)會通過技術(shù)的手段來提高效率。幾個常用的手段是使用工具,快捷鍵和編寫腳本。
1. 使用各種工具
技術(shù)人員電腦盡量用MAC,使用命令行效率一定比在1024*1024像素中找一個10*10像素的按鈕更快。IDE用IDEA,比Eclipse更智能。命令行工具用iTerm和IDEA里的Terminal。寫文章用MAC的客戶端工具M(jìn)acDown,左邊編寫,右邊展示,比Word等工具方便快速很多。有時候我還會用按鍵精靈里配置腳本需要解決工作問題,比如通過點(diǎn)擊我們的系統(tǒng),來執(zhí)行任務(wù)。這樣的工具很多,只要能提高工作效率的工具,大家都可以嘗試使用。
2. 使用快捷鍵
MAC,IDEA和Eclipse有很多快捷鍵都要學(xué)會使用,比如在MAC命令行中通過idea .快速打開工程,通過open . 快速的打開文件夾,把IDEA里通過快捷鍵把一段代碼抽成一個單獨(dú)的方法,快速生成getter setter方法。
學(xué)習(xí)sql的注意事項(xiàng)
空杯心態(tài)
首先要有空杯的學(xué)習(xí)心態(tài),而不是傲嬌自滿,故步自封,空杯子才可以裝下更多的東西。首先要學(xué)會取百家之長,帶著欣賞的眼光看團(tuán)隊的同事或?qū)W校的同學(xué),欣賞每位同事或同學(xué)的優(yōu)點(diǎn),然后吸取他們的優(yōu)點(diǎn),每個同事都有其擅長的能力,比如有的同事技術(shù)能力強(qiáng),那么可以觀察下他如何學(xué)習(xí)的(或者找他請教學(xué)習(xí)方法),有的同學(xué)擅長解決線上問題,那么觀察他是如何解決線上問題的,解決思路是什么?如果他解決不了時,他是如何尋求幫助。有的同學(xué)擅長使用IDE或MAC的快捷鍵,那么可以向他學(xué)習(xí)提高工作效率。有的同學(xué)能快速理解業(yè)務(wù)知識,觀察他是如何做到的,自己如何達(dá)到他的程度。溝通能力,解決問題能力以及規(guī)劃能力都可以向同事學(xué)習(xí)。
挑戰(zhàn)權(quán)威
從書上看到一個知識點(diǎn),或者從別人那里聽到一個知識點(diǎn),一定要去挑戰(zhàn)和質(zhì)疑這個知識點(diǎn)的正確性,否則學(xué)到的知識點(diǎn)可能是錯誤的。先用邏輯思維推測下,再實(shí)戰(zhàn)檢測下,一定要記住實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)。比如同事說這個SQL加這個索引是最快的,首先要思考同事的結(jié)論是如何得出的,是靠歷史經(jīng)驗(yàn)還是測試過,如果我們沒有經(jīng)驗(yàn),就加上這個索引跑下SQL,看看執(zhí)行計劃和執(zhí)行時間,再換下其他索引試試會不會更快。依次類推,并發(fā)一定比串行快嗎?無鎖一定比加鎖快嗎? 很多結(jié)論都是在特定的場景下才會產(chǎn)生的,一定要自己親手實(shí)踐驗(yàn)證下。
堅持學(xué)習(xí)
有的同學(xué)可能工作了五年,但是學(xué)習(xí)的時間可能一年都不到。學(xué)技術(shù)不能急于求成,只要學(xué)習(xí)方法正確,量變一定會引起質(zhì)變。我在大學(xué)剛學(xué)JAVA時,怎么都學(xué)不會,但是堅持學(xué)習(xí)了幾個月,每天看張老師的JAVA視頻教學(xué),買書按照書里的代碼一行一行的敲代碼,白天睡覺,晚上學(xué)習(xí)和寫代碼,寫到宿舍關(guān)燈時就去避風(fēng)塘呆一晚上,早上6點(diǎn)鐘回宿舍睡覺,學(xué)到一定時間后,突然恍然大悟,才入了門。
在工作中,我曾經(jīng)花了一個月的時間學(xué)習(xí)AOP的實(shí)現(xiàn)原理,學(xué)習(xí)了各種方式來實(shí)現(xiàn)AOP的原理,并寫了幾種實(shí)現(xiàn)方式的代碼,雖然花的時間很多,但是到現(xiàn)在仍記憶猶新,對于排查問題和學(xué)習(xí)其他知識都非常有幫助。
要做到堅持學(xué)習(xí),學(xué)習(xí)的環(huán)境非常重要。如果你想學(xué),但是又不在學(xué)習(xí)狀態(tài),可以考慮換個學(xué)習(xí)環(huán)境,我經(jīng)常會去星巴克看書和學(xué)習(xí)。我聽說有的同事會周末抽一天去大學(xué)教室上自習(xí)。
把事做精
對自己要求越高,進(jìn)步越快。要有強(qiáng)烈的把事情做完美的心態(tài),我剛開始工作的時候,總是快而不精,做事做的不夠細(xì)致,總希望快速拿出結(jié)果證明自己,但是反而證明不了什么,技術(shù)能力也得不到提升,缺少技術(shù)亮點(diǎn),在團(tuán)隊中也沒什么影響力,后面就開始鍛煉一次就把事情做對的心態(tài)和方法。我觀察過,很多人都擅長快速做事情,但是把事情做好做精致的人會比較少,但是結(jié)果卻是**在精益求精的路上才會快速提高自己的能力**。比如用100行代碼實(shí)現(xiàn)的功能,思考下是否可以用10行來實(shí)現(xiàn),以便于降低運(yùn)維成本,提高下次的編碼效率。引用GUAVA等類庫,提取公共方法,和使用JDK8新特性等。系統(tǒng)的方法壓測過后,單機(jī)只能承受1700QPS,可以思考和實(shí)踐能否優(yōu)化下程序提高QPS,減少服務(wù)器數(shù)量。
把事情做精,一定是要強(qiáng)迫自己多花心思多花時間在這件事情上。有位技術(shù)牛人給我分享了一個心得,我覺得說的非常好,老板給你布置了一個任務(wù),**你要花百分之150的精力做到100分,這樣在老板那里你就能拿到80分或者60分**。
學(xué)習(xí)SQL的理由
1. SQL是可移植的
計算機(jī)系的學(xué)生們在獲取他們的學(xué)位時被教授數(shù)以百計的技術(shù)和理論概念,其中的許多信息并不能直接應(yīng)用于每日的編程任務(wù),但SQL介紹給學(xué)生們能夠在不同平臺間轉(zhuǎn)移的基本概念,不同的平臺擁有共通的詞匯表和工具組,學(xué)生們能帶著它們?nèi)ト魏蔚胤健?/p>
盡管每個數(shù)據(jù)庫廠商實(shí)現(xiàn)他們自己的擴(kuò)展,但廠商的每個新版本都符合ANSI/ISO SQL標(biāo)準(zhǔn)。標(biāo)準(zhǔn)兼容盡管很微妙,但也使你能夠攜帶著你的知識從一個平臺到另一個平臺。如果你學(xué)習(xí)SQL,你將會預(yù)備好從一個數(shù)據(jù)庫轉(zhuǎn)移到另一個。
2. SQL從不改變
我的好朋友和商業(yè)伙伴開玩笑說他成為一個數(shù)據(jù)庫管理員是因?yàn)镾QL已經(jīng)35年沒有變化了,這大部分是真的。廠商實(shí)現(xiàn)他們自己的擴(kuò)展并最終使其加入到 SQL標(biāo)準(zhǔn),但SQL的核心沒有改變。一旦你理解了SQL的基礎(chǔ)和關(guān)系原理(并不那么難),你會發(fā)現(xiàn)你能夠繼續(xù)依賴這些知識,添加那些你本來依靠其他工具 或開發(fā)者來實(shí)現(xiàn)的特性和功能。
3. SQL易于性能增益
在一個應(yīng)用程序中僅有幾個地方能夠?qū)崿F(xiàn)性能增益 - 表示層、應(yīng)用層和存儲層。事實(shí)是,你的代碼已經(jīng)寫得很好并且很好地調(diào)整過,從那里獲取性能增益會好比從石頭中獲取血液一樣艱難。另一方面,數(shù)據(jù)庫是一個容 易做一些簡單改變(添加一個索引,稍稍修改一個查詢)并看到巨大性能改善的地方。在花費(fèi)了我的職業(yè)生涯的可觀部分,以一個應(yīng)用程序開發(fā)者的身份盯著數(shù)據(jù)庫 分析器之后,我能為之證明。從程序代碼中獲得性能改善是可能的,但現(xiàn)代的框架和工具通常都編寫良好,因此數(shù)據(jù)庫通常是一個更好的地方(也被認(rèn)為是更容易的 地方)為性能改善找到低懸的果實(shí)。
4. SQL使你成為更好的開發(fā)者
《程序員的修煉之道》一書激勵開發(fā)者每年都學(xué)習(xí)一種新 語言,并不是因?yàn)榄h(huán)境在持續(xù)地變化,而是因?yàn)閷W(xué)習(xí)新的語言向開發(fā)者展示了新的模式。思考問題時有不同的思路,并且它們能夠很好地應(yīng)用于不同的解決方案(通 過鉆研函數(shù)式編程我最近學(xué)了不少)。學(xué)習(xí)SQL能夠教會你以集合而非迭代的方式思考。長期來看,這會改變你與數(shù)據(jù)打交道時的思維方式,使你的數(shù)據(jù)庫代碼得 到改進(jìn)。
5. 增進(jìn)團(tuán)隊間的交流
你是否曾經(jīng)試圖和語言相同但說非常不同方言的某人交談?在工作之外,跨越語言的藩籬交流會 很艱難,但當(dāng)一個項(xiàng)目的成功依賴于此則完全令人抓狂。學(xué)習(xí)SQL會在你與數(shù)據(jù)庫管理員團(tuán)隊交流你的目標(biāo)時給予幫助,他們不需要解析你的意思,你可以確切地 告訴他們你的需求。最終誤解更少了,事情能夠更快地完成,你不再會是“那個讓人抓狂的開發(fā)者”。
6. 工作保障
我討厭這樣 說,但學(xué)習(xí)SQL可能意味著當(dāng)旁邊隔間的Ted在裁員季被解雇時你能保住你的工作。你擁有越多的技能,你能履行越多的工作職能,你就變得對現(xiàn)雇主越有價值 (還有未來的雇主)。如果你能同時與數(shù)據(jù)庫團(tuán)隊和開發(fā)團(tuán)隊一起工作,你就成為了一個有價值的資源,兩個團(tuán)隊都要依靠你獲得成功。
7. SQL真的不那么難
和普遍的觀念相反,SQL不是難以學(xué)習(xí)的語言。SQL是一種不同的思考方式,這是肯定的,但它并不難。那只有記錄在ANSI/ISO標(biāo)準(zhǔn)中的為數(shù)不多的 指令、操作符和數(shù)據(jù)類型。雖然廠商會添加他們自己的特性,但仍有一部分精簡的核心知識你能學(xué)習(xí)并且應(yīng)用到你去到的每個地方。
8. 理解什么時候不適合數(shù)據(jù)庫
數(shù)據(jù)庫對于解決很多問題是現(xiàn)象級的工具,但對于解決更多的問題則是糟糕的問題。換言之:你也許不應(yīng)該用一把錘子去挖掘壕溝。通過學(xué)習(xí)和理解SQL,你將能夠做出更好的決定并將表現(xiàn)糟糕的代碼移出數(shù)據(jù)庫。事實(shí)上,你將能夠在問題形成之前就將其發(fā)現(xiàn)。
一旦你理解了SQL,你會更好地領(lǐng)會一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng)的局限性。你會知道應(yīng)用程序的哪個部分能夠安全地存在于一個數(shù)據(jù)庫,而哪部分需要被移動到 不同的分層。一些數(shù)據(jù)驗(yàn)證應(yīng)該和數(shù)據(jù)存放在一起,而另一些則不應(yīng)該。理解SQL如何工作會幫助你決定哪些規(guī)則應(yīng)該保留在數(shù)據(jù)庫里。
9. 讓故障排除更簡單
運(yùn)行中的應(yīng)用程序難以故障排除眾所周知。越多的復(fù)雜度和分層被涉及到,就越難以為一個應(yīng)用程序排除故障。對于SQL的良好理解讓快速地將存在于數(shù)據(jù)庫中的問題隔離變得可能。換言之:理解SQL使將問題定位在你的應(yīng)用程序的多個不同分層中的某一層變得簡單。
猜你喜歡:
2.Sql系統(tǒng)如何進(jìn)行數(shù)據(jù)庫