总说程序员是吃青春饭的,过了 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”
往 期 学 员 反 馈