Programmer(软件开发工程师)有很多绰号,“程序员”、“码农”、“码工”、“码猴”等等,都是幽默猿自嘲的结果.这些个别的名字指出了一个不争的事实:程序员需要写代码。然而,被遮蔽的问题是:程序员编写代码的目的。程序员的作用是解决问题。软件的目的是解决生活和生产过程中的问题,给人们带来便利,提高生产力和生产力。程序员生产软件,所以程序员的最终目标是用软件来解决自己和他人生活中的问题。那是程序员的工作,编写代码只是解决问题的复杂旅程中的一小步,非常非常小的一步。开发软件充满了艰辛。程序员天生就是解决问题的,但实际上,程序员在工作过程中需要面对很多问题。问题让程序员受苦。一个问题解决了,马上又会出现新的问题。会出现,让程序员继续陷入无尽的痛苦之中。软件开发其实就是一个不断面对和解决问题的过程。所以,从这个角度来看,开发软件是非常困难的。考虑到软件开发的全过程,大概有几类问题:产品定义问题、架构设计问题、实现偏离需求、软件BUG、维护问题、沟通问题,具体的问题我们就不用展开了,这不是本文的重点。本文的重点是如何面对问题。首先,我们来看看一些现实。遇到危险时,鸵鸟会把头埋在沙子里。OK,这是规避问题的一种方式。许多程序员也采用类似的鸵鸟策略来避免他们面临的问题和他们需要承受的痛苦。这都是自欺欺人。虽然鸵鸟策略会让程序员暂时避免痛苦,但他们不得不承受另外两种更深层次的痛苦:看不到希望的交付期和无休止的维护。贴膏药另一种常见的解决问题的策略是贴膏药。这在解决软件错误时更为常见。说实话,软件的好坏与程序员个人关系太大了。追求它的人会写出简洁、有效、逻辑性强的代码。有问题,更容易分析解决;很难,一直在找,找不到。***,我只能试着在某条路上堵点东西,贴上膏药。久而久之,这段代码就会变得丑陋。如果你想揭开它,看看里面是什么,你是做不到的。拨开迷雾,看清代码,都是梦。绑架产品经理的一些问题源于开发实施和产品需求定义不一致。这时候就要看开发和产品沟通的结果了:要么产品妥协,把一个问题定义为使用习惯,以便后期解决;或者回调到开发中重新实现。我见过很多妥协,有些问题确实很重要。我认为,在这种情况下,更多时候是程序员利用自己的技术优势,为自己的理解偏差保驾护航,最终绑架产品经理。这是程序员不愿意看到的事实,也不愿意承认。接受苦难,实现超越。令人欣慰的是,只要接受软件开发是苦难的事实,程序员就能从苦难中解脱出来,实现产品和自我的超越。正是在磨难和解决问题的过程中,程序员的技能、经验和心智得到了成长和成熟。如果我们害怕面对问题,害怕吃苦,想逃避,那么虽然可以暂时逃避痛苦,但会遭受用户投诉、产品故障、公司倒闭等更严重的后果。如果你不解决问题,你就会成为问题。作为程序员,这是我们必须牢记的。面对问题的泥潭,跳过去是不可能的。我们的选择是通过。直接面对问题的好处是程序员是成年人(有没有童工),应该能够面对问题和痛苦。但实际情况是,作为一个成年程序员,他的心理不一定成熟,有时还像个孩子一样,不愿意去面对和解决问题。有能力问题,也有心理问题,但在外人看来,归结为能力问题。我们给能力下一个定义:解决问题的态度、技巧、经验和自学的欲望,组合起来就是能力。直接面对问题会提高你的能力。这是一个很大的好处。如果回避问题,就会失去进步的机会,阻碍自我成长。但是我们经常这样做。一方面,我们容易认为自己做的不是自己的,而是公司的、老板的,自己还有退路;另一方面是因为接受和解决问题会给我们带来挑战。技能、经验和认知习惯是沉重而痛苦的。人性中有一点,就是择轻而易,畏重避重,喜轻。软件开发过程中的问题不会因为程序员的回避而消失。问题会一直存在,老问题又会滋生新问题,导致问题越来越多,超出了产品、团队、公司所能接受的范围。某一刻,集中爆发。我有过很多次这样的经历。鸵鸟使我不知不觉地拖延了问题。总觉得最终交期还是太早了。我总是抱着不切实际的幻想,自欺欺人地说,随着时间的推移,问题可能会自行解决。消失或出现某种情况,使问题不再是问题。但实际情况是项目不断延期,测试结论总是“未达到发布标准”。为了上线,我们不断地加班加点,这让大家很累也很无助。期间的痛苦甚至是绝望,我们都被问题压得喘不过气来,看不到一天的一天。这时候真的很后悔没有早点暴露和解决问题,有时也告诫自己下一个版本下一个产品一定不能这样。但事实是,恶性循环一旦形成,惯性很大,很难突破。这会使人感到厌烦、难以忍受、焦躁不安。经过多次努力,当我发现在当前环境下无法改变这种恶性循环时,我会倾向于改变环境,重新开始。这也是换工作的常见原因。为了避免这种情况,最好的办法就是克服掉以轻心、逃避的欲望和习惯,接受问题,拥抱痛苦,遇佛杀佛,遇鬼杀鬼,花时间解决各种问题。不用担心你的水平不够解决问题。人的能力是通过做超出自己能力范围的事情来提高的。这也是修身的关键:设定比自己能力高一个层次的目标。在解决问题的实践中,我们放下心态,静下心来,接下来就是如何解决问题了。每个程序员遇到的问题都不一样,解决问题的具体方法也大不相同,但还是有一些指导原则可以参考的。有效沟通良好的沟通技巧是优秀程序员最显着和最重要的特征。如果您不能与他人有效沟通,就很难打造出出色的产品。程序员需要与产品经理、市场、客户沟通需求、设计等问题,这是绕不开的。虽然有些程序员选择软件开发是为了逃避与人打交道,但残酷的事实是,在如今兵团打仗的环境下,想要把耳朵贴在窗户上埋头苦干,拿着键盘敲敲打打,是不可能的。好东西出来了。程序员还需要跟开发同事和测试MM交流,各种交流……如果我们能够准确的表达自己的想法,正确的理解别人的意图,那么在产品的早期阶段就可以避免很多问题。尽早暴露问题问题越早暴露越好,解决问题的成本也越低。如果在临近交付时突然冒出一个神级问题,会让可怜的程序员不知所措。他们会更倾向于回避和掩盖问题。属性,类别,严重性,然后互相安抚,好像都不是问题了。从软件开发过程的角度来看,以下做法会尽快暴露问题:需求评审、设计评审、同行代码评审、持续集成、迭代测试、正确认识问题你采取多少措施尽早暴露问题,还是会有意想不到的事情发生。这就是软件开发的不确定性,是我们必须接受的事实。对于程序员来说,一定要牢记,你在生产代码的同时也在生产BUG。我们必须正确认识这件事情,出现问题时,不能轻视、回避、隐瞒、悲观,而是实事求是地面对,实事求是地解决。如果我们不能正确地理解问题,迟早我们自己也会成为问题。那时,我们将面临的是被排挤和淘汰。
