lietoumai/Career

聘用程序员的7个错误

lietoumai opened this issue · 0 comments

没有把最终用户放在心上
人们和公司在软件开发中犯的最大错误之一是他们忘记了他们最终应该为最终用户工作。如果你的软件不能满足将使用它的人的需求和期望,那么你的软件有多花哨、多精通技术都不重要。

避免犯这个错误的最好方法是在你开始编写代码之前,就与使用你开发的软件程序的人亲密接触。与最终用户交谈并倾听他们的意见,因为他们能告诉你你的应用程序需要做什么。这一点看似显而易见,但在任何软件开发项目中,人们往往忽略了这一重要步骤。

在你开始开发软件之前,你必须能够回答以下问题。

  • 用户认为这个软件应该能做什么?
  • 软件将具有什么样的作用和应用?
  • 用户将以什么方式与软件进行交互?
  • 你的用户计划向程序输入哪些信息?
  • 他们希望得到什么类型的信息,以及以什么格式返回?
  • 用户将如何使用得到的信息?
  • 你应该与尽可能多的用户交谈,以获得不同的观点。你必须完全理解软件要解决的问题,甚至比最终用户更清楚。

无论项目是什么,你每与100个用户交谈,你可以期望得到或多或少相同的回应。
他们中大约有30人不愿意与你分享他们的想法,你会很快识别出他们是无益的。尽快结束对话。
他们中大约有40人会提供有用的信息,观点略有不同,但他们大多会说同样的话。这群人会让你对软件需要具备的基本功能有一个坚实的了解。
与你交谈的其余30名用户将是你的最爱。他们要么会有绝妙的想法,要么会说一些帮助你想出绝妙想法的话。这些人是让你值得与所有其他终端用户交谈的人。这群人帮助你创造的功能将真正把你的软件程序卖给市场上的其他用户。
有时你会遇到一个对现有软件程序怀恨在心的用户,并把你的小型访谈看作是一个发牢*的机会。
避免出现把批评当做个人问题的陷阱。相反,要仔细倾听,试图找出智慧的精华。如果用户对某件事情如此激动,那么这是一个信号,如果你能为他或她的挫折源建立一个有充分解决方案的软件程序,你就能获得难以置信的成功。

期望不可能
对软件开发这个词比较陌生的人,往往会承担一些承诺不可能的项目,根本不可行。或者,他们期望软件开发人员能够读懂他们的想法。这些都是典型的失败、沮丧和绝望的设置。
有时,人们会打出一些零散的关于他们想要的软件如何工作的想法,并认为一旦他们选择了一个离岸软件开发商,他们就可以放松地等待收到神奇地满足他们所有需求的程序。不幸的是,这是极不可能的。
如果你想要一个符合你期望的程序,你必须花时间去详细说明和解释这些期望是什么。你在规划和测试软件上的投资与成品与你的期望值的匹配程度直接相关。
即使你花时间仔细制定了详细的计划,你也不能雇用一个离岸软件开发人员,并期望事情能像你希望的那样神奇地成功。你必须在适当的时间,以适当的方式给开发人员必要的工具和指导。简而言之,你必须参与到软件开发的过程中。
总会有意想不到的惊喜。本应是最简单的事情,有时最终却花费了最长的时间,而一些最复杂的组件却在几小时或几天内完成。而有些功能不得不完全放弃,因为它们根本不实用。你必须有灵活性、毅力和正确的态度来克服这些障碍。
适应软件开发项目的曲折需要时间。试着从一个相对简单的小项目开始,随着时间的推移,慢慢增加复杂度和规模。你甚至可以尝试将一个原本计划在内部完成的项目外包出去,这样你就可以在一个你已经了解的项目上监控外包关系。如果你遵循这个建议,当你把昂贵的、高风险的项目外包出去的时候,你就会获得正确有效管理这些项目所需要的经验。
许多新进入软件开发世界的人的另一个不切实际的期望是关于一个程序员能实际完成的工作量。许多人期望通过与一个程序员签订合同,得到一个可与复杂的电子表格程序或文字处理程序相媲美的程序。他们很少意识到,这些程序是由大型跨国公司资助的大型团队经过多年或数十年开发的。指望一个人在一个项目上开发出接近这种数量和质量的代码既不现实也不公平。
另外,很多人对软件开发项目的价格望而却步。他们已经习惯了商店货架上相对便宜的价格标签,但这些价格之所以低,是因为这些程序的数百万份在世界各地销售。相比之下,你可能是你所承包的软件开发项目的唯一客户,因此,你将不得不承担创建的总成本。
与其要求程序员从头开始开发一个新的软件程序,不如尝试要求他或她编写一个定制的应用程序,以解决你现有软件程序的一个具体问题。这是这些个人程序员蓬勃发展的工作类型,依靠批量销售的大公司根本无法与他们竞争。

