欢迎访问我的博客 👋

你好,我是飞羽,这个博客主要是用来分享和记录我的一些想法和经验。

30岁的祝福

朋友很快就要过30岁生日了,于是30岁这个词突然又出现在我的生活里。送上什么样的祝福语,让我踌躇良久。 我在内心里总把30岁当作人生中非常特别的一条分割线,当还没有越过这条线的时候,还可以安慰自己说你还年轻,很多事情还有时间,你还能再犯错再折腾;而线的那头仿佛是某种让人惶恐的新生活的开始,尽管那只是又一天的开始,和昨天,和明天,全无区别。人总是会无来由地相信一些东西,新年的时候我会写下New Year Resolution,期待在这个自己觉得特别的时间点上,接下来的生活也许会有某种变化。尽管事后回头看发现每年的Resolution都只是把前一年的日期改了改。 很多时候这一切都被我有意无意地忽视了,而每每又会因为种种契机而想起来。年龄焦虑自从来了美国之后已经淡化了很多,但是更深层次的,对现状的不满却从来没有减轻过。我很喜欢电影《一一》,原因是它一直在提醒我。 你不在的时候,我有个机会去过了一段年轻时候的日子。本来以为,我再活一次的话,也许会有什么不一样。结果……还是差不多,没什么不同。只是突然觉得,再活一次的话,好像……真的没那个必要,真的没那个必要。 我像是在和脑海中幻想的那个风车做斗争,它们仿佛代表着火光渐渐熄灭、生活趋于重复的意象。而越临近三十岁,这种摇摇欲坠的感觉就越强烈。 过去的一两年我都在追问自己,我到底是怎样的一个人,我又想要什么的生活,我依旧没有一个答案。不知道等到我三十岁生日的时候,我知不知道自己想要什么样的祝词呢?

October 7, 2023 · 飞羽醉月

沟通的框架

因为种种契机,偶尔会和同事聊聊职场的一些问题,记录一下,整理思路,也希望能对其他人有所帮助。 沟通是什么? 是以想要的方式把想要表达的信息传达给对方的手段。 好像有一种迷思,觉得人应该如实把内心的想法原样说出来,这样才是真诚的表现。如果由于种种动机,见人说人话见鬼说鬼话,沟通就一下变成了一个道德问题,演化成了关于人到底是不是虚伪或者功利的讨论。 但是沟通其实只是一个手段,运用的方法,存乎一心。核心是你要通过沟通达到你想要的目的,这一点在职场里尤为重要。 职场的有趣之处在于很多利益关系可以摆在台面上来说,每个人都需要主动去争取自己的利益。而在规则之内,谁都想争取到最多的利益。好在这不是一场零和游戏,也不是有限游戏,所以如何既能争取利益,又不做的太绝,能继续把游戏玩下去,也是一门技艺。而沟通,则是这门技艺的核心。 沟通有两个核心部分:内容和方式。 内容主要是在解决是什么的问题。是什么讨论的是你想要传达的内容是什么。假如你们在开项目研讨会,内容可能很明确,就是围绕项目的问题或者计划展开。也有很多时候内容不那么明确,比如和老板1:1,你可以聊的内容有很多,但是要聊什么需要进行挑选。 内容和方式是互相影响的,有很多时候内容也是方式的一种。 方式既指媒介,比如通过面对面交谈,又或者书面沟通。也指表述方式,同样一句话有很多种表述方式,但是效果却截然不同。 方式也是最微妙的部分,好在也不是无迹可续。归根结底,是目的决定了方式。你想要传达什么样的信息,给对方一种什么样的印象,这些问题决定了沟通的方式。 比如在汇报项目进展的时候,你可以平铺直叙地说今天做了xx功能。也可以说,今天遇到了一个什么样的困难,这个困难怎么怎么复杂,你怎么怎么解决了。这两者给人的印象是截然不同的。 这里给出一个简单的框架,背后隐含的是一些基本原则,每一个要点都有很多实际的技巧: 明确你的听众是谁 了解你的听众 知道对方对什么感兴趣(聊对方感兴趣的话题永远是最有效的,比如大领导可能更关心高层次的内容,同事可能更关心执行层面的内容) 知道对方的大概的情况(比如对你们要聊的话题了解多少,需不需要抽时间解释相关的背景知识) 知道对方的沟通模式(比如是喜欢简洁明了,还是喜欢了解细节) 思考你想要达成什么目的 表现自己? 寻求帮助或者合作? 突出困难? 思考怎么样表达能够更好地实现你的目的(很多时候同样的事实可以表述出完全不同的感觉) “侧重” “误导” “夸大” 反馈分析(根据结果调整你的说话策略) 未完待续。 以上更多是框架性的讨论,有了框架,进一步需要的是具体的技巧和实践。框架和技巧就像是道与术的关系。有了考虑整体问题的框架,可以随着时间的推移,慢慢往里面填充更多的具体技巧,再去实践,就可以真正内化和提高自己的沟通能力。

