本节书摘来自异步社区《C语言点滴》一书中的第1章,第1.5节,作者 赵岩,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.5 内功修炼

C语言点滴

1.5.1 数学

作为一个门外汉,我真的不敢在这里谈论数学的话题。直到我在网上看到南京大学数学系张高飞老师的一篇文章,我决定将全文转述在下面,下面分割线之间的就是张高飞老师那篇文章了。文章不长,但是让我这个悲情人物找到了自信,数学里面是有属于我的一个分支的,那就是计算数学!

正如大家所知,代数几何是现代数学的主流。当代大多数一流的数学家都工作在这一领域。因此如果你觉得自己天赋异禀,并在代数、几何与分析各方面都有着扎实的基础,我建议你绝不要浪费自己的天赋:应义无反顾地选择代数几何这一专业。当然把代数、几何与分析这三门基础功课同时学好的人很少。比如有些同学有着很好的分析功底,但代数中的抽象思维能力却相对显得薄弱。如果是这样的话,我建议你选择分析方面的专业,比如:复分析,分形,调和分析或微分方程。

除以上三部分同学之外,还有这样的一部分同学:他们对代数,分析与几何都不擅长,但却一直坚信自己在数学上仍能有所作为,并幻想有朝一日成为中国数学界的中流砥柱。如果你属于这部分同学中的一位的话,我建议你选择动力系统。动力系统这一学科其实就是专门为这部分同学开设的。

当然即使是动力系统也不是人人都能学的。因为动力系统需要大量的微积分。可总有那么一部分同学还没来得及把极限的概念搞清楚就大学毕业了(本文作者中枪)。如果你不巧就是这样一位同学,也就是说你大学四年压根儿就没学数学,但仍希望自己将来能在数学上一展宏图的话,我建议你选择组合数学这一专业。这一专业的特点就是它只用到中学的数学。如果你在中学时参加过数学竞赛并获过奖项的话,这一学科正是你大展身手的地方。

我想大多数同学看到这儿之前已经找到了适合自己的专业了。可若仍有人羞怯地说他在中学时早恋,因此连中学的数学也没学好,我想告诉这部分同学不要怕。在我们系有专门为你们开设的一个专业:统计学。这一学科只要求懂得小学数学中的加减乘除四则运算就够了。更重要的是,选择这一专业的大多都是女同学。在你准确无误地把成千上万个数据加起来并娴熟地计算出他们的均值时,你也赢得了众多师姐师妹的芳心:短短三年的研究生生活或许能让你再次体会一次那如花美眷,似水流年的往事……

最后这一条是专门针对那些悲情人物的。他们连小学的数学也没学好。不要说把上千个数加起来,就是把两个数加起来,对他们来说都是件很吃力的事。然而这一切丝毫没有削弱他们对数学的一片痴情。他们日日夜夜泡在图书馆里。他们翻阅了所有的数学文献,却从未找到一本能读懂的。但他们仍坚持不懈,为的就是找到一个适合自己的专业。他们的行为感动了上帝。上世纪的某一天,上帝为他们创造了一台机器帮他们计算,这就是计算机。借助计算机,他们可以很快地进行加减乘除的运算。这就是计算数学。

张老师的文章转述完毕,看来张老师也同意这样一种观点:数学学不好的学统计,统计学不好的才学计算机,这句话多少有点道理。确实,很多的计算机研究领域并不需要高深的、抽象的数学知识。但是大家千万不要以为学计算机就可以轻视或忽略数学。关于计算机和数学的关系,我只想说两点。第一点,数学很有用。数学对我们理解和使用数据结构和算法有很大的帮助。数学中,不仅数值分析、集合论、概率统计与分析这些课程可以直接应用到计算机相关应用中,同时,坚实的数学基础会给日后从事研究性质的工作带来巨大的帮助。如果你的数学学得非常好,你不仅拥有数学的知识,更重要的是拥有数学的思维,而数学的思维对从事计算机职业来说至关重要。

第二点,如果从应用的角度来理解数学,数学很简单。我们来举个例子。由一个最简单的问题谈起,我们要铺正多边形地砖,能够使得拼接处没有缝隙,正几边形能够满足这个要求?这个问题可以化解成另外一个问题,正多边形的一个内角的整数倍等于360度。我们继续推导这个问题,正n 边形总可以分割成n -2的三角形,所以正n边形内角和等于 (n-2)times {{180}^{circ }}。

