关注公众号,与我1对1沟通~

程序员如何把控自己的职业(陈皓--左耳朵耗子)

背景

最近,许多小伙伴留言说自己比较焦虑和苍茫。

这让我想起来之前看的 陈皓老师 的文章,这篇文章协助我许多,也期望它能协助更多的人。

因此转发~~

正文

文章转发自《陈皓(左耳朵耗子)》:coolshell.cn/articles/20…

这篇文章的主要内容主要是我本年3月份在腾讯做的直播,主要是想让一些技能人员对国际有一个大体的知道,并且在这个知道下能够有一个好的办法成果自己。而不是在一脸蒙圈的状况下趁波逐浪,而日益苍茫和焦虑。直播完后,腾讯方面把我的直播构成文字的方式发了出来,我觉得我能够再做一个精编版。所以,有了这篇文章,期望对咱们有协助。

对我来说,在我二十多年的作业阅历来看,期间阅历了许多技能的更新换代,整个技能形式、事务形式也是一向变来变去,咱们这群老程序员生长中所阅历的技能比今日的程序员玩的还更杂更多。我罗列一下我学过的,并且还被选择掉的技能,咱们先感受一下。

- 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这样的东西,所以,能完结的东西或质量都一般。

当然,这儿并不是想做一个比较,仅仅想让咱们了解一下两代程序员间的一些问题各有千秋,迥然不同。在整个生长进程中,其实有许多东西是相通的,其本上来说,便是下面的三件事——

榜首,假如想要把控技能,应对这个国际的一些改动,需求大致知道这个国际的一些规则和发展趋势,别的还得知道自己,自己究竟合适做什么?在这个趋势和规则下属于自己的发挥领域究竟是什么?这是咱们每个人都需求了解的。

第二打牢根底,以不变应万变,不论国际怎样改动,我都能很快适应它。根底的重要程度关于你能够飞多高是相当有影响的,懂原理的人比不明白原理的人能做出来的作业或是能处理的问题彻底是两个层级的。

第三,提高生长的功率,由于现在社会的节奏实在太快了,比二十年前快得太多,技能层出不穷,所以咱们的生长也要更有功率。功率并不单指的快,功率是怎样样更有用,是有用功除以总功(参看《加班与功率》),怎样学到更有用的东西,或者怎样更有用学习,是咱们需求掌握的另一要害。

下面是我这多年来的一些知道,期望对你有协助。

目录

  • 国际发展趋势
  • 人才需求
  • Google评分卡
  • 知道自己
  • 打好根底
  • 学习功率
  • 小结

国际发展趋势

我个人阅历的信息化革新应该分红三个阶段:

  • 1990年代到2000年,这个年代MB年代,是yahoo、新浪、搜狐、网易门户网站的年代,这个年代便是ISP/ICP互联网提供商,把一些资讯数字化,然后发布到网络上。
  • 2000年到2010年,这个年代叫GB年代,或是叫多媒体或UGC年代,上网开端变得普遍了,每个人手里的数码设备开端变得多了起来,能够上传照片,能够上传视频,乃至能够在网上做交际。
  • 2010年到2020年,这个年代叫TB年代,这曩昔的十年是移动互联网年代,移动互联网只需求手机在线,不需求依托电脑。由于手机随时在线,所以个人的各种各样的数据一直在被搜集,只需用户上网就会产生数据,所以人的行为最终也被数字化了。

一切的硬件和软件都是跟着需求处理的数据而演进的,咱们需求更大的带宽,更大的硬盘,更多的处理器……大到一定时分就只能进入散布式化的技能架构了,再大,数据中心也顶不住了,就会要引入更为散布式的边际计算了。

另一方面,从事务上来看,咱们能够看到整个国际就在不断地进行数字化,由于,只需数字化了,就能够进行复制传播和计算,只需能够进行计算了,就能够进行数学建模,就能够主动化,只需能够主动化了就能够规划化,只需或许规划化了,就能够改动整个职业。人类的近代史的大趋势根本上都是在处理动力和主动化的事,源源不断的动力是让机器不知疲倦的前提条件,用机器替代牲口,替代人类进行作业是规划化的前提条件。

所以,技能的演进规则根本是主动化加规划化,然后降低成本,提高功率。这便是为什么国际变得越来越快,人类都快跟不上节奏的原因,主要是整个社会不断被机器、数据所驱动。

人才需求

