问题

程序员有必要知道为什么做某个功能吗?

回答
程序员是否 有必要 知道为什么做某个功能? 这是一个经典的问题,答案是 绝对有必要,而且是极其重要的。如果只回答“有”,那可能不够深入。让我们来详细阐述一下原因,从多个维度来分析这个问题。

为什么程序员有必要知道为什么做某个功能?

可以从以下几个方面来理解:

1. 提升代码质量和可维护性

理解业务逻辑的本质: 知道“为什么”意味着理解这个功能要解决的实际问题、用户的需求、以及这个功能在整个产品中的作用。这种理解可以帮助程序员做出更明智的设计决策,例如选择更合适的算法、数据结构、设计模式等。
更优雅的实现: 如果只是盲目地按照需求文档写代码,可能会实现一个功能,但这个功能可能不够灵活、效率不高,或者与其他部分耦合过紧。了解“为什么”可以帮助程序员跳出“如何做”的框架,思考更根本的解决方案,写出更简洁、更高效、更易于扩展的代码。
避免“需求变形”: 很多时候,原始需求在传递过程中可能会失真或者被误解。如果程序员不理解背后的意图,很容易将误解的代码实现出来。理解“为什么”有助于程序员识别出需求中可能存在的问题,或者在发现更优解决方案时,有理有据地提出并说服团队。
未来重构和迭代的基石: 当产品需要修改或迭代时,理解功能的“为什么”至关重要。知道功能存在的意义,能帮助程序员快速理解现有代码的意图,从而更有效地进行重构、添加新功能或修复bug,而不会因为不了解背景而引入新的问题。

2. 提高开发效率和减少返工

更准确的需求理解: 如果不明白“为什么”,程序员可能会在实现过程中反复试探,不断猜测需求。这会浪费大量的时间。理解了目标,就可以更直接地朝着目标前进。
减少沟通成本和返工: 当程序员理解了功能的价值和目标时,在开发过程中遇到不确定的地方,可以更准确地提出问题,而不是模糊地询问“怎么做”。这能大大减少与产品经理、设计师等沟通的次数,也避免了因为理解错误而导致的返工。
主动解决问题: 知道“为什么”的程序员,往往能预见到潜在的问题或优化点,并主动提出解决方案。他们不是被动地执行任务,而是主动地为产品贡献价值。

3. 增强职业发展和个人成长

从执行者到贡献者的转变: 只知道“如何做”的程序员,很容易沦为机械的执行者。而理解“为什么”的程序员,能从业务、产品、用户等更宏观的层面思考问题,逐渐从执行者转变为产品和业务的贡献者,甚至成为核心的推动者。
培养产品思维: 很多优秀的程序员都具备“产品思维”。这种思维的核心就是理解用户需求和产品目标。了解功能的“为什么”是培养产品思维的起点。
提升解决复杂问题的能力: 很多时候,问题的复杂性在于其背后的原因和约束。只有理解了“为什么”,才能更好地应对和解决复杂的、边界模糊的问题。
职业晋升的驱动力: 在技术团队中,那些能够理解业务、提出创新性解决方案、并且能够清晰阐述自己设计思路的程序员,往往更容易获得晋升机会。

4. 促进团队协作和信息共享

更有效的团队沟通: 当团队成员都理解了功能的“为什么”时,讨论问题、制定方案、分配任务都会更加高效和顺畅。大家可以站在共同的理解基础上来协作。
知识的传递和沉淀: 当一个功能被开发出来时,如果团队成员都了解其背后的原因,这本身就是一种知识的传递。随着时间的推移,这些知识会沉淀下来,成为团队的宝贵财富。
培养共同的愿景: 理解功能的“为什么”有助于团队成员形成对产品和目标的共同愿景。这种共同的愿景能够激发团队的凝聚力和创造力。

5. 确保功能设计的合理性和用户体验

从用户角度思考: 知道“为什么”往往意味着知道这个功能是为了满足用户的某个痛点或需求。这能促使程序员从用户的角度出发,思考如何让功能更好用、更易用。
权衡和取舍: 在开发过程中,常常需要在不同的实现方案之间进行权衡,例如性能与开发时间,功能完整性与用户体验等。理解功能的“为什么”可以帮助程序员做出更合理的取舍,确保最终的功能能够最大化地满足核心需求。
发现潜在的设计缺陷: 有时候,需求的表述可能存在一些内在的逻辑矛盾或者用户体验上的隐患。如果程序员不理解“为什么”,可能就会照搬不误。如果理解了背后的原因,就可能发现这些潜在的问题,并提出改进建议。