August 18, 2023 · 飞羽醉月

程序员职业发展

从新人到L1 从新人到L1更多是技术能力上的考验,证明你能够把本职工作做好,这个时候需要的更多是硬实力:编程的能力、简单的设计能力。能够把一个定义好的问题妥善地解决,就达到了L1的要求。这个阶段下更多专注于技术解决方案,遇到一个问题,怎么样分解成可以编程解决的问题,在规定的项目期限内完成代码和测试工作,并部署到生产环境里。只要能够证明自己拥有这些能力,就达到了L1的标准。 上面更多是从全局的角度讨论一个L1应该具有哪些能力。 如果拆分开来,技术能力里包含了很多细小而具体的能力,这里试着列举几个: 能够熟练地使用项目需要的编程语言。 学习并掌握公司内部工具的使用,比如内部的测试框架、内部的部署流程等等。 同时这里也有很多隐含的非技术能力,同样也试着列举几个: 准确清晰地说清楚你在做什么,做了什么。 了解提问的智慧。 而加入一个新公司或者初入职场的时候,也有很多重要的事情要做,试着列举一些: 了解组里的概况,首先是本组的职责以及边界,具体拥有和维护哪些代码。 组里目前最重要的项目是什么,每个组员都在从事什么项目。 组里本年度的计划是怎样的,未来的路线图是怎么样的。 同事们性格如何,老板性格如何。 熟悉组里的代码。 熟悉公司的内部工具和Workflow,比如代码的管理 -> 代码的测试流程 -> 代码的审阅 -> 代码的合并和部署的流程。 从L1到L2 从L1到L2相对比较容易,大部分时候工作几年就会自然晋升到这个阶段。而比起上一个阶段,这个阶段的要求也只是稍微提高了一些。 技术上,要能够从独立完成一个定义好的问题 -> 能够自己解决一个中等规模的问题,这类问题往往复杂一些,但这种复杂更多是实现的复杂,而非问题的复杂。问题相对来说还是比较清楚的。在接到这样一个问题的时候,思考如何提出一个解决方案,写出一份技术设计文档,然后实现它。这样的问题通常不会涉及到太多的系统,也不会涉及到太多外部的组。可以看到比起L1来说,了解如何设计一些简单的系统,并且能够把这个设计付诸实践,就是最大的变化。这也是了解[[系统设计]]的开始,这是一条漫漫长路,这个阶段对此要求不高。 从非技术的角度来说,这个阶段沟通的重要性就开始体现了。理清问题,和PM沟通,和其他组沟通,和组里其他同事讨论设计等等,这些都需要沟通。当你完成了代码,你也需要通过沟通,来让其他人了解你的成果1。 另一个重要的能力就是写文档。清楚地描述问题和清楚地解释方案都是非常重要的技能。 从L2到L3 从L2 -> L3是一个非常大的分水岭,大部分公司里都把L3叫做Senior Software Engineer,很多公司会把L3作为terminal level,意即这可能是大部分人职业的终点,公司不再对员工有升职的要求,常年呆在这个级别也不会被开除。不同公司的要求对此可能不同,你不一定需要做到这里说到的所有要求,但是你迟早应该朝着这个方向前进。 第一点是心态上的转变,要从Independent -> Self Guide。意即不要止步于服从命令,而是开始自己思考,形成自己的判断和观点。这些判断和观点很多是从经验而来的,经验需要慢慢积累,需要多经历。但是这个心态和态度的改变可以从这个时候开始。 具体来说,L2的时候你可能更多是按照其他人的需求或者已经设计好的要求做事,比如PM说我们需要实现XX功能,其他人写好了设计文档,让你按照要求进行实现。L3的时候你应该开始问自己,为什么这么设计,这么设计好吗,有没有别的实现。XX功能能够实现,但是这些实现是为了短期还是长期?这背后真正想要解决的问题是什么,有没有可能这个功能其实并不是能解决的问题的办法。你和PM应该是平等合作的关系,你应该提供Engineer的视角的建议、策略、想法2。 进一步地,你应该开始从全局思考问题,有没有可能做得更好,当前的需求有没有可以优化的,当前的日常工作有没有可以提高的。从长远来看,这个功能真的是我们想要的吗,它可以在更长的时间范围内有效吗,如果从更长的时间考虑这个问题,我应该怎么设计。 一个完整的软件开发流程可能包含下面这些步骤。发现问题 -> 找到问题的实质 -> 找到需求 -> 确认需求 -> 协调并领导会议 -> 进行设计 -> 追踪进度 -> 实现功能 -> 测试 -> 上线 -> 后续追踪,级别越高,需要参与的环节越多,实现功能只是其中一个环节,可能反而是花时间精力最少的环节。 因为很多时候你需要给不了解情况的人解释,听众可能是有技术背景的人,也有可能是没有技术背景的人,弄清楚受众是非常重要的。这直接决定了你应该采取什么样的方式解释问题,是技术细节还是全局地解释。 ↩︎ 都行、随便、无所谓,这样的没有态度/观点/偏好其实是不受欢迎的,哪怕这是你真实的想法,你也应该解释背后的理由和动机。 ↩︎

