首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

简述C和C++的学习历程

总是被问到,如何学习C和C++才不茫然,才不是乱学,想了一下,这里给出一个总的回复。  一家之言,欢迎拍砖哈。 1、可以考虑先学习C. 大多数时候,我们学习语言的目的,不是为了成为一个语言专家,而是希望成为一个解决问题的专家。做一个有用的程序员,做一个赚钱的程序员。我们的价值,将体现在客户价值上,而不是语言写得好不好看。 C++是C的一个面向对象的解释,C++为C扩充了大规模工程应用,复杂的系统结构的组织和掌控方法,但是,我认为,C++骨子里还是C的。 毕竟,解决具体问题,每个函数内部,都是用C的方式写程序,还是面向过程的。 因此,想要学习好C++,我的建议,先学习C,先学解决问题的能力,再讨论解决大问题的能力。就是先学习怎么走路,再学习怎么跑步。 2、学习C的过程中,一定要理解结构化编程思维。 为什么呢,我前面有文章说过,软件语言的发展过程,就是一个数据私有化的过程,大型工程应用,强调高内聚,低耦合,模块化设计,保持代码最大的灵活性和安全性。 这是现代工程化开发的核心和灵魂。 因此,利用C这门语言入门,借此理解结构化开发思维,可以说是个很方便的路子。因为C的函数,本来就是为重用做准备的。同时,全局变量和cpp内部私有变量的差别,其使用原则,这些都能学到很多结构化开发思维。 3、开始学习C++ C++不难学的,很多人觉得C++难学,其实是因为它在C之外,又提供了很多的概念,尤其是对象,很难以理解。 不过我经过这么多年,把这个问题反而看淡了,我认为面向对象相对面向过程,仅仅是结构化程序设计的一个具体体现,是编译器提供手段,强迫程序员必须遵循数据私有化的一个实例,C++和C的关系,最核心的莫过于此。 现在我们回到C再看看,如果我们把一个全局变量,写到一个cpp里面,并且在对应的h文件中不声明,它是不是就只有这个模块可以使用?它是不是就是私有变量,以这个理解,类能明白了吗? 4、学习C++的深入技巧 C++在类的基础上,经过这么多年的发展,其实提供了很多深入的概念,看起来很复杂,其实我看也很简单。比如模板,我的理解就是“类的类”,大家说是不是? 既然模板理解了,STL,ATL这些,静态模板库,动态模板库,还难理解吗?就是一大堆类的类,可以借此实现很多应用中需要的类,不需要程序员再自己写而已。 ok,STL都理解了,泛型开发还难吗?所谓泛型开发,其实就是我做一个模板,来定义一套算法规则,但是呢,我希望这个算法规则,能进一步抽象,对核心数据类型不要限死,我把各种数据套进去,都可以用,这样,仅算法这部分,我不需要重写了。你想想是不是这个道理? 学到这里,C++和C,其实已经差不多了。再学语言,就是求全责备,过于钻牛角尖了。 5、学习应用开发 前面说了,学习语言,目的不是让别人认为自己是专家,是为了写程序赚钱。因此,语言学完,要学习应用开发。 什么叫应用开发呢,我会一门语言,但是,客户不懂,客户说的很直接,在Windows下给我写个程序,我要什么什么功能。为啥Windows呢?因为我习惯。 OK,很多时候,应用开发要尊重客户习惯,一般说来,语言这个东东,还是要结合具体平台的开发,才能开发出有意义的应用程序卖钱。那么,一般说来,客户端是Windows系统,服务器是Linux,这些都是行业习惯,嵌入式不好说,各种平台都有,Palm,S60,Linux,WinCE,等等。要根据自己的目标客户来定。 当我们选定目标平台后,有一个问题,选什么语言,很多时候,学生和商用程序员差别就在这里,学生一般没得选,自己会啥就用啥呗,企业里的程序员不会,要先评估需求,看哪个语言更合适,不会的语言,要去学。 ok,假定我们选了C和C++,那么,我们需要选择开发平台,Windows下不用说了,VC,这是最好用的,Linux下呢,gcc,其他的也差不多。 假如我们开发VC,并且使用C++,这个时候,才需要考虑学习MFC了,因为这是微软的标准类库,至少Windows平台下,它最权威,你看见没有,我们从学习开始,走了多少步,才走到MFC?是不是MFC不是学习C++上来就必须学的? 6、学习MFC 学习MFC,很多人一上来就开始看其体系架构,看得一头雾水,那个模块关系依赖图,我到现在都看不懂。 呵呵,其实不是啦,和学语言一样,我们学MFC的目的,也不是希望成为MFC的专家,而是要利用MFC开发Windows应用程序,为我们赚钱。看见没?MFC是手段,不是目的,目的是开发Windows程序。 其实Windows下,有一套很标准的C接口,叫Win32API,这个才是Windows的标准编程核心,因此,学习MFC,真实的目的是理解Windows程序开发,建议可以先学习Win32API,看来我们又回到C了哈,呵呵。刚开始学C有用吧? 7、Win32API

