编程是不是只要懂语法就行了?

编程只要懂语法就行了,说这话的不是别人,是90年代我读本科时的一位计算机老师,当时他是名牌大学计算机专业毕业的硕士。这个说法即使是30年后的今天也依然有一定市场。但其实这是一个错误且十分有害的看法,先说它错在哪。

程序设计一定要有计算机理论和数学支持,比如要有《数据结构》、《计算机组成》、《人工智能》、《编译原理》、《操作系统》、《软件工程》、《微积分》等方面的知识。有人可能会不服气的说,也有高中生没学过这些知识但照样可以编出功能强大的程序?

是吗?我同意的确有非专业的人员从事编程工作也做得很好,这样的软件工程师甚至还不少。但我要说的是,“好”是相对的,编写一般性的应用软件的确可能用不到那些专业知识,但是上升到系统软件、平台软件和框架软件的高度,他还能表现优秀吗?

Tensorflow神奇不神奇?Spring厉害不厉害?一般程序员不需要太多专业知识也可以利用这些平台或者框架编写出令人满意的程序,但是如果让他编写Tensorflow或者Spring本身呢?

有人可能会辩解说:Tensorflow和Spring当然例外,那是功能多么强大的软件啊,一般人怎么可能编得出来!

但是我认为,编写这样的系统软件、平台软件和框架软件的人并不是神仙,也并不比一般人多长了一颗脑袋。他们只不过系统学习过计算机理论和数学了,并且更重要的是,他们会用这些理论指导自己的编程。

当然,如果你并没有打算成为一个出类拔萃的软件工程师,不打算找到漂亮的女朋友,不打算在35岁之后仍然从事软件开发工作,不打算改变年轻轻就像个小老头的相貌,不打算减轻加班负担——在我看来,90%的加班都是人为的——的话,那么你就当我没说。一个人甘于平庸,那别人又有什么好说的呢?

再说说为什么这个看法十分有害。

第一个后果是,由于缺乏理论知识,领导可能不敢把重要的工作交给你,你可能很难接触到真正核心的项目或者工作。这是一个恶性循环,因为你不懂理论,领导不敢把核心工作交给你;因为你平时也用不上理论,你就更轻视理论学习。

第二个后果是,你可能只能从事繁杂、无趣、不需要创造性、需要频繁加班的工作,你无法从工作中感受到乐趣。为啥?因为你只能从事一些重复性的工作,这些工作没有什么创造性, 干多了你就会觉得无趣、不好玩!据统计,职场中只有17%的人能对自己的工作感兴趣。能从事自己感兴趣的工作是一种不容易获得的幸福。

第三个后果是,年轻轻你可能就想转行,不能够一辈子钻研一项技术。不是说转行一定不好,而是说选定一行之后需要的是持续的钻研。否则,即使转了行,难道在新的行当里就不需要钻研了吗?

第四个,也是最严重的后果是,程序员被认为是一项吃青春饭的工作。不像中医,越老越吃香。事实上,程序员也是越老越有经验的。但由于以上原因,年龄反而成为了程序员找工作的劣势,用人单位也不相信你会干到40岁以后。这也直接或者间接地造成了前些年中国在系统软件、平台软件和框架软件开发上的劣势,虽然我们的应用软件的确做得很好。最近,华为的鸿蒙操作系统上线了,我敢打1块钱的赌,团队中一定有50岁以上的软件工程师是灵魂人物。

总之,编程绝对不是只要懂语法就行了。就好比只懂高中物理是不可能搞电子对撞机的,只懂高中化学是不可能搞新冠疫苗研发的。同学们,让我们重新拾起大学里的课本,钻研计算机理论和数学,早日过上你梦想的生活。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1. 开放源代码的必要性 在介绍编程语言之前,先说说开放源代码的必要性。现在,在软件生产领域存在巨大的智利浪费,大家把大量的精力用在编写别人已经实现的程序代码上。看看,文本编辑器有多少,看看ftp程序有多少,看看字处理程序有多少,这些程序虽然有差别,但主要的功能都是一样的。要实现个性化的功能,在已有的软件基础上修改会节省多少时间呀!而每个程序各编一套,又浪费多少时间?如果,没有这些重复的工作量,世界上的程序员至少可以节省80%的工作量。同时,开放源代码也方便了大家的交流,阅读源代码应该是最直接最有效的学习途径,尤其是比较专业的领域。 要开放源代码,下面几点比较重要: * 语言要流行。 * 语言的函数和类库统一。 * 语言的语法和编译器要统一。 * 编译器是否开放源代码。 * API是否开放源代码。 语言的可重用性、功能、友好性。 * 语言统一:如果大家都用一种编程语言,都用同样的函数,同样的类库,那么,大家的共同语言就会很多。大家只要学会一种语言,一套函数,一套类库,就可以相互读源代码,这样,学习量是最少的;但是语言统一根本是不可能的事,因为各种语言都有其特色,如果取了其中一个优点,通常就会牺牲另一个优点。可是学习新的API浪费程序员大量的时间和精力,尤其是当这个API有大量和其他API重复的功能的时候。 要增加代码的可重用性,要从下面几点着手: * 代码的可读性。如格式、是否接近英语语法和单词。 * 代码的表达能力,也就是简单性,能用最少的语句和单词实现同样的功能。 * 代码的结构性,如函数、模块、类。 语言功能的强大从下面几点来说: * 是否拥有大量的库支持。这是最重要的,要求编写任何功能的程序都有强大的库支持。 * 语法功能是否强大,比如是否有出错处理。是否有指针。 语言的友好性: * 语言包的大小,语言包越小,学习越简单。 * 语言是否有友好的编辑调试环境。 * 语言的可视化和集成编程环境。 2. 简介各种程序语言 注︰在程序语言前划有☆号者,表示它有重大影响,但不代表它优良。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方林博士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值