我的代码是艺术,必须是完美的
我在五年内作为程序员工作。自从你们中的一些人可能有三倍的工作经验,这并不令人印象深刻,但我喜欢把自己视为一个高级开发人员。这听起来很严肃,重要吗?
有一天,我成为MED-Tech Startup的首席技术官(CTO)。经过一段时间的新工作角色,我可以回头说,我不是一个高级开发人员。不要让我错了 - 我仍然相信我有关于编程的良好知识,尤其是网络发展 - 但是,如果是这种情况,我为什么要说我不是一名高级资深程序员?
因为这四件事我现在在我的脑海里。
1.用户是白痴
不,他们不是。
是的,用户在意外使用应用程序,通常很奇怪。
是的,用户可以提出似乎真正愚蠢的问题。
是的,有时用户需要看起来毫无意义的功能。
是的,用户对似乎是不言自明的函数很难使用。
用户不是专家。我的医生不要求我知道低密度和高密度脂蛋白之间的差异。那么,为什么我曾经假设用户应该知道他们使用什么样的浏览器?这对我来说是显而易见的,但我的妈妈认为谷歌和互联网是同义词。她会说她不使用任何浏览器,因为她使用谷歌。
有时要使用户开心,我不得不覆盖框架零件来改变其默认行为。有时我必须为我不想浏览器添加支持(Safari用户的问候)。当我今天谈论它时,这是愚蠢的,但是那些日子我真的认为这是客户的错,因为我必须在我的代码中做一些解决方法只是因为他们的定制要求。
我的代码是艺术,必须完美
清洁代码,单元测试,伟大的文档 - 这些无疑是重要的事情。作为程序员,我一直想使用现代模式编写干净的代码,我经常检查项目中的所有依赖性是否是最新的,我想成为好程序员。
当我的产品经理让我删除单元测试以提高开发速度,我感到生气 - 他没有意识到单元测试的重要程度如何?我们没有任何其他自动测试,因此UT是我们唯一希望使产品稳定和无竞争的希望。
这个决定似乎对我来说是短暂的。此外,他建议我们应该停止编写文档并将代码转换为更复杂的架构(我们可以这样做,因为我们在项目开始时)。
好的,我同意这将加快开发一段时间,但我们将来会有很多问题。我们会浪费很多时间修复回归错误,当项目增长时,新架构将太简单!我们将如何向项目推出新的程序员,没有良好的自述文件?
我们花了几个小时讨论这个决定有多糟糕 - 以及将来会花多少钱。
该项目几个月后失败,因为它大幅超过预算。
几年后,我必须承认真相:我们的团队犯了一个巨大的错误。我们想到了未来并忘记了现在。我们完全忽略了这种情况 - 小预算,需要在短时间内创建MVP。
很高兴制作您可以向别人展示并为之骄傲的代码。但成功完成项目更好。毕竟,编程不是艺术。
3.我会为这个项目使用“x”,因为我知道
在我以前的公司中,我们使用相同的技术栈创建了每个项目:Symfony和Angular。为什么?symfony是最好的后端框架吗?没有。也许Angular是创造现代前端的唯一方法?没有。我们总是选择了这组技术,因为我们不知道别人以及这些技术。那是我们的舒适区,但为新项目选择知名技术是错误的吗?这取决于。
在许多情况下,您的下一个项目或多或少类似于以前的项目。自从您已经有经过验证的解决方案以来,花费大量时间学习新技术将没有意义。但有时,它可能是错误的决定。
我记得一个工作良好工作WebSocket的项目是最重要的要求。我们选择创建后端做了什么?Symfony,当然是。也许今天它更容易在PHP中创建WS,但那些日子是噩梦。我们花了很多时间做它的工作。我的意思是很多。我们意识到基于PHP的WS会花费多少时间(和金钱),但我们扔掉了使用节点的想法。为什么?我真的不知道。在节点中,我们将更快地构建API 10x,但这不是我们的团队的技术堆栈。
我很高兴我当前的团队中的程序员比我更开心。上周我们决定完全切换用于构建我们系统的一部分的技术。我相信这个决定将拯救我们很多时间,即使它意味着从头开始学习一些东西。
我的产品所有者/经理错误,我会更好
当我作为程序员工作时,我与产品经理的关系是……艰难的。每当他告诉我关于任务范围的新变化时,我就想:
为什么你不能做你的工作并在开始工作之前定义范围?!是否需要提前决定该功能如何工作?
那太天真了,但我真的认为这很容易。现在我完全了解具有挑战性的人才如何规划项目的每一个细节。您必须考虑到技术和预算的局限性(其实际上是相同的事情),您必须考虑将使用您的产品的用户,您无法忘记商业和营销要求。有时,一些要求在一开始就不知道;有时,业务环境发生变化,有时你必须先建造一些东西来弄清楚它可以做得更好。
另一件事 - 产品经理可以犯错误。这就像那样简单。程序员也会出错。当我现在想到时,这是如此明显。如果我以前意识到,我将是一个更好的程序员。我应该专注于找到解决方案的,而不是试图展示它们的错误。
它是讽刺和悲伤的,但在某些时候,我忘了我和经理人的目标是相同的目标 - 制作一个很棒的产品。他们只是比预算,商业环境,客户端,截止日期和优先事项的要求更广泛的知识。这就是为什么我不明白他们的一些决定。
概括
对于你们中的一些人来说,这四件事可能是显而易见的。如果你正在拥有一个良好的领导者的伟大,有组织地敏捷团队工作,你就可以思考UX的基本规则 - 我真的很高兴。我假设你可以是比我更好的程序员。因为“成为一个好程序员”不仅仅是关于技术技能。了解您可以为公司带来的价值以及如何做到这一点更为重要。以下是我如何理解高级开发人员术语:
高级开发人员不是了解技术的各个方面的人。它是一个帮助我们公司建立一个伟大产品的人,即使这要求他们越过他们的舒适区边界。解决问题的解决方案。