程序员之路Word格式.docx

上传人:b****1 文档编号:4427054 上传时间:2023-05-03 格式:DOCX 页数:90 大小:702.93KB
下载 相关 举报
程序员之路Word格式.docx_第1页
第1页 / 共90页
程序员之路Word格式.docx_第2页
第2页 / 共90页
程序员之路Word格式.docx_第3页
第3页 / 共90页
程序员之路Word格式.docx_第4页
第4页 / 共90页
程序员之路Word格式.docx_第5页
第5页 / 共90页
程序员之路Word格式.docx_第6页
第6页 / 共90页
程序员之路Word格式.docx_第7页
第7页 / 共90页
程序员之路Word格式.docx_第8页
第8页 / 共90页
程序员之路Word格式.docx_第9页
第9页 / 共90页
程序员之路Word格式.docx_第10页
第10页 / 共90页
程序员之路Word格式.docx_第11页
第11页 / 共90页
程序员之路Word格式.docx_第12页
第12页 / 共90页
程序员之路Word格式.docx_第13页
第13页 / 共90页
程序员之路Word格式.docx_第14页
第14页 / 共90页
程序员之路Word格式.docx_第15页
第15页 / 共90页
程序员之路Word格式.docx_第16页
第16页 / 共90页
程序员之路Word格式.docx_第17页
第17页 / 共90页
程序员之路Word格式.docx_第18页
第18页 / 共90页
程序员之路Word格式.docx_第19页
第19页 / 共90页
程序员之路Word格式.docx_第20页
第20页 / 共90页
亲,该文档总共90页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

程序员之路Word格式.docx

《程序员之路Word格式.docx》由会员分享,可在线阅读,更多相关《程序员之路Word格式.docx(90页珍藏版)》请在冰点文库上搜索。

程序员之路Word格式.docx

项目经理:

管理一个软件项目的整体计划与控制,包含诸如投标、项目计划、客户关系、资源管理区、人员管理、风险控制之类的工作。

技术总监:

一般就是负责技术团队的组建、系统架构的设计、技术规范的编写、技术难题的解决等。

资深程序员:

需求分析、技术文档的编写、核心代码的编写等。

一般程序员:

功能代码的编写,测试。

当然对于很多大一些的管理比较规范的公司,还有版本管理、文档管理、测试员、产品技术支持、维护人员及根据需要编制的一些其他岗位。

当然根据软件项目或产品的需要,根据公司员工能力特征的具体情况,职位的分工并不严格遵从某个模式,团队组建的目标就是要达到团队的最有效的运作。

对于目前的开发团队来说,系统架构设计是必不可少的,一个好的系统架构能让软件系统的开发和维护,系统升级均起到事半功倍的效果。

建立高效的团队,不是全部用最好的程序员就能实现的,团队的技术层次设计是保证团队有效运作和降低成本的必不可少的因素。

2.对于一些非软件公司的IT部门,其基本的软件开发团队也是一样,当然有些小公司的IT部门,可能就一个程序员,那就是一个程序员所有工作都要做。

如果是在工厂或企事业单位从事程序员工作或系统维护工作,那么编写程序可能是更次要的能力,而与用户的沟通取得真实需求是一个更重要的工作,这一般要求程序员对公司的运作有很深入的了解,并且能快速将用户的需求转化成软件实现,这一般要求程序员有良好的沟通能力和理解能力。

3.对于一些电子设备开发公司,软件开发一般与硬件有着密切的关系,如嵌入式系统的开发,单片机软件的编写。

本人在刚从事程序员工作之初,其实那时对于硬件什么概念都没有,去应聘一家做高速公路收费系统的程序员职位。

与其中的硬件工程师聊起,看到他们做的硬件电路图及产品,当时感觉有一种敬畏。

虽然应聘成功,最终我也没去那家公司任职。

现在想来如果去了那个职位,或许我会更早地了解计算机的硬件原理。

阅读本书,并不会让你立即成为一个资深的程序员。

我的目的是给一些初学者建议一个成为一个合格程序员的自学之路。

