当前位置: 首页 > 编程日记 > 正文

分享:个人是怎么学习新知识的

为什么80%的码农都做不了架构师?>>>   hot3.png

挺多童鞋问我是怎么学习新知识的,干脆写篇文章总结一下,希望对大家有所帮助。对照书、技术博客、极客时间等学习的方式我就不说了。

一、早期

在15年及更早,由于知识储备少,基础偏弱,大致采取了如下的步骤:

1.1 入门:找教学视频

了解xx是什么,能解决什么问题。例如个人学习Spring、Struts、Hibernate时,就是找了 马士兵 老师的视频。

值得一提的是,记笔记非常重要,一是可以形成相对完整的知识体系,二来也能应对面试——面试之前花点时间看看笔记就能很快记忆唤醒。个人原创学习笔记可关注公众号“IT牧场”,点击 资源领取 即可获得

1.2 实战:模拟项目

俗话说,学以致用,为学而学是没有意义的——即使有意义,过段时间也会遗忘。所以个人在掌握基础知识点以及常见用法后,一般都会做个简单的项目。作用主要有几点:

  • 巩固知识点
  • 总结最佳实践
  • 锻炼自己的产品思维

从15年起,个人每年都会定”做一个 Side Project “的KPI——这个项目能承载如上三点作用即可。

  • 15年:基于当时的主流框架捣鼓的快速开发脚手架 Platform(选型较老,已被时代抛弃) ;
  • 16年:基于Spring Boot的半成品 CMS (起因是来了个私活儿,于是开工,后来合作崩了,就废弃了);
  • 17年:基于Spring Cloud的快速开发脚手架与最佳实践总结 Spring Cloud YES ,现已升级到Spring Cloud Greenwich SR1版本;
  • 18年:微信小程序 IT牧场 ,在公众号导航栏点击”资源领取”即可进入,近期开源。

顺便说下,这些项目的内核基本一样,但每次又有优化——每次拷贝老代码前,都再思考一下,看有没有改进的空间——这不是正是”重构”?既是对自己过去代码的重构,也是对自己技术的重新审视。

二、15年后

15年后,由于工作好几年了,知识面、知识深度都达到一定程度——特别是15年初自学Hadoop以及Spark后。

一点趣闻

学习Hadoop和Spark的契机:当时大数据很火,工资很高,于是面向工资编程,想转型大数据。当时正好所在公司高层变动非常频繁,大佬们都忙着政治斗争——倒是爽了我这种小技术经理以及开发兄弟,整整一个半月,没有任何需求。于是投入全日制投入学习,偶尔改改bug。

后来发现,学习Hadoop和Spark是个笑话——因为学完发现在南京找不到大数据岗位——

  • 面试中兴,技术通过了,开17K,部长面也过了,结果卡在学习,说民办本二算本三,不符合他们的学历要求,我也是醉了。
  • 面试鸿信:对方说自己有1T数据,规模在南京排前三。我嘴上不说心里想1T算个毛的大数据……

后来又继续搞Web了。但学习还是有好处的——

  • 大数据知识点杂,有时候还涉及不同语言……这锻炼了自己的知识整合能力;
  • Hadoop、Spark本身普遍是分布式应用,这为后来玩微服务打下很好的基础;
  • 很多时候,知识点是相通的,如果能探索到本质,会发现很多所谓高大上的东西其实也就是那么回事。

此时,我觉得看视频入门效率太低了,所以调整了下节奏:

2.1 入门:GitHub Demo

看教学视频固然是个很好的方法——因为学习曲线足够低,而且会有导师告诉你怎么用,甚至给你总结好最佳实践。但多数情况下,视频教程对于这个阶段的我,效率已经偏低了。很多视频几十分钟才讲一两个知识点…即使倍速,依然感觉在浪费时间。

于是我采取了Demo驱动的方式学习。以学习 Spring Boot 为例,Spring Boot官方提供了 Spring Boot Samples ,把代码clone下来玩一遍,就能相对系统得了解Spring Boot提供的能力。

TIPS

并非完全放弃教学视频,学习途径的选择是多样的,有时候是二选一,有时是两者配合。

只是进入这个阶段后,个人GitHub Demo驱动相对用得相对更多一些。建议大家做个简单的评估,怎么快怎么来。

2.2 系统学习:官方文档

Demo驱动入门后,我一般会对照官方文档撸一遍,例如学习Spring Cloud时,我把官方文档中的用例都过了一遍。

