编程给我带来的思维提升

作者: 细卷子 | 来源:发表于2017-07-30 11:43 被阅读886次
    cover
    为什么写这篇文章?

    我发现 很多程序员都不想做一辈子的程序员,包括我周围的程序员朋友也跟我说 当他看到公司来了一名四十多岁的程序员时,他心情是焦虑的,因为他不想自己四十多岁了还坐在电脑面前写代码。
    听了之后,我不知道该怎么接?

    这种想法会产生一个阻力,这个阻力会阻碍我们成为更优秀的程序员。当然这种想法或许已经透漏出 成为优秀的程序员 已经没有诱惑力了。
    那么,既然没有诱惑力,为何你还在苦逼编程?

    我写这篇文章并不是希望你转行,而是想说 其实编程不仅仅是编程。

    不管从事什么行业,也不管学的什么专业,其实它们之间都是互通的。
    例如编程,不要只看编程本身,看到更多的应该是在编程过程中如何提升我们的认知的。或者 如何通过编程来提升我们的认知?

    根据芒格的格栅理论,我认为就是所谓的跨界学习。也就是说 不同的专业学术,都有它的思想理念,掌握这些思想理念,将其纳入自己的思维格栅中,它能帮助我们在多个维度来分析问题,从而作出更理性的决策。

    我目前差不多近三年的编程经验了(不多也不少吧),下面我分享一下 编程给我带来了哪些思维上的提升:
    这里我分了三个小节,分别是:

    1. 程序设计过程
    2. 程序编码过程
    3. 程序测试过程
    程序设计过程

    在一开始程序编写过程也许不存在设计过程。但慢慢会发现 如果没有良好的设计,程序在未来维护起来是很困难的。
    甚至不需要等到维护阶段,在测试过程中 就会发现各种偶然性问题,偶然性问题的根本原因不是出自偶然,而是程序流程混乱导致的。
    想到这种问题的根本原因在于:
    一种思维模式:
    程序的一种特征是 指定一个输入 必然会有一个对应的输出。程序是单纯的。
    所以 一个错误的输出 肯定来源于一个错误的输入。
    而程序又是一段一个接一个的执行过程,所以错误的输出 肯定是因为这个流程中出了问题。
    这种思维方式对我们测试程序很有帮助。

    这应该算是一种看待世界的方式既:

    如果要解决问题 就要找到问题的根本原因。

    就像我们分析源码的目的一样,“知其然 也要知其所以然”,相信所有事物运转正常都有它内在原理。

    偶然性问题也许是因为:

    1. 它也许不是真的能工作
    2. 你依靠的边界条件也许只是一个偶然,在不同情形下 它的表现可能就会不同
    3. 也许你都不知道它为什么能工作
      ...

    解决偶然性问题的方法就是在编码之前做好程序的设计工作。
    主要设计包括:

    1. 程序结构设计

    这种设计 可以提升我们的抽象思维。
    这种结构设计 就是我们经常说到的 模块化、组件化等架构相关的内容。
    它需要我们将一个复杂的东西 拆分成具体可实施的小模块。
    这也是一种思维模式:
    将复杂问题 分解成多个可解决的问题。
    这种思维模式同样也可以运用在其它领域。

    如何运用的呢?

    碰到一个难解的问题,就试着分解这个问题,分解到具体可以实施的地步,再一个一个的解决。
    模块化、组件化等架构设计的目的是为了解藕。解藕的目的是便于管理。
    这种思维模式可以运用到管理中,就是我们经常见到的 各司其职。
    上到国家管理 下到公司的管理,都是如此。

    1. 程序流程设计

    简单来说 就是如何让程序跑起来正常、可控。

    首先就是如何保证正常,比如:处理同步异步问题的方法。
    让整个流程是正常的,也就是上面所说的 非偶然性的正确输出。

    可控,在以后新增、更改需求也能保证流程正常。
    这里就涉及到了各种设计模式,以及一些编程语言
    (很多编程语言之所以能提升效率 我认为就是它的设计能让程序更加可控,例如:函数式编程里函数作为一等公民,可以像普通变量一样传递,让我们省心去设计一些复杂的东西,因为每多写一行代码 可能就会多一个bug)

    在其它领域中的应用:

    比如:工厂的流水线设计、各种流程手续的办理等。
    正常 就类似于 流水线能够正常运转;
    可控 就类似于 在流水线中间加入一个环节或者减少一个环节 不会干扰到其它环节。

    程序编码过程

    有了设计过程,编码过程就应该是按照设计合约来完成的。当然设计也不能保证完美无缺,所以在编码过程中 如果发现设计有问题或者是设计过程未想到的场景,应该更新设计(刚开始做设计会经常出现设计不完善问题)。

    在这个过程中能让思维更加谨密。
    在其它领域也一样,这种谨密的思维 能减少出错的机率。

    测试过程

    我们程序员都知道,不管代码写得多优雅、流程多风骚,都需要来一场测试拼杀。
    测完得到了一堆bug,往往能给我们更多反思,测试之前的自信哪来的?
    或者是,
    我就知道会有这么多bug,因为我写得烂嘛~
    然后就是一个一个的解决它,BUT,没那么容易
    在 bug 的解决过程中,你又会发现 如果一个问题解决方法不对 这个解决方法又会产生新的问题。
    也或许是因为对问题的定义不对而导致的。
    所以说,问题的定义决定了问题的解决方法,而问题解决方法又决定了新问题的来源。
    所以 “我们有必要对方案实施后可能产生的后果进行预判”
    但 就算进行了预判,之后又可能出现其它问题。
    不过 就算永远无法确定已经找到的问题定义是正确的,但是永远不要停下来寻找正确定义的脚步

    这是不是也算一种人生的态度呢?
    回到开头,为什么 不想做一辈子程序员?这个问题的本质是什么?
    是因为程序员太累?还是觉得做一辈子程序员没出息,工资太低?或者是觉得自己应该干一番大事,而做程序员格局太小了?
    问题的本质其实就是在于理想与现实之间的区别。
    如何解决这个问题,就看你怎么定义这个问题了。

    我觉得编程确实可以给我们程序员带来很多提升,能有多大提升 这就在于你有多在意它。而把编程思维纳入到我们自己的思维格栅中 不管未来从事什么行业,都是很有帮助的,所以说了这么多 其实就是好好的对待你的代码吧。哈哈~

    相关文章

      网友评论

      • twohuoone:其实吧,我现在处于一个很尴尬的状态,我觉得自主的学习和处理项目已经OK了,但是现在一直无法深入了,怎么办,我两年编程了
        细卷子:@twohuoone 应该是达到一个瓶颈了,试着去尝试一些更好的方法,当你知道还有更多的东西要学习后,你就会突破瓶颈了。
      • 星球上的那个人:写得很好,没想到还是妹子,棒
      • 18346a2fc7c8:哇,:heart_eyes:
        18346a2fc7c8:@细卷子 :cold_sweat:
        细卷子:@细婷子 :flushed:
      • 小宋敲码:确实,编程的思维平时做事也是可以用的。。就是谈朋友的时候不好用,,做事还是好用的
      • a3e8bf2651f6:的确,思维模式也是编程中或者说任何工作中很重要的点,这是一个不断积累提升的过程.至于为何还在不断的编程,为了养活自己,也是为了不断的提升自我,以后自然会到达一定的高度.
        细卷子:@BeautifulO_684e 嗯呐,编程是提升思维模式的一种方式:smiley:
      • 296d6ebc6cd2:哈哈哈 小姐姐好腻害
        细卷子:@颜路 哼 少来调戏我啊。:smile:
      • 爱跑步的coder:麻烦问下,里面写到的结构设计和流程设计之间是什么关系啊?
        爱跑步的coder:@细卷子 谢谢很耐心的解答哈。我也想了想这个问题,流程是结构的实现,的确也是它的一部分。
        细卷子:@爱跑步的coder 或者说 谁先运行 谁后运行 以及异步的优雅处理 这也是流程设计。当然这些都只是我的看法 或许有更精确的定义我还不知道:smile:
        细卷子:@爱跑步的coder 结构设计 我想表达的是模块化、组件化这些架构抽象方面。流程的设计会稍微小一点,是在结构设计中进行的程序流程的一个设计。结构设计强调的是层级结构比如MVC MVP MVVM 这类都是属于结构设计。流程设计就在这些结构设计之下进行的设计 比如说 单例模式 工厂模式 这些设计模式。

      本文标题:编程给我带来的思维提升

      本文链接:https://www.haomeiwen.com/subject/jcphlxtx.html