学习操作系统前怎么学会编程

只是因为缺乏指导,缺乏一个路线图,很多大学生的时间被浪费了。很多对计算机的感兴趣的朋友迟迟无法入门。这是我和那些在网络上的朋友交流后的感觉。

我不认为只有到了研究生博士生才能去研究复杂的计算机的项目(比如操作系统)火箭发动机,生物工程这些实验都是要花费大量的金钱的,所以他需要硕士,博士的学历去筛选人才,避免外行的人瞎折腾浪费了实验的资金。但计算机的实验不一样只需要一台电脑。任何人都应该有参与计算机的项目研究的机会,只要你感兴趣。只要你会写程序。这就是开源运动的魅力。

参与开源运动,只有一个条件,你会编程。我打算写这个教程,告诉你怎么变得会编程。然后你有兴趣再去研究操作系统。

整个计算机的编程世界是异常的复杂,也非常的丰富,一层叠加一层。

我希望提供给你的是一个能到达彼岸的,脱离苦海的路线图。我希望的是给你一个是由长远发展的路线图。

而不是应付考试,应付面试。通俗点说是走到权力和知识的最核心处去,和linus这些大神们呆在一起,所有重要的有影响的事件最终都会集中到权力的中心。换句话说所有的有影响的技术都会聚集在linus他们的中心的。这就是到达彼岸。

怎么做到呢?分成三个部分

1 最早做的,最早起步的,就是了解计算机世界的整体环境。这是必须的,重要的,但不紧急的事情。

就是把计算机速成课的内容看完,把编程人生的书好好读读。这可以在你做第二个内容过程中累了以后当做休闲。

  1. 内容二

学会用c语言写程序。这个是紧急而不是最重要的事情因为你不会编程,所以,赶快学会,变成是很紧急的。别焦虑学会了c语言那些别的语言会很容易的。

计算机的世界是非常丰富的,从语言生疏有c语言,有java,有python。曾应用的方向有神经网络,数据库。驱动开发。安卓开发,unity3d。很多新手被困在这里,不知道应该学什么语言。也不知道应该从学习什么内容开始。我的建议是,从学习c语言开始。别担心,语言本质上是一致的。特别是你对操作系统有一定了解的情况下。当你学会了c语言,其他语言是很容易过渡过去的。

从哪个语言学起,是很重要的。下面是我对这个问题的解决。答案是从c语言学起。

很多人的学习一开始。是没有方向的。总是担心,自己学了有没有用。会不会落伍会被淘汰?会不会好找工作?工资够不够高?他们却没有思考一个问题。这是他们学习的方向和学习的内容。会不会有一个强烈的天花板阻止他们技术的提高?比如单纯的java,学到一定阶段之后,发现没什么东西可学了。只能制造一些不是很复杂的项目。一些提高性能的,高级高难度的技术,多线程,锁之类的技术被java内部封装了。没有办法,提升自己才是最可怕的问题。才是阻止自己职业发展的最大障碍。c语言不一样,它和操作系统是绑定的。它和linux的内核是绑定的。linux内核一直有linus这样的大神在讨论,在交流,在沟通。你永远可以通过,这些讨论来学习最新的技术。哪怕你未来不从事c语言的编程。只要你。能够看明白了,在邮件列表上对操作系统各种新技术的讨论。你都可以把这些重要的经验借鉴到你的项目里面去。这就是c语言的魅力和c语言最重要的价值。背靠大树好乘凉。

那怎么开始学习编程呢?把我前面推荐的两本书看懂。一个是嗨翻c语言,一个是C语言的学习,普林斯顿的教材。不过我要承认,我前面做的教程有一些不完善。忽略了做题。这里有个很重要的经验。编程是写出来的。把我推荐的那两本书上的每一个例子和练习,你都应该用手去敲一敲。

现在的视频教程是太多了,现在的参考书是太多了。所以,有些人有一个很坏的习惯。就是走马观花的去看看。看的很多但动手很少。这种情况下是没办法学会编程了。看和动手亲自敲那些代码是完全不同的感觉。有些人有这种心态,觉得那些代码太简单了,不值得去敲。其实不是这样的。复杂的程序是由简单的程序演化过来的。就和做数学题是类似的。你心目中首先要有求最大值最小值的各种各样的方法。然后你才能够去解题。而这些各种方法需要你不断的去做,不同的练习,然后固定在你的脑子里。编程也是一样的,你只是看一看那些东西不会固定到你的脑子里的。你要把那些代码自己去敲一遍。去执行一篇。这样他们就会在,你的脑子里固定下来。

很多人研究了半天都不会编程,就是这个原因,只看不动手。

然后是要做一些题的。这里我推荐一本外国的书,现在我书名记不得了,回去找给大家。是c语言和科学计算的。做这些题的意义就是让你对于写结构体系链表写各种数据类型没有负担。变成你身体的一部分一样。这样你才能够去看懂一些小的项目。