官方文档带来的好处如下:

  • 一手文档——官方文档永远是最好的文档,书、视频等等本质也是别人通过学习官方文档进行二次创作的;
  • 能体会官方的意图
  • 感知该软件的发展趋势(例如阅读Release Log)
  • 系统、详尽。

很多人可能觉得自己英文水平欠缺,不敢阅读英文文档,这点我只能说硬着头皮上吧,其实坚持一段时间后,你会发现也就那么回事。大部分英文文档还是比较通俗易懂的——再者,现在谷歌翻译质量非常高,进一步降低了阅读英文文档的难度。

我的 Kubernetes开源书 ,本质就是官方文档翻译(一般看一边翻译) + 个人理解 + 批注。

总的来说,IT行业人才分布也是符合二八定律的——80%的普通人,20%的高手;20%高手里面,80%的普通高手,20%的大佬。我觉得英文不好不是借口,主要还是看你想成为哪个20%——付出和回报是成一定比例的。

另外还有10000小时理论,也可以给大家共勉——要想成为某一领域的精英,必须在这一领域深耕10000小时——如果连英文文档都不敢去碰,怎么可能成为精英?

大道理大家都懂,不再废话了。

闲话

13年个人定了一个原则,就是不找客观借口。因为客观借口只要想找,永远可以找100个。失败是客观事实,但很多失败都是由于主观因素导致的。失败就是失败,首先要有勇气直面。如果连尝试都不敢,就失败了,那真的是可耻到极致的失败。

进入阿里后,我的思想再次发生变化。以前有时候我会觉得由于我没有xx资源,所以我做不了xx事;但现在,我的思想变成因为我要做xx事,所以我需要xx资源,如果没有,那我就去争取;如果没有那我就想办法抢。我离成功还很远,但我会继续努力。技术上成功的难度,对我来说相对低一些,所以我坚持技术路线。

2.3 实战:模拟项目

和之前一样,还是做个简单的项目玩玩,项目能起到练手的目的即可。

2.4 深入:带着问题分析源码

起源于在 焦点科技 的一场面试——焦点科技面试官是对我职业生涯中造成影响的面试官,虽然只有一面之缘,甚至连对方的名字也不知道。

与其说是面试,倒不如说是”切磋”——一般面试,往往是你问我答,OK,NEXT。回答对不对,到不到位,往往不会揭晓答案。

这位面试官很有意思,他会从一个简单的问题逐步深入,并且如果回答不上来,对方会给你很多提示,就像武侠片里师父给徒弟喂招一样——这样面试下来会有所收获,也会了解自己欠缺的地方;更好玩的是,如果你聊到对方不了解的地方,也会问到他懂为止——这其实是考察候选人的沟通能力的常见手法之一,但目前业界又有多少面试官能做到呢?

这次面试给我的启发是:如果广度已经很好,是不是应该深挖呢?

深入,最好的方式就是阅读代码。而为了看代码而看代码,在我看来是浪费生命、浪费时间。所以,我选择在遇到问题时,带着问题分析源码——这里的遇到问题,并不是代码运行报错,或者是项目出异常;而是指对xxx感到好奇,想要了解原理,于是带着问题阅读代码。

2.5 广度:跟进业界动态

个人比较喜欢看科技新闻,大学开始,常年在煎蛋、CNBeta、36氪等科技站上潜水。然而,从15年开始,就一直在995/996,跳到哪儿哪儿加班……时间不够用,必须做出取舍。

经过分析,发现开源动态对自己更有价值。于是坚持每天花10-15分钟刷开源中国的”软件更新咨询”栏目——软件更新栏目相信很多人有所了解,其实就是某某开源软件又发布了新版本的新闻列表。

然而,长期关注至少能获得如下几点信息:

  • 咦?xx软件发布了,这个是啥?解决什么问题的?
  • 咦?xx软件又发布了,这玩意儿挺活跃啊!
  • 咦?xx评论挺多的,看来很快会流行起来。

长期关注的收益:

  • 了解行业动态
  • 增进知识广度
  • 培养行业敏感性

我在15年玩Spring Cloud、16年玩Docker、17年玩Kubernetes,时间基本都在业界流行之前。之所以有这种行业敏感性,和长期刷开源中国是分不开的。

TIPS

再安利就变成开源中国软文了……相信我,开源中国没有给我钱……

三、16年后

3.1 写博客:让别人也能懂

