编程核心环节
① 我想做游戏设计方面的编程工作,需要学点什么呢
编程工作属于计算机相关专业,如果对自己有信心有基础是可行的。
当下互联网行业发展迅速,与之相关的产业大多发展都很好,游戏设计的前景自然也是相当不错的。一个游戏问世要经历很多环节,剧本设计,原画创作,场景建模,但核心部分还是编程语言开发。
主要学的内容如下:
1.游戏程序设计:C++程序设计入门;基本数据类型和输入输出;流程控制语句;数组、指针和引用、函数;程序结构和书写规;范结构体和联合体、类;继承与多态;异常处理与程序调试。
2.算法与数据结构:算法分析;数据结构;基本算法;STL的概念与使用;静态库与动态库;XML库的使用。
3.Win32程序设计:Windows程序入门;Windows消息;GDI绘图游戏工具与MFC;网络编程基础。
4.游戏数学和智能应用:游戏中的坐标系;矢量、矩阵;几何碰撞;物理模拟;人工智能与寻路算法。
5.2D游戏技术与应用:2D游戏技术概论;游戏地图系统;GUI系统;战斗系统设计;任务系统;优秀的声音引擎BASS;Cocos2D-X引擎;Box2D物理引擎。
互联网行业目前还是最热门的行业之一,学习IT技能之后足够优秀是有机会进入腾讯、阿里、网易等互联网大厂高薪就业的,发展前景非常好,普通人也可以学习。
想要系统学习,你可以考察对比一下开设有相关专业的热门学校,好的学校拥有根据当下企业需求自主研发课程的能力,能够在校期间取得大专或本科学历,中博软件学院、南京课工场、南京北大青鸟等开设相关专业的学校都是不错的,建议实地考察对比一下。
祝你学有所成,望采纳。

② 软件是如何开发出来的
软件开发流程
先上一个软件开发的整体流程图,这就是大名鼎鼎的“瀑布模型(Waterfall Model)”。据说由温斯顿·罗伊斯(Winston Royce)在1970年提出。

