主人公是一名老外程序员,下面以第一人称去描述,讲讲他是怎么选择方向的。
我的经历
我最近在研究机器学习,这真的很有趣。我喜欢机器学习的一点是——花时间手动处理数据、理解数据并观察个别事物很重要(也很有趣!)。
但最终,公司没有让我实现这一梦想。我记得有次曾想过:“对,我的工作是建立能够准确分类数百万数据的系统,而不是手动查看那些东西。”
我认为程序员有时能拿到高薪的原因是因为他们可以构建系统,利用计算机来完成大量重复性的工作。如果你构建了基于Gmail 的垃圾邮件系统,那就可以让数百万人收件箱中不在有垃圾邮件了!这真的会让你很有成就感,值得你忍受所有的系统错误并和计算机一直打交道。
做这些有趣的事情当然会花费很多的时间!基本上我从事的任何有趣的工作都需要 2-6 个月的时间。从事耗时更长的项目也是常有的事情。我的一个朋友从事同一项工作超过一年。最后,他建立了一个交通地图的系统,比谷歌的更好。一个人可以做到这个程度,真的很Cool。
耗时这么多意味着你实际上只能做几件事。如果其中一件事没有成功,那就意味着你今年四分之一的时间就泡汤了。这没关系,我们在考虑做什么值得好好思考下。
我花在编程上的时间越多,我就越发现要弄清楚什么是重要的其实非常困难。比如,当然,我可以让计算机做十亿件事这个对计算机是太easy了,但具体是哪十亿件事, 以及带来哪些好处,这个是很难筛选的。
有一次我开始项目不久后对主管说:“老板,我在考虑做 这个事情”。他说:“好吧,做另一件事情怎么样?”所以我搞出来了他建议的东西的第一个版本(一个可以更轻松地跟踪机器学习实验的小系统),两年后,团队仍在使用它,并且许多其他人也在此基础上进行了持续的开发。事实证明,这是一个好主意!
在我刚开始编程时,我以为主管会告诉我要写什么代码,然后我就去写出那些代码就完事了。事实并非如此,尽管我一路上确实得到了指导,但是我的工作内容上有很大的自主权。
对于我来讲,大多数情况是:
我们有这一个、三个或六个长期目标
还有一堆紧急程度不一的小问题
现在由你来决定哪些问题适合现在解决
你还必须想办法解决它们
这些问题也可能无法解决
还有所有这些外部因素
你可以和一群已经思考过这些问题一段时间的人交谈几个问题!
每周有 40 小时。
知道你的目标是什么
那么,你怎样决定该做什么?
我的同事 Cory Watson 在 Monitorama 上发表了一个很酷的演讲,名为“创建可观察性文化”。
他在该页面上描述了他所做的事情:
换句话说,如果我们的监控系统(考虑指标、日志和跟踪)良好,那么我们就可以了解我们的系统运行的效率!
我在 Stripe 的工作就是让这一切变得棒极了。
与 Cory 合作时,很明显他一直专注于让我们更容易了解软件系统实时运行情况,这很有帮助!因此,公司的仪表板和指标变得更好,更容易改进性能以及检测和发现错误。
我的朋友开发的那个交通地图程序,他非常在乎如何体现公共交通信息,并且他在持续思考这个问题,所以我对他用了很棒的方法来做到这一点并不感到惊讶。
我认为这种专注力非常有用——当我没有明确的目标时,我发现很难完成任务或决定做什么。我认为这有点像“我能在聚会上向某人解释我的工作吗?”的测试。当我无法通过这个测试时(尤其是如果聚会上的人是软件工程师),我会感到不舒服。这说明专注力是多么重要的一个事情。
确定重点并不容易
在工作中,有很多事情需要考虑!作为个体,你一次能关注的事情是有限的。我看到人们正在做的事情如下:
我们的存储系统超级可靠且易于使用
很容易实时地知道系统的运行状况
让开发体验变得真正美好而简单
让监控系统成为用户了解其业务的最佳参考
因此,我需要找到一件足够大、足够重要的事情来专注,但也要足够小,以便一个人(或几个人)可以cover住并有成果。然后,编写代码来实现这一愿景就容易多了!
不存在所谓的“正确之事”
最初我想写的文章标题是“如何做正确的事情?”我重新命名它是因为我认为这个说法不恰当——没有一件正确的事情可以做。我与许多优秀的人一起工作,他们正在做许多重要的事情。并非所有事情都具有同等影响力,首先你需要找到在你能力范围内能做的事情。
如果我只写全球最优的博客文章,那这篇文章也不会出现在你面前。
相信这是可能的
从事长期或雄心勃勃的项目时,有一点很重要——你必须 相信自己可以完成这个项目。如果你开始一个很酷的为期一年的项目,那么在此过程中大约会有成千上万个可能会出现的问题。如果你在开头的一周或三周时就放弃,或者有人不相信你做的事情是正确的然后你放弃了,那么你将永远无法完成。
我认为这是导师或者有经验的人可以为新人做的一件非常重要的事情。很多时候,你无法分辨什么是可能的,什么是不可能的,什么障碍是可以克服的,什么障碍是无法克服的。但是这个是可以去尝试克服的!如果有人告诉你“别担心,一切都会好起来的!”,那么你就可以开始:解决问题,寻求建议,继续前进,取得胜利。
一旦你取得了足够多的胜利(并且失败了足够多的次数!),你就可以开始了解哪些事情是关键,哪些事情没影响,并决定在哪些方面要坚持下去。
人们经常谈论“敏捷”和 MVP,但我认为这并不是完整的答案——有时你需要构建一个大东西,你可以编写设计文档和原型,但最终你需要决定它是否会起有影响,并下决心花费很长时间来把它做出来并在可能时展示中间的成果。
此外,你也需要得到他人的支持——如果周围的人不相信你能够完成任务,那么你很难坚持下去。
我不再读本科了
当我本科阶段在学校学习数学/计算机科学的时候,我感觉很好。老师会给我布置一系列具有挑战性的作业,这些作业很难,但总是在我的能力范围内。随着时间的推移,我逐渐进步!这太有趣了!我做得很棒!但是这一切不再继续了。
就业更像是——我有一系列的任务,从完全微不足道到我甚至不知道从哪里开始,我需要弄清楚如何询问他人并提升我的技能,以便我可以做困难的事情。我需要决定“足够好”对于我决定做的事情意味着什么,没有人会替我做这件事。下面是一条有趣评论
我同意 Steve Yegge 的说法,有一小群非常重要的人处于另一个层次,而普通聪明勤奋的人则完全不同。这里有另一种解释为什么应该有质的飞跃的方法——也许我一直在用这个讨论来建立这个想法:这是那些仍在努力在别人的测试中取得好成绩的人和那些发现自己有能力给自己的测试打分的人之间的区别,这些人比任何人都可能强加给他们的测试更仔细、更执着、更完美。自驱才是最好的动力学习动力。
因此,从事重要工作并做好它意味着你必须确定自己的目标是什么,并建立自己的内部标准来衡量自己是否已经实现这些目标。其他人可以帮助你开始做这件事,但最终还是取决于你自己。
一些感觉有用的想法
Maggie 谈到了“事后驱动开发”——看看那些已经坏了好几次
的东西!看看你是否可以帮忙彻底搞定它们。
实验失败是正常的(而且很重要!!)。也许诀窍是对这些
实验进行时间限制,并认识到你何时在做一些有风险/新的事情。
我不知道!
承认自己确实很难做到这一点对我来说是奇怪的。我并不总是有好的想法来决定要做什么。有时我会有一些认为很好的想法,然后我去做了,它们很棒,有时我会有一些想法,然后我去做了,它们……真的不太好。有时我对我的工作有标准,但我不知道如何达到,这真的很让人难过。
有时其他人有想法,我认为他们很棒,并帮助实现这些想法,这真是太棒了。这是一种非常好的感觉。到目前为止,我所从事的最好的工作就是让我兴奋的其他人的想法。
有时其他人有想法,而我几个月都不明白他们在说什么,直到他们实现了它,我才恍然大悟,哇,哇,哇。即使可靠地识别好的想法也很难!
开始做起来吧,用以致学才是正道。
----------感谢阅读---------
我是高梵师哥,一个直球的IT工科男,有着10几年混迹各大厂的经历,为职场人士分享职场见闻,职场规则以及职场面试经验。时而理科,时而文艺范的终身学习主义者,传统文化践行者。
(长按关注本公号吧)
遇见是福
不遇见也是