五千年(敝帚自珍)

主题:今天随便说两句,关于日本 -- 绝对不是白领

共:💬141 🌺742 🌵6
分页树展主题 · 全看首页 上页
/ 10
下页 末页
                  • 家园 数学和编程

                    计算机科学根本不是数学,它只不过借用了非常少,非常基础的数学,比高中数学还要容易。

                    所谓“高等数学”,并不是研究计算机科学必须的。你可以用计算机来做微积分计算,可是这时候你其实是在做数学工作,用计算机作为工具。你研究的并不是计算机科学。这就像你可以用计算机来设计建筑,但建筑学却不是计算机科学的基础。

                    计算机是比数学更加基础的工具,就像纸和笔一样。计算机可以用来解决数学的问题,也可以用来解决不是数学的问题,比如工程的问题,艺术的问题,经济的问题,社会的问题等等。

                    计算机科学是完全独立的学科。学习了数学和物理,并不能代替对计算机科学的学习。你必须针对计算机科学进行学习,才有可能成为好的程序员。

                    数学家所用的语言,比起常见的程序语言(比如C++,Java)来说,其实是非常落后而蹩脚的设计。所谓“数学的美感”,其实大部分是夜郎自大。

                    99% 的数学家都写不出像样的代码。

                    数学和编程

                    • 家园 干嘛要搞那么完美.....

                      写小说的千千万,看过就忘的一大把,少数才是经典。

                      代码这种功利性这么强的东西,只要能满足使用的需要就行。

                      重要的,核心的部分代码可以写的像艺术一样,但是大多数工作的代码只要整整齐齐,便于理解,易于维护,我看就是好代码。

                      从我的经验来看,工程中的代码和核心业务无关的70%以上,都在干嘛呢,各种环境机器的适配,异常逻辑的封堵,用户业务流程的引导,这些工作只要是一般的程序员,勤勤恳恳的写就好了。

                      指针这种,你要是做工业控制相关的,不掌握是不行的,做互联网这种业务代码,不懂指针有啥关系,一样写代码,挣钱说不定还多。

                      对比指针这种,再往上抽象,那就是DSL这些玩意了,Domain Spec Langauge,就是说你用专业语言描述专业活动,自成程序自动执行,这个之前火过一阵子的Ruby就是这种语言,我拿这个做过硬件板卡的测试程序,普通工人只要输入 “XX板卡接入XX接口,送电,发送指令XXXX,等待2秒,检测第X路电压高于XXX即合格,否则不合格”。

                      但是做这个需要的抽象程度我看不比指针这个容易多少,但是呢,用户好用就行了。

                      够用就行,把编码当做艺术,技巧的展示,那么90%的代码都是不合乎审美要求的。

                    • 家园 这样的思路真的很似是而非

                      数学,数学家,电脑,电脑程序,程序员,本来关系很清楚,非要搅和的话,也可以搅和一下数学,数学家,算盘,打算盘的账房先生,或者,音乐,小提琴家,制作小提琴的琴匠,也能搅和出同样的结论。

                      “99%的数学家都写不出像样的代码。”--- 99%的小提琴家都不会制作小提琴,所以琴匠才是真正的艺术家。99%的数学家都没账房先生算盘打得好,所以账房先生才是牛人。

                      计算机科学根本不是数学,它只不过借用了非常少,非常基础的数学,比高中数学还要容易。

                      所谓“高等数学”,并不是研究计算机科学必须的。你可以用计算机来做微积分计算,可是这时候你其实是在做数学工作,用计算机作为工具。你研究的并不是计算机科学。这就像你可以用计算机来设计建筑,但建筑学却不是计算机科学的基础。

                      计算机是比数学更加基础的工具,就像纸和笔一样。计算机可以用来解决数学的问题,也可以用来解决不是数学的问题,比如工程的问题,艺术的问题,经济的问题,社会的问题等等。

                      计算机科学是完全独立的学科。学习了数学和物理,并不能代替对计算机科学的学习。你必须针对计算机科学进行学习,才有可能成为好的程序员。

                      数学家所用的语言,比起常见的程序语言(比如C++,Java)来说,其实是非常落后而蹩脚的设计。所谓“数学的美感”,其实大部分是夜郎自大。

                      99% 的数学家都写不出像样的代码。

                      这样的理论,放哪个领域都很滑稽,例如,

                      制作小提琴根本不是音乐,它只不过借用了非常少,非常基础的音乐,比高中音乐还要容易。

                      所谓“高等音乐”,并不是研究小提琴科学必须的。你可以用小提琴来演奏音乐,可是这时候你其实是在做音乐工作,用小提琴作为工具。你研究的并不是小提琴科学。这就像你可以用小提琴来做室内装饰,但室内装饰却不是小提琴科学的基础。

                      小提琴是比音乐更加基础的工具,就像纸和笔一样。小提琴科学可以用来解决音乐的问题,也可以用来解决不是音乐的问题,比如拉动GDP,比如防止假冒伪劣产品等等,又比如,小提琴做得好,夜壶也肯定做得漂亮,这是音乐学望尘莫及的。

                      小提琴科学是完全独立的学科。学习了音乐和物理,并不能代替对小提琴科学的学习。你必须针对小提琴科学进行学习,才有可能成为好的琴匠。

                      音乐所用的语言,比起常见的小提琴语言来说比如“匠心琴韵,别具一格,价值连城”,其实是非常落后而蹩脚的设计,所谓“音乐的美感”,其实大部分是夜郎自大。

                      99%的小提琴家都做不出像样的小提琴。

                      又例如,

                      算盘科学根本不是数学,它只不过借用了非常少,非常基础的数学,比高中数学还要容易。

                      所谓“高等数学”,并不是研究算盘科学必须的。你可以用算盘来做微积分计算,可是这时候你其实是在做数学工作,用算盘作为工具。你研究的并不是算盘科学。这就像你可以用算盘来做假账,但假账学却不是算盘科学的基础。

                      算盘是比数学更加基础的工具,就像纸和笔一样。算盘可以用来解决数学的问题,也可以用来解决不是数学的问题,比如地主用算盘骗剥长工,打算盘还可以耍酷泡妞等等。

                      算盘科学是完全独立的学科。学习了数学和物理,并不能代替对算盘科学的学习。你必须针对算盘科学进行学习,才有可能成为好的账房先生。

                      数学家所用的语言,比起常见的算盘语言比如“三下五除二来”说,其实是非常落后而蹩脚的设计。所谓“数学的美感”,其实大部分是夜郎自大。

                      99%的数学家打算盘都不如账房先生。

                      通宝推:桥上,
                    • 家园 最后一句的数学家和像样的代码都需要定义
                      通宝推:高三三班,
                      • 家园 感觉很难定义啊 -- 有补充

                        跟几根头发算秃,几根不算一样,很难定义

                        关于秃子悖论,有人说,我们可以一般人平均具有的5000根头发为界,规定以下为秃子,以上为不秃。如果这样规定,那么,4999根算不算秃?有5000 根头发的她或他,在梳妆打扮时,梳落了一根,是否当即成为一名“秃子”呢?

                        关于计算机和数学的关系,Paul Graham的看法是

                        我一直不喜欢“计算机科学”(computer science)这个词。主要原因是根本不存在这种东西。计算机科学就像一个大杂烩,由于某些历史意外,很多不相干的领域被强行拼装在一起。这个学科的一端是纯粹的数学家,他们自称“计算机科学家”,只是为了得到国防部研究局(DARPA)的项目资助。中间部分是计算机博物学家,研究各种专门性的题目,比如网络数据的路由算法。另一端则是黑客,只想写出有趣的软件,对于他们来说,计算机只是一种表达的媒介,就像建筑师手里的混凝土,或者画家手里的颜料。所以,在“计算机科学”的名下,数学家、物理学家、建筑师都不得不待在同一个系里。------------------------------

                        创作者不同于科学家,明白这一点有很多好处。除了不用为静态类型烦恼以外,还可以免去另一个折磨科学家的难题,那就是“对数学家的妒忌”。科学界的每一个人,暗地里都相信数学家比自己聪明。我觉得,数学家自己也相信这一点。最后的结果就是科学家往往会把自己的工作尽可能弄得看上去像数学。对于物理学这样的领域,这可能不会有太大不良影响。但是,你越往自然科学的方向发展,它就越成为一个严重的问题。一页写满了数学公式的纸真是令人印象深刻啊。(小窍门:用希腊字母表示变量名会令人印象更深刻。)因此,你就受到巨大的诱惑,去解决那些能够用数学公式处理的问题,而不是去解决真正重要的问题。如果黑客认识到自己与其他创作者——比如作家和画家——是一类人,这种诱惑对他就不起作用。作家和画家没有“对数学家的妒忌”,他们认为自己在从事与数学完全不相关的事情。我认为,黑客也是如此。

                          把不同类型的工作捆绑在一起,可能是为了行政管理的方便,但是却容易引起混淆。这是我不喜欢“计算机科学”这个词的又一个原因。中间部分“计算机科学家”的工作,也许还可以被称为计算机的实验科学。但是,两端的数学家和黑客,并不是在做计算机的科学研究。

                          数学家看来并不在乎自己搞的是计算机还是数学。他们很高兴来到这个新地方,然后就开始埋头证明新的定理,与数学系的数学家干的事情完全一样。不一会儿,他们可能就忘了办公楼外的牌子上写的是“计算机科学系”。但是对于黑客,“计算机科学”这个标签是一个麻烦。如果黑客的工作被称为科学,这会让他们感到自己应该做得像搞科学一样。所以,大学和实验室里的黑客,就不去做那些真正想做的事情(设计优美的软件),而是觉得自己应该写一些研究性的论文。

                          要是黑客写论文,最好的情况下,写出来的也只是一些补充性的描述,不会具有太大的实际价值。黑客先开发了一个很酷的软件,然后就写一篇论文,介绍这个软件。论文变成了软件成果的展示。这种结合是错误的,常常会产生问题。为了配合论文研究性的主题,你很容易就把工作重点从开发优美的软件转移为开发一些丑陋的东西。

                          优美的软件并不总是论文的合适题材。首先,科学研究必须具有原创性。写过博士论文的人都知道,确保自己正在开垦新领地的方法,就是去找那些没有人要的土地。其次,科学研究必须是能够产生大量成果的,而那些不成熟的、障碍重重的领域最容易写出许多篇论文,因为你可以写那些为了完成工作、你不得不克服的障碍。没有什么比一个错误的前提更容易产生大量待解决的问题了。人工智能(AI)领域的大部分情况,都符合这条“如何凭空创造出问题”的规律。如果你假定,使用一系列的谓词逻辑(predicate logic)表达式,再加上代表抽象概念的参数,就能表达人类的知识,那么,你就可以写出许许多多的论文,解释如何完成这项工作。这就像电视剧《我爱露西》(I Love Lucy)的男主角Ricky Ricardo的话:“露西,这下够你好好解释的了。

                        文字来源于《黑客与画家》https://www.douban.com/note/453902232/

                        通宝推:用心荐华,敲门,桥上,
                        作者 对本帖的 补充(1)
                        家园 Linus Torvalds举出的好代码和坏代码的例子 -- 补充帖

                        https://github.com/mkirchner/linked-list-good-taste

                        第一版

                        void remove_cs101(IntList *l, IntListItem *target)

                        {

                        IntListItem *cur = l->head, *prev = NULL;

                        while (cur != target) {

                        prev = cur;

                        cur = cur->next;

                        }

                        if (prev) {

                        prev->next = cur->next;

                        } else {

                        l->head = cur->next;

                        }

                        }

                        第二版

                        void remove_elegant(IntList *l, IntListItem *target)

                        {

                        IntListItem **p = &l->head;

                        while ((*p) != target) {

                        p = &(*p)->next;

                        }

                        *p = target->next;

                        }

                        第一版中,删除第一个元素是一个特例,需要用if单独处理,但是第二版中通过使用指针消除了这个特例,变得更加一般化了。这种好代码不是光学好数学就能想出来的,因为做数学题并不需要使用指针(︶︹︺)

                        • 家园 我正好有亲戚是学数学后来去写代码了,

                          按他们的说法,由于搞数学的头脑清楚,逻辑清楚,写代码有很大优势。

                          因此,看来在学数学的人圈子里,他们有很多人都认为写代码对于他们是一个相对容易的转行。

                          回到那最后一句话,如果数学家的的定义使得那个圈子正好套中上述圈子,而象样的代码的定义又不是太苛刻,则99显然很难成立,所以我说要定义。

                          何况一般来说,精确到两位数接近三位数这样的断言,没有精确定义恐怕不那么容易斩钉截铁吧。

                          通宝推:杨微粒,
                          • 家园 王珢是好为大言,

                            王珢是好为大言,不过他说的可能有一定的道理——数学家不经过学习和训练也很难写出好代码。

                            由于抽象的发展,现代计算机语言往往屏蔽了很多底层细节,导致很多以前没法毕业的人现在也能学个JAVA语言做个码农了(按照Joel的说法,以前指针之类的东西能劝退40%到70%的大一新生…… https://www.ruanyifeng.com/blog/2008/12/the_perils_of_javaschools.html),但是不了解底层细节恐怕是很难写出王珢认为是「好」的代码吧。

                        • 家园 Java语言学校的危险性

                          有些孩子读高中的时候,就能用BASIC语言在Apple II型个人电脑上,写出漂亮的乒乓球游戏。等他们进了大学,都会去选修计算机科学101课程,那门课讲的就是数据结构。当他们接触到指针那些玩意以后,就一下子完全傻眼了,后面的事情你都可以想像,他们就去改学政治学,因为看上去法学院是一个更好的出路[1]。关于计算机系的淘汰率,我见过各式各样的数字,通常在40%到70%之间。校方一般会觉得,学生拿不到学位很可惜,我则视其为必要的筛选,淘汰那些没有兴趣编程或者没有能力编程的人。

                          对于许多计算机系的青年学生来说,另一门有难度的课程是有关函数式编程(functional programming)的课程,其中就包括递归程序设计(recursive programming)。MIT将这些课程的标准提得很高,还专门设立了一门必修课(课程代号6.001[2]),它的教材(Structure and Interpretation of Computer Programs,作者为Harold Abelson和Gerald Jay Sussman Abelson,MIT出版社1996年版)被几十所、甚至几百所著名高校的计算系机采用,充当事实上的计算机科学导论课程。(你能在网上找到这本教材的旧版本,应该读一下。)

                          https://www.ruanyifeng.com/blog/2008/12/the_perils_of_javaschools.html

                      • 见前补充 4590935
                      • 家园 解存在但不可求的例子

                        回下面一位河友的话。这位河友贴还在待审,所以不能直接回,抱歉。

                        另外,我数学半路出家,荒废很久,有不妥之处各河友请纠正。

                        一个解存在但不可求的例子是不稳定系统。

                        数学上,不稳定系统指初始情况差一丝一毫引起系统演化相差无比巨大的系统。

                        比如,一个简单的不稳定系统是一支削尖的倒竖的铅笔。我们都知道这铅笔要倒。但是怎么倒,往左往右倒下时候转几圈,就没办法说了。

                        这个问题有解。我们把笔竖一次看它倒,倒下的轨迹就是一个解。

                        但是笔在倒以前,我们没有办法解方程得到一个关于笔倒下轨迹有意义的预测。

                        这是解存在但不可求的一个例子。

                        还有其他例子,不一一列举。

                        通宝推:高三三班,桥上,
                        • 家园 又借宝贴研究研究

                          本人外行,工程上的不稳定问题也没认识,权当无知脑洞,顺便给还在上中小学的小河友们科普科普=不负责任。

                          先请教一下,你说的“解存在但不可求”,意思是理论上证明了找不到,还是理论上能找到,应用上能力不足,因此找不到? 下面两方面都来脑洞脑洞。

                          例如铅笔这个例子,虽然极不稳定,但如果能获得足够精确的数据,连地球怎样抖动,电场磁场力场气场等等因素都精确掌握,就能获得铅笔的状态,至少能掌握一个分布规律,理论逻辑上是可行的。

                          又例如线性方程组,即使是极不稳定的系统,但理论上可以找到准确解,也知道怎么找,只是目前电脑能力不够,解出来的结果没有可信度,哪天电脑能力提高了,就能获得较可靠的解。当然,问题总是无限,电脑能力总是有限,比如哪天电脑终于有能力找出围棋的全解,但棋盘加大一倍,电脑又投降了。插一句,线性方程组如果搞得好,可能夸张可能不夸张地说,一半的工程问题和实用科研将受大惠。另外,越不稳定的线性系统实际应用上作用往往更大,稳定的系统反而没啥用,单位矩阵很酷但最没用,冥冥中矛盾才是皇冠上的明珠,所以学习毛主席语录不能停。

                          总之,理论上能解决,实际上解决不了的问题很常见。

                          那么,有没有这种情况,解在理论上存在,同时理论上也证明解不了,即使人脑和电脑足够强大,也不可能找到解,与问题是否稳定无关。x=cos(x)或者5次以上多项式这类问题不算,这类问题虽然没有解析解,但数值解有清晰方法,误差分析和运算成本等也被充分掌握,这类问题可以放一边。真正糟糕的,连一个较理想的数值解的方法都没有,这类问题有没有呢,我猜是有的,而且如宝贴主所言,不但有而且很广泛,例如很多传统物理方面的偏微分方程组,基本被判了“死刑”,至有无数大牛小虾年复一年在失望中耕耘(很伟大)。

                          自然界很多客观现象,可以用物理概念和原理描述,基础如物质守衡,能量守衡,在力场中势能由位置决定,位置的导数是速度,速度决定动能,位置的二阶导数是加速度,加速度将质量和作用力联系起来,作用力沿路径积分是做功。。。插一句,可见中小学知识很重要,中小学学历也是很光荣地说。例如弹簧的振动,振子的位置的一阶导数是速度,二阶导数是加速度,而振子所受弹簧的作用力与振子位置有一个线性关系,这样一来,位置与位置的二阶导数就由一个微分方程联系起来了,这回运气好,这个微分方程的解是周期三角函数,从此以后人们有了一个简单的弹簧的振动公式。

                          可惜造物弄人,我们运气不好的时候总是居多,比如弹簧的例子里,如果振子所受的作用力与振子位置不是线性关系,而是一个很变态的函数关系,那就得费点脑汁(所以脑子经常加加水是必要的),例如,油漆被泼到墙上的运动状态,高速公路上车流运动的状态,描述起来都比较过分。

                          气象科学是可以用来脑洞的正经例子,涉及很多变量,各为自变量,也互为因变量,被一串物理原理通过微分和积分联系起来,成了一组数学方程,它们的解不再是看得见摸得着的简单的三角函数了,科学家们怎么办呢,只能解个大概,尽量尽量找找这些看不见摸不着的函数与已有知识的联系,它们属于什么函数空间,有什么通性和特性,连续性,可微性,极值点,奇点,增值区间等等,用这些理论结果指导应用,在一定范围和条件下将问题简化,某个地方简化为常量或线性,甚至干脆省略掉,分析分析误差范围,搞搞数据模拟,上下左右来回做些调整,十足把握是没有的,唯一肯定的是这些看不见摸不着的函数(即问题的解)一定存在,因为研究对象是自然现象,所以正确的解肯定存在,也因此研究上往往结合大量的实验和数据收集,当然这些手段也不是万能,要么做不到,要么可信度没把握,或受时间的限制,或受成本的限制,比如气象研究方向主要是将来,今天做的实验,即使被明天准确地验证,后天不一定管用,又比如有些实验需要炸掉一栋大楼,太废钱。说到钱又插一句,某国际年会上,一个来自欧洲的后辈参会者向大会主席发问,“我们用猩猩做实验这个那个,我的问题是。。。” 大会主席一直用小白鼠做实验,被打脸有点恼羞成怒,“当年老子站这里你还在吸奶,给老子闭嘴坐下”,对方乖乖坐下。这专业行霸大会主席是台山人后裔,他家的姓是中文按台山话发音拼写,不容易人肉出来。

                          简单来说,个人认为人类已有的或实用的知识和手段处于很low的状态,往小的说例如数学上稍为实用的函数太少,多项式,指数,对数,三角函数,组合出花来,也还是太微少,远不足以描述大千世界茫茫宇宙,往大里说,人类的智慧体系存在不可修复的重大漏洞,哥德尔不完备定理翻译成人类语言就是,人类的逻辑体系有天然缺陷,由此建立的知识系统,人类可以乐在其中,但不可能突破,人与自然之间有一道不可跨越的鸿沟,更况且发展走上了一条歪路,只用理工科研究大自然,殊不知文科和艺术智慧才是更高级的智慧,例如瞎编一个例子“某函数的一阶,二阶和三阶导数相加,等于该函数的倒数的立方根”,(在很多初始条件下)貌似解不了,其实这个问题的定义本身就是问题的解,这样定义出来的函数,对人类惯性的实用思维来说不是很友好,但在数学本身没有毛病,而在艺术上更是美轮美奂,与其局限在传统数学上苦苦挣扎,不如在艺术上下下工夫,找找灵感,或者能带来意想不到的收获。人在失败中往往要找借口和稻草,例如本河桥上老师的文字研究,本人感觉就很像强大的稻草,那大概属于博士以上的内容。如果某人数学和物理和计算机方面大概有个硕士水平,但很多人已经亲证没啥球用,所以脑洞不能停。如果同时在桥上老师的文字研究方面有个本科水平,最好在音乐和绘画方面也有点心得,兴许就能在智能围棋上有重大突破。那当然也是不可能的,因为个人的精力很有限,这样的方向需要人类共同努力积累和传承。所以本人下一步打算,如果疫情近期内不结束,学学打毛衣和打算盘,从小就觉得这两个项目很美妙。

                          通宝推:桥上,宝特勤,
                          • 家园 谢高三河友发起精彩讨论

                            我重申我是数学半路出家又半路离队,工程半路离队又半路回家,大家对我的话听听就行,多批评指正我更感激。

                            而且为稻粮谋多年,我的创造性和敏感性早就消磨殆尽。所以思路有限。

                            还是以不稳定系统为例。

                            我们讨论不稳定系统,先要讲好是在工程范畴内讨论,还是在数学范畴内讨论。

                            在工程范畴内讨论的话。准确预测一支铅笔的倒下,因为铅笔的不稳定性我们需要知道铅笔周围每个空气分子的热运动,铅笔下方地下水和矿物质的分布(影响重力系数的空间分布。不开玩笑,我工作中真还调查过地下水矿物质分布),附近每条公路上每辆行驶的车辆型号载重速度发动机特性(搞精密仪器的同学知道我在说什么),板块运动,N光年之外超新星爆炸传来的引力波等等等等。但是,工程最基本的考虑是成本。工程师不会为了预测一支铅笔的倒下,或者预测大多数可以想见的事情,花费财力和精力搞一个涵盖天文地理气象交警通用汽车特斯拉吉利塔塔顶尖专家设备的团队。会接受铅笔倒下不可预测这个事实。

                            如果从数学范畴讨论。不稳定系统就是任意小的初始偏离会造成任意大的差距(这个说法有其巨大漏洞,河友轻拍)。数学上的任意小指你说一个小的,我可以说出一个更小的。人类对世界了解哲学上不是无限的。不可能确定任意小的东西。

                            抛砖引玉。博大家一笑。

                            通宝推:高三三班,桥上,
                            • 家园 宝河友客气又谦虚,我是受你启发来夹带一下:)

                              明白了,没有冲突,都是围绕矛盾与折衷,或说优化,这是很多理工科领域的共同概念,这个概念听上去就很艺术,但艺术家似乎不讲折衷,他们永远追求完美,所以科学必须走与艺术相结合的道路。。。又夹带了。

                              通宝推:宝特勤,
                        • 家园 果然是数学家的思维方式阿

                          但是请教,像铅笔这个例子,为什么数学家认为不可求,或者只是在一定条件下不可求?

                          因为好比马斯克那个火箭回收,难道不正是一个典型的不稳定系统吗?

                          当然,从这个角度来说,虽然他那个技术是酷炫的,但也是风险巨大的吧。从工程上来说,难道不是一个在基本原理上就不合理的路线吗?

分页树展主题 · 全看首页 上页
/ 10
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河