02

你只是想学好linux而已

这段时间收到了很多学员关于学习上的疑惑,在这些疑惑当中有80%是关于学习方向的疑惑。比如: 1. 我想学好Linux ,是不是应该先学好英语? 2. 我要学习Linux该从那个系统开始,是centos,还是redhat? 3. 我已经学习了redhat,但是看网上有人提到ubuntu,我是不是应该学习下? 4. 我是不是应该把Python顺便学习下? 5. 我学centos6的版本还是7的版本呢,是不是公司里7会用的越来越多了? 诸如此类的问题,这些问题我通常把他归为学习方向的疑惑,或者用个词来概括的话,就是意志力薄弱。 诚然会英语会对你学Linux有帮助,但是如果你把学不好Linux归结为英语不好,就有点南辕北辙了。 随便百度下,你就会看到,各行各业都有人问同样的问题,比如我要学钢琴,是不是应该先从简单的葫芦丝开始学起? 又或者我要学西红柿炒鸡蛋,是不是应该先学会刀工和掌勺技巧,或者把选锅技巧学习下? 那些问 今年18岁还适不适合学Linux的人,以及那些再问 已经26了是不是还能学会编程的人,很多时候他们其实是在问 “是不是有人跟我一样的年纪,比我还笨,但是学会了这门技术?如果有的话帮我举个例子” 说到底这是一种不自信的表现。 学习任何一门技能,学到底都是孤立的一门技能而已,比如Linux,你需要学习Linux系统基础操作,需要学习服务搭建,需要使用这些服务完成架构,需要用这些架构完成更复杂的内容。 每一个模块你都可以认为是独立的,不学Linux基础,一样可以学会数据库,不学数据库一样可以学会服务搭建,不学基础服务搭建一样可以学会架构。 区别只在于如果你没学Linux基础,可能学服务的时候就需要多花些时间弄明白每条命令的作用。 很多人所推崇的从项目开始学编程,也是有道理的,比如你学习SSH框架去做一个OA系统,在做项目的同时遇到啥就不懂,就去补相应的知识就可以了。但是这种方式唯一的不合理就在于违反了人类从容易到困难的学习过程,其实说白了就是信心容易受挫,导致学习的过程容易放弃而已,只要你能坚持下去那你进步是飞快的。 学习系统运维其实跟弹琴的道理是一样的, 技术的学习是手艺而不是知识,如果你要学习知识,可以从系统原理开始学起,先研究计算机原理,在学习编译原理一步一步来,可问题是你不需要懂编译原理,计算机原理,一样可以学习操作Linux。这就像学钢琴,一开始只要记住每个键代表哪个音,然后照着老师讲的弹一遍,比如弹一首最入门的《爱的罗曼史》,直到练熟在进行下一首。音乐基础知识也是老师在练琴间隙传授的, 手艺的好处就是以动手练习为主,看书学习为辅,甚至极端点,初学的时候除了看必要的文档都可以不看书,等有了一定编程基础后再去看书,看完书立刻动手编程去验证书上的理论知识。 所以从现在起不要再去问文章一开始的那些问题了,最应该做的事情就是从现在起开始练习,不停的反复练习。手艺唯一的不好就是在入门的时候需要找人指导,入门了也就可以自己快速学习了。 如果你对于学钢琴不太熟悉,可以想下你当年是如何学会打篮球踢足球的,你从来没问过要学会打篮球是不是应该买个溜溜球先熟悉下,或者我要学习打篮球是不是先从篮球的发展史开始学起,又或者我要学习打篮球是不是应该先学会如何选择篮球场地。 这些你从来没考虑过,而是直接开始打,在打球的过程中喜欢上这个运动,然后慢慢了解篮球的技巧。 所以那些与Linux无关的问题可以不用考虑,从现在开始持续大量的练习,毕竟你只是为了学好Linux而已。至于要不要在学完Linux之后在学Python,学GO ,考虑这个问题前请先学会Linux,否则一切都没有意义。 从更深层次的动机来看,学会Linux,只是为了找个好工作而已,于是你可以自己去看招聘网站,招聘的公司需要什么技能,不需要什么技能一目了然,学习的时候有侧重点会事半功倍。进入公司之后根据自己和公司的目标进行合理的规划,看自己需要精转哪一个方向。 很多时候的很多事情,最重要的不是如何做,而是勇敢的迈出第一步,哪怕你没有看到台阶。摔倒了不可怕,可怕的是你苦苦等待,一直没有开始。我就曾经遇到过一个朋友,从08年开始问我要不要学习做网站,是不是已经过时了,一直问到了2017年,很幸运,在2017年下半年他终于下定决心开始学了,现在已经毕业。在他们老家也找到了一份收入不算太高,但确实是自己想做的工作。 梦想,啥时候开始都不晚,最关键的问题是你得开始。从今天起请把心思放在大量练习和学习Linux上,而不是如何学习Linux上,因为你只是想学会Linux而已,并不是要研究Linux该如何学习。

03
领券