左耳朵耗子:程序员如何把控自己的职业?
陈皓(左耳朵耗子)
读完需要
17分钟速读仅需 6 分钟
20 年软件开发相关工作经验,10 年以上项目和团队管理经验。擅长底层技术架构,团队建设,软件工程,软件研发咨询,以及全球软件团队协作管理。对高性能,高可用性,分布式,高并发,以及大规模数据处理系统有一些经验和心得。喜欢关注底层技术平台和互联网行业应用。技术擅长 C/C++/Java 和 Unix/Linux/Windows。曾于 Amazon 中国任研发经理,负责电子商务全球化业务(全球开店)和全球库存预测系统的研发。曾在阿里巴巴北京研发中心、商家业务部曾任资深专家一职,负责电商云平台、开放平台,云监控和电商多媒体平台。曾在阿里巴巴核心系统专家组从事阿里核心系统和阿里云 ECS 相关的虚拟化平台的开发工作。现在创业中,MegaEase 创始人,致力于为企业的高并发高可用架构提供一整套的技术解决方案和产品。
对我来说,在我二十多年的工作经历来看,期间经历了很多技术的更新换代,整个技术模式、业务模式也是一直变来变去,我们这群老程序员成长中所经历的技术比今天的程序员玩的还更杂更多。
- 陈皓
- MIS应用开发:FoxPro,PowerBuilder,Delphi
- OA:Lotus Notes,VBScripts
- 微软:ODBC/ADO,COM/DCOM,MFC/ATL,J++
- 服务器:AIX,HP-UX,SCO Unix
- Web:CGI,ISAPI,SOAP
- RPC:CICS,Tuxedo
- J2EE:Websphere,Weblogic
- DB:Sybase,Informix
我想说的是,无论过去还是今天,我们这些后浪和你们前浪所面对的技术的挑战和对技术的焦虑感是相似的,我们那个时候不但玩 996,还玩封闭开发(就是一周只能回家一天)。
当然,唯一好的东西,就是比起今天的程序员来说,我们那个年代没有像微信、微博、知乎,抖音这些巨大消耗你人生的东西。
所以,我们的工作、生活和成长都有很效率,不会被打断、喜欢看书、Google 还没有被封……
当然,那时代没有 StackOverlow 和 Github 这样的东西,所以,能完成的东西或质量都一般。
当然,这里并不是想做一个比较,只是想让大家了解一下两代程序员间的一些问题各有千秋,大同小异。
在整个成长过程中,其实有很多东西是相通的,基本上来说,就是下面的三件事:
第一,如果想要把控技术,应对这个世界的一些变化,需要大致知道这个世界的一些规律和发展趋势,另外还得认识自己,自己到底适合做什么?
在这个趋势和规律下属于自己的发挥领域到底是什么?这是我们每个人都需要了解的。
第二,打牢基础,以不变应万变,不管世界怎样变化,我都能很快适应它。基础的重要程度对于你能够飞多高是相当有影响的,懂原理的人比不懂原理的人能做出来的事情或是能解决的问题完全是两个层级的。
第三,提升成长的效率,因为现在社会的节奏实在太快了,比二十年前快得太多,技术层出不穷,所以我们的成长也要更有效率。
效率并不单指的快,效率是怎么样更有效,是有用功除以总功(参看《加班与效率》),怎么学到更有效的东西,或者怎么更有效学习,是我们需要掌握的另一关键。
下面是我这多年来的一些认识,希望对你有帮助。
目录
世界发展趋势
1990 年代到 2000 年,这个时代 MB 时代,是雅虎、新浪、搜狐、网易门户网站的时代,这个时代就是 ISP/ICP 互联网提供商,把一些资讯数字化,然后发布到网络上。
2000 年到 2010 年,这个时代叫 GB 时代,或是叫多媒体或 UGC 时代,上网开始变得普遍了,每个人手里的数码设备开始变得多了起来,可以上传照片,可以上传视频,甚至可以在网上做社交。
2010 年到 2020 年,这个时代叫 TB 时代,这过去的十年是移动互联网时代,移动互联网只需要手机在线,不需要依靠电脑。
因为手机随时在线,所以个人的各种各样的数据始终在被收集,只要用户上网就会产生数据,所以人的行为最终也被数字化了。
人才需求
技工,在机器和自动化面前,肯定是需要能够操作机器的技术工人了,这类人是有技术的劳动力。
在编程的圈子里俗称“码农”,他们并不是真正的工程师,他们只是电脑程序的操作员,所以,随着技术门槛的下降或是技术形式的变更他可能就会变得越来越不值钱,直到被淘汰掉。
特种工,这种人是必须了解原理和解决难题的一类人,他们是解决比较难的、特定的一些技术问题。
当一种技术被淘汰,他并不容易被淘汰,因为他懂原理,原理就是解决问题的能力,是解决问题的套路和方法。
工程师,不但是使用技术,还可以把活儿做好,他们认为代码更多的时间是在维护,这些人使用各种各样的手段和各种技术,精益求精地持续不断地提高代码的易读性、扩展性、可维护性和重用性,这个过程似乎永无止境。
对于这些有“洁癖”,有“工匠精精”,有“修养”的技术人员,我们称他们为工程师。这种人做事又稳又快,而且可以做出很多称手的工具和方法论。
再往上是设计师和架构人员,这些人主要是开发一些工具,框架,模式,提升软件开发和维护效率,同时也提升用户体验,和提升稳定性、性能、代码重用等,总的来说就是为了降本增效。
这类人的工作降低了技术得到门槛,他们把技术门槛降低了以后,就可以把这个技术普及开来,就可以由广大劳工、技工、特殊工人使用了。
还有一类人是经理,经理主要是组织团队、完成项目、创造利润。这类人中,即有身先士卒的 Leader,也有高高在上的 Boss。
但无论怎么样,这些人只不过是为了让一个公司或是一个团队更好组织在一起的“粘合剂”,这类人只有在大公司中才会变成更有价值。
Google 评分卡
接下来,我们再来看看 Google 的 SRE 的自我评分卡:
1 – 可以读懂这个领域的基础知识
2– 可以实现一些小的改动,清楚基本的原理,并能够在简单的指导下自己找到更多的细节。3 – 基本精通这个技术领域,完全不需要别人的帮助
4– 对这个技术领域非常的熟悉和舒适,可以应对和完成所有的日常工作。
对于软件领域 – 有能力开发中等规模的程序,能够熟练和掌握并使用所有的语言特性,而不是需要翻书,并且能够找到所有的冷知识。 对于系统领域 – 掌握网络和系统管理的很多基础知识,并能够掌握一些内核知识以运维一个小型的网络系统,包括恢复、调试和能解决一些不常见的故障。
7– 理解并能利用高级技术,以及相关的内在原理,并可以从根本上自动化大量的系统管理和运维工作。
8– 对于一些边角和晦涩的技术、协议和系统工作原理有很深入的理解和经验。能够设计,部署并负责非常关键以及规模很大的基础设施,并能够构建相应的自动化设施9– 能够在该技术领域出一本经典的书。并和标准委员会的人一起工作制定相关的技术标准和方法。
10 – 在该领域写过一本书,被业内尊为专家,并是该技术的发明人。
SRE 需要自评如下这些技术或技能:
– TCP/IP Networking (OSI stack, DNS etc)
– Unix/Linux internals
– Unix/Linux Systems administration
– Algorithms and Data Structures
– C/C++
– Python
– Java
– Perl
– Go
– Shell Scripting (sh, Bash, ksh, csh)
– SQL and/or Database Admin
– Scripting language of your choice (not already mentioned) _____________
– People Management
– Project Management
认识自己
特长:首先你要找得到自己特长。你要认识自己的特长,找到自己的天赋,找到你在 DNA 里比别人强的东西,就拿你的 DNA 跟别人竞争就好了。
所以你要找到自己可以干成的事,找到别人找你请教的事,你身边人找你请教就是说明你有特长。这是找到自己特长非常非常重要,扬长避短。
兴趣:如果你没有找到自己特长,就找自己有兴趣有热情的东西。什么叫兴趣?兴趣是再难再累都不会放弃的事。
如果你遇到困难就会放弃不叫兴趣,那叫叶公好龙。不怕困难,痴迷其中,就算你没有特长,有了这种特质,你也是头部的人才。
方法:如果你没有特长,没有兴趣和热情就要学方法。这种方法就是要有时间观念,要会做计划,要懂统筹、规划对于做过的事情,犯过的错误多总结,举一反三,喜欢自己找答案,自己探究因果关系,这是一些方法,自己总结一些套路。
勤奋:如果你没有特长,没有兴趣,也没有方法,你还能做的事就是勤奋,勤奋注定会让你成为一个比较劳累的人,也是很有可能被淘汰的人随着你的年纪越来越大,你的勤奋也会越来越不值钱。
因为年轻人会比你更勤奋,比你更勤奋、比你斗志更强,比你能力更强,比你要钱更少的人会出现。勤奋最不值钱,但是只要你勤奋至少能够自食其力。
打好基础
最前面提到我学的各式各样的被淘汰的技术,会让你感觉很迷茫,或是迷失。
但前面也提到了“谷歌评分卡”,在这个评分卡中,我们看到了许多基础原理方面的内容,其实要应对未来的变化,很重要的一点就是无招胜有招,以不变应万变。
程序语言:语言的原理,类库的实现,编程技术(并发、异步等),编程范式,设计模式……
系统原理:计算机系统,操作系统,网络协议,数据库原理……
中间件:消息队列,缓存系统,网关代理,调度系统 ……
理论知识:算法和数据结构,数据库范式,网络七层模型,分布式系统……
学习效率
谈到学习效率,就需要拿出这张学习金字塔的图来了。
小结
出处:https://coolshell.cn/articles/20977.html
精彩文章推荐:
END
#接力技术,链接价值#