1、环境部署
准备服务器,部署操作系统、软件环境、安全软件、FTP服务器等。数据库和应用可分开布置在多个服务器,也可布置在同一服务器。
准备网络,分为内网和外网。外网需要购买公网IP和域名。
负责人:网络管理员
2、软件开发
包括开发语言选择、架构设计、数据库设计等工作,并进行编码、编译、测试、打包。
负责人:程序员
3、软件部署
将程序文件上传到服务器,进行部署、配置,成功后即可通过客户端访问项目。
负责人:软件实施
软件开发阶段
下面以java语言开发为例,简单讲讲程序员是如何进行软件开发的。
(本部分参考了“软帝在线”公众号、博客园“架构与我”的文章)。
1、新建java文件(或工程)
java源代码本质上就是普通的文本文件,可以用txt等工具编辑java代码(程序员一般采用源代码编辑工具,如:Notepad++;或集成开发工具IDE,如:Eclipse)。txt编写后需将文件扩展名改成java。
2、编写代码
以“Hello World”举例编写代码:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
该程序表示的意思是输出Hello World这样一段话。
3、编译程序
Java程序之所以能做到跨平台运行,是因为Java程序运行在JVM中的,然而JVM只能够识别字节码文件,而不能直接识别Java文件。所以需要先将Java文件编译成字节码文件,即class文件,然后字节码文件才能够在JVM中运行。
编译文件,可以通过手动执行Dos命令javac,或直接用编译器如Eclipse完成。
4、运行程序
可在Dos命令窗口中输入java命令,按回车,输出Hello World;
或在编译器的控制台中看到输出结果。
5、单元测试
单元测试(模块测试)是开发者对编写的一小段代码,检验一个很小的、很明确的功能是否正确。
通常采用JUnit框架(多数java开发环境已集成)进行测试,即所谓白盒测试,叫“白盒”是因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。
测试通过后,就完成了软件开发阶段,可以打包部署了。(IT售前圈)
③ 怎么研发一款编程语言
编程语言,作为人与计算机沟通的桥梁,有着重要和深远的意义。有过计算机编程经验的人,多少学习或掌握过一到多种编程语言。计算机专业领域的编程语言成百上千种,主流的编程语言也有数十种之多。每种编程语言面向的领域和特性都不尽相同,不过归根结底是为了解决人与计算机之间沟通的效率问题,提高计算机的生产力。想必有不少人对那些主流编程语言的创造者十分倾佩,也相信有不少人会好奇一门编程语言是如何诞生的。那么如何创造一门编程语言呢?
总的来看,创造一门编程语言需要有以下几个过程:
(1)设计语言的特性。
(2)定义语言的单词、语法和语义。
(3)实现编译器或者解释器将程序翻译为计算机底层表示。
(4)生成计算机程序的二进制存储格式。
(5)完善语言的运行时环境和标准库。
一、语言特性设计
所谓语言特性,就是编程语言为开发者提供了什么样的原子性功能特征。比如是否支持数学表达式计算、字符串处理,是否支持变量、函数和递归,是否支持分支、循环复合语句等。语言的变量类型是强类型、弱类型,还是动态类型,程序是过程式、函数式,还是面向对象的。是否支持模板、泛型和反射机制,是否支持多线程和并发特性,是否支持错误和异常处理机制等等。
语言特性设计是一门编程语言最关键的环节,直接决定了语言的基本特征和雏形。当然,这也是最难的一个环节,因为语言设计是面向具体问题领域的,是语言设计者从大量的编程实践中的获得的总结和升华。比如C语言设计者希望面向计算机底层,拥有对操作系统和硬件的直接操纵能力。而Python的设计者则希望尽可能地减少操作计算机资源的繁琐过程,以获得语言的简洁性、高度的灵活性和扩展性。SQL的设计者面向具体的数据查询和分析领域,希望帮助开发者获得快速检索和操纵数据的能力。而Go语言的设计者则希望在保留C语言优秀功能的基础上,扩展编程语言对高并发环境的支持,并拥有垃圾回收和快速编译的能力。
凡此种种,编程语言特性的设计都是面向具体的问题领域的,是语言设计者构建于开发者和计算机之间的中间层,是对开发过程中重复功能逻辑的原子性“封装”,最终的目的是为了提升具体问题领域内的软件开发效率。
二、单词、语法和语义
和人类使用的自然语言类似,编程语言也有自身的单词、语法和语义,专业上称为词法记号、语言文法和语义。
常见的词法记号可以分为数字、字符、字符串、标识符、关键字,以及用于连接表达式的运算符、分割语句或者程序段落的界符等符号。这些是编程语言程序的基本单位,通过它们的有序组合,构建出了一门编程语言形形色色的代码片段。
编程语言的文法是用来描述语言的语法规则的,具体来说是规定词法记号之间的排列组合的顺序与规则。它描述了编程语言程序的基本模式,不符合该模式的词法记号的排列被挡在了合法语言程序的大门之外。同时,它也是各种编程语言对于开发者最明显的差异化特征。一个有经验的开发者可以很容易地通过扫视一段代码,就能分辨出这是哪种编程语言编写的计算机程序。
编程语言的语义描述了一段符合语言语法的程序,对于计算机而言的真正含义,是开发者最终要传达给计算机的意愿和指令。语言的语义必须是准确的、无二义性的,编译器也正是通过语义的指导,将计算机程序翻译为计算机可识别的表达形式。
三、程序的翻译
计算机程序是用来供人阅读和修改的,计算机硬件并不能理解程序内的思想和含义。因此,必须有一个翻译转换的过程,将人所表达的意愿准确无误地传递给计算机,让计算机明确并执行人下发的指令。实现这种翻译工作的工具就是编译器或解释器。
对于编译器来说,它的输入是人类书写的计算机语言程序,输出则是计算机可识别的底层表示。首先,它需要识别出程序中的单词,即词法分析。然后,根据单词的组合模式识别出程序的语法结构,即语法分析。最后,根据不同的语法结构对应的语义,将程序按照每个语法模块的形式转换为计算机可识别的指令序列,即语义分析和目标代码生成。
众所周知编译器的实现具有一定的复杂度,其根本原因来自于语言语法的结构灵活性和计算机底层表达形式的多样性,这也是创造一门编程语言最核心的环节。
四、二进制存储
编译器将语言程序翻译转换后,需要将转换后的结果存储起来,以便计算机在需要的时候将其加载、执行。这里不可避免的涉及到两个问题:
(1)转换后的结果是什么样的形式?
(2)转换后的结果保存在哪里?
第一个问题描述的是计算机程序被转换为怎样的形式,才是计算机可以识别的。由于计算机中实际运行程序的硬件模块是CPU,因此计算机程序只有被转换为CPU的二进制指令格式才能被正确识别、执行。比如常见的Intel体系的CISC指令格式、ARM体系的RISC执行格式等。
第二个问题描述的是计算机程序转化为二进制指令格式后,以什么样的方式保存在计算机的磁盘上。由于绝大多数的计算机程序是需要通过运行在计算机硬件之上的操作系统加载运行的,因此计算机程序的二进制表达形式必须以对应操作系统可识别的文件格式存储。比如常见的Windows操作系统的PE文件格式、Linux操作系统的ELF文件格式等。
五、运行时环境和标准库
理论上讲,一门编程语言如果能提供出完备的操纵操作系统和硬件的原子性功能就已经成功了。但是不提供强大的运行时环境支持和标准库,是很难让一门编程语言真正的好用和流行的。没有人希望简单地打印一行字符串,还需要使用编程语言提供的基本特性实现调用操作系统提供的打印接口的逻辑。Java语言之所以久兴不衰,正是因为它不仅提供了完善的运行时环境和开发库支持,甚至提供了更强大的开发框架和工具支持。
因此可见,除了完备的语言特性,为开发者提供更方便好用的库和框架支持,消除软件构建过程中复杂和重复的逻辑,才是一门优秀编程语言的长盛之道。
六、自己动手,立即开始!
《自己动手构造编译系统——编译、汇编与链接》一书详细阐述了一门编程语言从无到有的过程,从语言的功能特性设计,到词法、文法、语义分析;从编译器、汇编器的设计实现,到目标文件的链接生成可执行文件;甚至编译优化器的实现、二进制指令、可执行文件格式以及语言运行时和标准库的概念,都在书中做了认真细致地剖析。相信对本书的阅读,将是一次不错的获得知识的体验!
④ 少儿编程都在教什么
少儿编程一般针对的是小学及以下幼儿设计的编程模式;
把原来复杂的英文代码编程语言转换成图形化的,以指令化,模块化方式让游戏,情景动画,积木构件的形式呈现。
旨在孩子九大能力的培养:观察力,想象力,创造力,逻辑思维力,问题解决,空间思维,判断性思维,序列与条件,调试操作能力。