本书只是引导性的介绍,并不非常详细介绍各种技术的实现,但我期望您能通过阅读本书清楚各知识之间的联系,从中可以知道要实现自己的目标需要去了解哪些知识。

从而通过不断地学习构建起一个完整的程序员知识结构。

本书中将涉及的一些概念:

电子电路、模拟电路、单片机、PLC、现场总线、传感器、信号与逻辑、仪表、网络、芯片、电子元件、操作系统、文件、程序、软件、编译器、链接器、加载器、调试、驱动程序、抽象、接口、面向对象、协议

在阅读本书之前,我假设您必须熟悉以下一些基本概念,或至少曾经编写过一个程序,无论你写的是汇编、C、C++、java、delphi、jsp/asp还是PLC、C51,只要你了解编写程序是什么概念,均可以从本书的阅读中找到自学的动力。

首先应该大概了解的一些基本概念:

 

如果你是一个正在从事软件编写的程序员,你可以根据自己的需要了解不同的章节。

前言

持之以恒的学习态度

要学习知识,首先要具备一个良好的心态,“”冰冻三尺,非一日之寒”,不要指望一天就把所有的知识学会,知识是进化的,每天都在更新,你永远也学不完的知识,即使一个很小的领域,你也无法用一生穷尽其所有。

不惧权威

不要恐惧,不要害怕别人的耻笑。

没有哪个人智力就那么高人一等,一切看似复杂高深的知识,只要你花时间总有一天可以弄明白的。

爱因斯坦做板凳的故事也告诉我们,伟人之所以伟大是因为他们愿意牺牲自己的享受去关注自己感兴趣的领域。

你达不到伟人那样的高度,是因为你的没有他们那样的经历,不是因为你天生就比他们笨多少。

哈佛大学的研究表明人类大脑的结构和天生的智力正常人相差并不太大,即使是现今原始部落的印第安人,只要与其他人一样享受同样的生活经历和教育,一样可以上大学。

更广泛地摄取知识

我们在大学学习的知识,仅仅只是一个基础,而且基本是理论知识,工作以后的学以致用更具有意义,工作是学习的一个新起点,毕业生通常的想法就是“我在学校学了这么多,结果工作以后又基本用不上,觉得自己的知识白学了。

”因而有些失落和不平。

很多大学生毕业后就不再对自己的学习生涯进行规划。

“朝闻道,夕死可已”,一个人一生都应该不断地学习,不仅仅学习与工作相关的知识,而且应该涉猎更广泛的知识领域。

即使你的目标仅仅是做一个程序员,通过其他领域的学习,你同样会发现你编写程序的思维在飞速地提高,而且提高的速度比单单去学习怎么写程序来得快。

这点如果你不亲身体会,肯定不以为然。

对于一些工作了很多年的程序员,可能有更切实的体会。

做一个更好的程序员,个人修为是必不可少的。

苹果公司的程序员能把一个按钮设计成漂亮得你想啃它一口,这不是通过程序的技巧就可以实现的,这更体现的是一种对生活的态度,一种对生活的理解。

养成做笔记的习惯

刚毕业的时候,我刚接触编写程序的概念,完全出于对于看到同事编写的一个简单的Delphi程序,发现原来编写程序原来可以这么简单,于是有了自己写程序的念头。

买了几本书,大量地做笔记,大量编写和调试程序。

但是当我真正进入软件公司工作时候才发现,我学到的仅仅是一个工具,与学习用word软件编制文档没什么区别,对于软件开发一点概念也没有。

于是在紧张的工作中,来不及写文档,也来不及做笔记,一切似乎就这么过着。

在被项目推着走的同时,对于软件开发的过程有了大致的了解。

回想这段工作时间,其实进步是很少的,不是工作太忙,而是自己的习惯在工作的压力变了。

做程序员多年后,当我再次拾起笔时才发现做笔记是多么重要。

所以我给读者的建议就是时常做笔记,做笔记不是用来回顾,你可能一辈子也不会再去翻阅以前的笔记本。

