热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

漫谈程序员系列:噢,我不想成为问题!

程序员(软件开发工程师)有很多别称,比如“程序猿”、“码农”、“代码工人”、“码字猴”等等,都是幽默的阿猿们自黑的结果。这些个别称,指出了一个不争的事实:程序员要写代码。然而,被遮盖的问

    程序员(软件开发工程师)有很多别称,比如“程序猿”、“码农”、“代码工人”、“码字猴”等等,都是幽默的阿猿们自黑的结果。这些个别称,指出了一个不争的事实:程序员要写代码。然而,被遮盖的问题是:程序员写代码的目的。

程序员的职责是解决问题

    软件的目的是解决生活和生产过程中的问题,为人们带来便利,提高生产力和生产率。

    程序员生产软件,所以,程序员的终极目的是用软件来解决自己和他人生活中的问题。这是程序员的职责,而写代码,不过是解决问题这个复杂旅程中的一小步,非常非常小的一步。

开发软件苦难重重



    程序员是为着解决问题而生的,可实际上,程序员的工作过程中,需要面对许许多多问题,问题让程序员痛苦,一个问题解决之后,新的问题马上又会出现,让程序员继续陷入无尽的痛苦。软件开发其实就是一个不断面对问题和解决问题的过程。所以,从这个角度来讲,开发软件苦难重重。

    考虑软件开发的整个过程,大概有这么几类问题:

  • 产品定义问题
  • 架构设计问题
  • 实现偏离需求
  • 软件BUG
  • 维护问题
  • 沟通问题

    具体的问题我们也无需展开来说,不是本文的重点。本文的重点是,如何面对问题。首先我们要看看几种现实。

鸵鸟症



    鸵鸟在遇到危险时会把头埋进沙子。

    OK ,这是逃避问题的一种方式。

    很多程序员也采取类似的鸵鸟策略来逃避自己面临的问题和需要承受的痛苦,问题解决不了,就拖拖拖,往后拖,就当没看见,兴许到时神迹出现问题不见了呢。

    这都是自欺欺人。虽然鸵鸟策略会让程序员暂时避免了痛苦,但却不得不去承受另外两种更深邃的痛苦:看不到希望的交付期和没有尽头的维护。

贴膏药

    还有一种常见的处理问题的策略,就是贴膏药。这种在解决软件BUG时比较常见。

    说实话软件的质量和程序员个体关系太大,有追求的会写简洁、有效、逻辑清晰的代码,出了问题比较好分析、解决;敷衍的呢,就随便搞搞能 Run 就行,出现 BUG 就很难肠,总是寻寻觅觅寻不到,最后呢,就只能是揣摩着在某条路上堵点东西,贴块膏药,久而久之,这代码就丑陋得不行,到处是狗皮膏药,你要是想揭开看看里面到底是啥,都无从下手。说什么飞越迷雾把代码看清楚,都是梦啊。

绑架产品经理

    有一些问题来源于开发实现与产品需求定义之间的分歧。这个时候就看开发和产品沟通的结果了:要么产品妥协,把一个问题定义为使用习惯什么的以便延后解决;要么打回给开发重新实现。

    我见过很多次妥协的情况,有的问题真的还蛮重要的。我认为这种情况,多数时候是程序员运用自己的技术优势为自己的理解偏离保驾护航,最终绑架了产品经理。这是程序员不愿意看到、看到了也不愿意承认的事实。

接受苦难,实现超越



    令人欣慰的是,只要接受了软件开发苦难重重的事实,程序员就能从苦难中解脱出来,实现产品和自我的超越。程序员正是在承受痛苦和解决问题的过程中,技能、经验和心智得以成长和成熟。如果害怕面对问题,畏惧承受痛苦,一心想要逃避,那么我们虽然能够逃避一时的痛苦,却会承受随之而来的用户投诉、产品失败、公司破产等等更严重的后果。

    你不解决问题,你就会成为问题。作为程序员,这是我们一定要牢记的。

    面对问题的泥沼,不可能跃过,我们的选择,只能是穿越。

