新手该如何开始进行自己的系统设计
如果问一个程序猿最难的事情是什么,我想通常不会是一门语言、也不会是一个框架,而是该如何设计一个系统。从开始系统设计开始,标志着一个程序猿跨越萌新,开始迎接更多的挑战
系统设计的九个难题
源起需求

需求可能会有很多种来源,可能源自产品或者领导的idea、仿品、内部等等,如何从需求中卜丝抽茧提取我们真正要做的事情通常是我们的第一个挑战
切莫自误

程序猿很容易犯的错误就是一切来源于自己的技术经验,针对技术类项目通常没什么问题,但很多程序猿容易依据自己之前的经验,认为自己曾经的某个设计是best practice, 就会陷入自己的怪圈
生搬硬套

在国内的环境下,各种大会层出不穷,各种ppt更是随处可见,但是大多数分享是不会介绍自己的内部环境的,但是作为程序猿的都知道,从最佳实践到系统落地,通常会根据环境或者业务的限制,进行取舍,一剂良药,也并不一定是包治百病
哪些杠精

人无完人,系统设计也一样,你不可能设计出一个前无古人后无来者的系统,总会有一些问题,可有时候有些人就是容易死钻牛角尖,站在某一个点上杠一下,这时候通常就要有一个负责人来个一言堂
技术心太强

在系统设计中性能和可扩展性等往往会有一些取舍,在有些时候,可能考虑后续的可扩展性等因素,往往会进行一些取舍,往往会牺牲一点性能,来换取更多的可扩展性、可维护性等,可能我们就要放一放我们傲娇的技术心了
蜻蜓点水

很多程序猿博览微博、公告号、技术博客,接触的"新技术"往往数以万计,但理解却是蜻蜓点水,对技术直接生搬硬套, 而没有深入的了解背后的原理、场景、约束条件等
浮沙筑高台

技术人很容易陷入争执当中,但大多数时候都不会有结果,因为大家都没有扎实的基础来支撑自己的设计,往往都是人云亦云,不知其味
作茧自缚

系统设计往往会让大家进行下层的一些设计,而有的程序猿在这时候发现自己设计有问题,也不说依然埋头向前,默默挖坑埋雷,直到后面出事的时候,悔之晚矣
缺乏训练

大多数程序猿根本就不了解系统设计的阶段,上来一张图,下来一堆坑,根本不知道做系统设计,怎么做架构设计、详细设计该如何去做,从而失去进行系统设计的意义
系统设计六个准备
查漏补缺

比如想设计一个分布式的系统,那你从来没阅读过分布式的资料,不知道分布式带来的问题,那你怎么可能进行系统设计呢,所以当你要进行某个领域的系统设计,一定要去认真准备阅读相关的资料、理解对应场景的问题、常用的解决方案,才可以游刃有余
刻意训练

大多数程序都是接到一个模块小的设计,大家也切莫妄自菲薄,大家可以从这个小的模块里面去思考如何设计模块、然后反复的练习,后面才能接受更高的挑战
大道至简

一个好的设计不是还可以增加哪些模块,而是再也无法减少模块,这就要求我们的设计能清楚的描述我们的各部分的工作,通常这样的设计都是精简的,都是简单的,反而是复杂的设计往往会带来后期无限的bug
质疑自己

当你设计完一个方案后,不应该高枕无忧,反而应该进行自我质疑,只有在这种反复的思考中,我们才可以进行设计的迭代,查漏补缺
开放心态

我们要接受同事的质疑,以开放的心态接受大家的意见,只有这样才能海纳百川,不断的丰富自己思考问题的角度,提高自己的认知和思考能力
不知为不知

当你听到同事一个更好的设计的时候,一定不要假装知道,而是以虔诚的心态来接受,不要不懂装懂,而是以自己的角度来思考问题
前奏曲总结
可怕的不是知道问题,而是不知道问题,上面这些大道理看似很简单,但是很多程序猿并不知道自己深受其害,因为大家太忙、忙着写bug、忙着改bug、而一切的源头都源于没有吧更多的时间放到系统设计阶段,缺少思考,缺少总结
小妙招

这里给大家一个小妙招, 每次我进行一次项目设计,都会画一个这样的思维导图,用于帮助自己更好的整理这一次系统设计遇到的问题,取得的收益,还有自己的收获,这样日后就可以知道自己需要改进的地方了