总说程序员是吃青春饭的,过了 35 岁编程生涯就终结了——是这样吗?
在 IT 行业,技术日新月异,各种库、SDK、编程语言层出不穷,对于程序员的要求也越来越高。在脑力劳动和体力劳动的双压力之下,年龄大小的优劣无疑显现出来,那么优胜劣汰的自然法则之下,无法与时俱进的人最终只会被淘汰。
一、
我今年 37 岁,曾经住在硅谷,并且我的整个职业生涯中一直从事技术工作。我从来没有在技术上“大获成功”,也从没有“走入管理层”。但是到目前为止,我已经处在了职业生涯的最佳位置。
“35 岁以后应该做什么”这个问题,不应该固性思维,而应该以一个成长的思维来看待。
在我 20 多岁的时候,一切看起来似乎都很好:我在创业公司工作,并且取得了一些成功,但每当我环顾四周时,都不断看到我这个年龄段的人在变得更酷,更酷的工作、汽车和生活。如果说在过去的十年里我发生了什么变化,那就是我从一个固定的观点转向了一个成长的思维模式。我已经认识到在学习的时候我才是最快乐的,并且更注重学习的过程而不是最终的结果。
在某些方面,我实际上比前几年过得要稍差一些,但我变得更快乐、更健康、也更有内涵。毫无疑问,我和其他人一样,有糟糕的日子也有美好的日子,但总体而言,事情正在逐渐变好。
“硅谷的生活结束于 35 岁,除非你大起大落”——这是不正确的,但这要等到35岁才会意识到。
二、
35 岁以上确实会面临着“过山车”般的境况,这是毋庸置疑的。
在软件开发方面,软件开发市场所需的技能每五年都要进行一次检修,所以程序员们需要乘着技术革新的浪潮才能在 5 年内成功通关。如果不持续升级,随着年龄的增长,那么会越来越难以躲避被淘汰的局面。例如,一个 35 岁的 ASP 程序员编写了 10 年代码,但是他没有机会编写 ASP.Net 或是 .Net-MVC 等应用程序,如果他失去了工作,那么不具备这 10 年的市场所需技能,10 年后的他只会被淘汰。
同样,软件开发人员在过去 15 年中不断提高的生产力,使得开发经理、架构师、构建者和其他一些人的需求大大减少,因为在许多小团队中,开发人员也会顺便接管一些其他的角色,因此,如果一名专职的经理、建筑师或建筑商 5 年后失去了工作,就很难在没有生产编码责任的情况下找到另一个相同职位的工作。即使找到了另一份工作,很明显他就需要和一个年轻人竞争:这个年轻人在相关技术上有两年的编码经验,而你有 10 年的无关经验和 0 年的相关经验。
另一大趋势是稀缺资源性质的变化。 20 年前,电脑是稀缺的资源,项目负责人围绕稀缺的计算资源和繁琐的语言、开发工具组织他们的软件开发计划和工作习惯。但在今天,计算资源并不稀缺,语言、流程和开发工具也得到了极大的改善。如果一个组织在软件开发习惯上已经使用了 10 年,那么这些新的实践需要经过一段痛苦的适应阶段。
对于这些因素中的每一个,35 岁以上的开发者或多或少地都会受到影响。此外,超过 35 岁的开发者往往还有额外的压力,如家庭、财产、社区义务和与年龄有关的健康问题,这往往就使得他们不愿意耗费全部的工作时间,以及下班后与团队交往等额外消耗。
三、
当我 37 岁的时候,我决定结束自己在学术界和工业界多年的研究工作,搬到硅谷。那时我正在西班牙的一家大型电信公司做研究,虽然我听说过 35 岁以后在硅谷工作不会成功的,但我最终仍然决定加入 Netflix。
是的,现在我已经搬到山谷,加入 Netflix 并且领导他们的算法/建议团队近 4 年时间了。事后看来,我认为这是一个非常成功的选择。但是由于我最近(41岁)加入了 Quora,所以我的硅谷之路并没有结束。虽然在 Quora 这样的年轻创业公司中的平均年龄相当低,但这并不意味着当你超过 35 岁的时候就不会成功。事实上,正因为很多人都还年轻,经验才是我们最大的财富。
现在我已经废除了“硅谷 35 后”这个论断了,但我认为任何大的职业变化都应该在 40 岁之前。
2001 年,我加入了谷歌软件工程团队,当时我 55 岁——没错,在谷歌工作的整整四年里,我是最老的员工。
那四年我做了什么?我不是经理......我只是一名软件工程师,与我所有亲爱的同事一起工作,他们的平均年龄比我年轻 25 岁。没有人觉得我的年龄有问题,我只是团队的一名普通成员而已。
没有什么所谓的“过山车”,只会变得越来越无关紧要罢了。为了避免变得无关紧要,我从不停止学习。在 1975 年开始我的职业生涯时,我们仍然使用打卡和大型机,使用 Fortran 和 PL / 1 进行编程。20 世纪 80 年代,有前途的新技术应用了人工智能,我很幸运找到了一个 AI 研究团队的工作,在那里我不仅学到了更多关于软件概念的知识,而且学到了尖端的重要性技术。
在经过十年的 Lisp 编程之后,1990 年我转向了新的面向对象语言 C ++。几年后,网络爆发,我开始使用 HTML 和 JavaScript 等更多新技术进入网页开发。学习,不断学习,是我职业生涯中所有转变的关键。
我看着我这个年龄的其他人要么进入管理阶层,要么开始攀登企业阶梯,有的也变得无关紧要,变成失业者,或转向全新的事业。几乎在我所有的早期工作中,我的经理都觉得我应该成为一名经理——但我自己知道我讨厌做一名经理,我只喜欢开发软件。有一天,当我的经理走进我的办公室,看到我在一个程序上工作,对我说:“你还做什么软件?你现在是经理!“
我喜欢且擅长写程序,为什么要强迫自己做一个经理?这给我带来了巨大的压力,我只想回到我的电脑前,专注地解决一些问题。最后,我在 1996 年的一天宣布,“我再也不会管人了”。我想,我不在乎是不是永远不能退休。
2000 年,我利用新获得的 PHP 技术,从波士顿迁移到了硅谷,那时我非常习惯和同龄的人一起工作,但突然有一天我下岗了。然后我进入了一家 200 名员工的小公司,向我承诺不会指望我进入管理层。事实上,她说他们刚刚决定聘用一些有几十年经验但又不想当经理的人。
四年后,我退休了。我一路上结交了许多亲密的朋友,同时我仍然在学习新技术。在过去的一个月中,我已经解决了 Ruby,现在我正在开发 Ruby on Rails,并且未来还将一直继续。
最后
技术焦虑是大龄程序员老生常谈的主题,其实不论国内国外,不论市场境况如何,面对生活和工作的重要岔口,都会不可避免地陷入自我怀疑的怪圈,重要的是随波逐流、逐渐淘汰,还是迎难而上、顺势逆袭——总之,保持一颗不断进取的初心是不会错的,更要做好技术焦虑的减法和解法。
8课时魔鬼训练课程
9大主题系统性解题介绍
30道算法,数据结构真题举一反三
覆盖leetcode 高频面试题
4周组队刷题狂潮带你赢取高薪FLAGOffer !
明 星 导 师   
罗老师
Senior Software Engineer, 拥有8年一线软件工程师工作经验,曾就职Facebook, Google, Amazon等多家明星级硅谷一线公司,《程序员面试白皮书》作者之一。熟悉软件开发,数据结构和算法。长期参与技术招聘,面试人数超过200人,对CS和非CS专业学生如何求职软件工程师有独到的见解和高效的求职方法。Office Hour金牌导师,辅导学员超500人,独创的9大主题刷题法使你用最短的时间刷完最多的题!
适 合 学 员 
  • 无算法基础,或算法基础薄弱,不系统
  • 希望求职Facebook, Google, Linkedin, Airbnb, Uber等硅谷知名企业
  • 面试经验少或无面试经验,不知道与面试官如何正确的沟通和展现自己
  • 网上练习题目那么多,不知道该从哪些题开始准备
  • 获取最新面试动向
  • 认识一起找工作的其他小伙伴
