1. 聚能聊>
  2. 话题详情

论编程的重要性与普遍性

前几天地铁上一个老太太手捧Java的图片红遍网络,让大家感慨“编程不分年龄,不分男女”。一时间掀起了一股全民学习编程的热潮。
192400032b1ad9ea4e6b_jpeg

编程的重要性

前几天在网上看到一个新闻:日本80多岁的若宫雅子利用麻省理工学院开发的Scratch开发了一款iOS游戏---雏坛。2014年她还被邀请到TED上,给全世界的观众演讲。演讲的内容很简单——活到老学到老,我要鼓励全世界向我这样的人,跟我一样趁着“年老”一起干吧!

2014年,欧洲多个国家就将编程纳入了义务教育课程,其中英国把图形化编程列入5岁以上小朋友的必修课。而在美国,美国监狱的犯人们掀起了一股学习编程的热潮。

学会编程的好处。

学习编程有很多好处,除了如可以创建网站和web应用外,在你找工作的过程中,即使你找的不是天天写码的工作,拥有编程技能也可能会让你脱颖而出。学习编程有很多好处,可以扩展你的思维,开拓你的视野,说不定还能成为一个段子手...
学习编程有很多好处。如果你是产品经理,那么知道编程可以让你更好地和技术人员交流沟通,知道什么是可以实现的,什么是不可以实现的;如果你是UI,那么理解编程可以让你设计出更加符合开发者开发的效果图,而且也会提高开发者的开发效率;如果你是VP,那么理解编程也会让你更加具有威严,更加具有说服力。

2017编程语言排行

对于之前网上讨论:php是不是世界上最好的语言。我的回答是受程序猿欢迎的才是最好的。各位看官请看下面的一张编程排行榜(啪啪啪,打了一个php的脸啊)。
20170109101127542

那么问题来了,2017年,如果你是程序猿,你从事的什么是哪方面的工作?前端、后台、大数据...用的什么语言?Java、PHP、python...
如果你还没开始编程,你会考虑编程吗,会选择什么语言...

参与话题

奖品区域 活动规则 活动已结束,可继续参与讨论哦

  • 奖品一

    定制笔记本 x 3

  • 奖品二

    新版淘公仔 x 5

  • 奖品三

    技术书籍 x 2

148个回答

2

wangqi94 已获得技术书籍

互联网的发展应是根据当前经济发展需求而推进,2011年移动智能的悄然崛起,2014年实现大爆发,或许这就是时机成熟了,无关乎使用的是什么语言,但是,这却又是息息相关的,比如android使用的是java开发,那会java的程序员入门android肯定会轻松一些,再加上时间上推移和技术上的成熟性,android也并不一定只用java来开发了,php、js、kotlin等等,层出不穷。开发又得适应公司的版本迭代和开发速度问题,所以,混合开发又出现,占据主流,ionic、weex、react native、mui等等。如今,已经到了2017年,或许移动端已经趋于稳定性,各公司为了未来的发展,转型做AI,两会也支持未来AI的发展,所以,这又是一个语言的推动性,google的tensorflow或许会异军突起,开发者纷纷加入未来的战列。与其说当前最热门的语言是什么,还不如说当下经济发展需求是什么,这样,获取会更贴切一些

林峰v5 回复

老司机开车

情到--深处 回复

V587

此名已有 回复

那哪种好呢

brucechen 回复

老司机带路

评论
2

bluemind 已获得新版淘公仔

在现如今的社会,无论是自黑还是嘲讽也好,反正是对程序员的反面言论是越来越多,在贴吧论坛随处可见的黑程序员的小段子也是数不胜数。其实真正的程序员一般都是把那些小段子当成是笑话看,毕竟他们不了解程序员,但是对于许多不知情人士还有那些所谓的“专家”眼里可就不同了,可以说程序员在社会人眼里的地位是每况愈下啊,在这种情况下,作为一个资深的程序员的我就必须有义务在这里普及一下程序员的重要性了。

首先说明一下,可以说每位学过编程语言的都能说自己是一位程序员,但是他不能说是一位严格意义上的合格的程序员。

