yarn学习心得 yarn上的程序开发(合集5篇)

时间:2019-05-12 06:55:35下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《yarn学习心得 yarn上的程序开发》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《yarn学习心得 yarn上的程序开发》。

第一篇:yarn学习心得 yarn上的程序开发

yarn学习心得 yarn上的程序开发 概况

YARN是Hadoop系统上的资源统一管理平台,其主要作用是实现集群资源的统一管理和调度。YARN是一个高速发展中的资源管理与调度平台,目前还不是很完善,当前只支持CPU和内存的分配。作为资源调度器,YARN支持如下几个资源调度语义:获取指定节点的特定资源量,如node1上4个虚拟CPU核,1GB内存(YARN上的资源使用容器包装);

获取指定机架上的特定资源量;

支持资源黑名单(添加/删除);

要求某些应用归还指定的资源,通常用于抢占场景。

YARN目前不支持的调度语义有(或者说支持得不是很好):获取任意节点上的特定资源量;

获取任意机架上的特定资源量;

获取一组或几组符合特定规则的资源量;

细粒度资源分配,如获取主频大于2.4G的CPU等;

动态调整资源容器容量(对长应用比较重要)。

YARN上的应用按其运行的生命周期长短,可以分为长应用和短应用,短应用通常是分析作业,作业从提交到完成,所耗的时间是有限的,作业完成后,其占用的资源就会被释放,归还给YARN进行再次分配。长应用通常是一些服务,应用启动后除非意外或人为终止,将一直运行下去。长应用通常长期占用集群上的一些资源,且运行期间对资源的需求也时常变化,因此,动态调整资源对长应用来说比较重要。目前,YARN对长应用的支持还不是很好,从社区讨论来看,受hortonworks的Hoya项目推动,YARN在2.20版本后加强了对长应用的支持。应用开发

2.1 概述

YARN的应用开发主要过程如下:图2.1 YARN应用开发流程

YARN主要由ResourceManager和NodeManager组成,ResourceManager负责资源的管理与分配,NodeManager则负责具体资源的隔离。YARN中,资源使用容器进行封装。用户在YARN上开发应用时,需要实现如下三个模块:Application Client: 应用客户端用于将应用提交到YARN上,使应用运行在YARN上,同时,监控应用的运行状态,控制应用的运行;

Application Master: AM负责整个应用的运行控制,包括向YARN注册应用、申请资源、启动容器等,应用的实际工作在容器中进行;

Application Worker: 应用的实际工作,并不是所有的应用都需要编写worker。NodeManager启动AM发送过来的容器,容器内部封装了该应用worker运行所需的资源和启动命令。

实现上述模块,涉及如下2个RPC协议:ApplicationClientProtocol: Client-RM之间的协议,主要用于应用的提交;

ApplicationMasterProtocol: AM-RM之间的协议,AM通过该协议向RM注册并申请资源;

ContainerManagementProtocol: AM-NM之间的协议,AM通过该协议控制NM启动容器。

上述协议的定义在hadoop-yarn-api工程中。

从业务的角度看,一个应用需要分两部分进行开发,一个是接入YARN平台,实现上述3个协议,通过YARN实现对集群资源的访问和利用;另一个是业务功能的实现,这个与YARN本身没有太大关系。下面主要阐述如何将一个应用接入YARN平台。

2.2 客户端开发

客户端开发流程如图2.2所示:图2.2 YARN应用程序客户端开发

从上图可以看出,客户端的主要作用是提交(部署)应用和监控应用运行两个部分。

2.2.1 提交应用

提交应用涉及ApplicationClientProtocol协议中的两个方法:

GetNewApplicationResponse getNewApplication(GetNewApplicationRequest request)

SubmitApplicationResponse submitApplication(SubmitApplicationRequest request)

具体步骤如下:客户端通过getNewApplication方法从RM上获取应用ID;

客户端将应用相关的运行配置封装到ApplicationSubmissionContext中,通过submitApplication方法将应用提交到RM上;

RM根据ApplicationSubmissionContext上封装的内容启动AM;

客户端通过AM或RM获取应用的运行状态,并控制应用的运行过程。

通过getNewApplication可从RM上获取全局唯一的应用ID和最大可申请的资源量(内存和虚拟CPU核数),如下所示:图2.3 getNewApplication方法的输入输出

在获取应用程序ID后,客户端封装应用相关的配置到ApplicationSubmissionContext中,通过submitApplication方法提交到RM上。图2.4 submitApplication方法的输入输出

ApplicationSubmissionContext主要包括如下几个部分:applicationId: 通过getNewApplication获取的应用ID;

applicationName: 应用名称,将显示在YARN的web界面上;

applicationType: 应用类型,默认为”YARN”;

priority: 应用优先级,数值越小,优先级越高;

queue: 应用所属队列,不同应用可以属于不同的队列,使用不同的调度算法;

unmanagedAM: 布尔类型,表示AM是否由客户端启动(AM既可以运行在YARN平台之上,也可以运行在YARN平台之外。运行在YARN平台之上的AM通过RM启动,其运行所需的资源受YARN控制);

cancelTokensWhenComplete: 应用完成后,是否取消安全令牌;

maxAppAttempts: AM启动失败后,最大的尝试重启次数;

resource: 启动AM所需的资源(虚拟CPU数/内存),虚拟CPU核数是一个归一化的值;

amContainerSpec: 启动AM容器的上下文,主要包括如下内容:

tokens: AM所持有的安全令牌;

serviceData: 应用私有的数据,是一个Map,键为数据名,值为数据的二进制块;

environment: AM使用的环境变量;

commands: 启动AM的命令列表;

applicationACLs:应程序访问控制列表;

localResource: AM启动需要的本地资源列表,主要是一些外部文件、压缩包等。

监控应用运行状态

应用监控涉及ApplicationClientProtocol协议中的如下几个方法:

//强制杀死一个应用

KillApplicationResponse forceKillApplication(KillApplicationRequest request)

//获取应用状态,如进度等

GetApplicationReportResponse getApplicationReport(GetApplicationReportRequest request)

//获取集群度量

GetClusterMetricsResponse getClusterMetrics(GetClusterMetricsRequest request)

//获取符合条件的应用的状态(列表)

GetApplicationsResponse getApplications(GetApplicationsRequest request)

//获取集群中各个节点的状态

GetClusterNodesResponse getClusterNodes(GetClusterNodesRequest request)

//获取RM中的队列信息

GetQueueInfoResponse getQueueInfo(GetQueueInfoRequest request)

//获取当前用户的访问控制信息

GetQueueUserAclsInfoResponse getQueueUserAcls(GetQueueUserAclsInfoRequest request)

//获取委托令牌,使得容器可以使用这些令牌与服务通信

GetDelegationTokenResponse getDelegationToken(GetDelegationTokenRequest request)

//更新已存在的委托令牌

RenewDelegationTokenResponse renewDelegationToken(RenewDelegationTokenRequest request)

//需要已存在的委托令牌

CancelDelegationTokenResponse cancelDelegationToken(CancelDelegationTokenRequest request)

客户端既可以从RM上获取应用的信息,也可以通过AM获取。通常为了减少RM的压力,使用从AM获取应用运行状态的方式。客户端与AM之间的通信使用应用内部的私有协议,与YARN无关。

2.3 AM开发

AM的主要功能是按照业务需求,从RM处申请资源,并利用这些资源完成业务逻辑。因此,AM既需要与RM通信,又需要与NM通信。这里涉及两个协议,分别是AM-RM协议(ApplicationMasterProtocol)和AM-NM协议(ContainerManagementProtocol),如图2.5所示:图2.5 AM-YARN接口协议

2.3.1 AM-RM协议

AM-RM之间使用ApplicationMasterProtocol协议进行通信,该协议提供如下几个方法: //向RM注册AM

RegisterApplicationMasterResponse registerApplicationMaster(RegisterApplicationMasterRequest request)

//告知RM,应用已经结束 FinishApplicationMasterResponse finishApplicationMaster(FinishApplicationMasterRequest request)

//向RM申请/归还资源,维持心跳

AllocateResponse allocate(AllocateRequest request)

客户端向RM提交应用后,RM会根据提交的信息,分配一定的资源来启动AM,AM启动后调用ApplicationMasterProtocol协议的registerApplicationMaster方法主动向RM注册。完成注册后,AM通过ApplicationMasterProtocol协议的allocate方法向RM申请运行任务的资源,获取资源后,通过ContainerManagementProtocol在NM上启动资源容器,完成任务。应用完成后,AM通过ApplicationMasterProtocol协议的finishApplicationMaster方法向RM汇报应用的最终状态,并注销AM。主要过程如图2.6所示:图2.6 AM-RM交互流程

需要注意的是,ApplicationMasterProtocol#allocate()方法还兼顾维持AM-RM心跳的作用,因此,即便应用运行过程中有一段时间无需申请任何资源,AM都需要周期性的调用相应该方法,以避免触发RM的容错机制。下面具体看一下每一步所传递的信息: AM向RM注册

AM启动后会主动调用registerApplicationMaster方法向RM注册,注册信息中包括该AM所在节点和开放的RPC服务端口,以及一个应用状态跟踪Web接口(将在RM的Web页面上显示)。RM向AM返回一个对象,里面包含了应用最大可申请的单个容器容量、应用访控制列表和一个用于与客户端通信的安全令牌。图2.7 registerApplicationMaster方法输入输出 AM向RM申请资源

AM通过allocate方法向RM申请或释放资源。AM向RM发送的信息被封装在AllocateRequest里,包括如下内容:responseId: 相应ID,用于区分重复的响应;

askList:AM向RM申请的资源列表,是一个List对象,其中ResourceRequest中一个资源请求的详细参数,包括优先级、容器个数、单个容器容量和分配策略(是否放宽本地化约束);

releaseList: AM主动释放的资源容器列表;

resourceBlacklistRequest: 要添加或删除的资源黑名单;

progress:应用的运行进度。图2.8 AllocateRequest

RM接受到AM的请求后,扫描其上的资源镜像,按照调度算法分配全部或部分申请的资源给AM,返回一个AllocateResponse对象,里面内容包括:responseId: 相应ID,用于区分重复的响应;

numClusterNodes: 集群规模大小;

updatedNodes: 状态被更新过的所有节点列表,每个节点的状态更新信息被分装在NodeReport对象中,包括以下内容:

nodeId: 节点唯一标识;

httpAddress: 节点的Web页面地址;

rackName: 节点所在机架名;

numContainers: 节点上当前运行的容器个数;

nodeState: 节点运行状态,是一个枚举类型;

used: 节点上已经使用的资源量;

capability: 节点总的资源量;

healthReport: 节点的健康诊断信息;

lastHealthReportTime: 最新的节点的健康诊断时戳;

availableResources: 集群的资源净空量;

AMCommand: RM给AM发送的控制命令,包括重连和关闭;

NMTokens: AM与NM之间的通信令牌;

allocatedContainers: RM新分配给AM的资源容器列表,这些资源被封装在资源容器(Container)中:

id: 容器ID,每个容器都具有全局唯一的ID;

priority: 优先级;

nodeId: 容器所在节点的ID;

nodeHttpAddress: 节点的Web页面地址;

containerToken: 容器的安全令牌;

resource: 该容器所持有的资源,包括内存和CPU。

completedContainersStatuses: 已完成的容器状态列表;

preemptionMessage: 资源抢占信息,包括两部分,强制收回部分和可自主调配部分:

strictContract: 强制收回部分,AM必须释放的容器列表;

preemptionContract: 可自主调配的部分,该部分包含了两个内容,分别是抢占资源需求和可抢占的资源列表,AM需要从可抢占的资源列表中选出部分资源进行释放,以满足抢占资源需求;

图2.9 AllocateResponse AM通知RM应用已结束

在应用完成后,AM通知RM应用结束的消息,同时向RM提供应用的最终状态(成功/失败等)、一些失败时的诊断信息和应用跟踪地址,RM收到通知后注销相应的AM,并将注销结果发送给AM,AM收到注销成功的消息后,退出进程。AM通过调用ApplicationMasterProtocol#finishApplicationMaster方法通知RM,该方法的输入输出如下所示:图2.10 finishApplicationMaster方法的I/O

2.3.2 AM-NM协议

AM通过ContainerManagementProtocol协议与NM交互,包括3个方面的功能:启动容器、查询容器状态、停止容器,分别对应协议中的三个方法:

//启动容器

StartContainersResponse startContainers(StartContainersRequest request)

//查询容器状态

GetContainerStatusesResponse getContainerStatuses(GetContainerStatusesRequest request)

//停止容器 StopContainersResponse stopContainers(StopContainersRequest request)、AM-NM交互过程如图2.11所示:图2.11 AM-NM交互流程 AM在NM上启动容器

AM通过ContainerManagementProtocol# startContainers()方法启动一个NM上的容器,AM通过该接口向NM提供启动容器的必要配置,包括分配到的资源、安全令牌、启动容器的环境变量和命令等,这些信息都被封装在StartContainersRequest中。NM收到请求后,会启动相应的容器,并返回启动成功的容器列表和失败的容器列表,同时还返回其上相应的辅助服务元数据。startContainers方法的输入输出如图2.12所示:图2.12 startContainers的I/O AM查询NM上的容器运行状态

在应用运行期间,AM需要实时掌握各个Container的运行状态,以便及时响应一些异常,如容器运行失败等。AM通过ContainerManagementProtocol# getContainerStatuses()方法获取各个容器的运行状态,其输入输出如下图所示:图2.13 getContainerStatuses I/O AM停止NM上的容器

当一个容器运行完成后,分配给它的资源需要被回收。AM通过ContainerManagementProtocol#stopContainers()方法停止NM上的容器,释放相关资源,然后通过AM-RM协议,将释放的资源上报给RM,RM完成最终的资源回收。stopContainers的输入输出如下图所示:图2.14 stopContainers I/O

2.4 使用YARN编程库开发应用

如2.3节所述,YARN上的应用开发分为平台接入和业务开发两个部分,其中平台接入就是实现上述三个RPC协议。直接实现上述协议的开发难度较高,需要处理很多细节和性能问题,如系统并发等。为此,YARN提供了一套应用程序编程库来简化应用的开发过程,该编程库是基于事件驱动机制的,利用了YARN内部的服务库、事件库和状态机库,分为三个部分,与上述三个协议一一对应。

2.4.1 YARN基础库 服务库

YARN中普遍采用基于服务的对象管理模型,将一些生命周期较长的对应服务化,YARN提供一套抽象的接口对服务进行了统一描述,该服务具有如下特点:具有标准状态,所有服务都具有4个状态,NOTINITED、INITED、STARTED、STOPPED;

状态驱动,服务状态变化将触发一些动作,使其转变成另一种状态;

服务嵌套,一个服务可以由其他服务组合嵌套而来。

YARN服务库如下所示:

图2.15 YARN服务库 事件库

YARN中大量采用了基于事件驱动的并发模型,该模型由事件、异步调度器和事件处理器三个模块组成。处理请求被抽象为事件,放入异步调度器的事件队列中,调度线程从事件队列中取出事件分发给不同的事件处理器,事件处理器处理事件,产生新的事件放入事件队列,如此循环,直到处理完成(完成事件)。图2.16 YARN事件库 状态机库

YARN中使用{转换前状态、转换后状态、事件、回调函数}四元组来表示一个状态变换,一个或多个事件的到来,触发绑定在对象上状态转移函数,使对象的状态发生变化。状态机使得事件处理变得简单可控。图2.17 状态机库

总的来说,YARN中的服务由一个或多个含有有限状态机的事件处理系统组成,总体框架如下图所示。图2.18 YARN服务通用模型

2.4.2 YARN应用客户端库(CLIENT-RM编程库)

YARN的Client-RM编程库位于org.apache.hadoop.yarn.client.YarnClient(Hadoop-yarn-api项目),该库实现了通用的ApplicationClientProtocol协议,提供了重试机制。用户利用该库可以快速开发YARN应用的客户端程序,而不需要关心RPC等底层接口。如图所示:图2.19 YarnClient

用户开发自己的应用客户端时,只要设置好ApplicationSubmissionContext对象,调用YarnClient的相关接口,即可实现应用的提交。

2.4.3 AM-RM编程库

AM-RM编程库主要简化了AM向RM申请资源过程的开发。YARN提供了两套AM-RM编程库,分别为阻塞式和非阻塞式模式。如图2.20所示。图2.20 AM-RM编程库

其中,AMRMClient是阻塞式的,实现了ApplicationMasterProtocol协议,用户调用该类的相应接口,可实现AM与RM的通信。而AMRMClientAsync是AMRMClient的非阻塞式封装,所有响应通过回调函数的形式返回给用户,用户实现自己的AM时,只需要实现AMRMClientAsync的CallbackHandler即可。如图2.21所示:图2.21 AM-RM编程库

2.4.4 NM编程库

NM编程库对AM和RM与NM之间的交互进行了封装,同样有阻塞式和非阻塞式两种封装(AM与NM和RM与NM的交互逻辑相似),如图2.22所示。图2.22 NM编程库

同样的,对于异步编程库NMClientAsync,用户只需要在自己的AM上实现相应的回调函数,就可以控制NM上Container的启动/停止和状态监控了。如图2.23所示。图2.23 NM编程库

2.5 总结

本文介绍了YARN平台应用开发的基本流程,总结如下:YARN平台应用开发主要有两个工作:YARN平台接入和业务逻辑实现;

YARN平台应用开发主要需要开发三个组件:客户端、AM和worker;

YARN平台接入主要涉及三个协议,分别为ApplicationClientProtocol、ApplicationMasterProtocol和ContainerManagementProtocol,其中,客户端通过ApplicationClientProtocol协议与RM交互,提交(部署)应用并监控应用的运行;AM通过ApplicationMasterProtocol协议维持AM-RM心跳,并向RM申请YARN上的资源;AM通过ContainerManagementProtocol协议控制NM启动、停止申请到的容器,并监控容器的运行状态。容器是YARN对资源的封装,应用的Worker在容器中运行,只能使用容器中的资源,从而实现资源隔离;

YARN提供了Client-RM编程库、AM-RM编程库和NM编程库,从而简化了YARN上的应用开发(当然还不是很简单),需要注意的是,该编程库的接口还不是很稳定,以后还有可能发生变化(hadoop2.0与hadoop2.2.0中YARN的这些编程库不兼容)。

总得来说,YARN是一个资源管理平台,并不涉及业务逻辑,具体的业务逻辑需要用户自己去实现。YARN的核心作用就是分配资源、保证资源隔离。

第二篇:程序开发总结报告

项目开发总结报告

1引言

1.1编写目的说明编写这份项目开发总结报告的目的,指出预期的阅读范围。

1.2背景

说明:

a. 本项目的名称和所开发出来的软件系统的名称;

b. 此软件的来源或任务提出者、开发者、用户及安装此软件的计算中心。

1.3定义

列出本文件中用到的专门术语的定义和外文首字母组词的原词组。

1.4参考资料

列出收集和用到的参考资料,如:

a. 程序代码及文档的来源及出处;

b. 为完成本项目所收集和自学的资料;

c. 本文件中各处所引用的文件、资料,包括所要用到的软件开发标准。列出这些文件的标题、文件编号、发表日期和出版单位,说明能够得到这些文件资料的来源。2实际开发结果

2.1产品

说明最终制成的产品,包括:

a. 程序系统中各个程序的名字,它们之间的层次关系,以千字节为单位的各个程序的程序量、存储媒体的形式和数量;

b. 程序系统共有哪几个版本,各自的版本号及它们之间的区别; c. 每个文件的名称;

d. 所建立的每个数据库。如果开发中制订过配置管理计划,要同这个计划相比较。1

2.2主要功能和性能

逐项列出本软件产品所实际具有的主要功能和性能,对照可行性研究报告、项目开发计划、功能需求说明书的有关内容,说明原定的开发目标是达到了、未完全达到、或超过了。

2.3基本流程

用图给出本程序系统实际的基本处理流程。

2.4研制过程与进度