但是记笔记的过程则是灵感的发源地,也是一个整理知识的过程。

即使是用一张纸,做完笔记就丢弃。

在你动手的时候你必然会去思考,也能更快地明白自己正在阅读的文字的含义。

做笔记也同时能锻炼语言组织能力和沟通能力,是一个益处多多的活动。

养成良好的阅读习惯

当我们阅读一本书的时候,一般人的做法就是,从头看到尾,然后总结下书中讲了什么。

一本书就结束了。

我这里说良好的阅读习惯是指阅读的方法。

当我们拿到一本书的时候,你是否就在思考全书的内容大概会是怎样,作者为什么会这样组织。

或者你听一个视频讲座的时候,从开始的一节课就在思考,这个课程大概会讲到哪些内容,它们之间有什么联系。

如果你在阅读之前,总是先进行猜测,然后将实际的内容与自己的想法进行对比,你就会发现自己的思维与作者之间的差别与共同点。

有时候对于一些技术的推测,你会发现原来事情就如你推测的一样,那么你对于书本的阅读,不仅仅是一个过客而已。

如果在阅读之前进行思考,那么阅读一本书可能比你直接过目10本类似书获得的知识更多。

例如我们想学习单片机和基础电路时,一般刚开始并不清楚应该看什么书的。

但是我们可以从最基本的电路原理开始,不断地推测怎样才能构建起一个系统来解决问题,然后去找相关的文档料来验证与我们的想法是否一致。

每看到一本书,我们应该总是先思考,为什么会有这本书,阅读本书能为我解决什么疑问。

做一个工作与生活两不误的员工

编写程序,有时候似乎是一件很枯燥乏味的事情,特别是正在做软件项目的程序员总是抱怨用户的需求总是在变,自己编写的程序总是被不断改写和重写。

是的,编写程序是比较苦的工作,所以为了将编写程序变成一件充满成就感的爱好,则需要程序员不要把所有精力都花在编写程序的技巧上,不要试图通过提高编程技巧来提高自己的工作效率。

我见过很多埋头苦干的程序员,说实在编写出来的程序并不怎么样。

做一个乐观开朗的人,多与人沟通,从生活中也能发现解决程序编写的方法。

站在一个更高的角度去思考软件开发的工作。

只有从整体上理解软件开发意义,你才能做更有有意义的努力。

举例来说,我们早期开发的软件项目,很少提及系统框架的概念,因此每次对于不同的项目,我们都要做大量的重复性的开发,代码的可维护性非常差,而通过构建一个比较通用的系统框架,软件项目的开发周期和性能比原来有了质的提高。

让软件开发编程一种艺术,也让生活更加的精彩。

程序员在技术学习的同时,要更多地关注一些相关领域的知识,如《人月神话》《没有银弹》,同时也多关心下时下的行业经济趋势,网络热门话题。

目录

第一篇什么是计算机6

第一章实现简单需求6

第二章需求的升级15

第三章系统核心扩展33

第四章处理器的控制逻辑40

第五章处理器性能改进50

第二篇构建个人计算机系统54

第六章计算机软件55

第七章总线系统58

第八章计算机主板58

第九章外设原理58

第十章计算机网络59

第三篇工业计算机系统60

第十章单片机原理60

第十一章常见单片机应用60

第十二章什么是PLC60

第十二章什么是伺服系统60

第十三章工业计算机的特点60

第十三章工业控制网络60

第四篇构建软件系统61

第十三章简单需求61

第十四章实现sin(x)函数计算61

第十四章操作系统是一个庞大的程序61

第十五章软件的编译与运行61

第十六章虚拟机原理61

第四篇软件开发62

第D1章企业信息化概念62

第D2章软件开发过程62

第D3章软件设计分层概念62

第D4章什么是程序语言62

第D5章市场之争62

第五篇自己动手编写系统框架62

第E1章跟我学JAVA62

第E3章CS与BS之争63

第E3章自己编写系统架构63

第E4章编写一个自己的公式解析器63

第E5章利用HashTable构建多维分析系统63

第一篇什么是计算机

