百科问答小站 logo
百科问答小站 font logo



C语言初学者该怎样去更好的学习C语言? 第1页

  

user avatar   zorrolang 网友的相关建议: 
      

虽然这个问题问的是怎么更好的学习C语言,但是我忽然想到一个认识的人,让我想到了导致初学者永远走不出“初学者”阶段的常见误区。

那是我刚上大学时的一个同班同学,来自中国最一线的城市,家庭条件很好,这一点从他平时配置的电子设备等就能看出来——配置超高的电脑、最新潮的游戏机、最新潮的手机等,这些东西对于二十年前大学生来说即使拥有一样已经是很不错的了。

虽然他的条件很好,但是他的性格有些孤僻,周围没什么朋友。我是一个每天早出晚归泡在图书馆的人,自然也和他没什么交集。直到大一下学期开始学习C语言,在某一节上机课上他主动坐到了我旁边,对我说“听说你编程挺好的?”我抬头看向他,说“咳,咱们都是学生,能有多好啊,就是喜欢学而已。有兴趣的话以后大家可以一起讨论问题。”他听后很高兴,从那时候开始每次上机课他几乎都坐我旁边,我们也一起从C语言定义一个变量开始一直学完了C语言的基本语法。

学过C语言的人都知道,C语言在语法期的时候会有很多有意思的小问题,比如阶乘、非波那契数列、质数问题、输出金字塔/心形、水仙花数、冒泡排序等。这些小问题都是初学者在还没有足够知识研究复杂问题前,为了熟悉使用C语言的基本语法而做为练习用的。在初期我们经常讨论有不同的方法/语法解决这些问题,也会傻乎乎的比较谁的更快。很快大一就结束了,从大二开始进入很多专业基础课和专业课的学习,这些专业基础课和专业课初期看来和C语言好像脱离了关系,甚至以度让学生们觉得和它们以为的编程脱离了关系,因为大部分时间都在学习很多枯燥乏味的理论知识,像是模电、数电、微机原理、汇编语言、操作系统、计算机网络、编译原理、数据库等,软件项目管理、网页/站设计、Jave、.net、UML等……这些专业基础课或专业课大部分都很枯燥,很多人都会不耐烦,学不下去,觉得这些和自己理想中的“编程之路”越来越远,然后开始怀疑学校的课程老旧和现实脱轨(当然也确实有点),这样以后一定会把自己耽误了。所以就开始不好好学习课程的内容,转而去想办法“自学”自己觉得是正道的东西。

我的那个同学就是这类同学的一个典型,他开始天天跟我抱怨“你说咱们天天学的那些有什么用,纯粹浪费时间”。我劝他说“我们可能还处于一叶障目,不见泰山的状态吧。可能我们的课程确实比较枯燥,但是认真学校去应该是有用的。”但是他不听,认为自己要“拯救”自己,结果就是:

  • 当我们学模拟电路的时候,他觉得各种CAD类绘制电路的软件才有用,等我们开始设计和绘制电路的时候,他根本设计不出来,只能照着别人现成的原理图画。
  • 当我们学习信号系统的时候,他觉得会用matlab才是牛B,但是当我们开始用matlab模拟和解决信号系统的问题的时候,他根本理解不了傅里叶变化那些计算。
  • 当我们学习计算机网络的时候,他觉得不如直接去学习思科路由器那些东西,结果当我们开始实际抓包研究各层协议的时候,他因为理论不足不光没有学会思科路由器,连数据链路层、网络层、传输层里的重要协议是怎么回是都说不出来,甚至连“端口”是什么,为什么要有“端口”这个概念都不知道。
  • 当我们学习操作系统理论的时候,他觉得C语言吃透了就能写出操作系统,于是不断的研究C语言的所谓高级/酷炫的语法和用法。熟不知C语言根本没有“吃透”一说,能吃透的是计算机科学的知识,而不是C语言语法。结果当我们开始在486上搭电路、操作内存段和页的时候,他连GDT, IDT, LDT,TSS,CR0,CR2, CR3等是什么怎么用都不知道。

……

就这样我们毕业了,毕业后我们少有联系,偶尔的一些寒暄中他还在说着C语言那些稀奇古怪的问题,还在用自己根本不足的知识去试图理解着高几个层面的很多问题。就像大一刚学C语言的的时候,我们傻傻的讨论递归的过程到底是什么样的,讨论能用char的时候不用int更省空间,讨论能用一行写完的程序不用三行的做法多么高级……现在回头看,会觉得当年的我们多么的懵懂有趣。然而如果很多年过去了你一直还都处在这个水平线上看问题,那真的就不有趣了。

可能有的人会说,为什么我不提醒我的同学走出误区。你们可知我说了多少次,根本没用。每次他落下课程了,他问我问题时我根本没法用他现有的知识给他解释清楚,我就跟他说:“你得把这几本书的知识补上才行,你看不起咱们的课本你自己买别的书也行,总之你得把知识掌握了。”可是结果就是他买了很多很好的书,但是一本都看不进去,总是想着能通过捷径获取到别人好几倍时间获取到的知识。这就是问题的关键,他不是不知道自己该学什么,他是真的“懒”,总是给自己找“舒适区”,然后不敢走出去。当大脑有了对学会某一东西的计划后,大脑会给人一种你马上就要掌握了的“满足感”,然后人们就容易活在这种“满足感”不愿意付出实践。等真的到开始实践的时候,发现“好难……”然后就托下去了。

所以我的观点就是,学习C语言根本谈不上什么方法不方法,只要你不懒就行,学习C语言最好的办法就是尽早完成并脱离对C语言语法的学习阶段,进入正式的对专业科学知识的学习。脱离了计算机科学(或其它能用到C语言的科学)知识,C语言是最没用的语言。




  

相关话题

  有什么像a=a+b;b=a-b;a=a-b;这样的算法或者知识? 
  大括号不换行的坏处有什么?为什么有人不换行? 
  怎样用c语言画一个"三维的球体"? 
  为什么现在有很多人,甚至大学授课还在坚持 VC 6? 
  C/C++ 数组大小需要是2的倍数吗? 
  C 语言枚举 end 是做什么用的? 
  一门编程语言,先将代码编译为C,再由C编译器编译为可执行文件,是否可行? 
  学习 C/C++ ,有什么书籍推荐? 
  为什么这么使用 C 语言 fgetc() 函数会出现乱码? 
  为什么我写的c语言三个数求最大值,最后出来的结果总是第一个? 

前一个讨论
如何对事物进行归因?
下一个讨论
如果硬盘速度足够快,内存这东西是不是就可以取消了?





© 2024-11-22 - tinynew.org. All Rights Reserved.
© 2024-11-22 - tinynew.org. 保留所有权利