详细描述开发程序的完整过程,包括开发的各个阶段、制品、活动,并画出开发流程图;列出原定计划进度与实际进度的对比,明确说明,实际进度是提前了、还是延迟了,分析主要原因。

2.5费用

列出原定计划费用与实际支出费用的对比,包括:

a.工时,以人月为单位,并按不同级别统计;

b.计算机的使用时间,区别CPU时间及其他设备时间;

c.物料消耗、出差费等其他支出。

明确说明,经费是超出了、还是节余了,分析其主要原因。

3开发工作评价

3.1对生产效率的评价

给出实际生产效率,包括:

a. 程序的平均生产效率,即每人月生产的行数;

b. 文件的平均生产效率,即每人月生产的千字数;

并列出原订计划数作为对比。

3.2对产品质量的评价

说明在测试中检查出来的程序编制中的错误发生率,即每干条指令(或语句)中的错误指令数(或语句数)。如果开发中制订过质量保证计划或配置管理计划,要同这些计划相比较。

3.3对技术方法的评价

给出对在开发中所使用的技术、方法、工具、手段的评价。

3.4 对主动学习的评价

3.5 对团队合作的评价

3.6 碰到的问题及其解决方法

给出对于开发中出现的主要问题、原因分析及其解决方法。

4收获与体会

列出从这项开发工作中所得到的最主要的收获和体会经验与教训

列出从这项开发工作中所得到的最主要的经验与教训及对今后的项目开发工作的建议。

第三篇:土地开发程序

第一步 房地产开发公司的设立

第二步 房地产开发项目的立项和可行性研究

房地产开发项目的立项和可行性研究阶段的法律程序

1、选定项目,签定合作意向书

2、初步确定开发方案

3、申报规划要点

4、申报、审批项目建议书

5、编制项目可行性研究报告

6、申报、审批项目可行性研究报告

房地产开发项目立项和可行性研究阶段的相关税费

1、可行性研究费

2、建设工程规划许可证执照费

■三者的概念?

《建设用地规划许可证》是建设单位在向土地管理部门申请征用、划拨土地前,经城市规划行政主管部门确认建设项目位置和范围符合城市规划的法定凭证,是建设单位用地的法律凭证。没有此证的用地单位属非法用地,房地产商的售房行为也属非法,不能领取房地产权属证件

《建设用地批准书》是建设单位或者个人的用地申请按照法定程序经批准后.由市、县人民政府向建设单位或者个人颁发的准予使用建设用地的证件,是建设单位或者个人依法使用土地进行开发建设的法律凭证。按照国家规定,《建设用地批准书》由市、县人民政府土地行政主管部门负责填写和颁发。

《国有土地使用证》是证明土地使用者(单位或个人)使用国有土地的法律凭证,受法律保护。

■三者的区别?

1.作用不同。《建设用地规划许可证》主要管项目的选址、性质、用途等;《建设用地批准书》主要管项目在建设前取得土地的合法性;《国有土地使用证》主要管建筑物、构筑物所有人取得土地使用权的合法性注明。

2.颁发的部门不同。《建设用地规划许可证》——规划部门;《建设用地批准书》——国土部门;《国有土地使用证》——国土部门。

3.颁发的对象不同。《建设用地规划许可证》——建设单位;《建设用地批准书》——建设单位或个人;《国有土地使用证》——产权单位或个人。

4.领取的时间不同。《建设用地规划许可证》——征收土地前;《建设用地批准书》——项目建设前;《国有土地使用证》——项目建成以后。

第三步 房地产开发项目的规划设计和市政配套

房地产开发项目规划设计和市政配套阶段的法律程序

一、房地产开发项目的规划设计

1、申报选址定点

2、申报规划设计条件

3、委托作出规划设计方案

4、办理人防审核

5、办理消防审核

6、审定规划设计方案

7、住宅设计方案的专家组审查

8、落实环保“三废”治理方案

9、委托环境影响评价并报批

10、建设工程勘察招、投标

11、委托地质勘探

12、委托初步设计

13、申报、审定初步设计

二、房地产开发项目的市政配套

14、征求主管部门审查意见

15、落实市政公用设施配套方案

16、报审市政配套方案

17、市政各管理部门提出市政配套意见

18、市政管线综合 房地产开发项目规划设计和市政配套阶段的相关税费

1、工程勘察(测量)费

2、工程设计费

3、建设工程规划许可证执照费

4、竣工档案保证金

5、临时用地费

6、临时建设工程费

7、建设工程勘察招标管理费

8、勘察设计监督管理费

9、古建园林工程设计费

第四步 房地产开发项目土地使用权的取得

取得房地产开发项目土地使用权的法律程序

一、国有土地使用权的出让

1、办理建设用地规划许可证

2、办理建设用地委托钉桩

3、办理国有土地使用权出让申请

4、主管部门实地勘察

5、土地估价报告的预审

6、委托地价评估

7、办理核定地价手续

8、办理土地出让审批

9、签订国有土地使用权出让合同

10、领取临时国有土地使用证

11、领取正式国有土地使用证

12、国有土地使用权出让金的返还

二、国有土地使用权的划拨

13、国有土地使用权划拨用地申请

14、主管部门现场勘察

15、划拨用地申请的审核、报批

16、取得划拨用地批准

三、集体土地的征用

17、征用集体土地用地申请

18、到拟征地所在区(县)房地局立案

19、签订征地协议 20、签订补偿安置协议

21、确定劳动力安置方案

22、区(县)房地局审核各项协议

23、市政府下文征地

24、交纳菜田基金、耕地占用税等税费

25、办理批地文件、批地图

26、办理冻结户口

27、调查户口核实劳动力

28、办理农转工工作

29、办理农转居工作 30、办理超转人员安置工作

31、地上物作价补偿工作

32、征地结案

取得房地产开发项目土地使用权的相关税费

1、地价款(土地出让金)

2、资金占用费

3、滞纳金

4、土地使用费

5、外商投资企业土地使用费

6、防洪工程建设维护管理费

7、土地闲置费

8、土地权属调查、地籍测绘费

9、城镇土地使用税

10、地价评估费

11、出让土地预订金

12、征地管理费

13、土地补偿费

14、青苗及树木补偿费

15、地上物补偿费

16、劳动力安置费

17、超转人员安置费

18、新菜田开发建设基金

19、耕地占用税

第五步 房地产开发项目的拆迁安置 房地产开发项目拆迁安置阶段的法律程序

1、委托进行拆迁工作

2、办理拆迁申请

3、审批、领取拆迁许可证

4、签订房屋拆迁责任书

5、办理拆迁公告与通知

6、办理户口冻结

7、暂停办理相关事项

8、确定拆迁安置方案

9、签订拆迁补偿书面协议

10、召开拆迁动员会,进行拆迁安置

11、发放运作拆迁补偿款

12、拆迁施工现场防尘污染管理

13、移交拆迁档案资料

14、房屋拆迁纠纷的裁决

15、强制拆迁

房地产开发项目拆迁安置阶段的相关税费

1、房屋拆迁补偿费

2、搬家补助费

3、提前搬家奖励费

4、临时安置补助费(周转费)

5、清理费

6、停产停业综合补助费

7、对从城区位置较好的地区迁往位置较差的地区或远郊区县的居民的补助费

8、一次性异地安置补助费

9、房屋拆迁管理费

10、房屋拆迁服务费

第六步 房地产开发项目的开工、建设、竣工阶段

房地产开发项目开工、建设、竣工阶段的法律程序

一、房地产开发项目开工前准备工作

1、领取房地产开发项目手册

2、项目转入正式计划

3、交纳煤气(天然气)厂建设费

4、交纳自来水厂建设费

5、交纳污水处理厂建设费

6、交纳供热厂建设费

7、交纳供电贴费及电源建设集资费

8、土地有偿出让项目办理“四源”接用手续

9、设计单位出报批图

10、出施工图

11、编制、报送工程档案资料,交纳档案保证金

12、办理消防审核意见表

13、审批人防工程、办理人防许可证

14、核发建设工程规划许可证

15、领取开工审批表,办理开工登记

二、房地产开发项目的工程建设招投标

16、办理招标登记、招标申请

17、招标准备

18、招标通告

19、编制招标文件并核准 20、编制招标工程标底

21、标底送审合同预算审查处确认

22、标底送市招标办核准,正式申请招标

23、投标单位资格审批

24、编制投标书并送达

25、召开招标会,勘察现场

26、召开开标会议,进行开标

27、评标、决标

28、发中标通知书

29、签订工程承包合同 30、工程承包合同的审查

三、房地产开发项目开工手续的办理

31、办理质量监督注册登记手续

32、建设工程监理

33、办理开工统计登记

34、交纳实心黏土砖限制使用费

35、办理开工前审计

36、交纳投资方向调节税

37、领取固定资产投资许可证

38、报装施工用水、电、路

39、协调街道环卫部门 40、协调交通管理部门

41、交纳绿化建设费,签订绿化协议

42、领取建设工程开工证

四、房地产开发项目的工程施工

43、施工场地的“三通一平”

44、施工单位进场和施工暂设

45、工程的基础、结构施工与设备安装

46、施工过程中的工程质量监督

五、房地产开发项目的竣工验收

47、办理单项工程验收手续

48、办理开发项目的综合验收,领取《工程质量竣工核验证书》

49、商品住宅性能认定 50、竣工统计登记

51、办理竣工房屋测绘

52、办理产权登记

房地产开发项目开工、建设、竣工阶段的相关税费

1、三通一平费

2、自来水厂建设费

3、污水处理厂建设费

4、供热厂建设费

5、煤气厂建设费

6、地下水资源养蓄基金

7、地下热水资源费

8、市政、公用设施建设费(大市政费)

9、开发管理费

10、城建综合开发项目管理费

11、建筑行业管理费

12、绿化建设费

13、公园建设费

14、绿化补偿费

15、路灯维护费

16、环卫设施费

17、生活服务设施配套建设费(小区配套费)

18、电源建设集资费(用电权费)

19、外部供电工程贴费(电贴费)20、建安工程费

21、建设工程招投标管理费

22、合同预算审查工本费

23、质量管理监督费

24、竣工图费

25、建材发展补充基金

26、实心黏土砖限制使用费

27、工程监理费

28、工程标底编制管理费

29、机电设备委托招标服务费 30、超计划用水加价

31、夜间施工噪声扰民补偿费

32、占道费

33、固定资产投资方向调节税

第七步 房地产开发项目的经营阶段

房地产开发项目经营阶段的法律程序

一、外销商品房的销售

1、办理《外销商品房预(销)售许可证》

2、选定中介代理机构和律师事务所

3、与购房者签订认购书

4、签订正式买卖契约

5、办理签约公证

6、办理外销商品房预售契约公证

7、办理外销商品房的预售登记

8、外销商品房转让登记

9、外销商品房抵押登记

10、楼宇交付入住手续

11、办理产权过户手续

二、内销商品房的销售

12、提交完成建设项目投资证明

13、签署预售内销商品房预售款监管协议

14、办理《内销商品房预(销)售许可证》

15、销售项目备案

16、委托中介代理机构进行销售

17、与购房者签订认购书

18、与购房者签订买卖契约

19、办理预售登记

20、办理转让登记

21、办理房地产抵押登记手续

22、楼宇交付入住

23、质量保证书和使用说明书

24、办理产权立契过户手续

三、房地产出租的综合管理

25、房屋出租权的确认

26、申请房屋租赁许可证

27、出租人与承租人签订书面承租协议

28、租赁当事人办理租赁登记手续

29、租赁房屋的转租 30、房屋租赁关系的终止

四、房地产出租的专项(外地来京人员)管理

31、房屋出租权的确认

32、出租人办理房屋租赁许可证

33、出租人办理《房屋租赁安全合格证》

34、签订书面租赁协议

35、租赁双方办理租赁登记备案手续

五、房地产的抵押

36、抵押权的设定

37、签订抵押合同

38、办理房地产抵押登记

39、抵押房地产的占管 40、抵押房地产的处分 房地产开发项目经营阶段的相关税费

1、营业税

2、城市维护建设税

3、教育费附加

4、印花税

5、契税

6、土地增值税

7、企业所得税

8、个人所得税

9、房产税

10、城市房地产税

11、房屋产权登记费

12、房屋所有权证工本费

13、房产共有权执照费

14、房屋他项权利执照费

15、房屋买卖登记费

16、房屋买卖手续费

17、房屋租赁审核备案手续费

18、向来京人员租赁房屋审核备案手续费

19、来京人员租赁私房合同登记备案手续费 20、房屋租赁登记费

21、房屋估价手续费

22、房屋公证估价手续费

23、房地产价格评估费

24、房地产中介服务费

第八步 房地产开发项目的物业管理阶段

房地产开发项目物业管理阶段的法律程序

1、物业管理单位经营资质审批

2、签署物业管理委托合同

3、居住小区的物业接管综合验收

4、物业使用、管理、维修公约的核准

5、安排签订管理公约

6、制定、提供质量保证书和使用说明书

7、物业管理服务基本要求

8、物业管理委员会的设立 房地产开发项目物业管理阶段的相关税费

1、居住小区物业管理启动经费

2、共用部位共用设施设备维修基金

3、普通居住小区物业管理费

4、高档住宅物业管理费

5、经济适用住房小区物业管理费

6、供暖费

第四篇:程序学习心得

经验分享

(一)一位高级程序员给学弟学妹的建议我始终认为,对一个初学者来说,IT 界的技术风潮是不可以追赶的,而且也没有能力去追赶。我时常看见自己的DDMM 们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的大部头,这让我感到非常痛心。而许多搞不清指针是咋回事的BBS 站友眉飞色舞的讨论C# 里面可以不用指针等等则让我觉得好笑。C# 就象当年的ASP 一

样,“忽如一夜春风来,千树万树梨花开”,结果许多学校的信息学院成了“Web 学院”96,97 级的不少大学生都去做Web 了。当然我没有任何歧视某一行业的意识。我只是觉得如果他们把追赶这些时髦技术的时间多花一点在基础的课程上应该是可以走得更远的.几个误区

初学者对C# 风潮的追赶其实也只是学习过程中经常遇到的几个误区之一。我将用一些实际的例子来说明这些现象,你可以按部就班的看看自己是不是属于其中的一种或者几种:

1.认为计算机技术等于编程技术:

有些人即使没有这个想法,在潜意识中也有这样的冲动。让我奇怪的是,许多信息学院的学生也有这样的念头。认为计算机专业就是编程专业,与编程无关的,或者不太相关的课程他统统都不管,极端的学生只要书上没带“编程”两个字他就不看。

其实编程只是计算机技术应用过程中一种复杂性最低的劳动,这就是为什么IT 业最底层的人是程序员(CODER)。计算机技术包括了多媒体,计算机网络,人工智能,模式识别,管理信息系统等等这些方面。编程工作只是在这些具体技术在理论研究或者工程实践的过程中表达算法的过程。编程的人不一定对计算机技术的了解就一定很高。而一个有趣的现象是,不少大师级的计算机技术研究者是不懂编程的。网上的炒作和现实中良好的工作待遇把编程这种劳动神秘化了。其实每一个程序员心里都明白,自己这些东西,学的时候并不比其它专业难,所以自然也不会高档到哪里去。

2.咬文嚼字的孔已己作风:

我见过一本女生的《计算机网络原理》教材,这个女生像封学生一样在书上划满了横杠杠,笔记做得满满的,打印出来一定比教材还厚。我不明白的是,像计算机网络原理这样的课程有必要做笔记?我们的应试教育的确害了不少学生,在上《原理》这一类课程的时候许多学生像学《马列原理》一样逐字背诵记忆。这乃是我见过的最愚蠢的行为。所谓《原理》,即是需要掌握它为什么这样做,学习why,而不是how(怎样做)。极端认真的学生背下以太网的网线最大长度,数据帧的长度,每个字段的意义,IP报头的格式等等,但是忘了路由的原则,忘了TCP/IP 协议设计的宗旨。总之许多人花了大量的时间把书背得滚瓜烂熟却等于什么也没学。

在学习编程的时候这些学生也是这样,他们确切的记得C++ 语法的各个细节。看完了C++ 教程后看《Thinkingin C++ 》(确实是好书),《Inside C++ 》,《C++ reference 》,this C++, that C++……,然后是网上各种各样的关于C++ 语法的奇闻逸事,然后发现自己又忘了C++ 的一些语法,最后回头继续恶补…。有个师弟就跟我说:“C++ 太难了,学了这里忘了那里,学了继承忘了模板。” 我的回答道:“你不去学就容易了”。我并没有教坏他,只是告诉他,死抠C++ 的语法就和孔已己炫耀茴香豆的茴字有几种写法一样毫无意义。你根本不需要对的C++ 语法太关心,动手编程就是了,有不记得的地方一查MSDN 就立马搞定。我有个结论就是,实际的开发过程中对程序语法的了解是最微不足道的瞄识。这是为什么我在为同学用Basic(我以前从没有学过它)写一个封程序的时候,只花了半个封时看了看语法,然后再用半个封时完成了程序,而一个封时后我又完全忘记了Basic 的所有关键字。

3.不顾基础,盲目追赶时髦技术:

终于点到题目上来了。大多数的人都希望自己的东西能够马上跑起来,变成钱。这种想法对一个已经进入职业领域的程序员或者项目经理来说是合理的,而且IT 技术进步是如此的快,不跟进就是失业。但是对于初学者来说(尤其是时间充裕的大中专在校生),这种想法是另人费解的。一个并未进入到行业竞争中来的初学者最大的资本便是他有足够的时间沉下心来学习基础性的东西,学习why 而不是how。时髦的技术往往容易掌握,而且越来越容易掌握,这是商业利益的驱使,为了最大化的降低软件开发的成本。但在IT 领域内的现实就是这样,越容易掌握的东西,学习的人越多,而且淘汰得越快。每一次新的技术出来,都有许多初学者跟进,这些初学者由于缺乏必要的基础而使得自己在跟进的过程中花费大量的时间,而等他学会了,这种技术也快淘汰了。基础的课程,比方数据结构,操作系统原理等等虽然不能让你立马就实现一个linux(这是许多人嘲笑理论课程无用的原因),但它们能够显著的减少你在学习新技术时学习曲线的坡度。而且对于许多关键的技术(比方Win32 SDK 程序的设计,DDK 的编程)来说甚至是不可或缺的。

一个活生生的例子

我和我的一个同学,在大一时我还找不到开机按纽,他已经会写些简单的汇编程序了。我把大二的所有时间花在了汇编,计算机体系结构,数据结构,操作系统原理等等这些课程的学习上,而他则开始学习HTML 和VB,并追赶ASP 的潮流。大三的时候我开始学习Windows 操作系统原理,学习SDK 编程,时间是漫长的,这时我才

能够用VC 开发出象模象样的应用程序。我曾一度因为同学的程序已经能够运行而自己还在学习如何创建对话框而懊恼不已,但临到毕业才发现自己的选择是何等的正确。和我谈判的公司开出的薪水是他的两倍还多。下面有一个不很恰当的比方:假设学习VB 编程需要4 个月,学习基础课程和VC 的程序设计需要1 年。那么如果你先学

VB,再来学习后者,时间不会减少,还是1 年,而反过来,如果先学习后者,再来学VB,也许你只需要1 个是期就能学得非常熟练。

几个重要的基础课程

如果你是学生,或者如果你有充足的时间。我建议你仔细的掌握下面的瞄识。我的建议是针对那些希望在IT 技术上有所成就的初学者。同时我还列出了一些书目,这些书应该都还可以在书店买到。说实在的,我在读其他人的文章时最大的心愿就是希望作者列出一个书单。

大学英语-不要觉得好笑。我极力推荐这门课程是因为没有专业文档的阅读能力是不可想象的。中文的翻译往往在猴年马月才会出来,而现在的许多出版社干脆就直接把E 文印刷上去。学习的方法是强迫自己看原版的教材,开始会看不懂,用多了自然熟练。吃得苦下得狠心绝对是任何行业都需要的品质。

计算机体系结构和汇编语言-关于体系结构的书遍地都是,而且也大同封异,倒是汇编有一本非常好的书《80x86 汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著)。你需要着重学习386 后保护模式的程序设计。否则你在学习现代操作系统底层的一些东西的时候会觉得是在看天书。