scratch页面
Scratch的图形化语言可以很好的帮助学生学习基本的逻辑、关系推理、数学的概念,同时避免过早的接触到“形式运算阶段”之后才能理解的抽象的演绎推理。
Scratch编程语言属于图形化编程,也就是孩子不需要敲代码,只需要拖动鼠标就可以完成一系列的项目操作。
让学习的过程不枯燥,并更及时地获得结果反馈,非常适合他们这个年龄阶段的心智水平和认知能力。
⑤ 数控编程怎样做
教你如何成为数控机床编程高手,建议初学者认真阅读。
要想成为一个数控高手(金属切削类),从大学毕业进工厂起,最起码需要6年以上的时间。他既要有工程师的理论水平,又要有高级技师的实际经验及动手能力。
第一步:必须是一个优秀的工艺员。数控机床集钻、铣、镗、铰、攻丝等工序于一体。对工艺人员的技术素养要求很高。数控程序是用计算机语言来体现加工工艺的过程。工艺是编程的基础。不懂工艺,绝不能称会编程。
其实,当我们选择了机械切削加工这一职业,也就意味着从业早期是艰辛的,枯糙的。大学里学的一点基础知识面对工厂里的需要是少得可怜的。机械加工的工程师,从某种程度上说是经验师。因此,很多时间必须是和工人们在一起,干车床、铣床、磨床,加工中心等;随后在办公室里编工艺、估材耗、算定额。你必须熟悉各类机床的性能、车间师傅们的技能水平。这样经过2-3年的修炼,你基本可成为一个合格的工艺人员。从我个人的经历来看,我建议刚工作的年轻大学生们,一定要虚心向工人师傅们学习,一旦他们能把数十年的经验传授与你,你可少走很多弯路。因为这些经验书本上
是学不到的,工艺的选择是综合考虑设备能力和人员技术能力的选择。没有员工的支持和信任,想成为优秀的工艺员是不可能的。通过这么长时间的学习与积累,你应达到下列技术水准和要求:
1、 熟悉钻、铣、镗、磨、刨床的结构、工艺特点,
2、 熟悉加工材料的性能。
3、 扎实的刀具理论基础知识,掌握刀具的常规切削用量等。
4、 熟悉本企业的工艺规范、准则及各种工艺加工能达到的一般要求,常规零件的工艺路线。合理的材料消耗及工时定额等。
5、 收集一定量的刀具、机床、机械标准的资料。特别要熟悉数控机床用的刀具系统。
6、 熟悉冷却液的选用及维护。
7、 对相关工种要有常识性的了解。比如:铸造、电加工、热处理等。
8、 有较好的夹具基础。
9、 了解被加工零件的装配要求、使用要求。
10、有较好的测量技术基础。
第二步:精通数控编程和计算机软件的应用。
这一点,我觉得比较容易,编程指令也就几十个,各种系统大同小异。一般花1-2个月就能非常熟悉。自动编程软件稍复杂些,需学造型。但对于cad基础好的人来说,不是难事。另外,如果是手工编程,解析几何基础也要好!读书人对这些知识的学习是最适应的。在实践中,一个好程序的标准是:
1、 易懂,有条理,操作者人人都能看懂。
2、 一个程序段中指令越少越好,以简单、实用、可靠为目的。从编程角度对指令的理解,我以为指令也就G00和G01,其他都为辅助指令,是方便编程才设置的。
3、 方便调整。零件加工精度需做微调时最好不用改程序。比如,刀具磨损了,要调整,只要改刀具偏置表中的长度、半径即可。
4、 方便操作。程序编制要根据机床的操作特点来编,有利于观察、检查、测量、安全等。例如,同一种零件,同样的加工内容,在立式加工中心和卧式加工中心分别加工,程序肯定不一样。在机械加工中,最简单的方法就是最好的方法。只要有实践经验的同行,想必都会同意这句话吧!
第三步:能熟练操作数控机床。
这需要1-2年的学习,操作是讲究手感的,初学者、特别是大学生们,心里明白要怎么干,可手就是不听使唤。在这过程中要学:系统的操作方式、夹具的安装、零件基准的找正、对刀、设置零点偏置、设置刀具长度补偿、半径补偿,刀具与刀柄的装、卸,刀具的刃磨、零件的测量(能熟练使用游标卡尺、千分卡、百分表、千分表、内径杠杆
表)等。最能体现操作水平的是:卧式加工中心和大型龙门(动粱、顶梁)加工中心。
操作的练习需要悟性!有时真有一种“悠然心会,妙处难与君说”的意境!
在数控车间你就静下心来好好练吧!
一般来说,从首件零件的加工到加工精度合格这一过程都是要求数控编程工艺员亲自
完成。你不能熟练操作机床,这一关是过不了的。
第四步:必须有良好的工装夹具基础和测量技术水平。
我这里把工装夹具及测量技术单列一条是因为:它对零件加工质量起到与机床精度一样重要的作用,是体现工艺人员水平的标志之一。整个工艺系统:机床精度是机床生产厂保证的,刀具及切削参数是刀具商提供的,一般问题都不大,只有工装夹具是工艺人员针对具体零件专门设计的,大凡上数控机床的零件都是有一定难度的,因而往往会出现难于预料的问题,我从事数控机床用户零件切削调试10来年,不要整改的夹具还真没碰上过。
调试时,首件零件加工不合格,一半以上原因是由于夹具的定位、夹压点、夹紧力不合理引起的。夹具方面的原因分析难度在于只能定性,很难定量。如对夹具设计、零件装夹没有经验的话,那困难就大了。在这方面的学习,建议向做精密坐标镗床的高级技师们请教。精准的测量水平时从事机加工的基本功之一,要能熟练使用游标卡尺、千分卡、百分表、千分表、内径杠杆表、卡钳等。有时零件加工,三坐标测量仪是指望不上的。必须靠手工测量。试想,零件都量不准确,哪个领导和工人师傅会信任你?
练好测量技术可要花很长时间哟!
第五步 熟悉数控机床。精通数控机床的维护保养。
所谓熟悉数控机床,应做到:
1、 熟悉数控电气元件及控制原理。能说出电箱里各个元件的名称及作用,能看懂电气原理图。能根据电气报警号,查出报警内容。
2、 了解滚珠丝杆的结构、传动原理。清楚哪些因素对机床精度的影响比较大。
3、 了解机床丝杆两端轴承的结构及对机床精度的影响。
4、 了解机床的润滑系统(轴承、主轴、各运动副、齿轮箱等),清楚各润滑点的分布。机床润滑油的牌号及每周或每月油的正常消耗量。
5、 了解机床的致冷系统:切削(水、气)冷却、主轴冷却、电箱冷却等
6、 了解机床的主传动结构,每台机床转速与扭矩之间具体数据特性。
7、 了解机床导轨副特点:是线轨还是滑轨,刚性(承载能力)如何?
8、 能排除常见操作故障(如:超极限、刀库刀号出错等)
9、 精通机床的各项精度(静态、动态)指标及检测方法。
10、熟悉刀库机构及换刀原理。
以上几条没有3年以上的时间锻炼,恐怕是很难达到要求的。而且很多企业还不具备学习的条件。建议多向设备维修部门的师傅请教。
机床的维护保养细节我就不多讲了,各企业都有各自的经验和标准。
机床维护保养重点在于“养”,平时应该注意(应做好长期记录):
1、 每天开机注意机床各轴的启动载荷变化是否正常,这点很重要,启动载荷变化不正常,就意味着运动副或传动副的阻力变化了,得赶紧停机检查。否则,时间一长,对机床的损害极大;
2、 注意润滑油的正常消耗量。过多过少,都必须检查。
3、 勤清洗电箱空调滤网和通风口滤网。电箱内部电源模块、驱动模块的集成电路板一旦粘染含有铁粉的灰尘,那机床会出现莫名其妙的报警,修都修不好。就等换板子吧!
第六 培养良好的习惯,适应数控加工的特点。
(这一条是我个人所见,是否合理,大家可以讨论。)
适合数控加工的高手应该是谦逊、严谨,冷静,思维缜密,做事有条理而又有主见的人。
1、一些大型零件的加工,不但加工内容多,还有空间三维坐标的转换。加工轨迹的计算非常复杂和难以确定,如果考虑问题不细致、全面,计算不精确,调试时程序修改越改越乱,出错的概率就大。“三思而后行”用在这里是最恰当不过的了。
2、零件调试过程是多人合作的过程,其中包括操作工、检验员、夹具设计、夹具装配人员等。出现问题时,要多征询他们的意见,多做试验,切忌武断下定论。对出错的员工不要过多责备,要有“慈悲”的心态。
3、数控机床的工作是靠指令来控制的,调试时,在“启动”按钮按下去之前,你必须十分是清楚机床运行的轨迹。要严谨、细致,千万不能让机床先动了再说。一旦程序有误或补偿参数不正确,或选错了坐标系。轻则报废零件,重则出安全事故。脾气暴糙、做事无头绪,而且屡教不改者是不适应数控机床操作的。
我告诉大家一个事实:原来我们公司十多位用户调试切削工艺员,都是见多识广、经验老到之辈,可没有哪一个、哪一年不撞断过刀具的。
4、调试加工时出现问题,要冷静,千万不能慌张,再出现误操作。心理素质要好。
5、零件调试多次不合格时,做分析要有条理,给出责任要有依据。某些相关部门出于各种原因,会给出各种解释,这时你要有主见,记住:做错一件事不要紧,却不能选错做事的方法。
6、一个工艺员,因受环境所限,技术能力总是有局限性的。加上技术发展的日新月异,永远有提高的空间。当工厂内部的技术都已消化后,眼光要放外,紧跟国内外先进的加工技术,学习、消化。在技术方面做好老板的参谋。
以上是我心目中理想的数控编程高手,其实说到底,应该有高级工艺师、高级技师水平的编程员。
⑥ 软件开发与编程有什么区别
基本上算是一回事儿,软件开发需要通过编程来实现,编程就是制作开发软件。
⑦ 如何着手学习CNC数控编程如何入门如何精通
一、数控的英文CNC,中文翻译是计算机数字控制的意思,这里最关键的提到控制,控制什么呢?控制如何切削。切削什么呢?金属为主。
所以初学者要想学好cnc数控就要求三种技能:
1.金属切削
作为编程员,对于金属材料的了解还是很有必要的。最起码在编程过程中要知道铣刀对材料的特性、发热、过载、转速、每层下刀深度等,需要技能有:金属材料,铣刀材料和种类。
要知道这把刀切削这块金属材料应该给什么样的转速。每分种可以跑多少毫米,每层能加工多深。

