探究:初学者编程语言的选择
日期 | 修改人 | 修改内容 |
---|---|---|
2023年2月12日 | 北极的大企鹅 | 添加了C语言的新比喻 |
前景提要
- 很多初学者面临的最多的问题就是编程语言的选择问题,一旦你接触编程,无论任何人都会给你提到一个问题,说你要选择一门编程语言学习,才能在后续的计算机学习中取得成绩,但是,每个推荐的人,又不会直接告诉你选哪门语言,就算说了,也会告诉你每门语言都有什么好处,都适合做什么,编程语言的火热程度,编程语言的优缺点,编程语言的.....(一场大型的销售现场),而其实初学者对于编程语言的选择并不想要知道这些,他们一般会考虑的问题是哪个更简单,哪个好学,哪个能让我盗取别人的QQ号 .....
编程语言选择面临的问题
零基础的理解可能不一样?
- 在很多时候,你理解的零基础和你老师的理解可能不一样,你认为的零基础是你对这个事物的认知还处于混乱,理解不深刻,无法凭借已有的知识推导出未知的答案,这样描述比较抽象,那么举个例子,你觉得自己不会编程就是计算机零基础了,你的老师认为你今天听了一节计算机的课,无论是什么,无论你学了多少,你会了多少,你能反馈出多少,你都不是零基础,你不会写代码,但是,你学了一节专业课,你就已经不是外行的人了,你不是零基础,你是基础差,大学老师往往认为大家听了一次哪怕一分钟,也是计算机专业的人了,不能说自己零基础,但事实往往相反,很多人学了四年,也就掌握了一些计算题目的方法和一些专有名词,其实对计算机的理解,计算机的应用,很多时候不一定比一些其他专业的人知道的更多,比如装系统这件事情就有很多计算机专业的人依然不会,系统出了问题,学计算机的还要去花钱请售后师傅为他做个系统,这种情况也是常见状态。
真的零基础很多时候,是真的从小没接触,大学刚刚知道有这么个事儿,然后,大学也没有努力的自己加深理解,加深学习,只是靠老师在课堂上讲讲术语,讲讲计算,讲讲考试的,其实,写不出代码,确实可以给自己贴上真零基础,这是对于编程写代码的零基础而不是对于计算机操作的零基础,毕竟你们打游戏,看电影还是很熟练的!
真正初学者编程语言选择面临的问题
序号 | 问题 | 描述 |
---|---|---|
1 | 难易程度怎么样? | 这里的难易程度,不是对已经有一门编程语言入门的人来讲的难易程度,很多介绍的机构,个人,教授都是以自己已经会了编程的评价标准来衡量的,已经会了编程有了基础的人看待问题的思维逻辑已经系统化了,跟真的零基础的人理解事物的概念是不同的,虽然我是一个会编程的人,但是,作者进行了深入思考和回顾自身初学时遇到的痛点问题,进行了反向思维推导,来看待这个问题,作者的标准就是初学者是否具备计算机基础知识,这个基础知识就比较多了,并不是你会打个游戏,你会看个电影,用个百度就是你有基础知识了,基础知识本身就很多,作者认为计算机专业最难的也是基础知识,抽象的基础知识很多数据结构,操作系统,在计算机领域都叫做基础知识,但是,它们也是最难的,就算从事多年的计算机开发,依然需要反复研读和理解的基础知识,所以,是否掌握基础知识的评价标准确实是可以验证你对编程入门的难易掌握程度。 |
2 | 环境配置是否复杂? | 这个问题真的是累哭了多少开始信心满满的初学者,本来怀着百分之二百的热情来加入编程队伍,结果一上来你不是教我怎么写出可以搞定一切qq账户的代码,而是来个一个莫名奇妙的环境变量配置,很多小伙伴满脸黑人问号的问what,这就好比你本来去跟小哥哥/小姐姐去相亲,结果去了不是相亲,而是先讲讲财产怎么分割,离婚后孩子归谁一样,让人即莫名其妙又无可奈何,初学编程的小伙伴有多少人被环境变量搞得痛苦哀嚎呢?只有他们自己知道. 所以,一门语言是否有个复杂的(相对初学者)环境变量配置也是很多初学者痛苦的源泉,他们不想去做环境配置工作,因为经常出现一些他们无法搞定的问题,因此,这个问题也成为选择学习编程语言的一个难度门槛. |
3 | 是否可视化界面? | 这也是劝退更多初学者的一大难题,也是编程入门的一项基础工作,一门语言一开始就用一个黑漆漆的运行界面,让很多初学者都很畏惧,毕竟大家在多年的使用计算机的习惯中,已经被微软的可视化界面征服了,形成了使用可视化界面的习惯,如果一门语言的开发是使用一个黑漆漆的运行界面,也会使得一些小伙伴迅速放弃,并自我催眠认为这门语言学起来好困难啊! |
4 | 编译器操作复杂度? | 很多初学者平时知识浏览浏览网页,看看视频,对于一款专业的软件的使用一般都很困难,毕竟很多人无法熟练的使用word排版,制作精良的ppt和生成优美的excel表格图标,现在让他们使用一款全英文的编译器,对于那些英语不是很精通,不喜欢英语的初学者,一下就像一座大山一样压倒了他们对于编程语言的选择,所以,编译器是否操作复杂也是要作为选择编程语言的一个重要参数指标. |
5 | 学习的时间成本? | 大家总是对很多事务存在着开始新鲜,久处厌烦的状态,因此,能不能是一门短时间学会的编程语言,也是成为对于编程语言的选择的一个指标,这个时间成本可以参考很多培训机构的时间表,他们的官网或者咨询会告诉你培训多久能学会这门语言,一般的都是半年左右,压缩了课程,每天要学习八个小时以上,这样也会拖得很多初学者失去了昨日的热忱,因此,能否快速的学会一门编程语言,也是成为了编程语言选择的要素 |
6 | 相关性学习时间的长短? | 有些东西就会分散初学者学习主语言的注意力,这就跟你同时学多门课程分散注意力一样,比如既学数学又学物理,对于理科思维好的人是锦上添花,但是,对于理科思维不那么活跃的人来说就是痛苦,同样的就是既学文言文又学英语,也是对于另一些人同样的痛苦,这也会或多或少的拖慢一个初学者对于主要编程语言的学习,有时会起到促进作用,而其他的时候就是滞待作用。因此,选择一门编程语言的时候,要去了解其要学习多少相关性的知识,这些相关性的知识可能跟当前学习的编程语言无关,比如学习Java的整套,除了Java还要学习MySQL,Linux,git,Redis,JSP .... 这些就跟学习Java本身是无关的,你不会因为不会写MySQL而写不出Java本身的代码,但是,你要学习建立一个网站,又必须学习MySQL,这就会分散你学习Java的注意力,因此,你要探究一个编程语言是不是存在众多的分散你注意力的辅助语言,这也是一门语言选择的条件之一. |
编程语言难易程度问题
形成编程思维的人和没有思维的入门者的区别
- 对于已经入门的编程者来说,所有编程语言初识都是易于学习的,因为他的思维已经被编程改造成了适合编程的思维,他学习所有相关内容都会迅速的反应出相关的思维并进行相关的操作,这就像你要做9除以3,你能快速得到结果3,那么,这件事你是怎么做到的呢,是因为你背了99乘法口诀表,那为什么你会99乘法口诀表,因为你学习了乘法,那么你为什么会乘法呢,因为你学习了加法,你知道3+3+3等于9,那么再向前推倒,你在学习加法之前学了什么,学习了数数,你能从1数到9,你知道数数,所以,你清楚加法,加法推导乘法,乘法有基础口诀表,因此你能快速熟练的得到3,这个问题可能很多人没有想过,或者没有在意,人家问你,你就回答就是3啊,多简单,而忽略了你的思维成长过程,而编程初学者就是那个可能刚刚用铅笔练习写1,写了一篇的孩童,然后你问他,9除以3等于几,你告诉他得三,但是,他无法做到再求出6除以2等于几,因为他既没有一步步的成长性思维,也没有形成固化思维,他只能背会一个结果,因此,会编程的认为所有编程语言都很简单,而入门者还没掌握到规律,很多问题对于他们来说就是天方夜谭.
你无论跟他们讲什么简单,他们也只是刚刚学会写数字1,和数数,怎么能强求他们给你高级计算的答案.所以,无论你觉得c语言是多好的入门语言,还是php是世界最好的语言他们也感受不到,就像一个人跟一个女生或男生处对象,他必然能说出这个人的优缺点,而对于没跟这个人处对象的人来说,他完全感觉不到,他觉得这个人跟其他人没什么区别,都是普通的人而已.
语言难度问题划分
image.png-
这张图应该很多选择语言的初学者都看过,它的含义到底是什么呢,含义就是越靠近底层的语言越困难,这个困难指的是对于人类的识别难度来说的,而越靠近上层的方向就会越简单,这个简单指的是人的理解和阅读来说,比如最底层的机器语言就是一串0101,给你20个零一,你能迅速明白什么意思,还是给你一个单词Add,你更能理解其是什么含义,这件事对于普通人来讲就不言而寓了,因此,面向对象的语言,才成为更好学的编程语言,但是,很多语言在语法上也是互相借鉴(抄袭的),很多语法和格式也是类似或相近的,因此,一个人掌握了这个思维方式,他看其他语言长得像,那必然也是可以看明白的,就像有个人他们家族都有一个特色,左眼睛大,那么,你遇到一个左眼睛大的人,在不考虑其他类似的家族的情况下,你首先会想这个人是不是跟左眼大家族有关系,因此,一门语言入门,就会很多门语言通用,比如最最经典的C语言,C++就是对C语言进行了借鉴,因此两者在很多语法上是类似的,Java(另一个名字C++--)又是借鉴了C++,因此语法也是类似的,相近的还有Python/JavaScript/Php,因此,他们可以统称为类C语言,这也是为什么学校推荐学习C语言,你把他们借鉴的祖先都学会了,那你学那些儿子孙子,不也是手到擒来,因此,你会发现,那个C语言很好的同学,C++也会学的很好,Java也会很好,Python也会很好,而一个C语言学的不好的,其他语言一般也会很好,毕竟这些语言是一脉相承的,很多共同点,那么你有一个点没学会,那么后期可能就在众多类似的语言的相同地方栽跟头.
-
编程语言的难易程度只是相对于人类来讲的,比如你对这门语言的理解,跟你的生活是否相近,越跟你的生活相近,那么你思考其他越不费劲,越遥远,你理解越困难,但是,对于计算机而言,只有效率和空间的区别,而没有理解的问题,所以,选择编程语言的本身关键问题就是:
你个人能够快速的理解的编程语言,就是最好入门语言
C语言并不适合所有初学者入门
- 这里提出一个跟其他机构,学校和开发者相反的观点,为什么这么讲呢?因为很多初学者和入门者就是从C语言开始放弃的,一看C语言就放弃了,而且不是少数,是大多数,每年,每个班级,不通的专业,是入门C语言编程放弃的人数一定是大于C语言入门成功的人数,为什么会发生这件事情呢,不是说这门语言很好吗?很容易学习,很容易理解吗?
究其原因笔者认为可能就像人的体质不同一样,不是一门强大的语言,就一定能让所有的人成为强大的编程者,初学者入门编程应该选择的是适合自己的一门语言,而不是所有人都选择一门语言.
C语言本身是一门强大经典的语言,这就像微积分是数学里一个很好的概念和解题方法,但是,不是所有人都能学精通他吧,大多数人还是觉得它好难吧!同理C语言速度快,占用内存小,语言灵活,语法简洁,优点多多,但是,并不是所有初学者能够一入门就领悟到这些,并且可以快速使用吧!
编程入门的前提条件是热爱与兴趣,并不是所有人都能对黑漆漆的界面产生百分之三百的兴趣吧!
C语言适合基础好的小伙伴学习,那么,什么是基础好,这个标准是什么呢?那大概就是在学习C语言之前要学习一些课程比如:数据结构,操作系统,计算机组成原理,算法,程序设计,如果对上述知识或多或少掌握或知晓一些的小伙伴,确实看到C语言也没什么难度,但是,对于那些连操作word,excel都费劲的小伙伴,你让他学习C语言真的是一种痛苦,因此,对于基础课程掌握很好,概念通晓,原理熟知,计算快速的小伙伴C语言真的像它的优点一样能够闪闪发光惹人爱,而对于那些基础不是很好的小伙伴可能要做一些其他的选择.
程序=算法+数据结构,如果数据结构理解的不透彻,对于c语言中的数据类型理解起来就很费劲,尤其是让你对每个变量定义数据类型,那真的是让初学入门者十分蒙圈的问题,因此,想学习好C语言,又基础不好的小伙伴,在学习C语言的时候,其他是在学习四门功课:数据结构,算法,程序设计和C语言,这样入门的小伙伴多么困惑啊!
所谓"天下武功出少林",C语言就是编程语言中的少林寺,但并不是所有的少林弟子都是武学宗师,你看看虚竹在少林那么多年,也没学成什么,出了少林反倒成了武学高手,还是后期的天龙天花板,因此,也许你是另一个虚竹,就要走出来,看看其他的编程语言.
c语言对于初学者难在哪里?
难点 | 描述 | |
---|---|---|
专业术语 | 很多想要入门的初学者都会在这一步上徘徊很久,找到一门入门书籍,每个字都认识,放在一起就是不知道什么意思,归根到底就是专业术语的储备不够,就像你读一篇英语文章,有你认识的单词,有你不认识的单词,何在一起必然你也很难连贯的理解整个句子的含义,熟悉专业术语就像理解众多单词一样,只不过这次不是记住单词,而是记住名词解释. | |
翻译 | 很多初学者学了编程,但是,看到编程题目很难将汉字转化为程序,究其原因就是难以将汉字的表达方式转化为程序的代码形式,这个就像你读数学题目,要找到已知量和未知量,而程序需要找到什么是变量,什么是值,在哪里变化,而这种操作,本博主认为就是在翻译自然语言到程序语言的过程. | |
数据结构 | 由于这门语言是一种强类型的语言,因此,你要想很好的使用必须能够清楚的知道一个量到底是什么数据类型,而这个类型就要学习一门课程叫做"数据结构",因此,学习前还要理解数据结构,才能很好的使用这门语言. | |
语法 | 语言号称是语法简介,但是,这门语言的语法灵活性很高,因此,变化的方式很多,很多初学入门者很难快速的找到语法规律,同样一个题目,可能有多种编写方式,而初学者对于这种变化是很难快速直观的感受到的. | |
数组 | 这个概念可以跟数学的集合概念相互映衬理解,同时还要有线性代数的基础,毕竟数组的很多操作都是在遵循线性代数的规律,线性代数学的好的小伙伴,在这里还是能够很好的驾驭 | |
算法 | 这个概念在数学中叫做解题步骤,在计算机领域又进行了自己的定义和抽象化的描述,因为计算机的同一个题目很多时候,有多个解法,所以一般算法是不固定的,这样很多初学者就会产生困惑,到底应该怎么做这个题目,一个题目可以用for循环,可以用while,可以用do while,那么我该用哪个,也是初学者很困惑的问题 | |
内存溢出 | 这个问题也是经常遇到的,因为这门语言比较靠近底层,因此,需要研究内存的问题,就要学习操作系统这门核心课程,因此,很多初学者也是不甚理解 | |
指针 | 这可以说是C语言的灵魂也不为过,但是,指针的操作又涉及了很多内存,内存地址的问题,这些问题也是要理解一些计算机组成原理和操作系统才会更好的理解概念,因此,有这两门的基础,还是会更好的理解这个概念. | |
结构体 | 结构体本身就是在现有的数据类型不够的情况下,自定义一个数据类型,这里也需要有数据结构基础傍身,你才能快速理解使用. |
- 以上就是笔者在入门C语言的时候发现的问题,当前抱着一本c语言入门的书籍,真的产生了上述的困惑,这里分享一些,可能很多小伙伴还有其他的问题,欢迎讨论,作为一个想要入门C语言的小伙伴,尽力解决上述问题,才能更好的入门C语言.
面向对象语言的推荐
-
如果你是上述入门C语言困难,又想学习编程语言的小伙伴,那么,可能面向对象的语言也是一个不错的选择,C语言是一个面向过程的语言,看看刚刚的图片可以知晓,它是比较接近底层的,因此,他比面向对象的语言更加难学,因此,入门语言的小伙伴,你可以选择相对C语言更简单的面向对象的语言,比较经典的是C++/Java/Python,难易程度也是可以这么排列的
C++<Java<Python -
如果你对学习C语言入门比较有阴影,那么,可以选择在外型上比较差异大的Java,但是,Java需要配置环境变量,Python也需要配置环境变量,好在现在有很多网页上直接运行代码的方案,可以解决初学者对于环境变量的配置困难,但是,网页版的环境无法实现输入功能,这也是一大困难,因此,最好还是能够熟练掌握环境变量的配置.
-
Python是目前很多985高校推荐的入门编程语言,斯坦福大学也是用这门语言教学入门,可能一些高校发现了C语言对于初学者的困难程度和痛苦,Python相对于C语言需要经常强调数据类型来说,它是一门弱类型语言,你不用关注每个变量的数据类型是什么,这对于数据结构基础不好的小伙伴,简直就是一个福音,因此,对于数据结构不好的小伙伴,选择Python入门编程,无疑也是一种快乐.
前端开发语言和后端开发语言
-
前端和后端在很时候是相对的,这里做个简单的模糊比喻,比如你的计算机是一个台式机,你从显示器看到的内容可以理解为是前端,你的机箱主机就是后端,因此,简单的理解就是可以看到的内容就是前端的输出结果,而你一般看不到的就是后端的内容.
-
所以如果喜欢可视化界面,做什么都可以直观的,快速的看到的小伙伴,在编程语言入门的选择的时候,就可以考虑从前端入门,这种方式的难度又比从后端入门更加简单快速了.
-
这里推荐的前段入门编程语言选择就是HTML+CSS+JavaScript,这三个也被叫做网页三剑客,如果能够学会这三个也是属于编程入门,JavaScript相对于后端多数开发语言都是更加简单,便捷的,没有数据类型的复杂概念,能够快速在网页上看到结果,对于很多习惯可视化的入门者都是友好的,对于零基础的小伙伴也是一个好的入门方案,而且,JavaScript也是类C语言,学过后,再看C语言,你就会发现你能看懂很多了.
编程语言选择总体推荐
序号 | 重点 | 描述 |
---|---|---|
1 | 难易程度怎么样? | 前端难度<后端难度 面向对象语言<面向过程语言 高级开发语言<低级开发语言<机器语言 |
2 | 环境配置是否复杂? | 前端环境 < 后端环境 < 系统环境 |
3 | 是否可视化界面? | 前端开发语言的可视化程度大于后端开发语言的可视化程度 |
4 | 编译器操作复杂度? | 后端开发语言的编译器操作复杂程度大于一些前端开发语言的编译器(比如HTML是记事本难度就比其他集成编译器简单很多) |
5 | 学习的时间成本? | 前段开发语言的入门学习时间少于后端开发语言的入门时间 |
6 | 相关性学习时间的长短? | 网页三剑客学习的相关性时间学习少于整套后端语言的学习时间 |
入门初学者对于语言初期到底要的是什么
序号 | 重点 | 描述 |
---|---|---|
1 | 代码能够运行起来 | 对于一个入门初学者,不需要深入全面的了解各种知识原理,最重要的第一步,是让自己写的代码都能够跑起来,跑起来能够带来信心,跑起来能够带来力量,跑起来能够支撑你继续努力的学下去. |
2 | 能够处理简单的小问题 | 在代码跑起来的时候,一定会遇到这样的,那样的问题,比如少写了个分号,少写了个括号,单词拼写错误,这种常见的问题,自己能够找到并且改正,也是进步的原动力,这就涉及到认真,眼神好和会读报错信息 |
3 | 会使用百度工具 | 很多初学者入门之后,能够发现问题,能够找到问题,但是,解决问题能力还不够,因此,要学会使用百度,很多初期的问题都是可以在百度上找到的,每次遇到问题,也要记录总结,才能不断进步 |
4 | 熟练安装编译器和配置环境 | 这个难倒无数初学者的问题,真的是做个开发者必备的技能,所以,要把它的属性点点满,首先找到一个图文并茂,步骤清晰详细的安装文档,然后,比对安装的编译器版本,看看其可视化的界面是否跟文章基本一致,然后,按照文章的步骤仔仔细细一步步执行,很多时候就是细节出了小问题,因此要单独拿出一部分时间,就是反复的做安装这个工作,安装和配置环境真的是一个孰能生巧的事情,就跟你组装模型一样,反复多做几次,十次每次都认真做,一定能够将这个问题解决的 |
5 | 选择一门语言入门后,一定要把它完整学完 | 很多初学者选择一门语言后,今天看两个觉得好简单,然后,明天遇到困难了,就去学别的简单的内容了,这样是不对的,无论选什么语言,都要认认真真从头到尾完整的学完一整套,遇到不会的可以记录下自己的问题,很多前期的问题,都会在整套学完得到解答,不要死扣一个概念原理不放,初期的时候,由于知识储备不够,生扣一个概念和原理,是不明智的,就像考试遇到不能马上解答的题目,老师也是建议你先跳过,如果时间充裕在最后过来思考一样,计算机的学习也是遵循这个原则,先整体后局部,整体系统学过,再反过来思考曾经的问题,就会形成知识覆盖,因为学习了更高级的知识,所以,初级的知识问题就会迎刃而解,你学会了二十以内的加减法,让你做十以内的加减法,肯定是手到擒来. |
总结
-
条条大路通罗马,有人出生在罗马,所以,面对同一个问题,站在不同的角度,不同的资源,不同的逻辑思维,所得到的结论,会存在千丝万缕的差异,因此,编程语言入门也是这样的,要根据自己的实际情况出发,具体问题,具体分析,你记忆力不是超级好,学习新事物的能力不是一级棒,没关系,你换个方式方法,依然是王者,没有最好的解决方案,最适合自己的就是最好的,C语言是强大,是鼻祖,是权威,但是,也不是保证人人都可以学会的语言,如果你走C语言入门学不同,学不懂,学着费劲,那干嘛不找一个更轻松,更便捷的解决方案,C语言就像武功中的独孤九剑,可以解决计算机里所有的问题,可是你是个连劈砍都没学会的人,给你剑谱你也看不懂学不会,不如给你一份初级剑法入门,等你学会一套剑法,再去领悟高深的剑法,岂不事半功倍,权威的是好的,但不一定是适合你的,就像给你马云一样的创业的资金,你也不一定成为第二个马云,成功只能借鉴,不能雷同,入门编程只能选择自己合适的,不能靠人云亦云,同样在一个教室上课,同样一个老师,还有打满分和不及格的,你就能说不及格的同学一定不如打满分的同学吗,那只是不及格的同学在这个方面不擅长,没准不及格的同学打游戏一个虐五个,打满分的同学打游戏一个打不过呢,所以要善于发现自己的长处,不断找寻适合自己的,才是学习和理解一切的最好方案,选择比努力更重要.
-
实属个人观点,觉得喜欢的可以关注,点赞加收藏,您的支持就是所有爱好者的前进动力.