大佬工作这些年来,经常会有同学来找大佬沟通学习和成长,他们的问题整体可以归结为两个。
技术提升出现瓶颈
,学不到新知识,完全没有办法实践各种新技术,以后会不会被淘汰、找不到工作?英语水平很低
,看不了英文的技术资料,更别说去外企找工作了。知识网络的搭建就是在造楼房:
基础
也就是地基的承载力,决定了你能把楼造多高;广度
就像是把房子造大、造宽;深度
就是楼房的高度。因此,如果你想要提升自己的水平,那这三个方面的发展缺一不可。
虽说工作经历和项目经验是实践技术、提升技术的一个重要手段,但不可能所有的工作经历和项目都能持续地提升我们的技术。
所以,我们要想提升自己的技术水平,就必须打消仅仅通过工作经历来提升的念头,要靠业余时间主动地
持续学习和积累来提升。
比如,你可以针对项目中用到的技术,全面阅读官方文档,做各种 Demo 来论证其技术特性。
在这个过程中,你一定还会产生许多技术疑问,那就继续展开学习。
学对技术进行分享
和总结
,在各大论坛博客上进行写自己的博客内容;
博客内容可能是技术本身,也可能是你对这个技术自己的理解。
这样子时间长了,就会有在分享技术的同时也提升了自己的水平。
大佬之前加入一家公司组建新团队后,在做技术选型的时候,考虑到成本等因素,放弃了从事了七年的.NET 技术,转型 Java。
针对有了.NET 的积累,大佬自己转型 Java 只用了两周。其实,一开始做这个决定非常痛苦,但是突破自己的舒适区并没有想象得那么困难。随后,大佬又自学了 iOS、深度学习、Python 等技术或语言。
随着掌握的技术越来越多,这些技术不但让我触类旁通,更让我理解了技术只是工具,解决问题需要使用合适的技术。
因此,大佬也建议你,利用业余时间多学习几门不同类型的编程语言,比如 Java、Python 和 Go。
有些时候,我们因为恐惧跳出舒适区
而不愿意学习和引入合适的新技术来解决问题,虽然省去了前期的学习转型成本,但是后期却会投入更多的时间来弥补技术上的短板。
这里的“基础
”是指,和编程语言无关的那部分知识,包括硬件基础、操作系统原理、TCP/IP、HTTP、数据结构和算法、安全基础、设计模式、数据库原理等。
学习基础知识是比较枯燥的过程,需要大块的时间来系统阅读相关书籍,并要尝试把学到的知识付诸实践。
只有实践过的技术才能映入脑子里,否则只是书本上的知识。比如,学习 TCP/IP 的时候,我们可以使用 Wireshark
来观察网络数据。
又比如,学习设计模式的时候,我们可以结合身边的业务案例来思考下,是否有对应的适用场景,如果没有能否模拟一个场景,然后使用所有设计模式和自己熟悉的语言开发一个实际的 Demo。
这些看似和我们日常业务开发关系不大的基础知识,是我们是否能够深入理解技术的最重要的基石。
对开发者而言,技术深度体现在从一个框架、组件或 SDK 的使用者转变为开发者。
虽然不建议大家重复去造轮子、造框架,但我们完全可以阅读各种框架的源码去了解其实现,并亲手实现一些框架的原型。比如,你可以尝试把 MVC、RPC、ORM、IoC、AOP 等框架,都实现一个最基本功能点原型。在实现的过程中,你一定会遇到很多问题和难点,然后再继续研究一下 Spring、Hibernate、Dubbo 等框架是如何实现的。
当把自己的小框架实现出来的那一刻,你收获的不仅是满满的成就感,更是在技术深度积累上的更进一步。在这个过程中,你肯定会遇到不少问题、解决不少问题。有了这些积累,之后再去学习甚至二次开发那些流行的开源框架,就会更容易了。除了实现一些框架外,我还建议你选择一个中间件(比如 Redis、RocketMQ)来练手学习网络知识。我们可以先实现它的客户端,用 Netty 实现 TCP 通信层的功能,之后参照官方文档实现协议封装、客户端连接池等功能。
在实现的过程中,你可以对自己实现
的客户端进行压测,分析和官方实现的性能差距。这样一来,你不仅可以对 TCP/IP 网络有更深入的了解,还可以获得很多网络方面的优化经验。
然后,再尝试实现服务端,进一步加深对网络的认识。
最后,尝试把服务端扩展为支持高可用的集群,来加深对分布式通信技术的理解。在实现这样一个分布式 C/S 中间件的过程中,你对技术的理解肯定会深入了许多。在这个过程中,你会发现,技术深度的“下探”和基础知识的积累息息相关。基础知识不扎实,往深了走往往会步履维艰。
这时,你可以再回过头来,重新系统学习一些基础理论。
除了之前提到的多学几门编程语言之外,在技术广度的拓展上,我们还可以在两个方面下功夫。
阅读大量的技术书籍
。新出来的各种技术图书(不只是编程相关的),一般我都会买。十几年来,我买了 500 多本技术图书,大概有三分之一是完整看过的,还有三分之一只翻了一个大概,还有三分之一只看了目录。广泛的阅读,让我能够了解目前各种技术的主流框架和平台。这样的好处是,在整体看技术方案的时候,我可以知道大家都在做什么,不至于只能理解方案中的一部分。对于看不完的、又比较有价值的书,我会做好标签,等空闲的时候再看。搭建和配置这些组件
,在遇到性能问题的时候自己着手分析一下。把实现技术的前后打通,遇到问题时我们就不至于手足无措了。我通常会购买公有云按小时收费的服务器,来构建一些服务器集群,尝试搭建和测试这些系统,加深对运维的理解。为啥要单独说英语的学习方法
呢,这是因为学好英语对做技术的同学非常重要:
所以说,学好英语可以整体拓宽个人视野。不过,对于上班族来说,我们可能没有太多的大块时间投入英语学习,那如何利用碎片时间、相对休闲地学习英语呢?
还有一个问题是,学好英语需要大量的练习和训练,但不在外企工作就连个英语环境都没有,那如何解决这样的矛盾呢?接下来,我将从读、听、写和说四个方面,和你分享一下我学习英语的方法。
读对于我们这些搞技术的人来说是最重要的,并且也是最容易掌握的。我建议你这么学:
阅读身边的技术文档
开始,有英语文档的一定要选择阅读英语文档。
ChinaDaily
。
技术方面阅读能力的培养,通常只需要三个月左右的时间,但生活方面资料的阅读可能需要一年甚至更长的时间。
读需要积累词汇量,听力的训练需要通过时间来磨耳朵。
每个人都可以选择适合自己的材料来磨耳朵
,比如我是通过看美剧来训练听力的。我就以看美剧为例,说说练听力的几个关键点。
确保看美剧时没有中文字幕
,否则很难忍住不看,看了字幕就无法起到训练听力的效果。如果看美剧不适合你的话,你可以选择其他方式,比如开车或坐地铁的时候听一些感兴趣的 PodCast 等。总而言之,选择自己喜欢的材料和内容,从简单开始,不断听。如果你有一定词汇量的话,查字典其实不是必须的,很多时候不借助字典,同一个单词出现 10 遍后我们也就知道它的意思了。一定要记住,在积累 1000 小时之前,别轻易放弃。
如果有外企经历,那么平时写英语邮件和文档基本就可以让你的工作英语过关;
如果没有外企经历也没关系,你可以尝试通过下面的方式锻炼写作:
再和你分享一个小技巧。当你要通过查词典知道中文的英语翻译时,尽量不要直接用找到的英文单词,最好先在英语例句中确认这个翻译的准确性再使用,以免闹笑话。
训练说英语的机会是最少的,毕竟身边说英语的人少,很难自己主动练习。这里我和你分享两个方法吧。
对话课程来训练
。这些课程一般按小时计费,由母语是英语的人在线和你聊一些话题,帮助你训练对话能力。买不买课程不重要,只要能有母语是英语的人来帮你提升就可以。同时,大量的听力训练也可以帮助你提升说的能力,很多英语短句经过反复强化会成为脱口而出的下意识反应。所以,你会发现在听力达到质变的时候,说的能力也会上一个台阶。大胆说
,不要担心有语法错误、单词发音问题、表达不流畅问题而被嘲笑。其实,你可以反过来想想,老外说中文时出现这些问题,你会嘲笑他吗。这里有一个技巧是,尽量选用简单的表达和词汇去说,先尝试把内容说出来,甚至是只说几个关键字,而不是憋着在脑子里尝试整理一个完整的句子。灵活运用有限的单词,尽可能地流畅、准确表达,才是聪明的做法。如果你感觉学得很累、进步很慢,也不要放弃,坚持下来就会越来越好。我刚毕业那会儿,有一阵子也对 OOP 很迷茫,感觉根本无法理解 OOP 的理念,写出的代码完全是过程化的代码。
但我没有放弃,参与写了几年的复杂业务程序,再加上系统自学设计模式,到某一个时刻我突然就能写出 OOP 的业务代码了。学习一定是一个日积月累、量变到质变的过程,希望我分享的学习方法能对你有启发。
不过,每个人的情况都不同,一定要找到适合自己的学习方式,才更容易坚持下去。持续学习很重要,不一定要短时间突击学习,而最好是慢慢学、持续积累,积累越多学习就会越轻松。
如果学习遇到瓶颈感觉怎么都学不会,也不要沮丧,这其实还是因为积累不够。你一定也有过这样的经验:
一本去年觉得很难啃的书,到今年再看会觉得恰到好处,明年就会觉得比较简单,就是这个道理。
以上是大佬的分享记录:总结一个词重在坚持