2.控制部分 (编程部分)
这部分是纯软件问题,也是重点问题。如何切削,想好了,分析透了,就要软件去控制,产生想要的切削方式。选择好要加工的曲面或实体后有很多值依次设置好,如深度控制,从Z高加工到多高,每层加工多深,层与层之间如何提起刀具,加工范围控制等。
这部分就是软件,命令学完了,就可以了,这是固定的,想学的都可以学会。顺便提到,可惜中国这么大的市场。找不到完整这样分析的书。很多书只是告诉你这里输入多少,那里输入多少,下一步,下一步,OK。所以好多想学好cnc数控编程的人会买一些书来看,但是就是学不下去,更不用说要学会了。因为书上的东西都是好皮毛的,只能做一个简单的入门了解。这个时候建议去一些正规的数控培训机构。
3.加工工艺部分
所谓工艺,就是如何加工,怎么加工的问题,当熟悉了刀具对材料的切削能力,了解了软件能控制,接下来就是怎么样切削才好的问题。比如想切削(加工)一个模具(零件)的一个平面或者一个角落,怎么走刀才走的更光,会不会碰到底部的圆角,加工出来漂亮不漂亮,会不会有余量切削不到,等等。对这种分析要有具备实际加工经验的师傅以工作经验对个个形状的情况逐个分析。真正学好数控核心在第三步,工艺分析。工艺部分也是数控加工中的重点与难点部分。这部分是最能体现一个技术员的技术水平与经验的环节。也是工资待遇多少的一个秤杆。技术好的,经验丰富的,能解决生产问题的,工资待遇自然就高。在中国,特别在深圳,一个加工工艺技术好的编程技术员,工艺可以达到8000-15000这个阶段。
总之,初学者要想学好cnc数控编程,以上三点必不可少。其实,以上三点只是总的学习方向,其中所包含的东西太多了,涉及到技术的东西也太多了。与其痛苦地看书本,不如找个正规的培训机构系统地学习与提高一下。
⑧ 初学者学编程如何下手
首先作为一个优秀的程序员,数学是十分重要的。数学是自然科学的基础,计算机科学实际上是数学的一个分支。数学主要能让人懂得一种分析问题的方法,然后再通过编程去实现它。计算机内部的许多原理也都牵涉到比较复杂的数学知识。它是我们用来解决现实问题的最高效的工具。很多学习编程的朋友对数学觉得不屑一顾,觉得对于编程没有什么关系。实际上优秀程序员和一般程序员拉开档次很大一个程度上就是取决于对数学的能力。一些项目有时需要很复杂的数学建模和利用数学对于系统效率进行分析,而这些项目对于一般的程序员是很困难的。正确应用数学知识有时候能使你的程序的效率产生质的飞跃。现在的程序员在数学上普遍是薄弱环节,这点是大家应该引起足够重视的。当别人对于这些项目感到无从下手,而你却能够完成,这个时候你的价值也就表现出来了。真正优秀的程序员是能够最基本的一点就是要能够通过自己的知识来解决一般程序员所无法完成的问题。而数学能力就是一个很重要的环节。
其次就是要对数据结构引起足够的重视。如果说计算机专业的学生与非计算机专业的最根本的差别绝对是数据结构(数学大家都一样学了,主要看你自己学得好坏)。对数据结构的掌握与运用能力是衡量你编程能力的一个很重要的指标。有的人对于看了链表,栈,树,广义表这些东西就头痛。然而这些东西往往能使你的程序的效率比别人高出百倍。由于一直搞信息学竞赛,到了大学又搞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毕竟是老大),先学win32 api,搞请windows基本消息机制和原理,有汇编基础基本上不会碰到什么困难。其实只要会了API,其余什么MFC,VCL都是囊中之物了,都不过是对于API的封装而已。VC,C++Builder都可轻松拿下,这只是开发工具的问题。以后的OLE(ActiveX),.NET,数据库就要看自己的发展方向而定了。我在这里强调的是前面的基本能力的学习,后面操作平台虽然知识体系庞大,然而毕竟比较死,更好掌握。最后编程能力的高低主要还是有以下几点决定:1。编程的习惯 2。数学能力(包括逻辑思维,分析问题的能力) 3。对数据结构的认识能力 4。经验的多少(包括多使用语言的掌握能力)
最后,祝你学有所成!
