※ 引述《Hertzfeld (Google+)》之铭言:
: 很多明星大学的数学系毕业生也不会写程式。
: 我最近和十几位这一类的学生聊天,他们都告诉我一件事,
: 他们的老师从来不教他们如何画流程图。
: 对这些老师而言,写程式最重要的是要熟悉电脑语言,而不是利用逻辑思考。
: 其结果是,学生搞不清楚程式是如何产生的。
: 我实在不懂,为什么现在的老师们不重视逻辑思考,
: 也不教学生如何画流程图?画流程图其实是写程式的第一步,
: 如果你不会画流程图,就表示你不知道程式是如何写出来的,
: 也表示你根本不会设计程式。
: 很多学生写程式的时候是乱写一阵,其中的来龙去脉根本搞不清处,
: 写完以后,如果程式有问题,你也不会侦错。
: 我强调流程图的重要性已经很久了,可是显然没有什么效用,
: 因为这几天我碰到的学生都是才从大学毕业的,
: 他们虽然毕业于资讯相关科系,却都不会写程式。
: 但是我还是要再呼吁一次,学生如果不会画流程图,
: 就表示他没有逻辑思考的能力,不可能会写程式的。
我作开发也差不多快15年,我自己个人的经验是:
只要用的程式语言支援Object Oriented programming 或
Funtional programming,正常开发情境下是非常少会用到流程图的
因为任何语言只要支援这两者,那‘定义’也就是‘正确的命名’
行为或物件才是开发的重点,而程式的决策树,会被命了名的
物件或程序给分割抢食,只留下许多的情境,与当中特定的角色
如何互动
命名对了,接口开好,流程图用javadoc的叙述就能取代了
所以,把流程画得很清楚,有那种闲功夫不如直接写Code
而画得不清楚,那通常流程图就会退化成混杂特殊语法的用例图
或甚至是几行叙述
而且流程图在我来看有个很不好的缺点:就是他会引诱不成熟的
开发者写出非常imperative programming的程式,因为照着写,
分支就是开if else,然后加个后循环、里面再if else,如此一行
一行的写下去
有没有看过一个Java class 2000行,其中主要的public methods
动辄300行起跳,indent 深到可以打波动拳的?
这种Code 就是看着流程图、把程式码当做指令才会写成这样的
所以,我什么时候才会用流程图呢?
就是我得接手上述这种明显照着流程图作开发的程式的时候
对,原作者可能有把流程图留下来,但,流程图是维护成本最高的一种图
而只要专案一忙、bug一多,那文件肯定是过时的,所以最后常常
只能照着程式码重建整个流程,才能推断不同内容的资料流流进来的时候
会发生什么事,但很多时候即使面对这种情况我也是不画流程图的,
我会干脆开始写单元测试搞重构
若要讲到我最常用的图,那肯定是循序图第一、用例图第二,以及非常不规范
的组件图第三
特别在开发的系统遵循Micro service 设计思维的时候,循序图画不出来等
同于我根本不知道我在干嘛
当然,也有可能是我写的跟李家阿伯写的领域不一样,所以会这样吧?
身为programmer,我最喜欢的一套小说,就是梦枕貘的‘阴阳师’
写程式就是命名,命名就是下咒,咒下得好,程式就会有强烈的生命,你
只要看着它,它就会透过你的眼睛操作你的手去敲键盘,把该有的其他部分
程式码给打出来。
命名得不好,程式是死的,那就只好自个一个字、一个字慢慢敲了