注意有一些技巧,非常的深奥。就是我说的这些做题只是为了让你对基本的数据结构,运用自如。换句话说,我只是让你去做一些很简单的题。做那些跟数据结构有关的题。而不是现在流行的那些算法之类的题。为什么是这样呢?因为那些算法题或者是面试题可能太困难了,不适合初学者。我们是需要掌握c语言最基本的这些语法工具。那些算法题本质上是优化程序用的。你还不会编程,就谈不上优化话的问题。

做完这些题之后,可以去研究一些开源的小项目。比如httpd,cjason。这些开源项目代码确实短。而且国内有很多人都研究过,有很多注释只要大家愿意去搜索。把这些开源的项目自己打一打,自己实践一下。变成自己的东西。编程本质上和写作文没有区别的。把别人拿过来的东西改一改。变成自己项目的一部分。大部分都是这么干的。前提是你把别人的东西能变成自己的。

等你把这几件事都做完以后,你就应该会编程的。好的东西是由不好的东西演化出来的。很多人学不会编程,就是不去写那些很简单很小的项目,自己写一遍。自己默写一遍。多经历过几次,自然而然就会变成了会编程了,多写几遍。如果你不老老实实的,你就学不会编程。我和很多大学的朋友交流。要么是大学四年,也从来没写过像样的东西。要么大学四年是用python写了个什么东西。可惜没有开源项目支持,后面没有发展了。

这个过程中有几个问题也是非常深奥的。必须拿出来说。计算机世界有两类的知识。一类是把现实世界的东西数据化。然后用语言描述出来。把现实世界的各种逻辑转化为程序代码的逻辑。这种能力必须要变成自己身体的一部分。就是去写代码,写简单的开始。另外一部分只是知识。比如说linux的各种命令。gcc编译器的各种情况。这些东西不过是一些知识而已。所以要用,一些工具来记录他们,方便你自己查找就可以了。避免二次查找。很多人是写一些博客。我不建议这样做。最好的方法是发邮件,把你看到的那些知识放到邮件的内容里去发送给自己的邮箱。放到邮件里的好处是方便搜索。而且是永久保存呢。避免二次搜索。避免换了一台电脑之后,什么资料都丢失了。

还有一个比较深奥的问题,我要说一下。就是应该怎么学习汇编语言。最好最有效的办法。就是一边学习c语言的时候,一边学习汇编语言。怎么做呢?只要使用gdb这个调试器。用disass的命令把汇编代码和c语言的代码一一对应显示。这样你就会理解某一个c语言会出现怎样的汇编语言。只要你这么做,你就非常容易理解指针和各种指针的操作。因为他们在c语言的层面上不明显区别,但是在汇编语言的区别却非常明显。你也可以很轻松的弄懂很多写法,会造成什么样的汇编语言,程序会有怎样的一个执行顺序。

还有一个比较需要正视的问题是,应该用windows编程呢,还是用linux。一般来说,windows是比较简单方便的。你有时会觉得比较麻烦一些,比如说要装linux的操作系统。但是我还是建议大家用linux学编程。用虚拟机来装linux操作系统。我会把我的虚拟机的镜像,发送到网络上去,让大家去下载。然后做一个教程,告诉大家怎么把这个虚拟机给,下载下来,安装起来应该是非常简单的。这个虚拟机已经安装好了,Gdb,gcc。还有perf。

到这里怎么学编程?那些非常重要的问题,我已经讲解完了。只要你按照我前面说的这个步骤去做。仔细明白我说的是什么意思。你应该是可以学会编程的呢。

等到你达到了会编程的阶段以后。你就可以去选择学习一些其他的语言,或者是学习其他方向的项目。这个看你自己的兴趣和爱好。

注意,如果你有什么问题的话,可以先搜索国内的资料,国内的资料,如果没有就去stackoverflow上搜索。这个网站也是非常重要的。必须要去有,看英文资料的习惯和能力。这里我可以告诉大家,看英文资料和你英语水平的高低,没有任何关系。因为都是专业术语。我发现很多英语好的人看计算机的东西也是看不懂的。

在这个会编程的基础上,我们的下一个目标是要。能够理解linux内核的某一个模块。我建议大家先学习内存管理吧。这个模块最热门,资料最多。研究的人最多。

然后你就可以去看我写的那个文章,怎么学习操作系统呢。前面我写的那些操作系统的视频,如果你没有编程的基础的话,你会觉得很困难。所以我今天把这些,把这些怎么编程这个教程给做出来了。把这两个地方搭了一座桥。

最后说一点,学习linux内核,最好的办法就是用vim开两个窗口,对着源代码来打。把内存管理的那些源代码文件都用手敲一遍。这种敲一遍的效果比你看书和看源代码看十遍的效果都要好。道理和前面的那些道理也是一样的,一定要动手。等你手动多了以后,熟练了以后,你就可以只看不动手了。