什么时候尤为重要?

虽然“为什么”对所有功能都重要,但在以下情况尤为关键:

复杂或创新性的功能: 越是复杂或需要创新性的功能,越需要理解其核心目的来指导设计和实现。
涉及多个模块或团队协作的功能: 确保所有参与者都理解相同的目标,才能保证协作的顺畅。
需要进行性能优化或资源限制的功能: 理解功能的“为什么”有助于找到最关键的优化点。
与公司战略或核心业务强相关的功能: 这种功能往往承载着重要的业务价值,理解其意义能帮助程序员做出更符合战略的实现。
需求不明确或有歧义的情况: 这是最需要主动去探究“为什么”的时候。

如何获得“为什么”?

程序员可以通过多种途径来了解功能的“为什么”:

主动沟通: 直接与产品经理、项目经理、甚至是用户进行沟通。不要害怕提问,提问是学习和理解的最好方式。
阅读文档: 仔细阅读需求文档、产品设计文档、用户故事等。
参与评审: 积极参与需求评审、设计评审,听取不同角色的意见和思考。
观察用户: 如果可能,观察用户如何使用产品,理解他们的行为和痛点。
了解业务背景: 学习公司的业务模式、市场竞争、用户群体等,将技术实现与业务价值联系起来。

总结

总而言之,程序员有必要知道为什么做某个功能,这不仅仅是“锦上添花”,而是 提升代码质量、提高开发效率、促进个人成长、优化团队协作、以及确保功能成功的关键要素。一个仅仅知道“如何做”的程序员,可能是一个合格的执行者,但一个理解“为什么”的程序员,才是一个真正有价值的贡献者,能够推动产品向前发展。

所以,下次接到任务时,不妨多问一句:“这个功能是为了解决什么问题?” 这个问题,将开启你从“代码的编写者”到“有思想的创造者”的转变。

网友意见

user avatar

一个包含了产品设计和技术开发的项目,粗略得可以看成两种角色的一场合作,那就是产品经理和研发人员。

产品也好研发也好,能做好这个工作主要靠能力,能力包括知识经验和智力水平,不光要有知识和经验,做逻辑推理创新思维还是要靠智商的。

那么如果把能力抽象成为强和弱,再组合上产品研发,则可以组成四象限,也就是四种排列组合。

  1. 研发和产品能力都很强,恭喜你,这是个精英组织,高手之间的合作会非常顺畅,效率极高,产品知道自己该做什么,研发也知道为什么要做。但是这种组织非常少见,基本只出现在精英创业团队的早期,或者行业头部企业的核心部门。
  2. 研发和产品能力都很弱,那种公司恐怕命不久矣,如果没有什么特别的其它资源优势,混不了几年就会挂了,如果你判断是这种情况,赶紧跑路。

上面两种情况组合都是少数,绝大多数企业处于下面两种状态。

研发能力强或者产品能力强,大多数企业没能力维持全精英团队,只能根据自身业务情况选择保证其中一方能力强,这样的企业占大多数,而且有一方能力强也能维持一定竞争力,可以活下去,遇到行业风口可能还能发展得不错,如果运气好成为行业头部公司了,再花资源把弱项弥补一下。

在这种企业或者项目,你身为一个研发或产品就要搞清楚一件事情,这个组织里是哪种情况,是产品能力强还是研发能力强,谁强就听谁的。如果产品和研发能就这个问题达成共识,那么也能和谐相处,并且工作效率还不错。如果不能达成共识,那么其实就是一种情况,产品和研发都认为对方能力弱,而且他们两方肯定有一方的判断是对的,但是他们都认为自己的判断才是对的。互相认为对方能力强这种事是不可能发生的。

题主遇到的就是这种情况,产品研发各自都认为自己能力强而对方能力弱,不肯听从对方的意见或者按照对方的要求去做,于是闹得不愉快合作无法进行。产品认为自己能力强,研发能力弱,所以研发无需知道为什么只要照做就是了,而研发认为自己能力强,产品能力弱,所以不想按照产品的安排去执行,要有自己的想法。

合作的基础其实不是双方的判断都是正确的,而是达成共识,即使你们的判断都错了,只要错得一样也算是共识,在共识的基础上项目才能推进,在推进过程中如果发现判断错了可以调整,然后重新达成共识。

再次强调,合作的基础是共识。所以如果其中一方特别期望项目能够推进,那么可以妥协一下迁就对方,也能暂时达成共识,哪怕是虚假的临时共识,总好过存在分歧项目停滞不前。