在这个进程中,需求什么样的人?下面是我的一些知道——

  • 技工,在机器和主动化面前,肯定是需求能够操作机器的技能工人了,这类人是有技能的劳动力。在编程的圈子里俗称“码农”,他们并不是真实的工程师,他们仅仅电脑程序的操作员,所以,跟着技能门槛的下降或是技能方式的改变他或许就会变得越来越不值钱,直到被选择掉
  • 特种工,这种人是有必要了解原理和处理难题的一类人,他们是处理比较难的、特定的一些技能问题。当一种技能被选择,他并不简单被选择,由于他懂原理,原理便是处理问题的才干,是处理问题的套路和办法
  • 工程师,不光是运用技能,还能够把活儿做好,他们认为代码更多的时刻是在保护,这些人运用各种各样的手段和各种技能,精雕细镂地持续不断地进步代码的易读性、扩展性、可保护性和重用性,这个进程好像永无止境。关于这些有“洁癖”,有“工匠精神”,有“涵养”的技能人员,咱们称他们为工程师。这种人干事又稳又快,并且能够做出许多称手的东西和办法论
  • 再往上是规划师和架构人员,这些人主要是开发一些东西,框架,形式,提高软件开发和保护功率,一起也提高用户体验,和提高稳定性、性能、代码重用等,总的来说便是为了降本增效。这类人的作业降低了技能得到门槛,他们把技能门槛降低了今后,就能够把这个技能遍及开来,就能够由广阔劳工、技工、特殊工人运用了。
  • 还有一类人是司理,司理主要是组织团队、完结项目、创造利润。这类人中,即有身先士卒的leader,也有高高在上的boss,但不论怎样样,这些人只不过是为了让一个公司或是一个团队更好组织在一同的“粘合剂”,这类人只要在大公司中才会变成更有价值。

这便是我总结的国际需求哪些人才,咱们了解这些东西今后大约就明白咱们现在所在的位置有什么样的问题,咱们应该去什么样的当地。

Google评分卡

接下来,咱们再来看看Google的SRE的自我评分卡:

0 – 关于相关的技能领域还不了解
1 – 能够读懂这个领域的根底常识
2 – 能够完结一些小的改动,清楚根本的原理,并能够在简单的指导下自己找到更多的细节。

3 – 根本精通这个技能领域,彻底不需求他人的协助
4 – 对这个技能领域十分的了解和舒适,能够应对和完结一切的日常作业。

  • 关于软件领域 – 有才干开发中等规划的程序,能够娴熟和掌握并运用一切的言语特性,而不是需求翻书,并且能够找到一切的冷常识。
  • 关于体系领域 – 掌握网络和体系管理的许多根底常识,并能够掌握一些内核常识以运维一个小型的网络体系,包括康复、调试和能处理一些不常见的毛病。

5 – 关于该技能领域有十分底层的了解和深化的技能。

6 – 能够从零开发大规划的程序和体系,掌握底层和内涵原理,能够规划和布置大规划的散布式体系架构
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

这个评分卡是面试Google前需求提名人对自己的各种技能进行自评,也算是一种技能人员的等级的度量尺,其把技能的能分红11个等级,我用颜色把其它成四大层级,期望这个评份卡能够给你一个才干提高的参阅规范。

知道自己

知道了国际是怎样发展的,也知道技能人员的品种和层级,那么还要了解一下自己,由于假如不了解自己,那么你也无法找到自己的路和合适自己的当地。

我觉得,一个人要知道自己就需求知道自己的专长、爱好、热心、拿手等,下面是一个知道自己的规范办法:

  • 专长。首先你要找得到自己专长。你要知道自己的专长,找到自己的天赋,找到你在DNA里比他人强的东西,就拿你的DNA跟他人竞赛就好了。所以你要找到自己能够干成的事,找到他人找你讨教的事,你身边人找你讨教便是阐明你有专长。这是找到自己专长十分十分重要,取长补短。
  • 爱好。假如你没有找到自己专长,就找自己有爱好有热心的东西。什么叫爱好?爱好是再难再累都不会抛弃的事。假如你遇到困难就会抛弃不叫爱好,那叫叶公好龙。不怕困难,痴迷其中,就算你没有专长,有了这种特质,你也是头部的人才。
  • 办法。假如你没有专长,没有爱好和热心就要学办法。这种办法便是要有时刻观念,要会做计划,要懂统筹、规划关于做过的作业,犯过的过错多总结,举一反三,喜欢自己找答案,自己探求因果关系,这是一些办法,自己总结一些套路。
  • 勤勉。 假如你没有专长,没有爱好,也没有办法,你还能做的事便是勤勉,勤勉注定会让你成为一个比较劳累的人,也是很有或许被选择的人跟着你的年岁越来越大,你的勤勉也会越来越不值钱。由于年轻人会比你更勤勉,比你更勤勉、比你斗志更强,比你才干更强,比你要钱更少的人会出现。勤勉最不值钱,可是只需你勤勉至少能够自力更生。

