17611538698
webmaster@21cto.com

程序员除了写代码,还能做些啥?

资讯 0 2810 2021-01-18 09:42:14
<p><strong>今天是周末,说点正经的话题。</strong></p> <p>&nbsp;</p> <p>如今新冠疫情仍未散去,大概率它将陪伴地球人得几年了。</p> <p>&nbsp;</p> <p>2020年没怎么样就过去了,不少软件开发从业者,比如程序员,工程师,架构师,运维,这些同学会先天有种紧迫感,深怕在某一天陷入一种迷茫不能自己,如果自己某一天不能或不想再干软件开发这一岗位时,该怎么供一家子吃饭?</p> <p>&nbsp;</p> <p>本文将给有这样想法的同学一些启迪,希望能够打开更多新的窗户和可能性。我会详细说明每个职位能做哪些事情,该怎么样才能跨进这些岗位的大门,我们曾经熟悉的软件开发技能和技术知识能够继续发挥神马优势,还有这些工作的更远前景。</p> <p>&nbsp;</p> <p><img alt="" src="https://www.21cto.com/uploads/images/ransomware-cybercriminal-hitn-0-0.png" style="width: 1200px; height: 630px;" /></p> <p><strong>正文现在开始:</strong></p> <p>&nbsp;</p> <p>在过去五年时光里,我做过几十次的演讲,均属于客座角色。</p> <p>&nbsp;</p> <p>关于程序员转型,人们经常会问到这样几个问题:&ldquo;我接下来应该学哪个编程语言?&rdquo;、&ldquo;怎样准备技术面试?&rdquo;、&ldquo;你们那儿还招人吗?&rdquo;</p> <p>&nbsp;</p> <p>当时有一些问题一时也把我问蒙了,没法一下给出最佳答案,问得最多或大多数的想法:&mdash;&mdash;&ldquo;如果有一天,不想当程序员了,那么我该何去何从?&rdquo;</p> <p>&nbsp;</p> <p>最近我也在在思考这个问题,我带过近十年的产品技术团队,我觉得已经做好了迎接新挑战的准备,于是在今年夏天,我开始了技术写作的生涯。</p> <p>&nbsp;</p> <p>在我和第一个客户签约(订单)时,没有觉得技术写作可以像很多职业一样成为程序员的新岗位,没过多久我就发现这件事确确实实是可行的。</p> <p>&nbsp;</p> <p>有一个段子,说是请程序员的孩子们来回答是最好的了。网上流传一句顺口溜:&ldquo;爸爸辛苦买的房,我来考成学区房&rdquo;。</p> <p>一张流行于朋友圈的截图:</p> <p>&nbsp;</p> <p><img _width="428px" alt="" crossorigin="anonymous" data-fail="0" data-ratio="1.0467289719626167" data-s="300,640" data-src="https://mmbiz.qpic.cn/mmbiz_png/X1wOHbVRDnxJT1EHeWf8u1zHnkdiaBptg49XmK7UttQibJ4IhXrCY7gibWuSdWFaSd5GAic688Vxcj0GTelpKAEUew/640?wx_fmt=png" data-type="png" data-w="428" src="https://www.21cto.com/uploads/images/huilongguan-1610934046646.jpg" style="width: 428px; height: 448px;" /></p> <p>下面我就来整理一番。</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><strong>面向客户的岗位</strong></p> <p>&nbsp;</p> <p>人际交往与沟通能力是一项软技能,很多职位都能从中受益,程序员也不例外。但有很多人并不甘心于此,我见过一些人不希望整天静静地坐在那儿写代码,如果你希望职业道路有更多机会和人打交道,以下我介绍的工作岗位会更符合这样式儿的。</p> <p>&nbsp;</p> <p><strong>开发者关系&amp;传道师</strong></p> <p>&nbsp;</p> <p>现在越来越多的公司在努力建立与开发者的关系,而开发人员就是这些公司的客户、用户或拥护者,开发者关系领域也因此迅速地被发展。</p> <p>&nbsp;</p> <p>开发者关系专家(一些企业称为技术文化传播者、开发人员布道者、社区经理或者叫&ldquo;DevRels&rdquo;)负责帮助企业建立一个以软件开发为中心的社区组织。</p> <p>&nbsp;</p> <p>这些人经常参与应用程序的 Demo、撰写技术博客/文章,在技术会议上发表演讲,以及管理技公司的社交媒体账户等。有不少的科技巨头,比如 Facebook、谷歌、亚马逊等都聘请了开发者关系专家团队。</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><strong>开发者营销</strong></p> <p>&nbsp;</p> <p>听名字,似乎这一职位与开发者关系有一点重合,但是相比来说,开发者营销更侧重于外部环境。</p> <p>&nbsp;</p> <p>针对开发者进行营销,其实是比较复杂的事情,因为程序员比较不喜欢&ldquo;卖&rdquo;东西给自己人,因为我们是一群有信仰的科技知识分子。许多较凶猛的营销团队在其它品类市场或许有效,但在技术领域却变成了瘸腿,玩不转。而作为一个有技术背景的人,我们自然更理解开发人员的思维方式,会比传统营销人员有更大的优势。</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><strong>销售工程师</strong></p> <p>&nbsp;</p> <p>话说回来,很多程序员对标有&ldquo;销售&rdquo;字样的工作都不咋太感冒,甚至有点不屑,原因是我们没有遇到好的销售人员或榜样。</p> <p>&nbsp;</p> <p>其实这个星球上的每个人都是销售,无论是在面试过程里,还是在其它任何场合,你都要会&ldquo;推销&rdquo;自己,在面试中还要多说自己的团队用什么最新框架,有多强大多先进等。这些都属于销售范畴,销售肯定不是行骗&mdash;&mdash;它是用最恰当的解决方案去满足客户的需求。</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><strong>技术招聘</strong></p> <p>&nbsp;</p> <p>还有一份职业在软件工程师中的口碑也不太好,那就是技术招聘者。</p> <p>&nbsp;</p> <p>我遇到过一些诚实、真诚的技术招聘人员(例如,来自我的家乡芝加哥的 Taylor Dorsett 和 Matt Hoffman),但我也遇到过一些糟糕、无知的招聘人员,他们只是专注于为完成销售指标而去筛选候选人。</p> <p>&nbsp;</p> <p>好消息是具备软件开发背景的你,会比其他技术招聘人员更有同理心和可信度。和销售一样,这个行业需要更外向、注重人际关系的个性,而不需要专门的证书或课程。</p> <p>&nbsp;</p> <p>坏消息是,许多技术招聘的入门级职位都是在一些低端公司,所以在求职之前一定要先在网上彻查他们的声誉。</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><strong>质量保证或测试</strong></p> <p>&nbsp;</p> <p>虽然质量保证和测试工程师之间存在着细微的差别,但他们的共同点都是在软件上线之前从事测试工作。</p> <p>&nbsp;</p> <p>如果你眼尖心细,喜欢想些创造性的方法来自动化重复的工作,这可能是一条很好的职业道路。它可能需要一些编码以及一些手工测试工作。</p> <p>&nbsp;</p> <p>规模较小的公司一般会让软件工程师彼此之间互测,基本上都是在大公司中才能见到专门的测试和 QA 岗位。公司进行测试的方式有很大差异,所以要清楚他们使用什么工具,他们的测试自动化程度,以及你的岗位需要做多少手工测试和自动化测试。</p> <p>&nbsp;</p> <p><strong>业务分析师</strong></p> <p>&nbsp;</p> <p>产品开发生命周期的另一个节点是业务分析师。它们通常充当业务团队和技术团队之间的桥梁,以确保需求、限制和时间安排得到充分的理解。这一部分取决于团队结构,他们还有可能参与一些测试和质量保证工作,因此他们需要具备丰富的产品知识。</p> <p>&nbsp;</p> <p>如果你具有业务、产品开发或设计方面的背景和一些编码技能,你就可以胜任初级业务分析师的角色。如果还不具备这些条件,我建议你去找一些在线课程来帮助你对这个角色有一个大概的了解,知道它的岗位基本需求是什么。</p> <p>&nbsp;</p> <p><strong>项目经理</strong></p> <p>&nbsp;</p> <p>与业务分析师一样,项目经理必须了解产品的业务需求和技术约束。</p> <p>&nbsp;</p> <p>它们的关键区别在于,项目经理通常会深入参与到某个项目中。他们经常为该项目的团队定义任务和资源,在项目临近发布日期时跟踪项目的进展。</p> <p>&nbsp;</p> <p>较小的公司可能会以各种方式合并业务分析师、项目经理、Scrum Master 和产品经理的角色,而较大的公司可能会单独定义各自的岗位职责。</p> <p>&nbsp;</p> <p><strong>&nbsp;产品经理</strong></p> <p>&nbsp;</p> <p>我在 2019 年花了很多时间学习产品管理,以改善我们在 Graide 网络的产品交付流程。产品经理从整体上看公司的产品,以确保它们是符合预期的(客户想要的),在商业上是可行的(有商业意义的),在技术上也是可行的(我们能做得出来)。像这样能在高层次上思考的能力是很稀缺的,所以如果你拥有这样的能力和一些技术背景,可能会成为一名出色的产品经理。</p> <p>&nbsp;</p> <p>初级产品经理可以从产品中比较小的组件开始入手,或者先来当当项目经理。</p> <p>&nbsp;</p> <p><strong>&nbsp;设计师</strong></p> <p>&nbsp;</p> <p>如果你有设计或艺术背景,可以考虑当一名具有编程能力的 UI 或 UX 设计师,这是一个令你在这一领域脱颖而出的好方法。综合运用这些技能将使你能够更有效地与工程师交流,使用 HTML/CSS 创建交互式模型,而不仅仅是静态图像文件。</p> <p>&nbsp;</p> <p>如果你在设计方面没有太多经验,那就上上课,动手做一个作品集。许多公司也会雇佣没有相关学位的人,只要他们能展示出自己的知识和技能。在我见过的作品集平台中,最常用的是 Dribbble,当然,你也可以选择使用自己的网站。</p> <p>&nbsp;</p> <p><strong>&nbsp;无代码或低代码开发人员</strong></p> <p>&nbsp;</p> <p>在过去的几年里,无代码和低代码开发工具的激增使一些公司可以无需雇佣开发团队即可快速构建软件。这些工具可以让你在数小时内就能创建一款移动或网络应用程序,而不必再花费数周的时间。而且,它们每年都在进步,越来越多的公司开始拥抱无代码应用程序。</p> <p>&nbsp;</p> <p>Makerpad 和 No Code Jobs 是尝试入手这类工作的不错选择。因为这是一个新的领域,你会发现它有着各种不同的技能要求和工资标准,但你会写代码的背景毫无疑问会是一个竞争优势。</p> <p>&nbsp;</p> <p><strong>支持类角色</strong></p> <p>&nbsp;</p> <p>其实,要保持服务器、网站和运维的顺畅运行需要许多员工的帮助,很多新入行的软件工程师都不知道这些幕后的角色。其中一些角色需要编写自动化脚本,或者对服务器管理有深入的了解,但是如果你正在寻找传统产品开发周期之外且又偏技术型的岗位,那么这些角色可能非常适合。</p> <p>&nbsp;</p> <p>&nbsp;系统管理员或 DevOps 工程师</p> <p>大型软件公司每年都有成百上千台服务器需要打补丁、升级和轮换使用。虽然云计算的广泛采用改变了这项工作,将它从物理插拔服务器变成了与 Terraform 和 Kubernetes 这样的软件打交道,但这个领域仍有大量的工作要做。</p> <p>&nbsp;</p> <p>传统上,系统管理员负责根据工程团队的需要维护和管理服务器。随着组织的发展,服务器迁移到云上托管,许多组织都采用了 DevOps 工程师这个头衔,表示提升了这个过程中的自动化程度。实际上,两个角色之间有很多的重叠。</p> <p>&nbsp;</p> <p>无论是其中哪一个,你都需要对操作系统、托管平台、自动化工具、bash 脚本和系统架构有基本的了解。想在这个领域找到入门级的工作是很困难的,因为它需要大量的技术知识储备,但是如果你喜欢不借助于 UI/UX 来解决工程问题,这是一个很好的过渡角色。</p> <p>&nbsp;</p> <p><strong>&nbsp;数据库管理员</strong></p> <p>&nbsp;</p> <p>一些公司将数据库管理员与系统管理员混为一谈,但其实它们属于不同的角色。</p> <p>&nbsp;</p> <p>数据库管理员处理底层数据存储系统的安全性、供应、扩展和优化。如果从事这一岗位,你需要具备 SQL 和 NoSQL 数据库的知识、安全最佳实践以及一些基本的脚本技能,但整天都去编写代码的可能性不大。你还需要关注一些非常小的优化问题,比如调整索引和缓存。</p> <p>&nbsp;</p> <p>如果你是软件开发方面的新手,那么入门的时候请尽可能学习数据库方面的知识。你需要知道哪款数据库适用于哪类应用程序,以及如何对每个数据库进行大规模优化,因此你靠自己一个人是很难做到的。如果你想找一些大型数据集来使用,可以到 Kaggle 看一看。</p> <p>&nbsp;</p> <p><strong>网站可靠性工程师</strong></p> <p>&nbsp;</p> <p>网站可靠性工程师负责解决生产环境中出现的致命问题。这通常意味着他们必须轮流值班,以便时时有人待命以便能&ldquo;随叫随到&rdquo;,所以你的工作时间可能会与大家有点不同。积极的一面是,你将真的能够擅长解决各种不同寻常的问题、编制自动预警和看懂服务器日志。</p> <p>&nbsp;</p> <p>由于网站可靠性的工作要求随时立即做出响应,所以很难做到让富有经验的软件工程师长期担任此类岗位。也就是说,如果你在寻求第一份软件开发的工作时遇到困难,那么它可能是你入行的不错选择。你甚至可能会发现自己喜欢上这种快速解决问题的挑战,喜欢上这种刺激的感觉。</p> <p>&nbsp;</p> <p><strong>&nbsp;技术或客户支持</strong></p> <p>&nbsp;</p> <p>虽然有些工程师害怕与客户打交道,但也有一些工程师觉得整天帮助人们解决问题能让他们活力满满。在软件公司中,你的编码经验将使你成为客户支持这一职位的理想人选,这些公司需要有技术背景的人来回答问题并提出解决方案。</p> <p>&nbsp;</p> <p>在支持团队工作的缺点是,你可能不得不在人家最不爽的时候与人家打交道。心怀不满、满腹怨气的用户可能不愿意与技术支持团队交流,因此你需要极大的耐心和极厚的脸皮才能长期担任这个角色。教学与写作类角色</p> <p>&nbsp;</p> <p>我一直都很喜欢教学,所以我很喜欢那些让自己有机会去做这件事的工作岗位。如果你喜欢把复杂的话题拆解简化并介绍给其他工程师,那么下面几条职业道路可能会适合你。</p> <p>&nbsp;</p> <p><strong>技术写手</strong></p> <p>&nbsp;</p> <p>我在大学的第三个实习工作是在一家大公司做技术写手。这是一份非常枯燥的工作,但我喜欢每天学习新东西。</p> <p>&nbsp;</p> <p>我发现技术写作不仅仅意味着写文档。你可以将目光瞄向技术博客或文案;你可以编写内部或外部文档;你可以编写应用程序演示和教程。对于写手来说,这是收入最高的领域之一,所以值得考虑。</p> <p>&nbsp;</p> <p>显然,如果你走这条路,需要擅长写作,此处还需要能够将复杂的想法有条理地组织起来,并善于学习新东西。你自我改稿的能力越强,你的工作就越有价值,所以一定要在相关工具上投资,让它们帮助你变得更好、更有效率。</p> <p>&nbsp;</p> <p>坚持写博客,当他们经常能搜到你的博客时,就会公认你的影响力和技术实力,在计算机领域,很多人都是靠博客起来的,比如鸿洋、郭霖等等,包括我。你以为,他们一上来就能让出版社约稿?</p> <p>都是持续产出博客,博客关注者多了,出版社觉得你写得好,才会主动找你,邀请你写书的。</p> <p>写博客、写书能使你在行业有一定的地位,当他们在简历上看到你的名字时候,就会油然产生一种大牛的感觉,还在在意你的学历?</p> <p>&nbsp;</p> <p>根本的根本,还是要提升自己的实力,因为在面试时,是要面技术的,所有的外包装都会被揭穿,深入的技术复习只能靠大家自己了。</p> <p>一开始,你可以先为一些付费的社区写作项目写作,然后建立和完善你的关系网和作品集,在此过程中把这些经验转换为一份全职的工作。</p> <p>&nbsp;</p> <p><strong>讲师</strong></p> <p>&nbsp;</p> <p>有几种途径可以让你从软件开发转向讲师岗位。你可以在编程训练营找到一份教学的工作,你可以在大学或高中教书,你也可以创建自己的课程网站。选择什么道路,取决于你的背景和承担风险的能力。</p> <p>&nbsp;</p> <p>但是不管如何,讲师必须能够快速学习新技术新知识,并通俗易懂地呈现给学生。需要适合听众的水平,帮助他们树立起成功的信心,这样才能取得成功。教学的报酬可能比不上软件开发,但它可以成为一个非常令人满意的职业之路。</p> <p>&nbsp;</p> <p><strong>培训师</strong></p> <p>&nbsp;</p> <p>企业培训是另一类教学表现形式,也是一个很值得考虑的选项。培训师可以是独立的咨询师,也可以是大公司的员工,他们通常会到客户办公场所提供特定软件实操的培训。</p> <p>&nbsp;</p> <p>培训师要有非常深厚的专业知识,但也有可能只是一些技术高超的传播者。做企业培训通常比教学收入高,但它也可能更受销售导向的影响。培训师经常在技术峰会上演讲,在社区讲习班讲课,或者在培训课程间隙参加些沙龙聚会等。</p> <p>&nbsp;</p> <p>如果你喜欢在台上讲述技术概念,这可能是一个较理想的职业道路。</p> <p>&nbsp;</p> <p><strong>分析师类角色</strong></p> <p>&nbsp;</p> <p>科技公司的很多职位都需要具备分析能力。虽然它们大多都需要接受一些专门的教育,但是如果你不想从事软件工程方向,还是值得考虑一下的。你的工作节奏将与大多数以产品为中心的工程师不同,像上面提到的支持角色一样,你可能要与公司的其他角色进行交互。</p> <p>&nbsp;</p> <p><strong>数据科学家或数据工程师</strong></p> <p>&nbsp;</p> <p>这两个角色的主要工作职责是用大数据来帮助企业或客户做出更好的精确决策。</p> <p>&nbsp;</p> <p>大数据工程师通常是围绕数据采用,用数据组织流水线开展工作,而数据科学家则是设计实验与算法,将这些数据处理成有用的结果。数据科学(人工智能、机器学习等)是一个立足于数学、软件工程和统计的广泛领域。</p> <p>&nbsp;</p> <p>关于数据科学和工程,有一些专门的课程、训练营和大学专业,但是如果你有很强的数学背景,可以自学一些基础知识。如果没有这方面的背景,可以考虑先温习一下数值分析、线性代数和统计学。</p> <p>&nbsp;</p> <p>这些技能需要花很长时间才能掌握,而且数据科学家的需求量又很大,所以这个职位薪水很高,短期内不太可能消失。</p> <p>&nbsp;</p> <p><strong>安全分析师</strong></p> <p>&nbsp;</p> <p>信息安全角色通常得不到大多数人的广泛关注。虽然每个开发人员都应该对安全漏洞和风险有一定认知,但一般都会专门招聘安全分析人员来查找安全问题,对这些问题给以归类,并提出修复建议。</p> <p>&nbsp;</p> <p>有些安全工作是请独立的顾问来开展的,但是在大公司,可能会有内部的安全团队。这个角色很有意思,因为它既需要掌握技术,还有法律法规,也需要熟悉业务,能够做风险评估。</p> <p>&nbsp;</p> <p>安全岗位也是最难招聘的岗位之一,如果你从事这一工作也会很有安全保障。信息安全是一个非常广阔的领域,如果你有兴趣致力于此,可以增加很多选择。</p> <p>&nbsp;</p> <p><strong>研发</strong></p> <p>&nbsp;</p> <p>对于有软件工程技能的人,在研发部门的工作会成为一种独特的经历。像谷歌和亚马逊这样的大公司会拿出一部分利润由研发团队进行一些高风险且可能会有高回报的实验。</p> <p>&nbsp;</p> <p>这些跨学科的团队可能包括软件开发人员、数据科学家、业务分析师以及项目经理。</p> <p>&nbsp;</p> <p>进入一个优秀的研发团队并不容易。这些岗位往往要面对很强的竞争,并且需要非常专业的知识,这些知识靠书本是学不到的。所以说,有些公司雇佣道德黑客、创始人或多语言达人来帮助团队更加完善,并注入一些创造性思维。</p> <p>&nbsp;</p> <p>独立且灵活的角色</p> <p>&nbsp;</p> <p>虽然有些职业允许我们远程办公,有时甚至有学术休假,但你可能想让自己的生活更加灵活、自由。如果你有动力开始创业,可以选择每周只工作 4 小时,一年花 6 个月的时间来旅行,或者把一半的时间花在开源软件项目上。但是创业并不容易,但是作为一名软件开发人员,相比大多数人有很大的优势。</p> <p>&nbsp;</p> <p><strong>自由职业者与顾问</strong></p> <p>&nbsp;</p> <p>如果想要让自己更加自由,有个方法是辞掉朝九晚五的工作,成为一名自由职业者。这样你可以把自己雇佣给一个或多个客户,他们会按小时付费请你为他们写代码。有的公司会雇佣自由职业者完成短期项目,清偿技术债务,或者在正式员工休假时补个缺漏。</p> <p>&nbsp;</p> <p>咨询师是为客户解决特定问题的高端自由职业者,咨询师也会写代码,但他们的卖点主要是专业知识或独特的背景。自由职业者和咨询师之间界限比较模糊,不必在名称上太过纠结。</p> <p>&nbsp;</p> <p>入行做自由职业者或顾问是比较困难的。如果你没有一个庞大的关系网,可以依靠 Upwork 或 Toptal 这样的平台来寻找客户。这些平台的抽成占你收入的很大一部分,而且还必须与世界各地许多其他自由职业者展开竞争。</p> <p>&nbsp;</p> <p>若你赢得了口碑和声誉,有了自己熟悉的客户,他们的推荐能让你得到更多的工作。推荐的好处在于,客户是基于可信的关系来找你的,而不是在网络上盲目搜索。如果你真的很擅长做自由职业者或咨询工作,可以把你的报酬标准提得足够高,这样每次做完一项工作就可以休息很长的时间了。</p> <p>&nbsp;</p> <p><strong>靠自己,创业做创始人</strong></p> <p>(1)、Github提交MergeRequest,自造轮子</p> <p>在所有的技术面试环节,github所提交的开源项目,是一个非常能展示实力的存在,只要你在简历上写了gitHub地址,所有的技术面试官和简历筛选官,都会去看你的代码,直接看你的技术实力。</p> <p>而且它的流行程度及star量,能提升你的行业影响力,在简历上是一个非常闪光的存在。</p> <p>如果恰巧,他们的项目中有你的开源组件,那恭喜你,这次基本上过了。</p> <p>如果你的开源组件非常流行,那恭喜你,等着大公司来私信你吧。你将会被争抢,此时,谁还会再关心你的学历?</p> <p><strong>(2) 创业</strong></p> <p>&nbsp;</p> <p>你也许也看过各种程序员创业的故事,你可能会觉得创业很简单,也可能是个好主意。</p> <p>&nbsp;</p> <p>但是事实上,这要看情况而定。创业通常需要很长一段时间才能产生收益,所以在你取得成功之前,可能几个月甚至几年都没有收入。话虽这样说,如果你想开一家自己的软件公司,几乎有数不清的优点。</p> <p>&nbsp;</p> <p>有的人也可以一边上班,一边开一家公司。虽然这很难做到(可能会有法律后果),但也并不少见。如果你能找到一两个合伙人一起创业,这样会增加成功的机会。</p> <p>&nbsp;</p> <p><strong>以不变应万变,一直做下去</strong></p> <p>&nbsp;</p> <section powered-by="xiumi.us"> <section> <section> <section>如果你一直做软件开发,也没有问题,不要被一些媒体误导,35岁的危机,如果你能够力够好,性格合群,做一生也没有问题,不管是中国还是外国。以下我们的一些建议:</section> <p>&nbsp;</p> <section><strong>(1&nbsp;)忘记各种程序语言与架构的炒作与热潮</strong></section> <section>&nbsp;</section> <section>不少的新的语言与技术来来去去,作者不是要你别去学习新事物,而是不要因为有太多的新事物而恐慌或是自我放弃。持续钻研你目前在学习的,并且可以每年挑一些你有兴趣的项目深入了解。</section> <section>&nbsp;</section> <section>[反观我自己]:各种后端与前端语言来来去去,我把时间花在学习 Python(会持续), Ruby,Scala(会持续)与 Golang(会持续)。透过使用 Golang 可以有更多的时间去了解系统架构与直接面对问题,让写代码变得更有趣。</section> <section>&nbsp;</section> <section>&nbsp;</section> <section><strong>(2)&nbsp;慎选你的星系</strong></section> <section>&nbsp;</section> <section>为了维持原文的意思,我还是使用星系这个字。这边指的是你学习跟从事的技术要慎选,举例而言,微软星系(泛指: .Net、C# &hellip;.)或是 Apple 星系(Objective C++、Swift &hellip;)。慎选你喜欢的星系,因为那会影响你未来的发展。</section> <section>&nbsp;</section> <section>[反观我自己]:过去十年主要针对微软星系,目前主要就是后端的 Ubuntu 星系 ,各种后端程序语言都是我目前主要的重点,当然还有 Docker 相关技术。</section> <section>&nbsp;</section> <section>&nbsp;</section> <section><strong>(3)了解各种软件的历史</strong></section> <section>&nbsp;</section> <section>作者认为如果你喜欢一种程序语言、一种架构,你就需要好好的了解它的由来与故事。</section> <section>&nbsp;</section> <section>[反观我自己]:比如说我喜欢 Golang ,我就应该要了解以下的一些问题:</section> <section>&nbsp;</section> <section>Golang 是谁发明的?</section> <section>&nbsp;</section> <section>Ans:由 Google 内部的三位大神 Robert Griesemer,Ken Thompson(C 语言的共同发明者)与 Rob Pike(UTF-8 的共同发明者),在 2007 年于 Google 内部共同起草发明。</section> <section>&nbsp;</section> <section>他主要解决什么问题?为何以前做不到?</section> <section>&nbsp;</section> <section>Ans:根据第一份 Golang Talk</section> <section>&nbsp;</section> <section>原因为:</section> </section> </section> </section> <section powered-by="xiumi.us"> <section> <section> <section powered-by="xiumi.us"> <section> <section> <section>● Go fast!</section> <section>●&nbsp;Make programming fun again.</section> <section>●&nbsp;世界在变,但是系统语言却已经十年没变。</section> <section>●&nbsp;系统语言往往编译过久。</section> </section> </section> </section> </section> </section> </section> <section powered-by="xiumi.us"> <section> <section> <section>&nbsp;</section> <section>为何以前做不到:(在旧的程序语言上做不到)</section> <section>&nbsp;</section> <section>新增函数库不是一个正确的方向。</section> <section>&nbsp;</section> <section>需要从新思考整个架构来开发新的程序语言。</section> <section>&nbsp;</section> <section>目前这个技术的最新状况如何?</section> <section>&nbsp;</section> <section>Ans:Golang 目前是 1.6.2 (2016/05/03) ,并且支援 HTTP2 并且可以透过 gomobile 在手机上也可以使用相关套件。</section> <section>&nbsp;</section> <section><strong>(4)持续学习</strong></section> <section>&nbsp;</section> <section>不论你喜欢哪些新的技术或是新的程序语言,你都应该持续的学习,里面并且建议:</section> <section>&nbsp;</section> <section>每年学习一个新的程序语言。</section> <section>&nbsp;</section> <section>每年读六本书。(作者推荐 Peopleware、The Psychology of Software Programming、Facts and Fallacies of Software Engineering、Agile!: The Good, the Hype and the Ugly、Rework 跟 Geekonomics,都是好书。)</section> <section>&nbsp;</section> <section>[反观我自己]:</section> <section>程序语言部分:2014 (Ruby, Scala) 2015 (Go, Swift) 。</section> <section>读书部分:每年读没有超过六本书,但是读过不少论文并且有上过一些 MOOCs。</section> <section>&nbsp;</section> <section><strong>(5)指导其他人</strong></section> <section>&nbsp;</section> <section>这边指的不是一定要开堂授课,你可以写一篇部落格来讲解你学习的新事物,因为教导是最好的学习方式。</section> <section>&nbsp;</section> <section>[反观我自己]:还好部落格从来没停过,个人也认为写部落格的过程可以让我不断地检视我了解的部分,并且弄懂所有的细节(希望!),不过还是希望能够多多指导其他人(比如说 meetup 或是 talk)。</section> <section>&nbsp;</section> <section><strong>(6)虚心地接受任何意见</strong></section> <section>&nbsp;</section> <section>这边我的解读可能跟作者原先的不同。他有提到肤色与种族的优势,但是我想到的却是你的职位,你可能会听到许多来自于部下或是后辈的建议(或是批评)。不要快速地想要反驳或是抵制,充分的了解过后,或许可以坦诚自己的见解或许是有盲点的,必要时甚至可以道歉并且快速修正。如同许多书上有提到的:「你雇用一个员工,一定是要比你还强的,这样你才能将事情交给他办,你自己做更需要更大视野的任务。」</section> <section>&nbsp;</section> <section>[反观我自己]:参加社群后,最容易有这种感觉:太多令人钦佩的后辈了,每个人都有着渊博而清楚的知识。我们不需要否认,更不需要去挑惕或是批评,我们要谦虚的接受并且吸收,成为我们自己的养分。</section> </section> </section> </section> <p>&nbsp;</p> <p><strong>小结</strong></p> <p>&nbsp;</p> <p>软件工程是一个令人兴奋的领域,但它并不适合所有人。这个行业的优点是,即使你离开这一领域去做些别的事情,你已经掌握的技能也不会白白浪费。</p> <p>根据舒伯的职业生涯阶段理论,31~44岁是安定期,程序员应该稳定于一项工作,发现适当的晋升通道,确立自己将来的保障。</p> <p>结合35岁的门槛,大家应该在35岁前,尽量找到合适的下家,这些下家中有纯技术上升通道。</p> <p>很显然,只有大公司才会有纯技术上升通道,比如阿里,中小公司是不太可能有的。所以,走这条路的同学,要想尽一切办法进到大公司中,并且稳定下来。</p> <p>许多人对于在软件开发领域之外找工作有焦虑,我们鼓励你走自己的路。在务实(赚足够的钱来生活)和你的兴趣之间找到平衡点,希望你能找到一条让工作感觉不像是&ldquo;工作&rdquo;的职业道路。</p> <p>&nbsp;</p> <p>下面还给大家整理了网友们提供的一些建议:</p> <p>&nbsp;</p> <p><strong>网友:林中观路</strong></p> <p>&nbsp;</p> <p>代码如果写的好的话,市面上百分之八十的脑力工作都可以胜任。</p> <p>&nbsp;</p> <p>夜清澄:</p> <p>&nbsp;</p> <p>我觉得我去当个户外团队领队还行。。。</p> <p>&nbsp;</p> <p>三十刷阳台山的老司机</p> <p>&nbsp;</p> <p>开!车!了!</p> <p>&nbsp;</p> <p><strong>AyanamiArena:</strong></p> <p>&nbsp;</p> <p>首先明确一点,作为程序员,只会写代码,无法完成工作。那么刨除写代码之外的部分,程序员基本上还是可以在本行混得不错的。首先不转行的,比如去混测试啊,混产品啊,混架构师啊&hellip;&hellip;搞算法的专心去搞理论啊,做业务的专心去跑业务啊&hellip;&hellip;做OA的去弄行政啊,做ERP的去考个财务啊&hellip;&hellip;</p> <p>&nbsp;</p> <p><strong>老蓝人:</strong></p> <p>&nbsp;</p> <p>要饭不错啊,我可以找个好位置坐一天。</p> <p>&nbsp;</p> <p>鉴黄师也阔以,我对自己有信心。</p> <p>&nbsp;</p> <p><strong>Xspuser:</strong></p> <p>&nbsp;</p> <p>至少能:项目经理,研发主管,测试主管,文档工程师,软件测试,培训讲师,销售,服务员,仪表组装等等&hellip;&hellip;</p> <p>&nbsp;</p> <p><strong>嵌入式Windows:</strong></p> <p>&nbsp;</p> <p>做老师</p> <p>&nbsp;</p> <p>当个保安,苦力搬运工</p> <p>&nbsp;</p> <p>做电子,或技术销售</p> <p>&nbsp;</p> <p>做快递员</p> <p>&nbsp;</p> <p>送外卖</p> <p>&nbsp;</p> <p>自己开店当老板</p> <p>&nbsp;</p> <p><strong>贾六:</strong></p> <p>&nbsp;</p> <p>会打鼓、弹吉他、吹口琴、做菜、开车、英语翻译、吹牛逼</p> <p>&nbsp;</p> <p><strong>未来可期123:</strong></p> <p>&nbsp;</p> <p>首先,我觉得能做程序员的都不是一般人,所以不能用一般人的眼光去看待程序员,也不能用一般人的想法来回答这个问题。我觉得要用专业的角度来分析它,才能给出满意的答案。</p> <p>&nbsp;</p> <p>让大伙失望了,此处没有华丽的分割线。</p> <p>&nbsp;</p> <p>写代码,是世界上最高级的事情之一,为何这么说,因为要有钢琴师样灵活的指头,还要有英特尔多核处理器般的大脑,完完全全的贝多芬+艾因斯坦,这种鬼畜组合造就了惊天地泣鬼神的神秘职业:程序员,那么问题随之而来,假如世界不要我们了,或者被下个上帝抛弃,吻了下你的键盘或鼠标没收了吃饭的家伙,我们能做什么呢?我们第一能做厨师,可能有人不乐意了,沃特,你逗我吗?程序员会做菜?做的饭也能吃,确保没有bug?毫不保留的说,我的主业算是个不错的厨子,由于程序员天生的专研精神,让我对舌尖上的美食,各种烹饪技巧有深入研究,特别在火候、调味品用量、食材搭配&hellip;&hellip;等都有严格且精确计算,确保每一道菜都是刚刚好满足自己和深爱的她的胃,所以先天的职业优势,过人的智慧,让我们能很容易成为帽子一米高的超级厨师,不担心失业!如果不喜欢做厨师,我们的第二志愿就是老师。</p> <p>&nbsp;</p> <p>一个程序员,好不容易结束了996模式高强度工作,何不来个寒暑假闲到死的职业happy下呢,,,反正我很想体验下。我们能很轻松的胜任老师,我们有常人少有的抗压与自信,有曾经被项目、产品经理折磨的死去活来的坚强品质,有牛逼的推理、空间想象、逻辑运算等数学天赋,有百科全书般的地理、历史、生物知识储备,有一颗悸动但不到闷骚的文艺青年心,偶尔也对乐器、美术有个人小癖好,所以亲爱的童鞋,美丽的老师小姐姐,你们会拒绝这样一个美貌与智慧并存,善良与风度同在的程序员小哥哥吗?毫无抵抗力的,好不好。剩下的我就不多说了,应该庆幸我们是程序员,因为我们很特殊,所以我们更能接受一般的事物,我想表达,就算我们失业了,也能想干嘛就干嘛,我们最6,没有理由!</p> <p>&nbsp;</p> <p>如果有不同的想法,欢迎各位在评论区留言。</p> <p>&nbsp;</p> <blockquote data-author-name="" data-content-utf8-length="81" data-source-title="" data-type="2" data-url=""> <section> <section>作者:Karl Hughes</section> <section>编译:万能的大雄&nbsp;</section> <section>作者说明:前创业公司的 CTO,现转行成为作家。https://draft.dev 的创始人,帮助打造高质量的软件工程博客。</section> </section> </blockquote> <p>&nbsp;</p>

评论