在工作中学习

作为开发人员,最有意义(也是最具挑战性)的事情之一就是实现您从未做过的事情。

很难实现在截止日期之前从未做过的事情。 需要在特定时间范围内完成工作的压力可能会给寻找新问题的最佳解决方案这一本来就很困难的挑战带来更大的压力。

我最近有机会同时做这两个事情,并想分享我对这次经历的看法。

向我介绍的任务是为后端服务实现graphql解析器。 我们正在构建一项服务,以便为希望互相通信的用户存储加密的数据。 最重要的是,我们公司还有一组我们想在一个查询api下结合在一起的服务。

提议的统一解决方案是使用graphql,这是Facebook产生的一种技术,可以使这些类型的操作更加简单。 Facebook实施了我们公司过去使用的可靠的开源技术,因此graphql非常适合我们的Facebook工具生态系统。

对许多有相关经验的人来说,实现graphql解析器的任务听起来很简单; 并且有大量在线资源记录了如何完成这项确切任务。 这不是一个新问题。 但是我遇到了一些障碍,阻碍了我进步的速度。

我从对graphql的零知识开始。 我听说过有关它是如此革命性的话题,但我不记得自己所看到的。 为了增加任务的复杂性,graphql服务的编写语言是java,因此服务客户端的实现需要匹配。 以前几乎没有Java经验,所以我需要在语法和抽象级别学习很多知识才能完成任务。

传统的OOP概念对我来说非常陌生,例如数据传输对象,多态性,甚至维护用于在进入服务的数据和可用于与数据库进行通信的对象之间进行转换的对象的模型。需要在我的心理模型中考虑

我尽了最大的努力来完成任务,并问了尽可能多的问题。 如果您能找到方法,那么在学习新事物时得到导师的指导绝对是无价之宝。 甚至更好的是,他没有告诉我确切的操作,而是让我探索问题空间以找出在什么时候使用哪些抽象并对我的想法进行迭代。

他一直在我身边问我一些问题,并提出一些想法,这正是我所需要的。

结果? 我花了大约3个星期的团队时间(比我们最初的估计晚了一周),并且我学到了很多知识,可以分享足够的概念来撰写本文。 我有时间来迭代解析器代码几次,并且发布到pre-prod的产品版本正在按预期工作。

以下是我遵循的一些原则,以充分利用完成任务所需的学习。

经常回顾您所学。

无论是短期审核,写下您每天所学的知识并通过电子邮件发送给自己,还是更渐进的系统,您可以每隔几天进行一次审核,以将信息转换为长期记忆(如果您不进行审核)您从所学到的技术以及所使用的技术周围,将需要花费更长的时间才能真正熟练地使用它们。 您还将重复您和团队中其他人犯的错误,不必要地浪费了宝贵的时间。

我们的工作记忆非常有限,因为我们一次只能处理多少个不同的项目[2](仅约4–7),因此可以在长期记忆中存储的信息越多,使用该信息的机会就越大在正确的时间解决实际问题。 [1]。

在本月的整个过程中,我遇到了大量的新信息,从文本编辑器快捷方式到图形ql模式陷阱到我公司的特定库及其依赖问题,唯一可以节省任务并让我继续前进的是时间我回顾了每天学习的新知识。

我学到了很多东西,当我们需要向使用它们的共享Graphql服务中添加更多的解析器时,我能够在2个工作日内完成任务,而不是15个工作日。我可以想象,我将能够更快地工作,因为我所学的所有知识,并节省了宝贵的开发和调试时间。

只要您不断审查和构建针对任务的知识面,您就将继续练习技能并提高构建,调试和优化系统的能力。

信息的整合需要持久性,任务时间和睡眠。 您在工作中学到的知识最多的时候也就是您需要休息最多的时候。

在实现graphql解析器的过程中,我尽力遵循一些专注于休息的实践。 白天,我每次要工作25分钟到半个小时,在这之间的休息时间可以在我们的办公园区内散步。 每天晚上,我都会确保自己睡眠充足,以促进完成任务所需的学习量。

我在职业生涯的更早时期发现,与专注于工作的8个小时相比,专注于4个小时的工作(不包括休息时间)的工作效率要高得多,因此我会尽力优化这一数字。 不参加直接影响我们团队的会议,在消息传递系统上并不总是可用以及保持相对不受干扰的环境使我能够真正地花时间研究问题并制定每天学习的信息以改善开发过程。

这4个小时的专注工作不仅使我学到了更多知识,而且工作质量更高,而且我也没有陷入负面开发工作的陷阱。 当您执行复杂的任务扩展您所拥有的知识面并占用大量工作记忆时,让自己分心或无法保持最佳的专注力会导致您从事的工作最终最终会阻碍您的工作。

负面工作在软件开发中极为普遍。 添加不正确的依赖关系,忘记固定版本或编写逻辑路径错误或错误的方法(一两个),将来这部分代码的维护者(将来您或其他开发人员)都想面对您多少时间他们需要阅读和调试您编写的内容。