这样做最大的好处是什么?内核编程,他使用的最多的技巧就是多线程和无锁化的多线程。尽量的使用缓存。尽量的重复使用内存,避免分配。这些技巧。基本上就停留在内核的层面和开源社区在讨论。你要学习,只有这个地方可以学习。所以这是必须要去研究内核编程的原因。你有了这些工具之后,你自己的。程序就可以优化的非常快了。内核编程的好处就是可以最大程度的利用内核的基础设施和函数。但有些项目需要时,你可以制造一个伪设备。比如谷歌的安卓系统就是实现了一个伪设备。来做进程间的通信。

算法之类的东西,学术界讨论的很多。你可以去查看很多论文,很多资料都可以找到各种算法。这些东西是容易获得的。内核编程的那些技巧是不容易获得的。最重要的是所有新的高级的,不管是编译器的技术还是锁的技术。最后都会被内核代码的这些程序员实现在内核里面。你就可以跟上这个世界技术的最前沿了。

最后一点就是linux有perf这个工具。有了它是很方便分析程序的。

学会操作系统一个部分最大的帮助是什么?最大的帮助并不是技术上的。是自信心上的。是潜意识里的。当你经历了这么复杂的一个,项目以后。该你思考的问题都是,对大脑有严重伤害的难度的时候。你再去看那些所谓的程序,不过就是枕头大战而已。你只是没有对他们花时间用时间而已。你的整个潜意识都会认可自己的一个能力和价值。你知道你能做到很多事情?只是有一部分你还没有去做。只是那一部分不是你感兴趣的而已。他们在难度上没有任何问题。注意潜意识这种东西。说得通俗点就是自信心。自信心,通俗点说,就是临危不乱的本事。当你完成了一个大多数人不能完成的任务。即使在现实世界中,没有什么经济价值。但是它提高了你潜意识里的自信心。潜意识就像你呼吸的空气一样。你时时刻刻呼吸的都是自信的空气。你说你怎么会不成为高手了?你肯定会成为高手的。但你做的那些操作系统的研究,比你的大学老师做的研究的课题还有深刻的时候。他们又算些什么呢?在开源运动的领域,没有人会束缚你。没有天花板。唯一的天花板是入门难一点。我写了详尽的教材,教你怎么学操作系统。

注意各人有各人的潜意识。作为一个团体,有团体的潜意识。比如中国人内心的潜意识里的民族自尊心,民族自豪感。民族自信心。是地球上任何一个民族不可比拟的。五千年里面,4800年都是世界强国。我们不成为世界强国,谁是世界强国?

人最后的成就和自己潜意识是有很密切的关系的。当然。做成一些事情会给你带来成就感。会提高你潜意识的自信程度。一般情况下,潜意识是不受思维活动和主观控制的。但当你的内心,有坚定的信念。有坚定的信仰。有高尚的追求。有为更多数人谋取幸福,有了奉献和牺牲精神的时候。你的潜意识就会被束缚在你的信仰上。成为你信仰助力的风帆。在别人的眼里觉得你很傻,很幼稚。我想起了我的团长我的团里的一句话。孟凡了说真想知道那些精锐是怎么活着的?龙文章团长答道。你不知道心里有个信着的东西,那活着有多舒服。

我也不过是大海里的一个水滴。很渺小的。但是只要有人去做,就会不一样。比如我刚开始学编程的时候,我也是门外汉。我也不懂操作系统。到今天为止,我可以很自信的。告诉大家,编程应该怎么学?怎么掌握编程的?这个和打篮球的动作一样,只有在运动中不断的调整身体。不是靠看书,不是靠看视频看出来的。是做出来的。我的这些学习方法和思想,对于大一的新生是最适用的。很多人一开始起步就不对。想要调整过来就比较困难一些。最重要的是,他们有他们自己的一些想法了。主观上也不愿意做调整,去学会这些东西了。

今年我还有一些压力。相信今年我做的那些投资就会有回报了。我就有钱去试试我的从小学培养,操作系统人才的路线了。这是我战略中最核心的一步。我相信我最后一定会成功的。

最后说一件事。编程本质上是一种思维。我高考数学很差的。三十几分,我总是没办法思考那些数学题。把我逼得很惨。最后我想到一个最愚蠢的办法,就是把那些参考书的题目解答都抄一遍。把题目跟语文一样的去背下来。靠这个很愚蠢的办法,我慢慢的有了数学思维。我高考的数学成绩也不好,只有116.学习内核操作系统最好的办法。就是去抄那些内核代码。集中的去抄一个模块的那个代码,对着打一遍。多抄几遍,多打几遍就知道怎么去改了。否则每天看着他多看几遍怎么看都是没办法开始动手呀。我没有骗你,因为我每天都坚持做这个事情。我的经验是这样记住那各种函数和代码。容易得多。

我想不到还有什么东西能够阻挡我在操作系统道路上的前进。或许这就是潜意识。有自信吧
原文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值