直面问题的好处

    程序员都是成年人(有童工吗)了,应该有能力去面对问题和痛苦。但实际情况是,作为成年人的程序员,心理却不一定成熟,有时还是会像小孩子一样,不愿去面对和解决问题。这有能力问题,也有心理问题,但从旁观者看来,这归根结底是能力问题。

    我们来给能力下个定义:解决问题的态度、技能、经验和自我学习的欲望,综合起来就是能力

    直面问题,会提升能力。这是最大的好处。

    规避问题,会失去提升的机会,阻碍自我成长。但我们常常会这么做,一方面是我们倾向于认为正在做的事儿不是我们自己的,是公司的,老板的,我们还有退路;另一方面是因为,接受问题、解决问题会挑战我们的技能、经验、认知习惯,是沉重而痛苦的,人的天性中有一点是拈轻怕重避重就轻,说白了就是愿意当下舒服。

    软件开发过程中的问题不会因为程序员的回避而消失,问题会一直存在,并且老问题会滋生新问题,导致问题越来越多,超出产品、团队、公司所能接受的范围,最终在某个时刻集中爆发出来。

    我有过很多次这样的经历,鸵鸟症让我不自觉地延后问题,总觉得最终交付期限还早,总抱着不切实际的幻想,自己骗自己说随着时间的推移也许问题会自己消失或者出现一些情况让问题不再是问题。但实际情况是,项目不断延期,测试结论总是“达不到释放标准”,为了上线不断地加班,搞得大家伙又疲惫又无奈,期间的痛苦甚至让人绝望,我们都被问题淹没了,看不到出头之日。这个时候我是真心后悔没有及早暴露问题、解决问题,有时也告诫自己下一个版本下一个产品一定不能这样。可事实是,恶性循环一旦形成,惯性很大,很难 break 出来。这会让人厌烦、不堪忍受、不得安宁,努力多次后,当发现在当下的环境里无法改变这种恶性循环时,我会倾向于换个环境重新开始。这也是换工作的一种常见的原因。

    为了避免这种情况,最好的办法就是克服就轻、逃避的欲望与习惯,接纳问题,拥抱痛苦,遇佛杀佛遇鬼杀鬼,第一时间解决各种问题。不要担心自己水平不够解决不了,人的能力都是在做超出自己能力的事情中提高的,这也是自我修炼的要诀:设定比自己能力高一级的目标。

解决问题的实践

    我们把心态放开了放平了,那接下来就是如何解决问题了。每个程序员遇到的问题都不一样,解决问题的具体方法也天差地别,但还是有一些指导性的原则可供参考。

有效沟通

    良好的沟通能力是优秀程序员最显著、最重要的特点。

    如果你不能和别人有效地沟通,那你很难打磨出一个优秀的产品。

    程序员需要和产品经理、市场、客户沟通需求、设计等等问题,这是逃也逃不掉的。虽然有些程序员选择软件开发就是为了避免和人打交道,但残酷的事实是,在如今兵团作战的环境下,“两耳不闻窗外事,抱着键盘敲敲敲”的埋头苦搞是搞不出来好东西来的。

    程序员还要和开发同事、测试 MM 沟通,简直是各种沟通……

    如果我们能准确地表达我们的想法,正确理解别人的意图,那就可以在产品初期规避很多问题。

尽早暴露问题

    问题暴露得越早越好,解决的成本也越低。如果临近交付时蹦出来神问题,会击垮可怜的程序员,他们会更倾向于回避、掩盖问题,有时实在没辙了,会和测试、产品一起,大家伙一起把自己给说服,改变问题的属性、范畴、严重程度,然后相互安慰,这看起来不是什么问题了。

    从软件开发过程来看,下面的做法会尽早暴露问题:

  • 需求评审
  • 设计评审
  • 同级代码审查
  • 持续集成
  • 迭代测试