下面的章节中,试图向读者展示怎样通过计算机系统来解决具体的需求,从基本的电路开始,构建起一个完整的计算机系统。

内容大致涉及如下的从简到繁的系统构建过程:

基本电路、逻辑门电路、功能电路单元、计算机逻辑单元、处理器构成、计算机体系构成。

第一章实现简单需求

一般学习一门计算机语言,通常的做法就是去买本书,然后照着书上的讲解,写好程序,编译运行,然后观察结果是否正确。

其中第一个例子,约定俗成地就是在屏幕上打印一行“Helloworld.”,这里我们并不想首先就教会您怎么写出一个可以运行的程序,而是通过问题的引出和解决方法的理解软件是用来做什么的,一般用软件可以解决什么样的问题。

人类知识的出现必然有其原因,有需求才有动力,这是市场经济的规律,也是人类意识的进化规律。

自从有了计算机,人类就将很多的工作移交给软件去实现了,现在人们的工作和生活基本离不开计算机。

这里暂且不论计算机是怎么出现的,也不论软件的发展过程,我们仅仅讲解一个简单的需求,怎么通过现有的知识去实现。

只要你能明白一个简单的需求的实现过程,就可以通过不断的学习和实践去理解或构建一个复杂的系统。

问题的提出“2+3=?

”,或许您会说,这个太简单了,不是问题,完全没必要通过计算机去解决,但这里我们正是要通过这个简单的问题讲解计算机怎么实现一个人看似简单的解决方法。

只要我们能实现2+3的问题,那么我们就可以用计算机实现比人脑更快计算出123456789+23456876的结果。

进而计算诸如y=sin(x)、y=ex这样的函数,也可以更进一步构建更复杂的系统。

问题的解决方法,从来就不会只有一种,无论你在生活中,还是在编写程序时,都不要将问题的解决局限在一个狭小的空间中,当问题出现时,开放自己的思维,找到所有可能的方法,从其中找到一种对于自己来说最有效的方法去解决问题。

如果你久经沙场,那么你的直觉就会告诉你什么方法最有效,所以对于不同的解决方案,只有你自己多去试,多亲身体验才能获得解决问题的直觉。

例如一个计算机的硬件工程师,首先想到的可能就是通过一个加法器电路来实现2+3=5,而一个软件程序员更可能的解决办法就写个程序来实现2+3=5,而如果需要实现一个计算器的界面,用Delphi实现起来比java就简单得多。

各种技术和工具都有其服务的目标,所以必然各有所长,用最合适的技术和工具总能起到事半功倍的效果。

这里我们不讲解怎样找到最合适的方法,因为每个人的知识不一样,只有对自己最合适的,没有对所有人都是最合适的方法。

“如果你有鸡粪,那你就卖鸡粪吧”,我时常在网上看到一些技术之争,如将J2EE与.NET平台进行对比,将Delphi与VC++对比,也有很多刚开始学习的人会问“我应该选择学习哪门语言呢?

什么编程语言是目前市场上需要的呢?

java程序员工资高还是.net程序员工资高?

”,其实无论你选择什么编程技术或工具,你的目标只有一个,那就是写出满足客户需求的软件。

如果你是一个初学者,那么你就选择一个你认为最易入门的工具和编程语言。

如果是因为工作需要,那么你就选择一个能最快解决工作问题的技术。

如果你想成为一个真正的通用型程序员,那么什么都学点。

一切没有绝对,如果你目前仅有鸡粪,要取得生存,那么就卖鸡粪吧。

所以我们不去争论用哪个技术来解决2+3=5是最好的。

要解决2+3=5这个问题,首先还需要做些前提准备工作。

1.首先,2,3,5这几个符号是什么?

回答“数字”,当然就这么简单,这个问题似乎不是问题。

但是为什么你不回答是“数据”,或更抽象化地说“信息”呢。

在具体与概念之间总是存在一个联系,那就是抽象,人类的语言就是一种抽象,文字也是一种抽象,而抽象的过程就是一种约定。

