如何写出更好的代码(文末有福利)
女主宣言
我们在过去的几期推送里已经给大家介绍了笔者根据多年研发经验总结出来的编码规范和 git 等实用工具的运用场景,今天咱们就来继续聊聊项目开发过程的诸多方法论。本文最先发布于 7rule,转载已获取作者授权。
PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!
The "Rope Mother" Margaret Hamilton
by NASA IOTD
这几期和大家分享了我自己在开发时的一些经验,这次想说说如何写出更好的代码。
1
目标
我们写代码,都是为了完成某个功能,为某个系统服务。我个人在这方面的目标是:要做出10年都能稳定运行的系统。
2
如何做
如果想做到这一点,我觉得最重要的是要做到从整体去看待问题,具体来说:
系统运行都需要哪些环境,如服务器、数据库、机房、网络等。
系统在运行时,会遇到哪些问题。
如何更好地设计系统,层次清晰。
代码清晰易懂。
3
系统运行时会遇到的问题
我经常听到某些编程同学说:这是个运维方面的问题,不需要我们做。但我认为恰恰相反,通常就是这些所谓的运维方面的问题,会决定你的系统是否能够稳定运行10年。
正是前几天,我和一个公司高级别的技术同学沟通,他的一个观点我特别的认同:真正评价一个系统好坏的标准,性能高低不是最重要的,可运维性才是。
这里先来说说我觉得需要掌握的运维知识:
运营商和机房
国内的运营商,最重要的就是电信和联通,这些年移动有所增加,但也还比不上前面两个。
按照我之前的经验,一个用户服务,6 - 7成的用户走电信线路,3成联通线路,其余各种小运营商线路。
那么你的服务如果想要用户体验好,至少需要部署在电信和联通两个线路的机房。
有人说,我们有多线机房。也可以啊,但是为了你的服务可靠性考虑,你也需要至少两个吧,否则一个挂了服务就全挂了。
那么再说两个机房的选择,我认为在同城选择两个是最好的,当然这个城市也要可靠,比如北京、上海这种大城市就会可靠很多。
为什么呢?
是因为通常我们都会有存储的需求,就拿mysql举例:你为了保证性能和数据的一致性,通常会在访问量较高的电信机房配置主库,联通机房配置从库。而同城间的网络传输更加可靠,你的服务也会更加可靠。
所以,运营商和部署机房的选择,十分的重要。
机房间的异地多活问题
上面提到的mysql的那个例子,试想一下,如果电信机房挂了,我们把服务切到联通,但是联通的mysql是从库只读,那么服务有问题啊。
所以在你的系统设计中,异地多活这个问题我觉得是一定要考虑进去的。你的解决方案并不能仅仅只是可用,而是要好用才行。
服务器选型
我之前有过这样一个经历:服务扩容,我在新机器上部署后,发现性能不如老机器。
经过多方排查,最终定位发现新机器和老机器不是同一厂商生产的,最终推送公司测试发现新机器厂商的这批机器存在质量问题,所以后来有段时间我们申请机器时,会特意提出要求不使用这个厂商的机器。
新的服务平台的选型
最早我们的服务直接部署在物理机上,后来公司大推虚拟化,到现在也尝试部署在容器服务中。
我想说的是,你把服务部署在哪里,你还是要了解那个平台的相关知识的。就比如容器吧,我觉得并不是只会使用就行了,还要尽可能多的了解它的相关知识,明白可能存在的问题,这样才能有助于你做出更好地决策。
服务监控
我们的系统上线正式运行后,可能会出现各种各样的问题,如磁盘写满了;进程突然挂掉;内存缓慢泄漏;mysql等存储出现问题等。
这些问题出现并不可怕,你也无法做到全部避免,所以我们需要做好的,是服务的监控报警,有问题第一时间发现,快速解决。
记得我的一个leader告诉我,代码上线出现bug不可怕,但如果没有第一时间收到报警发现问题,才是最可怕的。这一点至关重要!
4
不断精进
除了上面说的,自己的不断精进也是十分重要的。
这需要自己不停学习新知识,不断反思做过的事情。我有时觉得,自己之所以选择编程这条道路,就是能很享受自身不断精进的所带来的满足感。
5
结束语
最后,我再分享下自己这些年在编码方面不断改善中一直在做的几点:
看好书;
对做过的项目要总结、反思;
自己觉得不好的地方坚决重构,没有时间只是借口。
用一句话总结下:我要让我做出的系统能够稳定运行10年!
福
利
来
了
参与互动,即可有机会领取运维宝典——《OpsDev年度精选》一本。
参与方式
01、转发本文章到朋友圈并附上走心评论,留存24小时后截图发送至后台,我们将抽取前5名赠送以下好书一本。
02、在本文评论区留下您的真知灼见,我们将挑选评论点赞数最高的一位赠送以下好书一本。
OpsDev 年度精选
这本《2017 OpsDev年度精选》是360 OpsDev团队把自己近一年的经验、教训、感想拿出来与同行们分享,如同开源对产业界的贡献,经验分享也会有利于整个行业运维水平的提升,在IT与互联网已经变成基础设施的今天,尤其重要。
——谭晓生
360技术总裁 首席安全官
HULK一线技术杂谈
由360云平台团队打造的技术分享公众号,内容涉及云计算、数据库、大数据、监控、泛前端、自动化测试等众多技术领域,通过夯实的技术积累和丰富的一线实战经验,为你带来最有料的技术分享
如何写出更好的代码(文末有福利)相关推荐
- 写出更易懂的代码(一)
今天周日,外面天气不好,舍友出去跟MM约会了,我一个人独自在家,逛逛园子. 发现一篇好文<javascript 杂谈之哪种写法你更喜欢?>,其中有一个代码,是模仿jQuery写法的: 虽然 ...
- [翻译Joel On Software]Joel测试:12步写出更高质量代码/The Joel Test: 12 Steps to Better Code
Joel on Software The Joel Test: 12 Steps to Better Code Joel测试:12步写出更高质量代码 byJoel Spolsky Wednesday, ...
- jvm大局观之内存管理篇: 理解jvm安全点,写出更高效的代码
jvm大局观之内存管理篇: 理解jvm安全点,写出更高效的代码 - 知乎 前言 本篇是java内存区域管理系列教程之一 - 在得知GC Root的组成之后,如何在垃圾回收发生的时刻,找到GC Root ...
- 程序员如何写出更好的代码
Martin Thompson是Java Champion称号获得者,同时也是一名高性能计算科学家.他说,为了写出更好的代码,程序员需要运用基本设计原则,阅读已有代码.在QCon London 201 ...
- 【整洁之道】如何写出更整洁的代码(上)
如何写出更整洁的代码 代码整洁之道不是银弹,不会立竿见影的带来收益. 没有任何犀利的武功招式,只有一些我个人异常推崇的代码整洁之道的内功心法.它不会直接有效的提高你写代码的能力与速度,但是对于程序员的 ...
- 两大方案,只为写出更安全的代码!
[CSDN 编者按]安全漏洞的源头是开发,只有当开发人员写出了包含安全漏洞的代码,黑客才有机可乘.因此,如何保障开发写出更"安全"的代码,是安全防护工作中最重要的一环. 作者 | ...
- 如何写出更优雅的代码——编程范式简述
<如何写出更优雅的代码--编程范式简述>源站链接,阅读体检更佳! 什么是程序? 1976年,瑞士计算机科学家,Algol W,Modula,Oberon 和 Pascal 语言的设计师 N ...
- python优雅代码大全_10个Python技巧帮你写出更优雅的代码
阅读本文需要 2 分钟,公众号 somenzz ,欢迎学习 Python 的朋友订阅. 现在写代码的门槛非常低了,少儿都开始编程了,但从代码的风格一眼看出编码水平.是的,写代码是容易的,写出易读的代码 ...
- 使用这45个小技巧,帮助你写出更优雅的代码
前言 不知道大家有没有经历过维护一个已经离职的人的代码的痛苦,一个方法写老长,还有很多的if else ,根本无法阅读,更不知道代码背后的含义,最重要的是没有人可以问,此时只能心里默默地问候这个留坑的 ...
最新文章
- 【深入Java虚拟机】二 类加载与双亲委派
- python php linux-选择PHP与Python,可以考虑这三个问题
- LeetCode:1. Two Sum
- Python基础教程:内置类型之生成器
- ubuntu php pear_ubuntu下安装pear包(lynx和php-cli安装)
- 多叉树的前序遍历_二叉树的非递归遍历的思考
- ajax异步加载和cmd,异步传输Ajax(JQ)
- 【今日CS 视觉论文速览】Thu, 13 Dec 2018
- Python各类图像库的图片读写方式总结
- 机器学习实现计算不规则图形面积_《图形编程技术学习》(五十八)用VS实现逐顶点的光照计算...
- 研究生信息管理系统(C++实现)
- java中的配置文件
- 数据挖掘导论——可视化分析实验
- windows 10字体突然变小变细,模糊
- 阿里巴巴实习生 招聘内推
- C语言递归函数求n!的两种写法---详细讲解
- PM、GAN、InfoGAN、对抗自编码模型对比
- 目标跟踪技术及其数据集
- 智能手环,智能手表,智能眼镜,我们到底该怎么选呢?
- BP神经网络的Matlab实现——人工智能算法
热门文章
- ubuntu12.04 android studio 安装
- html if语句_轻量html模版渲染库 cJinja
- 常用计算机键,计算机快捷键40个_计算机常用快捷键大全分享
- Dubbo的微内核机制
- 你在面试时是否无意中暴露了缺点?资深面试官如何从细节中看候选人的软实力...
- Zabbix探索:无法获取Windows主机CPU利用率、负载等问题处理
- java学习:理解final
- 菜鸟进阶必修课-主板插线小百科(图)
- Swoole 2019 :化繁为简、破茧成蝶
- 多商铺购物车查询 排除重复商家