必须知道的程序员思维

2019-04-15 admin

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

工作

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

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

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

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

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

编码不规范,维护两行泪

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

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

而有时候,hack 是无可奈何的事情,这个时候必须做好注释。但是需要注意,注释描述的不是做什么(what),而是为什么(why)

一段可读性过关的代码中完全能看出它在干嘛,看不出来做什么的代码很大几率是不及格的代码了。

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

/* 还有一个例子是把对象绑到 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

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

[转载]原文链接:https://segmentfault.com/a/1190000018868172

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。

转载请注明:文章转载自 JavaScript中文网 [https://www.javascriptcn.com]

本文地址:https://www.javascriptcn.com/read-61819.html

文章标题:必须知道的程序员思维

相关文章
从2014年的发展来展望JS的未来将会如何
&lt;font face=&quot;寰�杞�闆呴粦, Arial, sans-serif &quot;&gt;2014骞达紝杞�浠惰�屼笟鍙戝睍杩呴€燂紝鍚勭�嶈��瑷€灞傚嚭涓嶇┓锛屼互婊¤冻鐢ㄦ埛涓嶆柇鍙樺寲鐨勯渶姹傘€傝繖浜涜��...
2015-11-12
12个你未必知道的CSS小知识
虽然CSS并不是一种很复杂的技术,但就算你是一个使用CSS多年的高手,仍然会有很多CSS用法/属性/属性值你从来没使用过,甚至从来没听说过。 1.CSS的color属性并非只能用于文本显示 对于CSS的color属性,相信所有Web开发人员...
2015-11-12
v-charts | 饿了么团队开源的基于 Vue 和 ECharts 的图表工具
在使用echarts生成图表时,经常需要做繁琐的数据类型转化、修改复杂的配置项,v-charts的出现正是为了解决这个 痛点。基于Vue2.0和echarts封装的v-charts图表组件,只需要统一提供一种对前后端都友好的数据格式 设置简...
2018-05-24
ajax为什么令人惊异?ajax的优缺点
使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息。 Ajax不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。就像DHT...
2015-11-12
HTML5的5个不错的开发工具推荐
HTML5规范终于在今年正式定稿,对于从事多年HTML5开发的人员来说绝对是一个重大新闻。数字天堂董事长,DCloud CEO王安也发表了文章,从开发者和用户两个角度分析了HTML对两个人群的优势。其实,关于HTML5的开发工具,我们以往的...
2015-11-12
JavaScript教程:JS中的原型
Keith Peters 几年前发表的一篇博文,关于学习没有“new”的世界,其中解释了使用原型继承代替构造函数。两者都是纯粹的原型编码。 标准方法(The Standard Way) 一直以来,我们学习的在 JavaScript 里创建对...
2015-11-12
AJAX的浏览器支持
AJAX 的要点是 XMLHttpRequest 对象。 不同的浏览器创建 XMLHttpRequest 对象的方法是有差异的。 IE 浏览器使用 ActiveXObject,而其他的浏览器使用名为 XMLHttpRequest 的 Jav...
2015-11-12
typeof、instanceof和contructor的区别
typeof:以字符串的形式返回变量的原始类型,typeof在两种情况下会返回&quot;undefined&quot;:一个变量没有被声明的时候,和一个变量的值是undefined的时候,注意,typeof null也会返回object,...
2015-11-12
JavaScript的组成
一个完整的JavaScript由3个部分组成:核心(ECMAScript) 文档对象模型(DOM) 浏览器对象模型(BOM) ECMAScript 描述了该语言的语法和基本对象 ; DOM 描述了处理网页内容的方法和接口 ; BOM 描...
2015-11-12
Riot.js:不足1KB的MVP客户端框架
Riot.js是一款MVP(模型-视图-呈现)开源客户端框架,其最大的特点就是体积非常小,不足1KB,虽然体积小,但它可以帮助用户构建大规模的Web应用程序。 Riot.js是由Moot公司开发,目前最新版本为v0.9.2,遵循MIT开源许...
2016-03-11
回到顶部