认为你的项目比实际情况更小或更容易。
很多人都有低估自己项目规模的倾向。当这种情况发生时,可能会导致以下四种情况之一。

程序员埋头苦干,完成了工作,却对你怀恨在心。除非你为超出职责范围的工作提供巨额奖金,否则你很可能成为众所周知的坏买家。
程序员急于完成项目,偷工减料,给你一个略微不合格的项目。有时候,如果你有发言权,哪些作品可以缩短或取消,这还算好的,但如果程序员单独挑选,你有可能会对最终的结果感到失望。
一旦项目的真实规模变得明显,你和程序员就会重新商议项目的规格、时间表和价格。除非你和程序员已经有了长期的专业关系,否则这是不可能发生的。
程序员会改变主意,决定不完成这个项目,迫使你选择另一个离岸软件开发商。

估算你的软件项目有多大(也就是完成这些项目需要多长时间)需要大量的经验和时间,但如果你要做很多长期的软件开发项目,这种时间和精力的投入是非常值得的。
你的估计不一定要精确,但你需要对程序员完成工作大概需要多长时间有一个相当好的想法。如果你上传你的项目描述进行在线竞标,竞标网站的技术支持人员应该能够帮助你制定一个相当准确的估算--特别是如果他们的网站要求将项目放入几个预算范围之一。你也可以在网站上浏览类似的项目,以了解合适的时间估算和价格。

不与程序员分享愿景
一个项目说明,甚至该文件的一节或一个词,可以有令人吃惊的大量解释。特别是在项目的早期阶段,这些对工作范围的不同解释可能会导致混乱,项目开始时的方向与你设想的完全不同。
这就是为什么与程序员分享你的愿景,并确保他或她真正掌握你要完成的工作是如此重要。很多时候,人们与选定的程序员讨论他们的项目,并认为如果他或她不问项目中的某一特定组件的问题,就一定能理解。这可能是一个严重的错误。
程序员对项目的理解(和你的理解)总是基于假设。你在创建项目描述时做了假设,而离岸软件开发人员在阅读你写的东西时也做了假设。不管你经历了多少次修改,也不管你多么明确的尝试。这些假设会影响我们对项目的解释,往往会影响到我们对自己的假设一无所知。而且即使你把项目描述送出去审阅,你也可能把它送给了有类似假设的人,因此也没有发现它们。
你对你的企业和企业的运营环境有广泛的了解,这是决定你需要什么类型的软件的基础。您有责任将这些信息传达给您的软件开发人员。这里有一些提示,可以帮助你的开发人员了解你的需求。

  • 清楚、简洁地写出你的项目描述。虽然有些人认为,更多的文字可以增加具体的细节,但往往会产生相反的效果,因为它们为不同的解释(和误解)提供了更多的机会。
  • 向程序员提出有关你的项目的问题,看看他或她如何用自己的话重新表述任务。这是发现程序员隐藏的假设的好方法。
  • 尽早并经常要求交付成果。这样一来,如果事情偏离了轨道,你就可以在损失太多时间和金钱之前纠正它们。并且在最终编码开始之前,总是要求并审查原型或模拟图来保护自己。但要确保这些要求不只是浪费程序员时间的 "忙活"。确保这些里程碑是真正走向完成最终软件程序的步骤。
  • 要求程序员写一份文档,描述他或她的设计理念。仔细阅读它。如果愿景与你的不一致,在工作开始前与程序员讨论分歧。
  • 与程序员保持开放和频繁的沟通。即使开发人员位于另一个国家和时区,你也可以调整你的时间表,以适应在线或电话会议。使用即时通讯等互联网工具来监控项目的进展,并将那些聊天文件保存起来,以备将来参考,将副本发送给程序员。

让你和你的程序员有一个共同的愿景是很困难的,也是很耗时的,但当它产生了你所期望的最终软件程序时,是非常值得的。