马上扫码入微信群,了解更多课程详情。
  开 课 时 间 
第一节课
2018/6/2(周六) 美西时间7:00pm - 9:00pm
第二节课
2018/6/3(周日) 美西时间7:00pm - 9:00pm
第三节课
2018/6/9(周六) 美西时间7:00pm - 9:00pm
第四节课
2018/6/16(周六) 美西时间7:00pm - 9:00pm
错过直播不要怕,直播结束后会发出直播视频回放
课后会有项目和微信群刷题,帮你巩固知识。
  课 程 大 纲 
第一节课 
你好,技术面试
第一课目标:
  • 针对程序员需求量最大的“热门公司”,一一讲解这些公司的面试特点。
  • 知道如何写出一份“tech interview ready”的简历
  • 全面了解技术面试流程,“兵来将挡”地应对面试中可能碰到的各类面试官
  • 知道怎样完整、全面地回答一道白板编程题,再也不会出现“我觉得面得不错,最后为什么没有进”的尴尬
1. 面试风格和面试题
  • Facebook
  • Google
  • Apple
  • Cisco
  • Oracle
  • 初创公司
2.如何写简历才能看起来更像一个高大上的码农?
3. 如何准备技术面试?技术栈总结
  • 从“软”到“硬”了解程序员的一天
  • 程序员面试技术栈
  • 程序员的分工和合作
  • 前端,逻辑层和后台我是和哪个
  • 了解你的面试官
  • 从容应对HR和工程师
