C/C++语言学习的策略

时间:2022-11-22 22:58:18


断章取义

C语言出现50年了,有很多内容已过时,至少有百分之二十的内容没有实用价值。

C++更过份,对程序员来说,至少有百分之七十的内容没有实用价值。

Linux系统也是,命令上千个,对程序员来说有用的不超过50个。

人的精力是有限的,没必要去折腾那些没有实用价值的知识点。各位当中有些人可能已经有基础,会发现在我的课程中会缺一些内容,如链表、排序算法、二叉树、红黑树、C++的输入输出和流、stl等,缺了是因为这些知识没有实用价值,学了之后除了用来吹牛别无用处。

现有的C/C++的教材中,大部分是教授写出来的,没有几本是程序员写出来的,毫不夸张的说:没有经过实战的教授在精英程序员面前,始终就停留在小学生水平。

我学习C语言是从谭浩强的《C程序设计》开始的,这本书过时很久了,谭浩强已经仙逝多年,他的书也应该随他一起进入天堂,不应该成为出版商赚钱的工具。

《C Primer Plus》和《C++ Primer Plus》这两本书写得不错,作者功力深厚,每本书有1500多页,拿在手上非常有份量。但是,在我看来,实在是太啰嗦,只介绍知识,没有重点。

网上也有不少视频教程,但是,大部分的教程只是把书本上的内容搬到视频中,没有新意。

 

培养程序员的感觉

在自然界,每种动物都有它们交流的方式,山中的野鸡、树上的小鸟,如果懂得它们的语言就容易抓住它们,只是普通人不知道而已。

与人类的语言相比,动物的语言非常简单。

与人类的语言相比,计算机的语言也很简单,初学者认为难是因为不适应,不习惯。

所以,对初学者来说,培养写程序的感觉是最重要的事情。

 

如何培养程序员的感觉

首先,程序员是写出来的,不是看出来的。

去过紫禁城的人都知道,不管你有多么聪明,绕多几个弯,迷路是大概率的事情,但是,那些在紫禁城中搞卫生的工人一定不会迷路,是你不如搞卫生的工人够聪明吗?肯定不是,是你不习惯,不熟悉。

各位在网上看过的美女图片或视频成千上万,不管看什么样的美女,你肯定是脸不红心不跳,但是,如果有一个美女真的出现在你的面前,估计你会手足无措,言语结吧。

一个知识点,看懂的难度如果是一,自己实现的难度就是三,熟练使用的难度是八,融汇贯通应用在项目中的难度是十。就像是练武学招数,看别人打很容易,自己练习就难了,各种招数融会贯通和对手实战,需要时间的积累。那些《从入门到精通》的教材都是屁话,屁话为什么也有人信,原因很简单,它利用了人性占便宜走捷径的弱点。如果真的能从《入门到精通》,程序员就不值钱了。

任何事情,不管看多少遍,都不如做一遍。写程序也是这样的,编程语言并不难,而是你不了解,不习惯,不熟悉。有些人还可能会害怕动手。

看别人的程序,看别人写程序,和自己动手写程序的感觉是不一样的,就像网上的美女和现实中的美女一样,那感觉是完全不同的。

怎么做?行动起来,多写程序,就习惯了,熟悉了。开始的时候,写出的程序很垃圾也没有关系,大家都是这么过来的,天赋异禀的人是极少的。就像画家,我从未听说某画家从小就是画家,他们小时候画的画和平常人画的也没什么区别,达芬奇不也是从画鸡蛋开始的吗。

其次就是应用的经验了,应用的经验要通过做项目积累。

在有些的C语言教程中,经常让学生用C语言去做一些与实际开发无关的题目,最讨厌的是数学题,这是最大的败笔,因为要完成这些题,考的是数学方面的知识而不是程序员的知识。

我回忆起当年我是菜鸟的学习过程,详细了解初学者的困惑,把C/C++语言的基础知识做了总结,每个知识点写一篇文章,约50篇。

在我的教程里,安排了很多课后作业,课后作业有两个目标:一是培训学生写程序的感觉,熟悉写程序的方法;二是巩固所学的知识点。还有,我的课后作业是实际开发的需求为导向,作业内容是程序员常用知识和编程技巧。

 

学习步骤

企业对C/C++程序员的需求中,至少70%以上是Linux系统平台下的C/C++程序员,所以本教程的开发环境为Linux,Linux的开发环境会让初学者不适应,不习惯,但这是正确的方向,我不可能为了迎合学生的喜好选择windows平台。

1、基础知识的学习

基础知识包括C语言基础、C++语言基础和Linux编程基础。

