怎么才能快速有效的学习sql
怎么才能快速有效的学习sql
sql是什么?sql应该怎么学习?怎么才能快速有效的学习sql?相信大家都想了解这些问题,特别是想要学习sql的小伙伴,一起来看看,以下是学习啦小编分享给大家的学习sql的方法,希望可以帮到你!
学习sql的方法
掌握系统化的学习方法
如果学习到的知识不成体系,那么遇到问题时就会非常难解决。有些同学会出现这些情况,比如编码时遇到问题百度搜索,如果百度上找不到答案,这个问题就解决不了。再比如,在开发中要用到某个技术点,就学习下API,程序调通后就不再深入研究,浅尝辄止,如果程序遇到其他问题也不知道如何解决。
以上情况我认为叫**点状学习**。遇到一个问题,解决一个问题,需要一项技术,学习一项技术。那么如何由点到面,由面到体,形成系统化学习呢。
首先要确定学习的知识领域,需要达成的学习目标,针对目标制定学习计划,就像你要写一本书一样,先把目录写出来,然后根据目录上的知识点逐步去学习,最后把这些知识点关联起来,形成一个系统化的知识体系。学习的时候,可以制定一个计划,以周为单位,比如第一周学什么,第二周学什么。
比如我最近在学习人工智能,学习步骤是:
1: 高数基础知识:线性代数,微积分和统计学。最近在打德州扑克时,我也会用统计学里的知识计算下输赢的概率。
2: 人工智能基础:买几本书人工智能的基础书籍,如《机器学习基础教程》《Python机器学习》。
3:框架:TensorFlow等。
4:实战:在工作中找到一个应用场景,把学到的知识运用进去。
知识如何内化成能力
作家格拉德威尔在《异类》一书中指出,1万小时的锤炼是任何人从平凡变成世界级大师的必要条件。1万小时有多久?每天学习10小时,需要大约三年。但是很多人都工作了五年甚至更长,但是为什么成为世界级大师的却非常少。读者可以先自己思考下这个问题。接下来谈谈我的看法。
成长必须经历一个步骤,就是把知识内化成能力。**知识是用脑记住的,能力是用手练习出来的**。在工作的几年里,我们可能看过很多书,听过很多技术讲座和视频,但是通过听和看只是让你能记住这些知识,这些知识还不能转换成你的能力。
听和看只是第一步,更重要的是实践,通过刻意练习把听到和看到的知识内化成你的能力。
刻意练习,就是有目的的练习,先规划好,再去练习。首先给自己定一个目标,目标可以有效的引导你学习,然后使用3F练习法:
1: 专注(Focus),专注在眼前的任务上,在学习过程中保持专注,可以尝试使用番茄工作法。
2:反馈(Feedback),意识到自己的不足,学习完之后进行反思,思考下自己哪些方面不足,为什么不足。
3: 修正(Fix),改进自己的不足。
不停的练习和思考可以改变大脑结构,大脑像肌肉一样,挑战越大,影响越大,学习更高效,并且也会产生突破性。
广度和深度的选择
技术人员的学习路径有两个维度,深度和广度。很多程序员都有这个疑问,是先深后广,还是先广后深呢?
通过这么多年的学习和思考,我的建议先深后广,因为当技术学到一定深度后,就会有触类旁通的能力,自己掌握的广度也自然有了深度。但是在实际学习过程中,深度和广度相互穿插着学习,比如学习并发编程时,首先学习JDK源码,然后学进去之后,开始看JVM源码,最后看CPU架构,在技术点逐渐深度研究的过程中,广度也得到了完善。
所以无论哪种学习方式,学习态度才是最重要的,在广度学习的时候有深入研究的态度就能达到一定的深度,在深度学习的时候,主动学习相关的技术点,广度也得到拓宽。
你需要学会的编码习惯
程序员应该学会通过技术的手段来提高效率。几个常用的手段是使用工具,快捷键和编写脚本。
1. 使用各种工具
技术人员电脑尽量用MAC,使用命令行效率一定比在1024*1024像素中找一个10*10像素的按钮更快。IDE用IDEA,比Eclipse更智能。命令行工具用iTerm和IDEA里的Terminal。写文章用MAC的客户端工具MacDown,左边编写,右边展示,比Word等工具方便快速很多。有时候我还会用按键精灵里配置脚本需要解决工作问题,比如通过点击我们的系统,来执行任务。这样的工具很多,只要能提高工作效率的工具,大家都可以尝试使用。
2. 使用快捷键
MAC,IDEA和Eclipse有很多快捷键都要学会使用,比如在MAC命令行中通过idea .快速打开工程,通过open . 快速的打开文件夹,把IDEA里通过快捷键把一段代码抽成一个单独的方法,快速生成getter setter方法。
学习sql的注意事项
空杯心态
首先要有空杯的学习心态,而不是傲娇自满,故步自封,空杯子才可以装下更多的东西。首先要学会取百家之长,带着欣赏的眼光看团队的同事或学校的同学,欣赏每位同事或同学的优点,然后吸取他们的优点,每个同事都有其擅长的能力,比如有的同事技术能力强,那么可以观察下他如何学习的(或者找他请教学习方法),有的同学擅长解决线上问题,那么观察他是如何解决线上问题的,解决思路是什么?如果他解决不了时,他是如何寻求帮助。有的同学擅长使用IDE或MAC的快捷键,那么可以向他学习提高工作效率。有的同学能快速理解业务知识,观察他是如何做到的,自己如何达到他的程度。沟通能力,解决问题能力以及规划能力都可以向同事学习。
挑战权威
从书上看到一个知识点,或者从别人那里听到一个知识点,一定要去挑战和质疑这个知识点的正确性,否则学到的知识点可能是错误的。先用逻辑思维推测下,再实战检测下,一定要记住实践是检验真理的唯一标准。比如同事说这个SQL加这个索引是最快的,首先要思考同事的结论是如何得出的,是靠历史经验还是测试过,如果我们没有经验,就加上这个索引跑下SQL,看看执行计划和执行时间,再换下其他索引试试会不会更快。依次类推,并发一定比串行快吗?无锁一定比加锁快吗? 很多结论都是在特定的场景下才会产生的,一定要自己亲手实践验证下。
坚持学习
有的同学可能工作了五年,但是学习的时间可能一年都不到。学技术不能急于求成,只要学习方法正确,量变一定会引起质变。我在大学刚学JAVA时,怎么都学不会,但是坚持学习了几个月,每天看张老师的JAVA视频教学,买书按照书里的代码一行一行的敲代码,白天睡觉,晚上学习和写代码,写到宿舍关灯时就去避风塘呆一晚上,早上6点钟回宿舍睡觉,学到一定时间后,突然恍然大悟,才入了门。
在工作中,我曾经花了一个月的时间学习AOP的实现原理,学习了各种方式来实现AOP的原理,并写了几种实现方式的代码,虽然花的时间很多,但是到现在仍记忆犹新,对于排查问题和学习其他知识都非常有帮助。
要做到坚持学习,学习的环境非常重要。如果你想学,但是又不在学习状态,可以考虑换个学习环境,我经常会去星巴克看书和学习。我听说有的同事会周末抽一天去大学教室上自习。
把事做精
对自己要求越高,进步越快。要有强烈的把事情做完美的心态,我刚开始工作的时候,总是快而不精,做事做的不够细致,总希望快速拿出结果证明自己,但是反而证明不了什么,技术能力也得不到提升,缺少技术亮点,在团队中也没什么影响力,后面就开始锻炼一次就把事情做对的心态和方法。我观察过,很多人都擅长快速做事情,但是把事情做好做精致的人会比较少,但是结果却是**在精益求精的路上才会快速提高自己的能力**。比如用100行代码实现的功能,思考下是否可以用10行来实现,以便于降低运维成本,提高下次的编码效率。引用GUAVA等类库,提取公共方法,和使用JDK8新特性等。系统的方法压测过后,单机只能承受1700QPS,可以思考和实践能否优化下程序提高QPS,减少服务器数量。
把事情做精,一定是要强迫自己多花心思多花时间在这件事情上。有位技术牛人给我分享了一个心得,我觉得说的非常好,老板给你布置了一个任务,**你要花百分之150的精力做到100分,这样在老板那里你就能拿到80分或者60分**。
学习SQL的理由
1. SQL是可移植的
计算机系的学生们在获取他们的学位时被教授数以百计的技术和理论概念,其中的许多信息并不能直接应用于每日的编程任务,但SQL介绍给学生们能够在不同平台间转移的基本概念,不同的平台拥有共通的词汇表和工具组,学生们能带着它们去任何地方。
尽管每个数据库厂商实现他们自己的扩展,但厂商的每个新版本都符合ANSI/ISO SQL标准。标准兼容尽管很微妙,但也使你能够携带着你的知识从一个平台到另一个平台。如果你学习SQL,你将会预备好从一个数据库转移到另一个。
2. SQL从不改变
我的好朋友和商业伙伴开玩笑说他成为一个数据库管理员是因为SQL已经35年没有变化了,这大部分是真的。厂商实现他们自己的扩展并最终使其加入到 SQL标准,但SQL的核心没有改变。一旦你理解了SQL的基础和关系原理(并不那么难),你会发现你能够继续依赖这些知识,添加那些你本来依靠其他工具 或开发者来实现的特性和功能。
3. SQL易于性能增益
在一个应用程序中仅有几个地方能够实现性能增益 - 表示层、应用层和存储层。事实是,你的代码已经写得很好并且很好地调整过,从那里获取性能增益会好比从石头中获取血液一样艰难。另一方面,数据库是一个容 易做一些简单改变(添加一个索引,稍稍修改一个查询)并看到巨大性能改善的地方。在花费了我的职业生涯的可观部分,以一个应用程序开发者的身份盯着数据库 分析器之后,我能为之证明。从程序代码中获得性能改善是可能的,但现代的框架和工具通常都编写良好,因此数据库通常是一个更好的地方(也被认为是更容易的 地方)为性能改善找到低悬的果实。
4. SQL使你成为更好的开发者
《程序员的修炼之道》一书激励开发者每年都学习一种新 语言,并不是因为环境在持续地变化,而是因为学习新的语言向开发者展示了新的模式。思考问题时有不同的思路,并且它们能够很好地应用于不同的解决方案(通 过钻研函数式编程我最近学了不少)。学习SQL能够教会你以集合而非迭代的方式思考。长期来看,这会改变你与数据打交道时的思维方式,使你的数据库代码得 到改进。
5. 增进团队间的交流
你是否曾经试图和语言相同但说非常不同方言的某人交谈?在工作之外,跨越语言的藩篱交流会 很艰难,但当一个项目的成功依赖于此则完全令人抓狂。学习SQL会在你与数据库管理员团队交流你的目标时给予帮助,他们不需要解析你的意思,你可以确切地 告诉他们你的需求。最终误解更少了,事情能够更快地完成,你不再会是“那个让人抓狂的开发者”。
6. 工作保障
我讨厌这样 说,但学习SQL可能意味着当旁边隔间的Ted在裁员季被解雇时你能保住你的工作。你拥有越多的技能,你能履行越多的工作职能,你就变得对现雇主越有价值 (还有未来的雇主)。如果你能同时与数据库团队和开发团队一起工作,你就成为了一个有价值的资源,两个团队都要依靠你获得成功。
7. SQL真的不那么难
和普遍的观念相反,SQL不是难以学习的语言。SQL是一种不同的思考方式,这是肯定的,但它并不难。那只有记录在ANSI/ISO标准中的为数不多的 指令、操作符和数据类型。虽然厂商会添加他们自己的特性,但仍有一部分精简的核心知识你能学习并且应用到你去到的每个地方。
8. 理解什么时候不适合数据库
数据库对于解决很多问题是现象级的工具,但对于解决更多的问题则是糟糕的问题。换言之:你也许不应该用一把锤子去挖掘壕沟。通过学习和理解SQL,你将能够做出更好的决定并将表现糟糕的代码移出数据库。事实上,你将能够在问题形成之前就将其发现。
一旦你理解了SQL,你会更好地领会一个关系型数据库管理系统的局限性。你会知道应用程序的哪个部分能够安全地存在于一个数据库,而哪部分需要被移动到 不同的分层。一些数据验证应该和数据存放在一起,而另一些则不应该。理解SQL如何工作会帮助你决定哪些规则应该保留在数据库里。
9. 让故障排除更简单
运行中的应用程序难以故障排除众所周知。越多的复杂度和分层被涉及到,就越难以为一个应用程序排除故障。对于SQL的良好理解让快速地将存在于数据库中的问题隔离变得可能。换言之:理解SQL使将问题定位在你的应用程序的多个不同分层中的某一层变得简单。
猜你喜欢: