网教网

搜索
查看: 115|回复: 0

如何构建编程知识体系?

[复制链接]

2

主题

5

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2023-1-11 17:07:50 | 显示全部楼层 |阅读模式
原文链接:

  • 编程的正确学习路线是什么?
  • 一名具有计算机专业素养的合格程序员需要具备和掌握哪些知识?
  • 怎样成为一名优秀的程序员?
相信读完本文,能够带给你一些启发。
真相君(公众号:编程真相)梳理出一张简单的思维导图,将编程知识体系的构建分为理论基础、编程语言、编程内功、应用四大部分,接下来真相君将围绕此图介绍编程知识体系中详细内容。


理论基础
首先是理论基础。如果将编程知识体系比作一座大楼,理论基础是大楼的地基,是需要稳扎稳打,最不能急功近利的一部分,地基打不好,大楼始终存在隐患。
编程也是,没有底层基础知识的支撑,就始终无法看清问题的本质,无法深入分析问题的原理,容易在编程到道路上“走火入魔”,最终只能成为代码的奴隶。
所以理论基础的学习是重中之重,可能短时间内感觉不到明显的能力提升,但是在以后每一次遇到问题时候会潜移默化的帮助我们进行分析和思考。如果想在计算机领域深耕,理论基础不仅要学习而且要深入的学习。
想当年真相君本科期间没有人告诉和强调理论基础的重要性,或者是没有意识到其重要性,导致在学习操作系统、编译原理这些计算机核心课程上没太重视(编译原理真的太难了),课堂上听的一知半解似懂非懂,自己又没去深入的学习理解,后来在一次次碰壁后幡然醒悟,花了大量的时间去重新学习,完全是计算机专业同学的反面教材啊。
不知道大家有没有这种感觉,有时候看书学习的时候,觉得书上的内容似懂非懂,有些吃力,这可能是因为我们缺少学习这本书的“先验知识”
如果我们在学习过程中,对学习内容“不求甚解”,日积月累就很容易出现“知识鸿沟”,如果不及时解决所面临的知识鸿沟,那么这道知识鸿沟就会越来越大,最终成为阻挡我们进步的巨大阻碍。
所以,真相君真心建议计算机专业的同学们,当发现专业学习进程中出现知识鸿沟,很可能是某些“先验知识”没掌握,或者之前的学习中忽略了,这时候一定要及时弥补知识鸿沟,否则以后编程的成长之路可能会困难重重。
计算机学科的学习中需要具备极客精神,需要保持对事物的原理保持好奇心,不要轻易放过学习过程中遇到的每一个问题。
说了这么多,感觉好像还没入正题,但是前面的废话真的是真相君的肺腑之言啊。现在我们简单介绍一下理论基础都包含哪些方面。

  • 操作系统
相信大部分编程研发都是基于windows或Linux平台,程序是运行于操作系统之上,受操作系统的管理和调度,那么《操作系统》必定是绕不开的话题。
举个不恰当的例子,操作系统好比是你的上司,你是不是要全听上司的?那如果你想工作的优秀,是不是要好好研究理解上司的意图?
操作系统的具体内容这里就不展开讲了,真相君会在公众号“编程真相”编程知识体系专题中对每个部分分篇进行详细介绍并给出学习路线及建议,让同学们少走弯路。

  • 数据结构
图灵奖获得者Pascal之父提出著名公式:“算法+数据结构=程序” 对计算机科学产生了深远的影响。
提起《数据结构》,同学们立马就会想到数组、链表、队列、栈、二叉树等等,这些是数据结构中最基本的内容。
但数据结构远不止此,它更重要的是一种计算机思维能力的培养,即如何把现实问题转化为计算机语言的表示。
程序设计的实质是对实际问题设计/选择好的数据结构和好的算法,而好的算法在很大程度上取决于描述实际问题的数据结构,例如利用堆栈巧妙的实现四则运算。

  • 编译原理
《编译原理》说实话真相君没学明白,现在也只能回想起LL自顶向下和LR自底向上的语法分析算法...
简单的说编译原理是为了解答我们编写的高级语言,例如C语言,是如何一步步翻译成计算机可执行的机器语言,这是一个非常复杂的过程。事实上编译原理就是告诉我们编译器的设计和实现方法,我们编程完成C程序,编译运行时报语法错误就是在编译器进行语法检查时发现的。
很多人认为学习《编译原理》好像在以后工作中也用处不大,那可能是他像真相君一样,压根就没学明白。
编译原理本身讲的就是一个复杂大型算法,学习编译原理对于在编程语言的认知、复杂算法能力、代码调优等方面有着很大帮助。

  • 计算机组成原理
