程序员|让我们遍体鳞伤的“程序员思维”

程序员|让我们遍体鳞伤的“程序员思维”

文章图片

程序员|让我们遍体鳞伤的“程序员思维”

文章图片



最近在看文章的时候 , 发现了很多关于 “程序员思维”的讨论 , 这是感觉上被大肆吹捧的“思维模式” , 有的观点认为掌握了这种思维模式 , 就能让人变得“聪明” , 还有一种观点认为现在世界正在悄悄地被“程序员思维”所吞噬 。 个人感觉 , 这是一种很无聊的说法 。
首先 , “程序员思维”并没有一种被广泛认可的解释 , 就个人认识来看 , 其构成主要包含三个部分:抽象业务逻辑并转化为流程 , 使用判断保证流程的正确性 , 以及借助前人的轮子重新认识世界 。
抽象业务逻辑并转化为流程 , 这是很多程序开发者每天的工作之一 , 具体的过程类似于:用户想买一个苹果 , 那么我就设计一个流程 , 确保用户能够执行注册、检索(找苹果)、选规格下订单(买一个还是一斤)、完善快递地址、付款直到最后的收货 。 嗯 , 这样看起来 , 很有条理性 , 对 , 条理性 , 这是程序员思维的一大优点 。
使用判断保证流程的正确性 , 这是对上述流程的一个补充 , 比如 , 如果用户并不在配送范围(加钱都不行 , 比如人在南极) , 那么在上述的“完善快递地址”这一步完成后 , 会通过判定地址不在配送范围 , 而阻止用户付款 , 从而规避后续发生的一系列问题 。 嗯 , 这样看起来 , 很严谨 , 对 , 严谨性 , 这是程序员思维的第二大优点 。
借助前人的轮子重新认识世界 , 这是一种工程化思维 , “万物皆工具” , 如果我没有 , 最方便的就是直接用别人现成的轮子 。 就像 , 我们没有办法由于我们自己的物流太弱了 , 完全无法满足新增用户的需求 , 从而导致了各种各样的问题 。 这个时候 , 我们发现设计模式中有一种叫做“委托”的模式 , 嗯 , 为什么不直接把“配送”这个环节委托出去 , 让我们不再关注我们不熟悉的业务 , 而专注做我们的交易平台呢?嗯 , 这样看起来 , 很有思路 , 对模式的复用 , 让程序员看起来能够更加聪明的解决业务问题 。

综合上述三点 , 我们发现具有“程序员思维” , 会让我们更加有条理 , 更加严谨 , 甚至更加“聪明” 。 这么看起来 , 这种思维模式很棒啊 , 这种东西不应该立即被广为推广 , 甚至应该把编程作为高考的一部分!
换个角度 , 程序员的烦恼或者程序员的痛苦是什么?可能很多人会说是“需求变更” , 而“需求变更”的本质是什么?是我们没有解决“根源”问题 , 是我们甚至没有找到“根源问题” , 是只有一次一次的变更 , 才能让我们更加接近所谓的“根源问题” 。
举例:我是一家锁具公司的开发人员 , 我们公司现在陷入了一个困境就是越来越多的用户向我们反馈“忘记带钥匙 , 找了专业拆锁的人员 , 也拆不掉锁 , 最终只能破门而入” 。 “锁的安全性”本身就是就是我们产品的一大卖点 , 然后我们应该如何解决这个问题?或者说用户的真实需求是什么?
我方预估需求1:降低安全性 , 在不破坏门的情况下 , 能够拆出锁具 , 但要承担不实宣传的法律风险 。
我方预估需求2:保证安全性 , 在各城市找代理 , 能够使用专业工具 , 在不破坏门的情况下 , 安全拆除锁具 。
我方预估需求3:与某银行建立合作管理 , 利用其贵重物品保管服务存放我方用户的钥匙 , 并考虑让银行提供限时配送业务 。
我方预估需求4:降低安全性 , 向自动取款机学习 , 使用钥匙或者密码的开门方式 , 忘记带钥匙 , 使用密码开门 。
我方预估需求5:引进生物体征技术 , 使用钥匙或者密码或者指纹或者人脸或者瞳孔识别等不同技术 , 通过设置不同的验证策略 , 进行开门操作 , 几乎杜绝此类问题 。
这5中方式 , 哪种是最优解?只能在不同的场景下 , 最优解不同 , 需求1成本最低 , 需求3给客户极致安全的保障 , 需求5是目前看起来的最优解 , 但成本是需求1的几倍 。
最悲观的情况是 , 我们公司在这个问题的初步阶段 , 采用了需求1 , 去解决;但大家都知道是临时的解决方案 , 然后在既定规划中 , 我们会马上开始进行需求2的实现工作 。 实现过程中发现掌握了我们开锁工具的人都不是公司的实际干系人 , 风险过大 , 转而实现需求3 , 之后发现跟银行合作成本过高 , 开始转为需求4马上就要实现完成我们的密码门锁的时候 , 发现需求5也就是智能门锁……普及了 。

