軟件開發需要的工具和知識很雜,一般情況下包括:工具:你需要一個集成開發環境,主流的是VisualStudio。“集成”的意思是,它是很多工具的集合,主要包括:
源代碼編輯:你也可以用VIM,但是這個在Windows開發中非主流,用戶多為從Linux過來的。
代碼編譯器:把源代碼編譯成可執行文件的工具,這其實也是一套工具,有編譯代碼的(如編譯C#的csc),有編譯資源的,有控制編譯流程的工具(msbuild),有代碼自動生成工具,有對程序集進行簽名的工具。有興趣可以看看WindowsSDK。
代碼測試工具:有知名的NUnit,其實VisualStudio也自帶一套,而且比Nunit強很多,對UI測試有十分良好的支持。比如UI錄制操作,用于回放測試。
源代碼管理工具:VisaulStudio也有服務器端產品,叫TeamFoundationServer,其中便有源代碼管理的功能。當然,VisualStudio也可以與Git,Perforce,SVN等其它源代碼管理工具集成。
Profiling工具:對代碼的運行進行動態分析,通過HotPath分析性能瓶頸。
需求與變更管理工具:管理你軟件上的Bug以用戶提出的(哪怕是你自己想的)需求。有很多的開源替代品,但是VisualStudioTeamFoundationServer有提供這個功能。
UI與UX設計工具:界面設計分原型設計(mockup)與界面開發。原型設計常用balsamiq。界面開發根據你使用的技術有所不同。如果使用MFC或是WinForm,基本上只能找專門美工畫圖。而簡單地應用皮膚庫,除了讓你的界面眼花繚亂外,在UX上沒有實質性的助益。如果使用WPF,微軟有ExpressionBlend和ExpressionDesign負責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鏈接傳數據,一樣的數據加密,甚至可以做出一樣的界面統一用戶體驗。(當然你也可以做得完全不一樣。)