现在我们假定,一个现代人与一个原始人相遇了,现代人说“请给我2个苹果”,原始人肯定是不明白的。

之所以举这样一个例子,因为计算机只是一个非生物体,比起原始人来说,更无智能可言。

要让计算机来解决问题,首要的是要让计算机与人之间达成一致的认同。

当我们与另一个实体通过语言交流的时候,我们传达“2”这个信号,必然有一个信号的载体,如通过说的声音,伸出两个指头的肢体语言,或通过书写的文字“2”,或干脆画2个苹果。

所有的这些在交流的瞬间,其信号是存在于某个世纪的物体上的。

对于受体,如果要明白这个信号,必然预先与发送信号的主体之间达成一致的认同,即每个符号代表什么意义。

我们经常在战争电影中看到战士用手语说“3点钟方向有敌人”,这里就事先所有战士都达成了一致认同,用手表的12个点位来表示平面方向,方向指的是以自己还是对方的前面为参考,手语的表示方法等等。

这些在计算机领域有一个更加专业化的称呼“协议”,关于协议我们将在后面章节中讲到。

如果将“协议”概念更扩大化,协议=约定,那么可以说一切都是协议。

那现在我们要实现“2”这个数字的表达,那么就需要通过一个载体,从上面知道,人与人之间的沟通,表达“2”有多种方法。

但是我们现在是用电路来解决问题,那么,信号自然就用电来表达。

而电这个东西是一个看不见的东西,所以我们要知道2+3的计算结果,就需要将电变成其他信号展现出来,人眼才能看到。

这里我们暂不讨论怎么显示结果。

因为我们并不关心2+3的计算过程,我们仅对结果感兴趣,所以2和3以及“+”法云运算的表达我们并不要求电路能显示给我们看。

但是用电来表示数字“2”,这可以有很多种方法,如通过电压表示,数字1用1V表示,数字2用2V表示,或者,用电流大小表示,1用1毫安表示,2用2毫安表示。

如果采用其中任何一种方法,那么是否要表示10000,那就要用10000V或10000mA来表示呢,显然,这种方法是不可行性的。

而且如果电路被干扰,那么,数据就会产生错误。

人类进行语言交流的时候,同样的26个字母或几千个汉字,但是可以表达出无穷的含义,其原理是什么,就是符号的组合。

那么我们在用电路来表达信号的时候,是否也可以用信号组合的方法来表达更复杂的信号呢。

那么我们觉得最简单的,而且不容易出错的方法是什么呢?

就是定性而不定量,人类的认知里面,绝大多数是定性认知,而定量要涉及到计算,问题就变得复杂。

所以用电的有无来表示信号,变得简单又可靠。

但是怎样将信息用电的有无来表示,最开始也有很多的探索,这个就是信息编码学的范畴,我们在这里并不去具体追究。

在计算机领域我们最终采用了二进制来表达信息。

我们知道,电这个物质有两个描述量:

电压和电流。

那么是用电压的有无来表示信号好,还是电流表示信号好呢?

通常的情况是这样的,由于只要有电流通过,就必然有功率损耗,但是有电压并不一定就有功率损失,因为电路断开的时候灯是熄的就不用耗电,这点好理解。

那是不是所有电路的信号表示就只用电压信号呢,也有信号传输过程中就采用电流的有无来表示0和1。

这里提到二进制,就同8进制、10进制、16进制一起了解下。

我们来看数字表示的约定:

10进制

2进制

16进制

8进制

2

10

8

1000

16

10000

20

1010

A

12

3

11

5

101

“2”是一个我们通常在语言中使用的10进制数,10进制我们好理解。

对于二进制,2=1+1,满2就必须进1,同十进制的满10必须进1一样的道理,所以第2位的1表示的大小是第1位乘上2,即1x2=2,第三位呢,就表示第二位乘上2,即2x2=4,这就如100=10X10一样。

将10换成2就是一样的。

所以第8位就是2x2x2x2x2x2x2(7个2相乘),我们用指数表示就是27,可以看到,第n位就是2的n-1次方。

我们来看常见的计算机的8位二进制数,就是用8位来表示信号。

