每位开发者都该看:如何在四十岁后还能继续从事软件开发?

这是一个 42 岁的开发者所写经验分享文章.并且列出一些他 18 年多身为软件开发者的经验谈.许多部分看完后都会希望自己当时就能够了解,所以很推荐不论是新手或是老手都要好好阅读这一篇文章。

故事很长,一切从 1997 年开始讲起.那是一个令人怀念的年代(FF7 发售,微软入股苹果,铁达尼号电影上映),那是作者第一年身为软件开发者的年份。当时他的第一份工作是从事 ASP 并且在微软的平台上面使用 EditPlus。十八年过去,作者一共做过六份工作,其中被炒鱿鱼两次,出过两本书,从事过不少演讲。他整理了他的一些心得,希望年轻的开发者(或是有志将软件开发作为终生志业的人)一些建议,条列如下:

  1. Forget The Hype (忘记各种程序语言与架构的炒作与热潮)

不少的新的语言与技术来来去去,作者不是要你别去学习新事物,而是不要因为有太多的新事物而恐慌或是自我放弃。持续鑽研你目前在学习的,并且可以每年挑一些你有兴趣的项目深入了解。

[反观我自己]:各种后端与前端语言来来去去,我把时间花在学习 Python(会持续), Ruby,Scala(会持续)与 Golang(会持续)。透过使用 Golang 可以有更多的时间去了解系统架构与直接面对问题,让写代码变得更有趣。

  2. Choose Your Galaxy Wisely(慎选你的星系)