有人举了西安的健康码的案例,其实这个例子特别有意思,这个项目能落地能上线,说明它开发期间能顺利推进,说明它的产品和研发达成了共识,显然是产品认为自己能力强,设计出来研发去执行就好,研发方也认同产品能力强自己无需过多思考只管执行就好。他们达成了共识,所以项目能推进能上线。但是最终结果表明,项目存在设计缺陷出了事故,那么说明当初产品和研发达成了一个错误的共识,并且没有在项目进行过程中纠正共识。产品认为自己能力强,但是他们没有考虑到上线后的负载并发压力,所以实际上他们能力弱。研发也错误的判断了产品的能力,而主动放弃思考,没有给出技术上的解决方案,说明研发实际上能力弱,并且也认为自己能力弱。

也就是这个案例里,实际上能力都很弱的产品和研发,在项目合作中,都认为产品能力强而研发能力弱,所以能就项目需求设计达成共识,项目顺利上线。但是实际上是个错误的共识。

能够达成共识,合作顺利,项目能上线。达成错误共识,项目最终结果很烂。

user avatar

对于一个负责任的程序员来说,是一定要知道的。

在需求方眼里,我要这个功能,你就说能不能写。而程序员需要考虑的是,这个功能哪部分未来可能会扩展,哪些不会变,有多少人会同时使用,响应速度下限是多少,需不需要缓存,数据一致性,对现有框架有什么影响。。。

甚至会提出一个更好的满足需求的方案,同时保持系统的简洁优美。

而不负责的程序员,完全可以不提任何问题,不了解需求背景,很快做出一个符合需求,挑不出错的功能。

但上线以后,既不能改,也不能动,用的人一多就崩溃,宕机时间还特别长。

user avatar

首先就问题而言,没有任何必要,程序员本质上是一个翻译,将需求翻译为计算机可以理解的语言(程序设计语言)而已。

但问题在于,几乎没有任何一个需求是完备和自洽的。大多数时候这不是因为哥德尔不完备定理,毕竟能知道这个名词的产品经理都是万里挑一的,而是产品人员自身思维的局限性使得其无法发现需求中存在的问题。


就比如说提问者,就很自然的混淆了,做不了没必要做这两个截然不同的概念。而且可能永远也意识不到……


所以综上所述,程序员没有必要知道为什么要做某个功能,但是绝大多数产品经理的的专业技能无法弥补需求中存在的缺陷,需要程序员和其他专业人员的参与……

user avatar

场景一

老板:小伙子,给我做一个图片显示的功能,我APP上要能显示图片。

程序员:好的,老板,图片我给你放服务器渲染,再让客户端下载。

场景二

老板:大程子,给我做一个图片显示的功能,我APP上要能显示图片。这个图片是咱们城市的健康码

程序员:好的,老板,那这个图片访问量应该很大,并发量也很大,实时性要求也高。我生成图片时压缩一下,我再把整个请求流程优化,提高响应速度。老板,我建议我们升级系统配置,增加带宽,扩大集群,目前咱们这边有些特殊情况,访问量会非常巨大,对服务器和数据库的压力比以往要多几倍。并且,我们做好测试工作避免上线之后遇到问题。这可是关系到民生的大事,我会再尝试客户端渲染的方案,这样可以让服务器这边和带宽的压力减小。

老板:好,就这么干。

就多说一句话,所有的隐性需求都被充分的挖掘了出来,请问,这么做有必要吗?

user avatar

我从来不管为什么做某个功能。

明明就是个搬砖的,偏偏要管整个房子的结构,真的是赚着卖白菜的钱,操着卖白粉的心。

反正需求文档下来了,我就做。如果没有需求文档,至少要有个字面大致成文的东西,否则我肯定是不开工的。不然我做完了之后表示并不需要这功能,做了个寂寞。

只要有文档,表示让我做,我就做。后面发现不需要做了,再变更任务分配,给我一个任务取消的任务。毕竟把功能去掉也是一个任务呢。至于什么修改功能的具体内容,那都是日常操作,不过修改什么东西都需要在文档中明确。如果没有文档就说明产品经理自己都没有想好要什么。自己都没有想好的情况下不要和我讲话。我只负责实现,不负责研究是否需要实现,那是产品经理、需求工程师、领导、或者我不知道的人的任务。如果需求弄的不对,反复修改,那都是上述这些人的毛病,反正不是我的毛病。但是需求交到我手里了,从技术上来看能实现,我不做,就是我的毛病。我既然拿了工资就要对得起工资,需求交到我手里我就做。即使这个做了会把全局弄崩溃,我也不管的。如果我评估局面会比较严重,我会提醒一下领导,但是如果领导依然表示做,我就会继续做。我会默默的把“该修改可能会导致XXXXX”记在小本本上,等到XXXXX发生的时候我就会帮领导回忆一下这个局面。下次我提醒的时候,领导就会更慎重的考虑一下我的建议。当然如果XXXXX没有发生,那就表明我错了,领导是对的,我就保持低调就可以了。

