软件开发需要的工具和知识很杂,一般情况下包括:工具:你需要一个集成开发环境,主流的是Visual Studio。“集成”的意思是,它是很多工具的集合,主要包括:
源代码编辑:你也可以用VIM,但是这个在Windows开发中非主流,用户多为从Linux过来的。
代码编译器:把源代码编译成可执行文件的工具,这其实也是一套工具,有编译代码的(如编译C#的csc),有编译资源的,有控制编译流程的工具(msbuild),有代码自动生成工具,有对程序集进行签名的工具。有兴趣可以看看Windows SDK。
代码测试工具:有知名的NUnit,其实Visual Studio也自带一套,而且比Nunit强很多,对UI测试有十分良好的支持。比如UI录制操作,用于回放测试。
源代码管理工具:Visaul Studio也有服务器端产品,叫Team Foundation Server,其中便有源代码管理的功能。当然,Visual Studio也可以与Git, Perforce, SVN等其它源代码管理工具集成。
Profiling 工具:对代码的运行进行动态分析,通过Hot Path分析性能瓶颈。
需求与变更管理工具:管理你软件上的Bug以用户提出的(哪怕是你自己想的)需求。有很多的开源替代品,但是Visual Studio Team Foundation Server有提供这个功能。
UI与UX设计工具:界面设计分原型设计(mockup)与界面开发。原型设计常用balsamiq。界面开发根据你使用的技术有所不同。如果使用MFC或是WinForm,基本上只能找专门美工画图。而简单地应用皮肤库,除了让你的界面眼花缭乱外,在UX上没有实质性的助益。如果使用WPF,微软有Expression Blend和Expression Design负责UX和与UI,是介于开发和美工中间的一类角色。
除了VS外,如果是多人开发一般还会需要搭建:持续集成环境,常见的工具是TeamCity或是
http://cc.net
。沟通平台,常见的是用Email和各种IM,还可以用Wiki或是SharePoint保存每个人的知识和分享。如果时髦些,可以搭一个Jive。
知识方面(假设已经是一个程序员):开发一个软件,比如QQ之前,你应该有一定的软件开发基础,但是并不需要先把所有需要的技术了解的一清二楚,没有那个时间,也没有意义。就算你知道你要做的东西需要算法知识,你需要把《算法导论》先拿来看一遍吗?开发软件最重要的,是对每个功能问出下面的问题:要做什么?做成什么样?要达到怎么的效果?
要做到这些,存在哪些没有解决的问题?
有哪些
现有的技术
可以用来解决这个问题?如何验证结果?
然后才是去了解那些需要用的技术去解决你的问题。
至于具体的知识上面列出的工具要会用吧。
熟悉开发流程。这非常重要,比如Commit代码的流程,发布新版本的流程,什么时候做Branch。这些
不一定要正经地文档化,但是一定要在团队内部达成共识
,否则开发过程就是一片混乱。(人有可能觉得这和问题没直接关系,但是要知道现在的软件开发基本没有一个人进行的,一个人的叫玩玩,爱怎么搞怎么搞。)软件销售。这决定了你的软件
1. 是否需要数字版权保护机制2. 是否需要接入支付体系软件运营。这决定了你的软件
1. 是否需要技术支持?通过什么途径提供技术支持?2. 是否需要收集用户信息?收集什么信息?实名还是匿名?3. 是否使用第三方服务来降低运营和维护成本?(自己Host还是租?要不要使用GAE构建服务器端?)当地法律。根据当地法律,你的软件,可能会被要求具有下列功能中的一部分:
1. 用户信息保护2. 敏感内容过滤3. 审查。(谁在用,用了哪些功能)有人可能觉会得上面这些点太大太泛,但这些的确是开发一款软件要考虑的事情,而且是一开始就要考虑的事情。没太明白题主具体到“Windows”的目的是什么。上面这些,无论是什么平台上的软件,都存在这些问题。Windows之于Linux或是Mac的不同,也就是使用的技术框架上有些差异,这些而差异对于程序员而言不应该是什么问题。因为原理都是一样的, 一样的算法,一样的TCP链接传数据,一样的数据加密,甚至可以做出一样的界面统一用户体验。(当然你也可以做得完全不一样。)