职场路书 · 不同行业的真实声音之十一:我姓程,叫序员
图片:电影《社交网络》
哪些你熟知的重要知识或方法,外人却常常因不了解而陷入困境?
程序员
写代码就是在写逻辑,思维方式和解决问题的方式基本跟其他领域完全相通,只是特征会更明显、也更极端一些。一一列举可能够写一本书了,先举两个例子吧:
1. 分解(分层、分模块)
“把大象装进冰箱需要三个步骤”的笑话大家都知道。
这并不只是笑话,这是很地道的分解问题的思维。
在充斥着巨量细节的状态下,唯一靠谱的方式是通过分解问题来理顺思路、逐一解决。
比如,就说让电脑上网看网页这事,其中就有多个层次的问题:
首先,浏览器需要知道网页是什么、怎么用的,比如颜色、链接、网页布局、网页上的动态效果这些东西都是怎么表示的;然后,我们得确保网页是能获取到的,这就涉及到我们怎么通过域名找到服务器,跟服务器怎么“说”表示我们只是想看某个页面而不是想发QQ消息;但这些的前提是我们的机器能跟网站的机器“好好沟通”,听说过“网关”/“路由”这些概念的人都知道,机器间的交流都是通过中间的机器一次一次的转发做到的,那么应该怎么保证消息在机器间传递,最终会传到;再往下想,我们成功地设计出了一种消息格式,但实际上需要通过网线上的电信号表达出来,那么应该用什么样的信号在什么样的网线上传输,可以做到节省材料、减少干扰、稍微长点的距离也能用。在其中的每个层次,都有很多细节,但分清了层次,层外就可以忽略这些细节。
这种思路的本质是:通过合并减少问题数量,通过拆分减少问题间的联系,从而能做到“批量”、“宏观”地解决问题。
分解成功的标准是高内聚、低耦合:说白了就是,分在一起的确实有很强的内在联系,而被分开的联系都很弱(专业术语叫高内聚、低耦合)
危险是,有时候底层细节并不能简单地忽略,但分层会造成一种“可以忽略底层”的假象。比如网络中每层都可能存在安全问题,并不容易“封”住不暴露给上层。
2. 缓存(cache/buffer)
据说有些宅会一星期大采购一次,然后一星期不用出门;或者有些人很喜欢做读书笔记。
这都可以看成是一种缓存。
计算机里,由于各种设备速度差别很大,缓存无处不在。
比如,如果你能分清“内存”和“硬盘”、知道硬盘速度比内存慢很多,就比较好理解:装软件都是装在硬盘中的,但运行程序却是要先加载到内存中再使用,修改word文件时也是在内存中修改,自动或手动地写回硬盘
再比如,网络的速度比硬盘慢很多,所以浏览器都会把网页缓存在硬盘上,所以会有我们能看到的“清缓存”操作
再比如,google其实是一个互联网的“大缓存”
缓存的本质是:在能够预测未来使用的前提下,预先存储一些处理结果提供快速访问,从而做到用空间换时间或缓解瓶颈。
而缓存从逻辑上就会存在数据陈旧的问题,比如电话本里的号码可能已经停机了。
而从逻辑上有两种解决方式:一种是当数据有修改时锁定记录并做到同步更新(要求别人换号时必须立即通知你);另一种是设置过期策略,保证不会过期太久(每次过年打一遍电话check)
写代码就是在写逻辑,思维方式和解决问题的方式基本跟其他领域完全相通,只是特征会更明显、也更极端一些。一一列举可能够写一本书了,先举两个例子吧:
1. 分解(分层、分模块)
“把大象装进冰箱需要三个步骤”的笑话大家都知道。
这并不只是笑话,这是很地道的分解问题的思维。
在充斥着巨量细节的状态下,唯一靠谱的方式是通过分解问题来理顺思路、逐一解决。
比如,就说让电脑上网看网页这事,其中就有多个层次的问题:
首先,浏览器需要知道网页是什么、怎么用的,比如颜色、链接、网页布局、网页上的动态效果这些东西都是怎么表示的;然后,我们得确保网页是能获取到的,这就涉及到我们怎么通过域名找到服务器,跟服务器怎么“说”表示我们只是想看某个页面而不是想发QQ消息;但这些的前提是我们的机器能跟网站的机器“好好沟通”,听说过“网关”/“路由”这些概念的人都知道,机器间的交流都是通过中间的机器一次一次的转发做到的,那么应该怎么保证消息在机器间传递,最终会传到;再往下想,我们成功地设计出了一种消息格式,但实际上需要通过网线上的电信号表达出来,那么应该用什么样的信号在什么样的网线上传输,可以做到节省材料、减少干扰、稍微长点的距离也能用。在其中的每个层次,都有很多细节,但分清了层次,层外就可以忽略这些细节。
这种思路的本质是:通过合并减少问题数量,通过拆分减少问题间的联系,从而能做到“批量”、“宏观”地解决问题。
分解成功的标准是高内聚、低耦合:说白了就是,分在一起的确实有很强的内在联系,而被分开的联系都很弱(专业术语叫高内聚、低耦合)
危险是,有时候底层细节并不能简单地忽略,但分层会造成一种“可以忽略底层”的假象。比如网络中每层都可能存在安全问题,并不容易“封”住不暴露给上层。
2. 缓存(cache/buffer)
据说有些宅会一星期大采购一次,然后一星期不用出门;或者有些人很喜欢做读书笔记。
这都可以看成是一种缓存。
计算机里,由于各种设备速度差别很大,缓存无处不在。
比如,如果你能分清“内存”和“硬盘”、知道硬盘速度比内存慢很多,就比较好理解:装软件都是装在硬盘中的,但运行程序却是要先加载到内存中再使用,修改word文件时也是在内存中修改,自动或手动地写回硬盘
再比如,网络的速度比硬盘慢很多,所以浏览器都会把网页缓存在硬盘上,所以会有我们能看到的“清缓存”操作
再比如,google其实是一个互联网的“大缓存”
缓存的本质是:在能够预测未来使用的前提下,预先存储一些处理结果提供快速访问,从而做到用空间换时间或缓解瓶颈。
而缓存从逻辑上就会存在数据陈旧的问题,比如电话本里的号码可能已经停机了。
而从逻辑上有两种解决方式:一种是当数据有修改时锁定记录并做到同步更新(要求别人换号时必须立即通知你);另一种是设置过期策略,保证不会过期太久(每次过年打一遍电话check)
转载请注明:微图摘 » 职场路书 · 不同行业的真实声音之十一:我姓程,叫序员