16年,因为一些契机,从开发转型成为架构师。角色的转变,带来的是思考视角的转变。之前做技术经理时,名下只有四五个人,多数问题口头交流就OK了;但成为架构师后,负责的面变大了,有时得和几十个人沟通,而很多沟通是重复的。

此时,我意识到,不如把大家常见问题总结总结,写成手把手的文档——

  • 手把手上手系列
  • 手把手解决问题系列
  • 血的教训系列……

再后来,发现写Spring Cloud开源书、博客、实体书……

写作本身也是总结的过程,而且不仅要自己懂,还要想办法让别人也能看懂。

可能是写手把手系列多了,所以我的文章一直也是手把手、附具体步骤、配详细代码,原理、源码分析写得相对少一些,这点也被一些人诟病。个人对博客的定位,主要是引导新手,其次是个人心得总结。如果人家已经入门了,还需要到处找文章吗?自己研究研究就OK了。

那些喜欢看源码解读的”高手”,有多少是真高手,有多少是伪高手?我相信有源码阅读经验的,都不会觉得阅读源码是一件高大上的事情——多数情况下,看懂开源软件源码真的比看懂你所在项目的遗留代码简单多了!

趣闻

18年在华为面试 ,和面试官聊到Zuul相关源码。大致问题是:聊聊Zuul ErrorFilter存在的Bug。这个Bug其实在Camden已经修复了,但是我好说歹说面试官都不信。结果再一打听,原来面试官看到《Spring Cloud微服务实战》是这么写的——这本著作是基于Spring Cloud Brixton撰写的,该版本确实有Bug,所以作者非常贴心地给出了解决方案,却被这位面试官拿来做考察一个人对Spring Cloud是否深入的尺子。

四、写在最后

以上是我历年学习方法的分享。其实总结起来就一句话:我不够聪明,但我会死磕,逐步积累;我不找客观原因,硬上。

中间穿插了很多例子,文章可能有点碎……Anyway,希望对大家有用。

转载于:https://my.oschina.net/eacdy/blog/3047330

相关文章:

easyui的datagrid

datagrid数据的绑定方式: 1)data 后跟数据行的json串 2)url 后跟{"total":,"rows":,"foot":},其中total代码返回总行数,rows为数据行json串 .NET MVC,controll控制类方法中获取datagrid…

线性回归介绍及分别使用最小二乘法和梯度下降法对线性回归C++实现

回归:在这类任务中,计算机程序需要对给定输入预测数值。为了解决这个任务,学习算法需要输出函数f:Rn→R。除了返回结果的形式不一样外,这类问题和分类问题是很像的。这类任务的一个示例是预测投保人的索赔金额(用于设置保险费)&am…

4种最常问的编码算法面试问题,你会吗?

导语:面试是测查和评价人员能力素质的一种考试活动。最常问的编码算法面试问题你知道多少呢?作者 | Rahul Sabnis译者 | 苏本如,编辑 | 刘静来源 | CSDN(ID:CSDNnews)在许多采访中,我经常被要求…

[小梅的体验课堂]Microsoft edge canary mac版本体验

简介 华硕微软越来越没有自己的JC了,不经在windows里面加了wsl而且还废弃了自己的老edge浏览器,重新基于chromium内核开发了新的edge浏览器了,不管怎么说mac上又多了一款新的浏览器,对于一个爱好新鲜的我来说那就简单安装体验下 下…

SQL Server用户自定义函数

用户自定义函数不能用于执行一系列改变数据库状态的操作,但它可以像系统 函数一样在查询或存储过程等的程序段中使用,也可以像存储过程一样通过EXECUTE 命令来执行。在 SQL Server 中根据函数返回值形式的不同将用户自 定义函数分为三种类型:…

C++11中std::initializer_list的使用

initializer_list是一种标准库类型,用于表示某种特定类型的值的数组。和vector一样,initializer_list也是一种模板类型,定义initializer_list对象时,必须说明列表中所含元素的类型。和vector不一样的是,initializer_li…

WijmoJS 2019V1正式发布:全新的在线 Demo 系统,助您快速上手,开发无忧

2019独角兽企业重金招聘Python工程师标准>>> 下载WijmoJS 2019 v1 WijmoJS是为企业应用程序开发而推出的一系列包含HTML5和JavaScript的开发控件。其中包含了金融图表、FlexSheet、先进的JavaScript控件(Wijmo 5)和经典的jQuery小部件&#x…

