学习经验
首先分享一下自己在学习技术的过程中的一些经验啦,这些也是自己在学习的过程中慢慢总结出来的,希望对大家有所启发。
持续学习
当前互联网发展太快了,我们可以发现现在很多技术更迭太快。比如说前端吧,前几年几乎人人都在用的 jQuery,现在已经几乎被淘汰了。前几年比较火的算法和模型,现在已经被最新的模型远远甩开了。另外我们也可以看到很多轮子、框架也只是在某个时间段火一把,几年之后就过时了。所以入了这一行,就需要保持一个持续学习的心,做好终身学习的准备。
打好基本功
刚才也说了,很多框架、轮子可能过几年就过时了,或者说某个框架从 1.0 到 2.0,API 变化非常大,我们就得重新学习。但是我们可以看到,虽然其设计的 API、用法变了,其核心还是不变的,最本质的算法和追求的目标还是不变的。
所以说基本功很重要,我们可以去试着了解下其设计的原理、其核心的算法逻辑、其更底层的操作,如果我们把这些基本功打扎实了,它上层的框架和 API 怎么变,我们也知道其所以然。
深度和广度扩展
技术领域划分了太多的方向,比如粗略划分行业有前端、后端、数据分析、机器学习等等方向。这时候问题就来了,这么多方向,我们应该怎样去了解和学习?
在我看来,我们应该在扩展广度的基础上,着重选择 1-2 个方向扩展深度。比如说,我们可以对每个方向都了解一下,类似于向全栈方向靠一靠,类似于树把树根扩展地广一点。但是也不能什么方向都挖一点就浅尝辄止了,这样就有种半吊子的感觉了,并不牢靠。所以我们可以在这个基础上着重选择 1-2 个方向去深耕、钻研,成为这个领域的专家或者走到 TOP 位置,类似于将树根朝这个方向扎深。这样既可以在某个领域站稳脚跟,有自己的支柱,同时还对其他的方向有所认识、建立整个联系。
总结和记录
这个其实在之前我说过太多次了,也是我觉得非常非常非常重要的一点。我们在学习一个知识或者学一个框架的时候,有些知识点当时记住了,如果不注意总结和记录,很快就会遗忘了。很多时候,回过头来,我们会发现自己收获的就是曾经记录过的那一部分,没有记录过的再也想不起来了。
所以,建议大家在学习的时候注意做好笔记,最好能够比较体系化地梳理一下,达到一篇博客的标准,而不仅仅是简单地做笔记。笔记是给自己看的,博客是给别人看的,后者要求在写的过程中写清楚很多事情,包括为什么、怎么做、达到什么效果、解决什么问题,这些内容。在写的过程中,我们的大脑也会不断地组织和思考,写完之后,我们就能在脑子里有一个更深刻的印象。以后再查阅的时候,也能很快回忆起来。
所以,希望大家在学习的过程中多按照博客的标准去做笔记。如果能够分享给其他人,那更好了。
是否要造轮子
很多人会在造轮子和不造轮子的观点上产生争执。有人说,人生苦短,一些库和轮子别人写好了,直接拿来用就行了;一些人又说,你就只知道调轮子,连个底层的原理都不知道,自己写一写就明白了。
在我看来,这个是需要区别对待的。有的东西我们是需要造轮子的,有的不用。
我认为一个库的学习是可以分为三个层面的。第一个层面就是了解即可,我们不需要用到多么高深的用法,只是用它的一些功能来解决一些刚需,所以只需要懂得我们需要的那块就行了,以后可能也不会用到其他的部分,那这种就只需要稍微了解即可,并不需要去造轮子。第二个层面就是全面掌握,比如一个库我们在开发过程中依赖得比较多,我们就需要全面了解它的原理和高级用法,甚至有些时候记住它的一些 API。第三个层面是深入了解甚至改写。某个库和框架可能已经不能满足我们的需求,我们可能需要在它的基础上改造,这时候就需要我们深入去了解它的源码、设计逻辑,能够去改写或重写,这时候才是造轮子的时候。
所以我们在学习的时候可以多去思考,哪些库应该归类到哪个层级,在不同的情况下采取合适的学习策略。
资讯号的订阅
现在这个时代,信息量真的是爆炸。怎样才能更好地获取我们想要的技术资讯呢?在这里分享一下我的几个方法。
第一个是 RSS 订阅,互联网上还是有很多优秀的技术网站的,而绝大多数网站都有自己的 RSS 订阅地址。我们可以使用一个 RSS 聚合阅读来把它们收集起来,这样这些网站在更新的时候我们就会及时收到了。比如我自己用的是 Feedly 和 Reader3 ,二者来配合使用,它们可以对各个来源网站分类,个人感觉还是比较方便的。如果大家有更方便的工具欢迎推荐。
第二个就是公众号了,我一般也是订阅了自己喜欢的公众号,主要订阅一些能够产出较为优质原创内容的公众号,一些资讯号可以选择一些大号或官方媒体。其他的号可能大部分转来转去、推来推去的,真正有价值的并不多。所以大家在筛选的时候可以注意甄别。
第三个就是微博,我会关注一些技术博主,他们可能会经常性地发一些干货分享,包括一些科技新闻、实用工具、科普教程等等,我把它们划分到一个分组。在刷微博的时候可以只刷这个分组的微博,就能看到不少和技术相关的内容了。
多去实践
技术上的东西,如果我们想要学会,是需要我们亲身去实践的。比如去写一个库,单纯去阅读文档或看视频教程,其实没过多久就忘得一干二净了。如果想要记得牢靠,去手敲一遍,去动手做一遍,其印象和理解程度会远远不一样。
所以,要多练,多动手实践。
官方文档很靠谱
很多朋友在学习一个库或者框架的时候,可能都是百度来百度去,结果只能搜到一些抄来抄去的博客,很多时候并不能解决实际的问题。另外很多官方文档都是英文的,也可能由于英文的问题,可能很多人也并不习惯去看英文的官方文档。
但实际上,官方文档才是最新最全的,一些问题几乎都能在官方文档上找到答案。如果想要系统地了解一个库或工具的用法,建议大家一定要多去看官方文档。毕竟现在很多中文的文章,不管内容好坏,它的范围一定逃不出官方文档的范围。而且,如果某些库或工具有更新,最先更新的肯定是官方文档。所以,好好看看官方文档,不要去惧怕看不懂,即使看不懂,用一些翻译软件配合一下,也基本不是什么问题。
怎样解决问题
在开发过程中,Bug 一定是在所难免的。一个优秀的程序猿不仅要能写 Bug,还要能 DeBug,也就是解决 Bug。那么怎么来解决 Bug 呢?可能很多朋友一看到有问题就去问别人了。这其实是不好的,而且也不利于个人技术水平的培养。
我个人建议可以这样。一般第一步就是把 Traceback 报错信息找出来,然后放到谷歌上去搜,不要用百度,百度搜索技术问题的结果比谷歌差太多了。一般情况下,谷歌都能给我们搜到一些 Stack Overflow 上的解决方案或者 GitHub 的 Issue 或者别人总结到的解决方案记录,通过这三个地方,我们基本能解决一大半的问题,除非这个问题没有人遇到过。
如果上面的方案找不到,我们可能就要转去官方文档来搜一下了,搜索相关模块的用法,看看是不是哪里调用的不对或者哪里有更新了没有及时跟进,另外在阅读文档的过程中我们也能了解一些原理和其他的解决方案。
如果还是不行,可能我们得去找找源码,是不是源码哪里写的有问题,或者某个功能就是没实现。如果确实没有或者实现得不对,可以去 GitHub 上提 Issue,与原作者交流。
如果经过上面的流程还没有解决,那么几乎问别人也不好解决了。这时候就可以去请教一些比较有经验的大牛或者专家,看看他们是否遇到过类似的问题,与他们交流交流,说不定也会得到更多好的解决方案。但我相信,通过前面的流程,几乎 90% 的问题都能解决了,即使没有解决,我们也能对这个问题有更深的理解。
以上便是一般情况下解决问题的流程。为什么说一般情况下呢?因为有时候在某些紧急情况下,想要快速解决问题,同时旁边正好还有有经验的朋友,快速问一下解决还是可以的,当然这是特殊情况哈。
怎样问问题
说到问别人问题,我心中也是说不尽的苦水。很多人在问我问题的时候经常就出现这样的情况:
•问一句「在吗?可以请教你一个问题吗?」,然后就没有下文了。一般情况下我可能在忙,没注意,等到注意到,回他一句,他已经不在了,然后可能就真的没有下文了。•有的就直接粗略问我「我代码运行跑不通啊」,然后也不发报错信息,然后我还要去跟他要报错信息。•有的直接就很不客气的跟我说「在吗,给我看看这个问题。」我是谁啊?我凭什么要帮你看呢?•还有其他的,手机拍几张看都看不清的图,一打开全是那种网格线,截个图不好吗?
还有很多其他的吧,不一一列举了。
怎么说呢?我之前也犯过前面的错误,毕竟每个人都是慢慢成长起来的,我也是被一些前辈教导才领悟到了一些东西,都是情有可原的。
当然有一点是,被问的人其实是没有责任帮你解答问题的,他们不回也是很正常的,尤其是在他们遇到以上情况时候,大多数情况下可能真的是心累了,选择性地忽略了。当然也可能是太忙了,忙忘了也很正常。所以,遇到问问题没有回复的情况,也不要去怀恨在心,实际情况下可能真的是就忽略了或者提问的方式并不友好。
那么一般情况下可以怎么提问题呢?首先,拿出礼貌的态度是必须的,毕竟是在向他人请教。所以说话的语气稍微恭敬一点。然后说清楚背景、来龙去脉,比如你在做什么想达成什么目的描述清楚。然后再描述清楚你的问题是什么,有报错信息把报错信息和系统环境贴出来。然后可以描述下为了解决这个问题你做了什么样的尝试,想寻求一种怎样的解决方案。如有必要还可以发个红包。这种情况下,被提问者会觉得你这个人做事很有逻辑,而且是真的尝试了没有解决,不是伸手党,而且很有诚意,所以很大概率就会回答了。
所以,掌握一些提问的技巧还是很有必要的。
时间管理
现在这个时候,时间比什么都重要,每个人的时间都是公平的,如果我们能够合理规划好自己的时间和工作,这就跨出了成功的一步。
我曾经尝试用手写的方式来记录自己的一些任务,但总感觉它有一些并不方便的地方。比如某时某刻突然想起来,想要添加一件事情或者完成了一件事情,或者想要修改截止时间,或者想要划分优先级,其实都不怎么方便。最好的方式还是通过一些专用的时间管理软件来分配分配和管理自己的时间。
我曾经使用过非常多款时间管理工具,最终我选择的是「滴答清单」,这个是我感觉体验非常不错的一款。这个软件里面基本的任务添加与勾划功能当然必不可少,它也支持优先级管理、分类管理、时间提醒,另外它支持全部平台,不论是网页还是 Windows、Mac、Android、iPhone、iPad,可以全平台同步,非常方便。它还支持多人协作,我曾经使用这款软件完成了多个项目的任务分配和多人协作开发。
另外关于时间管理还有一个非常重要的四象限法则,大家也可以了解一下。比如重要不紧急、重要紧急、不重要紧急、不重要不紧急,我们在做事情的时候可以优先做重要紧急的事情,然后平时有时间做一些重要不紧急的事情,尽量减少不重要紧急的事情占用的时间,这样我们可以更合理地进行时间上的分配。这个功能其实滴答清单也可以通过智能清单的方式来控制实现。
另外在做事情的时候怎样保持更专注呢?我一般会采用番茄工作法,大家不了解的可以了解一下。一个番茄可以设定 35-45 分钟,在开始番茄计时前想好这段时间要做什么,只要开了一个番茄,就不要被任何意外打断,在这个时间保持专注,朝着自己的目标进发。最后我们会发现,一个番茄下来,实现的事情还是不少的。当然最重要的是,在这段时间内保持专注,朝着自己想完成的目标去做。最后一天下来,数数自己完成了几个番茄,总结一下,还是蛮有成就感的。
效率软件
做技术难免会用到很多软件,有些软件就是为了解决办公和开发效率问题而生的。比如我用 Mac,我就时不时去寻找一些提高效率或更方便的软件,比如 Alfred、Paste、Termius、ForkLift、iPic、Typora 等等,原则就是好用、易用、跨平台、云同步,大家也可以去打造一套适合自己的效率组件,确实会给自己带来非常多的便利。
生活经验
下面再总结几点生活上的经验,是我自己平时的一些总结,希望对大家有所启发。
考虑好成本
做一件事前,想想这件事的意义和成本有多大,别把时间浪费在无意义的事情上面。我们的时间是非常宝贵的,不要把时间浪费在无意义的事情上面。一件事在做之前,想想做了会耗费多少精力和时间,它值不值得做。如果不值得,那就不要去做了,留出更多时间做更有意义的事情,甚至去休息也比这强。
减少时间浪费
很多情况下生活并没有那么如意,一些事并不是我们不想去做就不用做的。如果一件事是自己不喜欢的或者无价值的但是非要做,那就用最短的时间去完成,尽量较少时间在这方面事情上的浪费。
多投资自己、少依傍别人
很多情况下,我们需要多在自己身上下功夫,培养自己的实力。如果我们自己都没有什么能力,就算我们遇到了牛人,也说不上话,也建不起桥。只有把自己变强大了,别人才会看到你,别人才会觉得你有价值。所以,好好加油,把自己变牛逼就对了。
怎样介绍自己
在成年人的世界里,很多情况下都是看利益不看感情的。如果你对别人有价值,能给别人带来利益,别人才可能会跟你打交道。所以,在与别人介绍自己的时候,说清楚自己能带来的价值很重要。
比如说,一个人向另一个人介绍自己的时候,介绍了自己干嘛的,有多么牛逼,出了什么东西,得了什么奖,然后就完了。另一个人会想,你这么牛逼,对我来说又有什么用呢?然后就没有然后了。
所以说,我们在向别人介绍自己的时候,可以除了说清楚自己是做什么的之外,还要说清楚自己能够提供什么价值。比如我做网络爬虫、Web 开发、机器学习,我就可以跟别人说如有网络爬虫、Web 开发、机器学习相关问题可以跟我交流,也可以有相关项目合作。这样,别人就知道我能给他带来什么价值了,以后也就会有更多机会交流和合作。
所以说,介绍自己还是很有讲究的,可以好好想一想。
懂得一些规则
在成年人、社会人的世界,有太多大家都已经默认的规矩,自己要去懂,没几个人会教我们。就像一个圈子有一个圈子的潜规则一样,如果我们不知道,很可能就吃了大亏,或者铸成一些错误。但这个又不是每个人会去教,可以多去观察生活中的一些现象,多去思考一下为什么,或者听听过来人的经验,是有很多用处的。
钱的问题
钱,确实是个好东西。有人说,谈钱俗。你说俗就俗吧,但钱确实有用。
钱,不能保证能买到所有东西或者实现所有愿望,但是它的确可以提供便利或者免去不必要的麻烦,可以增加幸福感的。甚至说,世界上能够用钱解决的问题都不是问题,可能说得稍微有点夸张,但它确实很有用。
另外在一些人脉关系上,能够用钱解决的,也少去消耗人脉。用钱来解决,反而可能会加固人脉。比如你第一次给了钱,以后人家会有更强的意愿跟你合作的,毕竟这关系到刚才所说的「利益」。
另外如果想要赚钱,最好不要选和时间或精力成正比的事情。比如搬砖、理发,这些就是出一份力、得一份钱。而现在这个时代,我们可以寻求很多复利性的东西,比如出个课程,录制一次,后面卖多少份就收多少份的钱了。
学会拒绝
我之前不懂得去拒绝别人,比如我有时候已经非常忙了,有人找我来帮个忙,我还是会答应下来。甚至为了帮别人,我连自己的事情都放在了后面,或者不惜熬夜也要做出来。这样其实会非常累,而这时候如果别人再不领情,就反而会让自己十分愤怒。
所以,一些情况下,我们需要懂得去拒绝。比如我们的事情自己有自己的规划,什么时候干什么都是有计划的。这时候如果有人来寻求帮助,我们可以跟他说,我最近有什么什么事情,你这个事情我可能需要什么时候才能给你完成了,能行吗?或者自己实在没时间,就直接拒绝好了。不要因为不会拒绝而把自己搞得太累,没必要。
迈出第一步、走出舒适区
有时候,迈出第一步真的是很重要的,其实做一件事最难的阶段就是开始。
比如说我有一个非常久不维护的一个项目,我想起来的时候我就懒得去做,现在我会强制逼迫自己把准备工作做好。比如说把代码下载下来用文本编辑器把它打开,再把代码运行起来,然后我就可以全心投入精力来修改了。
比如说,我有一篇文章之前写了一半,现在没有在写了,我就会强制自己把这篇文章打开进入到编辑的页面,然后我就会继续写了。
这样实际上就成功了一半了。
有时候我们会陷在当前的舒适圈出不来,但我们只要逼迫自己走出来,其实后面并没有我们想得那么难。
还有挺多想法的,有些我也没有想的特别明白,这里我就不再展开写了,先暂时写这么多啦。
希望这些内容能够给大家带来一些帮助,谢谢。