正确认识问题

    无论你怎样有效沟通,无论你采取多少措施来尽早暴露问题,还是会有预料不到的事情发生。这就是软件开发的不确定性,是我们必须接受的事实。而对于程序员来讲,一定要牢记,你在生产代码,也在生产 BUG 。我们要正确认识这个事情,出现问题时,不轻视,不回避,不隐瞒,不悲观,实事求是地来面对,实事求是地来解决。

    如果我们不能正确地认识问题,那迟早有一天,我们自己会成为问题,那时,我们面临的,将是被冷落、被淘汰。


  回顾一下其他的吧。

  • 漫谈程序员系列:神奇的四步编程法
  • 漫谈程序员系列:让程序员蛋疼的那些事儿
  • 漫谈程序员系列:伤心小箭,你中了几枝
  • 漫谈程序员系列:怎么告别“混日子”
  • 漫谈程序员系列:你的幸运女神呢
  • 漫谈程序员系列:咦,你也在混日子啊
  • 漫谈程序员系列:请区别对待女程序员
  • 漫谈程序员系列:任性,春节前辞职
  • 漫谈程序员系列:薪资,你是我不能言说的伤
  • 漫谈程序员系列:程序员该不该考虑初创公司
  • 漫谈程序员系列:千奇百怪的程序员
  • 漫谈程序员系列:那些害死程序员的细节
  • 漫谈程序员系列:一个老程序员的2014年终总结
  • 漫谈程序员系列:怎样成为技术达人
  • 漫谈程序员系列:谁是为加班而生的
  • 漫谈程序员系列:找工作的辟邪剑谱
  • 漫谈程序员系列:一张图道尽程序员的出路
  • 漫谈程序员系列:软件开发的十八般乐趣
  • 漫谈程序员系列:程序员到底是什么角色
  • 漫谈程序员系列:别说“我已经很努力了”
  • 漫谈程序员系列:无BUG不生活
  • 漫谈程序员系列:程序员的生活就这样吗
  • 漫谈程序员系列:看看你离优秀有多远
  • 漫谈程序员系列:程序员零门槛?
  • 漫谈程序员系列:3D打印能打印出程序猿吗
  • 漫谈程序员系列:群星闪耀的黄金时代
  • 漫谈程序员系列:受刺激啦,开篇啦

  • 推荐阅读
    • 收割机|篇幅_国内最牛逼的笔记,不接受反驳!!
      收割机|篇幅_国内最牛逼的笔记,不接受反驳!! ... [详细]
    • 迎接云数据库新时代:程序员如何应对变革?
      在数据无处不在的时代,数据库成为了管理和处理数据的核心工具。从早期的信息记录方式到现代的云数据库,数据库技术经历了巨大的变革。本文将探讨云数据库的特点及其对程序员的影响。 ... [详细]
    • 技术总监的角色定位与代码实践
      关于技术总监是否应当参与代码编写,这一议题始终伴随着技术行业的成长而引发广泛的讨论。本文旨在从多个角度探讨技术总监参与代码编写的必要性和影响因素,包括公司背景、发展阶段及团队规模等。 ... [详细]
    • 程序员妻子吐槽:丈夫北漂8年终薪3万,存款情况令人意外
      一位程序员的妻子在网上分享了她丈夫在北京工作八年的经历,月薪仅3万元,存款情况却出乎意料。本文探讨了高学历人才在大城市的职场现状及生活压力。 ... [详细]
    • 探讨架构师在项目中应如何平衡对产品的关注和对团队成员的关注,以实现最佳的开发成果。 ... [详细]
    • 本文详细介绍了如何在 Android 中使用值动画(ValueAnimator)来动态调整 ImageView 的高度,并探讨了相关的关键属性和方法,包括图片填充后的高度、原始图片高度、动画变化因子以及布局重置等。 ... [详细]
    • 云屏系统基于嵌入式微系统msOS,旨在解决当前嵌入式彩屏GUI编程中硬件要求高、软件开发复杂、界面效果不佳等问题。该系统通过结合MCU和Android技术,利用Html5+JavaScript实现高效、易用的图形用户界面开发,使嵌入式开发人员能够专注于业务逻辑。 ... [详细]
    • 本文探讨了现代分布式架构的多样性,包括高并发、多活数据中心、容器化、微服务、高可用性和弹性架构等,并介绍了与这些架构相关的重要管理技术,如DevOps、应用监控和自动化运维。文章还深入分析了分布式系统的核心概念、主要用途及类型,同时对比了单体应用与分布式服务化的优缺点。 ... [详细]
    • 三星Galaxy S8/S8+即将登场,全面解析新旗舰
      3月29日晚11点,备受瞩目的三星Galaxy S8/S8+将正式发布。作为三星在Note 7爆炸事件后的重磅产品,S8/S8+不仅承载着恢复消费者信心的重任,其创新的设计和技术也备受期待。 ... [详细]
    • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
    • 探讨了在PHP应用中处理多个多对多关系时的MySQL数据库设计方案,特别是如何通过一个统一的连接表来管理这些复杂的关系,并保持数据库的性能和可维护性。 ... [详细]
    • 本文介绍了MySQL数据库的安全权限管理思想及其制度流程,涵盖从项目开发、数据库更新到日常运维等多个方面的详细流程控制,旨在通过严格的流程管理和权限控制,有效预防数据安全隐患。 ... [详细]
    • 车载T-BOX智能网联终端的设计与实现
      本文介绍了一款基于瑞萨RH850微控制器、TICC2640R2F蓝牙微控制器和高通MDM9628处理器的T-BOX车载终端的设计。该终端通过集成CAN总线、GPS定位、数据加密、蓝牙通信和LTE无线数据传输技术,实现了车辆信息的高效采集与云端通信,支持远程车辆控制和诊断等功能。 ... [详细]
    • 在软件开发中,接口设计是一项至关重要的任务,它直接影响到系统的可扩展性、可维护性和性能。本文将探讨接口设计的核心理念,并提供一系列实用的设计步骤。 ... [详细]
    • 本文探讨了XSS攻击的基本原理及其防御方法,重点介绍了如何在前后端实施有效的安全措施来防止XSS攻击。 ... [详细]
    author-avatar
    风清淡雅的梦
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有