本阶段重点在培养写程序的感觉和介绍C/C++程序员在日常工作中经常用到的知识。注意,培养写程序感觉比C/C++的知识点更重要。

我个人认为学习C/C++语言,如果是零基础,最艰难是基础阶段,这时期学生还不具备程序员的思维,也没有写程序的感觉,沟通比较费劲,用广东话说就是鸡同鸭讲。

学生有了写程序的感觉,上了道,就会慢慢顺起来。

基础知识的学习大概需要两到三个月(全日制)。

学习完基础知识之后,如果你的年龄在23岁以下,我建议你先去找工作,工资低一些没关系,只要能养活自己就行了。在我看来,先进入这个行业,有公司给你发工资,有实战的环境,边工作边学习是最好的方案,生活没有压力,学习更有动力。(23岁以下的年龄,是大学生毕业的年龄,在这个年龄段,不管是哪个学个毕业的,大家都是菜鸟,不懂是正常的,如果你在面试的时候表现出积极上进态度,找个实习的岗位不是太难的事情。)

如果你的年龄到了25岁,学习完基础知识之后就去找工作可能不好办,因为你的年龄与能力不符,公司未必会要你。(年轻人不懂很正常,年纪这么大了还不懂就不应该)

2、职业技能的训练

第二阶段的学习内容以实际项目的需求为导向,把学生培养成职业的程序员,以能找到工作为目标,时间大概需要两到三个月。

在我的课程中,不玩俄罗斯方块,也不玩打地鼠、贪吃蛇、球球大作战等无聊的东西。

企业对C/C++程序员的需求中,数据通信、数据处理和数据仓库的职位占了至少50%以上。

所以,我们要玩数据。

在我的基础课程中,有socket通信、多进程、多线程的课程,但这些都是基础中的基础,离实际开发还差得太远。

本阶段的学习以掌握工具的使用为主,包括我的开发框架和工具,提升socket通信、多进程、多线程和数据库的实战技术,数据库以Oracle为主(My SQL太业余),完成一个实战项目的开发(数据中心项目),还可以扩展到手机APP项目,丰富自己的项目经验。

通过本阶段的学习,大概可以达到我20-30%的功力,技术水平可以超过三年工作经验的程序员,项目经验约一至两年。

学习完成后,不管你是什么年龄,都去找工作,问题不大。

3、精英程序员

各位在工作之后再来进入第三阶段的学习,在本阶段,我将重点介绍我二十年来的实战技术和项目经验。主要包括以下方面:

1)提升程序员的工作效率;

2)提升服务程序的效率;

3)提升服务程序的稳定性;

4)丰富项目经验和实战技能;

5)突破程序员的瓶劲。

本阶段的目标是提升程序员的能力,培养以一当十的精英程序员。

有没有万人敌的技术? 有,还真有。有这么一句话:流氓不可怕,就怕流氓有文化。如果能理解这句话的含义努力的学习文化,你必定成为精英,否则就是程序猿,一世为奴。

 

初级阶段的学习方法

先把第一章到第十七章的视频全部看一遍,大概了解一下,因为有很多知识是交叉的,但是不要看课后作业。

再把第一章到第十七章的视频内容学习一遍,争取完成简单的课后作业。

再再学习《gdb调试》章节,在写程序的时候会用到它。

再再再把第一章到第十七章的视频内容详细的学习一遍,争取完成全部的课后作业。

之后的内容,最好是一步一个脚印走下去,如果有什么不懂的地方,或以向别人请教或在QQ群中提出问题。

我的课程内容是精心整理的,某些知识点可能没有提到应用场景,但绝对不会是没用的知识。课程中没有提到的知识可以了解一下,但不必深入学习,意义不大。

学习不要贪快,欲速则不达的道理大家应该明白,学习的重点是培养写程序的感觉。

不要记笔记,不要记关键字,不要记函数的参数,忘了就忘了,忘了是因为没有实战,所以,到了项目实战课程的时候,忘了内容很自然的会全部想起来。

不要用手机看视频,看着看着就想睡觉,学习的过程是边看边写,没有看出来的程序员。赵括,知道不?就是那个空读兵书的那个不成器的家伙,只看书看视频不写程序,和赵括没什么不同。

翘着二郎腿,嘴里叨着烟,挥舞二指禅,一副吊儿郎当的样子,是成不了程序员的。

可怜之人,必有可恨之处,已经过去的就算了,不要埋怨,也不用后悔。端正态度,现在开始学习还来得及。将比别付出更多,这很公平。

版权声明

作者:码农有道

如果文章有错别字,或者内容有误,或其他的建议或意见,请您留言指正,非常感谢!!!