自从我开始琢磨计算机硬件以来,我做算法题的能力也在提高。
以前对算法题有些啃不动,提不起兴趣,现在觉得算法题好象可口美味的饼干,一口吃下去,味觉很享受
究其原因,我发现对硬件的理解,提高了我对软件编程的思维深度。
例如,以前觉得,赋值语句就是赋值语句,写了千百遍了以至于麻木。但现在一写赋值语句,脑子里自动出现硬件访问内存时,时序电路,触发器,寄存器,扇入扇出等一系列硬件及其操作。
在硬件电路上,时序电路和非时序电路有严格的区分,无法混淆。
例如,一般的与或非,加减乘除乃至于复杂的数学函数运算都属于非时序电路,到了内存电路时才必须要用时序电路。时序电路通常有头疼的问题,例如时钟的同步非同步,竞争,冒险等等。
而在高级语言编程时,赋值也会带来头疼的状态管理问题,因为在不同时刻变量值有可能不同,导致应用程序的Bug需要追踪各种复杂的状态才能找到,以及多线程操作中的问题等。
对变量赋值的处理方式的不同,也是函数式编程和非函数式编程的重要区别。
赋值这件事,不是小问题。而从硬件出发,则很容易可以看到问题的本质,这与时序电路本身的特性有极强关系。