一个合格的程序员不是看你会的编程语言的多少,而是看你的思想,看你的能力。在这里先说说一个程序员所应该具备的思想:尽可能的完美主义者。没错,就是他。说到这里可能有一些人会不明白是什么意思,为什么说是一个尽可能的完美主义者呢,因为有一个不争的事实那就是几乎所有的代码都会有bug,没错,即使是一个hello world也有可能一位你没有考虑环境的情况下而出现错误,如果一个程序员是一个完美主义者的话那他就会陷入死循环中,永不停息的检查自己代码里面的bug,这样就会大幅度的降低程序员的效率。还有就死一个尽可能的完美主义者他会在编程的时候尽可能的想到尽可能多的可能性:最典型的就是如果一个人在自己的性别栏里面写入了除男女以外别的信息怎么办,可能在别人眼里这根本就是不可能的事情,但是其实在现实社会里面他可能就真实存在,所以现在填写男女信息的栏都变成了二选一 的单选栏,可能还有一些别的性别,所以现在为了保护个人的隐私,有一些男女信息栏已经变成了不止二选一,可能三选一或者别的,程序员考虑到有一些人可能不喜欢将自己的信息告诉给别人,所以又有了隐私这一个权限控制。可能在别人眼里这些不应该是程序员所应该想的事情,如果你这样想的话,那你就不是一个合格的程序员。 还有就是一个程序员所应该具备的能力,临时的学习能力和高强度的作业能力。比如让一个Java程序员一周之内精通c#,这可能有点不现实,但是如果让他做一个C#的项目的话可能就需要给他多几天的时间就够啦,几天的时间他不可能学会所有,但是一个合格的程序员能把所需要的东西弄出来。还有就是高强度的作业能力,在所有的职业中,不说一定,但是程序员应该是唯一的几个能保持高强度作业还不拉低效率的职业吧(其实我也不知道还有没有别的职业,但是为了严禁起见我只能这样说吧)。

说了那么多就是为了说明白一点,如果你没有具备以上的能力的话你应该还不是一个合格的程序员,所以请不要黑程序员,因为你没有资格。

其实当今社会如果多一些想程序员这样的人的话,社会可能就要比现在好的多。比如,如果让程序员定制法律的话就不会有女强奸男而没有罪的这种非常明显的法律漏洞了,因为程序员一开始一定能够想到这种情况,并且给出处理机制(catch throw)。

再就说当今最热的炒股,现在已经到了一种疯狂的阶段了(80岁的老太太都卖了房子去炒股),可见一斑啊,其实说白了炒股和赌博基本上是一样的,差的地方就是炒股是合法的,赌博是非法的而已,其实当下炒股的人比赌博的人还要疯狂,赌博的最少你还要知道赌博的规矩才回去赌博,但是炒股的那些人……真的是让我无话可说,其实炒股和赌博一样,十赌九输,但是只有赢的人才会炫耀,这就让那些**低的人以为炒股就能赚钱,我也真的是醉了,趋之若鹜一词形容那些盲目的人真的是一点都不过分。

好了,其实说实话程序员所具备的能力应该是在这个社会上很吃得开的,还有很多方面今天就不一一列举的,如果你现在你已经是一个合格的程序员了,不要失落,努力去发现自己,“这个世界不缺少美只是缺少发现美的眼睛”这句话与“好好学习天天向上”这句话永远都使用,他们是各个时代的经典。

1

小卷卷毛 已获得定制笔记本

以前的技术日渐趋于稳定,各个公司对人才的需求的质量也开始向上提升,若自己没有想办法提升自己必然会被需求洗牌,高端人才供不应求,低端人才已经开始溢出,更好的提升自己的硬实力才是不被干掉的关键,一本好书足以让你脱颖而出

曙光1982 回复

说得好

评论
1

willamwang 已获得新版淘公仔