最后3天,BDTC 2019早鸟票即将售罄,超强阵容及议题抢先曝光!

大会官网:https://t.csdnimg.cn/U1wA2019 年12月5-7 日,由中国计算机学会主办,CCF 大数据专家委员会承办,CSDN、中科天玑数据科技股份有限公司协办的 2019 中国大数据技术大会,将于北京长城饭店隆重举行。届时&#xf…

php_mongo.dll下载(php操作mongoDB需要)

php_mongo.dll下载(php操作mongoDB需要)如果PHP连接操作mongoDB就必须要加入此扩展:php_mongo.dll,放到你对应php的扩展目录在你的php.ini中加入:extensionphp_mongo.dll重启apache,在phpinfo()中查看是否有…

十大机器智能新型芯片:华为抢占一席,Google占比最多

(图片付费下载自视觉中国)整理 | 胡巍巍来源 | CSDN(ID:CSDNnews)当年,阿基米德爷爷说出“给我一个支点,我就能撬动地球”这句话时,估计没少遭受嘲讽。然而后来的我们,都…

C++/C++11中头文件numeric的使用

<numeric>是C标准程序库中的一个头文件&#xff0c;定义了C STL标准中的基础性的数值算法(均为函数模板)&#xff1a; (1)、accumulate: 以init为初值&#xff0c;对迭代器给出的值序列做累加&#xff0c;返回累加结果值&#xff0c;值类型必须支持””算符。它还有一个…

Spring基础16——使用FactoryBean来创建

1.配置bean的方式 配置bean有三种方式&#xff1a;通过全类名&#xff08;class反射&#xff09;、通过工厂方法&#xff08;静态工厂&实例工厂&#xff09;、通过FactoryBean。前面我们已经一起学习过全类名方式和工厂方法方式&#xff0c;下面通过这篇文章来学习一下Fact…

查看进程 端口

2019独角兽企业重金招聘Python工程师标准>>> 一 进程 ps -ef 1.UID 用户ID2.PID 进程ID3.PPID 父进程ID4.C CPU占用率5.STIME 开始时间6.TTY 开始此进程的TTY7.TIME 此进程运行的总时间8.CMD 命令名 二端口 netstat Linux下如果我…

深度学习中的欠拟合和过拟合简介

通常情况下&#xff0c;当我们训练机器学习模型时&#xff0c;我们可以使用某个训练集&#xff0c;在训练集上计算一些被称为训练误差(training error)的度量误差&#xff0c;目标是降低训练误差。机器学习和优化不同的地方在于&#xff0c;我们也希望泛化误差(generalization …

今日头条首次改进DQN网络,解决推荐中的在线广告投放问题

&#xff08;图片付费下载自视觉中国&#xff09;作者 | 深度传送门来源 | 深度传送门&#xff08;ID:gh_5faae7b50fc5&#xff09;【导读】本文主要介绍今日头条推出的强化学习应用在推荐的最新论文[1]&#xff0c;首次改进DQN网络解决推荐中的在线广告投放问题。背景介绍随着…

RPA实施过程中可能会遇到的14个坑

RPA的实施过程并非如我们所想的那样&#xff0c;总是一帆风顺。碰坑&#xff0c;在所难免。但也不必为此过于惊慌&#xff0c;因为&#xff0c;我们已经帮你把RPA实施之路上的坑找了出来。RPA实施过程中&#xff0c;将会遇到哪些坑&#xff1f; 【不看全文大纲版】●组织层面&a…

Android问题汇总

2019独角兽企业重金招聘Python工程师标准>>> 1. Only the original thread that created a view hierarchy can touch its views 在初始化activity是需要下载图片&#xff0c;所以重新开启了一个线程&#xff0c;下载图片更新ui&#xff0c;此时就出现了上面的错误。…

深度学习中的验证集和超参数简介

大多数机器学习算法都有超参数&#xff0c;可以设置来控制算法行为。超参数的值不是通过学习算法本身学习出来的(尽管我们可以设计一个嵌套的学习过程&#xff0c;一个学习算法为另一个学习算法学出最优超参数)。在多项式回归示例中&#xff0c;有一个超参数&#xff1a;多项式…

自定义View合辑(8)-跳跃的小球(贝塞尔曲线)