4. 如何在解题思路上征服你的面试官?
  • 白板面试的答题思路
  • 白板面试答题流程
课件预览
第二节课 
算法101
第二课目标:
  • 了解面试中最常见的基本算法问题
  • 如何衡量算法效率(复杂度分析)
  • 逐一讲解算法基础内容
  • 利用“模式识别”,快速判断应该使用什么算法,利用代码模版快速解决
1. 算法面试总结
  • Merge sort, quick sort, insertion sort
  • Binary search (and variations)
  • Tree traversal: pre-order, in-order, post-order, level-order
  • Algorithm analysis
2. 复杂度计算 Time Complexity
  • 时间和空间复杂度计算
  • 顺序和循环结构复杂度计算
  • 事前分析估算法
3. 排序 Sort & Search
  • 快速排序
  • 合并排序
  • 桶排序
  • 二分查找和k选择查找
  • Sort & Search 真题1,2,3分析和应用
4. 递归和动态规划 Recursion & Dynamic Programming
  • 递归三要素和动态规划四要素
  • DP应用场景
  • 状态转移方程 
  • 遍历算法和分治算法 Traverse and Divide Conquer
课件预览
第三节课 
数据结构101
第三课目标:
  • 了解面试中最常见的基本数据结构问题
  • 逐一讲解数据结构的概念和基础内容
  • 利用“模式识别”,了解数据结构的出题套路,见招拆招
1. 数据结构总结
  • List, Stack, Queue
  • Binary Tree, BST
  • (Hash) Set, Map
  • Priority Queue (Heap)
2. 数组和字符串 Array
  • 数组,矩阵,树状数组
  • 数组的处理方式
3. 链表处理技巧 Linked List
  • 双指针算法
  • 巧用“哑节点”
4. 哈希表 Hash Table

  • 常用的哈希库
  • 哈希表的实现原理
  • 冲突解决方法(Open Hashing, Closing Hashing)
  • 哈希表高频面试题
5. 栈和队列 Stack & Queue
  •  Stack & Queue 应用场景
  • Stack & Queue 真题1,2,3分析
  • 解题原理,复杂度分析, 拆解同主题题目
6. 树 Tree

  • 二叉树,二叉搜索树,字典树
  • 二叉树的序列化
  • 二叉树的分治算法
  • 递归三要素
课件预览
第四节课 
当算法遇上数据结构
第四课目标:
  • 算法和数据结构课程的进阶,挑战面试中最有难度的问题
  • 从经典算法问题中总结模版,举一反三
  • 了解算法在实际工作中的应用
1. 树和图的周游
  • 递归算法
  • 深度优先
  • 广度优先
  • 真题1,2,3分析
  • 解题原理,复杂度分析, 拆解同主题题目
2. 图的算法 Graph

  • 贪心算法
  • 最短路径算法
  • 真题1,2,3分析
  • 解题原理,复杂度分析, 拆解同主题题目
3. 堆排序 Heap

  • 堆的基本原理
  • 优先队列与堆的联系
  • 堆的高频试题
4. 从内排序到从外排序
  •  B树
  • 文件系统
  • 解题原理,复杂度分析, 拆解同主题题目
5. 挑战高级程序员
  • 程序设计
  • 系统设计
课件预览
课程形式为线上视频直播,每次课程可与导师互动交流,每次课程只限20人报名,保证学习质量。中国美国可同时观看直播。每次课程结束将会给所有学员发送视频链接,可反复观看复习课上内容。
学 员 战 绩
部分往期精品小班学员入职公司汇总
  求 职 宝 典  
报名后即可获得价值$120的全部工程专业的求职宝典!《独家面经和题库》《美国就业手册》《硅谷求职攻略》《工程求职宝典》等的求职材料和求职资源。

  报 名 方 式  
关注北美工程师求职顾问公众号
并回复关键字:
“小班2”

 往 期 学 员 反 馈  

继续阅读
阅读原文