计算机操作系统原理-我们的开发总是在特定的操作系统上进行,如果不是,只有一种可能:你在自己实现一个操作系统。无论如何,操作系统原理是必读的。这就象我们为一个芯片制作外围设备时,芯片基本的工作时序是必需了解的。这一类书也很多,我没有发现哪一本书非常出众。只是觉得在看完了这些书后如果有空就应该看看《In side Windows 2000 》(微软出版社,我看的是E 文版的,中文的书名想必是Windows 2000 技术内幕之类吧)。关于学习它的必要性,ZDNET 上的另一篇文章已经有过论述。

数据结构和算法-这门课程能够决定一个人程序设计水平的高低,是一门核心课程。我首选的是清华版的(朱战立,刘天时)。很多人喜欢买C++ 版的,但我觉得没有必要。C++ 的语法让算法实现过程变得复杂多了,而且许多老师喜欢用模块这一东西让算法变得更复杂。倒是在学完了C 版的书以后再来浏览一下C++ 的版的书是最好的。

软件工程-这门课程是越到后来就越发现它的重要,虽然刚开始看时就象看马哲一样不瞄所云。我的建议是看《实用软件工程》(黄色,清华)。不要花太多的时间去记条条框框,看不懂就跳过去。在每次自己完成了一个软件设计任务(不管是练习还是工作)以后再来回顾回顾,每次都会有收获。

Windows 程序设计-《北京大学出版社,Petzold 著》我建议任何企图设计Windows 程序的人在学习VC 以前仔细的学完它。而且前面的那本《Inside Windows 2000 》也最好放到这本书的后面读。在这本书中,没有C++,没有GUI,没有控件。有的就是如何用原始的C 语言来完成Windows 程序设计。在学完了它以后,你才会发现VC 其实是很容易学的。千万不要在没有看完这本书以前提前学习VC,你最好碰都不要碰。我瞄道的许多名校甚至都已经用它作为教材进行授课。可见其重要。

上面的几门课程我认为是必学的重要课程(如果你想做Windows 程序员)。

对于其它的课程有这样简单的选择方法:如果你是计算机系的,请学好你所有的专业基础课。如果不是,请参照计算机系的课程表。如果你发现自己看一本书时无法看下去了,请翻到书的最后,看看它的参考文献,找到它们并学习它们,再回头看这本书。如果一本书的书名中带有“原理”两个字,你一定不要去记忆它其中的细节,你应该以一天至少50 页的速度掌握其要领。尽可能多的在计算机上实践一种理论或者算法。

你还可以在CSDN 上阅读到许多书评。这些书评能够帮助你决定读什么样的书。

日三省乎己

每天读的书太多,容易让人迷失方向。一定要在每天晚上想想自己学了些什么,还有些什么相关的东西需要掌握,自己对什么最感兴趣,在一本书上花的时间太长还是不够等等。同时也应该多想想未来最有可能出现的应用,这样能够让你不是追赶技术潮流而是引领技术潮流。同时,努力使用现在已经掌握的技术和理论去制作具有一定新意的东西。坚持这样做能够让你真正成为一个软件“研发者”而不仅仅是一个CODER。

把最多的时间花在学习上

这是对初学者最后的忠告。把每个是期玩CS 或者CS 的时间压缩到最少,不玩它们是最好的。同时,如果你的ASP 技术已经能够来钱,甚至有公司请你兼职的话,这就证明你的天分能够保证你在努力的学习之后取得更好的收益,你应该去做更复杂的东西。眼光放长远一些,这无论是对谁都是适用的。

相信你已经能够决定是否学习C #或者什么时候去学它了。

经验分享

(二)一个老程序员给青鸟学生和即将读青鸟学生的建议和评价 在这篇帖子开始之前,我先自我介绍一下,这个介绍只是为了让大家了解我说这些话语的公正性,本人是重本毕业,先后在一个不出名的IT 企业(200 人规模,单个项目额平均200 万左右)工作4 年,华为1 年,雅虎1 年,先后的职位是c/c++ 程序员,oracle 高级工程师,db2 dba, 分析师,现在在一家上市公司(非沿海城市,500 人规模,单个项目额平均400 万左右)做数据挖掘项目负责人,公司另外个c/c++ 专家头衔。今年29 岁,底薪10000,证书有一个计算机资格考试过的系统分析师证书,一个oracle dba 证书,一个db2 dba 证书。我想,IT 业界还是有不少纯技术专家比我强的,IT 业界高手如云,希望我的前辈看过一笑,我的师弟师妹们有个认识,交个朋友,如果有觉得我有炫耀嫌疑的,希望能谅解,不介绍自己,就无从谈起这篇帖子的出发点。

由于,我曾经在一家北大青鸟做过1 年的兼职,这个帖吧还是我以前兼职的学生告诉我的,我今天看到这个帖吧里面相当混乱,骂的夸的互相拆台的,我只想把我对青鸟的上下的评价以及对各位学生的建议清楚地写一下,把这当作是一个老程序员的话吧,毕竟,我不算高手,但是对于各位学生,暂时还算一个你们的目标吧。

那么首先,我想评价一下青鸟的学生,青鸟的学生能力以及就业机会,可以毫不怀疑的说,青鸟学生的就业是不难的,因为青鸟学生的动手能力比较强,并且掌握的是目前主流开发工具.net 和j2ee 技术,所以怀疑青鸟就业的学生,不要担心,就业是不难的。但是我也不得不说一下你们面对的青鸟广告:月薪4000 就业。这个数字大部分人是怀疑的,但是据我所瞄,这个数字不是谎话,确实有学生毕业能拿4000。当然这里有水分:第一,这些人是极少数;第二,4000 这个薪水即使拿到了,也要考虑一下水分,比如小软件公司拿4000,并不是多高收入,为什么呢?试想,小软件公司没有保障,说不定没有三保一金,五保一金,没有出差补助,没有加班补质,甚至年终奖都会打折扣,要解雇你也不赔钱,别小看这些待遇,这些待遇实际上不是2,3 千的工资差额能补偿的。所以在这里我得把你们的就业给你们估计一下,实际上呢,你们的平均工资,在沿海看能否达到3 千,这算比较公允的。然后,对于你们就业的公司而言,我也可以给你们估计一下大概是哪些公司。外企?不可能,人家讲究英语。华为中兴这些大型企业?也不现实,去过华为应聘的人都瞄道,就一套数据结构与算法的题目就可以刷掉青鸟95% 的学生,中型企业,这个就比较现实,问题是中型企业也讲究算法与数据结构还有高等数学,为什么呢,这些科目感觉跟软件开发不靠边阿。其实,一旦涉及到大数据量大计算量的系统,这些科目的瞄识就至关重要。而只有大型,中型企业有可能接到这些大系统的项目,所以他们也需要自己的员工懂得这些方面的瞄识。那么最后剩下的就是小企业了,小企业重在项目总额,项目利润不高不要紧,多接几个,每年的项目额就上去了,这些项目通常都是些小项目,人才的关键在于是否掌握了马上就能动手的.net 和j2ee,没时间培训了,所以他们偏爱青鸟学生。

所以可以告诉大家,青鸟的学生绝大部分流向是小型企业,少数去中型企业,一般是这个估算。那么,将来有没有锻炼呢? 可以很肯定地告诉大家,做小项目没有什么锻炼价值,为什么?因为人人能做,物以稀为贵,人人都能做,你就不值钱了,很难有薪水的提高,充其量就是.net 和j2ee 的熟手而已。所以,要进入大企业做大型系统的锻炼,学习他们思考问题的方法,领悟到软件最重要的到底是.net,j2ee 的那些架构,还是需求分析和数据流设计,数据结构以及算法设计。这才是真正锻炼人的地方。这才是锻炼出高手的地方。

所以,各位青鸟的学生们,要清醒地认识到你们的优点,也要认识到你们的不足,你们1 年学习掌握了.net 和j2ee,那些在大学耗费4 年学习数据结构,线性代数,高等数学的计科学生积累的厚重不是你们比拟的,你们小公司有用武之地,那是因为你们是青鸟针对小企业量身打造的人才,而大学生是做为IT高级人才打造的,现状是大学生太多以及大学生自己不争气,不学好这些科目,搞得一塌糊涂,但是你们要想发展,必须把大学的数学相关科目补好,否则,小公司以及2000*3000 的薪水,失业,竞争,就会伴随你一辈子。

所以,不要相信你们在青鸟学校里那些老师对你们的j2ee 和.net 吹捧,你们是靠这个找工作,但是这个东西是最没有技术含量的,你花1 年能学会,别人不能吗?没有几年的数学逻辑积累,你们的现状是很残酷的。有人说,自学高等数学,数据结构,太夸张了吧?没错,很难,你们选择了青鸟,让你们具备了找工作的能 力,但是,确实在某种程度上,你们成就高手这一步,将困难万分。

真正值钱的项目,是海量数据,专业性极强的分析系统,真正值钱的技术人才,也要从数据计算处理分析这里着手。

这里奉劝各位青鸟的老师,不要误导学生j2ee 和.net 了,这两门一定要学好,但是,不是把学生送出门就可以了,他们将来还要存活还要发展,逻辑和算法才是真正的王道。你们可以不懂,但是不能这么教学生啊。

经验分享

(三)一个程序员的体会

昨天,叔叔给我介绍了一份工作,搞推销,完成任务给1000 元,完不成任务给500 元。我又一次拒绝了,爸爸问我为什么不干,我说不想从事这个行业。这次爸爸终于发怒了,真说我“不要脸”,还说了好多难听的话。我知道,矛盾终于爆发了......这是理想和现实的一次碰撞!我不怨爸爸,只怪我自己不争气,这是我第n 次拒绝工作了,这之前有亲戚、朋友、同学给我介绍工作,都被我婉言谢绝了,不是我不想工作,而是我想从事自己喜欢的行业**it 业,我想成为一名真正的程序员!我不敢想像做一份你不喜欢的工作,会有多少的工作热情,会给公司带来多大的经济效益?整日从事这样一份工作,是一种怎样的折磨?只会带来思想上的麻木,意志上的消磨,时间长了,你会越来越离不开目前的工作,虽然你不喜欢,但是已经习惯了。我不想这样!

但是现实是残酷的!我必须工作挣钱养家,首先要养活自己,我不能再靠父母养活,他们养活我20多年已经不容易了,该是我回报他们的时候了!可是理想和现实总是存在差距,下面说说我的经历:

我是一所三流高校一名本科生,学的是经济学专业,今年刚刚毕业。虽然我的毕业论文和答辩都是优,但是我却对我的专业好无兴趣,整个大学四年,我面对的只是高深的经济学理论和与现实社会严重脱节的教材。我们的专业是大而全的专业,相关专业都有所涉猎,但是都不精通。学院说开始要把我们往经济学理论研究方向培养,可又是谈何容易? 师资力量太薄弱,最后行不通,后来又要往经济管理方向发展,可是管理要是没有与实践相结合,还不是空中楼阁。我们学院与企业之间基本没有交流,实习机会更是没有,都是自己在外面找,可是真正能找到称心如意的是少之又少,大部分都在外面搞推销。毕业了,与学市场营销的同学相比,我们没有竞争力;与会计学专业的同学相比,我们也没有竞争力;而与学国际贸易的同学相比,我们更没有竞争力!连我们老师都说:“你们是什么的会,又什么都不会。”一语道破我们专业目前面临的窘境。老师又号召我们考研,可是考研又谈何容易?又是万人挤独木桥啊!

大学我们计算机课只学了两本书,一本是《计算机应用基础》,一本是《foxpro for windows 》,两本都是我们学校自己老师出的,都是为了赚钱,书是盗版,内容更是拼准,质量可以想像。所以当时我对计算机并没有多少兴趣,对编程更是一窍不通!只是上大学前专门学了指法,大一时想学打字,当时市面流行五笔输入法(现在也是),而我并没有跟风学五笔,而是自学了两笔输入法,现在看来是正确的,两笔输入采用音形结合的方法,摒弃了五笔不符合汉字书写规则和拼音重码太高的缺陷,而且有非常易学,极力向大家推荐。掌握了方法以后,我就天天在机房练习打字,后来我打字就非常快了,一分钟可以打100 多个字,同学们都很羡慕我,在我们系也封有名气。一个打字不是很快的人都让同学羡慕甚至崇拜,可以想像我们班的同学计算机水平多么低了.我当时也很满足,认为打字快计算机水平就算高了,而不知道打字是最基本的操作,在整个计算机体系中好像是大海里的一滴水。正因为这种认识,使我忽视了计算机其他知识的学习,当时只知道foxpro 与数据库有联系,其他的就什么也不知道了。

真正让我接触到编程是在大三下学期,因为知道我们专业就业形势不容乐观,有种紧迫感了,所以我每个礼拜都会买《就业时报》,在某一期报纸上无意中看到**** 软件工程师的招生广告(后来知道每期都有),广告作得很好,我当时就觉得就业压力这么大,能多学一门技能,就多了一分竞争力。于是我就给他们打了电话,问他们学这个要多少钱,接线的封妆很会说话,没有明说,而是直接告诉我后天上午来听他们免费的宣讲会。当时我就觉得价格不菲,因为用“** ”牌子是要增加成本的。我还是去听了他们的宣讲会,说心理话,**** 好,不如**** 广告做的好,**** 广告做得好不如**** 宣讲会做得好。会到结束才说了具体的学费,要比我预想的贵很多,一共分二个学年,三个阶段学习,第一学年课分两个阶段学习,第二学年一个阶段。全部下来价格吓人!(价格我就不说了,不少人知道)当时我是这么想的,与其说毕业以后就失业,还不如学一门技能,以后也好找工作,于是我就报名了。在那个时候,我对编程是一无所知,更谈不上兴趣,只是为了以后能比较顺利的就业罢了。

由于没有基础(只会打字),我决定从头学起,参加一学期的班,给我们培训的是一位我看不出年龄的女老师,后来知道是从** 毕业的。我们一学期的课主要有《windows 2000 操作系统》,《c 语言基础》,vb 基础》, 《access 》,《html 和网页设计基础》。我当时什么也不懂就跟着学, 先是win2000,比较简单(教材简单),后来是C 语言,只讲了一个多月就结束了,我上的是周末班,那时我还以为讲得慢呢,哪知道C 语言的地位和重要性,岂是几天就可以学会?接着是VB,说真的,真正让我对编程产生兴趣的是VB,我一接触VB 就对VB6 这种所见既所得的编程环境产生了浓厚的兴趣,当时觉得这才是真正的编程,C 语言没用。我想大多数人也是从VB 开始学编程的吧。因为我们的教材写得太空洞,所以我就又买了一本VB 入门书,我觉得好多知识老师都不成讲过,有一次我问老师如何用VB 实现一个功能时,她竟说无法实现,而没有说她不会实现,后来我翻书找到了答案,从此我对老师的权威产生了怀疑。那时的我整天学习使用VB,连坐车都在看VB 书,用VB 做了很多“芝麻”程序,自己做得最大的一个就是24 点,用了极其笨的算法,可算完成了,还有很多BUG。我们一学期的课程根本就没有讲数据结构和算法这些知识,我们也认为那是计算机专业开的垃圾课程,毫无意义,现在想起来真是大错特错了!一学期结束时,老师领着我们用VB 做了一个信用卡程序,很简单,算是毕业设计。考试是分笔试和机试,超简单,笔试事先给你材料,回家去背吧,80% 是原题,机试考的是C 语言,超简单,你要是还是不会,就把别人的COPY 过来就行了,再不会,还有老师帮忙呢。当我手捧着《初级程序员》证书(国家劳动保障部发的,与国家信息部发的差十万八千里)和《**** 》证书时,我觉得我就是程序员了(现在想起来,当时真是幼稚!)这也促使我参加二学期的班,于是我在**** “越陷越深了”。

第二学期的课没有换老师,而教材却是从2.0 版本换成了3.0 版本了, 可能是上个版本太说不过去了吧。3.0 版本也没有太多改变。主要课程有:C++,sqlserver,VBA,java,asp.哈哈,真是大而全,有点像我们的专业了。当时却不这样认为。于是跟着学,先学c++,教材只有170 多页,而理论部分只有110页,后面是上机部分, 和一本练习册的厚度差不多,由于我们C 语言基础打得不好,所以学C++ 普遍感到吃力,就这样不到一个月的时间,C++ 语言就结束了。接着就是sql server, VBA, 我记得在讲VBA 的时候,我们就有很多人听不懂了,特别是COM 组件,我现在也是知其然,而不知其所以然。而老师看我们不懂,也没有耐心了,慢慢地我发现老师的讲课态度发生了变化,只是讲她的课,而不注重和我们的沟通,我们上机时,她也是不闻不问,而是躲在一旁啃JAVA。后来才知道她辞职不干转行了。接着开始学JAVA,给我们带课的是一位男老师,课讲得还行,就是张扬的很,让人觉得不舒服。我觉得当时上这门课的时候,来了很多别的班的同学一起听,把本来就不宽敞的教授都坐满了, 不知道是觉得JAVA 重要还是因为已经学得吃力了, 我想是后者吧。

考试仍然很容易过,可是当二学期结束时,我发现我没有学到什么实际的东西,我甚至不会用一门语言写一个大一点的程序,学的语言实在是太多了而自己的编程思想还没有建立。在是否继续学习二学年这个问题上,我犹豫了很久,是坚持还是放弃?我想对每个深陷其中的人来说,都是很难抉择的,最后我还是选择了坚持,很多人选择了放弃,我记得刚开始和我一起学第一学期的人现在没剩下几个了,大部分人都选择做了其他行业,和编程彻底绝缘了。我真的不想就这么放弃,毕竟我付出了很多精力和金钱,而且我非常热爱这个行业,真的想用毕生的精力从事这个行业的工作,程序设计对我来说一直很神秘,像一座待开发的宝矿,我一直想征服它!

当我怀揣着第二学年的学费前往**** 的路上,我的心情异常复杂,这可是我父母的血汗钱呀,我现在没有挣钱回报我的父母,而是管父母要钱,这个滋味是没有经历过的人很难体会的。还有一个问题就是钱是不是白花?我能不能实现自己的理想?为了自己的理想“不择手段”叫不叫自私?第二学年的班已经开了,我也已经毕业了,我们系的就业率和前几届的一样,没有什么改观,而且有持续走低的趋势,我的好多同学都没有找到正式工作,一部分人在作推销,辛苦不说而且工资少得可冷,也许能锻炼人吧,很多人干两天就不干了。还有一部分人在家观望,还有几个有考研的打算。目前的状况使我的要求也在降低,我学编程不求能挣多少钱(以前有这种想法),现在只是想能够自食其力,作自己喜欢做的工作,也就心满意足了.可是我现在学得却越来觉得吃力了,二学年课程有oracle,j2ee,.net,c#,asp.net 等,目前在讲j2ee, 讲得很快,预计05 年底就能结业,我不知道到时候能不能找到一份工作,可是依我目前的知识结构,很难有竞争力。究竟是哪儿出了问题呢?

论智力,我觉得我不比别人差,我五岁学下棋,六岁没上封学就参加了区里的封学生组比赛并且拿到了名次,接着我就开始了拜师学艺,初中蝉联了三届本市中学生比赛的冠军,一次省里的冠军,95 年参加全国“** 杯”少年组的比赛并一举夺魁!大封比赛参加10 多次,冠军如探囊取物。说真的,当时差一点就走这条路,因为当时我和省里的一些大师都下过,觉得并不是不可战胜.但是后来由于中国象棋缺乏国际竞争力等诸多原因,发展状况远没有围棋、国际象棋发展好,即使是一些象棋大师每日还要算计着过日子,这不能不说是整个象棋界的悲哀!关于中国象棋的发展和象棋理论的专业探讨,我有一肚子话要说,但是在这里不过多阐述,因为这里毕竟不是谈论象棋的地方,还有人不会下棋呢。不过后面我要对象棋和编程做 一番比较,谈我一点的肤浅看法,如果你有兴趣,请耐心往下看。当我决定把精力放在学业上时,已经是高三了,面临高考,由于之前下棋付出太多时间和精力,落下了很多对基础课程的学习,所以我必须迎头赶上,凭着一股儿冲劲,我来到了**,虽然不是名校,却是正规本科院校,一直到现在。所以说论智力,我不比别人差,可为什么我学得会越来越吃力呢?