编程语言是层出不穷的,当然在主流语言横行的时代,一些有潜力的新兴语言走向人们视野。我是学大数据的,大数据可谓火爆,但它却很年轻,从Google发表三大论文,到Apache原生态hadoop的发表,才不过几年时间,而如今被阿里,百度,腾讯放大,并且引领了一种新的计算机技术的潮流,并且阿里的电商模块,更是有改变国人的生活方式,这是由技术到革命的转变啊。Hadoop基于java开发的,所以我还是喜欢java,但hadoop家族确实极其庞大,而且其家族成员中像hive,zk还有自己独特的语言,但你也得会啊,所以还是编程思想重要,语言是工具,没有坏的,只有被趁手的人拿在手里,才会发挥语言最大的魅力。

1

bearyes 已获得定制笔记本

一点建议,喜欢底层就学C,汇编。买块单片机开发版,买几本电路设计的书,买些元器件,电烙铁,示波器,就可以做些小玩意儿了。(注意安全)

高级一点的学函数式编程,比如scheme,haskell。学好了之后就可以混进函数式爱好者的高端圈子。

实用一点学js,py。做网站,写爬虫足够了。

实在想不通的去学C++吧

1

林峰v5 已获得技术书籍

互联网发展的趋势,只有基于硬件交互的程序才能更有吸引力,c c++ 感觉会是非常重要的。能替代c语言的语言几乎是不存在的。简单来说,C语言是计算机程序语言的基础,是实用的程序设计工具,学好C语言对你今后学习JAVA、C++、VB等可以打下良好的基础,因为这些语言大部分都是由C语言扩充或衍生而来的。C可以用于开发比较底层的东西,比如驱动、通信协议之类,在Unix和Linux环境中也是不可或缺的,另外在嵌入式领域也大有作为。站在本专业的角度看,虽然信息管理对程序设计的要求不如计算机专业那么高,但如果你不懂得C,基本上就很难理解程序设计的思想,因为想真正学会程序设计就不可能不跟数据结构打交道,而初学者如果直接从VB或Java入手,基本上很难理解如何构造数组、链表、树、图等结构,这些东西很容易和封装、继承等概念打架。而用C语言则可以清楚明白地把它们表示出来。也只有真正理解了数据结构,才有机会体验程序设计的思想和算法的精髓。

0

keller.zhou 已获得新版淘公仔

在这里发表一下个人观点,仅供参考: 1.每一种程序都有其发展的历程,没有任何一种程序是万能的,比如说我们都知道的C语言,开发C的初衷就是为了让程序员能脱离那种原始的汇编的环境,可以在高级语言环境中对内存地址进行控制,所以C语言在底层操作上来讲要优越于其他高级语言;比如Pasical语言的初衷就是为了程序设计中的教学使用,所以Pasical语言的语法结构很严谨;比如Fortran语言,开发的初衷就是为了工程计算,所以他的数学逻辑工程逻辑功能模块就相当强大,等等………… 2.现在的语言已经发展到面向对象的高级语言,像我们现在所熟知的Java、.Net、Delphi 等语言,他们开发应用软件来说基本没有太大的区别,因为他们的库都已经很丰富,我们开发起来也相对较简单一些,他们的差距也就紧紧在于市场占有率和所在公司开发选择问题上了。还有另外一个就是一些数据库编程的语言比如SQL、PB等语言,他们的数据库功能相当强大,由于微软产品的市场占有,所以大家比较倾向于SQL语言,因为他的应用面要广一些,但是不乏有些朋友会基于一些其他的想法选择其他类型的数据库编程语言。解释类语言,作为B/S开发模式的语言,也是根据其市场占有规模来分,一般来讲市场占有率越高的语言程序,那么它的库要丰富一些,我们操作起来要相对容易些。所以说,现在流行的应用软件开发的语言来讲,我们一般考虑的是市场占有率高的,就会有更多的工作机会来等待我们;但是一些市场占有率稍低的开发语言(有自己特色的),工作机会自然少一些,但是报酬相对要高一些,物以稀为贵嘛!

0

large_rour 已获得新版淘公仔

