必须知道的程序员思惟

在博客阅读:https://ssshooter.com/2019-04...javascript

工做

写程序不是为了炫耀本身的技术,是要给公司创造价值,要确实帮助使用这个程序的人。以及以前说过的,当程序员就是为了提升社会效率。前端

高效的代码是每一个程序员的追求,写易懂的代码是每一个程序员的美德。vue

易懂的代码首先是有规范的,从目录结构到代码风格,在项目创建初就应该肯定,能够写进项目文档中,文档用于给初见项目或是接手的程序员一个概览,介绍一下总体结构,技术栈,以及一些坑。java

技术选型注意不要选择没人用的(找不到帮助)、无人维护的(发现 bug 会让你很痛苦)、很难用的(你本身懂也有可能要方便被人懂,选择框架尤为注意,这也是 Vue 热门的缘由吧)。node

控制代码风格可使用 eslint 和 prettier。前者用于代码规范控制,后者用于格式化代码。统一的格式化工具配置也是十分必要的,尤为在协做的时候,若是两边的格式化格式不一样的话,diff 也是地狱般的体验。webpack

编码不规范,维护两行泪

在有规范以后,还要注意不要为了追求极简写些难懂的代码,你必须控制简洁和可读性间的平衡,例如ios

i = i ? (i < 0 ? Math.max(0, len + i) : i) : 0

而有时候,hack 是迫不得已的事情,这个时候必须作好注释。可是须要注意,注释描述的不是作什么(what),而是为何(why)git

一段可读性过关的代码中彻底能看出它在干吗,看不出来作什么的代码很大概率是不及格的代码了。程序员

可读性主要由命名入手,变量名称对整段程序理解的重要性不言而喻;另外,对于一些功能不太好看出来的几个语句的集合,即便不会复用,也能够将其包装成函数,经过函数命名告诉读程序的人(而不是电脑)这一段代码的做用。github

/* 还有一个例子是把对象绑到 vue 的 this,而后不 import 直接用
   对于这个作法...看你喜欢吧
   毫无疑问对于模块化的项目,一个模块就不该该挂在其余地方
   (虽然这么挂上去可能会省掉 webpack 的模块调用,让你的程序快一丁丁丁丁丁丁丁点)
   若是你真的懒到不写 import
   请必定要在绑定的变量加上 $
   至少你这个时候全局搜索仍是很容易找到来源的
*/
Vue.prototype.$axios = Axios

有了规范的编码,仍不足以让整个代码库足够简单,控制代码复杂度是下一个目标。

必定要理解你的所作系统的需求,不然只会在误解和错误的恶性循环中越陷愈深,浪费珍贵的时间。

我最近就接手重构一个先后端耦合的项目,业务逻辑非常复杂,理解需求这一步毫不能逃避,只能一个个细节问清楚。

不要看到大佬提什么需求都一股脑加进去,即便所提的需求很简单,但你须要有足够的时间评估这个功能。

新增需求和需求修改上也是一个道理,不能破坏之前的功能,保证整个系统的纯洁。

因此优雅地添加功能真的很耗时间。

至于真的不可行的需求,请勇敢说不。若是对结构影响很大的需求最好不要改了。不过这是理想,中国程序员好像没有什么地位


在工时预估方面,能够尝试拆分任务,而且要假设一切都会更花时间

拆分任务不只可让你更准确地估计实现时间,还能让你的工做更有条理。

至于优先度,还请结合上司指令和实现难度本身衡量吧。

总之,一个完美的系统不是一步就能造好的。


对于将来的功能,你能够留个后路,但不要提前瞎作“自觉得须要”的功能。否则到时候写了一堆没用的代码都是浪费时间,还可能让提升程序复杂度。

优化方面,参考著名的“不要过早优化”。让正确的程序更快,要比让快速的程序正确容易得多。开发和优化看成两个独立的步骤来作。

Premature optimization is the root of all evil.

维护是软件开发重要而困难的一环。不过若是你按着上面所说的作,我相信...维护不会是难事。

可是若是你的代码写得很恶心,你会为之付出代价。

答应我:宁愿在实现功能时很痛苦,也不要在维护的时候更痛苦。


平常

  • 重复的轮子

    伟大的开源模式让整个编程界发展加速。

    能够站在巨人肩膀上,就别重复造轮子。

    除非你真的很闲(工做不饱和哦~),或者你找到的轮子实在不合心意(如老旧、不优雅、功能太繁杂)

  • 重复的工做

    「重复」是程序员最大的敌人!

    计算机就是负责给你作重复的事情,程序员为何还要作哦?教计算机作就行了!

    你能够依赖 node.js 写处理程序处理你的文档,在编辑代码的时候能够活用快捷键修改代码。

  • 自我开发

    程序员拒绝 996,可是在家不意味着闲着,你仍须要为本身的脑子投资。

    这一行变化还挺快,虽然我也真的彻底不会看将来走向,不懂什么语言和技术会在之后更有价值,可是尽可能不要局限与学习单个语言,也不要由于是前端就彻底不学后端。

    我以为这样才能当一个有格局的程序员。

  • 解决问题

    If you can't explain something in simple terms, you don’t understand it. — Richard Feynman

    若是你不能流利解释一个问题,那说明你仍是没懂,也就是还没真正解决这个问题。如果没真正解决问题,便不能触类旁通解决更多相似问题。

    解决问题要明白问题如何产生,先思考,后行动。行动无解能够到谷歌搬救兵,搜索不到的话……

    最终方案就是到对应社区提问,可是提问一样是一个学问,请看 How To Ask Questions The Smart Way

  • 生产力

    不是代码越多生产力越高,程序员应该都懂,至于老板怎么看,就不得而知了 😂

    One of my most productive days was throwing away 1000 lines of code.  — Ken Thompson

最后,请让上面的思惟铭刻于心中,工做时条件反射地记起 😜

参考连接

Learn the fundamentals of a good developer mindset in 15 minutes

为何过早的优化是万恶之源?