本帖最后由 断天涯大虾 于 2017-4-13 10:05 编辑
老实说,如果你google搜索“程序员的好习惯”这方面的内容,那么就会有很多大同小异的文章映入你的眼帘。
但是今天我想从一个略有不同的角度来探讨这个主题。不是关于如何更擅长编程,而是如何使程序员更有市场竞争力。
不要曲解我上面的意思。更擅长编程肯定能让程序员赚更多的钱。但这方面的提高可能最终会受到边际报酬递减的影响。我今天要谈论的一些实践方法,在程序员要求加薪或寻求新工作的时候,搞不好会让收益产生巨大的增长。
编写可读性强的代码我将从与人直觉相反的这一方面开始。我已经数不清我碰到过多少人认为编写一些不可思议的、复杂的代码可以为他们提供工作的保障。“如果除了我其他人都不知道薪资报告模块是如何工作的话,上面就肯定不敢炒我鱿鱼!”
当然,这在理论上可能是对的(尽管有太多的人在说这句话的时候往往高估了自己)。虽然企业老板可能不会炒掉你,但他们也不会支付你很多薪水。如果公司不能在薪资报告模块上失去你,那么自然而然也不会晋升你。它不会把你放到另一个更受人瞩目的项目上。这样做只会让你牢固地待在当前位置,就像死水一样波澜不惊。
而且,不要自欺欺人地以为这也可以测试市场反应。企业总是希望程序员能够编写干净、可维护的代码。他们需要刷掉不合格的人以满足业务需求。如果你的简历主要特点是“精通寻租行为”,那么你就不会有很多选择,因为在一次又一次的晋升考验中,你的老板总是会略过你。 不要走那条错误的路。与之相反,你需要编写能够使其他人受益的代码,并让业务灵活起来,无论是在项目人员配置上还是在对代码进行更改的时候。
推理不快乐路径在编程世界中,所谓的“快乐路径”提出了一种高度乐观的情景。沿着快乐路径行进,没有出错的地方,也没有错误发生。
很多时候,程序员在编程中犯错误却反而发现了快乐路径。比如说,他们实现一个用户登录页面,当用户键入正确的用户名和密码时,登录成功。但是,如果她输入错误的话,app就会崩溃。但如果她有一个没填的话,那么app就会将其作为管理员登录。哇哦。
不能说明不快乐路径的场景是程序员面临的一个常见陷阱。事实上,之所以会产生这样的思维是因为我们在软件开发的过程中嵌入了自己的假设。于是就算是写代码的同一个人也无法来测试代码。
在编写和测试代码时,学会广泛地去推理不快乐路径的场景。如果作为开发者的你能够因为在推理不快乐路径方面一次成功而出名,那么你对细节的注重将为你赚到更多的酬劳。
创建自动测试也许你一直坚持反对软件行业自动化测试的安装验收。也许你甚至能编写比那些TDD和ATDD程序员更好的代码。在某种意义上,两者之间真的没有关系。
不要误会我。我是自动测试的疯狂支持者,因为它功用巨大并且可以改进代码库。我不但自己实践TDD,还会去教别人这样去做。 但是,大家对于职业生涯中关于功用是否应该排在钱包后面的讨论,各执一词。抵制者还是支持者是否正确变得无关紧要。企业越来越多地要求这种技能出现在求职者的简历上,但却没有一家公司的职位说明上会写“绝不能编写单元测试”。学会写自动化测试,然后见证工作前景的蓬勃发展。
证明你的抉择为什么你要在这里使用工厂模式?为什么你选择那个特定的Javascript框架?如果你在回答这类问题时使用“因为这是正确方法”诸如此类的答案,那么就不会给你带来任何好处。
这个世界在很大程度上依赖于软件和软件开发者的传递性。我们拥有经常使我们处于权威地位的专业知识,特别是在与非技术人员或不太有经验的利益相关者打交道的时候。因此,你会发现,你经常采取的是那种大家尝试的做法,“我说怎么做就怎么做”。
抵制这样做的冲动。至少,要解释你的推理。使用类比和其他方式来帮助人们理解,即使他们缺乏你拥有的技术经验。最重要的是,学习从经验出发去做案例,同时借鉴研究、实验数据或专家意见。职业生涯需要在技术的氛围中才能发展,所以那些学习将编程决策证明也是商业决策的人会发现他们占据了领导地位。
了解你的代码如何让别人赚钱说到业务对你自己的钱包的重要性,那么你能描述你写的某一行给定代码是如何帮助业务吗?你刚添加的用于停止SQL注入的代码行——是帮助你避免砸自己的招牌吗?避免被诉讼吗?如果它实际上并不能提供任何帮助,那怎么办?
如果有人付钱让你写软件,那么你的输出结果就应该产出经济效益。学习并了解这个利益关系。发展向任何人解答这方面内容的能力。 对最新的客户端技术或在云中进行加速的能力感到兴奋的开发人员比比皆是。对这些东西感到兴奋,并且了解如何使用这些能力来赚钱的开发者就少见的多了。
如果你能针对产品特征好好培养对业务动机的理解,那么你就能做得更好。你会找到既能节省时间又同样能实现业务目标的替代方法。或者,当有一个产品特征证明不可能实现时,你可以提出能降低一部分成本的建议。
企业(特别是真正支付薪水的大boss)喜欢这种软件人的思维。这将意味着你可以晋升,提供咨询服务以及担任领导角色。
对职业的思考正如我前面提到的,擅长编程代表了职业生涯的其中一个方面,并且是一个重要的方面。建议大家多考虑许多其他的方面,并且有目的地去发展和培养那些习惯。在你自己的时间里,你应该通过一切手段,爱上这个职业。当然还要确保你可以为他人和为自己赚到钱。
|