个人观点,以现在互联网的发展速度,以及计算机的普及程度,未来全民编程可能是一种趋势,不过我还是觉得普遍不会专心到编程学习上。如果全民都必须要学会一门或者多门编程语言才可以正常享受科技带来的便利,那只能说明我们在服务大众上做的不好,我们做出来的产品交互性差,客户要细细研究才能使用自如。前几天看见一张图片,c语言纳入了学前教育到小学的过渡教材里,初心是好的,让孩子从小能接触计算机的魅力,而不是不成熟而产生的网瘾,但是做法未免太着急,就像某些地区学前教英语,可是小学要到三年级才开设英语课,学了的基本就白学了,学过不用,渐渐就忘了。大家都想学编程,编程就是一门门的外语,可以掌握,不可强制。

0

hsf523 已获得新版淘公仔

我是大学是美术专业游戏设计方向,但从小就痴迷编程,大约就无缘计算机专业,在大一培训班学习了游戏3d模型,大二在网上学习了一段时间c#,和游戏引擎,也算简单上手,毕设成功做出了一个小游戏,一直到大四时候学习了java spring ibatis netty 对网络游戏编程也了开发能力,希望以后借力阿里云的云服务发布出更多的独立游戏,做自己喜欢的

2

designuel

你哪看到是Java书了,明明袋子上写着爱x英语,不要过分虚高编程语言。明明是程序员自己的恶搞,但编程热却有事实。我们应该追求事实真相,还原本质,这恰恰是编程所需要的独特之处,一个编程者看错了不打紧,而一群编程者瞎起哄就太儿戏了,不是吗。

keaiwly 回复

JAVA web是什么?

傻狗汪汪 回复

Java

designuel 回复
回复@keaiwly:

网页编程分支

评论
0

selim小梦 已获得定制笔记本

对于本身从事于软件开发行业一员来说,编程的语言多样性,但是目的性是一样的。对于开发角度上讲,什么语言能更好的完成产品需求,架构的完善,便于后续开发,那这个语言就是合适的语言。但是在互联网快速发展的时代,对于一些领域的开发语言成了热门的对象,比如 互联网初期的.net c++,进几年的互联网的p2p 移动客户端 android ios。时代在变迁 互联网在高速发展,于此我们要不停的学习新的技能,“这个时代,永远对于不进步的人不公平”。

3

1591883889618259

流行度高仅仅说明这种语言在市场上被大众使用多,至于使用哪种语言,是看自己项目的需求。
程序的本质是数据结构+算法,未来是大数据+算法,在未来的未来,数据已经不缺了,那基本就是算法的高低之分了,它是机器可以自己学习的算法,这就是智能时代的到来。
在阿里云有期直播说了,人类是上帝的一段不完美的算法,也就是说,人其实就是肉身做的机器人,而人最牛逼之处就在于可以自己学习,某种意义来说就是大脑被植入了一种可以自己学习的算法。
所以哪种语言最流行,可以去关注了解,但不需要狂热追求而贬低其他语言,这样是很不理智的,语言仅仅是一种工具而已。

makpz 回复

赞同

评论
2

pppeanut

老太太其实20岁

0

1152290706162904

要不开一个老妇幼编程培训班吧

聚小编 回复

我看行!

麦菲科技 回复

可以

评论
2

势无形

程序是思维的固化形式,所以选择语言,我倾向于能自然的表达思维的语言--python.
互联网产品百家争鸣的时代,产品功能的升级迭代是生存前提.更高的开发效率,更低的开发成本,是互联网企业的基本功.
python有众多的第三方库,开箱即用. 我在一家创业公司工作,用python完成了运维和开发全部工作.得益于python.

2

shirly2016

不做程序员也是要会编程的。现在科研项目中数据分析基本都用统计分析软件,大数据时代,统计软件现成的功能按钮不够用,一般都要写两行代码进行深度机器学习和数据挖掘,无论读研还是工作,个人职业方面有想法的还是懂点编程基础比较好。

1

轩_宝

作为一个4年android 开发人员来讲,无论是使用什么语言,编程思想基本都是一样的。但是对于层出不穷的各种语言来讲,各个技术公司都会顶风去做科研,最后搞到一半之后还是回归到最原始的状态。而且就最近2年来看,如果一个公司单单制作软件来讲也是很难存活的,现在的大部分公司都已经开始转型,做到了互联网+,国家的提倡是一部分原因,个人感觉更大的原因还是在于现在人对科技的要求越来越高,期望也是越来越高,希望更多的黑科技的出现。