反正只要公司由于规划不佳导致的反复修改不至于把公司自己玩死,我就继续干。如果公司把自己玩死了我就换一个公司。

类似的话题

  • 回答
    程序员是否 有必要 知道为什么做某个功能? 这是一个经典的问题,答案是 绝对有必要,而且是极其重要的。如果只回答“有”,那可能不够深入。让我们来详细阐述一下原因,从多个维度来分析这个问题。 为什么程序员有必要知道为什么做某个功能?可以从以下几个方面来理解: 1. 提升代码质量和可维护性 理解业务.............
  • 回答
    这是一个非常好的问题,也是一个程序员在实际开发中经常会遇到的权衡。答案并不是简单的“是”或“否”,而是取决于具体情况、项目目标、以及权衡的代价。简单来说,提升几毫秒或节省几 kB 内存在某些情况下非常有必要,但在另一些情况下则可能是过度优化,甚至适得其反。下面我将从多个角度详细解释这个问题: 1. .............
  • 回答
    程序员必备的书籍是一个涵盖技术、设计、工程、算法、工具等多个领域的知识体系,以下从不同角度分类推荐,涵盖从入门到进阶的经典书籍,适合不同层次的程序员: 一、编程基础与软件工程1. 《代码大全》(Code Complete) 作者:Steve McConnell 定位:程序员的“圣.............
  • 回答
    作为一名怀揣理想的程序员,踏上这段充满挑战与创造的旅程,阅读无疑是我们最忠实的伙伴和最锐利的武器。市面上的技术书籍汗牛充栋,但要从中挑选出那些真正能启迪思维、塑造价值观、引领我们走向卓越的经典,则需要一些指导。下面,我将结合自己的学习和思考,为你梳理一些我认为“必读”的书籍,并尽量深入地聊聊它们为何.............
  • 回答
    关于港珠澳大桥到底值不值得,这确实是一个非常值得探讨的问题,毕竟它的投资金额高达千亿,而我们常听到的一个说法是它“只为了减少三十分钟通程”。我先不说这说法本身是否准确,咱们得好好掰扯掰扯,这1800亿人民币(约合1900亿港元或2300亿人民币,不同来源数据略有出入,但都是天文数字)花下去,到底图个.............
  • 回答
    Perl 在IC设计中的妙用:前端工程师的“瑞士军刀”对于数字IC前端设计,是否需要掌握诸如Perl这样的脚本语言?答案是肯定的,而且非常有必要。它绝非锦上添花,而是实实在在提升效率、解决痛点的关键工具。你可以把Perl想象成IC设计工程师的“瑞士军刀”,在繁杂的流程中,它总能找到一个切入点,让原本.............
  • 回答
    你这个问题非常普遍,也很有价值。确实,在技术圈子里,算法的重要性经常被强调,甚至到了“神化”的地步。但同时,很多程序员的日常工作也未必会直接用到复杂的算法。所以,理解这个问题需要多方面的分析。我们来详细地探讨一下: 算法在程序员心中的“神坛”与现实的差距 为什么算法被“吹上天”?1. 面试的敲门砖.............
  • 回答
    程序员想要在技术道路上走得更远,算法知识是绕不开的基石。但“掌握”这个词,说起来容易,做起来却需要真刀真枪的实践和深入的理解。与其说是一份枯燥的“必修课”列表,不如说是一套能够让你在编程世界里游刃有余、解决各种疑难杂症的“工具箱”。那么,到底哪些算法是每个程序员都应该花时间去钻研的呢?我尽量详细地说.............
  • 回答
    哈哈,这个问题挺有意思的。说实话,我接触过不少程序员,他们的兴趣爱好可以说是五花八门,从户外运动到室内品茗,从古典音乐到电子摇滚,什么都有。而二次元,也就是动画、漫画、游戏这些文化领域,确实在程序员群体里有不少拥趸,但这并不代表做程序员就“必须”喜欢二次元。为什么会有这种“程序员=喜欢二次元”的印象.............
  • 回答
    嘿,这个问题我太熟悉了!身边好多朋友做游戏开发,都会纠结是先 C++ 还是 C。 说实话,游戏程序员“必须”修 C 吗? 这个问题的答案,更像是“是否最方便、最主流”。如果你想进游戏行业,而且想快速上手、看到成果,那么 C 绝对是条非常顺畅的道路。 为什么这么说呢? 现在的游戏开发,尤其是独立游戏.............
  • 回答
    说Git算不算程序员的必备技能? 我觉得,如果一个程序员想要在这个行业里走得更远,并且能够和别人顺畅、高效地协作,那么Git几乎是绕不开的。想象一下,你一个人开发项目,文件改来改去,突然发现某个改动不对劲,想要回退到上一个状态,如果没有Git,你可能只能手动备份,或者祈祷自己记得所有改动。但一旦项目.............
  • 回答
    程序员确实存在“流派”,但它不像武侠小说里那样有明确的师承和招式。这里的“流派”更多是指程序员在编程理念、技术栈选择、解决问题的方法、对软件工程的理解等方面形成的独特风格、偏好和倾向。这些流派不是相互隔绝的,很多程序员会融合不同流派的特点。我们可以从以下几个维度来理解程序员的流派:一、 基于技术栈和.............
  • 回答
    程序员嘛,写出烂代码,有时候也不是故意,就是各种“客观原因”嘛。我琢磨着,这原因可多了去了,而且每个理由都还挺有道理的,就像是为自己的“作品”找了个精神导师似的。首先,最常见也最“正当”的,就是 “时间太赶了!” 这个理由。项目上线日期像一把达摩克利斯之剑,悬在头上。老板、产品经理、甚至隔壁部门的同.............
  • 回答
    谈到程序员们“不外传”的代码,这确实是一个挺有意思的话题。与其说是藏着掖着,更像是代码本身承载着开发者们的心血、智慧和对这个世界的独特理解,所以自然不愿意轻易示人,或者说,别人也未必能真的“看懂”其中的精髓。首先,我们得明白,什么是“厉害的代码”?这可不是随便写出来的几行能跑就行。在我看来,“厉害的.............
  • 回答
    程序员过劳死现象确实是一个值得关注的社会问题,而知乎上依然有大量关于劝人转计算机专业的讨论,这背后存在着一些复杂的因素。要理解这个现象,我们需要从多个层面进行分析: 一、 为什么程序员有过劳死的现象?首先,我们必须承认程序员群体确实存在较高的过劳风险。这主要源于以下几个方面:1. 行业发展的高速迭.............
  • 回答
    当然,这种情况在编程领域太常见了,绝大多数的程序员都会或多或少地遇到。这更像是一种职业生涯中的必经之路,而非个别现象。想想看,编程的世界就像一个瞬息万变的生态系统。新的语言、新的框架、新的工具层出不穷,它们往往是为了解决现有技术中的某些痛点,或者是为了拥抱新的计算范式(比如云计算、AI)。而我们作为.............
  • 回答
    高级程序员和普通程序员之间的区别远不止是代码量的多少或入职时间的早晚。它是一个涵盖了思维方式、解决问题能力、技术深度、软技能以及职业发展等多个层面的综合体现。下面我将尽可能详细地阐述这些区别: 一、思维方式和解决问题能力:1. 问题分解与抽象能力: 普通程序员: 更倾向于直接处理具体问题,一步一.............
  • 回答
    绝对有,而且这代沟还挺深的。想想看,我们现在习以为常的很多东西,在老一辈程序员的年代,那简直是天方夜谭。反过来,他们那些坚守的原则和解决问题的方式,对我们有时也显得有点“过时”或“不高效”。首先,最直观的可能就是编程语言和工具了。老一辈程序员可能从汇编、FORTRAN、COBOL这些早期语言开始接触.............
  • 回答
    这个问题很有意思,也触及到了很多关于文化、教育和工作环境的深层讨论。说中国程序员“不如”外国程序员有创造性,这本身就是一个带有主观色彩的判断,而且“创造性”本身就是一个很难量化和界定的词。但我可以尝试从几个方面来解读为什么可能会有这样的观感,并且尽量不让它听起来像个AI的报告。一、 考试导向的教育体.............
  • 回答
    这个问题嘛,我常常觉得,我们这行里,有些哥们儿能把那些看似死板的计算机语言,玩出花儿来,那创造力,真心不是盖的。你想想,写代码这事儿,很多时候就像在给一个极其理性、极其严谨的机器下达指令。它不会像我们人一样,听懂潜台词,理解模糊的指令。你得把每一个步骤、每一个逻辑都拆解得清清楚楚,然后用它能懂的语言.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有