程序员的技术性思维误区

引言

有的程序员在面试或者工作中,可能会被面试官或者同事评价:技术思维太浓重!我相信读者朋友中有不少被这样评价过,或者认识被这样评价过的朋友吧。虽然笔者认为这是一个中性的评价,不见得是个缺点,但相信被这样评价的朋友还是会比较介怀。那么接下来,我们就来谈一谈技术思维的特点。

重实现

面对问题第一时间的反应是:怎么实现呢?实现的成本高吗?比如产品同学提了一个想法,很多程序员的第一反应也许不是去考虑这个想法对于客户是否合理,而是会快速的回顾考量现有系统的各种约束和技术负债,看是否可以在Deadline之前实现。所谓的“客户第一”,绝不是一句空话,而是实实在在的一种思维习惯:考虑问题的第一出发点永远是从客户角度出发去思考!

重边界

很多程序员面对冲突和矛盾的时候,第一时间先考虑冲突或矛盾双方的边界在哪里?当然,绝大部分冲突或矛盾的发生确实都是因边界不清导致的!但是,面对冲突急于先去理清边界,会给冲突双方一种”追究责任“的感觉,这实际上无益于冲突或矛盾的解决。更好的方式应该是,先从冲突或矛盾背后的隐藏问题出发,找到问题的全局最优解,然后再去说服冲突双方可能会更有效果,这就是问题驱动!

重细节

大部分程序员在学习的时候,有一种倾向:先保证某个知识的深度,再求知识的广度!对深度的痴迷,实际上就是重细节的表现。不知道大家学习的时候有没有过这样的感受,某个知识你学习初期感觉提升最快,随着知识的深入,发现怎么学习都还在原地踏步,好像经济学上所说的边际递减效应一样!这个时候,如果你去学习下该知识相关的一些知识,甚至是无关的一些知识的时候,某一刻突然对于该知识的理解深度会有质的提升。

实际上在学习的过程中,可以借鉴分层软件架构思想来组织知识学习深度和广度的节奏。作为程序员,一开始先同时学习Java语言基本特性、JVM基本原理、基础排序算法、计算机基础体系结构等基本相关知识;然后再同时学习Java语言高级特性、JVM内存模型、高级排序算法、计算机原理。这样,实际上你的知识永远是一个面,虽然一开始这个面的深度不够,但只要持续学习提升,当你有了两层、三层的叠加之后,就形成了体系化的知识体系!

重风险

面对问题总是会先考虑最坏的情况下怎么办!实际上有一种软件架构思想就是「基于风险的软件架构」。永远做最坏的打算,这个特点其实挺好的。但是,有的时候会引起过度的悲观,而缺失了成本意识!实际上,只要发生风险之后的成本比实施控制风险措施的成本小,也许就不需要控制风险了!

结束语

各行各业的从业者其实都会或多或少的被工作影响自己的思维习惯,比如笔者之前从事土木工程行业,看到一些建筑的柱子第一时间会说混泥土,而不是水泥。这些习惯无所谓好坏,但是一定要注意避免这些思维特点被无限放大。要知道任何特点只要不加约束的使用,也许就变成缺点了,物极必反,月盈则亏!

分享程序员职业生涯中的点点滴滴,愿每位程序员都能快乐工作,认真生活!