# 前言 ## 隐藏在逆流而上的良质 经历过大型企业级系统开发的技术开发工程师估计都能体会,在大流量、高并发、大数据下开发,将会遇到重重问题、层层挑战。对于这些问题和挑战,要及时、妥善地处理和解决,否则要么无法满足最终用户的需求,要么业务受损惨重。这时,需要我们作为一线技术人员,能逆流而上。 这意味着从事技术开发,尤其是负责企业级系统开发和维护时,需要持续投入更多的时间、精力和创造力,并不是“只要站在风口,猪也能飞起来”。举个例子,网站出名了,流量指数增高,访问量瞬间翻了十倍、百倍,这时系统支撑不住崩溃了,怎么办?唯有逆流而上! 为家门口的小河流建造一条小桥,以及构建发挥着防洪灌溉作用的都江堰,这两者是有天壤之别的。前者是民间作坊式的作品,后者则是由不同模块、不同子系统,通过巧妙且合理的设计,再经过漫长的艰辛才凝聚而成的大型水利工程。同样,开发日均几千PV的小网站,和维护大型企业级系统是大为不同的。所以,这本书,更多介绍的是在严酷的实际场景中切实可行,经得起历史考验的有效的解决方案。在此过程,我们将会探索隐藏在逆流而上的良质,完成从优秀到卓越的突破。 ### 从优秀到卓越 在我小学的时候,初次接触电脑这个神奇的东西时,就深深爱上了它,并且当时就决定我以后要从事与之相关的职业。 在高中阶段,我拿着同桌的文曲星,用GBASIC语言并结合几页纸的代码草稿,用顺序结构、IF条件结构、随机数等编写了我人生中的第一段程序——简单的文字冒险游戏。 而如今,距离编写一行代码到现在,已经过去十多年。在此期间,我进行了更全面的专业学习,参与了小型、中型和大型的企业级系统开发,也在开源社区贡献了自己的开发框架。所参与研发的网站系统,每天都承载着百万级的用户访问量,同时肩负99.99%以上的线上SLA目标;所带领的团队,在不断小步快跑,持续交付,在解决各种难题和快速迭代的同时为企业不断创造更高的商业价值;而开源的框架此时此刻也在为遍布全球的开发人员所使用,并应用在各种项目开发上,同时我也在协助他们解决所遇到的各种技术问题和障碍。 这个过程是激动的,也是深刻的。 从最初只会编写几行简单代码自娱自乐的懵懂小白,到现在能够娴熟应对复杂、不确定、充满未知的软件领域的开发工程师,我深感幸运和自豪,但同时也对这其中的痛苦、艰难与无助深有体会。因为,软件开发领域本来就还很年轻,而很多技术,包括操作系统、主流开源系统和专业概念性的理论,都是来自国外。在国内,我们很多时候都是在被动接收这些职业赖以发展的技术和知识,尤其对于对英语欠佳的同学来说,只能努力寻找翻译过后或别人理解整理的中文资料。本质上,我们还是缺乏经验,缺乏引导,缺乏帮助。 曾经有位同事非常认可我的书面语言组织和表达能力,并且一直想和我深入请教和学习技术上的经验,但由于时间上的冲突一直断断续续。这也正是我想写这本书的初衷,希望能给初学者和有开发经验的同学一定的参考和帮助。 如果你和我坚持原则的一样:**尽我们最大的努力,开发并交付价值最大化的软件**,不仅仅停留在把事情做完成,而是要把事情做得更完善,但现在却感觉有心无力时,那么相信这本书将能给你实用、有价值的参考和指导。 ### 完成,完整,完善,完美 很多时候,我们都是从一个简单的功能,或者简单的需求开始搭建一个简单的系统。在基本完成了所需要的业务功能后,就可以投入使用,正式运营。但这只是一个开始,甚至是恶梦的开始。 系统中的任何一个问题,任何一行有嫌疑的代码,如果没有在开发阶段被技术自测发现,也没有在测试过程中被QA发现,那么早晚都会在真实环境中揪出来,没有侥幸。迫于时间而仓促上线,或者因为考虑不周而有所疏忽,抑或是因为经验和技术不到位而导致存在风险点,当系统未达到一个完整状态时,它都是脆弱的。而脆弱的背后,则是我们包括负责人、经理、客服、运营、技术、测试、运维等项目干系人疲于奔命、到处救火的现状。 能力越大,责任越大。反过来也一样,肩负的责任越大,势必要求与之配备的能力就越大。明显地,构建支撑千万级用户量的网站与搭建个人小网站要求的能力、素质和背景有很大差别。这时,作为肩负重任的我们,应当力求完美。 如何从完成,到完整,再到完美,正是贯穿本书的主线。我们也将一起探讨, 怎样从单兵作战式的个人开发,过渡融入中小型公司的团队协作开发,最后在大公司也能人尽其才,成为万里挑一的明星级员工。 ## 本书为谁而写 本书主要侧重点在于企业级系统的开发,注意这里指的是企业级,意味着是有一定规模并且是具备商业价值的,而不是单纯教学式的示例。此外,我们着重讨论的是系统开发,这里不仅包括网站系统的开发,还包括微服务、接口系统、定时任务系统的开发。除了探讨如何增强对系统整体性的把控,还会涉及系统在整个企业生态圈中扮演和承载的角色。最后,在企业级网站系统这一特定领域,我们又重点关注技术开发这一范畴。 当然,使用的主要编程语言是PHP,本书所介绍分享的经验、技巧、原则和策略等,需要有项目经验或者已经掌握基本PHP网站开发的功底才能更好理解。所以,这本书更多是集中在使用PHP开发企业级网站系统这一领域,并且集中关注为有项目开发经验的工程师,尤其是当前处于迷茫期、瓶颈期或困难期的开发工程师提供启发性的帮助和技术干货。 此外,本书也会: + 为编程爱好者和初学者提供实践指引,避免掉进教条式的理论学习,在最短时间内掌握基本企业级系统的开发技能 + 为即将毕业投身软件开发行业的学生提供实用开发指南,为即将面对的挑战做好准备,在职场上掌握主动性 + 为已经在职的开发工程师提供职业发展路线规划图,提升自己的专业能力,尽早获得晋升,脱颖而出 + 为资深有经验的行业人士,提供总结,便于培养人才、建设团队、或进行恰如其分的架构设计 感谢选择和阅读此书! ## 如何使用本书 在本书中,我将会把我多年来成功的开发经验、撰写的博客、感悟的技巧、实用的技术整理分享给大家。为方便读者更容易阅读本书,以下是本书的学习路线图。在第一部分,简单介绍了为什么当前软件开发越来越重要但也越来越难,同时分享问题域、解空间和开发软件的宗旨。通过从零到一,开发一个小网站可以更好的接触网站开发,并且为后面的内容和场景做铺垫。如果是有经验的开发同学,可跳过这章,但里面有非常受用的经验值得一看。小网站只是一个开始,接下来不断涌出的就是各种我们已知或从未见过的问题和挑战。 正式开始接触企业级系统开发前,还需要加固原生态PHP和PHPUnit自动化单元测试的洞见,所以第4章和第5章的内容是不容忽视的。第4章是对原生态PHP的理解与应用,对于编程语言本身的见解;第5章是对于PHPUnit自动化单元测试的新解,用代码证明代码。这就是第二部分的内容。 在软件开发这条路上,我们要坦然,肯定不会一帆风顺的。这点我们要在一开始就要做好充足的心理准备。很多开发同学之所以选择从事软件开发,是因为曾经年少时听别人说做开发收入颇丰。诚然,但是否曾有人告知过你开发也会很辛苦?“困难越大时,进步越大。”这是师姐曾经对我们的教诲。但请放心,在攀登软件开发这座大山时,前面已经有很多前辈帮我们把坑踩平了,也有很多优秀乃至卓越的开发人员,在他们身上我们可以学到如何战胜一个又一个难题。而这些技巧、技艺、做事方式都将会在第三部分进行讲解。这也本书的核心部分,重点涵盖了核心基础模块设计、大型网站开发范式、高可用接口服务系统 、管理后台系统和计划任务系统。这是一个转折点,是化被动为主动的分水岭。 如果要在软件开发这条路上走得更远,只做到及格还不行,我们还要做到优秀,还要追求卓越。能在更短的时间内,处理更多信息、产出更大价值的人,将会是高效人士。若能得到尽情的发挥,并拥有合适的平台与机遇,就能成为公司里的明星员工,在更短时间内获得晋升,脱颖而出。相关的内容,将会在第四部分作介绍。 希望我们都能走出舒适区,在技术路上走得更远。当你觉得已经达到瓶颈区时,不妨给自己设立更高的目标,而有时候我们不知道自己不知道,就会容易陷入迷茫。从小白到开发工程师,从问题解决者到权威专家,从专家到团队管理,从管理到精益创业,从创业到布道。有很多有趣的东西等着我们去做,并值得为之奋斗不已。 ## 勘误 由于笔者能力有限,虽然我已经把整本书打印成纸质版草稿并进行多次校对,但书中难免有误,望请读者理解和提点。如有问题,欢迎随时反馈到图灵社区:[http://www.ituring.com.cn/book/2664](http://www.ituring.com.cn/book/2664),我会尽快修正和回复,谢谢! ## 关于作者 大家好,我是黄禅宗,毕业于华南师范大学,专业是我最喜欢的软件工程。在2007年应征入伍,成为人民解放军海军中的一名义务兵,并曾服役于南海舰队西沙群岛某舰艇部队。大学毕业后,曾在唯品会任职高级开发工程师,主要参与唯品会官网、大促活动系统等千万级访问量大型系统的研发与维护工作。当前任职于租租车,担任开发经理,管理20人左右的研发团队,负责主流程核心业务系统。在业余时间,我活跃在开源社区,并从2014年开源了PhalApi接口开发框架,一直维护至今。同时喜欢技术文章的翻译,喜欢分享在软件开发领域上的心得体会。作为一名专业的软件开发工程师,始终致力于为他人、团队和公司解决问题,创造价值。现在居住在广州。 ## 踏上征程,就现在 在软件开发这条路上,不管我们在哪一个阶段,时刻要面对的阻力都是巨大的。这是因为在本质上,我们正处于信息大爆炸的时代,要通过开发软件恰当、精准、及时处理这些信息,不仅需要过硬的技术知识和能力,还要投入大量的时间与精力,以及持续学习。 古云:此日足可惜,吾辈更应惜秒阴。事不宜迟,让我们马上进入软件开发这一神奇而又充满未知的领域——