为了维持原文的意思,我还是使用星系这个字。这边指的是你学习跟从事的技术要慎选,举例而言,微软星系(泛指: .Net、C# ….)或是 Apple 星系(Objective C++、Swift …)。慎选你喜欢的星系,因为那会影响你未来的发展。

[反观我自己]:过去十年主要针对微软星系,目前主要就是后端的 Ubuntu 星系 ,各种后端程序语言都是我目前主要的重点,当然还有 Docker 相关技术。

  3. Learn About Software History(了解各种软件的历史)

作者认为如果你喜欢一种程序语言、一种架构,你就需要好好的了解它的由来与故事。

[反观我自己]:比如说我喜欢 Golang ,我就应该要了解以下的一些问题:

  • Golang 是谁发明的?

Ans:由 Google 内部的三位大神 Robert Griesemer,Ken Thompson(C 语言的共同发明者)与 Rob Pike(UTF-8 的共同发明者),在 2007 年于 Google 内部共同起草发明。

  • 他主要解决什么问题?为何以前做不到?

Ans:根据第一份 Golang Talk

原因为:

  1. Go fast!
  2. Make programming fun again.
  3. 世界在变,但是系统语言却已经十年没变。
  4. 系统语言往往编译过久。
  • 为何以前做不到:(在旧的程序语言上做不到)

新增函式库不是一个正确的方向。

需要从新思考整个架构来开发新的程序语言。

  • 目前这个技术的最新状况如何?

Ans:Golang 目前是 1.6.2 (2016/05/03) ,并且支援 HTTP2 并且可以透过 gomobile 在手机上也可以使用相关套件。

  4. Keep on Learning (持续学习!)

不论你喜欢哪些新的技术或是新的程序语言,你都应该持续的学习,裡面并且建议:

每年学习一个新的程序语言。

每年读六本书。(作者推荐 Peopleware、The Psychology of Software Programming、Facts and Fallacies of Software Engineering、Agile!: The Good, the Hype and the Ugly、Rework 跟 Geekonomics,都是好书。)

[反观我自己]:

程序语言部分: 2014 (Ruby, Scala) 2015 (Go, Swift) 2016 还没有决定.

读书部分:每年读没有超过六本书,但是读过不少论文并且有上过一些 MOOCs。

  5. Teach(指导其他人)

这边指的不是一定要开堂授课,你可以写一篇部落格来讲解你学习的新事物,因为教导是最好的学习方式。

[反观我自己]:还好部落格从来没停过,个人也认为写部落格的过程可以让我不断地检视我了解的部分,并且弄懂所有的细节(希望!),不过还是希望能够多多指导其他人(比如说 meetup 或是 talk)。

  6. Workplaces Suck(工作场所糟糕透了)

不要去期望软件公司会给你任何职涯的规划,相反的不少公司会将你认为是另外一种的劳工,只会将你放在你擅长的位子,所以也有软件公司变成血汗工厂的相关文章。作者同时也认为开放性座位对于需要高度脑力工作的软件工作者是一种最不好的设计(使用 “cancer” 这个词)。而对于工作上的指派,作者也建议大家应该要好好了解每个任务的内容.有任何疑问应该要提出来讨论,对于不了解的事物盲从是最不好的,应该不惜抗拒权威或是离职才是正确的选择,不要让这样的工作风气扼杀了你的热情。

[反观我自己]:我一向对于任何”不合理”的任务指派都会有意见,甚至不断地提出抗议。(当然结果可能都不好!)但是如果因为这样就不提出,那么我们还剩下什么呢?

  7. Know Your Worth(了解自我的市场价值)

这篇是要大家充分的了解自己的市场行情(也就是薪水),根据这篇文章通常一个软件工程师应该要能创造出他自己薪水等级的十倍价值。事实上可能远远不止如此,所以作者建议我们要勇敢地去争取更多的薪水,甚至你可以公开你的薪水等级,让更多人知道你是否被低估(或是高估)任何(自认为)有你相同能力的人,都应该拿到一样的待遇。

[反观我自己]:这件事情还真是难做到,在一间公司待久之后,最容易降低的就是薪水提升的幅度。这件事情还得努力学习,让自己的市场价值更高.同时我们也要不断检视,我们自己能不能创造出自己薪水的十倍价值。

  8. Send The Elevator Down (虚心地接受任何意见)

这边我的解读可能跟作者原先的不同。他有提到肤色与种族的优势,但是我想到的却是你的职位,你可能会听到许多来自于部下或是后辈的建议(或是批评)。不要快速地想要反驳或是抵制,充分的了解过后,或许可以坦诚自己的见解或许是有盲点的,必要时甚至可以道歉并且快速修正。如同许多书上有提到的:「你雇用一个员工,一定是要比你还强的,这样你才能将事情交给他办,你自己做更需要更大视野的任务。」

[反观我自己]:参加社群后,最容易有这种感觉:太多令人钦佩的后辈了,每个人都有着渊博而清楚的知识。我们不需要否认,更不需要去挑惕或是批评,我们要谦虚的接受并且吸收,成为我们自己的养分。

  9. LLVM(一个自由软件专案,是一种编译器的基础建设,以 C++ 写成)

作者认为 LLVM 会是下一个重要的资讯业的星系(Galaxy) ,目前已经有许多的程序语言支援 LLVM 了。所以作者建议我们可以花一些时间去了解,或许去学习相关的程序语言。

[反观我自己]:虽然 Python 与 Swift 都有学习,但是还不是我最上手的程序语言之一。这一个部分我会好好谨记于心,好好学习。

  10. Follow Your Gut(相信你的直觉)

作者在 2000 年就觉得 .NET 会引领接下来的几年,在 2007 年 iPhone 的发表会就了解他的相关技术会是紧接着几年的发展趋势。

当然,这是作者的直觉。但是,你也应该充分地相信你的直觉,并且努力的去追求与学习。

[反观我自己]:我在 2014 年开始学习许多不同的程序语言, Python, Ruby, Objective C, Java, Swift, Scala 与 Rust。最后学习到 Golang,我直觉认为 Golang 会是 Server-side (或是说 Service-side)最重要的程序语言之一,所以我会努力学习。

 11. APIs Are King(API 是王道)

这边很推崇好的 API 设计是很重要的,不仅仅影响 server 与 client 的沟通,更会影响到好的软件品质。也提出 chunky is better than chatty (简单的说:就是不要将 API 拆的太精简,使得 API call 需要往来相当的多次。)

同时作者也建议不要太依赖 REST ,不彷看看 socket.io, ZeroMQ, RabbitMQ, 或是 Erlang。并且也应该开始架设自己的机器人。

[反观我自己]:没有想过,原来 chunky 的设计准则在某些状况下竟然比 chatty 更好,这得好好学习。我有架设自己的机器人来帮助我处理一些日常伺服器维护的琐碎事项。

 12. Fight Complexity(将复杂的事情简单化)

永远要秉持着 KISS 原则(“Keep it short and simple”)来处理任何事情. 面对困难或是负责的事情,有着不少工具可以帮助你将设计简单化。

[反观我自己]:我一直认为能够越有能力的人,越能够将复杂的事情简单的讲解,或是写成一段简单的程式码来实现,这个能力是我们都要不断学习的。

 Conclusion(结论)

「年龄永远不会是一个问题,只要你的心不断催促你持续写代码,持续制造新的东西,你永远都会是年轻的。」

这是作者给我们的结论,他也希望我们能够保持一颗年轻的心,不断学习。

在这里也给大家推荐一个架构学习交流群:650385180,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、并发编程这些成为架构师必备的知识体系。还能领取免费的学习资源,以下的课程体系图也是在群里获取。

温馨提示

如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。

有什么想法可以评论留言。

原文地址:http://blog.51cto.com/13676067/2120643

时间: 2024-10-08 02:09:44

每位开发者都该看:如何在四十岁后还能继续从事软件开发?的相关文章

关于知乎《四十岁还在写代码,是幸福还是悲哀?》的不同看法

 今天看了知乎上的文章关于<四十岁还在写代码,是幸福还是悲哀?>.但是我不太赞成作者的观点,我想表达自己的一些看法.我们本着以目前中国IT的现状出发.目前我认为中国的程序员很努力,很上进,并且很有想法.假如四十岁还是写代码的话,我们就把他当做资深工程师,就是比高级程序员好一点的程序员,但是达不到架构师水平.假如达到,那么就和我们的命题有矛盾.我认为目前中国的架构师几乎是不怎么写代码的,最多写核心的代码.那么这样40岁的程序员还在写代码的话,我认为应该从如下方面去考虑,并且每个方面要占一些不同的

第四十六课:MVC和MVVM的开发区别

实现MVC的目的就是为了让M和V相分离.前端的MVC无法做到View和Model的相分离,而MVVM可以. 我们先来看一个用MVC模式开发的经典例子:(一定要深入了解这种开发的思想,而不是看懂代码) $(function(){ //基本的Todo模型, var Todo = Backbone.Model.extend({ // 设置模型的默认属性 defaults: { content: "empty todo...", done: false }, //确保每一个模型的content

每个PHP开发者都应该看的书

PHP这几年口碑很差.关于它的“糟糕设计的汇总”和语法上的矛盾有着大量的讨论,但是主要的抱怨通常是安全.很多PHP站点分分钟被黑掉,甚至一些有经验的.有见识的程序员会说,这门语言本身是不安全的. 我总是对此持反对意见,因为有常识性的原因,有如此多的PHP安全违反现象. PHP应用程序经常被黑掉是由于: PHP应用程序太多了. 它易于学习和编写. 糟糕的PHP也容易编写. 就是这么简单.PHP流行好多年了.PHP越是受欢迎,它被发现的漏洞就越多.这些黑客发现的漏洞很少是PHP处理引擎本身的,通常是

[自娱自乐] 4、超声波测距模块DIY笔记(四)——终结篇&#183;基于C#上位机软件开发

前言 上一节我们已经基本上把超声波硬件的发射和接收模块全部做好了,接下来我们着手开发一个软硬结合的基于C#的平面定位软件! 目录 一.整体思路 二.效果提前展示 2-1.软件部分展示 2-2.硬件部分展示 三.基于C#的客户端软件说明 3-1.整体框架介绍: 3-2.部分技术细节介绍 3-2-1.串口操作 3-2-2.JiSuan函数说明及核心算法介绍 四.阶段小结 五.相关链接 一.整体思路 >_<" 如下图,利用我们上三节开发的超声波发射与接收设备构成一个:2固定接收头+1可移动

小说脑洞:《四十岁的“女”人》

简介:一个28岁的男人在连续熬夜工作几天后,一觉醒来,变成了一个将近40的女人. 风格:日常类. 篇幅:中短篇. 宿主(女人):39岁未婚女人,在上海工作,是公司的高级经理,管理几个产品组.性格上,掌控欲很强,冷冽果决,业务能力强,事业心强.外貌上,匀称,有气质.物质上,有一套两室房子,一辆宝马,200w存款. 寄生(男人):28岁单身男人,事业已经有一定起色,具备领先几年眼界.性格上,少语简单,努力,随性. 剧情: 1.挖掘有天分的人,敢用人.(观点:别人的谴责不要那么急去否定它,先确定是否有

第四十九课、文本编辑器项目持续开发

一.开发目标一:指定目标行号并跳转执行 1.用户需求 (1).提示输入对话框 (2).用户可输入目标行号 (3).确定后光标跳转到指定行 2.行间跳转算法设计 (1).通过输入对话框获取目标行号 (2).查找换行符的位置计算目标行的第一个字符字符下标 (3).通过QCursor定位到目标行 void MainWindow::onEditGoto() { bool ok = false; int ln = QInputDialog::getInt(this, "转到", "行号

第四次作业:总结一下,以软件开发生命周期来说明不同的测试使用情况

1.需求阶段 需求测试--软件测试时由代码完成后开始的,事实上应从软件的需求定义开始. 需求测试贯穿整个软件开发周期,通过需求测试可指导软件测试的各个阶段,它可以帮助我们在设计整个测试的进行,测试计划的安排,测试用例的选取,软件的确认要达到的要求. 2.设计阶段 (1) 概要设计阶段     阐述测试方法和测试评估标准,编写测试计划,组织一个独立的测试小组,安排具有里程碑的测试日程. (2)详细设计阶段     开发或获取确认支持工具,生成功能测试数据和测试用例. 3.编码阶段 在编程阶段完成测

四十一岁的我

如果人生再来一次,我还会是现在这样的吗?我时常这样问自己,毫无意义,也徒劳无功."白了少年头,空悲切"应该是我目前最真实的心理写照,和我差不多的同龄人,已经到达了我无法企及的人生高度.自己还是一事无成,碌碌无为.人生已渡过了一大半,缺少目标和规划.执行力的我,晃晃悠悠,毫无建树.一直没有记录和写作的习惯.今天开此博,盘点一下我过往的日子.好好走完余下的人生. 目前状态:从事的是审计和财务工作,可是对本职工作无半点兴趣,纯粹是为了应付和糊口, 在一个若大的城市没有半点基业,可爱的女儿今年

每位设计师都应该拥有的50个CSS代码片段

http://www.oschina.net/translate/css-snippets-for-designers?from=20130613 面对每年如此多的 新趋势 ,保持行业的领先是个很困难问题. 网站设计者和前端工程师都已经全面的使用 CSS3 properties, 决定这些的是 浏览器支持 和新的特性. 但是还是有些优秀的CSS2代码片段和CSS3一起运行中. 这篇文字里我会介绍 50 个便于使用的 CSS2/CSS3 代码片段 给所有的WEB专业人员. 选择IDE开发环境来存储