我开始反复思考这个问题,去这个网站的论坛上看一些高手总结的一些经验教训的质子,去csdn 看高手是怎么从初学者变成人人尊敬的高手的。我看了大量这样的质子,然后结合自己实际情况进行总结,才发现了问题所在!基础太薄弱!!正是这个原因使我现在学习非常吃力。看看我这一年学的都是一些流行的开发工具,比如vc,vb,dreamweaver,jbuilder,oracle 等等, 而我却真正的忽视了对数据结构和算法、windows 程序设计、汇编、编译原理、操作系统等等这些基础课程的学习,一上来就学c++,java,vba, 面向过程编程基础不牢固,直接学面向对象,试想一个在大学上只学了两本书的人直接学这些流行的开发工具,结果会怎么样?而且是每门课 学的时间都不长,这个月dreamweaver, 下个月就jbuilder, 再下个月就oracle 了,试想要精通asp,java,数据库原理需要多长时间?我们是刚刚学点皮毛就学这些东西,岂不是在沙地上盖高楼,早晚有一天会挎掉的,而且盖得越高,损失也越惨重!而我当初并没有意识到对基础理论学习的重要性,现在真是后悔。

对此**** 应该负有主要责任,他们的宣传广告上面招生的对象是只具有高中以上学历,而其他的一些培训机构比如东软,清华都要求计算机本科专业或相关专业,说明这些机构已经懂得基础的重要性。而且**** 在授课时老师也并没有引导学生重视基础理论的学习,盲目追赶最先进的东西。应该承认**** 的课程体系囊括了世界最流行的开发工具,可以说是面面俱到,但是在学习这些东西之前,必须有很扎实的基础,如果没有,即使学会了,也是知其然而不知其所有然,在此引用不知哪位网友的一句话:“与其说把流行的东西握在手中,还不如把过时的技术记在心里,“ 可见基础的重要性。有很多零基础的人慕名来到****,希望摆脱自己的命运,可是学了一学期以后就再也学不下去了,原因何在,基础不行,不过也有一些对计算机极有天赋者,这应另当别论。

有时候我就想如果当初我在学习**** 的时候,如果能在家里恶补理论知识会不会更好呢?可是当初我很难意识到这一点,而且那时学校的课很重,一本《西方经济学》就有点压得我喘不过气来,除了上课,我已经没有时间在学别的东西了。况且当时我们培训的同学普遍流行着一种说法,说“我们毕业了将比计算机专业的更有竞争力!”当初我也报有这种想法,现在看起来真是笑话,先看看学习时间,他们学四年,我们不到两年(快的一年半),再看看计算机专业的课程体系,你就知道了,其中大部分是对基础理论的学习,学习时间宽松,如果能抓紧时间学习,将能打下一个良好的基础,为以后学习流行开发工具铺平了道路。诚然,现在一些高校的计算机专业的教材有些比较沉旧,可是一些原理上的东西并不是一两年就发展起来的,是大师们经过多年的研究总结出来的,深度掌握,必然对以后学习大有裨益!还有一种说法是“我们毕业了能直接上手为企业打来效益,而那些计算机专业毕业的学生根本不会做什么,所以我们更有竞争力!”初听起来,似乎很有道理,可是如果那些计算机毕业的学生参加企业培训呢?新出来一种工具,同时学习,谁理解得更透彻,谁学习得更快呢?

其实学习象棋和学习编程是一个道理。

先说象棋,会下棋的人都知道,下棋分开、中、残局三个阶段,要想学棋并想成为一名高手的话,必须先出残局开始学起,然后是中局,最后是开局。从开局学起的人很难有大的发展。这是我的切身体会,我记得我封时候学棋的时候,几乎没看过书,都是实战实战再实战,从实战中汲取营养,总结经验教训,等我到达一定阶段时,我爸爸就每天给我摆棋式,先练杀法,每天几个,当时有一本很经典的书《象棋杀着大全》,有400 多页吧,我爸就天天给我摆,让我破解,不看到结果不许动手,最后都把这本书都翻烂了(当然不是我弄的),现在真的应该感谢老爸,我虽然现在在象棋方面没有什么成就(我爸一直希望我成为一名象棋大师),但也算是一盘好棋吧。然后开始摆残局,接着是中局。对象棋有研究的人会发现,中残局功夫是最难练的,也是最能看出一个人象棋水平的高低。正是我爸一盘一盘的摆,才练就了我扎实的中残局功底,可以说我的基本功都是我爸一盘一盘摆出来的(再次感谢老爸!),等我到了一定水平后,才自己开始打谱学习开局,看别人的对局选,我发现我对开局的理解比那些上来就学习开局的人更透彻,记得也更牢,而且还能指出其中的错误并且提出自己的观点,有时我看完一本开局书,书上会记很多我自己的体会,试想如果没有良好的基本功的话,是不可能做到这些的。

再说编程,如果把学编程也分成三个阶段的话,那么残局就是基础,包括操作系统、汇编基础、离散数学、编译原理、计算机图形学等等,而中局就是c 语言(不是特定的)、数据结构和算法等等、而开局就是目前的各种的流行开发工具吧,包括vc,vb,delphi,jbuilder,dreamweaver 等等,以上三个阶段分的不一定正确,不过大概是这个意思吧。如果” 中残局“ 没有打好,只学” 开局“ 是永远也成为不了高手的,而且” 开局“ 总是随着时代发展而改变,不断有新的开发工具出现,落后的” 开局“ 将永远被淘汰,而相对来说” 中残局“ 是不会有太大变化的。而” 中残局“ 和” 中残局功夫“ 两者又不太一样”,我个人认为“ 中残局功夫” 指的是编程思想,一个好的编程思想不是一朝一夕可以练成了。如果掌握了打下了扎实的“ 中残局” 基础,练就了一身过硬的“ 中残局功夫”,那么在学开局就相当容易了,网上经常有这样的评论,比如:“ 如果学c 一年,那么学vb 之需一个月,如果学vb 一年,再学c 时间可能超过一个月”,“ 学C++ 三年,再学JAVA 只需一个月” 等等是同一个道理。

痛定思痛以后,我觉得我要想在编程方面往更高更深的地方发展,必须打好基础,苦练内功,为此我打算从C 语言开始学起,然后是数据结构和算法* 汇编* 操作系统原理*windows 程序设计*C++ 程序设计, 之后要看很多国外经典书,《C++ primer 》,《C++ 编程思想》等等,然后再选一个合适的开发工具,虽然会很慢,但我会踏踏实实的学习,再也不盲目跟风了。现在我C 语言只学了两天,课我还得继续上,毕竟钱已经交了,我想等我基础打牢了,以前有些课还得重听,有基础了可能会悟出一些新的东西。**** 这点好,课可以循环听。

回想我一年的学习,现在看来才刚刚起步,不免有些惭愧。正是走了这些弯路,才使我认识到基础的重要性。虽然以后还要有很长的路要走,但是我无缘无悔,因为我热爱这个行业。我相信我重新选择学习的方向是正确的,我打算用十年的时间来掌握这门技术,我今年23 岁,到我33 岁时,我想我还会写一篇文章来回忆我十年的经历,并总结出的经验和教训,供后来者借鉴。

顺便说一下我的女朋友,她和我是一个学校毕业的,学外语的,英语八级,现在毕业工作了,一个月3000 元。她现在对我很失望,说不再向以前一样喜欢我,欣赏我了,这给我很大打击!但是作为男人,我理解她,现在我的压力很大,我想我会顶住压力,坚持走自己的路的,希望大家能够支持我!

最后我想对初学者说的是,不要盲目跟风,要重视基础的学习,否则只会竹篮打水一场空。

如果您能耐心的把以上看完,我就很感谢了;如果您还能提出宝贵的意见和建议,我将感恩不尽!

经验分享

(四)一个程序员的经历

一.并不成功的开始

我所读的学校是中国西部的一所普通高校。我进大学后也和大多数同学一样,过着60 分万岁的日子,除了对编程比较感兴趣外。(呵呵,好多室友都说我外表女人,内心却男人:喜欢写程序,喜欢和男生打是际,喜欢打CS 选土匪,拿AK47)四年的大学生活淘进了我刚进校时的傲气与自尊,在栀子花开的季节,我面对的却是无法把握的未来。毕业了,是的,四年象梦一样。男友执意去了中国最繁荣的大都市,我却希望留守相对平静的近在咫尺的西部城市,结局是可想而知的。痛苦十分短暂,因为迫在眉睫的生存问题变得急为严峻。幸运的是,2004 年7 月我很顺利的找到了一份程序员的工作。我的第一份工作比较轻松,就是做MIS 系统,写写C# 代码。工作很轻松,带我的经理也很照顾我。于是我每天过着上班下班的生活,每天穿梭在熙熙攘攘的人潮当中,全然没了生活的压力。这样的生活也让人讨厌,日子太无聊了,无非就是写着重复的代码,再就是在天涯上闲逛。这样的日子结束于我看到的一篇文章,题目我记不太清楚了,好像是:成为IT 精英,我奋斗了7 年。

当时很受鼓舞,也很自责。大学的四年已经荒废,难道还要重蹈覆辙?于是我有了想离开这个安逸的城市,去节奏相对较快的城市锻炼一下自己。

于是在今年年初,我毅然背起行囊,踏上了南下的火车。。

二.初来乍到

一下火车,我来到人山人海的车站广场,看着人山人海,心里没有底气,毕竟是第一次出远门。但是只觉告诉我,先要找个落脚的地方。虽然我带了5000 块,但是我却不敢乱花一分钱,因为在我印象中这座城市消费比原来的城市高多了。我得想办法尽快找到工作。

经过2 个多小时的寻找,终于让我找到了一个网吧。于是不顾旅途劳累,趴在电脑前就上51JOB,简单回顾了自己的工作经历,然后填写了简历,在网上投。时间过得很快,一下子到了中午。我出了网吧,胡乱吃了碗酸辣粉。然后去找旅馆,这里的旅馆真的很多,各种档次都有,我找了一个看上去觉得比较安全的旅馆。130 一晚上,好心疼!!尽管很累但是,大半个晚上我都没有睡着,双手紧紧的抓住手提袋。到了下半夜,我才慢慢的睡着。

早上起来的时候已经是9 点多了,我洗漱完毕。双眼盯着手机屏幕,生怕会错过面试电话。也许我运气真的不错,大约10 点,手机响了。我赶紧接了,一时高兴得语无伦次。电话里一个女声:您好,请问您是XX 么?我们是yy 科技有限公司,想约您下午面试......挂了电话,我高兴得不知东南西北了,没想到这么快就有回应了。下午出门的时候我化了点淡妆,出门了。我按着yy 公司的提示,费了将近2 个小时才找到地方,真后悔没有买张地图。到yy 公司的时候已经是下午4 点了。面试我的是位女经理。30 分钟过后,我们谈得比较好。我自信满满的,呵呵。

最后经理问我期望的薪水时,我咬咬了牙,很小声的说了句3500.经理说,其实你比较符合我们的要求,但是薪水可能不会那么高。我小声问她能给我多少,她说句2000。但是我心都冷了,我来这个城市之前的工资也有1500 啊。我说了句考虑考虑后,出了yy 公司的大门。在传说中,这个城市不是每个人都拿高工资的么?怎么会这样?失望和痛苦同时袭来。

回到旅馆我仔细总结了一整天,得出结论:1.不是没有高工资,而是所掌握的技能门槛比较低,导致没有什么竞争力。2.一个规律:IT 技能(不精通的情况下),技术门槛低的入门较容易的,在市场上竞争力不大(精通后,每项IT 技能的竞争力相差不大。)。3.所以我决定,去学习新的东西,门槛稍稍高那么一点的东西。

注意拿定,我回顾了自己所学的东西,觉得C/C++ 基础还可以,而且上学的时候写过一段时间的VC,于是决定啃C/C++。我开始在网上投C/C++ 相关的职位,把薪水要求降到2500 ~3000。上天又一次眷顾了我,四天后我找到了一份工作,工资2500,包住宿。唉,总算是定下来了,接着我便写了个学习C++ 的详细计划,花了1500 元买了个二手电脑。工作后,我觉得极其的不适应,这个时候才知道,我对C++ 的理解是何其肤浅!基础太差了。。自尊心一向很强的我,受了很大的刺激。我觉得,是时候努力了!

在工作的时候我积极的请教同事,下班后我在宿舍里疯狂的肯C++, 在网上下载了教材。一行一行认真的读,上机练习,从基础开始。一步一步的来。在刚开始的一个月里,几乎每天都是凌晨才休息。但是我觉得很欣慰,因为我逐渐适应工作了,而且觉得越来越理解C++ 的内涵。连续这样3 个月后,我终于对工作得心应手了,VC 的底子也逐渐厚实。回想原来的夜郎自大,真的很好笑。现在我对C++ 无疑是敬畏的。原来以为自己有多厉害,其实自己差得要命。不懂虚函数有什么用,不知道除了构造函数,析构函数外还有拷贝函数,还有深浅拷贝之分。不懂什么是多态,不懂什么是抽象类,不知道C++ 里居然还有个STL 库。随便拿本VC 的书就写程序,甚至不知道APP WIZARD 生成程序的入口。

经过了三个月的苦心孤诣终于有点眉目了。我没有直接用VC,而是从SDK 入手,用SDK 写了将近一个月的程序。终于知道了windows 里面居然还有消息机制,每个应用程序还有消息队列。编译器分配存储空间的时候居然还有内存对齐。这些新奇的东西让我兴奋,我每天如饥似渴的读着各类电子书。

《深入浅出MFC 》, 《高质量C/C++ 编程》,都是我的宝贝。是的,正象很多人说的一样,没有几年是无法精通VC 的。但是,我们无需精通每个方面,我们只需足够熟悉我们工作所用到的部分。DLL, 数据库,组件技术,图形技术,进程调度,多线程等等,网络...太多太多了,MFC 是如此的庞大。也许是我心高气傲,当经理跟我说转正给我3000 的时候,我拒绝了,我觉得自己可以拿更高的薪水。于是我辞职了。

这次的离职,没有给我带来什么忧虑,可能通过前断时间的学习有了些许的底气。可能大家很奇怪,为什么上文多次提到工资,请原谅我的俗气!当爱情不能依靠时,金钱是能唯一给我安全感的东西。

这一次我打算找名气稍微强一点的企业。正好,TX 公司正开招聘会。我一大早赶到招聘会现场,很热闹,已经有很多人在那里面试了。等了大约半个小时,终于轮到我了。面试官没有象我想象的那样提一些基础知识,而是直接问我对UML 怎么理解,对UI 设计有什么心得这些抽象的问题。我回答得吞吞吐吐,语无伦次,结果是可想而知的。55555555,真的好惨,这个全国著名的SP 把我就这样简单的拒绝了,好打击人啊。但是这次来并非没有收获,因为在我走出招聘会场的时候,我留意到unix/linux 展台门可罗雀,于是一个计划又在我内心酝酿。我回家后在网上搜集linux 入门资料,然后把电脑硬盘格式化,为了表示学习linux 的决心,我给windows15G,给了linux 25G,就这样开始了我的学习linux 之旅!

第二天,我从朋友那里打听到GDNT 有个招聘会,于是又风风火火的赶去。GDNT 的面试也给了我重重一棒子,让我好痛苦。在痛苦中过了3 天后,一个高中同学说她们单位要招VC 方面的人。我当时真的很高兴,也很紧张,因为这次面对的公司是中国著名电信运营商的研发中心。由于朋友的引见,面试很快确定在2 天后。在这两天里,我把所有关于C/C++ 的知识点复习了一遍,然后阅读了一些网络方面的资料。果然功夫不负有心人,2 个小时的比试面试过去了,我成了她们的一员。最后PM 许诺试用期给我4K。

这里的工作环境很好,工作也比较轻松,也许所有国企都是这样的把。下午2:00 上班,中午可以休息两个小时。单位食堂的伙食丰富而且价格便宜,一般不超过5 元,最令人觉得温馨的是饭后偶尔还会发水果。:)真的是好幸福,呵呵。在这里主要做的是一些交换网管系统,在这期间我跟PM 学了不少东西。熟悉了HW,ZTE 的很多产品,以及COBAR 接口规范。私下还对7 号信令做了比较详细的阅读,而且对很多网络协议有所了解了,比如SNMP,RIPv2、OSPF、IGRP,还学会了怎样使用CLEARCASE 等工具。但是,最大的收获莫过于对UNIX 的学习了。在这里有很多UNIX 机器,HP*UNIX ,IBM*AIX,SUNOS 等等。。

每天下班后我没有直接回家,而是留在了单位telnet 到SUNOS 上,开始了我学习unix 的计划。几乎天天都是10:00 以后才离开单位, 搞不懂的就问人或者在网上找资料。回家以后,我继续在linux 上学习一直到转钟。这期间我真的学了很多,跟windows 上写程序完全不同了,似乎更关心细节,更关心操作系统了。经过大约3 个月的摸索,终于对unix 有所了解了,觉得好多东西豁然开朗。进程通讯,进程管理,页面置换,信号灯,线程池这些东西是我在windows 下写程序从未接触过的。

觉得学习unix 真的很幸福,每天进步一点,会让我睡得踏实。把《unix 高级环境编程》学完后,我开始慢慢的请教前辈,有关嵌入式的开发的问题。

慢慢学着分析内核情景,裁减内核,底层的东西让我觉得好奇。还有一件让人特兴奋的事儿,咱们科室好多开发人员都是女同志,PM 也是女人。

时间飞快,转眼四个月已经过去了。我觉得是时候该离开这个安逸的国企了,说真的,真有些舍不得,我向PM 提出辞职时,经理非常真诚的挽留我,说我工作做得不错,叫我考虑考虑再走。这里的人真的很好,学习的气氛也很浓,也许我希望日子过得紧张一些。经理说我这样跳来跳去不利于自身的发展。也许她是对的,也许是我太倔犟,终于还是走了。我知道,当我交出那张卡,就再也不能回来了,走出大门站在华景的天桥上我默默的站了10 分钟,仰望着那熟悉的大厦。

晚上回去改了改简历,然后在网上投。躺在床上,看着天花板,突然之间觉得好孤单,这里一个亲人也没有,鼻子很酸,好想哭。客厅电视机里传来世界杯预选赛的呐喊(我和一个男生一个女生合租三室一厅)。我走出客厅和那个男生谈了很多,也知道了他很多事情。现在才知道,虽然是合租,但是彼此沟通真的很少。他原来是在XTKJ 工作,后来跳到外企,也是搞IT 的,也是程序员。一个人到南方。

当时聊了很多,不觉到了凌晨。不过我们都没有睡意,于是他问我会是际否,我一拍即合。他很惊讶的看着我:你真的会。我说试试就知道。于是我们各自回房打开电脑,比赛开始了,呵呵。也许是他太轻敌,第一场,我选虫族,他选人族,结果被我出快狗偷袭成功,不过后来几场我都输得很惨,呵呵。

第二天睡到中午才起来,1 点多的时候突然来了个电话,通知我去面试,职位是linux 程序员。我赶快打扮起来:)。照镜子才发现,自己瘦了好多,也憔悴了不少。我穿上了自己最漂亮的衣服,然后简单了画了一下眉,打了粉底和眼影,并且还画龙点睛的摸了腮红。呵呵,自己对着镜子傻笑。

到了面试的公司(一个刚成立不久的外企,VOIP 设备商),和PM 谈得很顺利。他问的问题也很简单:函数传值传址的区别,常用的进程通讯方式,和我做过的一些项目等等。最后PM 问我期望的薪水是多少。我怯怯的说了句:5K。经理摸了摸前额想了想对我说:这样把,你好好干,试用期我给你5.5K。出了公司门,感觉天空一片蔚蓝。