在规划中走捷径
当一个外包软件开发项目开始时,人们很容易陷入对即将开发的新程序的兴奋和期待中。但要注意,这种兴奋不会导致无端的乐观,这会让你忘记规划的重要性,鼓励你不顾一切地匆匆完成项目的早期阶段。
这些早期阶段对项目的成功绝对是至关重要的。虽然规划可能看起来太慢、太枯燥而不重要,但如果没有充分的规划,项目就会落空。规划是项目其余部分建立的基础。
在项目开始之前,你和你的程序员在设计和功能上面临着几乎无限的选择。一旦工作开始,这些选择就会变得越来越有限,而且要改变你和你的程序员最初的选择也变得越来越困难。这就是为什么通过仔细和全面的规划,第一次就把它做好是如此重要。
如果你一开始没有考虑清楚你的项目,你可能直到项目进行了几周或几个月后才会想到一个关键的功能,使它成为一个更好的解决方案。到那时,添加该功能可能为时已晚,至少不会产生重大的费用和延误。例如,如果你在创建项目描述时就想到了这个想法,那么只需多写几行描述性文字,就可以很容易地将其添加进去。如果你在将项目描述放到在线拍卖中之后才想到新功能,你就必须修改招标书,所有的竞标承包商也必须相应地修改他们的出价,这意味着你和他们的时间都被浪费了。如果你已经选择了你想合作的程序员,你就必须和他或她讨论新功能,并重新谈判整个合同,包括成本和时间表。如果你直到你的程序员已经进入开发阶段才想到新功能,程序员可能会被迫重写代码,这意味着你将为程序的一个或多个部分支付两次费用。最后,最糟糕的是,如果你在软件已经开始运行后才想到新功能,你可能不得不创建一个全新的项目来修改程序,你可能不得不担心转移涉及的数据,并在程序离线时找到一个临时的软件解决方案,以便进行修改。
很明显,在时间、金钱和精力上做前期规划是有好处的。但是,不要过于执着于规划,因为如果走到极端,你可能会把所有的时间都花在规划上,而永远不会去实际执行。

忘了自己是项目经理
外包项目可以释放您大量的时间和精力。你已经找到了有技术能力的其他人来完成你的项目。但这并不意味着你可以让离岸软件开发人员自由地做他或她喜欢的事情。必须有一个项目经理,而这个人必须是你。即使你对软件开发不是很了解,更愿意听从专家程序员的意见,你也必须确保你--而不是软件开发人员--是管理者。
好消息是,要成为一个好的管理者,你只需要了解软件要解决的问题--而不是底层技术,因为那是程序员的领域。
一旦你创建了一个充分的项目描述并与离岸服务提供商签订了合同,你仍然有许多任务摆在你面前。

  • 你必须与程序员讨论项目,以确保你以相同的方式和相同的整体愿景来解释细节。
  • 你必须监控项目,确保程序员及时满足所有的里程碑交付点。你必须建立明确的质量预期,并据此评估程序员的工作。
  • 您必须在出现障碍时做出决定,必须在范围、时间线和/或预算中实施项目变更。

离岸程序员不应该被放在管理你的项目的位置上。为什么?因为这是你的项目。你知道你最终要找的是什么,所以你是最好的人选来管理项目的进展,以达到这个目的。另外,程序员没有办法了解你的公司、客户以及他们互动的环境的一切。你是这里的专家,作为管理者,你必须传达足够的信息,以确保最终的产品符合你的需求和期望。最后,你必须是一个积极的管理者,因为如果你不是,当最终产品不能完全满足你的需求时,你将没有理由抱怨。除了你自己,你将没有人可以责怪。

简而言之,外包项目并不能使你摆脱项目管理的责任。拥抱这些责任,您将收获一个精心设计的软件解决方案,完全满足您的公司和终端用户的需求。

未能适当地测试软件
当您将软件开发项目外包时,很容易将注意力集中在开发上,而不是其他。但是测试,虽然经常被忽视,但对项目的成功至关重要。你必须尽早、经常、彻底地进行测试。
程序员永远不应该被置于测试自己的程序的位置上。就像你可能会请同事朋友校对你写的东西一样,程序员应该请其他程序员测试他们的工作。在别人的工作中发现错误比在自己的工作中发现错误要简单得多。
重要的是要认识到,几乎所有的软件程序都包含错误,但不是所有的错误都需要解决。有的错误太小,以至于修复它们的成本不值得,有的错误只在极少数情况下出现。当然,当程序员试图修复现有的bug时,总是有可能引入新的bug,现在不管改变看起来多么简单,所以有时修复它们根本不值得冒险。
在你开始测试之前,你应该有一个明确的计划。不能零敲碎打,因为你希望也需要测试每一个软件组件。专注于最重要的软件功能,尤其是那些可能在未来版本中改变的功能,如果这是你计划的一部分。另外,当你在测试时,一定要记录和跟踪测试结果,这样你就可以看到随着时间的推移而有所改进。在你使用软件的过程中,记录下你遇到的任何bug,以及在bug出现之前你正在做什么,因为这些信息将帮助程序更好地识别和纠正bug。

原文