不得不说,程序员的思考方式很“特别”,之前一直和代码打交道,并没有感觉出什么异常来,最近几年,和客户、产品、业务沟通的很紧密,发现程序员的思考方式,真的和大众不一样,这种思考方式,也决定了你能不能成为程序员的最根本条件。
程序员思维的核心是:枚举算法
我们看下图,我们把开发系统做个简化,用于举例说明:大众的思维,要想去一个目的地,会怎么描述呢?直接过去就可以了是吧,直达目的地,这是最简单效率最高的方式。那程序员呢,同样的目标,程序员怎么描述呢,一、去目的地的“正确”的路。二、枚举出所有的“错误”的路来,并封锁用户的行为。
为什么要描述正确的路呢?这是做系统功能的目的,也是用户要的,这个没什么好说的。那为什么要把所有不能到目的地“错误”的路都要列出来呢?答案是为了优化系统,防止bug或漏洞的发生。程序员每当讨论系统的时候,都会枚举列出所有的可能性来,如果有一种可能性漏掉了,它会以漏洞或bug的形式存在,轻的系统报错或数据错误,重的会引起安全隐患。
思维是了解了,但还是不明白,能举例说明吗?
我们举个例子,用户注册时填入手机号发送验证码的功能, 我们正常的操作是:填入手机号,点发送验证码,就可以了,如果你是外行人,你会觉得,这不很简单吗?很简单的一个功能,为什么程序员要写那么久?事实上,如果你做开发的话,只写了这么一个功能,那这套系统一定会有非常严重的bug和漏洞的。那程序员会怎么去做呢?
如果你输入的不是一个手机号码,那发送短信的后台会做一个“无用功”,浪费系统资源不说,还可能系统报错,所以在把手机号码给到短信发送平台的时候,你自己要先做一个数据格式上的验证,毕竟用户有输入错误数据的可能性,这时候你要把自己当成用户,把所有的可能性枚举出来,并加以处理。
比如,在这个案例中,你要做的数据验证是:1、用户输入的是数字,而不是汉字或字母或其它文字。2、用户输入的是11位的手机号,而不是其它位数。3、中间不能有空格。4、两边有空格需要自动处理掉。5、符合手机号码的规范,比如第一位是1开头而不是其它数字。以上只列了部分条件,是你开发系统需要想到的,这就是枚举过程。当然,这个过程现在可以通过正则表达式来一步完成,我们只是为了举例说明一下程序员的思考方式,在其它业务场景,也需要用这种方式来思考。同时这也是测试人员要做的工作。
可以不枚举错误的路吗?直接写一个正常的
可以,是的,可以这么做,通常是在开发任务比较急的情况下,客户或老板着急上线,程序员会有条件的选择留下一些问题,以保证系统能以正常的操作工作就可以了。通常这些问题会被按时间来分类,比如系统上线两个星期后必须要解决的,一个月后必须要解决的,半年后要解决的等等。这就是程序员经常提到的埋的坑,不是程序员想埋,99%的是时间不够,1%是技术问题。
小伙伴们,你们现在写的系统,埋了多少坑在里面呢?要多长时间能解决呢?欢迎在评论区留言讨论。