欢迎来到HDUISA wiki,如果这是你的第一次到来,请点击此处注册

是的,你看到的了一篇编程入门的文章。本文以C语言作为实例,旨在使用简明直白的语句让初学者知道如何学习编程。

为什么选择C语言

在这之前必须强调,语言不过是编程的工具罢了,学会了一门主流语言常用的语法你就正式的入门了。初学编程,其实有很多的语言可以选择,我 推荐使用C语言进行入门,先比较一下各个语言。

  • C语言:很适合初学者,有点难度,同时帮助你理解计算机系统,个人推荐。
  • java:很适合编程初学者,语法简单并且严谨,但是对理解计算机系统没有什么帮助。
  • C++:绝对不要使用C++作为第一门语言,他的难度与复杂度绝对榜上有名。
  • python:适合初学者,简单并且实用,哪怕你以后不干代码这一行,也推荐你学一下python,极不利于理解计算机系统。

我推荐使用C语言入门的原因如下:

  1. C语言的历史十分悠久,这意味着你在学习过程中所遇到的问题别人肯定都遇到过,在网上一查一般都能找到答案。
  2. C语言的难度适当,语法简单,大概和高中的数学差不多?
  3. C语言与计算机发展密切相关,学会的C语言对于计算机系统的理解有很大的帮助。

在此文接下来的部分,如无明确指向,那么所有与编程相关的描述使用的都是C语言

去找一本好书

还有一点需要说明,本文的目的是引导新人如何掌握编程的方法与思想,学习的方式为自学,阅读本文无法使你快速找到工作

书籍不仅是对编程语言语法的描述,更是对于编程思想的描述,语言迟早会过时但是思想会伴随你一直走下去

第一本书籍的选择十分的重要,首先教材的内容不能有谬误,主体脉络清晰,同时能描绘出语言背后的思想。

那么,选择书籍优先选择经过了时间的检验并且经久不衰的书籍,学习C语言我会推荐 :

  • 《C语言程序设计》(第2版)(The C Programming Language, Brian W. Kernighan & Dennis M.Ritchie)。
  • 《C Primer plus》第5版

然而,由于这几年编程的火爆,市面上充斥着大量糟糕的书籍,比如学校所使用的课本、xx天精通xxx、以及带有谭浩强名字的书籍,阅读这种垃圾对于学习是有害的。所以在学习之前务必使用百度搜索一下书籍/课程的评价,避免时间与精力的浪费。

选择自学的教材还需要注意一点,入门时不要去使用字典类的书籍,就比如你要学习英语肯定是使用英语教材而不是英语字典,一本教材的厚度应该在五百页之内,而字典的厚度超过千页。

教材的取得可以通过网上下载电子书,可以去图书馆借阅,也可以自己购买。

我真正应该学习什么

todo 更加形象的描绘编程的思想

学习写代码其实是通过编码理解并熟悉编程的思想,所谓编程的思想最就是程序的基本组成:变量的定义、流程控制、循环结构、api的使用,对于c语言还要额外学习指针。

  • 变量的定义:如何使用/定义/赋值一个变量,变量的类型需要注意的地方。
  • 流程控制:if else 语句怎么使用,不要写if(a=b)这种代码;函数怎么用,如何传入参数传出返回值。
  • 循环结构:这个要花一点时间,for while循环怎么使用,尝试理解/编写嵌套循环。
  • api的使用:学会上网查找各种内置函数的使用方式。

实际上,所有的程序都是由以上这些基本的单元组成的,打开书籍的目录,每一大章就是一个基本单元模块。C语言的语法比较简单同时也意味着每一个语法都十分重要。

掌握了这种逻辑方式你就掌握了程序的基础原理,这和语言无关。当然这种基础原理不止这一点,你可以通过不断的接触新思想掌握更多。记住掌握整体的思想。

一个明显的错误学习方式就是死记硬背一些没有意义的东西,比如背诵printf/scanf的格式以及背诵不常用的操作符优先级。不幸的是,仍有一些课程/教师强调这些无用的东西。 学习编程应该是在实践中学习,在使用中学习的,记不住的东西在用到时去网上查找即可。