经验分享

(五)一个还不太老的程序员的体会

(一)文章由来及个人经历

我是一名计算机专业的本科毕业生,毕业已经1 年多了。毕业后从事的是软件编程工作,经常有其他专业的朋友想从事软件编程工作,向我请教如何,因为我自觉涉行不深,不敢信口开河,无奈朋友信任,我不得不郑重考虑一下这个问题了,来帮助朋友选择和回报朋友的信任。这也就是此文的由来。

还是先谈谈我个人的经历吧。(是不是有点俗套,但我觉得了解我的经历,有助于理解我话的含义;我一向认为不了解古龙的生活经历的,不会真正读懂古龙的作品和古龙笔下的英雄的)我本科就读于南方一所著名的高校(因为自己的不成气,愧谈母校名谓),学的就是计算机专业。上本科时,几乎没有认真的听完一门专业课程,上课看报纸睡大觉,下课看录像看小说看球赛,临考抱佛脚,每次考试和课程设计都是蒙混过关。(于之相对是,我选修的工商管理和经济贸易方面的课到是听得不亦乐乎,考的分数颇高,也许这才是我的真正兴趣所在。)

总而言之,大学是混过来了,对专业的理解和掌握程度,应该没有达到毕业要求的合格水平。(也很后悔,但是有什么用呢,当时不知道珍惜;如果上天再给我一次机会的话,我一定会抓住,多看点美国大片少看点港片;现在,重回校园是我的一大理想)但是大学的学习使我有了一个简单的知识框架(总算学费没白交),我对一个朋友这样形容过我的这个知识框架,“它不是钢筋铸的,是稻草扎的”,哈哈哈,不要笑,真的,我敢说很多本科毕业的朋友的本专业的知识框架也只不过是“稻草扎的”。直到现在,我一直觉得自己的基础知识还是很薄弱,一直想抓点时间,把基础书本好好的温习一下。(此项任务正在计划和实施中)

毕业后,分配到某研究所工作。当领导让我选择自己以后的工作方向时,我毫不犹豫的选择了软件(也不知道到底是对还是错,但我决不后悔)。此研究所主要是以硬件为核心搞通信控制设备的研发生产;软件是辅助,所以也不受什么重视,很多搞软件的人都跳槽走了,留下来的大都是一些已经废掉和行将废掉的“伪/ 萎”程序员(名副其实的“软件人员”)。在这里感觉不到什么高紧张和高技术程度的研究和开发;软件开发的技术含量极低,以致于大部分人只有半年的学习和开发经验,以后都是这些知识和经验的重复利用。(我问过其他到研究所工作的同学,他们说都一样,呜呼,我们的国防科研开发呀)对于软件的开发,领导的意志和老掉牙的经验在新课题的技术采用和开发中起了决定性作用,没有明确的需求,没有明确的开发计划和进度,大家在一天一天一周一周的浪费着宝贵的时间,最后开发出来的东西修来改去,直至它变成垃圾。我越来越认识到一点,要么象那些废人一样废掉,要么自己去努力寻求出路,反正别指望从工作中得到什么高明的经验了(教训倒也许有)。期间发生了一些感情上的纠纷,严重的影响了学习计划和效果,直到现在浮躁的心仍然有些浮躁。

期间,我读了一些书,看了一些文章,编过一些小例程,搞了一些没有什么技术含量的开发工作,也和一些前辈和高手们谈过聊过。我一直在思考几个问题;如何学习软件开发?如何搞软件开发,国外的软件开发到底其秘诀在何处?为何我们的软件业一直在低水平徘徊?我们难道真的离了Microsoft 就活不了?我们的程序员到底在浪费时间干些什么?软件开发到底是如何分类的?我们如何走自己的民族软件之路?

我想了很久,一些想通了,一些还在想。但我知道有一点是肯定的,那就是我们一定要靠我们自己走出自己的软件之路!跟在别人屁股后面永远受制于人!

好了,关于经历和牢骚就先写这些吧,该进入我们的正题了。

(二)你适合当程序员吗,你知道编程序是怎么回事吗? 1、程序员意味着要编程序。(如果你仅仅想得到一份高薪水的工作,喝喝咖啡就等老板发薪水,我奉劝你还是另找一份更合适的工作,譬如练摊,真的,兄弟,这份工作不适合你)、你是学文的还是学理的,编程序也许需要浪漫,但更需要逻辑和严谨。(说坦白点就是,在你没有找到乐趣以前,它很枯燥)、你有对新技术追求的热情吗?你有刨根问底的探索精神吗?(热情绝对是最重要的!你仔细思考一下自己的性格适合当程序员吗?)、当程序员决不是什么好差事,时刻需要学习,需要思考。(直到你成为那个可以引导别人去学习和思考的人,你才可以偷偷的嘿嘿笑,又一群傻蛋)、程序员的未来很迷茫。(但我认为关键看你自己!我希望你是一个有追求的人,不仅仅是混碗饭吃。因为真正的乐趣在于创造;如果你能改变软件业的历史,那才是英雄;不想成为Bill Gates,不想成为Dennis Ritchie 和 Bjarne Stroustrup,我会说你没有追求。有个关于程序员未来的笑话,也许你还没听过,你该听一听,摘抄如下:

一个程序员对自己的未来很迷茫,于是去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”

上帝说“我的孩子,你去问Lippman,他现在领导的程序员的队伍可能是地球上最大的”

于是他去问Lippman。

Lippman 说“程序员的未来就是驾驭程序员”

这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”

上帝说“我的孩子,你去问Gates,他现在所拥有的财产可能是地球上最多的” 于是他去问Gates。

Gates 说“程序员的未来就是榨取程序员”

这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”

上帝说“我的孩子,你去问侯捷,他写的计算机书的读者可能是地球上最多的” 于是他去问侯捷。

侯捷说“程序员的未来就是诱惑程序员”

这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?” 上帝摇摇头“唉,我的孩子,你还是别当程序员了”)

6、当程序员还是很有乐趣的。(当你学到新知识时,当你有新的思想见解时,当你有新的产品问世时,和知己探讨你的成果时…我问你,觉得这些是乐趣吗?)、当程序员不易也不难。(世间事有难易乎?为之…;不为…。你有决心和信心吗?)、你真的要当程序员?是你自己的想法?、你舍得花钱买书吗?(读好书绝对是学习编程的最佳捷径。你一定会说,现在电脑书籍真T.M.D 贵,没法子,谁让知识和技术在人家的脑袋,在人家的书里呢;等你写书时可以把价格定低一点,记着还有好多没钱但想买书的兄弟很困难呀。要舍得买书,买好书,不好的的书不如不读,其害大于其益,关于买什么书,你可以问高手或看候捷的书评;准备一个小本子记录你想买的书的名字,逛书店时看看,如果好就买下,记住要读,别光买不看。)、我告诉你,程序就是:任何有目的的、预想好的动作序列,它是一种软件。、编程序就是编写程序。、你想好了吗?(如果你想好了还是决定要当程序员,可以继续往下读;否则,你可以继续寻找别的出路了。)

(三)一个程序员应该具备的基础知识和概念、计算机是有什么组成的,CPU 是什么东西,其工作原理是什么。(对于这些以及下面将要提到的概念我不会告诉你什么答案,你可以看相应的教材,关于教材我会在下一部分详述,记住理解最重要!)、机器语言和微指令集的概念。、程序的概念。、汇编语言是低级语言但不是机器语言。、高级语言主要有那些?(C,C ++,Basic,Pascal,Fortran,C#,Java 等等;如果你是中国软件业的英雄,你也写一门语言,最好不用英语)6、编译程序和解释程序的概念和其原理。(编译器是高手和专家编写的)、HTML、XML 等是标识性语言。

8、Prolog 是人工智能语言。、操作系统OS 的概念和原理。(Windows98,Windows2000,Windows NT,UNIX,Linux,等等都是OS,还有一些实时OS,嵌入OS,编这些的绝对是高手)、Windows 编程说白了就是Windows API 的调用。(中国的程序员很多只是会编windows 程序,用的是VB,我的建议是这些程序员顶多只是低级编码员,我称其是coder)、VC ++、VB、BC、BCB、Delphi、VF 等都只是编程的工具和环境,不是编程语言。、面向结构的设计概念。、面向对象的概念。(好好理解,兄弟,这个东西还是很重要的)、软件工程的概念和原理。(如果你想当老总就需要好好研究了,系统分析员比编码员要高一个等级,薪水也高哟)、数据库的概念。(要熟悉一些著名的数据库系统和语言的名字,如Orcle,SQL,DB2,DyBase等)、了解网络概念。、了解多媒体概念。、熟悉和掌握数据结构和基本算法。、是不是要求太高了,别着急慢慢来,进步在不知不觉之中。(一旦开始学习,一个月以后你就会有一个基本的概念;两个月以后你就会感觉自己有了全面的基础知识;当你知道编程序是怎么回事时,说明你已经入门了。也有很多人编了很多年程序还没有入门呢,你不会希望自己步其后尘吧。要有信心和耐心。沉不住气怎么能成大事?!)

(四)教材推荐

推荐的教材主要还是针对概念来的,最好选用名校的教学用书。、《计算机组成原理》(熟悉)2、《数据结构》(掌握)3、《操作系统》(了解*> 熟悉)4、《The C language 》(掌握)5、《编译原理》(了解原理)6、《汇编语言》(了解)7、《计算机网络》(了解)8、《软件工程》(了解)9、《关系数据库》(熟悉)、《The C ++Languege 》(掌握)、《面向对象设计》(掌握;结合C++ 学习)

(五)一些经验和体会

(五)一些经验和体会、真正的程序员用C++ ;(一位专家说的)2、动手去编程序; 3、动脑去思考;、要有良好的编程风格;、读书,读好书,尽量读原版书!(我反复强调这一点,读书要有选择,坚持读好书,名家出的经典书,不要浪费实践在一些粗制滥造的书上面;坚持博览群书)6、有自己的学习计划;、总结自己的经验教训;(准备一个笔记本,记录错误和心得)8、不要怕学新东西; 9、要有软件工程的思想;、善于发现问题,然后去寻找答案; 11、向高手请教;(要虚心直到你成为高手)12、和同行交流;(不善于交流肯定不行)、懂得软件的实质,不要被千变万化的表象所迷惑;、真正要学习用的是编程语言和方法,不是什么库,什么类,什么工具;(学用那些什么库都比较简单,但 光会这些库,我觉得还远远不够)、学习wiodows 编程主要是学习windows OS 和win32 API ; 16、有空了解一下嵌入式开发; 17、有空了解一下PDA 软件开发;、了解一下.NET 框架和C# 语言,也许它是你新的衣食父母;、要有耐心,不要作浮躁的人; 20、对程序加注释,并保留你的老程序; 21、学到的东西越多,了解的越多,你就越接近专家; 22、有空去逛逛CSDN,那里有你很多知己; 23、要有信心成为一个优秀的程序;

(六)一些好书的推荐、《The C Programming language 》(Keinighan & Dennis Ritchie 1988)2、《The C++ Programming Languague 》(Bjarne Stroustrup 1997)3、《Inside The C++ Object Model 》(lippmans)4、《Effective C++ 》(同上)5、《More Effective C++ 》(同上)6、《Exceptional c++ 》 7、《C++ 面向对象高效编程》 8、《设计模式》 9、《Thinking In C++ 》、《The Standard C++ Bible 》(一般推荐)11、《The Art of Computer Programming 》、《Programming Windows 》(Charles Petzold)13、《VC++5.0 技术内幕》 14、《MFC 深入浅出》 15、《软件需求》、《Advanced Windows 》 17、《C++ primer 》、《win32 程序员参考手册》 19、《用TCP/IP 进行网际互连》 20、《COM 本质论》

(七)学习计划

这个学习计划是我个人定的,也共享给大家参考一下,共同进步吧。、《计算机组成原理》 2、《操作系统》 3、《数据结构》 4、《汇编语言》 5、《 C 》 6、《 C++ 》 7、《VC 技术内幕》、《Programming Windows 》 9、《深入浅出MFC 》 10、《Advanced Windows 》、《Inside The C++ Object Model 》 12、《Thinking in C++ 》 13、《Effective C++ 》 14、数据库 15、网络、嵌入式OS 和编程 17、硬件单片机 18、.NET 和C# 19、软件工程 20、UNIX 和Linux

(八)后记

一年来浪费了大量的时间去摸索,去思考,走了很多的弯路,直到现在我还觉得自己是个编程的门外汉。我把我的一些体会和想法说出来(当然,很多都不一定正确,欢迎大家指正和讨论),也许对一些想加入程序员行列的朋友有一些建议和帮助。希望能帮助这些朋友顺利走上编程之路,成为高手。

如果真能如此,我也就很高兴了。欢迎有兴趣的朋友给我发E_mailsjpsky@163.net);我这个人有两大业余爱好,其一就是读武侠小说,其二就是结交英雄侠士。

后记:此文我用analyster 的名字登录,发表在“csdn -程序人生”上了,有很多网友看了,回了,还收到几个网友发来邮件,和我探讨,我很感谢大家对我的信任和鼓励。

我要说明的就是我的这篇小文,主要是想给“一些想成为程序员”的朋友一些建议,帮他们寻找一条自我培训的捷径,(其实世界上没有什么捷径的,我觉得一切都在于悟性,师傅领进门,修行在个人,譬如我就修行不够)少象我一样作大量的无用功。还有,主要就是一个程序员应该具备的基本功(个人看法), 有人称其为“内功”,我觉得很对。没有扎实的基本功,我们如何能够做到游刃有余的编写高质量高性能的优秀程序呢?

经验分享

(六)一个程序员给初学编程人的建议!绝对的好!

想学习程序设计而又很迷惘的朋友,希望可以带来一点帮助。

我第一次接触电脑是在小学二年级的时候。那时纯粹是因为喜欢打电子游戏,听别人说电脑上的游戏十分好玩,于是就漫漫开始与之接触了。在三年级时父母出于我对计算机浓厚的兴趣送我去了一个BASIC 编程学习班,从那时起我才真正开始走上编程这条不归之路。虽然说现在程序设计这门专业在社会上很热,竞争十分激烈,但是这只是学习编程的人比较多而已。真正能够掌握以至于精通的人实际上很少,毕竟中国的软件业才刚刚起步不久。现在社会对优秀的程序设计人员的需求量还是相当大的,但是前提是必须要优秀。我自己虽然也谈不上优秀,但多少还是有些感触。在这里想讲述自己对于一般程序员和优秀程序员之间在技术上的一些认识(什么敬业精神生活态度我就不多说了):

首先作为一个优秀的程序员,数学是十分重要的。数学是自然科学的基础,计算机科学实际上是数学的一个分支。数学主要能让人懂得一种分析问题的方法,然后再通过编程去实现它。计算机内部的许多原理也都牵涉到比较复杂的数学知识。它是我们用来解决现实问题的最高效的工具。很多学习编程的朋友对数学觉得不屑一顾,觉得对于编程没有什么关系。实际上优秀程序员和一般程序员拉开档次很大一个程度上就是取决于对数学的能力。一些项目有时需要很复杂的数学建模和利用数学对于系统效率进行分析,而这些项目对于一般的程序员是很困难的。正确应用数学知识有时候能使你的程序的效率产生质的飞跃。现在的程序员在数学上普遍是薄弱环节,这点是大家应该引起足够重视的。当别人对于这些项目感到无从下手,而你却能够完成,这个时候你的价值也就表现出来了。真正优秀的程序员是能够最基本的一点就是要能够通过自己的知识来解决一般程序员所无法完成的问题。而数学能力就是一个很重要的环节。

其次就是要对数据结构引起足够的重视。如果说计算机专业的学生与非计算机专业的最根本的差别绝对是数据结构(数学大家都一样学了,主要看你自己学得好坏)。对数据结构的掌握与运用能力是衡量你编程能力的一个很重要的指标。有的人对于看了链表,栈,树,广义表这些东西就头痛。然而这些东西往往能使你的程序的效率比别人高出百倍。由于一直搞信息学竞赛,到了大学又搞ACM,所以我对数学和数据结构都掌握得相对较好。这使我在应聘与工作中明显感到胜人一酬。记得自己大学时去一家公司应聘的经历,当时去应凭的还有3 个人,有2 个大学毕业,有个也工作了一段时间了。他们几个都在大讲自己的能力如何之强,会使用的语言及编程工具如何之多,经验如何之丰富。按理说我应该是资质最浅的。当时也是初生牛X 不怕虎,也就硬着头皮去了。当时面试的题目是一个公司的资金管理项目的一个问题,要求每个人都在思考后给出自己的设计方案。其中比较核心的一个问题就是要计算一个资金最小波动值的问题,给出的数据量相当大,对效率要求很高。对于整个程序的面向对象化的分析我们几个都是差不多的,毕竟这些东西在学校里是很重视的,而且不是真正的难点。然而到了最关键的问题时其余的人都卡壳了,有两个是用简单的双重循环,时间复杂度(N^2),惨不忍睹。还有一个在冥思苦想了好一阵以后说用树,具体技术细节又讲不清楚,效率分析也很马虎。只有我当时很快就给出了采取AVL 树的方案,并且利用高等数学推导作出了很详细的效率分析和时空换算,并提出了引入汇编的方法。很自然的我得到了这分工作。在这里大家显然可以看到数学和数据结构对于一个优秀程序员是多么重要,它们是和一般的程序员打开档次的最关键的地方。这样向“枣子”碰到的那种情况应该很轻松的就可以想到。

如果你是一位想学习编程的朋友,我经过多年的学习总结出来了一个学习的线路希望对你有所帮助。要学习编程是要有很大恒心和毅力的,首先你要明确自己的目标,想好自己编程是为了干什么。如果你学习仅仅只是一时想编出QUAKE 和成为比尔盖次的冲动,那么我劝你还是应该还是不要开始学习,应为这样的目标很难支持你日后大量的学习。而且你的年龄不能太大(最好是中学或者大学生)。如果你想好目标并决定开始奋斗,那就让我们开始吧。如果你一开始对电脑一无所知,那么你应该先熟悉一些电脑的一些最基本的原理和操作,这个不需要特别细致的学习,只要大概知道二进制和一些基本操作就可以了。接下来你应该先学习BASIC 语言,这个语言并不会耽误你太多的时间,学习它完全是为了入门,让你对电脑编程有一个比较初步的认识。这时候你应该多编一些小的程序,知道一些最基本每条语句的功能,搞清楚一些基本的数据结构(尤其是数组)对于一些其余用途的函数最好不要做任何学习,因为这样只会分散你的注意力。当你能够可以熟练的运用BASIC 编出猴子选大王,以及电脑出题考试之类的程序时,你就可以开始后面的学习了。接下来如果觉得自己接受能力强的话就可以开始学C 了(注意不是C++),如果感觉有困难也可以先学Pascal 过度一下。还有很重要的一点就是千万不要一开始就学VB,DELPHI,VC之类的东西,这些东西在一开始学会对你造成很坏的影响。有可能会把你引入另外一个错误的学习方向而忽略了真正应该掌握的东西。学C 主要是学过程话的程序设计,学会把自己的程序分成许多的函数(或过程),养成良好的编程习惯。这时可以多看一下高人的程序,不一定要懂意思,主要是学会别人程序的格式(比如变量如何起名,怎么划分函数)。除开掌握基本的控制流语句外,应该学习一些很简单的I/O 函数和数学函数。C 的学习主要是你舍弃原来BASIC 程序那种把所有语句积成一大堆的风格,要学会使用函数,提高代码重用性。对于指针之类的东西如果实在看不懂可以先不去管,到后面会有办法。当你能够比较自如的用C 编写一些小的计算程序时,你就可以开始你的数据结构的学习了(数学的学习主要是在学校,自

己要多用心)。数据结构你可以一点一点漫漫看,并不需要专门空出一段时间来专门研究,这样的目的是让你能够很好的掌握它,要学会用数据结构的知识来规范自己的程序设计和提高程序的效率。学完C 我认为接着最好学习汇编。这个或许有许多人都会反对,然而我个人认为这样是很好的。从最基本的DOS 汇编开始,买本《IBM PC 汇编程序设计》(清华黄皮)一定要一点一点吃透,实在看不懂就跳,反复的严读是一定可以看懂的。汇编是一定要掌握的,因为它涉及到很多最基本的知识。掌握了汇编和对I/O 有了个很彻底的认识后,应该去学编译原理。这个东西并不要精通,但是一定要知道,在大脑里要有一个这样的概念,这对你对程序语言的控制能力都有很大的帮助。这样最基本的学习就算完成了。一般智力正常的人前一段东西应该都是可以掌握的。接着后面的学习就要看你自身的造化了。这个时候你应该研究一下数据结构,不要分散自己学习的注意力,要知道数据结构是异常重要的(相信我,绝对没错)如果你觉得自己已经对于树,连表,堆栈之类的东西和排序,递归之类的算法已经十分清楚,就可以开始学习C++了。学习前一定要有个正确的认识,那就是C 和C++ 是两个不同的东西。学习C++ 是为了学习面向对象的程序设计,这个时候你对于指针应该也能够掌握了(有汇编的基础),主要抓住C++ 和C 相比的一些新特性,对于多态之类的特性要注意理解掌握,如果没有搞懂就坚决不要往下学习。一些基本的概念掌握以后可以看一些别人设计的程序,学习别人怎么利用面向对象的方