以上便是为了应对未来技能改动,作为个人有必要要从专长、爱好、办法一层一层选择挖掘,假如没有这些你就要努力和勤勉。就只能接受“福报”了

从我个人而言,我不算是特别聪明的人,但自认为对技能仍是比较感爱好的,难的我不怕。有许多比较难啃的技能,聪明点的人啃一个月就懂了,我不可,我或许啃半年。可是没有关系,常识都是死的,只需不怕困难总有一天会懂的。最可怕是畏难,为自己找借口,这样就不太好了。

打好根底

最前面说到我学的各式各样的被选择的技能,会让你感觉很苍茫,或是迷失。但前面也说到了“谷歌评分卡”,在这个评分卡中,咱们看到了许多根底原理方面的内容,其实要应对未来的改动,很重要的一点便是无招胜有招,以不变应万变。

改动都是外表的东西,内涵的东西其实并没有太多的改动。理论层面上变得不多,反而方式上的东西今日一个花样,明日一个花样,所以假如要去应对这种改动,就一定要打牢自己的根底,提高内功涵养。比如像编程的一些方式和套路,润饰形式原理实质,解耦,提高代码的重费用等。提高代码重费用有必要解耦,要跟现实解耦,提高抽象,这些都是一些技能根底。不论用什么言语,都是这么做的。

打牢根底就能够打破瓶颈,不打牢根底没有办法打破瓶颈。在技能国际不要觉得质变会构成质变,这是不或许的。技能这个东西就像搞建筑砌砖头,砌砖头砌的再多也不或许让你能成为一个架构师的,由于你不明白原理,不明白科学办法,你就不或许生长上去的,就像学数学相同,当你掌握了微积分这种大杀器后,你解题的才干是无所披靡,而微积分这种方式肯定不是你能“质变”出来的。

所以你有必要学习根底的理论常识,假如不学这些根底理论常识,还要学习解题思路和办法,假如你只学在外表,那么当这个技能的方式有改动,就会发现曾经学的都没用了,要重头学一遍。掌握技能根底能够让自己找到答案和常识,根底是抽象和归纳,很简单构成进一步的推论。咱们学的许多技能完结都逃不脱根底原理,不论是Java,仍是其他言语,只需用TCP用的都是相同的原理,逃不出范围,只需抓住原理,举一反三,时刻一长了,乃至还能够自己推导答案。关于技能的根底,我会把其它成四类:

  • 程序言语:言语的原理,类库的完结,编程技能(并发、异步等),编程范式,规划形式……
  • 体系原理:计算机体系,操作体系,网络协议,数据库原理……
  • 中间件:消息队列,缓存体系,网关署理,调度体系 ……
  • 理论常识算法和数据结构,数据库范式,网络七层模型,散布式体系……

这些常识其实便是一个计算机科学专业的学生他所要学习的原理,但可惜的是,咱们的一些学校教得也很糟糕,不光老师才干缺乏,并且放着国际上最优秀的教课书不必了,一定要自己写一本。讲也讲不全,还有各种过错,哎……总之,假如你学习用用到的教材不可,那么能够肯定的是你的学习功率一定是很糟糕的。这便是为什么咱们大学上完了,仍是跟个傻瓜相同,还要在作业中再重新自学。

不过,就算自学,这些根底技能大约需求四五年的时刻堆叠。我作业二十年了,这二十年来根本仍是这些原理没变,不论方式怎样变,可是中心永久仍是这些,理论创新很难,这是以不变应万变

学习功率

程序员如何把控自己的职业(陈皓--左耳朵耗子)
谈到学习功率,就需求拿出这张学习金字塔的图来了。从图能够看到学习办法散布两层,一种是被迫学习,也是浅度学习,听讲,阅读,视听,演示都是在被迫学习,而与人讨论,自己动手实践,教授给他人是主动学习。主动学习咱们称之为深度学习,假如你不能深度学习,你就不能真实学到东西。这也是你会经常有“学那么多干什么,不必就忘了”,这便是浅度学习的症状了。