这样,正n边形的每个内角就是


假设正n边形恰好需要m个围绕在一起而没有空隙,那么就可以得到


经过简单地推导,最后可以得到(m−2)(n−2)=4,其中m和n必须为正整数,经过简单的口算,你就可以得到n只能是3,4,6。与之对应的是三角形,正方形,和正六边形。正八边形好像是满足要求,但是如果你尝试铺一下,就会发现这是不行的。也就是说,能够无缝隙的平铺一块地方的正多边形中,最大的就是正六边形。通常情况下,边数越多,周长相等的情况下所占面积就越大。所以……所以你想到了什么没有?蜂巢!没错,就是蜂巢。聪明的蜜蜂早就知道了这一原理,把自己的巢建成正六边形,如图1-14所示;另外,我们的手机采用的都是蜂窝网,这回你知道为什么了吧!怎么样,数学真的不难,而且非常有用吧。

既然正六边形有如此优良的特性,为什么我们超市里面装牛奶的盒子都是正方形,而不是正六边形的呢?这是因为牛奶一般都是放到货架上,正方形可以保证你能很方便地抽取出来啊!那为什么不设计成圆形呢?因为牛奶必须需要放到冰柜里,正方形可以保证最大限度地利用冰柜的空间啊!那为什么可乐瓶子都是圆的啊?因为一般可乐都是用手拿着喝的啊!那为什么……。好了,为了系统回答你的所有问题,我需要引入一门新的课程,这门课程叫做《软件工程》。他包含了商业、沟通、管理、市场、开发等方方面面。一个软件产品,技术很重要,但不是全部。这一点,苹果的乔布斯应该深有体会,下面我就叨咕叨咕软件工程这个东西。


图1-14 蜂巢

1.5.2 软件工程

对于软件工程,有一句表扬它的话,那就是:“懂得软件工程的程序员就不再是妓女了!”这句话来源于程序员圈内用于自嘲的一个类比,那就是程序员和妓女都是吃青春饭的。不过说句实话,我对表扬软件工程的这句话理解的并不是很透彻。

话说回来,软件工程这东西,真的很重要。如果有一个产业,大家都很努力工作,但是结果却会很差,那就是软件这个行业了。开发一个软件包含很多步骤,从需求设计与分析、系统设计,到软件实现、软件测试、部署和维护,其中每一个步骤又涉及到很多人,从用户到销售,从经理到程序员,从架构师到测试人员等。一个常见的情况就是程序员不了解用户,用户也不了解程序员;大部分时候,用户也不了解自己。这就造成了如图1-15所示的一个项目悲催的一生。


图1-15 一个软件项目悲催的一生

说到软件工程,不能不提到CMM(软件能力成熟度模型),这个是软件工程和软件管理的一个比较主流的模型。我曾经听过一个故事,国内的一个企业曾经派一些资深的员工去印度一家公司学习CMM模型。学习一年回国以后,中国员工并没有学会CMM,但是印度那家公司从此却不用CMM,改用中国模式了!后来这个公司改变了战略,第二次派了一批刚从学校毕业的学生去学习,终于取得真经,修成正果。从这个故事中,大家得到了什么结论呢?

还有一个真实的案例那就是微软公司,它开发软件的时候不用CMM进行管理,而是使用开发、测试、项目经理三个团队互相配合的方式来进行管理。

看来CMM这个东西也并不是传说中的那么神。就像炒菜一样,只要好吃就行,没必要偏得按照菜谱来。关于软件工程,我基本上不懂,所以也只给大家介绍这么多了。

我个人的一个感觉就是,软件工程这个东西很赚钱,而且无论是从课本上,还是从课堂上,你都学不来。

