编写一个商业应用软件或者仅仅小范围流通的自动化办公软件抑或其他,在设计或者完成中会思索种种,这篇帖子我想以我所学,讨论一下这个问题,如有疏漏错误,欢送指正。
首先,需求剖析明白需求之后,就开端进入这一繁复阶段。我们会基于以下种种要素思索运用什么言语:
1. 应用的展现方式:固然桌面开发和网页版应用开发的界线逐步开端含糊,但关于开发来说,应用的展现方式还是会决议了你后续的很多技术细节的,言语学问一方面,各种平台上应用都有不同的开发技术开发言语,以网页版开发为例,LAMP下的HTML+CSS+JavaScript+PHP/Python,微软常见的ASP.net等等(Ajax不是言语,是交融了多种言语的一种技术)
2. 公司或者项目组历史或者行政要素:一个团队创建之初选择什么言语,再加上团队内成员的运用习气等,后边的项目会将这种习气沿承下来。这会是项目选择言语时一个很大的决议性要素;而行政缘由愈加直接,例如微软是不太会同意选择Java做为其项目开发言语的。
3. 软件特殊需求。例如跟硬件或软件执行效率相关,大都会选择C/C++;关于便利开发同时统筹效率平安等等的一些项目更倾向于选择C#, Java等类库丰厚集成化开发环境友好的言语;而小范围内运用的某些请求不太高或者请求开发进度的开发或者测试更倾向与运用类库愈加丰厚的解释性言语Python,Ruby等。
当然以上讨论这些要素不能以偏概全,言语无所谓好坏之分,一个言语能做到的其他言语应该都能做的到,要不然该言语早就死掉了。所谓言语之争就是程序员对语法语义的习气,学习周期的比照,言语自身的类库能否丰厚等等一种评判。而在实践状况下相当多的项目中并不会单独只运用一种言语,有很多状况下我们会运用Python编写界面,C++完成后台操作;抑或者以Java,C#为根底,但请求执行效率高(比方图像处置等)的局部运用C++;抑或思索到软件复用技术为减少代码量而运用特定言语调用另一种言语编写的COM组件等等等等(当然这就触及到言语之间交互的问题)。这一切的一切都阐明,言语这东西,存在就是理由,存在由于理由,技术开展到如今编写一个言语就跟自定义一个控件一样,已然很简单,而从汇编开端在漫漫长河中几言语沉淀成为了”死言语“,这些存活下来生命力已然顽强的言语一方面阐明了他们足够优秀,另一方面也阐明它们自顺应迎合了技术的开展方向。 这些东西决议之后会思索能否需求数据库,运用什么数据库等等,又是一系列的选择,还是那句话,存在就是理由,有这么多选择项可供选,这仅仅是一个幸福的懊恼而已。
大的方向选定之后,思索完成细节,从架构开端,选择什么模型BS/CS,要不要分层设计,分层设计层与层之间是继承还是耦合,会不会运用到特定的设计形式等等。这是架构师的活,一个优秀的架构会给开发和后期维护带来很大的便利。关于模型或者形式之类的东西,有些人会把它看得很重,看得很高,然后想得很牛逼。它其实是对一些优秀工程理论中的一种总结,比方你的应用会思索只允许存在一个实例那就思索单件形式,多派生子类问题会思索工厂形式,与原有代码配接会思索到适配器形式等等。它和管理学相似,所谓管理学,其实是对社会公司或组织管理形式一种概括总结,所以牛逼的管理学巨匠普通都是工程师而不是学者。脱离了理论去谈模型形式Demo代码,是不会领会到它们的巨大之处。这些东西我们依然能够学,能够理解Demo,而且这是必需的,但更重要的是在理论中可以想到去用,等真到了那个高度,你完整能够创建出一种属于本人的模型形式,供人膜拜。
然后就是程序员的活了,思索完成细节。而在理论中所思索的所谓”技术“,就很大水平上跟言语没什么关系了,不要在纠结于言语哪个牛逼这类听着就很二的问题了。在这一块程序员会思索很多东西,诸如:
1. 进程通讯:进程间通讯IPC,大型商业软件,病毒,杀毒软件等等都会触及进程间通讯问题吧,这在开发中是无法逃避的东西,也是对效率和平安影响最大的一处,处置不慎会严重影响软件质量。进程间通讯总结起来会很庞大。
2. 异步编程: 防止UI”假死“或者软件执行效率而思索多线程或者异步编程,而在异步编程中又要思索多线程同步等问题;这是很大一块内容,不同言语的完成机制不同,以C#为例,为了便利程序员微软定义了一系列的多线程操作形式和同步办法,这一块回头单独写一篇引见。
3. 内存管理:硬件限制和效率平安问题要思索内存管理,延迟启动和冷启动热启动等,内存管理也是一块很大的内容,这触及到内存走漏,C#里渣滓搜集等等这一块也单独写一篇引见,而延迟启动和冷启动热启动这个问题总被人疏忽,但这个块东西最可以影响用户体验,说到这我想提一下迅雷,当年我是迅雷的忠适用户,但最受不了它启动的时间,真疑心它软件开发时有没有思索这些东西,所以就给卸载了不断用简易版迅雷。
4. 言语之间交互:前边说了,很多软件都不是同一个言语写出来,这就触及到多言语交互问题,不同言语语法语义不同,技术细节不同,想要创立一个共同的协议停止交互,这里边要思索的问题很多,比方边境(boudary)平安问题,接口效率问题,内存管理问题。
5. 远程办法调用:其实这块我只是想说windows Service和Web Service,实践应用中效劳随处可见,效劳有普通应用所不及的特性,把这个放在这提一下貌似不太适宜,放在这里提主要是觉得身边的程序员关于效劳这个东西很生疏,也不太关注。
以上技术有穿插的局部而且只是陈列了局部内容还有好多暂时没有思索到以后补上,这一切的一切都是为了本人所开发的应用平安性,强健性,效率,可扩展性,这才是所谓程序员进阶的第二阶段,到了这一步你曾经摆脱了言语的约束,可以开端飞翔于真正的技术的天空了。 在实践开发中不只要关注这些,还会从工程方面思索问题,诸如:项目团队管理,进度管理,代码标准,文档标准,软件测试等等等。
又虎头蛇尾了,写这篇文章主要对这几年特别是这段时间所关注的东西的一种总结,但写着写着就忘了,所以越写越短。而关于网页端的东西ASP.net Ajax Jquery的东西,只是刚刚涉猎,没敢提太多。以下链接主要针对C#,关于这篇文章中提到的一些东西的技术细节,有兴味能够关注以下。
References:
渣滓回收:
代码交互及COM
性能问题:
线程,
Windows效劳:
反射,进程内并行