本文章适合阅读人群:一点不了解计算机的人(大神请绕道0.0)
#####老师说,要想学好技术,那就写文章吧!我琢磨一了下,我能写什么。什么都不通,什么又知道一点,在此献丑了!##
《我跟你一样,什么都不懂的时候》
1.很多时候不知道从哪里开始
先从我的一些学习经历说起。大一第一次接触计算机专业,先是离散数学,学的不明所以,那是个什么玩意,都是推理。现在也还糊里糊涂的,只知道人工智能那里需要用到这一门的知识。学校没有开设计算机导论这门课,没做计算机的知识架构讲解,上来就是c语言,写程序。我郁闷至极,计算机是什么,能干什么,那些网页是什么,QQ怎么来的,计算机怎么就把那些东西显现出来在计算机屏幕上了。信息这么大,数据怎么就存进去了!没有人告诉过我,当然,我也没有问老师。或许是自己过于懒散,也没主动上网查资料。所以说,上完c语言的课,我还不知道,c语言怎么就能变成QQ那样的软件,我很苦恼,到底怎么了。
2.想起过去,想告诉大家点什么
今天回首,我想告诉所有想从事计算机的同行,请尝试自己解决问题,不要等待结果。学会用好谷歌,不懂的问题上网查资料,你的问题也许别人也想问,别人也问过,还很好的解答过。有人说,那我是不是要找大牛加好友,有问题就问。我劝你最好不要那样,如果你只是入门级别,那就好好百度解决。百度能解决的问题,你要是问大神,你只会得到鄙视,证明你连基本的做这行的素质都没有具备。
3.先把学习方法说一下吧!勤做笔记,勤看,写代码,写文章。
4.缺哪补哪
那么从哪入手,什么不懂学什么。我文笔不好,可能解释不清楚。大意就是你遇到一个知识点发现解决不了,那么就跳到那个知识模块去学。比如你会了c语言,破解要汇编,那你就学汇编去。
5.如果你困恼于某些难理解的想放弃,不妨做些简单的,提高兴趣
在我的大学时代,c语言上完,c++ 就这样来了。指针结构体还糊里糊涂,现在又来了个对象编程,我干脆就罢工不学了!感觉,那时人生怎么就这么灰暗呢。可是灰暗的人生在继续,数据结构,组成原理,操作系统,算法,一大堆的东西砸砸砸的砸的我头破血流。好像就要走向灭亡了。我不甘心啊,身为一个计算机专业的学生,还不知道计算机是什么东东,c语言是什么,那么多语言,学哪个好。看着身边一些厉害的人,学java,学c++,编程序,我也心馋。可是难道以后我知识个程序员,只知道写程序的程序员!!!不,我容忍不了,我容忍不了我写的那几句代码在计算机是怎么跑的,最后变成了什么都不知道!我必须知道!后来学的java,似乎比较简单,又或者说可以做出个系统,连个数据库。一下把我拉起兴趣。感觉程序也不是那么难。
6.本质是什么,做安全要纠结到二进制
从最底层开始,0和1,是计算机可以识别的,就是说你手里的那堆铁,它只知道0和1,那0和1又是什么呢,是电平,这是个术语。我们知道,计算机通电才可以工作。电压的高低,两个极端,计算机是知道的,那么我们就可以设定标准,用高电平信号表示信息1,用低电位表示0。这是计算机设计者设定的,也可以相反,如果你也造一台的话。总之,电的高低,就能说明我可以表示两个信息了。没错,这就是计算机的语言,只有0和1,你给计算机它就认,其他的没用。可是0和1只能表示两个信息啊!你错了,0和1只能表示两个,可是我00 000 0000 0000 能,我多存几个这种信号源呢!一个信号源只有0和1,两个信号源就是00 01 10 11 是不是,那我们是不是就可以表达四个信息了。比如00代表你的名字,01代表你爸的名字,10代表你母亲的名字,11代表其他人。当你给两个信息分别是00时,这时计算机就知道这个信息的含义是你的名字。当然这都是你自己做安排的。这里我只是希望你明白,这里的01组合可以表示一个信息,我们将这个信息制成一个表,大家都用的表,那么信息是不是就可以表示了呢!事实就是这样的。就说汉字吧!我们将所有的汉字用0和1组合来编一个表,公布出去,所,大家就用它来给计算机编码!(编码这个名词可以理解为起名)。比如说,“我”“喜”“欢”“你”这几个字,你给它编为 10111 11011 0011 11111 是不是可以不呢,当然可以,这样他们在计算机中就以那样的形式存在了!这就是人与计算机的交互!你计算机不是只认01么,那好,我给你01,很多的01,这样信息就存进去了。到这里,涉及到一些硬件的知识,大家有兴趣的看看模电,数电的,可以深入些。那有人说了,那么多0和1,计算机是才那么丁点大么,这是技术决定的,你一定听说过以前的计算机有一座房子那么大,可想而知,现在 呵呵 纳米级。(比较远,我也不能很好说清楚,见谅)
7.0和1不只是0和1 ,它可以是很多,就好像一个密码。
如果你理解了上边说的,那就好说了!1和0组合可以表示信息,计算机也能够识别。可是,我总不能天天看着那么个编码表给计算机输信息吧!我当然不能背啊!所以,我们用另一个东西来表示它,人类好理解的行不行呢。(差点忘了,0和1表示的信息是各种各样的,包括计算机指令,指令是一系列的操作。内部电路实现,这个你可以不用深究,人给你设计好了。如果你非要整明白,那就没头了,物理化学知识等着你。。。)。计算机中有一套自己的指令,人们只有通过指令才能操作计算机,指令呢,这也是规定的,谁做的pc多,用它的那套指令就多!就是说,你要按它给你的指令控制计算机,其他的就不行了。人计算机不认识,为什么不认识,电路在那摆着呢。我那电就那么走,错了就运行出错。所以安全问题,出来了,计算机要执行的指令由01这些组成,而数据也由01组成,计算机如果把数据信息的01当成指令来执行,系统就会出现问题。(比较深入。。。打住,看不懂没关系)。这些个指令,这些个命令呢,是我们可以操作的,这就是汇编层面!汇编就是将计算机的一系列动作,用一个建明的语句表示,这个语句计算机不认识,但是,我们可以自己写一个东西,将汇编的语句,转化为计算机的一系列指令,一系列01.怎么说呢!电影上的桥段,常常谈判的时候,谈不成的留后手,摔杯为号,一摔杯,就干起来了。汇编语句就是那么摔杯信息。外边人只要知道,杯子摔了,就表示拿家伙上了。拿家伙,这一系列的动作,是不可分割的。就是这种封装,将难的,可以堆在一块的东西放在一起,用另外的一种方式表达它,使它显得简单。(很烂的例子,将就理解吧)。汇编层的学习呢,我们可以当作搬家。寄存器就是我们可以搬的家。里边放一些个指令啊,一些个数据啊对不对,我们就是这样,把这个数据搬到另一个家(寄存器)去。不断的搬来搬去,计算机则对这些家里的东西不断取出来用。就那么大点地方,你就折腾吧。
8.各种编程语言,只是翻译而已。远远没那么复杂。
天天搬家(汇编)一定是很累的。这时比较高级的东西出来了。人类就是喜欢偷懒是不是,我找搬家公司,嘿嘿。这个搬家公司就是高级语言了,c,c++,Java,C#等等。你说一句搬家,搬家公司就给你搬了。这个搬家公司就是编译器。也就是说,你写的c语言代码,通过编译器,它给你变成了汇编的代码!是不是很神奇!神奇个屁,这不就是翻译嘛!如果你这么理解,那你就真的理解了!就是翻译,从最底层的01,到指令,到汇编,再到c高级语言就是一个不断翻译的过程。是翻译给人看的,那么反过来,从高级语言到01的过程就是翻译给计算机看的过程。谁做这个翻译的工作,编译器啊!你用的vc6.0,visua studio eclipe 等等都是翻译的工具。
9.如果你要开发一个语言,让你的语言可以表达大量信息,你会怎么设计。它主要有什么。
好了,现在让我们谈谈高级语言。语言都是想通的。就比如说英语和汉语对吧!都是为了交流,一些个名词啊,动作啊是不是都要有 。计算机的语言呢,同样。我们要操作的是数据对吧,那么我们这个数据是什么,我们给你的这个数据多少空间呢.(计算机是很笨的,你不给它指定大小,它会疯的),所以语言中就有了类型,比如你要存的是数字啊,还是字符,int char 我就给你安排一个可以存这个的空间(由编译器决定),这是规定,懂吧!还有一些个判断,对吧if else。
9.如果一个任务有很多次重复执行,那么我们不会把每天的任务一句一句列出来,只需告诉你,从什么时间到什么时间,你在间隔时间内,做多少次
一个事情我多做几次,for(),do{} while ();while(){};关于循环多说几句。对于do{}while();,就是说做事情不先不管后果,先做一下,再看看行不行,要是还行,就继续做,直到它说你别做了。while(){}则相反,你要先问下做不做,人说做,你就可以做,做完再问下,人说行你还可以做一次。大家觉得for循环比较难理解,我们拆分下for(语句1;语句2;语句3){语句4}
程序到这里时,它会怎么做呢,先把语句1的活干了,再看看语句2是不是符合逻辑,要是不符合,咱不干了,这个循环不做。那么要是语句2符合呢,这时就是说我们可以做循环里的事了。执行语句4,做一遍后,做语句3,下一步又要决定是不是做循环了,执行语句2,符合的话就做,不符合就拜拜了。就是这样循环往复,发现没有,语句1只执行了一次。这里另外扯点语法的问题,有人看到说,for循环体是用大括号括起来的,有些没有。大家可以这么理解,要是循环体就一个语句,那就可以不用大括号,加上也没问题。要是循环题超过一个语句那你就要用大括号了。就是说当你遇到没有大括号时,你的循环只能执行紧跟着的那条语句。再往后的就不是循环体的了!类似的问题还有if else 类比着看看你就明白了。
10.世界那么大,你找到某个地方往往很难,你需要其他人的帮助,他们会告诉你,哪儿有什么
指针这个问题呢,比较乱,可以理解为门牌号。每家每户都有门牌号,人送货上门你要告诉人家地址吧。那我们给计算机放东西,也要告诉他放哪里吧,这就是指针。把这些地址我放到一个地方存起来,要找那个地方时,我就从这里找。就比如说你来我家,我给你个地址,你本身拿着的那个地址就是指针,你是指针变量,你可以拿我家的地址,也可以拿别人家的地址。那么我要找别人家时,我就可以问你,那家怎么走啊,你就可以告诉我。数组名呢,也是个指针。学指针要区分开*在什么地方出现,在声明时,它只表示是个指针。在其他地方则表示指向,也就是直接到人家里去了。
11.用人类惯常的思维去编程,分类,
关于面向对象,这个玩意,怎么说呢!一个东西,东西都有属性,东西可以做什么。把这些东西放在一块。然后操作,有点像结构体!但结构体中没有动作,也就是没有函数。
《信息量比较大,没细说,见谅》
入这行,做好吃苦耐劳的准备。
如果你有一天累了,看看渗透,玩玩工具,或许可以提提神。
卖个广告:http://bbs.pediy.com/showthread.php?t=207202
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课