为了加强对自定义 View 的认知以及开发能力&#xff0c;我计划这段时间陆续来完成几个难度从易到难的自定义 View&#xff0c;并简单的写几篇博客来进行介绍&#xff0c;所有的代码也都会开源&#xff0c;也希望读者能给个 star 哈 GitHub 地址&#xff1a;github.com/leavesC/…

分析Booking的150种机器学习模型,我总结了六条成功经验

&#xff08;图片付费下载自视觉中国&#xff09;作者 | Adrian Colyer译者 | Monanfei出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;本文是一篇有趣的论文&#xff08;150 successful machine learning models: 6 lessons learned at Booking.com Bernadi et al.,…

Android官方提供的支持不同屏幕大小的全部方法

2019独角兽企业重金招聘Python工程师标准>>> 本文将告诉你如何让你的应用程序支持各种不同屏幕大小&#xff0c;主要通过以下几种办法&#xff1a; 让你的布局能充分的自适应屏幕根据屏幕的配置来加载合适的UI布局确保正确的布局应用在正确的设备屏幕上提供可以根据…

C++/C++11中头文件iterator的使用

<iterator>是C标准程序库中的一个头文件&#xff0c;定义了C STL标准中的一些迭代器模板类&#xff0c;这些类都是以std::iterator为基类派生出来的。迭代器提供对集合(容器)元素的操作能力。迭代器提供的基本操作就是访问和遍历。迭代器模拟了C中的指针&#xff0c;可以…

从多媒体技术演进看AI技术

&#xff08;图片付费下载自视觉中国&#xff09;文 / LiveVideoStack主编 包研在8月的LiveVideoStackCon2019北京开场致辞中&#xff0c;我分享了一组数据——把2019年和2017年两场LiveVideoStackCon上的AI相关的话题做了统计&#xff0c;这是数字从9.3%增长到31%&#xff0c;…

五. python的日历模块

一 .日历 import calendar# 日历模块# 使用# 返回指定某年某月的日历 print(calendar.month(2017,7))# July 2017 # Mo Tu We Th Fr Sa Su # 1 2 # 3 4 5 6 7 8 9 # 10 11 12 13 14 15 16 # 17 18 19 20 21 22 23 # 24 25 26 27 28 29 30 # 31# 返…

Linux下的Shell工作原理

为什么80%的码农都做不了架构师&#xff1f;>>> Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序。它不 属于内核部分&#xff0c;而是在核心之外&#xff0c;以用户态方式运行。其基本功能是解释并 执行用户打入的各种命令&#xff0c;实现用户与L…

C++/C++11中头文件functional的使用

<functional>是C标准库中的一个头文件&#xff0c;定义了C标准中多个用于表示函数对象(function object)的类模板&#xff0c;包括算法操作、比较操作、逻辑操作&#xff1b;以及用于绑定函数对象的实参值的绑定器(binder)。这些类模板的实例是具有函数调用运算符(functi…

飞天AI平台到底哪里与众不同?听听它的架构者怎么说

采访嘉宾 | 林伟 整理 | 夕颜 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 天下没有不散的宴席。 9 月 25 日&#xff0c;云栖大会在云栖小镇开始&#xff0c;历经三天的技术盛宴&#xff0c;于 9 月 27 日的傍晚结束。 三天、全球6.7万人现场参会、超1250万人…

浅谈 sessionStorage、localStorage、cookie 的区别以及使用

1、sessionStorage、localStorage、cookie 之间的区别 相同点 cookie 和 webStorage 都是用来存储客户端的一些信息不同点 localStorage localStorage 的生命周期是 永久的。也就是说 只要不是 手动的去清除。localStorage 会一直存储 sessionStorage 相反 sessionStorage 的生…

任务栏窗口和状态图标的闪动 z

Demo程序&#xff1a; 实现任务栏窗体和图标的闪动&#xff1a; 整个程序是基于Windows Forms的&#xff0c;对于任务栏右下角状态图标的闪动&#xff0c;创建了一个类型&#xff1a;NotifyIconAnimator&#xff0c;基本上是包装了Windows Forms中的NotifyIcon类型&#xff0c;…

深度学习中的最大似然估计简介

统计领域为我们提供了很多工具来实现机器学习目标&#xff0c;不仅可以解决训练集上的任务&#xff0c;还可以泛化。例如参数估计、偏差和方差&#xff0c;对于正式地刻画泛化、欠拟合和过拟合都非常有帮助。点估计&#xff1a;点估计试图为一些感兴趣的量提供单个”最优”预测…