如何成为一名优秀的程序员?

1、理解技术债务

技术债务就像信用卡一样,会有很高的利息率,时间越长,修复所花的代价就越大,程序员对这个要有深刻的认识。同时团队应该培养一种保证设计质量的文化,应当鼓励重构、同时也应当鼓励其它有关代码质量的实践,在开发时间中应当专门抽出一部分以解决技术债务。如果没有合适的照料,代码会变得越来越复杂难懂,最后没人想碰它。

2、保持对原理的好奇心

不仅知道怎么用,还知道是什么原因。比如你做 Android,可以了解一下他的事件分发机制是什么样的,它的 Measure/Layout 是怎么 work 的,有时间读一读它的源代码,看看他的原生控件是怎么实现的。学 iOS,了解一下它的内存管理,autorelease 是怎么工作的,runtime 是怎么工作的,runloop 的原理是什么。做 Server 开发,可以了解一下 Nginx 为什么性能好,Redis 的工作原理如何,有时间也可以读读其源代码。 做前端,也可以读一读 Angular 或 React 的源代码。

3、专注

程序员的工作效率可以相差很大,其中区别很大的一点就是是否专注,就像线程切换一样,恢复上下文有很高的代价。建议合理安排好自己的时间,尽量在上午/下午留大块的专注时间来做设计和编程,关掉 IM/邮件/微信,把面试/会议等安排在大块时间之外,同时也建议可以尝试一下番茄工作法。

4、同理心

写代码时要有同理心,考虑一个有少量上下文甚至完全不了解上下文的另外一个程序员他会怎么样读这个代码,这样自然就知道怎么写出可读性好的代码,该怎么命名,什么地方该加注释。 考虑以后维护代码的这个人就是你自己,这样在偷懒做一些临时的 workaround 时就会三思。 交付给测试人员时也要有同理心,有没有做基本的质量保证,有没有跟测试沟通改动可能的影响范围,让测试人员可以更有针对性的测试。

5、谋定而后动

好的程序员不是拿到需求就开始写代码,而是先考虑清楚。 需求是否合理,是否能解决用户的问题,逻辑上是否有模糊或不完备的地方。 然后考虑设计的问题,流程图是什么样的,类图是什么样的,接口是什么样的,对架构和模块的影响是什么样的,考虑清楚后才开始写代码。

6、架构思维/全局思维

理解整体架构是什么样的,你开发的模块在架构中的层次,新增的改动会不会对架构有污染,是否需要调整架构,所开发的模块可否抽象成通用模块或者可否复用已有模块,或则重构已有模块达到可复用目的。

7、设计语言

掌握适当的设计语言,比如 Plantuml 或 Visio,或者是一些设计模式,知道如何以简单清晰的方式去跟其他程序员描述和沟通你的设计和架构,大家理解一致了,才能更有效率的合作。

8、追求代码质量

代码质量是程序员的立足之本,在这一点上,要有精益求精的“匠心”。 我看到很多普通程序员做了不少项目后水平提升仍然不明显,无它,对代码质量没有精益求精的精神。 代码规范,健壮性,可读性,可维护性,无重复代码等等,都要精益求精。

9、代码审查

代码审查是保证代码和工程质量的最有效手段,优秀的公司(比如 Facebook,Google)和优秀的团队(比如我们,欢迎关注团队公众号 mtydev)都非常重视代码审查。如果你还不能认识到它的重要性,可以查看这里。

10、自动化

好的程序员都应该有自动化思维和工具思维,都应该会一门脚本语言,有自己的工具库。我们应该通过工具及自动化来改善我们的工作效率,以及避免一些人为的失误。

欢迎关注我的公众号(同步更新文章):DoNet技术分享平台

阅读原文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 发邮件附件pdf,php – 使用TCPDF发送电子邮件附件 | 码农网

我有一个简单的课程申请表,填写完成后,会向申请人发送一封电子邮件,并附上他选择作为pdf附件的课程的费用报价.我正在使用TCPDF并使用会话变量将数据从表单传递到库.内容采用 html 格式.生成PDF并根据需要作为附件发送.问题是它是空白的..只有页眉和页脚在文档中.在 linux 中尤…

数据库同步传输软件

Navicat转载于:https://www.cnblogs.com/jizl/p/4995959.html

DoNet 高效开发必备开发工具

工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为 ASP.NET 开发者介绍一些高效实用的工具,包括 SQL 管理,VS插件,内存管理,诊断工具等,涉及…

php eval 语法错误,PHP eval和捕获错误(尽可能多)