February 25, 2023 · 飞羽醉月

决策的困境

决策的困境 困境 人的一生实在太过短暂,但是我们遇到的问题、需要做出的决策却浩若繁星。尤其是现代社会,每个人的自主权都得到了增加,我们选择的余地也更大了,从而导致遇到的决策问题更是成几何级数迅速增加。每个人都想要找出最优决策,但是很多决策实在太过复杂,我们注定不能找到一条万全的路。 复杂情况下确实不会有确定的最优解,只能说有较好的选择,但是如果以不能找到确定的最优解为由就去随便乱选,我觉得也是不稳妥的。所以请注意下面的观点都是基于如何做出尽可能好的决策来讨论的。 尽管我们面临了无数的决策,却有很多人根本没意识到自己决策的重要性。很少有人会有意识地复盘过自己做的决策,如果他们这么做了,他们可能会忽然发现原来自己此刻的状态,很大程度上就是当初决策的结果。 一个非常典型的例子就是高考。高考结束后很多人面临两个重要决策,一个是去哪读书,一个是读什么专业。相当一部分人“轻易”地做出了这两个决策。这里说“轻易”并不是说就好像抛硬币似的那么轻易,尽管确实也有这样的人。而是说,相比起这件事的重要程度来说,很多人并没有足够努力地去提高这些决策的准确性。 他们只是根据自己知道的一点有限的信息,根据父母有限的见解,根据以前听说的各种传闻,做出了这个与未来人生关系甚大的决策。“谁谁谁家孩子现在读XX专业,毕业了工作不愁”,“报纸上说了,XXX学校好,是985呢”…这种话就构成了很多人做出重大决定的全部基础。 而最可怕的一点大概是,很多时候这些重大决策给你的感觉就好像只是决定今天早上吃什么一样轻飘飘的,你根本意识不到它所产生的蝴蝶效应有多么可怕。这一点和时代变革一样,真正的时代变革并不是“忽如一夜春风来,千树万树梨花开”。而是“随风潜入夜,润物细无声”。 想要做出决策,我们能依赖的就只有理性和经验,同时,在这个过程中,还有一样与这两者并列的要素,就是信息。掌握越多与决策有关的信息,做出决策就越容易,也越精确。归结起来,想要做出高质量的决策,要么提高自己的理性思维能力(比如逻辑推理,批判性思维能力等等),或者尽可能地掌握更多经验,要么就是掌握更多的信息。 如何提高经验决策能力 Coursera上有一门很受欢迎的历史类公开课《秦始皇》,讲者是台湾大学历史系的助教吕世浩老师,吕老师在这门课开篇的时候探讨了一个重要的问题:读历史有什么用?历史在今天这样一个前所未有的时代里能够为我们提供怎样的价值?吕老师的观点非常有意思,各位可以花时间去看看这节课,我在这里就不啰嗦了。我想说的则是吕老师在如何读历史里引用的一段话: 何取觀史,當如身在其中,見事之利害,時之禍患,必掩卷自思,使我遇此等事,當作如何處之,如此觀史,學問亦可以進,知識亦可以高方為有益。 —— [宋]吕祖谦 上面这段话的意思很简明,却提出了一种非常优秀的读史的方法,把自己带入历史之中去做决策,从而增长自己的阅历。 还有一种方法… 设想一个情景,当我们突然面临一个重大决策时,我们很难短时间内去提高前两种能力,我们收集的信息也十分有限,我们该怎么办? 寻求经验更丰富的人的指点。 但是这里也有坑,一种情况是高人其实不靠谱,他并没有那么“高”,或者他缺乏类似的经验与信息。另一种情况则是高人自己判断错了,这一点没办法避免。所以可能的理想的情况是从高人那里了解他决策的理由、决策的背景,然后对这一决策进行判断。 还有一种情况就是,觉得自己的认知比对方更正确,于是尽管对方可能给了相对正确的判断,你却不相信,还是坚持自己的选择。犯这种错误的人可能最多。 迷思 想要做出决策,其实还涉及到了不少问题。比如情绪干扰,比如看似无法解决的客观问题,使得人很难理性地做出最好的选择。 所以不厌其烦地再说一次:请三思而后行。

September 15, 2020 · 飞羽醉月