Re: [讨论] 李家同 怪不得资工学生不会写程式

楼主: zanyking (最后的六年级生)   2019-03-13 15:54:47
※ 引述《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,我最喜欢的一套小说,就是梦枕貘的‘阴阳师’
写程式就是命名,命名就是下咒,咒下得好,程式就会有强烈的生命,你
只要看着它,它就会透过你的眼睛操作你的手去敲键盘,把该有的其他部分
程式码给打出来。
命名得不好,程式是死的,那就只好自个一个字、一个字慢慢敲了
作者: pttworld (批踢踢世界)   2019-03-13 16:16:00
DFD是SA文件必备的
作者: testPtt (测试)   2019-03-13 16:18:00
其实asm,vhdl这种接近硬件的还是会画看看
作者: thefattiger (LT)   2019-03-13 16:31:00
我也觉得循序图实用得多,不过非开发者看流程图应该是比较好懂
作者: bcew (bcew)   2019-03-13 17:21:00
asm是循序语言和流程图天然匹配,vhdl还是架构图、FSM、和波形图比较好描述,loop和while在电路上很不直觉^^
作者: jhjhs33504 ( )   2019-03-13 17:31:00
流程图也没那么不堪 尤其很多framework底下逻辑照着跑hard code的话反而是特殊案例吧毕竟涵盖范围有限bug多
作者: ripple0129 (perry tsai)   2019-03-13 18:22:00
推,最大的问题其实是图文不符啊XD
作者: es8603 (绯色之翼)   2019-03-13 21:27:00
推zanyking!
作者: atpx (秋雨的心情)   2019-03-13 21:50:00
任何文件最后都会落得与程式码不符吧, 除非不断投入人力改问题对管理者来说, 程式码才是产出, 文件不是
作者: brucetu (sec)   2019-03-13 22:10:00
我觉得不是UML图那种很文件的东西而是规划程式的时候随便画的几个框框几条线写一些重点跟同事讨论或者跟主管说明的时候也都会用到开会总不能拿code出来讨论商业逻辑吧至于UML那种图 真的很难跟程式一致 还是算了就像是一个新成员加入专案 要让对方快速了解有图还是比较快
作者: Masakiad (Masaki)   2019-03-13 22:20:00
讲UML很难跟程式一至的只是没认真做而已吧,扣除UML维护的问题,第一次按图施工不一样铁定有人不认真
作者: testPtt (测试)   2019-03-13 22:49:00
微软派来的有code map可以用就不会想画那些图了
作者: lazarus1121 (...)   2019-03-13 22:59:00
施工的时候设计图一直改 是要怎么按图施工XD改到最后时间压力出来 你会先改程式还是设计图
作者: atst2 (atst2)   2019-03-13 23:25:00
流程图有用, 但不是对应在程式细节上.Android的Activity生命周期就是使用流程图的一个好例子.不过对实作细节而言,流程图确实比不上程式本身来得清楚.
作者: neo5277 (I am an agent of chaos)   2019-03-13 23:40:00
推循序我第一个一定先弄这个
作者: shter (飞梭之影)   2019-03-14 01:22:00
我是写好 function 名字后先在内部用注解写判断步骤然后每一行的步骤下面写 code,每行注解的 code 都写完就完如果某一步骤的可以重复使用时就再开一个 function 直接写
作者: konkonchou (卡卡猫)   2019-03-14 01:42:00
流程图主要是拿来沟通用,SA用很多,拿去当SD文件给PG自然是用错地方了,至于文件过时所以才要持续修正小专案一个人作当然是耗费人力资源,专责分工才有效益
作者: ku399999   2019-03-14 09:04:00
像是slack推播判断流程图 沟通 debug还是很有用吧
作者: buwa56 (balasai)   2019-03-14 11:20:00
感觉是一人战队
作者: layolayo (蓝天晴雨)   2019-03-14 18:38:00
300行code小意思
作者: tinlans ( )   2019-03-15 03:01:00
很难一致是惰性问题,拆成 microservices 做就很难偷懒了
作者: superpandal   2019-03-15 04:03:00
流程图的确是给外行人看的 架构还是要够飘逸才可以
作者: ruokcnn (Dean)   2019-03-16 14:10:00
同意你
作者: supermmi (陈敏宪)   2019-03-18 00:23:00
我是程式写完后才画流程图,算是笔记,将来要回头看code时会有帮助

Links booklink

Contact Us: admin [ a t ] ucptt.com