看 , 这就是程序员思维那根面向自己的“刃” , 因为自己或者素在的组织 , “不知道自己需要什么” , 而不断的调整、优化 , 最后生生把自己逼疯的那最尖锐的一面 。
“你的逻辑不对!”
“不 , 这个逻辑有漏洞!不信你看……”
“拜托 , 麻烦讲一下逻辑 , 逻辑 , 明白么?你的想法这么浪漫 , 为什么不去写诗?”
“你什么都不知道 , 凭什么跟我谈需求?”
“拜托 , 这种常识性的东西 , 还需要我跟你普及么?”
“你真的在这个行业里干了十几年么?你这种人都能吃得上饭 , 真心就是这个行业没落的原因”
【程序员|让我们遍体鳞伤的“程序员思维”】直接产出软件的程序员 , 需要一边从身边杂乱无章的信息中 , 尝试找打需要解决的各种问题 , 并明确出优先级 , 另一边还需要应对一些诸如“给我一个五彩斑斓的黑”这种“极其浪漫”的需求 。
这种情况下 , 如果没有极其优秀的沟通能力 , 那么你不自闭都感觉对不起你的专业性 。
所以你会发现你越来越不喜欢打破计划 , 越来越习惯通过持续的自我提升来满足自己 , 你的社交圈越来越小 , 甚至随着工作经验越多 , 就越不想跟人说话 , 也逐渐不再去想去争论什么 , 因为知道不可能去改变别人的想法 , 更不可能去一边一片普及所谓的“常识” , 那只会让我们觉得更加沮丧 。
越成熟就越自闭 , 这就是那把名叫“程序员思维”双刃剑的另一面 。
当然 , 如果我们的沟通能力足够的好或者心态足够好 , 这些都不是问题 。 或许我们可以给自己找一个“发言人”或者“代理人” , 他们就像一个翻译官一样 , 将别人想告诉我们的 , 更加清晰的转述给我们 , 而不需要让我们去纠结那些逻辑上的漏洞 , 同时 , 还能够将我们的想法 , 更加委婉、明确的告诉其他人 。 这样 , 也能让我们过得相对舒服一些 。
因为工作原因 , 我们不得不一遍一遍的“审视”自己 , 去翻看以前自己用心写的文档和代码 , 然后心里不断反问自己“为什么当时这么蠢?这里完全可以……” , 对自己的不宽容 , 偶尔会引发一些对别人的不宽容 , 这就造成了一种微妙的印象 。
或许某一天 , 这种思维模式开始突破我们的工作范围 , 而渗透到我们的生活中 , 我们开始变得有计划 , 有规律 , 甚至到家人定期的电话问候 , 女友的生日提醒等等 , 通过闹钟、邮件、短信等等定时任务的脚本 , 转化成了我们逐渐觉得舒适且安全的一种方式 。
只要是在我的if和else里的事情 , 我都能轻松解决;只要是在我的try和catch里的 , 我都觉得异常心安 , 而 , 我的生活 , 就像那个一直在while(alive)中循环的代码一样 , 直到有一天alive!=true 。

所以 , 他们也会说:
看 , 那个呆头呆脑的程序员 , 每天不是在写一些看不懂的东西 , 就是在开会时问一些挑刺的问题 , 或者说一些不合时宜的话 , 啊 , 据说 , 他们还为自己起了一个听起来很牛的名字:“程序员思维” 。
写在最后
这是几年前写的一篇文章 , 稍微修改了一些比喻部分 , 现在读来当时戾气真的很重 , 想来是直到今天 , 我依然不知道自己想要什么吧?
究其原因 , 就是开发者这个职业 , 让我们得到了相对优越的生活 , 但是年龄的增长 , 家庭的组成 , 职业的困扰都在持续的、悄无声息的转化为压力 , 让我们变得举步维艰 。 就像如果你有家庭 , 你又能如何承受996这种福报呢?她醒我已走 , 我回她已睡 。 我的邻居 , 周末又去了海边 , 而我 , 在仅有的周日睡上一天 , 还被电话吵醒 , 说有一个文档明天要用 。
或许 , 我们不应该用对待工作的方式对待我们的生活;或许 , 大部分人的生活都像这样;或许 , 他们也努力的与这个世界抗争 , 然后遍体鳞伤;或许 , 他们也曾在某个午夜的酒后失声痛哭 。
或许 , 这仅仅是因为我们只是一个“平凡的人” , 过着“平凡的生活” , 也承受着“平凡的烦恼” 。
所以 , 为什么不多关注一下家人呢?把那些愚蠢的计划、逻辑扔到一边 , 让孩子爬到自己的背上 , 抓住自己的耳朵 , 像战车一样 , 冲向妈妈的衣架 , 践踏挂在上面的“敌人” , 还要配上“呜呜”的声音 , 然后在妈妈的尖叫声中 , 迎着妈妈的攻击 , 比赛谁能用嘴巴更加快速的把妈妈脸上的妆弄花 。
所以 , 你看 , 虽然这把剑依然会持续的伤害我 , 但最起码 , 我已经有了疗伤的地方 。


    推荐阅读