法来设计程序的。这个东西也是人之间拉开档次的一个环节,可以和数据结构放在同等重要的地位。我就见过有的人都大学毕业了还搞不懂virtual 到底是怎么一回事情。其实我认为学到这里你已经为你成为一个优秀的程序员打下了很好的基础,你已经能够应用C++,懂得面向对象程序设计,对数据结构掌握很好,掌握汇编和编 译原理。接下来的学习就是基于操作平台的了,一般是先学windows(Microsoft 毕竟是老大),先学win32api,搞请windows 基本消息机制和原理,有汇编基础基本上不会碰到什么困难。其实只要会了API,其余什么MFC,VCL 都是囊中之物了,都不过是对于API 的小装而已。VC,C++Builder 都可轻松拿下,这只是开发工具的问题。以后的OLE(ActiveX),.NET,数据库就要看自己的发展方向而定了。我在这里强调的是前面的基本能力的学习,后面操作平台虽然知识体系庞大,然而毕竟比较死,更好掌握。最后编程能力的高低主要还是有以下几点决定:1。编程的习惯 2。数学能力(包括逻辑思维,分析问题的能力)3。对数据结构的认识能力 4。经验的多少(包括多使用语言的掌握能力)。

经验分享

(七)算法的力量

算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时要求的编程语言五花八门,就产生了一种误解,认为学计算机就是学各种编程语言,或者认为,学习最新的语言、技术、标准就是最好的铺路方法。其实,大家被这些公司误导了。编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法和理论,例如数据结构、算法、编译原理、计算机体系结构、关系型数据库原理等等。在“开复学生网”上,有位同学生动地把这些基础课程比拟为“内功”,把新的语言、技术、标准比拟为“外功”。整天赶时髦的人最后只懂得招式,没有功力,是不可能成为高手的。

算法与我

当我在1980 年转入计算机科学系时,还没有多少人的专业方向是计算机科学。有许多其他系的人嘲笑我们说:

“知道为什么只有你们系要加一个„科学‟,而没有„物理科学系‟或„化学科学系‟吗?因为人家是真的科学, 不需要画蛇添足,而你们自己心虚,生怕不„科学‟,才这样欲盖弥彰。” 其实,这点他们彻底弄错了。真正学懂计算机的人(不只是“编程匠”)都对数学有相当的造诣,既能用科学家的严谨思维来求证,也能用工程师的务实手段来解决问题——而这种思维和手段的最佳演绎就是“算法”。

记得我读博时写的Othello 对弈软件获得了世界冠军。当时,得第二名的人认为我是靠侥幸才打赢他,不服气地问我的程序平均每秒能搜索多少步棋,当他发现我的软件在搜索效率上比他快60 多倍时,才彻底服输。为什么在同样的机器上,我可以多做60 倍的工作呢?这是因为我用了一个最新的算法,能够把一个指数函数转换成四个近似的表,只要用常数时间就可得到近似的答案。在这个例子中,是否用对算法才是能否赢得世界冠军的关键。

还记得1988 年贝尔实验室副总裁亲自来访问我的学校,目的就是为了想了解为什么他们的语音识别系统比我开发的慢几十倍,而且,在扩大至大词汇系统后,速度差异更有几百倍之多。他们虽然买了几台超级计算机,勉强让系统跑了起来,但这么贵的计算资源让他们的产品部门很反感,因为“昂贵”的技术是没有应用前景的。在与他们探讨的过程中,我惊讶地发现一个O(n*m)的动态规划(dynamic programming)居然被他们做成了O(n*n*m)。更惊讶的是,他们还为此发表了不少文章,甚至为自己的算法起了一个很特别的名字,并将算法提名到一个科学会议里,希望能得到大奖。当时,贝尔实验室的研究员当然绝顶聪明,但他们全都是学数学、物理或电机出身,从未学过计算机科学或算法,才犯了这么基本的错误。我想那些人以后再也不会嘲笑学计算机科学的人了吧!

网络时代的算法

有人也许会说:“今天计算机这么快,算法还重要吗? ”其实永远不会有太快的计算机,因为我们总会想出新的应用。虽然在摩尔定律的作用下,计算机的计算能力每年都在飞快增长,价格也在不断下降。可我们不要忘记,需要处理的信息量更是呈指数级的增长。现在每人每天都会创造出大量数据(照片,视频,语音,文本等等)。日益先进的记录和存储手段使我们每个人的信息量都在爆炸式的增长。互联网的信息流量和日志容量也在飞快增长。在科学研究方面,随着研究手段的进步,数据量更是达到了前所未有的程度。无论是三维图形、海量数据处理、机器学习、语音识别,都需要极大的计算量。在网络时代,越来越多的挑战需要靠卓越的算法来解决。

再举另一个网络时代的例子。在互联网和手机搜索上,如果要找附近的咖啡店,那么搜索引擎该怎么处理这个请求呢?

最简单的办法就是把整个城市的咖啡馆都找出来, 然后计算出它们的所在位置与你之间的距离, 再进行排序, 然后返回最近的结果。但该如何计算距离呢?图论里有不少算法可以解决这个问题。

这么做也许是最直观的,但绝对不是最迅速的。如果一个城市只有为数不多的咖啡馆, 那这么做应该没什么问题, 反正计算量不大。但如果一个城市里有很多咖啡馆, 又有很多用户都需要类似的搜索, 那么服务器所承受的压力就大多了。在这种情况下, 我们该怎样优化算法呢? 首先,我们可以把整个城市的咖啡馆做一次“预处理”。比如,把一个城市分成若干个“格子(grid)”, 然后根据用户所在的位置把他放到某一个格子里,只对格子里的咖啡馆进行距离排序。

问题又来了,如果格子大小一样,那么绝大多数结果都可能出现在市中心的一个格子里,而郊区的格子里只有极少的结果。在这种情况下,我们应该把市中心多分出几个格子。更进一步,格子应该是一个“树结构”,最顶层是一个大格——整个城市,然后逐层下降,格子越来越小,这样有利于用户进行精确搜索——如果在最底层的格子里搜索结果不多,用户可以逐级上升,放大搜索范围。