0

小运工

我算一个吧,前几天看了下java,但是没有系统学习过很迷茫,不知道java如何做出客户端。所以一时放弃了。。。

突然风又云 回复

JAVAse好像已经被世界遗弃了

评论
1

happycc

作者:YY硕
链接:https://www.zhihu.com/question/28078194/answer/39312943
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

现在随着计算机水平的进步,各行业的自动化都在蓬勃进展,计算机和代码广泛深入到了很多领域。现在谁骂“程序员是屌丝”,其实已经是开了一个很大的地图炮了,因为各行各业现在都有程序员。除了BAT(腾讯阿里百度)这类传统互联网公司之外,银行、实业公司、研究机构、政府机关等等组织和公司,都有做网站\分析数据\写自动化辅助工具程序\写组织管理程序等等多种需求。 那么种种程序员的工作,有多少工作需要数学呢?需要怎么样的数学呢?首先毫无疑问地,程序员,就是所有“对着电脑,用手敲下特定编程语言构成的代码的人”的总称。我们要分析程序员的工作,也就是写代码。我个人把写代码的工作分为五类,不一定正确和全面啊,就是个概念性的分类:1. 第一类是结构性的工作。这类工作把特定的代码、代码段(函数)、代码库构成具有特定功能的程序,这些程序可以接受特定的数据、输出特定的数据。例子如网站的界面、 软件的界面、 软件的一些可视化功能,再复杂一些有网站前端如何与后端通信、如何分配用户请求给后端,如何处理两个并行的程序、通信过程、计算机系统等等。结构性工作需要的是经验以及对已有数据结构的了解,并不需要特别高的数学水平。我说的经验指的是对于一个特定的想要实现的功能,如何选择程序逻辑和数据结构去实现,这种选择的过程需要程序员有大量读写代码的基础,能够把要实现的功能和自己以前实现过的或者看到过的功能联系起来,设计出解决方案并实现。举个例子,比如说网页设计,通过HTML的元素构建页面,通过javascript给页面元素以动态,这个过程基本是“所见即所得”的过程。目前大部分的互联网公司以及银行系统需求的主要都是这类工作。为了实现特定功能,程序有非常复杂的结构,必须要很多人一同参与编写和测试,因此才有了软件工程这门学科的诞生。结构性工作的巅峰产物是计算机操作系统。计算机操作系统虽然复杂,但是其中涉及到的数学并不多,最复杂的数学就是如何处理多个任务的调度以及进行内存分配管理,都可以抽象成简单的离散数学和排列组合问题。不过,1万行的操作系统和100万行的操作系统的数学理论复杂度是差不多的,他们主要的区别是结构性的,而非数学上的。比如支持更多种CPU、硬件外设、网络协议等等。2. 第二类是效率性的工作。这类工作把特定的工程问题抽象成数学问题,然后发明新的数据结构或者操作逻辑去优化解决问题的效率。最简单的例子是排序,用冒泡排序或者快速排序给大批量数据做整理有显著的时间差别,这个大家都知道的……计算机科学家们主要从事的就是这类工作,需要极高的组合数学和图论等知识。早期的效率性问题通常依靠较为复杂的离散数学,而近年来大部分问题都是应用图论来解决。解决这类问题需要程序员对大部分的数据结构都有深刻的理解,并且能够进行严格的理论分析,能够清楚地指出某种数据结构或操作逻辑的时间效率和内存效率。上面谈到的cqf 16岁发明的数据结构,就属于这类工作……反正我对这类工作毫无天赋,继离散数学败了以后,后来的高级算法课成绩也很差。效率性工作的巅峰产物是一套书叫做《The Art of Computer Programming》,作者是斯坦福大学的教授Donald.E.Knuth。这部神书包含了人类已知的大部分计算机算法的理论分析和最优形式, 50年来被公认为算法领域的圣经。吃透这套书,就可以拿到世界上最好的程序员的工作了(比尔盖茨说如果谁看懂了这套书,就请把简历发给他……),当然这很不容易。我至今只认真看了第一本的前言。兼有前两类工作的巅峰产物是淘宝网,尤其是双十一前后的淘宝网。不解释太多,大家可以看文章《揭秘在淘宝买东西背后的复杂技术》。Google这两年在这方面做的不如淘宝,因为中国人实在太多了……3. 第三类是逻辑性的工作。指的是用计算机模拟人类的认知逻辑,这类工作包括语音识别、文字理解、信息检索、数据分析等等。这类工作最早属于高大上的人工智能、自然语言处理研究,后来随着互联网的兴起开始逐步进入大众视野。这类工作的主要基础是概率统计、机器学习和数据挖掘的模型,包含的数学知识主要有概率、线性代数和图论。由于互联网公司和金融公司对于机器学习的需求,相关的基础知识已经发展得非常成熟,如何学习这类知识也已经有很规范的教程。如今在硅谷,程序员不懂点机器学习,都不好意思出门和人打招呼。这类工作的应用大约是这样的:通过分析用户在淘宝上买东西的数据,推测他还会买啥;通过分析股市的变化以及一些市场信息,推测股市下一步涨还是跌。还有就是分析搜索关键词给出搜索结果,分析语音信号转化成文字等等。这些不同的应用都是为了分析数据,都有类似的处理模型和数学方法。近年来在机器学习的基础上人们发明了深度学习。这个我不是很懂,不好加以评论。但是我知道这类工作的主要目的是模仿人类的认知能力。特别地,机器学习领域最基础最出名的模型“神经网络”,已经被生物学家证明是比较好的对于人类大脑逻辑的模拟。这类工作说简单也简单,说难也可以很难。你只需要学过大学一年级的线性代数,就可以理解神经网络、支持向量机等机器学习的模型,然后自己训练模型去分析数据了——这也是大部分硅谷公司的需求。百度新任首席科学家Andrew Ng在Coursera上有个机器学习的公开课,讲完神经网络之后他就说:“Good,你现在已经比大部分硅谷工程师更加了解机器学习了。”(真的不是黑么)然而机器学习的模型背后的数学非常深奥,比如说神经网络可以等效成一些复杂的高维拓扑结构,网络的训练实际上是这些拓扑结构做拓扑变换的过程。比如如果待训练的数据维数非常高,要选择合适的函数降维。为了理解这些东西,需要深入学习线性代数、拓扑学、数学分析等数学知识。其实我说的我也不是很懂,我没系统学过拓扑。兼有前三类工作的巅峰产物是IBM的计算机waston。2011年Waston在美国的智力问答比赛“Jeopardy!” 中击败了两位经验老道的人类选手。这件事之所以令人震惊,是因为Jeopardy中主持人提出的问题大部分无法直接理解,而是隐藏在英语俚语和双关语当中的巧妙语言。Waston在人工智能史上的地位远远超过当年击败国际象棋大师的Deep Blue。 关于Waston的一些原理,可以读文章《IBM Watson机器人算法介绍》4. 第四类是仿真性的工作。这类工作主要集中在游戏和动画领域,其他边缘一点但是更加高要求的有飞行器设计、气象、天文等。仿真意味着在电脑的环境中虚拟出现实世界,这就需要程序员理解力学和光学等物理学理论。比如最简单的,任何3D游戏引擎开发的第一步都是学习刚体变换等力学知识,用来把模拟出来的小人或者飞船等物体进行移动。刚体变换有很多种表示方法(茴香豆的茴字有四种写法……),背后有不少数学理论。此外为了仿真毛发、浪花、溅起的尘土等等这类细小的物体,也有自己相关的物理和数学知识。可以请看《爱丽丝的发丝──《爱丽丝惊魂记:疯狂再临》制作点滴》感受一下。不同的行业对于仿真的需求不一样,因此要求的专业知识也不同。游戏和动画的需求是尽可能地真实表现场景,而飞行器设计上用的仿真更强调空气动力学和结构力学,因为要用仿真分析飞行器飞行时的受力情况。天文、气象和其他需求仿真的行业又有各自的侧重点和知识领域,各个行业应该也都有自己暂时解决不了的问题。这些具体的知识区别我也不是很清楚,按照我对某些行业的理解,可能无非就是牛顿力学、动力学、微积分、微分方程和线性代数,因为都是在经典力学范畴内的物理,就那么点东西,从本科毕业开始算,把数学认真学个三年左右之后就能进入某个行业了。这类工作的巅峰产物隐藏在大众视线之外。比方说美军号称在海湾战争开始之前,就已经通过仿真软件把战斗推演过好多次了,最后真打起来的时候“就像打电脑游戏一样”(语出《失控》)。再比如说,现在很多超级计算机都被用在气象预测上。2008年北京奥运会前夕,北京气象局就购买了一台计算能力排全球前十的计算机,用来在奥运会期间提供气象预测。当然,这些巅峰产物依然有很大的局限性。美国人预测不出他们会陷入伊拉克和阿富汗的战争泥潭,北京气象局预测不出几年后北京常常会有雾霾。当然我们也不能太强求,毕竟这种工作有点夺取上帝视角的倾向。这都说明了在仿真计算领域,人类还有很长的路要走。5. 第五类是物理性的工作。“物理”指的是这类工作中产生的代码要直接与物理世界发生接触,比如从传感器获取世界的信息,控制执行器进行特定的运动等等。这类工作主要集中在航空航天工业以及机器人产业当中,是我现在主要从事的工作。 这类工作主要分为两部分,一部分是观测(如何通过传感器数据了解自身和世界的状态),另一部分是控制(如何根据自身和世界的状态规划自身的下一步运动),两者都需求很多物理学和数学的知识,控制需要刚体力学和运动学、系统理论、控制论等,观测需要信号处理、系统建模、机器视觉、概率统计、优化等等。物理性工作的一个主要特点是,代码与硬件以及机械紧密耦合,测试很困难(想想该怎么给一颗导弹debug……),所以通常这类工作要和仿真类工作同步展开,先在仿真平台上做测试,然后再移植到真的机械上面去。而且程序员要深刻理解运行自己代码的平台的硬件和机械的性能和极限,一行错误的代码很有可能会导致严重的事故(一个小数点点错导致火箭发射失败这种故事我们小时候应该都听说过)。这类工作近年来也开始进入普通行业,比如任何安卓手机现在都内置惯性导航元件,上面说的“观测”中的算法就可以写在手机里,用来获取手机相对于世界的位置。这类工作的巅峰产物是Boston Dynamics公司制造的大狗机器人和Petman机器人,可以自行百度了解一下。我们高中学的数学,以及大学一年级学的微积分,其实都不是数学的本质,而是数学工具。数学的本质是建立一套严密的体系来描述世界,揭示世界本身的严格表示形式。当我在学习了机器人运动学之后,再回头去看代数与几何,就明白了人们为什么要建立种种复杂的代数结构并且去分析他们的性质。在学习了概率机器人理论以后,再回头去看概率和统计,就明白了期望和方差这些不知道是确定还是不确定的玩意到底有什么用。我感觉其实学习大部分的数学知识都不存在有没有天赋这样一个说法,目前好的数学教材非常多,而且都把知识解释得非常清楚,这本书看不懂了完全可以换一本再看。任何智力正常的人,在系统的训练和合理的时间投入之后,都可以学会数学系本科涵盖的一切数学知识。学习数学的关键在于有没有兴趣去欣赏它抽象的美,以及是不是愿意投入时间。 一开始我是不太会欣赏数学的,我高中数学很差,高考数学只有100多几分。大学一开始学微积分也学得很差。但是我在大二大三期间写机器人程序的时候发现了代数的重要性,学会了欣赏数学,于是就能学好数学了。大四的时候到美国交换,在一个还算不错的大学的数学系上了两门数学课,都比许多数学专业的同学学得好。研究生的时候项目比较多,不太专心上课,成绩都一般,但是我能感觉出自己数学水平的进步。我没有再回头去学离散数学和算法,所以不知道现在自己在这方面进步如何,不过反正我不再搞相关的工作了,也没时间去探究。借用一个名言,我觉得,以大部分程序员所需的数学的难易程度,根本没到拼天赋的时候。

1

1926490699946592

语音

7