下面,我给出一些我自己觉得不错的学习经历:

1、选择一手常识和信息源。 关于学习办法:榜首咱们一定要到常识源去选择常识,常识信息源十分要害,二手信息丢掉太大了,谭浩强写的书就丢掉太多信息了。现在计算机一手常识根本都是国外的,所以英文十分重要。我鼓舞咱们一定读榜首手的材料。假如你英语有问题,至少要看翻译过来,最好是原汁原味翻译的,不要我了解了给你讲那种,那种也是被他人嚼一遍再讲给你你没有领会,是他人带着你,他人的领会会影响你,也许你的领会会比他更好,由于是你自己总结出来的东西,所以常识源很重要。

2、注意原理和根底 第二要重视根底原理。尽管能够忘掉这个技能,可是原理记在心里,我能够徒手完结出来,并且经过原理能够更快学习其他类似的技能。所以原理很重要!当你学会C、C++要学Java和GO都很快。

3、运用常识图谱 一定要学会运用常识图,把常识结构化。从一个技能要害点开端不断地相关和细化下去,比如:关于TCP协议,首先榜首个要记住状况图,怎样树立衔接,怎样断衔接,状况怎样变迁。TCP没有衔接,是靠状况保护衔接的。其次,要了解TCP怎样保证可靠性,便是丢包今后怎样重传,重传有哪些技能点。然后,重传会让你联想到拥塞操控,拥塞操控到滑动窗口……。这根本便是TCP的一切东西了,找到要害点,然后顺着这个头绪一点点往下想,经过常识图相关就能够进行顺藤摸瓜。咱们不需求记一切常识,那些手册的常识不需求记,你知道在哪里能找到就能够了。你脑子里面要有地图,学一个东西就跟在城市日子相同,闭上眼睛就知道地图,A点到B点怎样去大约方向要知道。我在北京我去广州,广州在南边,我大约坐飞机仍是火车要心里有数。。

4、学会举一反三。便是用不同办法学一个东西,比如说学TCP协议,看书是一种办法,编程是别的一种办法,还有用做Debug去看的,用不同办法学一个东西会让你愈加了解,你学一个常识的一起把周边也学了。比如说学前端能不能把HTTP学一下,比如说长衔接、短衔接,包括hp1、hp2有一些不相同的东西。

5、总结和归纳。 只要学会总结和归纳,才干构成自己的思想框架、自己的套路、自己的办法论,今后学这个东西应该怎样学。就像学一门新的言语,不论GO言语,仍是Rust言语,榜首件作业便是了解内存是怎样管理的,数据类型什么样,第二是泛型怎样搞,第三是并发怎样弄。还有一些抽象怎样弄,比如说怎样解耦,怎样完结多态?套路这种东西只要学的多了今后才干构成套路,假如你只学会一门言语不会有套路,你要每年学门言语,不必学多精,你考虑这个言语有什么不相同,为什么这个这种有玩法,那个有那种玩法,这些东西考虑多了套路办法论就出来了。比如说Windows和Linux有什么不同,Linux和Unix又有什么不同?只要总结自己的框架、套路和办法,这些才永久不会被选择。

6、实践和坚持。 剩余便是多做多练,多坚持,只要实践才会有经历,只要训练了才干够把自己的脂肪变没,所以,要把常识变成技能有必要练,就像小学生学会加减乘除,仍是要演练,有必要多做题,题目做得多了,自然掌握得好。要选择好的常识源,重视原理技能,有一些原理的根底的书太单调,可是我告诉你学习这些根底太值得投入时刻,搬砖赚几十元不值得,由于赚的是辛苦钱,老了就赚不了,有必要要赚更有才干的钱,这是学习投资。

小结

好了,该到这篇文章收尾的时分了,小结一下,假如你想更好的掌握年代,提高自己,你需求知道这个年代的趋势是什么,需求什么样的人,这些人需求什么样的才干,这些才干是怎样获得的,投入到根底常识的学习就像“基建”相同,假如根底不好,不能长高,学习才干也是需求适应这个快速年代的重要的根底才干,没有好的学习才干,很快就会掉队被选择。

这些东西,是我从业二十年来的总结和领会,期望对你有用。