上述算法对咖啡馆的例子很实用,但是它具有通用性吗?答案是否定的。把咖啡馆抽象一下,它是一个“点”,如果要搜索一个“面”该怎么办呢?比如,用户想去一个水库玩,而一个水库有好几个入口,那么哪一个离用户最近呢?这个时候,上述“树结构”就要改成“r*tree ”, 因为树中间的每一个节点都是一个范围,一个有边界的范围(参考:http://)。这个算法能够在很多种计算中达到相当高的效率,而且是可扩展的(也就是说,一千台机器就算不能达到一千倍的效果,至少也可以达到几百倍的效果)。Map and Reduce 的另外一大特色是它可以利用大批廉价的机器组成功能强大的server farm。最后,它的容错性能异常出色,就算一个server farm 里面的机器down 掉一半,整个farm 依然能够运行。正是因为这个天才的认识, 才有了Map and Reduce 算法。借助该算法,Google 几乎能无限地增加计算量,与日新月异的互联网应用一同成长。

算法并不局限于计算机和网络

举一个计算机领域外的例子:在高能物理研究方面,很多实验每秒钟都产生几个TB 的数据量。但因为处理能力和存储能力的不足,科学家不得不把绝大部分未经处理的数据丢弃掉。可大家要知道,新元素的信息很有可能就藏在我们来不及处理的数据里面。同样的,在其他任何领域里,算法都可以改变人类的生活。例如人类基因的研究,就可能因为算法而发明新的医疗方式。在国家安全领域,有效的算法可能避免下一个911 的发生。在气象方面,算法可以更好地预测未来天灾的发生,以拯救生命。

所以,如果你把计算机的发展放到应用和数据飞速增长的大环境下,你一定会发现,算法的重要性不是在日益减小,而是在日益加强。

给程序员的七个建议

(1)练内功。不要只花功夫学习各种流行的编程语言和工具,以及某些公司招聘广告上要求的科目。要把数据结构、算法、数据库、操作系统原理、计算机体系结构、计算机网络,离散数学等基础课程学好。大家不妨试试高德纳所著The Art of Computer Programming 里的题目,如果你能够解决其中的大部分题目,就说明你在算法方面有一定的功力了。

(2)多实战。通过编程的实战积累经验、巩固知识。很多中国大学毕业生缺乏编程和调试经验;学习C语言,考试过关就算学会了;课题项目中,只要程序能够编译,运行,并且输入输出满足要求就算了事。这些做法是不行的。写程序的时候,大家必须多想想如何把程序写得更加精炼、高效、高质量。建议大家争取在大学四年中积累编写十万行代码的经验。我们必须明白的是:好程序员是写出来的,不是学出来的。

(3)求实干。不要轻视任何实际工作,比如一些看似简单的编码或测试。要不懈追求对细节一丝不苟的实干作风与敬业精神。我发现不少程序员对于知识的掌握很肤浅,不求甚解,没有好奇心,不会刨根问底。比如,学会了C++,是否了解一个对象在编译后,在汇编代码中是如何被初始化的?这个对象的各个成员在内存中是如何存放的?当一个成员函数被调用时,编译器在汇编代码中加入了哪些额外的动作?虚函数的调用是如何实现的? 这些东西恐怕在编程语言或编译原理中都没有详细提到,只有通过踏实的实干才能真正掌握。

(4)重视数学学习。数学是思维的体操,数学无处不在。学计算机至少要学习离散数学、概率论、布尔代数、集合论和数理逻辑。这些知识并不难,但是对你未来的工作帮助会很大。尤其当你对一些“数学密集型”的领域如视频、图像处理等有兴趣时,这些知识将成为你手中的利器。

(5)培养团队精神,学会与人合作。今天的软件工程早已经不是一个人可以单独操作的,而必须靠团队合作才能成功。不懂得合作的人是不能成大器的。大家要多去寻找可以与人一起做项目的机会。

(6)激励创新意识,培养好奇心,不要死记硬背。没有掌握某种算法技术的根本原理,就不会有应变和创新的能力。想成为一位好程序员(其实从事任何一个行业都是如此),重要的是要养成钻研,好奇,创新,动手,合作的优秀习惯,不满足于填鸭,不满足于考试交差,不满足于表象。这不是学几门课能够一蹴而就的。

(7)有策略地“打工”。在不影响学业的前提下,寻找真正有意义的暑期工作或兼职。去找一个重视技术的公司,在一个好的“老板”指导下完成真正会被用户使用的程序。不要急于去一个要你做“头”而独挡一面的地方,因为向别人学习才是你的目的。找工作也是一样,不要只看待遇和职衔,要挑一个你能够学习的环境,一个愿意培养员工的企业,一个重视你的专业的公司。最后,还要挑一个好老板。

希望大家都能把握机会,养成好的学习习惯,把算法学精学透;希望大家都能有一个美好的未来!

经验分享

(八)不要迷失在技术的海洋中

技术就好像一片汪洋大海,越深入越望不到边际。就拿自己的体会说吧,2000 年的时候在学校搞ASP,觉得网页开发就是这么简单,把数据库中的数据格式化一下显示在页面上,把用户的输入组装成添加删除和修改的SQL 提交到数据库中去。几年后的今天,我对自己了解或听说过的ASP.NET 相关(注意:仅仅是ASP.NET 或者说网站制作相关)技术列了一下:

在这些语言、技术、工具、理念中,每一项都能扩展出很多还要细化的技术,每一项要达到熟悉的程度可能都会花去一年的时间,如果这些都要达到熟悉的话,大概也 就快退休了。不但如此,每一个技术都在飞速发展,今年语言到了明年就有更简单的语法,今年的技术到了明年就有更好的技术来替代,今年的工具到明年已经面目 全非,今年的理念到了明年已不再流行。

或许你现在:

在为面试而去搜索接口和抽象类的区别;

在为新技术来不及学习而烦恼;

在为看不懂高深的技术文章而烦恼;

在为项目不能提高自己的编码水平而发愁;

„„„„

我觉得:不管做什么,学什么,一要心态好,二要态度好。所谓心态好就是不要着急、不用担心;所谓态度好是多分享、多讨论、学出自己的心得。分享的意义是很大的,在分享之后的认知水平往往比分享之前的高,而且在很多时候分享给别人1 点,别人能回报给你2 点。有些人在团队中不愿意分享,怕团队中的其它人水平提升了影响到自己的地位,其实这种想法是没有什么道理的,也是对自己不利的。有些人又在羡慕别人的技术NB,崇拜高手,为自己的技术差感到烦恼,如果你对自己信心又有什么技术是花时间学不到的那?

从学习的内容上来说,要坚持两个原则,如果你没有时间的话,那么学新技术不如学基础、学应用不如学思想。举例来说,如果你只熟悉C# 的基本语法的话,那么学好C# 这个语言比学会编写留言本更有意义,如果你关注MVC、ORM 的话,那么学习它们的思想比学会使用MONORAIL 以及NHIBERNMATE 更好。技术虽然一直在变,但是越是基础和越是抽象的技术变化越慢,越是偏向应用越是具体的技术变化越是快,从性价比上说,学习基础知识性价比更高。再举一个直白的例子,DIY 电脑的时候,在显示器上多花费500 元的意义一定比在显卡上多花费500 元的意义大,而就是有些人宁可在显卡上多花费500 元。在很多大型软件公司,招聘的时候只看人(看人品、看聪明程度、看态度)不看技术的,因为它们需要的是能快速发展,适应企业文化的人,而不需要你那些所谓的精通和熟悉。

不要过于专著于技术,这里的技术指工作中用于开发的技术。在几年之后,当你只有.NET 可以和你的孩子分享的话,是不是太可悲了。在软件行业,技术虽然一定程度决定了薪水、决定了职位,但是我们的生活并不是100% 是工作,有时间为技术而发愁,为何不综合提升自己的其它能力呢?并且随着职位的上升,往往沟通能力、经济知识以及文学艺术修养比技术显得更重要,这个时候叹息自己过于专著技术往往为时过晚。

虽然国内很多公司的技术层次不同和文化也有差异,但是在大多数的时候公司或别人能教给你的东西很少,要学东西还是要靠自己主动。有的人一直觉得在公司学不到 东西,想换一个环境,往往他换了一个环境之后发现还是学不到什么东西。国内的项目大多还是急功近利的,不要期望有这么多微软研究院,空闲的时间踏踏实实学 一些东西比到处找工作强很多,做项目的时候多分享一下自己的心得给团队成员比抱怨团队技术实力差强很多。

在工作中,要始终提醒自己“谦恭”、“真诚”和“规矩”,谦恭真诚对别人,把规矩留给自己。技术再强也要“谦恭”,离开了“谦恭”的技术就会失去光芒,社会 再险恶也要“真诚”,一切虚伪会在“真”诚面前低头,职位再高也要“规矩”(不迟到,不早退,以身作则),否则再大的权力也只能变成人员的流失。如果能做 到这六个子,那么无论你的技术怎么样,无论你到哪里都会得到领导的重用,在事业上有所发展。

现在的你不再为面试而去搜索接口和抽象类的区别,而是在面试的时候告诉考官你并不知道它们之间的区别,但是愿意在一个月内系统学习面向对象的知识;为新技术来不及学习而烦恼,而是明确了自己最需要学习的技术,一边学习一边分享;为看不懂高深的技术文章而烦恼,而是拿起《C# 高级编程》踏踏实实从头到底边阅读边做试验;为项目不能提高自己的编码水平而发愁,而是在进度允许的情况下尽可能让项目变得可扩展、可维护以及高效;

„„„„

看到身边的一些人为技术所累,在技术的海洋中航行的很辛苦,因此有了本文。本文的主要目的是提醒大家找到方向,时不时回岸边休息一下,思考一下新的航向,不要迷失在技术的海洋中让自己筋疲力尽,在技术之外的有很多东西的意义远大于技术,请大家踊跃讨论„„„„

更新(本文或许过于杂乱,总结一下观点): 学习靠自己,不要期望别人教你什么,学习要主动;

不管水平高低,不要看不起自己,也不能看不起别人,学习要心态好; 不能不思进取,也不用让自己为技术所累,给自己多一点技术之外的时间; 如果时间不充裕,优先考虑学习基础的内容,同时也可以多关注一些新的思想; 如果别人能从你这里学到知识的话,那么你自己也一定学到了知识,请坚持分享;

经验分享

(九)给所有入门程序员的建议(1)--句句是诤言 希望大家认真读完

编了这么久的程序,一直想找机会总结下其中的心得和方法,但回想我这段编程道路,又很难说清楚,如果按照我走过的所有路来说,显然星不可能的!当我看完了云风的《游戏之旅**编程感悟》和梁肇新的《编程高手箴言》我突然瞄道我要从何说起,我要怎么说了!

从接触编程到现在已经至少要6年,虽然时间短,但我几乎每天都在编,而编程上突飞猛进的还星最近一两年,单纯编程上的进步,很简单就星经验,但你要理解才可以进步的快!这就星说,你的理论课要学好,才能学好编程,操作系统,网络原理,计算机体系结构,数据结构,编译原理,你哪个学的不好,你根本不配成为编程高手,我见过的高手,这些学的都不错!这些都星计算机的支柱,你连它的支柱都不了解,怎么编程,即使你编写的程序好——只有一个原因,你用的星高级语言或脚本语言,因为它们封闭大量低层语言细节,让你不用了解就可以编写,你不了解低层细节你咋成为高手!解释什么叫编程?

我觉得现在很多同学,根本不瞄道什么叫编程!我现在告诉你,单纯的编程,也就星就瞄道语法瞄识的编程,根本不叫编程,只会单纯的语法的编程连低级程序员都不如!

编程不仅仅星你对语法的掌握,你还要把各种技术混合到里面,这样才叫编程,你编程的时候,你应该问问自己,你的程序有算法吗?你的程序写的够简单吗?速度足够快吗?占用空间足够少吗?代码写的规范吗?语句写的标准吗?你的程序之间的结构合理吗?你类定义的合适吗?方法和属性合理吗?接口合理吗?等等等,包含很多东西!这就星高级程序员为什么赚这么多钱!要付出相当大的脑力劳动!

调试对你也很重要,一个程序高手,也星调试专家,其实调试很多方法,但大多数都星实践中得到的!

指正现在人对学计算机误区

现在我每天在和汇编,硬件指令,c和c++或一些低层API打交道,有些时候编程这个东西很难说清楚,只有你经历了,你才能感受到,你没有经历,就永远体验不到!

我现在要更正几个现在学计算机人的误区,我想回答的星,学什么才星学计算机!

学计算机的两个方向:一个星纯搞理论的,一个星搞实践的。搞理论的无可厚非的,大家都承认星学计算机。那么实践呢?我很难给出一个定义,但我会列出那些才星真正学计算机学的:

(1)编程,这里的编程,我要抛出FLASH,PHOTOSHOP,3DMAX等,它们虽然也有语言,但都星为了给美术人员提供的!也就星几乎封闭了大量的低层细节,对于一个学计算机的人来说,如果你努力学它们,你还星不要学计算机了,去学美术把!网页编程能接触到至少两种类型语言,HTML和ASP或JSP(PHP),HTML说实话,不应该星计算机人学的,你应该学的星ASP,JSP等!

按严格意义上讲(但实际没有这么严格)如果你的主要必修语言,不星c,c++,JAVA,或者硬件指令,都不算星真正学计算机的,之所以这么说,我举个例子,比如你用JSP,它星一个脚本语言,如果你用过这个语言,你认为你用好这门语言需要了解硬件结构瞄识吗?显然不用,如果你纯星JSP程序员,你需要只星,JSP语法,一些简单的JAVA语言,SQL之类的数据库瞄识,其余的你什么都不需要,至于分析流程,那星系统分析师的事,不要和编程混为一谈,我学JSP学了3个月,现学现买就做出了功能齐全的网上书店(当时星老师布置的作业),如果再努点力,就可以投如使用!所以说,学JSP根本就不需要太多的专业瞄识,不星学计算机的也很容易就学会!

学c++,我都学了好几年了,用它写程序都几十万行,我也不敢说我学的精通!就星因为它太灵活了!不同人,用的效果就星不一样!所以按严格意义上讲,如果你的主要必修语言,不星c,c++,JAVA,或者硬件指令,都不算星真正学计算机的,也就星说,学那些对计算机专业瞄识不需要太多了解的语言,就不叫学计算机的!

(2)

从事软件方法实践研究,这个纯星软件工程方面的,如果你没有容入一个大项目中很难体会它的重要性,想一想,一个程序,几十万,几百万行代码,能这么好的实现,并运行,它的功劳不封!

(3)

从事低层硬件开发,这里可能和搞电子的专业有些重叠,但事实就星这样,他们也星学计算机的!其余的,装系统了,装电脑了,用人家编好的软件实现些图片音乐等功能的,那都星计算机的门外汉,不要和真正学计算机的混为一谈!

我经常被问到:

你会盗qq不?我晕,学计算机的就要会盗qq? 你会装电脑不?虽然我会,但不会并不可耻 你会装系统不?虽然我会,但不会并不可耻 „„„„„„„„ „„„„„„„„

等等把,有好多,通过我上面解释,你应该理解学计算机的应该会什么,不会什么也星应该的!

正式入题,怎么学好编程!

世面上好象只有这两本星中国人写的关于编程心得的书,中国编程好的人很多,但写出方法很难!第一本《游戏之旅**编程感悟》前面几章写的星云风的编程经历,后面几章写的星编程经验!总的来说本书很容易读懂!《编程高手箴言》书很难,尤其写操作系统那章!正如作者所说,真正写一门编程方法学的书很难!本书前几张概括了当前中国软件面临的形式,我强烈建议看一下,写的很经典!以前我不瞄道程序和软件的区别星什么,现在我瞄道了!后面几张写的都星编程方法和编程要具备的瞄识!

总结他们两人所说的,我准备按照下面提纲来写编程方法!

1。如果你感兴趣,学计算机星一种光荣,如果你不感兴趣,那么它星地狱!2。理论对你很重要,尤其星你一名搞技术的程序工程师!3。学会自学,学会思考,学会合作与交流!

4。要想成为高手,一定要从底层学起,底层星什么?CPU,汇编等硬件指令!5。编程需要经验积累,学会调试对你尤其重要!

6。全局把握整个工程,具体到每个类的属性和方法以及各个类的关系!一定确保你设计的类和类模式和类间关系能够有效,利于修改和升级!概括说就星软件工程。下面我就分别说一下

一.如果你感兴趣,学计算机星一种光荣,如果你不感兴趣,那么它星地狱!

我经常听很多同学说,开始他对计算机很感兴趣,但随着大学里的学习,越来越感觉无聊甚至厌烦!你之所以这么想,其实一点也不怪你!从高中的应试教育到大学里的自由学习方式上的转变,我们几乎都不适应,一到大学,突然有一种解放的感觉,没有老师的强硬指示学习,自己根本不瞄道怎么学,学什么!所以说,教育对我们很不负责任!

如果你在大学以前已经瞄道编程怎么回事,那到没什么事情!但好象很少有人象云风这样从封就接触了编程教育!所以我们在没有上大学前几乎星零起步!

其实,按我的理解,刚上大学开始学编程有些晚了,之所以这么说,不星因为单纯的编程很难,如果你很努力,几年完全可以搞定,其他的你去公司的经验可以弥补!我这里想说的星,一个真正的程序员不单单要有强硬的编程实力,还要有强大的理论后盾!你只会编程,没有强大的理论做后盾,你也就不会把理论转化成实际的代码,你也不会做出高效,高技能的程序!在计算机理论中,图论,人工智能等等都星很难的理论,但如果你能把它们有效的用在计算机领域,功德无量!国人能做这点的很少,本来厉害的程序员就很少,有高尖端理论技术并把它应用的更星凤毛麟角!

(这里可以推荐大家一本书《游戏编程中的人工智能技术》,这本书抛开了传统的自动机,产生式,各种规则的传统的人工智能理论,而星讲的更前沿的计算智能——生物遗传算法,人工神经网络!这本书,不单纯讲理论,还用c++语言结合理论实现各种游戏程序!有时抽象的理论都星基于数学基础之上,如果没有一定数学基础星很难看懂的,但正因为它有数学证明星正确的,所以它星可行的!能把它用语言实现更星可观!)所以,如果你热爱计算机,在大学以前,就应该成为一个程序高手,而大学以后,主要专研各种技术的实现,和各种技术的学习,如果你把他留在工作里,可能很难,我的同学在参加工作后,很少有继续看技术书籍,因为技术书籍很难,不星一下两下就看懂的,有几个还有这样的耐力和精力去搞!这些怎么在编程上实现,都在等着老外,咱们COPY,这样我们的软件技术能强大吗?

可星在大学以前成为一个编程高手几乎不可能,我们没有良好的学习编程的环境,而且面对着中考,高考的各种压力,几乎没有机会去学习编程!其实,封学,初中,高学,那些课程没有必要象我们这样反复的复习,反复的作题,浪费了大量时间,我们要学会什么?学会一种技能,能够应付各种变化的技能,就星自学,学会思考,学会自己解决问题,学会团结合作!初等教育,打的口号很好,实际上,完全压制了这种学习方式!所以我们应该以最快的速度,在大学里容入一个热爱计算机的氛围!说到这又很难,当代大学生迷茫呀!不瞄道作什么,有些瞄道自己该好好编程,但光说不做!有些人,写了几段代码,出现了问题,不会调试,就放弃了!大家都这样,所以以寝室为单位没有人编程,逐渐以整个计算机学院为单位逐渐编程!确实我们的计算机老师,会编程的很少,我们应该瞄道,中国计算机引进并发展才短短20年,正星这样老一辈的,把这些计算机理论上确立,他们不会编程理所当然,大学的老师主要研究理论,国外的也星,因为理论太难了!

所以大学里学习编程要完全考自己,你要有信心,有意志把它学好才可以,而且这个过程星循序渐进的!以最快方式,找到你编程的爱好和兴趣!我介绍几个方法,学习方式,希望你能找到兴趣,起码我星这样做的,记住如果跌倒了,你要站起来

1.一定要和喜欢编程的,或编程厉害的,或经常编程的人,在一起,经常探讨问题!初学编程会有很多问题出现,你自己很难解决

2. 我建议VB和c一起学习,这个只星我的建议!我为什么这样说呢?如果你开始只学c,你会厌烦整天在DOS下,没有图象的程序!如果你直接学WINDOW编程会很难,所以我建议学VB,VB这星个语法简单,很快可以见到你编写程序的画面,这样你就会逐渐喜欢编程,没有画面很枯燥的,你不这样认为吗?反正我星这样认为的,你编写的好坏,没有画面也很难用眼睛直接看出来!VB星最简单的语言了!不存在c的复杂语法结构,程序出错概率相对c 来说很少,因为VB封状的很好,帮你解决了复杂的过程!其实象JAVA,MFC,c#完全可以作到VB效果,但上手相对困难!c星我们一定要学的,它星一种很接近底层的语言!如果你要成为高手,应该学这个!C星个纯面向过程的语言,它的语法不星很难,你用它大约一年半多左右,就完全可以掌握它,记住这需要你的实践,多做程序,主要星算法程序,最好把你教科书的后的的习题都做了。大家几乎学的都星潭浩强的书,这本书我开始认为很好,但我看了很多国外的书,和很多国外人所打的代码后,和国内高级程序员所说的话,我只能说这本书,只能星你的开端,但不能 让你更深层次了解语言。但你要问我初学者用什么书,我还会介绍这本书。C的精髓在于指针,你能灵活运用指针就几乎等于你掌握了 C语言,这星一种高效的语法支持,快的让你无法想象,我很有感触,在VB下要慢的多。那么我们学VB究竟做什么,很简单,做WINDOWS程序,控件的使用,数据库的使用等等,还有一个很重要的星,你可以练习你学的数据结构,各种计算机算法,很快就可以用图形的方式显现出来!你现在瞄道这些就可以,等你以后学了真正WINDOWS编程,你会对你以前所实现的东西有很深的理解,究竟什么星API,什么星动态连接库,什么星控件,象VB,MFC这样的东西,究竟封状了什么让我们用起来这么简单!

3. 如果你能作到,以上两点,(加上你学的专业,如果你很努力,课大约1年)我想你会对计算机感兴趣的!你逐渐容入爱学计算机的氛围!接下来有两个方向你要去做,一个星努力学好其他计算机专业课,二星在巩固c语言的基础上,你可以选择学习c++ 或者WINDWOS编程!这两个先学哪个都无所谓。记住你大学时学的10大专业课,数学,离散数学,数据结构,编译原理,汇编,数据库,计算机体系结构,操作系统,计算机网络,软件工程,你要尽力把它们学好,这个星整个计算机系统的精髓,这些都星相互贯穿的,相互联系的,你可能学某科没学懂,但学了别的后,可能会懂的!切记,在你学好编程的同时,一定要学好这些理论,以后你会受益匪浅的。

4.在你觉的c或者VB学的没什么问题,或者你学会WINDOWS编程,记住一定要自己有个想法,做个封的可视化程序,封游戏也好,封应用软件也好,都可以,这个步骤,你一定要做,你会学到很多东西!在这期间,你还会遇到很多问题,你要自己多想,多问别人,多去网上查资料!但你做的程序,最好不要COPY别人的,如果都星你自己做的,自己想的,你收获最大,哪怕你星模仿别人的 程序,你用你自己的想法实现了,也星厉害的!其次,你可以COPY部分代码,作为自己的。在你对你的想法,瞄道怎么实现后,写代码只星浪费时间的时候,而且你写的效率没有现成的代码效率高,你就可以完全COPY,但如果你星初学者,你千万不要这么做!否则 你会对它产生依赖,有一天真正让你自己去写,你会无从下手!所以开始时,你可以试着COPY,逐渐摆脱对它们的依赖,以后摆脱了,这个时候,你才可以总依赖它们。

5.大学期间,有很多程序的实验课,你要认真做,做出来收获星自己的,也可以作为自己的一个封项目!大学期间加上实验课,基本上自主编程或者团队自主编写的总封软件数目应该不少于7,8个,如果你做的程序很大,可以少些!以上,我把如果学习计算机入门和提起 你兴趣的方法告诉你了!我相信你按照我的去做,应该没有问题的!对于每个细节,我会在接下来详细为你们写出的!

经验分享

(十)数学对编程的重要作用

可能有很多朋友在网上看过google公司早几年的招聘广告,它的第一题如下了:{first 10*digit prime found inconsecutive digits e}.com,e中出现的连续的第一个10个数字组成的质数。据说当时这个试题在美国很多地铁的出站口都有大幅广告,只要正确解答了这道题,在浏览器的地址栏中输入这个答案,就可以进入下一轮的测试,整个测试过程如同一个数学迷宫,直到你成为google的一员。

又如Intel某年的一道面试题目:巴拿赫病故于1945年8月31日。他的出生年份恰好是他在世时某年年龄的平方,问:他是哪年出生的?这道看似很简单的数学问题,你能不能能快地解答呢?

下面则是一道世界第一大软件公司微软的招聘测试题:中间只隔一个数字的两个素数被称为素数对,比如5和7,17和19,证明素数对之间的数字总能被6整除(假设这两个素数都大于6),现在证明没有由三个素数组成的素数对。这样的试题还有很多很多,这些题目乍初看上去都是一些数学问题。但是世界上一些著名的公司都把它们用于招聘测试,可见它们对新员工数学基础的重视。数学试题与应用程序试题是许多大型软件公司面试中指向性最明显的一类试题,这些试题就是考察应聘者的数学能力与计算机能力。

某咨询公司的一名高级顾问曾说:微软是一家电脑软件公司,当然要求其员工有一定的计算机和数学能力,面试中自然就会考察这类能力。微软的面试题目就考察了应聘人员对基础知识的掌握程度、对基础知识的应用能力,甚至暗含了对计算机基本原理的考察。所以,这样的面试题目的确很“毒辣”,足以筛选到合适的人。

四川大学数学学院的曹广福教授曾说过:“一个大学生将来的作为与他的数学修养有很大的关系”。大学计算机专业学生都有感触,计算机专业课程中最难的几门课程莫过于离散数学、编译原理、数据结构,当然像组合数学、密码学、计算机图形学等课程也令许多人学起来相当吃力,很多自认为数据库学得很好的学生在范式、函数依赖、传递依赖等数学性比较强的概念面前感到力不从心,这些都是因为数学基础或者说数学知识的缺乏所造成的。

数学是计算机的基础,这也是为什么考计算机专业研究生数学都采用最难试题(数学一)的原因,当然这也能促使一些新的交叉学科如数学与应用软件、信息与计算科学专业等飞速发展。许多天才程序员本身就是数学尖子,众所周知,BillGates的数学成绩一直都很棒,他甚至曾经期望当一名数学教授,他的母校——湖滨中学的数学系主任弗雷福?赖特曾这样谈起过他的学生:“他能用一种最简单的方法来解决某个代数或计算机问题,他可以用数学的方法来找到一条处理问题的捷径,我教了这么多年的书,没见过像他这样天分的数学奇才。他甚至可以和我工作过多年的那些优秀数学家媲美。当然,比尔也各方面表现得都很优秀,不仅仅是数学,他的知识面非常广泛,数学仅是他众多特长之一。”。影响一代中国程序人的金山软件股份有限公司董事长求伯君当年高考数学成绩满分进一步说明了问题。很多数学基础很好的人,一旦熟悉了某种计算机语言,他可以很快地理解一些算法的精髓,使之能够运用自如,并可能写出时间与空间复杂度都有明显改善的算法。

程序设计当中解决的相当一部分问题都会涉及各种各样的科学计算,这需要程序员具有什么样的基础呢?实际问题转换为程序,要经过一个对问题抽象的过程,建立起完善的数学模型,只有这样,我们才能建立一个设计良好的程序。从中我们不难看出数学在程序设计领域的重要性。算法与计算理论是计算机程序设计领域的灵魂所在,是发挥程序设计者严谨,敏锐思维的有效工具,任何的程序设计语言都试图将之发挥得淋漓尽致。

程序员需要一定的数学修养,不但是编程本身的需要,同时也是培养逻辑思维以及严谨的编程作风的需要。数学可以锻炼我们的思维能力,可以帮助我们解决现实中的问题。可以帮助我们更高的学习哲学。为什么经常有人对一些科学计算程序一筹莫展,他可以读懂每一行代码,但是却无法预测程序的预测结果,甚至对程序的结构与功能也一知半解,给他一个稍微复杂点的数学公式,他可能就不知道怎么把它变成计算机程序。很多程序员还停留在做做简单的MIS,设计一下MDI,写写简单的Class或用SQL语句实现查询等基础的编程工作上,对于一些需要用到数学知识的编程工作就避而远之,当然实现一个累加程序或者一个税率的换算程序还是很容易的,因为它们并不需要什么高深的数学知识。

一名有过10多年开发经验的老程序员曾说过:“所有程序的本质就是逻辑。技术你已经较好地掌握了,但只有完成逻辑能力的提高,你才能成为一名职业程序员。打一个比方吧,你会XXXXX般武艺,刀枪棍棒都很精通,但就是力气不够,所以永远都上不了战场,这个力气对程序员而言就是逻辑能力(其本质是一个人的数学修养,注意,不是数学知识)。”

程序员的数学修养不是一朝一夕就可以培养的。数学修养与数学知识不一样,修养需要一个长期的过程,而知识的学习可能只是一段短暂的时间。下面是一些我个人对于程序员怎么样提高与培养自己的数学修养的基本看法

首先,应该意识到数学修养的重要性。作为一个优秀的程序员,一定的数学修养是十分重要也是必要的。数学是自然科学的基础,计算机科学实际上是数学的一个分支。计算机理论其实是很多数学知识的融合,软件工程需要图论,密码学需要数论,软件测试需要组合数学,计算机程序的编制更需要很多的数学知识,如集合论、排队论、离散数学、统计学,当然还有微积分。计算机科学一个最大的特征是信息与知识更新速度很快,随着数学知识与计算机理论的进一步结合,数据挖掘、模式识别、神经网络等分支科学得到了迅速发展,控制论、模糊数学、耗散理论、分形科学都促进了计算机软件理论、信息管理技术的发展。严格的说,一个数学基础不扎实的程序不能算一个合格的程序员,很多介绍计算机算法的书籍本身也就是数学知识的应用与计算机实现手册。

其次,自身数学知识的积累,培养自己的空间思维能力和逻辑判断能力。数学是一门分支众多的学科,我们无法在短暂的一生中学会所有的数学知识,像泛函理论、混沌理论以及一些非线性数学问题不是三五几天就可以掌握的。数学修养的培养并不在与数学知识的多少,但要求程序员有良好的数学学习能力,能够很快地把一些数学知识和自己正在解决的问题联系起来,很多理学大师虽然不是数学出身,但是他们对数学有很强的理解能力和敏锐的观察力,于是一系列新的学科诞生了,如计算化学、计算生物学、生物信息学、化学信息学、计算物理学,计算材料学等等。数学是自然学科的基础,计算机技术作为理论与实践的结合,更需要把数学的一些精髓融入其中。从计算机的诞生来看它就是在数学的基础上产生的,最简单的0、1进制就是一个古老的数学问题。程序设计作为一项创造性很强的职业,它需要程序员有一定的数学修养,也具有一定的数学知识的积累,可以更好地把一些数学原理与思想应用于实际的编程工作中去。学无止境,不断的学习是提高修养的必经之路。第三,多在实践中运用数学。有些高等学校开设了一门这样的课程——《数学建模》。我在大学时期也曾学过,这是一门内容很丰富的课程。它把很多相关的学科与数学都联系在一起,通过很多数学模型来解决实际的生产生活问题,很多问题的解决需要计算机程序来实现。我在大学和研究生阶段都参加过数学建模竞赛,获得了不少的经验,同时也进一步提高了自己的数学修养。实际上,现在的程序设计从某些角度来看就是一个数学建模的过程,模型的好坏关系到系统的成败,现在数学建模的思想已经用于计算机的许多相关学科中,不单只是计算机程序设计与算法分析。应该知道,数学是一门需要在实践中展示其魅力的科学,而计算机程序也是为帮助解决实际问题而编制的,因此,应该尽量使它们结合起来,在这个方面,计算机密码学是我认为运用数学知识最深最广泛的,每一个好的加密算法后面都有一个数学理论的支持,如椭圆曲线、背包问题、素数理论等。作为一名优秀的程序员,应该在实际工作中根据需要灵活运用数学知识,培养一定的数学建模能力,善于归纳总结,慢慢使自己的数学知识更加全面,数学修养得到进一步提高。

第四,程序员培养制度与教学的改革。许多程序员培养体制存在很多缺陷,一开始就要求学员能够快速精通某种语言,以语言为中心,对算法的核心思想与相关的数学知识都一笔带过,讲得很少,这造成很多程序员成为背程序的机器,这样不利于程序员自身的快速成长,也不利于程序员解决新问题。我在长期的程序员培训与计算机教学工作采用了一些与传统方式不一致的方法,收到了一定的效果。很多初学程序的人往往写程序时有时候会有思维中断,或者对一些稍难的程序觉得无法下手,我采用了一些课前解决数学小问题的方法来激励大家的学习兴趣,这些小问题不单单是脑筋急转弯,其中不少是很有代表意义的数学思考题。通过数学问题来做编程的热身运动,让学员在数学试题中激发自己的思维能力,记得有位专家曾经说过,经常做做数学题目会使自己变聪明,很长时间不去接触数学问题会使自己思维迟钝。通过一些经典的数学问题来培养学员的思维的严谨性和跳跃性。很多人可能不以为然,其实有些看似简单的问题并不一定能够快速给出答案,大脑也在不断的运用中变更加灵活的。不信吗?大家有兴趣可以做做下面这道题目,看看能不能在1分钟之内想到答案,这只是一道小学数学课后习题。很多人认为自己的数学基础很好,但是据说这道题目90%以上的人不能在一个小时内给出正确答案。

证明:AB+AC>DB+DC(D为三角形ABC的一个内点)。

最后,多学多问,多看好书,看经典。我在这里向大家推荐两部可能大家已经很熟悉的经典的计算机算法教材,它们中间很多内容其实就是数学知识的介绍。第一部是《算法导论》,英文名称:Introduction toAlgorithms,作者:Thomas H.Cormen,Charles E.Leiserson,RonaldL.Rivest,Clifford Stein。本书的主要作者来自麻省理工大学计算机,作者之一Ronald L.Rivest由于其在公开秘钥密码算法RSA上的贡献获得了图灵奖。这本书目前是算法的标准教材,美国许多名校的计算机系都使用它,国内有些院校也将本书作为算法课程的教材。另外许多专业人员也经常引用它。本书基本包含了所有的经典算法,程序全部由伪代码实现,这更增添了本书的通用性,使得利用各种程序设计语言进行程序开发的程序员都可以作为参考。语言方面通俗,很适合作为算法教材和自学算法之用。另一部是很多人都应该知道的Donald.E.Knuth所著《计算机程序设计艺术》,英文名称:The Art ofComputer Programming。

Donald.E.Knuth人生最辉煌的时刻在斯坦福大学计算机系渡过,美国计算机协会图灵奖的获得者,是本领域内当之无愧的泰斗。有戏言称搞计算机程序设计的不认识Knuth就等于搞物理的不知道爱因斯坦,搞数学的不知道欧拉,搞化学的不知道道尔顿。被简称为TAOCP的这本巨著内容博大精深,几乎涵盖了计算机程序设计算法与理论最重要的内容。现在发行的只有三卷,分别为基础运算法则,半数值算法,以及排序和搜索(在写本文之际,第四卷已经出来了,我也在第一时间抢购了一本)。本书结合大量数学知识,分析不同应用领域中的各种算法,研究算法的复杂性,即算法的时间、空间效率,探讨各种适用算法等,其理论和实践价值得到了全世界计算机工作者的公认。书中引入的许多术语、得到的许多结论都变成了计算机领域的标准术语和被广泛引用的结果。另外,作者对有关领域的科学发展史也有深入研究,因此本书介绍众多研究成果的同时,也对其历史渊源和发展过程做了很好的介绍,这种特色在全球科学著作中是不多见的。至于本书的价值我觉得BillGates先生的话足以说明问题:“如果你认为你是一名真正优秀的程序员读Knuth的《计算机程序设计艺术》,如果你能读懂整套书的话,请给我发一份你的简历”。作者数学方面的功底造就了本书严谨的风格,虽然本书不是用当今流行的程序设计语言描述的,但这丝毫不损伤它“程序设计史诗”的地位。道理很简单,它内涵的设计思想是永远不会过时的。除非英语实在有困难,否则建议读者选用英文版。

经验分享

(十一)给学习计算机的同僚们(初学者,进阶者,包括Linux爱好者)的学习建议

为什么我们要学习计算机,为什么我们要学习编程,有很多很多的原因,但当我们踏进计算机的世界里的时候,我们找到了可以任由我们发挥,任由我们施展拳脚的天地,我们有了一种对学习计算机,甚至是学好计算机的渴望,但是任何一门学科都不是那么容易学的好的,计算机更是如此,我想我们大多数人都是从编程开始学习的,逐渐形成了对学习编程的兴趣,但是如果想真正的学好计算机,单单学习高级语言是不能达到效果的,就算你说我只想学好一门高级语言,把它学的精通就可以了,但问题就是那么的简单么,我想不是吧。

计算机是一个整体,学习任何一门计算机课都是和其他课程联系在一起的,要学习就要有足够的深度和广度,不然不可能有深入的了解就像学习c语言一样,如果你想知道他是怎样在计算机的内存中分布的,具体是怎么运行的,就要学习汇编语言,当然计算机体系结构,计算机组成原理,是你理解计算机的基础,计算机大师knuth都非常重视汇编语言(汇编语言和机器语言是一一对应的),要想学好软件,脱离硬件是不可能,因为软件最终要靠硬件来运转的。当然了如果是初学者还是要一步步学的,如果你想知道c语言是怎么运行的,想了解指针和数组的真正区别,那多学一门语言汇编语言吧,人们都说汇编语言是与机器相关的,不能移植的,但想在的pc机上用的几乎都是AMD,和intel的处理器,他们有都是互相兼容的,所以指令集的体系结构都是IA*32当然了现在都有64位的处理器了,但是这并没有什么很大的区别,仅仅是位数变多了,所能表达的数字变大了,精度也变的更长了等等。就像学习高级语言一样学习汇编语言也是相通的,因为他们的功能都差不多,而且更加简单,你会发现在高级语言中的语法会在汇编语言中消失,仅存的就只是指令的书写格式(相当如词法吧,当然了我可能也说的不太对,因为对汇编语言学的不是很深入,所以现在也正在有计划的去学习)。如果你学习的java,vb,c#等等那么就请您多多看看c和c++吧,我们常常听说某种语言实现了垃圾回收机制,用某种算法不定期的把你程序中不再使用的内存回收掉,最好的例子就是JAVA了(关于它的一句话说的挺好,一次编译到处运行,非常适用于嵌入式计算机程序的编写),不过你能用JAVA语言写出内存回收的程序么我想应该是不可能,JAVA对于这方面做了太多的限制,但在c/c++中却没有,你可以用库函数malloc等等去分配内存,free去释放内存,c++中对应的是(new,delete)实现的跟方便些,你也可以用系统调用brk(其实库函数也是调用了他,只不过做了一些更加完善的工作而已)去分配,而且他可以直接去操作数据到位(&,|,~),如果说高级语言是汇编语言的一个子集的话,那么JAVA在这方面就是C/C++的一个子集,我并没有说java不用学,不好,而是在学习他之前应该多去学学C/C++,(注意语法不是特别的重要,重要的是你怎么能在学完语言以后去灵活的运用他),计算机体系结构对于你理解。

软硬件非常的重要给大家推荐一本书,书名 :计算机组成与设计——硬件/软件接口作者:DavidA.Patterson John L.hennessy 出版社:机械工业出版社,这本书很不错,能够很好的把软硬件的关系数清楚,而且不像一些国内的体系结构教材,看的非常的费劲谁然讲的都是很清楚,但不能从读者的角度去考虑问题,这本书会让你看的爱不释手的,恩,对于我来说却是如此,不适合初学c语言的,要有一定的c语言基础。我想还有一点要和大家分享一下,就是学习计算机切忌浮躁,不要像追是族一样,看到一项新出的技术就去学习,新技术会不断的变的,而且很容易让你迷失方向,一定要打好基础,关于计算机基础的书一定要多看,不要死记硬背,但你发现你需要死记硬背去记住书中的知识的时候,那么我可以给你个建议把此书放在书架里,去看一些能够引导你一步步的从本质上理解知识的书,首选一些计算机科学丛书,图灵丛书(机械工业出版社,人民邮电出版社,电子工业出版社),我们学校用的是清华大学自己出版的计算机书籍,虽说清华大学在工科方面很不错,但是出版的计算机书籍就我个人来说真的不怎么好,相对于国外的计算机书籍来说差的真是太远了,我很不明白为什么要用清华出的,有一本关于Linux/unix内核的书我觉得挺好的,书名是Linux内核源代码情景分析浙江大学出版的,我目前正在潜心学习这本书,虽然很难,但真的不错,很少有由我们自己写的关于Linux内核这方面的好书,这本就是不可多得的好书。说了太多关于计算机书籍的话题了,但我认为一本好的书籍真的能给我们很大的帮助还能从中得到快乐。如果你只想学习计算机去赚钱的话,那么你大可以不必去学习很多东西,对于你也没有用处,如果你是对计算机有着非常浓厚的兴趣的话,那么就塌下心来,一步一步去在计算机的海洋里傲游吧,真是一件美妙的事情。

现在我告诉大家自己认为的关于学习计算机的路程

(1)

c语言(可以去学谭浩强写的c语言的书,如果能找到K&R C 那就更好,自己是没有找到,要想进一步去学习的话去看 c缺陷与陷阱,c专家编程,这两本书很经典的)

(2)

c++语言(c和c++其实并不一样,可以说c++是继承了c,增加了面向对象的思想,如果能找到c++program languagec++之父写的就很好,不过自己没有找到,要想进一步去学习的话去看effective c++ more effective c++,挺不容易懂的,因为自己要看Linux内核所以没有多少时间去看,c++沉思录(c缺陷与陷阱 的作者与他的妻子)也非常的不错,还是没有时间去看,只看了200多页,讲的太好了,有时间自己一定会去看完的,这本书讲的主要是教你怎么运用C++语言去写出好的文章)算法和数据之间的结构的理解也很重要,我想如果你有了c++的学习经验学习数据结构应该不太困难,一直以来我都不是很明白抽象的数据结构(abstract data type ADT)的抽象是怎么回事是什么意思,之后看了c++沉思录才恍然大悟,抽象就是把想关注事务的部分拿出来,不关心的不去考虑,就像我们人类,人有很多属性,姓名,年龄,体重等等,当我们研究具体问题是也许只关心人的属性的某些方面,例如姓名,年龄,那么就把它拿出来也就是术语抽象,在c/c++语言就用用户自定义的数据类型来去定义人:struct people{charname[10];int age;};struct 是structure(结构)的缩写,这样理解就非常简单了么,所以c++沉思录非常的好。

(3)

算法与数据结构(有很多好的书籍,大家可以去找找,反正清华出的不敢恭维)

(4)

汇编语言,计算机组成原理,计算机体系结构 微机原理(我认为刚才我说计算机组成与设计——硬件/软件接口就很好的包含了这些内容挺不错的,当然了学习是无止境的。)之后才能开始os的学习,我认为OS是让你在学习计算机上有一个质的飞跃,因为现代的程序设计一般都是基于OS的,如果不了解OS,那么就不可能学好程序设计,就像建造房子一样,房子要建在地上,如果你不了解当地的环境,地质,这么怎么能建造好的房子呢?

(5)

操作系统原理的学习,数据库原理的学习(有一本挺好的书,自己是看完了一遍,电子工业出版社的操作系统设计与精髓作者 stalling 忘了具体怎么拼了,理论性很强,不过是一本好书,要理解性的看)。

至于网络原理,软件工程,通信安全,鉴于尚在学习中,就不说了。哦,还有编译原理,是一门教你怎么把语言翻译成汇编语言,机器语言的一门课,有很多很难的算法,LR算法就很不好理解,至于要什么时候学那就在学好语言和算法的基础上去学习吧。记住千万不要赶时髦去学什么VC,BC,包括MFC之类的,他们只是开发程序的工具而已帮你做了一些辅助性的工作,所以好好学习语言吧!还有就是对于什么等级考试一点作用都没有,如果要是我说现在的等级考试只是人家赚钱的一种方式,已经变质了,我不知道为什么不跟上时代的脚步,把它们给取消了,不止是计算机等级考试,英语等级考试也没有用,不管怎么说他都是一门纸上的考试,对于提高自己没有作用,反而会有反作用。如果你只是为了拿一个计算机考试的凭证,那我劝你还是止步吧,我们是为了学习计算机而学习计算机而不是为了学习计算机而去拿那个一文不值得证,不然我真不知道你学习计算机还有什么意思。如果真的是对计算机感兴趣那就塌下心来,一步一个脚印的去探索计算机世界的奥秘,多么美好的事情呀。很多人开始学习的人都是梦想成为黑客,用几个程序去攻击别人的漏洞,但什么是黑客,天才的程序员才能配的上,就像Linus等一样,我们的目的是去建造宏伟的建筑,而不是去炸毁他那是骇客所做的事情,如果你认为别人的建筑有不足之处大可以指出来。这只是我个人的意见,有不足之处请指出,谢谢了!

还有就是谈谈自己对于Linux学习的看法。学完os以后自己就觉得应该去学习os的内核了,其实当自己刚学os的时候就特别特别特别的想去自己写一个os,看了很多东西还是一无所获,当然了这是必然的,因为自己连os有什么功能,进程线程,进程调度,虚拟内存,进程间的通信,文件系统,系统调用与中断,都是不知所云,所以当时很是郁闷,很是茫然,在学完os之后才对操作系统有一个感性的认识,但是还是太理论了,没有任何源代码的分析,没有任何设计os的细节,所以自己只好去看linux源代码了,但是还有一件重要的事没有做,写源代码我要在一个环境中去写在哪去写呢,那就是在类UNIX操作系统上(我用的是fedora 9.0的发行版,内核是2.6版的),怎样去编译源代码呢用的是一种特殊的格式(其实这种特殊的格式就是在写make命令时,所规定的make认识的文件)书写去告诉编译器编译的过程是什么,也就是用make命令去解释,在windows上我们所用的几乎都是IDE(集成的开发环境,编辑器,编译器,调试器等都组装在一个程序中)的开发环境所以想,对于编译的

过程一无所知,所以当初自己看linux内核书籍的时候很是不理解,为什么每个文件目录下都会有一个Makefile文件,原来但你输入make命令的时候他会自动在当前的目录下按照makefile,Makefile的顺序去查找是否有此文件名,然后就读取文件进行解释,并告诉gcc编译器怎样编译按照什么样的顺序编译这些源文件。之后就是去熟悉linux操作系统,编写Linux上的c程序(unix环境高级编程第二版是在类unix上学习的很好的书籍,因为这些开放源代码的os都是按照POSIX(开放的操作系统接口标准)标准写的,所提供的API(通用的应用程序编程接口,就是人们把各个方面常用的函数用某种语言编写出来供程序员使用,减少了程序员的负

第五篇:如何开发经销商学习心得

如何开发经销商学习心得

作为渠道销售面临最直接的问题就是如何开发属于自己的经销商客户,如何去选择好的经销商。通过学习“经销商开发”一文,收益很多。

我们在选择经销商时应该确立一个标准,按照标准进行选择。选择要求可以参考西方、美国等国家大学选材思想进行:宽进严出的标准。可以从以下几点进行思考经销商的选择:

1、全面考察评估经销商情况。我们要从经销商的实力(人力、财力、知名度等方面)、市场能力(经销商目前所代理产品销售情况)、管理能力、口碑(在同行中该经销商的信誉度是否够高)、合作意愿度(是否有强烈的合作意愿,对该品牌的市场前景是否有信心)。

2、选择适合自己公司的经销商。我们选择经销商时不一定非要需求大的,知名度非常高的经销商。不可否认,大的经销商无论从经济实力还是市场能力、口碑等方面都强于那些中小型的经销商,一旦抓住了一个大的经销商,就相当于开发了好几个中小型经销商,而且对于公司的产品销量会非常稳定。但是,大的经销商一般都有自己稳定的、长期合作的知名公司的货源,想要从中打破平衡,难度可想而知。我们在选择经销商时要注意从你的整体销售全局考虑,权衡大小,选择适合自己公司销售策略的经销商才是最好的。

3、选择经销商要与企业市场发展策略匹配。选择的经销商其市场销售策略如果不能与公司整体市场发展策略同步,其后果必然会导致市场混乱,对公司自身产品品牌建设有害无益。

那么,我们怎么去了解、判断该经销商的能力呢?我们可以采取多问多观察方式进行。比如我们可以问某个经销商其代理的品牌经营状况,在各种渠道销售情况,以拜访者身份请教当地市场经营情况、消费情况、企业发展状况等,如果经销商对这些问题不知道或者含糊其辞,那么至少说明该经销商实际经营能力较差,由此可以初步判断我们是否继续发展该经销商作为自己的代理商。

除了问经销商问题之外,我们还要在初步选择的经销商店铺门面上进行1周或者1个月的观察,了解该经销商早晚经营情况,人流量是否多、电话是否多、现场管理能力如何等等。了解经销商网络知名度、资金状况、库存状况等。

个人认为,在选择经销商时,合作意愿度是最为重要的,只要经销商合作意愿度强,诚心合作,那么很多问题都可以迎刃而解。对于选择到的中小型经销商,我们可以帮助他们跟我们一起发展,建立长期合作关系,实现双赢局面,这样的合作关系更加牢固长久。

在新的区域,选择新的经销商时,由于对市场了解度不够,选择到了“错误“的经销商时,我们要当机立断,马上考虑对其进行替换,否则可能导致严重的后果。

以上是个人在学习如何开发经销商时初步认识,市场是瞬息万变的,不确定因素、情况很多,只有在实际实践中学些、摸索,找出自己的销售、管理方法,才能在动态市场中立于不败。

下载yarn学习心得 yarn上的程序开发(合集5篇)word格式文档
下载yarn学习心得 yarn上的程序开发(合集5篇).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    Hi3516开发学习心得

    Hi3516开发学习心得 1. 开发环境 1.1>概述 嵌入式系统通常是一个资源受限的系统,因此直接在嵌入式系统的硬件平台上编写软件比较困难,有时候甚至是不可能的。 目前的解决方法......

    裸机开发学习心得

    裸机开发学习心得 首先说明,我没啥经验。只是说一下我的体会。也没有朝谁开火的意思。如果无意伤了谁,还望海涵;如果所言有误,还请高手多多指教。 好了,开始忽悠~~~~~~~~~~~~~~~~......

    风电场开发建设程序[大全]

    风电场开发建设基本程序 一、 投资方同县级政府签订投资意向书→建立测风塔(建议80米)【满一年后,整理测风数据,专家论证、分析可行性,结合当地气象局二十年气象资料,如够建风场......

    房地产开发程序及开发流程

    房地产开发程序及施工前手续办理流程 一、房地产开发准备阶段 1、房地产开发公司地开发前首先应进行实地现场踏勘、选址、了解项目附近一些相关资料。 2、市场调查,整理数据,......

    房产开发前期工作程序

    项目前期工作流程一般的建设程序有: 1 立项到发改委 2项目建议书批复到发改委 3选址意见书到规划局 4土地预审到国土局 5环评报告到环保局 6交通评审到交通局 7可行性研究报......

    游戏开发程序的主要方面

    一、游戏程序开发的工作主要包括哪些方面游戏开发中的程序开发主要由如下几个方面组成:1.图形引擎2.声音引擎3.物理引擎4.游戏引擎 5.人工智能或游戏逻辑6.游戏GUI界面(菜单)7.游戏开......

    小程序开发岗位职责范本

    小程序开发岗位职责范本1、独立承担Web前端开发任务,负责公司前端产品组件的设计、规划及开发;2、利用HTML/CSS/JavaScript/HTML___等各种Web技术进行产品的界面开发;3、负责......

    室内设计程序学习心得

    室内设计程序学习心得 指导老师:向阳班级:艺设六班姓名:李陟学号:20092468艺术,在人类文明的知识体系中与科学并驾齐驱。艺术,具有完全不可代替的学科系统。 艺术与科学的理论研究......