我找到了一个很好的替代方案/答案 .首先,让我首先说当我设置error_reporting(E_ALL)时,nikic的建议有效;通知显示在PHP输出中,并且由于OB,它们可以被捕获 .接下来,我发现了这个非常有用的代码:/*** Check t…

防止表单重复提交的解决方案整理

用户在操作表单Post数据时往往会出现表单数据重复提交的问题,尤其在Web开发中此类问题比较常见。刷新页面,后退操作以前的页面,单机多次按钮都会导致数据重复提交。此类问题是因为浏览器重复提交HTTP请求导致。下面列出了四种比较常用的解决方…

免费字典api ,查询汉字完整信息

最大最全的新华汉语词典,字典api根据接口列表返回的汉字id,查询汉字完整信息。 接口名称:字典api 接口平台:第三方api 接口地址:http://v.juhe.cn/xhzd/queryid 支持格式:json/xml 请求方式:htt…

python正则去除换行符,关于python:用于删除换行符的正则表达式

我是Python的新手,我遇到了正则表达式问题。 我正在尝试删除文本文件中每行末尾的换行符,但前提是它跟在小写字母后面,即[a-z]。 如果该行的结尾以小写字母结尾,我想用空格替换换行符/换行符。这是我到目前为止所得到的&#xff1…

收集一些程序员励志经典名言

1、作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。2、程序员可以让步,却不可以退缩,可以羞涩,却不可以软弱,总之,程序员必须是勇…

Android develop 国际化

转自别人的一片文章,出处以找不到了,觉得写得不错,记录一下 一、概念 1.Internationalization(I18N) 国际化 使得App在不改的源码、资源文件的情况下,能够适应各国、各文化、各语言 是L10N的基础 2.Localization(L10N) 本地化 为A…

php留言板记录ip,如何用php程序记录来访IP

如何用php程序记录来访IP关注:226 答案:4 手机版解决时间 2021-02-16 00:05提问者失夜久伴你2021-02-15 01:22如何用php程序获取来访IP,然后保存在txt文件中,并且只保留最新的30个数据.最佳答案二级知识专家追尋☆①秒方向2021-02-15 02:19有一个全局的变量&#…

【基础】jquery全选、反选、全不选代码

1、JS代码function ($) {//全选 反选 全不选$("#selAll").click(function () {$(".lists :checkbox").not(:disabled).prop("checked", true);});$("#unSelAll").click(function () {$(".lists :checkbox").not(:disabled).…

oracle 11g重新安装配置,Oracle 11g数据库安装和卸载教程

Oracle11g的安装教程同时解压缩两个zip文件,生成一个database文件夹,进入到database文件夹,点击setup去掉安全更新的选项,直接下一步选择创建和配置数据库,点击下一步选择服务器类,点击下一步选择单例数据库…

C语言中strdup函数使用方法

头文件&#xff1a;#include <string.h> 定义函数&#xff1a;char * strdup(const char *s); 函数说明&#xff1a;strdup()会先用malloc()配置与参数s 字符串相同的空间大小&#xff0c;然后将参数s 字符串的内容复制到该内存地址&#xff0c;然后把该地址返回。该地址…

高级程序员和低级程序员的区别

低级程序员认为自己与高级程序员的区别, 主要是高级程序员任何功能都能编码实现, 编码速度快, 代码无 bug. 正如一惯的那样, 低级程序员之所以低级, 正是因为他们勉强能看到(或者根本看不到)事物的表象而看不到本质. 所以, 低级程序员总结出的一切东西, 你都可以大胆的忽略。所…

oracle中的tx锁影响查询吗,如何找到TM锁对应的TX锁?

我昨天也这样试过&#xff0c;但出来的结果和预料相差很远。wyqORCL>update emp set ename ename;12 rows updated.wyqORCL>get lockline 16 truncated.1 /* showalllock.sql */2 column username format a63 column object_name format a134 column o_name format …

IISExpress Log 文件路径

问题 用VS做开发时经常用IISExpress测试web程序&#xff0c;那么在测试过程中生成的Log文件放在哪里了&#xff1f; 答案 情况1 默认情况下 applicationhost.config 文中定义了连个日志文件路径&#xff1a;IIS_USER_HOME&#xff08;即%userprofile%\documents\IISExpress\&am…

程序员职业路线图

今天分享一张程序员职业路线图&#xff1a;欢迎关注我的公众号&#xff08;同步更新文章&#xff09;&#xff1a;DoNet技术分享平台阅读原文

jqgrid编辑php,php – 实现jqgrid单元格编辑datepicker

我知道使用datepicker进行单元格编辑是可能的,因为引用了here和here.但是,当我单击单元格时,没有出现日期选择器.下面是相关列的colModel条目.我有datepicker UI可用.在其他示例中,dataInit不包含引号.它在我的代码中,因为整个colModel是在AJAX请求期间由PHP动态创建的.我将它构…

C#编程规范整理

小编整理了一些C#编程的一些规范&#xff0c;希望对大家有点用处&#xff01;1、命名方式Pascal命名法&#xff1a;每个单词首字母均大写。Camel命名法&#xff1a;第一个单词首字母小写&#xff0c;其余单词首字母大写。2、有关类的规范1、使用 Pascal 大小写。2、用名词或名词…

利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值...

实验说明 &#xff08;1&#xff09;正向传值&#xff1a;比如A类里地值要传给B类用&#xff0c;就是我们先在A类中声明一个B类对象&#xff08;当然B类头文件要import过来&#xff09;&#xff0c;然后把A类中得某个 值传递给B类中得某个值&#xff08;所以需要在B类中先准备一…