《C语言点滴》一1.5 内功修炼相关推荐

  1. 专访刘伟:软件开发人员的内功修炼之道

    摘要:数学修养对软件开发之路起着什么作用?码农如何修炼自己的内功并成长为优秀的软件开发员?带着相关思考,社区之星第10期采访了中南大学副教授--刘伟.他对数学修养.设计模式.软件架构和重构方面的独特见 ...

  2. 程序员的内功修炼——值得看的9本书

    前言 作为程序员,其能力可分为两种: 技术能力,对语言的理解,对所在技术栈中技术的理解,这类能力可称为外功. 思维的修炼,工作效率提升, 对代码的理解,对架构的理解,此类能力可成为内功. 内功和语言平 ...

  3. 软件开发人员的内功修炼之道

    摘要:数学修养对软件开发之路起着什么作用?码农如何修炼自己的内功并成长为优秀的软件开发员?带着相关思考,社区之星第10期采访了中南大学副教授--刘伟.他对数学修养.设计模式.软件架构和重构方面的独特见 ...

  4. 设计模式的艺术——软件开发人员内功修炼之道 重磅来袭

    今天(2012年12月17日),拿到了清华大学出版社给我寄的<设计模式的艺术--软件开发人员内功修炼之道>样书,这本近400页的书凝聚了过去多年我对设计模式的实战经验和教学精华,感谢清华大 ...

  5. 视频教程-内功修炼之数据结构与算法-Java

    内功修炼之数据结构与算法 2018年以超过十倍的年业绩增长速度,从中高端IT技术在线教育行业中脱颖而出,成为在线教育领域一匹令人瞩目的黑马.咕泡学院以教学培养.职业规划为核心,旨在帮助学员提升技术技能 ...

  6. 开发内功修炼网络篇电子书出炉!!!

    点击上方蓝字"开发内功修炼",关注并设为星标 了解你的每一比特,用好你的每一纳秒 飞哥的开发内功修炼技术号更新文章有一年多了,以前的文章都是单独介绍一个技术点,没给大家一个整体的视 ...

  7. 嵌入式软件内功修炼心法

    这里写自定义目录标题 1.对嵌入式软件的认知 所谓嵌入式软件开发,抽象的讲,就是在专用的硬件平台借助宿主机交叉编译环境通过编程.编译.链接下载.调试达到目标需求:往细了分,嵌入式软件开发可分为嵌入式驱 ...

  8. 开发内功修炼内存篇汇总

    最近终于抽空把内存篇更新完了,我分享出来的这些问题,其实都是我之前没有搞的特别明白的困惑.刚刚开始的时候,可能就是在我脑子里蹦出的一个疑问,比如内存随机IO会比顺序IO慢吗? 为了解开这个疑惑,我曾经 ...

  9. 一份很良心的JAVA内功修炼手册No.31

    总有小伙伴说,啊机器学习什么鬼,一个字都看不懂,我要java的. 好嘛好嘛,我写嘛,给你们整个内功修炼手册好了. 总有人说我学习太泛,又不精.too young , too naive. 今天整理一下 ...

最新文章

  1. html表单和输入方法,HTML 表单和输入
  2. python 之CORS,VUE+rest_framework示例
  3. 为什么有些人用一年时间获得了你十年的工作经验?
  4. [实战演练]腾讯2013年校招软件开发类笔试题目(选择题部分)
  5. James Shore:敏捷的衰落
  6. 知乎超万赞回答:中国有哪些「无心插柳柳成荫」的事情?
  7. os和shutil模块
  8. php怎么取json数组元素个数,json,数组_取出json数据中的某一项组成一个数组?,json,数组,php - phpStudy...
  9. IPv6網絡開發范例
  10. logogogo最新变种XP.exe的分析(Win32.Logogo)
  11. 【数据结构】AOE网——关键路径
  12. ubuntu 19查看和修改时区
  13. 一文详解BQSR-碱基质量矫正原理和实战
  14. 二战计算机技术,重庆大学超强二战跨考计算机技术专业经验,学习方法
  15. 常见的软件系统集成方式和Smartbi集成解决方案
  16. 在线检测计算机硬件信息,JS获取客户端计算机硬件信息与系统信息大全
  17. 计算机原理实验红绿灯转换,微机原理实验交通灯控制实验.doc
  18. JavaScript-歌词展示与音乐同步
  19. 一条update语句更新多条sql记录
  20. 【我们是冠军】2021年大数据领域第一名の博客之星活动复盘

热门文章

  1. GDCM:获取图像像素间距的测试程序
  2. GDCM:gdcm::Filename的测试程序
  3. boost::container实现前向迭代的测试程序
  4. boost的chrono模块运行时解析的测试程序
  5. Boost:双图bimap与range范围的测试程序
  6. ITK:就地过滤图像
  7. ITK:创建矢量图像
  8. OpenCV使用MultiTracker
  9. OpenGL PN三角形的分化
  10. C++ :: 范围解析运算符