c++编程实践——设计开发者的错误认知

c++编程实践——设计开发者的错误认知 一、唯技术论其实不管是搞哪个方面是搞工程还是搞技术是搞人文还是搞地理如此等等。千万不要陷入细节即不要只在纵向领域专注自己的一点。为什么推荐大家学习一下各种哲学思想看上去和编程没毛关系但真正当你入局之后就会发现技术只是解决问题的一个很小的一个方面。这也就是反复重复的技术人员最大的通病——唯技术论。科学不是只是技术也不是科学家才是科学。科学是一套成体系的哲学思想。所以说唯技术论是很多设计开发者最容易掉进的大坑而且很多人往往一生都跳不出来。二、开发者和设计者的“优点”虽然在上面提到了不能唯技术论。但搞技术的开发者又怎么能回避开技术呢就时论事即使是搞技术其实也有很多开发者和设计者过度陷入了细节。过分的追求某一方向的“优秀”尽量想发挥自己的“优点”。用俗话来说就是“用力过猛”说得文诌诌些就是“过犹不及”。很多技术问题的解决往往不是技术能解决的。它是一个综合的概念一定要明白技术是为人解决的问题的而不是为人创造问题的。如果体现到编程上这种“优点”就是追求程序的完美希望能从效率、成本或其它等等方面达到最优。这是另外一种主观唯心主义。所以大家不要认为哲学离自己很远其实他很近。每个人都在实践着他。三、错误认知的方式如果说上面的分析是一种务虚的分析是一种理论的重复。耳朵都生出茧子来了“爹”味儿太浓。那么下面就把编程中常见的错误认知的方式给大家说明一下再结合上面的分析就会明白很多至于最终能领悟多少还看个人的实践。过度设计这个其实大家非常容易理解但往往在实践中会不自觉的陷入其中特别是一些刚刚踏入设计领域的所谓架构师和一些喜欢炫技的设计者开发者。为了达到某种高大上的目的过度引入各种复杂的设计过早优化项目刚刚开始最终的细节还没敲定甚至都不知道项目能否存活发展下去就过早的进入了优化过度优化对于项目整体的成本不做考虑过度的优化项目本身可能导致项目的其它成本如时间、人力等的激升设计洁癖这种往往产生于一些比较资深的设计者确实是见多识广养成了一种不接“地气”的唯设计论不考虑项目的整体目标这也是陷入细节的一种体现开发洁癖如同设计洁癖一样开发洁癖也是如此。在开发过程中过分强调规则、原理。甚至对一些命名、换行要求达到了苛刻的地步追求单一领域优势只看到自己开发的模块针对其进行极致的优化。导致与其它模块不匹配导致投入和产出严重不成正比。比如一个跨平台项目只考虑了专一平台没有考虑其它平台应用结果导致了其它平台运行的潜在风险过于保守或过于激进在设计开发过程中过分强调稳而产生过度保守过分强调新而产生过于激进。但却忽略了保守产生的效率问题以及激进带来的风险问题四、常见举例针对上面的错误认知方式再给出一些实际的案例让大家能够更显而易见的明白项目意外失败这种最常见很多开发者一开始就在心中产生了宏大的叙事各种设计分层、模块架构、设计模式、分布式各种原理、并行技术等等提前都想到并有针对的应用然后又开始有针对性的进行优化。结果项目开发了两个月由于种原因取消了项目的复杂导致开发和维护的成本设计者不考虑实际需求或不考虑团队的整体水平和能力引入了自认为更高端的、优雅的设计。结果不但底下的成员无法接住即使自己也非常吃力。这在一些所谓的PPT架构师中经常会遇到这种问题。比如一个很常见的ORM小项目却引入了GPU并行技术和协程开发管理过于苛刻导致意外成本有些团队的开发管理人员过于强调规则和边界无论是对内还是对外都忽视了人才是技术和项目的根本约束了成员的主观能动性降低了团队整体的运营效率。典型的如项目团队需要与其它团队沟通出于各种原因将这种沟通仅限于一两种方式甚至限制一些成员的主动当面沟通不善于利用工具和新技术这种情况既是一种主动的情况也是一种被动的情况。为什么这样说是因为有的是不知道有的是知道但不愿意引入怕麻烦怕风险。比如前几年某些公司的代码管理还都没有全靠服务器每周定时拷贝文件备份。还有些公司不善于引入各种接口文档生成工具手工的编写如此等等。针对C或者固守c98标准不前进又前卫的在工程中引入了C23甚至26的某些新功能引入AI之所以把AI专列一项主要在于它太明显了。很多开发者都被称为“古法编程”人员了。仍然不愿意引入AI开发这是一种非常严重的思想上的落后。要善于利用AI编程而是排斥当然更不能完全依赖它其它其它还有但不再一一列举最后简单说一下开发者也是人它是生活在社会中的社会学也是其它的一类所以说大家一定要明白无论是设计和开发都要适度的保持扩展而不是为了宏大的叙事保持想象的扩展。罗马不是一天建成的胖子也不是三两天吃出来的。象大家熟知的电商网站如淘宝。不提修改光是完全推导重来就有好几次。这也是前面反复说的滚动开发迭代前进的原因敏捷开发的典型优势。在一家公司呆得久了哪家公司的软件没有重写过。明白了这个就明白了设计和开发的边界在哪里。五、总结唯技术论是错误的但通过上面的分析发现唯技术论内部又有很多的错误认知。这里给编程人员一个建议不但要深耕技术领域又要拓展自己的视野善于将不同领域的工程技术整合甚至融合一体形成自己的独立的思想体系。这样才能够知其然又知其所以然。不会因为认知跟不上技术陷入自我矛盾的纠结境界。