一些工程师始终心不在work地工作,最终导致浪费时间的问题比有效的可工作代码更多。 这些工程师会对他们的工作产生负面的净影响,他们伤害了团队而不是推动项目前进。

劳累时,请自己和您的队友帮个忙,不要写代码。 当您分心,打电话时或有20个人问您问题时,请勿编写代码。 它将使项目团队和未来的维护者受益于其生命周期的未来。

在每个工作日结束时,我会去健身房或排球场,并进行至少50分钟的锻炼。

这听起来可能很多,但是50分钟的标记是几年实践的积累。 我说的练习与我执行的练习或可以举起的重量无关。 我的意思是去健身房锻炼的一种方法,周一至周五带我的健身房衣服,不管我花多少时间,每天都要去健身房。 这种练习是健身房中所有其他成果或成就的基础,而这种练习是我最难融入生活的一种练习。

我不是每天开始做50分钟的运动,也不建议初学者坚持不懈地进行锻炼,以迫使他们的身体达到这一标准。 我从锻炼20至30分钟开始,评估自己的精力和情绪,然后决定是否继续锻炼。

我发现随着时间的流逝,我做得越多,就越容易留下来。 几个月后,如果我至少每周至少3或4天不进行此运动,我会感到有些不适。 我的身体感觉不健康,我不如上体育馆时幸福。

血流量的增加和压力的减少有助于长期健康,并有助于增加神经发生,神经发生是每个人大脑中新的脑细胞生长的过程,有助于促进更好的学习[3]。

尽管这种渐进的改进方法并不是解决问题的最性感方法,但它往往是影响最大的方法。 请记住,并非总是最令人兴奋的想法会产生最佳结果。 而是经常以新方式持续应用“无聊”的方法,最终对您的大脑健康和工作生活产生最大的影响。

在执行此任务的过程中,有很多次我感到不适应。 在截止日期之前要学习的事实如此之多,我感到害怕我无法完成它。 当压力堆积在一个人身上时,即使是开始一项任务的简单动作也似乎是一项无法克服的挑战。

看似无限数量的变量的任何组合都可能组合在一起,并损害您解决特定问题的信心。 幸运的是, 感觉不是事实 ,有多种方法可以继续感觉到并继续推动解决特定问题。

当项目中的压力水平开始逐渐升高时,跟踪进度的变化就会顺理成章。 可以用来帮助您继续取得进步的最佳心态转变之一是根据您在任何一天中所完成的工作量来评估自己。

在重读上一句话时,这个想法似乎违反直觉。 看来,如果我们要努力实现特定的长期目标,那么我们的自然倾向就是将每天的进度视为这一大目标的一小部分。 但是,人脑不太倾向于长期维护计划,而是选择留在当前和现在以有效地标记资源并防止危险。 如果您考虑一下,我们就需要在避免自然灾害威胁生命的同时,平衡自然的探索趋势。 这倾向于短期优化。

但是,如果我们只看距离目标还有多远,那么只有在实际实现目标时我们才会获得回报。 到达那里需要很长的路要走,没有任何回报。 而且,如果我们在任何一天都没有以完成或享受的感觉来回报自己,那么大多数时候我们将无法改变自己的路线,并谋求更长远的发展

我们已经提到过,解决问题的好方法是花时间,学习与问题相关的信息并获得良好的睡眠。 如果您在任何特定的一天都针对这三件事进行了优化,那么您就会知道自己的方向正确。

在遇到这个特殊问题时,我习惯于跟踪自己的工作时间,从字面上看自己是“积蓄了点数”。 每天,我会不间断地工作2-4个小时。 每天结束时,我都会回头看看,我取得了多少进展,并陶醉于我学到了很多东西,并且离解决方案还差得远(即使我不知道确切要花多长时间)的事实。将采取)。

答案将随时间而来。 只要您继续研究任务,询问其他上下文和信息,并写下/处理所学内容,您就可以在某个时间点完成任务。 该时间点可能比使用该特定技术堆栈并在公司中工作超过15年的主管慢得多,但这并不意味着您将无法完成它并达到她的熟练水平有些时候。

是的,有时候您会觉得其他所有人都比您更了解特定的问题。 是的,您将面临许多问题,这些问题需要您比许多同事花费更多的时间。 但是请放心,正是在这些沮丧的大火中,您的技术才得以锻造。

只要您继续努力解决问题,您的成功才是最终的! 坚持不懈地工作,答案就会来临。

您在工作中学习的越多,就会有更多的人为您提供贡献的机会。 系统和技术知识的一致构建将使您能够解决比以前认为的更深层和更难的问题,并且您将获得更大的任务。

这样做时间足够长,您将成为您所在领域的专家,被要求解决有价值的大大小小的问题。

是否有相关的变更经验或解决新问题的方法? 在评论中分享!

上面提到的额外资源

[1]快速思考和缓慢思考

[2]工作记忆

[3]运动和神经发生增加