





软件开发复杂性是你的敌人。任何傻瓜都能让事情变得复杂。反之则很难。
这有利于拥有更易于理解和易于维护的系统。但并不是说应该以简单的名义抛弃功能,甚至是内部功能。当然,通常而言,更优雅往往意味着更简单。
简单是极的复杂,简单也并不意味着快速和肮脏。事实上,为了简化,我们经常需要大量思考和多次迭代工作。收获是更易于维护且不易出错的软件。这里的开发人员包括产品经理、UI设计师、前端工程师、服务端工程师、iOS和Android客户端工程师等,不同的外包项目需要的开发人员不同。这一直是我的一个座右铭——集中和简单。简单或许会比复杂更难;你必须花很多力气使自己的思维变得简单、有条理。
将来,软件开发人员的协作技能会比现在更重要。候选人因为令人印象深刻的名大学资历而被聘用的日子一去不复返了。我生长在学术氛围的家庭,获得学历一直是我生活中重要的目标。因此,我认为学历是简历中重要的内容之一。
直到工作十年后,才真正明白,与学术界表现优的人相比,有团队协作能力和团队精神的人多么重要。合作技能必不可少的原因是无论您受过多么好的教育,如果不能够表达自己的想法和得到他人的支持,您将不能像其它人一样快速前进。速度是未来工作革新的关键。
软件开发高手的一些经验之谈"
用户也是人。我们的产品和我们的失败都可能直接影响他们的生活,对你行为的后果要三思。因为兴趣可以让人不拍吃苦,是人忘寝废食,兴趣会让我们产生主动学习、积极思考、大胆质疑、勇于探索的强大动力。人与人并不相同,人们的思维方式也不同:有时候我们认为困难的东西从商业人士角度看来可能很容易。这是我们必须解决而不是逃避的矛盾。勇于改变需要改变的,接受那些无法改变的,用智慧来分辨其中差异。
软件开发者不“只是写代码”,而是参与开发过程。所以如果公司在使用敏捷(Agile),你必须对其认真对待,起码也要对其保有尊重。代码评审(Code review)是软件开发过程的重要组成部分。对代码评审有所疏忽就不能成为好的软件开发人员。
作为软件开发者,我们对自己部署的代码要负责。我们也负有道德上的责任,不要做不道德的事。有时候对开发人员来说不重要的事情却有极高的商业价值。在数据驱动的世界,我们快速发布功能,以了解它们如何为客户增加价值并从结果中学习和迭代,会有更多的人准备好,不惧怕拿起任何新的或不熟悉的技术来完成任务,这比以往任何时候都重要。商业是一个好的角度,不要逃避它。很少有公司关心你的个人成长。如果公司对你目前的水平不满意,他们一开始就不会聘用你。
对截止时间(deadline)负责。如果在截止时间前完成不了,你必须重新沟通新的截止时间。任务有两种复杂性:内部和外部复杂性。内部复杂性不可避免,因为这是任务本身;外部复杂性来自重新架构系统过程中异常决定的后果。要格外注意外部复杂性超过内部复杂性的情况。这些变化需要体现在已有的代码中,而对代码的修改往往是牵一发而动全身。如果开发者在写代码或架构系统时选择容易而不是好的解决办法,他欠下的技术债迟早有一天是要还的。