全部为1时就是11111111,变成10进制数就是

11111111=27+26+25+24+23+21+20=128+64+32+16+8+4+2+1=255

如果再加1,那么所有位均产生进位,就全部变成0了,在程序中有个概念叫“溢出”。

那么一个8位数能表示多少个不同的信号,是255个么,可不要忘了0也是一个信号哦,因此可以表示256个信号,这正好是28。

所以n位二进制数就可以表示2的n次方个不同的符号,由于长度是没有限制的,如果不够用,我们可以用更长的位数来表示不同的信号组合,在人类语言中,我们说话的长短是没有规定的,有时就一个字,有时可能是很长一段话。

但是不管怎样,我们的文字基本符号的个数是有限的,而且并不是很多。

我们是通过文字的组合来表达一个含义,用英语,也不是用字母的组合来表达一个含义,而是用更高级符号组合即单词(word)来表达一个含义,而汉字也不是用笔划来组合表达一个含义,而是首先用笔划来组合成汉字,然后用汉字来表达一个含义。

计算机是对于人类沟通信息领域的一种模拟,所以必然遵从一样的规律。

我们并不直接用0和1这两个二进制符号来表达一个复杂的含义,而是首先将0和1组合成一个有意义的基本符号,然后再进行表达。

我们用多少位来表示一个基本符号呢,2位?

肯定太少,表示不了几个符号。

100位?

似乎太多,就如我们不会造10万个汉字去书写一样,太多编码,要在人与人之间沟通反而变得更难。

需要花很多时间达成一致的符号理解。

如果仅仅表示0-9这几个10进制数字,需要多少个符号呢?

10个,那么需要多少位二进制来表示10个符号呢,答案就是4位可以表示16个不同的符号。

基本符号

2进制表示

符号组合

0000

是用1100表示么,

不是,否则又回到原来的用0和1表示所有的含义的状态了。

1

0001

0010

0011

136

注意这里将136看成是一个符号组合,而不是仅仅是一个数字,因为我们要解决更通用性的需求。

这里十进制数“136”是由三个更基本的符号组成的“1”、“3”、“6”所以,我们在计算机中也用代表基本符号的二进制组合表示

“0001”“0010”“0110”

百位十位个位

136

这里暂不讨论最终3个符号组合在计算机中怎么存储。

4

0100

0101

6

0110

7

0111

9

1001

1010-1111没有用到

假设我们要用到x、y、z这三个符号,并利用上面4位二进制中余下的组合来表示它们

x

1011

yzzxyzyzxxxyzzz

可以有无穷组合,

每个组合我们可以给他们定义不同的含义。

每个组合,我们用4位二进制的组合表示,与上面类似。

y

1100

z

1101

通过上面数字符号与一般符号的组合对比,可以看到,数字的无穷性就是一个符号组合的无穷性。

关于信号的编码也是一门专业的学科,作为程序员可以不去追究目前计算机为什么采用这些信息编码格式的原因,但是也至少应该清楚编码的实际含义以及采用这些编码的好处。

如果读者对于信息的编码和存储感兴趣,可以自己去更加深入地学习,或许你会在某些领域找到一些更加有效的信息编码方法,让计算变得更快,让存储空间占用更小。

上面讲了二进制是什么,其他进制的原理也基本一样。

只有在16进制中,出现了符号“A、B、C、D、E、F”分别代表10进制的“10、11、12、13、14、15”,为什么要这样,0-9这几个数字符号与10进制一样,都可以用对应的阿拉伯数字可以表示,因此与10进制共用这些数字符号,但是超过10时,没有相应的阿拉伯数字对应,因此必须用其他符号来表示,而且是单一的符号,而不是组合符号。

这样就产生了用“A”来表示10,为什么不用其他符号来表示,这仅是一个约定,并没有其他的含义。

如果最初制定这个规则的人,心血来潮用“O、P、Q、R、S、T”来表示一样也是可以的,但是人类的思维总是应该遵从一定的规律,A属于字母排序中的第一位,自然而然地就优先

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2