对于一个程序员来说怎么样才能提高自己代码能力？
普通码农一枚，分享一下自己最常使用的几个效率生产工具。 目前还没看到神级程序员的回答，问题先码一下，坐等神级程序员。 下面本人抛砖引玉的回答： 写代码前做好系统分析设计，会使得进入编码阶段后代码思路比较清晰、避免返工、以及良好的实现团队结对编程。 画图工具-UML类图、架构图、流程图、时序图等等。 推荐工具：Visual paradigm、OmniGraffle、ProcessOn、ppt、PlantUml。 俗话说，一图胜千言，图即是代码的指导思路。 如下是示例功能流程图和数据流程图： 如下是Flink的时间戳分配器类图： Flink架构图： 另外，关于系统设计再推荐一本备受好评的神书：《数据密集型应用系统设计（DDIA：Design Data Intensive Application）》。 这本书在各大网站的评价非常高。 Amazon： Googlereads： 那么它到底是一本什么样的书呢？ 现今，尤其是在互联网领域，大多数应用都属于数据密集型应用。本书从底层数据结构到顶层架构设计，将数据系统设计中的精髓娓娓道来。理论结合实践，给出了很多实际场景中遇到的问题以及应对方案，能让人少走很多弯路。 涵盖了分布式系统设计的方方面面，复杂的事情深入浅出，浅显易懂。另外书后给出了很多参考论文资料。 -----应要求更新一下----- 很多人私信我要影印版的购买链接，我当初是花了好几百大洋买的。 帮大家在京东和天猫找了，基本都没货，好在【知乎官方自营】上架了这本书，价格也非常美丽，大家可以去抢： 中译本也可以看，翻译非常的不错： 1、Git 版本控制工具，不仅是代码，文档之类的也需要常做版本以及备份，防止重要资料丢失。 2、多显示器 我一般平台用3个显示器：一个用来显示线上系统的运行状态的监控、一个用来看文档、一个用来敲代码。还有就是机械键盘。 3、信息搜索 4、Alfred 超级好用的查询和搜索工具： 5、VIM VIM用熟练后，完全可以脱离鼠标，并且效率提高几倍。 6、笔记工具 推荐onenote，随时随地记录自己的想法和总结。 7、postman 非常好用的http请求调试工具。 8、文档编辑 推荐MacDown：一款优秀的mac平台的markdown编辑，客户端贼好用。 多看优秀开源项目的代码，尽量参与进去，不论是maillist、QQ/钉钉群组等等，可以尝试从编写文档、写测试用例开始入手，逐步切入核心功能。 参与优秀的开源项目可以和业界优秀的程序员大神一起结对编程，开阔思路，掌握优秀的代码编写风格、设计模式和技巧。 在此推荐几个业界有名的优秀的开源项目： 1、Redis：Redis Redis的性能极高且拥有丰富的数据类型，同时，Redis所有操作都是原子性的，也支持对几个操作合并后原子性的执行。另外，Redis有丰富的扩展特性，它支持publish/subscribe, 通知,key 过期等等特性。 Redis更为优秀的地方在于，它的代码风格极其精简，整个源码只有23000行，很有利于阅读和赏析。 2、RocketMQ：Apache RocketMQ 阿里巴巴开源的消息中间件，久经双11大促流量洪峰考验。 3、Flink:Stateful Computations over Data Streams Apache Flink是由Apache软件基金会开发的开源流处理框架，其核心是用Java和Scala编写的分布式流数据流引擎。Flink以数据并行和管道方式执行任意流数据程序，Flink的流水线运行时系统可以执行批处理和流处理程序。此外，Flink的运行时本身也支持迭代算法的执行。 Flink提供高吞吐量、低延迟的流数据引擎以及对事件-时间处理和状态管理的支持。Flink应用程序在发生机器故障时具有容错能力，并且支持exactly-once语义。程序可以用Java、Scala、Python和SQL等语言编写，并自动编译和到在集群或云环境中运行的数据流程序。 4、Google guava：Google提供的java库函数,guava cache和guava限流的实现很有参考价值。 5、sharding-jdbc：数据库分库分表、读写分离的一个中间件。 6、RxJava：java平台的Reactive 扩展。 7、Spring：这就不解释了。 最后再推荐几个优秀的前沿信息来源： 文末再贴几个我的其他回答，可能会有你需要的： 整理的Java从入门到进阶的书籍阅读顺序，已经2400+赞和收藏，是知乎的热门内容： 总结的本人在校期间C++的学习路径，感兴趣的可以看看： 给计算机专业大一新生的一些肺腑建议： 