初学者学习计算机编程有哪些关键技术必须掌握

第一,你必须掌握高等数学的知识,包括微积分、概率论和线性代数。并不是说你学过高等数学之后就一定会在工作中使用它,而是说高等数学是锻炼人的逻辑思维、形象思维的最好工具。比如微分和积分的概念就是人类思想史上的一次大解放,你怎么能错过这样一个从根本上提高思维能力的机会呢?

第二,要掌握计算机组成的基本知识,包括数字逻辑,计算机体系结构,二进制,寄存器,堆栈,内存管理,指令,汇编语言等等,了解CPU的结构以及是如何工作的。一句话,就是理解计算的本质。刘慈欣在《三体》里讲了一个故事,一位牛人穿越到秦朝之后,秦始皇给他十万军队,他构建了一个人肉计算机,从而计算天体的运行轨迹。刘慈欣能讲这个故事是因为他是软件工程师出身,专业就是学习计算机编程,他一定学过计算机组成,而且学得相当不错,对计算的本质有深刻理解。中国第一代计算机科学家南京大学徐福家教授(我的导师的老师)也曾经非常推崇计算机组成的重要作用。

第三,要掌握数据结构的知识。数据结构是关于如何科学地组织数据的科学,内容包括线性表、队列和堆栈、字符串匹配KMP算法、二叉树、树、散列表、哈夫曼编码、排序、图、B树、外排序等等。数据结构是如此重要,以至于如今很多高级语言如Java、Python等已经把常用的数据结构比如列表、堆栈、字符串、集合、映射、大整数、排序等等作为内置功能直接提供给程序员使用。即使这样,仍然有很多数据结构比如树、图、B树等需要程序员自己去实现。

第四,要掌握操作系统的知识,特别是其中的多进程和多线程技术。可以说多线程技术是一个分水岭,掌握这个技术的就很有可能成为一个大师级的软件工程师,可以从事系统软件、框架和平台软件的开发。否则,即使写了再多的代码,编了再多年的程序,也最多只是一个不错的应用软件开发工程师,或者在平台软件开发中担当非核心算法的开发任务。

这里有一个误区,很多人认为多线程技术就是创建一个Thread对象,然后调用它的start()方法。不,你不能以开发应用软件的角度看待多线程技术。你必须系统地学习多线程技术,包括什么是P、V操作,信号灯,锁,条件,死锁,同步和异步。要学习如何解决生产者消费者问题、读写问题、五个哲学家问题。学习这些问题之间的本质联系。最后还要学会用面向对象的方法编写多线程的代码,用多线程技术控制十字路口的红绿灯。

第五,要掌握编译原理的技术,包括词法分析、有限自动机、语法分析、自顶向下子程序法、LL文法、LR文法、自动编译器的构造、中间结果、代码输出等等。不是说你在工作中一定有机会使用编译技术去开发一个编译系统,而是说编译技术就像微积分一样,是一个很好的锻炼思维的工具。用编译技术开发编译程序,在全世界也是极少数人才能胜任的工作,它当然很难,但是,一旦你掌握了这门技术,你就与身边其他的软件工程师拉开了距离。你再学习其他技术的时候,看得就比别人远,角度就比别人高。

目前我认为就这5个技术对提高你的编程能力有着本质上的推动作用。肯定有学生说,难道面向对象就不重要了?机器学习和深度学习就不重要了?前端技术和后端技术就不重要了?数据库技术就不重要了?它们当然重要,不过它们不是基础技术,掌握它们的前提是把那5个技术掌握好。

比如没有系统学习过数据结构怎么可能深入理解面向对象?没有理解锁、同步、异步的概念怎么可能理解数据库的乐观锁和悲观锁的区别以及死锁发生的原因?

所有的计算机技术最终都归结为数学,所有的数学最终都归结为艺术。你要以学习美、欣赏美的角度学习计算机理论和数学,不能把它们当成负担。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

方林博士

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

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

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

打赏作者

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

抵扣说明:

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

余额充值