我总是感觉自己在盲目的学习一些看上去很火热的技术。比如 React Native,Flutter 等等。我家里堆了各种编程语言的入门书籍,有 Go 的,有 Erlang 的,有 c++ 的,还有 JavaScript 和 CSS。
我到现在都搞不懂这个事情。我连主流的 Python 语言都没有掌握清楚为什么要去看这么多语言的入门书呢?我在工作和生活中根本就用不到他们。只是因为在某一篇文章中看到 Go 语言是趋势,Erlang 的稳定性无人能敌,c++ 你永远都让不开等等。这些东西我都研究过,可是到现在为止还没有用他们写过一行有用的代码。
相信很多童鞋都有类似的情况。程序员学习新技术的想法是件大好事,总比不思进取的思想状态要好,可结果却并不一定比原地踏步强,因为不一定有用,会造成技术浪费。
浪费的事情我们生活中做得很多。我们想要买更贵的手机,因为 cpu 更强,可是很多人并不一定需要那么强的 cpu。本来只需要买个上网本看看电视却要买个工作站。我们的理由自然也很充足:万一有一天要用到呢?万一有一天我需要玩游戏呢?万一有一天我要 3D 渲染呢?追求新技术的理由也同样:万一以后它火了,我就走在了时代的前面。
这种情况确实有可能发生,前提是你能将这门新技术研究得很透彻,比别人更懂,否则那些基础更强的能用很短的时间就能超越你。
我想在学习新技术之前应该做几件事情:
先了解自己的需求是什么?在未来 3-5 年内的主要工作是 python 开发,那就应该围绕这个需求来学习。首先是 Python 的高级特性和工程设计思想,这些都落实在具体的实践上,需要积累大量项目经验,可以自己选择一些 side project 练习。自己做的时候还应该参考优秀的开源框架,看看别人的设计思路和实现方式。
需要了解 web 原理。像 HTTP 协议、TCP/IP 协议都需要精通,这样才能站在更基础的层面来进行开发,不是在网上找几套解决方案就能做出一套好的系统。看完基本经典书籍以后,要学会用抓包工具来分析流量走向,定位问题的能力。
需要性能优化。要熟练掌握各种算法和数据结构,知道常用算法的应用场景和复杂度。学好算法基础就要去看 python 的各种内置函数实现他们的性能如何,你写出来的代码性能如何。
性能还需要涉猎并发和异步知识。这些东西往往是操作层面的,可以先熟悉多进程、多线程和协程等在 python 的应用,消息队列等各种异步操作的实现,但是迟早还是要深入研究操作系统是怎么去进行资源调度的,《深入理解计算机系统》就该去看一看了。
在这个过程中,还应该看一看《重构》《程序员修炼之道》这样的方法论书籍,争取能形成一套自己的编码和改进体系。
在工作中应该尽量避免的问题是原地踏步、google 编程,这次搜索完一套方案下次还是不知道,几年做的都是重复的事情。盲目追求新技术,拼命加班改 bug 都是技术领域尽力要避免的陷阱,看起来非常努力,实际上是在原地不动。
学习应该是有目的的,不是看着哪个火就去学哪个。小时候都学过捡了芝麻丢了西瓜的课文,现在正是不停的在重蹈覆辙,学这个,学那个,最后自己的真正专业都没有做好了。一门技术的探究最终都会落到基础知识上,编译原理、操作系统、算法和数据结构。如果学好了一门技术真正落实到了基础上,去学另一门技术不应该是很难的事情。
在确定了方向以后把重心放在自己的方向上,平时可以花少量的时间来关注新技术,看看他们的应用领域和简单实现。喜欢玩手机并不代表每个品牌的手机都要买回来天天使用,那是职业测评师干的事,我们的思路是买一个牌子的当主力机,一个当备用机,其他的偶尔去专卖店感受一下就可以了。
在项目的技术选型上也应该遵循以需求为重心的原则。如果不是高并发的项目为什么要使用热门语言 Go 呢?用 python 快速实现行不行?现在的技术团队有几个人懂这门语言,外面招人好招吗?现有人员培训需要多久呢?一定要用微服务吗?一定要用docker吗?很多都没有必要的!只是自己给自己挖的一个一个陷阱,把整个团队推进去。
接下来是怎么实现的问题。如果要突然去学非常枯燥和底层的操作系统原理,肯定会两眼一抹黑。突然从 windows 系统换到 linux 系统也会让人手足无措。一个可行性很高的方案就是渐进式改变。和菜头在一篇文章中写道:如果一家餐厅几十年的口味都不变,那肯定逃不过关门的命运。那些说自己坚持不变的人或者产品往往在发生悄无声息的改变,他们的变化如此微小,以至于你根本察觉不到,多少年以来,微信添加了多少微小的功能,很多都隐藏在 UI 之下,我们像寻宝一样一点点的发现,用习惯了以后就感觉它们从一开始就被设计出来了一样。
要学好操作系统不一定要全心全意去攻克每一个知识点,在工作中接触到了多线程,先看看线程消耗,锁机制和信号量行不行?一点一点来,每天进步一点。人往往会高估短期能力而低估长期能力,这是思维和眼光的局限性导致的。
学习是个非常讲究方法论的事情,盲目的学习是不行的。都是参加高考,为什么那些看上去努力的学生大多成绩平平,天天打篮球、约会的就考上清华北大呢?智商是一方面,不过我到现在都不相信高考能到达人类平均智商的极限,估计方法是更加重要的一面。
万维钢关于学习的话题我觉得是很有意思的,概括几个要点是:循序渐进、逃离舒适区、重复的基础训练。最重要的是要形成整个体系和思维,不然学到的知识都不是自己的。
2
为您推荐
不管是开发、测试、运维,每个技术人员心理多多少少都有一个成为技术大牛的梦,毕竟"梦想总是要有的,万一实现了呢"!正是对技术梦的追求,促使我们不断地努力和提升自己。然而"梦想是美好的,现实却是残酷的",很多..
最近在评审技术方案,和代码review的时候,遇到刚入行的同学们,很多都讲不清楚技术方案。具体表现是:上来不说需求,直接说算法实现。台下一头雾水,根本不知道设计方案是否合理。描述完需求后,又直接看代码,看表..
有一个非常有趣的现象:据说大部分的技术管理者,在其从程序员转为管理岗位的时候,都是在领导或公司的要求下,被动的推到管理岗位上的,并非是自己当初有强烈意愿、主动去选择管理岗的。这种被动的比例还不低,高达..
前言该篇文章是我第一次跟DTCC合作编写的,整篇文章大概8000字,可能花您15分钟阅读。我和DTCC的韩楠老师,共花7了天时间,每天把该文章打磨到晚上12点,在这非常感谢编辑老师的负责与付出。这篇也是我分享里为数不..
传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法;二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread。这两种方式大部分人可能都知道,但是为什么这样玩就..
希望给你3-5分钟的碎片化学习,可能是坐地铁、等公交,积少成多,水滴石穿,谢谢关注。角色转变 从工程师转技术管理这两年,好比头马变成车夫,除了角色认知的转变,还要看方向,定计划。不仅仅是自己拉好车的事情,..
团队基建考虑的因素- 人心稳定性- 团队技能分布:(每个人熟悉的技术栈,技能)- 团队职业规范方向:(谁去当架构师、技术专家、技术经理、交互专家)- 合作意识:(工程师的积极性:主动问询,共同协商)- 团队规范..
背景今天,我们来讨论一个问题:技术实力的本质究竟是什么?在工作中,你可能会遇到,为什么他的实力不如我,他却可以晋升?在面试中,你可能会遇到,我把系统性能优化了10倍,为什么面试官还是看不上我?为什么?到..
VoidZero是一家由Vue和Vite之父尤雨溪成立的技术公司,主要致力于解决JavaScript工具链的碎片化、依赖复杂以及性能瓶颈问题,通过提供一个统一、高性能的开发工具链来改善开发者的开发体验。优点分析统一性:VoidZer..
目前市场上的Oracle书籍普遍存在的问题是模式单一,要么只讲基础知识,要么侧重代码编程实例,要么针对具体的版本特性(Oracle8i/Oracle9i/Oracle10g等),要么缺少实践应用检验,很少能对Oracle相关知识进行全面深..
初次走上管理岗位的技术骨干,总是有很多困惑。为什么比以前写代码还累?怎么让任务安排更合理?为什么总有下属不愿意进步,每天得过且过?诸如此类的问题,本文并不能都给出解决方法。本文的目的是抛砖引玉,如果诸..
开发电脑桌面应用可以使用多种技术栈,具体选择取决于开发者的需求和偏好。以下是一些常见的技术栈:前端开发技术栈:通常使用桌面应用开发框架,如Electron、Qt、JavaFX等。前端开发语言可以选择JavaScript、TypeSc..
从2023年12月15日的最新情况来看,.NET已经淘汰的技术主要有以下几类:.NET Framework 4.8之前的版本:.NET Framework 4.8是.NET Framework的最后一个版本,于2019年11月发布。微软已经宣布,将于2023年11月10日停止..
作为一个.NET架构师,你需要具备以下技术要求:精通.NET平台:作为.NET架构师,你应该对.NET平台和相关技术栈有深入的理解,包括.NET Framework和.NET Core。你应该熟悉.NET编程语言,如C#,以及相关的.NET开发工具..
.NET应用程序的性能优化是确保应用程序在响应时间、吞吐量和资源利用方面具有良好性能的关键任务。以下是一些我在性能优化方面的经验和使用的技术:代码优化:优化代码可以改善应用程序的性能。这包括避免不必要的循..
.NET 是一个开源的跨平台开发框架,它提供了丰富的技术栈,可以满足各种开发需求。以下是一些值得学习的 .NET 技术栈:Web 开发:.NET 提供了用于构建 Web 应用程序的多种技术栈,包括 ASP.NET Core、Blazor 和 ASP...
今天看了一本书叫做《黑客与画家》。它里面提到一个很重要的概念就是黑客(优秀的程序员)是一名建筑师,而不是一名工程师。传统的主管和互联网的Leader这两者有什么区别呢?关键点在于建筑师是思考做什么,而工程师..
.NET 是一个强大的跨平台开发框架,拥有广泛的生态系统和丰富的技术栈。以下是 .NET 最值得学习的技术栈:基础技术C#:C# 是 .NET 平台的首选编程语言。它是一种现代、强类型的语言,具有良好的开发人员体验。.NET C..
马斯克会写代码吗?埃隆·马斯克(Elon Musk)有编程背景,并且曾经编写过代码。他在年轻时学习编程,并在创业之前在硅谷担任过软件工程师。他的第一份工作是在一家游戏开发公司Zip2,担任Web开发工程师。在此期间,..
微软在3月17日宣布了它的新计划,将人工智能引入其最知名的办公软件Office365,包括 Outlook、PowerPoint、Excel 和 Word,并承诺改变数百万人每天的工作方式。微软公司宣布 Microsoft 365 用户将很快能够使用该公司..