《计算机组成原理》侧重于从计算机硬件构成对计算机的工作原理进行剖析,这时候高级编程语言将不复存在,计算机组成原理将深入硬件层面,介绍中央处理器、存储器的工作原理,二进制指令如何控制计算机进行运算。
真相君觉得《计算机组成原理》可以作为理论基础中最先学习的内容,但是如果没有基本的计算机知识,学习起来也很费劲,因此很多高校的计算机专业都将其排在数据结构、C语言、甚至汇编语言之后才进行学习。
存在的问题是这些课程中的内容均有交叉,总有一些内容是还未学习的盲区,因此学习这些理论基础,需要及时回过头来重读当时还是知识盲区的内容,相信会有恍然大悟之感。
编程语言
如果基础理论部分练的是内功,编程语言则是我们的大刀长矛,优秀的程序员总是能做到内外兼修。
真相君认为学习编程语言的第一法则是贵精不贪多。世界上有成百上千种编程语言,我们不可能把每一种都学会,事实上在工作中我们往往选择某一种作为主力开发语言。那么问题来了,初学者该选择哪一门编程语言作为编程入门的首选呢?
真相君的建议是C语言。根据Tiobe最新(2021.07)公布的编程语言排行榜,C语言位列榜首。



选择C语言作为入门语言并非单单因为它排名第一,C语言是最接近底层系统的高级编程语言
有多底层呢?世界上主流通用操作系统如Linux、MacOS、Windows都是C语言写的(当然还包含一部分汇编),许多编程语言底层都基于C语言,如Python。
C语言简洁、紧凑、灵活,功能强大,对操作系统和内存的精准控制,高性能的运行时环境,源码级的跨平台编译,是编程语言中无可替代的No.1。
学习C语言,会使我们更好的理解真实的程序是怎样一步步生成的,又是怎样运行起来的,让我们得以更容易的去探究程序运行时计算机内部都发生了什么?进而把握编程的本质。
大部分初学者在接触C语言时往往很不习惯,一方面指针、引用、内存等本就不好理解,而且学到后来竟然发现它基本上没有任何工程库可用,甚至连一个字符串替换就需要自己实现,进入C语言就像进入原始世界一样,但其实这才是最接近真相的地方
有些学校将Python作为计算机专业的入门语言,真相君认为并不合适。
人生苦短,我用Python。”
这句程序员圈的至理名言流传甚广,说明Python却有其魅力:简单易学、类库丰富、功能强大、一行Pyhone十行C,码农们用了都夸好。
但是,正因如此,Python语言在提供丰富的类库的同时,却也隐藏了程序本身真实的样子,它已经成为一个只有输入输出的黑匣子,里面具体发生了什么写代码的人并不知道。
所以,从某个角度来看,会用Python和会用PS软件差不多,只是学会了使用一种工具,不能算是入了编程的门。真正要打牢编程的基础,还是要从像C语言这种更靠近底层的语言开始。
世界上这么多编程语言其实大同小异,“学会”了C语言,其他语言保证能够快上手。后续会出一期专门介绍C语言的学习路线的文章,欢迎大家关注公众号“编程真相”进行学习交流。
编程内功
是不是掌握了一门编程语言,就能写出高质量的代码?显然不是。这就好比说会搬砖了,就能造出高楼大厦一样。
同样是写代码,为什么有的人写出的代码高效、易读、好维护、可拓展,有的人写出的代码无法阅读、无法维护、三天两头崩溃?这说明在纯编程语言的学习之外,还需要具备的一些编程能力和素质
首先是编程规范。编程规范可以理解为规范的编程方式,例如良好的函数变量命令、适当的代码注释等等,具体的每种语言都有其特定语言下的编程规范和默认的准则。
养成良好的编码规范分两方面。 第一,在我们不知道如何去做的时候,向那些优秀的学习。例如Google 编码规范,里面包括世界上主流编程语言的编程规范。其中的C++编程规范,李开复曾推荐说:
我认为这是地球上最好的一份 C++ 编程规范,没有之一,建议广大国内外IT研究使用。
作为世界上最优秀的科技公司,它的代码规范是值得学习借鉴的。
第二,Practice makes perfect。这句话翻译成中文大多为熟能生巧。但真相君(公众号:编程真相)认为练习/实践远不止能“生巧”。邹欣老师“技能的反面”这篇文章中有这么一句话:
"那怎么提高技能呢? 答案很简单, 通过不断的练习, 把那些低层次的问题都解决了, 变成不用经过大脑的自动操作, 然后才有时间和脑力来解决较高层次的问题。"
写代码也一样,从最开始只能写冒泡排序到能够用程序解决一些实际问题,再到能够设计构架一个复杂系统,需要经过大量的practice 最后才能 make perfect,最终由量变产生质变(公众号:“编程真相”
真相君发现有些人喜欢将设计模式挂在嘴边,甚至极力吹捧设计模式。在面试中很多面试官也喜欢问到设计模式,真相君当初校招的时候为了准备面试,特意买了相关的书,说实话当时看的似懂非懂,虽说各种设计模式各有应用场景,但大多没法领悟。随着工程代码量的积累,再重读设计模式当初的很多困惑都不复存在了,甚至有“本就应该是这样的”之感。

真相君甚至认为设计模式本就不是给还处于编程语言学习阶段的新手看的,所谓的设计模式是一些经历过大型项目经验丰富的编程大佬们总结的一些好用的编程模式,没有经过大量编程积累的小白怎么可能轻易领悟,最多就看个新鲜学个皮毛。(仅个人见解,大佬请绕道)
所以,像设计模式此类的书籍造成了“水平不到看不懂,水平到了无需看”的尴尬局面。当然,了解优秀的大佬们总结出来的一些经验方法,对自己还是会有所启发,即使可能不是当时。
真相君认为所谓的编程内功,是在打好基础的前提下,通过不断的编程训练,来精进自己的编程水平。而编程训练也并不是每天写n个helloworld就叫训练,国内外有很多编程平台和课程实验,github上有很多优秀的编程案例框架,都是很好的学习资源。
后续也会单独出一期关于编程训练提高方法的文章,欢迎关注“编程真相”。这里推荐一下大佬编程指北的文章:“我是如何纯靠技术在大学月入上万,收获人生第一个10W”,相信看完会有所启发和触动。
编程应用
技术的存在是为了解决实际问题,学习编程的最终的目的也是所学能有所用,顺便能够拿到大厂offer
。在编程领域应用方向可多了去了,例如移动端开发有安卓和ios两大阵营,所用的语言分别是java和swift。移动端应用开发在互联网企业中需求很普遍也很旺盛,真相君随手截图某招聘网站的移动端研发的招聘。



web研发分为前后端两部分,前端研发一般需要掌握主流的一些前端框架例如rect,vue,精通html、css、js前端三剑客都不用说了。
后端就比较丰富了,有许多优秀的的框架,基于PHP的Laravel,ThinkPHP,基于python的Django,基于java的Spring Boot等等。
真相君上学那会用过PHP做课程设计,当时觉得PHP是世界上最好的语言 。
还有一部分偏底层的研发,例如Linux驱动研发、嵌入式研发、基础架构研发等,这类研发更贴近底层,要求程序员对计算机和程序要有深入的理解,对原理和本质要清楚,更为硬核。下图某公司基础研发岗位在任职资格就要求“基础知识扎实,对常用数据结构、操作系统原理、TCP/IP协议栈有较深入的理解”。


而像前端开发,可能没有进行像计算机专业系统的学习,甚至非科班出身,进行技能培训后也能够上岗,这并不是说前端简单(请各位前端大佬高抬贵手),而是说明这两种研发在计算机中所处的位置层面的不同,就看哪一种是你的菜了。
再有就是近几年一直比较热的人工智能和大数据。虽然许多高校本科已陆续开设人工智能、大数据等专业,真相君仍然认为它们也是计算机应用的一部分。
人工智能往往离不开大数据和支撑,但是大数据本质还是为了解决海量数据场景下数据处理的有效方法,并由此衍生的一系列新概念、新技术。至于人工智能,真相君认为其终究是一种算法,只不过这种算法比较复杂,甚至复杂到有些算法效果好到无法解释证明,例如深度神经网络。
总之,计算机应用的领域太过于缤纷多彩,还有很多方向没有提到,总有一种是你的菜。需要强调的是编程需要稳扎稳打,循序渐进,在需要打基础、学理论的时候,不要过早过多的将时间投入到应用开发上,尤其是在专业学习的阶段。否则很可能会在以后的工作中中面临解决低级问题的时间已经远远超过本应该进行理论学习的时间的尬尴处境。
以上就是真相君梳理的编程知识体系的全部内容,内容如有不当之处欢迎大家批评指正。真相君会按照编程知识体系的结构,对每个分支的内容持续更新,希望能够在编程进阶之路上为大家提供正确、高效的学习方法和建议。
洞悉原理,看清本质,欢迎关注公众号“编程真相”!



扫一扫关注:编程真相

原文链接:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表