对于初学者,真正需要背诵的是一些“反逻辑”的语言特性,这些特性与正常人的直觉不同,为了防止写代码时出现奇怪的bug因此必须记忆。幸好C语言中这种“反逻辑”的特性并不多:

  • 0. 数组的元素从0开始而不是1。
  • 1. 判断使用的是 == ,比如if(a == b) 而不是 if(a=b),同时需要注意浮点数的判断方式。
  • 2. 类型转换各种问题,比如 float c = 1/2; c的值为0.0 而不是0.5。
  • 3. define语句需要使用括号包裹。
  • 4. 指针的用法,这不容易所以越发注意

编码风格

“编码风格”指的就是:让其他人看一眼就知道你的代码要干什么。再说一遍:让其他人看一眼就知道你的代码要干什么。

由于很多的历史原因,C语言的语法十分的开放,以至于允许写出 a+ ++ ++b 之类的语句并且成功运行,这些语句最大的问题是可读性差到别人无法搞清楚到底在干什么。

编码风格的练习会伴随你很久很久(因为这还和设计有关)。对于新手最开始只有下面2个要求:

  1. 把名字写对,这里包括变量的名字,函数的名字,要一眼看上去就知道它用来干什么。
  2. 正确的分割每一行代码,不要把所有的代码挤在一行里,同时一行代码只干一件事。
  3. 提炼代码为一个个函数,一个函数也只完成一个功能。

想知道更多关于编码规范的事情,可以查阅大公司发布的C语言编码规范。

学会调试

调试发生在代码运行时,调试对于编码的重要性甚至高于编码本身,因此尽早熟悉。

调试的第一步是学会看报错信息,一般报错信息会告诉我们在哪里出现了什么问题,如果看不懂就复制到搜索引擎去查这个报错是什么意思。

然后使用调试工具调试出错的代码,找到并解决问题。

对于初学者,调试工具只要求会用ide自带的调试器,应该熟练运用以下功能:

  • 代码断点
  • 单步调试
  • 变量信息查看
  • 了解常见报错

提问的正确方法

我十分反感下面2种问题:

1. 扔给你一个截图,什么也不说,就说自己的代码有bug,代码写的也乱七八糟,或者连代码也没有只问你“这报错咋回事啊,那咋办啊?”。

2. 给我一个一看上去就不是正常人写的代码,比如超长的无括号的表达式,然后问这个值算出来为啥是xxxx啊。

正常人问问题的方式应该是这种格式:

我的代码在什么地方出现了什么什么问题/报错。然后在这里把完整的代码放上去,如果代码过长就放有问题的函数,最好不要使用截图尤其不要使用手机拍屏幕。

然后说,我已经使用过什么方式尝试去解决这个问题,但是这个方式怎么怎么了。

其中最重要的一点,先尝试自己通过搜索引擎解决问题,再去问别人。

总结

  1. 选择正确的入门书籍
  2. 语言只是编码的工具,借助这一个工具学习编程的思想
  3. 学会使用搜索引擎,遇到问题先尝试自己解决
  4. 在实践中学习编程,光看书毫无作用,切忌死记硬背
  5. 坚持不懈

我无法教会你的

现在你已经是一个大学生了,这意味着不会有补习班逼着你,老师只负责上课,也没有班主任之类的角色来注意你的成绩,担心你可能上不了好学校。对于部分人来说,大学应该是求学之路的终点,并且真的很舒服。学校没有任何的升学的压力,考试只要60分就可以通过,周围的人都在沉迷同一个游戏,那么你真的还有决心认真的钻研技术吗。

这个教程或者文章只能告诉你一些学习的弯路以及捷径,学习的痛苦是无法被避免的,最后的最后还是要看使用的人有没有学习的毅力,很多人一辈子也入不了门。

说了这么多,一句话:现在就靠你自己了。

打印/导出