黑马程序员技术交流社区

标题: 优秀程序员的秘诀,这些你知道几条? [打印本页]

作者: Wanibal    时间: 2016-4-28 22:45
标题: 优秀程序员的秘诀,这些你知道几条?
大多数情况下,使用继承从长远看来是一个很糟糕的面向对象设计。它影响了代码的重用性和可测试性。推荐使用组件和接口的方式替代它。
避免过早引入接口,除非你能够完全控制它。“过早接口”同样会导致设计问题。
深度代码嵌套(both intra-function and inter-function) 1 ) 难于维护 2 )更容易产生bug 3 ) 难于复用。精炼的代码层次划分更利于以后的代码测试和代码复用。参照上一条关于继承的问题。
预估时间在开发中是一件很难的事情。这就是为什么在很多地方使用敏捷开发(Scrum)和 Sprints 。
完美的加密是很难做到的。除非有一个很好的理由,否则不要尝试自己去发明它。
无副作用逻辑(Side-effect free logic)是非常棒的,这使了解程序状态更简单(参看下一条),同时也简化了自动化测试。
学习去了解程序的状态切换和生命周期。
如果选则合适的实现方式,并发并不难。线程池、队列、观察者模式、非可变性和Actor模型编程可以帮你很多。
过早优化是万恶之源。一个好的开发过程一般是: 1 ) 让它工作。 2 ) 使代码很漂亮。 3 ) 优化。
了解程序的基本数据结构和理解时间复杂度。这是一个有效使代码变得更快在的方法,且不会增加代码复杂度。
练习粗略计算。一段代码通常在内存中占用多少?相关;
应用程序早晚会出问题;不好的部署,意想不到的行为,意想不到的输入或意想不到的外部加载。为了应对这些问题。我们需要确保用日志记录下那些未捕获的异常,在部署工作完成后进行测试(并可能回滚),并不停地运行测试,也要确保为所有内存中的队列和线程池设置限制(理智的)。相关;
如果你监控队列大小的时候,发现它通常总是满的或空的。应对好这些。
网络服务和外部服务应该一直保持片状(易剥离的,即插即播)。为每一个套接字(Socket)设置超时,在每次HTTP读或者连接操作时都设置超时。建议可以将外部网络封装到一个重试/循环断路库中。
写出你自己都愿意读的代码。增加注释,除非你认为还能在一年后看懂它。在一个月后你会需要这些注释的
为项目设置构建工具,这样别人可以更快开始工作。在你的README文件中记录下要构建、运行、测试和打包的命令。
确保你的项目可以从命令行构建,会使事情变的容易得多。
在许多语言中,处理第三方依赖关系是一个真正混乱的事情(看看你的Java和Python工程)。特别是当两个不同的库依赖于不同版本。使你远离这些麻烦的好方法: 1 ) 不断审视你的依赖库。 2 ) 自动化测试有助于解决此类问题。 3 ) 总是关注你应该使用哪个版本的第三方依赖库。
阅读流行的开源项目,是学习编写可维护代码和软件开发流程的好方法。
为应用添加的每一行代码都会增加项目的复杂性,同时使它发生错误的可能性更高。删除代码是一个消除错误的好方式。相关;
应用中的每一个基础服务(数据库、缓存、消息队列等)都是一个bug的来源,需要对它们进行维护,同时也需要学习新知识。更不用说,这种依赖性可能会降低你的生产力。仔细衡量新基础设施的效率。你还需要用一个新的基础设施取代一个旧的吗?
代码路径导致的失败,很少在测试或执行中出现。但往往这就是bug的原因。
输入验证不仅仅是出于安全原因的,它能帮助你尽早发现bug。
和上一条有一些关系:有些相关状态验证和输出验证可以作为输入验证同样有用,无论是为了发现内在的bug,还是为了安全性。
代码评审(code review)是一个用来提高程序员的好方法。你会得到关于你代码的批评,同时你将学会描述为什么其他人的代码的好坏。它还引导你发现常见的错误。
学习一门新编程语言是一种很好的方式,以了解新的范式和旧的习惯问题。
总是指定编码转换文本与字节;当读/写网络、文件或加密时。如果你依赖于语言环境的字符集最终你一定会遇到数据损坏。如果你可以自己选择,请使用UTF字符。
了解你的工具,包括编辑器、终端、版本控制系统(如git)和编译工具。
学会在使用你的开发工具时不用鼠标。学习尽可能多的键盘快捷键。它会让你更高效而且这更符合人体工学。
重用代码不是一个最终的目标,也不会使你的代码更易于维护。重用复杂的代码,但请注意,两个域之间的代码重用可能使它们产生过度的依赖。
长时间坐在电脑会伤害你的身体。 1 ) 了解你的身体状况。看看你的背、脖子和手腕。当你身体感到不适的时候休息一会。养成一个暂停的习惯(泡茶,拿咖啡)对你的身心会有意想不到的益处。 2 ) 时不时的远离屏幕来休息一下你的眼睛。 3 ) 选一个适合你手腕的好的键盘。
自动化测试,特别是单元测试,不仅仅是测试您的代码。它们还: 1 ) 告诉大家代码的使用范围; 2 ) 还能帮助你提前的适应生产环境。后者是为什么一些人声称测试优先的开发方法可以产生干净的API。
适度的测试。因为缺少测试会导致bug,而查找bug会降低你的开发速度。过度的测试也会降低你的速度,因为每个改变都需要更新太多的测试。
和编译语言相比,动态语言通常需要更多的测试工作来保证它的正常工作。(离线代码分析工具也很有用。)
竞态比普遍认为的更常见。这是因为计算机通常比我们习惯于TPS。理解吞吐量和延迟之间的关系在优化您的系统时非常有用。相关;
很多时候高吞吐量可以通过引入智能匹配的方式来完成。
保持你提交的代码简短、可用,提交代码的时候写下你做了什么的日志,告诉大家你为什么做这些。有效的提交信息是解决bug的先决条件。
保持你的本地分支尽可能的新。我的经验是:失败发生的风险和你本地版本保持的时间成正比。不要在一个分支上工作超过两周时间。那些比较大的特性,我们可以将它分为多个小的特性并分多次提交它。
尽早的了解你的产品运行环境,并根据环境对部署策略进行调整。
令人惊讶的是,频繁的发布代码会降低风险,而不是增加。
学习面向对象的语言是很容易的。掌握良好的面向对象设计是困难的。了解面向对象设计和面向对象的设计模式将改善你的面相对象设计的理解。



作者: 00零度00    时间: 2016-4-28 22:52
很好,赞一个
作者: 九天玄妖    时间: 2016-4-28 22:54
坐下来慢慢看
作者: zh2016    时间: 2016-4-28 23:09
先知,同道中人。赞一个~~~
作者: yoghurt29    时间: 2016-4-29 12:35
感谢分享。
作者: xiaogui    时间: 2016-4-29 12:57
我要来参观参观,学习学习。
作者: Yoyoqiu    时间: 2016-4-29 19:36
暂时只能看懂一部分   好像很高大上的赶脚
作者: Wanibal    时间: 2016-4-29 20:42
自顶一下咯,为了梦想努力吧
作者: 艺高人胆大    时间: 2016-4-29 21:22
没看懂 , 楼主  很强啊
作者: 13120298870    时间: 2016-4-29 22:53
这是实践经验对吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2