開源技術教學網[Windows] 程式設計教學:基本概念
文章推薦指數: 80 %
本系列文章會側重後者的介紹,因為程式設計學習者需要熟悉開發環境。
能夠自己部署應用程式的程式設計者,也不會是新手,不太需要這些文章。
Togglenavigation開源教學精選項目C語言Golang資料結構網頁程式電子書籍現代C語言程式設計C語言應用程式設計多平台Objective-C程式設計跨平台CommonLisp程式設計社群媒體臉書粉絲團臉書社團推特GitHubGumroad本站資訊關於著作權免責聲明隱私權開源教學Windows程式設計Windows程式設計的基本概念最後修改日期為FEB16,2021前言當我們在談論Windows程式設計時,可能是把Windows當成執行程式的運行環境,也有可能是把Windows當成撰寫程式的開發環境。
本文會側重後者的介紹,因為程式設計學習者需要熟悉開發環境。
能夠自己部署應用程式的程式設計者,不會是新手,不太需要這些內容。
把Windows當成運行環境(RuntimeEnvironment)根據應用程式(applicationsoftware)的使用者界面,約略可分為以下數種:命令列程式(command-lineapplication)圖形介面程式(GUIapplication)網頁程式(webapplication)電腦遊戲(computergame)Windows原本較著重圖形介面環境,近年來在命令列環境逐漸改善。
撰寫應用程式時,要根據該程式的目的,選擇合適的界面。
沒有一種界面適用於所有的程式。
當我們撰寫網頁程式時,實際的部署目標是Windows上的瀏覽器(webbrowser)。
由於現代瀏覽器(modernbrowser)大抵上是跨平台軟體,撰寫網頁程式時,和Windows系統本身關連不大。
把Windows當成開發環境(DevelopmentEnvironment)當程式設計者想把Windows當成開發環境時,得先選擇合適的程式語言,接著建置該語言的開發環境。
這類知識會隨程式語言而異,而且可能會隨該語言的版本而變動。
所以,我們不在這裡詳談。
不過,有一些開發相關的知識是共通的,像是檔案系統、命令列環境、系統設置、編輯器、版本控制等。
當學過多種語言後,就會發現這類知識是通用的,對各種語言都適用。
我們會在本文逐一說明這些內容。
當程式設計者把Windows當成開發環境時,不代表該程式的目標環境也是Windows。
例如,大部分GNU/Linux雲端虛擬主機的價格較低廉;程式設計者可使用跨平台的語言技術,先在Windows上撰寫程式,然後把該程式部署到GNU/Linux上。
選擇程式語言選擇程式語言是個老掉牙的主題。
而且,實際的選擇是很個人化的。
與其由筆者告訴讀者要選什麼語言,不如讓筆者給讀者一個方向,讀者自然會知道要選什麼語言。
在本節中,我們將常見的微軟技術和非微軟技術分門別類列出,讀者可按照自己的需求繼續找尋相關資料。
系統程式語言(SystemProgrammingLanguage)系統程式語言是用來撰寫和電腦硬體(computerhardware)溝通的軟體,常見的例子是驅動程式(Windowsdriver)。
初學者不會碰到這一塊,不需要費太多心思讀這類資料。
常見的系統語言是C和C++。
應用程式語言(ApplicationProgrammingLanguage)應用程式語言是用來撰寫給使用者(user)使用的應用程式。
根據使用者界面的不同,有可能是圖形界面程式、網頁程式、行動程式、命令列程式(註)等。
通常會使用靜態型態語言(statically-typedlanguage)來寫,因為動態型態語言(dynamically-typedlanguage)用來寫中大型程式會較難維護。
(註)使用者也可能是程式設計師、系統管理者、研究者等專業人士,所以命令列程式仍是有用的型式。
目前有實質影響力的行動程式平台是Android和iOS。
前者不限定開發平台,後者則一定要用Mac系統來開發。
所以,目前最適合寫行動程式的電腦主機仍是Mac電腦。
想用微軟技術寫行動程式的話,可以看一下Xamarin。
以下是微軟直接支援的應用程式語言:CC++C#(Csharp)VisualBasicF#(Fsharp)C和C++不是微軟特有的技術,但VisualC++支援這兩個語言,故歸類於此。
以下是非微軟的應用程式語言:JavaJava平台語言GolangRustPascal(即Delphi)CommonLisp如果把網頁程式也包進來,選項會更多。
部分內容會在下一節介紹。
通用型命令稿語言(General-PurposeScriptingLanguage)這類型語言多是指動態型態的通用型程式語言,直接以原始碼的形式發佈其程式。
這些語言通常用來寫網頁程式和命令列程式。
由於動態型態天生的侷限,這類型的語言較不適合寫中大型程式。
以下是微軟直接支援的通用型命令稿語言:VBScriptVisualBasicforApplicationsJScriptTypeScript在這些技術中,VBScript和JScript算是過時的技術,以後不會繼續開發新特性,微軟留著這兩個語言只是為了相容於舊程式。
若沒學過這兩者就不太需要去學了。
倒是TypeScript在網頁程式上算是成功的技術,目前是使用者最多的JavaScript轉譯語言。
有在寫網頁程式的話可以關注一下。
以下則是非微軟的通用型命令稿語言:PythonPerlRubyPHPJavaScriptPython是近年來最受歡迎的通用型命令稿語言,主因是搭上資料科學(datascience)的順風車。
JavaScript則是網頁前端程式的實質(defacto)標準。
如果想學動態型態直譯語言,可以先從這兩個語言看起。
命令列腳本語言(Command-LineScriptingLanguage)命令列腳本語言是內附在命令列環境內的語言,沒有函式庫的概念,藉由呼叫命令列工具(即指令)來完成各項任務。
命令列腳本會以原始碼的形態來散佈程式。
這類語言會用來寫命令列程式和自動化腳本,而不會用來寫應用程式。
以下是微軟直接支援的命令列腳本語言:BatchPowerShell筆者會使用Batch寫腳本,因為PowerShell環境仍可呼叫Batch腳本(批次檔),但命令提示字元則無法使用PowerShell腳本。
必要時可在Batch腳本中塞入PowerShell指令,用來補足Windows缺乏命令列工具的議題。
非微軟的命令列腳本語言會用到非微軟的命令列環境,我們留在下文一併介紹。
科學運算語言(ScientificComputingLanguage)將電腦語言用在科學方面的運算,像是物理(physics)、工程(engineering)、生物(biology)、醫學(medicine)、金融(finance)等領域的計算。
有些語言會提供互動式運算環境,有些則是純批次運算。
科學運算不算是微軟技術的傳統強項。
不過,有些專業人士會用F#(Fsharp)進行資料分析。
此外,微軟提供MicrosoftROpen,算是另一個R語言發行版。
以下是非微軟的科學運算語言:FortranPythonR語言MATLABOctaveJulia由於科學運算需要領域知識(domainknowledge),和典型的程式設計有一些差距,本文不會討論科學運算相關的議題。
開發環境的各個面向當程式設計者想把Windows當成開發環境時,得要處理開發環境的各個面向。
本節不談論特定語言,而是說明和開發環境相關的通用知識。
如果讀者想搜尋建置特定語言的方式,請自行搜尋其他資料。
編譯器(Compiler)或直譯器(Interpreter)現代語言會有一個(或多個)可使用的官方實作品,可能是編譯器或直譯器。
其他的開發工具會以此官方實作品為中心展開。
相對來說,早期的語言,像C、C++、CommonLisp,並沒有真正的官方實作品,而是以語言標準的型式來發佈。
這時候會有開發團隊根據此標準來實作編譯器或直譯器。
像C或C++常見的實作品有VisualC++、GCC、Clang等。
對於初學者來說,先固定使用同一個特定語言的編譯器或直譯器即可。
進階的程式設計者為了測試程式碼在不同實作品間的相容性,會在同一台主機上安裝多個程式語言的實作品。
編輯器(Editor)這裡所談論的編輯器是加上程式語言輔助功能的文字檔案編輯器(texteditor)。
由於編輯器很多功能是共通的,程式化編輯器(programmingeditor)會用外掛(plugin)的方式為不同的程式語言各自加入相關的功能,保持可擴充的彈性。
早期經典的程式化編輯器是Vim和Emacs。
但這兩種編輯器比較難學,而且要花時間調校,才能達到真正順手的狀態。
近年來有許多更方便的編輯器,像是VSCode,這些傳統的編輯器就比較少人使用了。
IDE(integrateddevelopmentenvironment)則是在編輯器外額外加上其他的功能,像是編譯、重構、除錯、版本控制、記憶體檢查等。
使用IDE無法取代對編譯器或直譯器等開發工具的了解,因為IDE在背後仍是呼叫這些開發工具。
當IDE回報錯誤時,程式設計者還是得回頭了解問題的根源。
命令列環境(CommandLine)許多開發工具是以命令列工具的形式發佈。
除了容易處理輸出入外,命令列工具易於批次處理,可以放在持續整合服務中,進行自動化測試和部署。
對於學習程式設計來說,熟悉命令列環境仍然是必要的。
使用IDE並不是逃避命令列環境的手段。
當IDE回報錯誤時,程式設計者可能仍需回到命令列環境下除錯。
有時候IDE會偷偷加入額外的設置,在命令列環境中不依賴IDE執行開發工具是確認這些事項的方式。
如果會寫一些些命令列腳本就更好了。
利用命令列腳本可以自製簡易的命令列工具或是自動化一些常見的任務。
比起正統的應用程式,命令列腳本簡短得多,而且很快就能學會。
軟體專案管理(SoftwareProjectManagement)程式設計學習者會以為軟體專案是程式語言的必要部分,其實很多語言的程式可以在完全沒有專案的情形下運行。
例如,以下用C實作的HelloWorld程式:#include
程式設計學習者會以為VisualStudio對學C或C++是必要的。
但微軟同時釋放出BuildToolsforVisualStudio這種沒IDE的命令列工具。
代表VisualC++其實可以和VisualStudio的編輯器脫勾。
軟體專案的目的是管理有規模的程式碼,自動化許多開發應用程式時會碰到的任務,像是編譯、執行、測試、部署程式等。
但初學者不妨暫時拋開軟體專案,用純手動的方式編譯和執行原始碼,慢慢了解這些開發工具的使用方式。
日後就有能力自行撰寫自動化腳本來簡化各種開發相關任務。
版本控制系統(VersionControlSystem)版本控制系統用來追蹤程式碼的變化。
例如,某段程式碼寫爛了,在還沒提交(commit)前,可以用gitcheckout回復到尚未撰寫的狀態。
即使是小小的sideproject,也可以用Git等版本控制系統來管理。
透過GitHub等軟體專案管理網站,Git變成散佈程式碼的工具。
像是Golang根本不建自己的函式庫集散地(centralrepository),而是直接利用GitHub等網站來取得套件。
雖然學習Git等版本控制系統不是必要的,但卻是相當有用的開發工具。
其他開發工具除了前述開發工具外,還有一些值得注意的開發工具:除錯器(debugger)記憶體用量檢查(memorychecker)靜態程式碼檢查(linter)自動重排程式碼(autoreformatter)持續整合(continuousintegration)服務如果讀者覺得開發工具過多,倒也不急著一次學完。
先掌握編譯器/直譯器和編輯器的基本用法,再慢慢學習其他的開發工具即可。
Windows做為開發環境的議題Windows是設計給一般使用者(enduser)使用的平台,做為開發平台反而沒那麼好用。
相對來說,Unix假定使用者也是程式設計者,設計上相當靈活,但對一般使用者來說過度複雜。
本節從開發平台的角度來看Windows會碰到的議題。
命令列環境和命令列工具Windows著重圖形介面的使用,有一段時間對命令列環境的改良甚少。
相對來說,Unix的命令列環境功能相當豐富。
除此之外,Windows也不太著重命令列工具的發展。
命令列腳本語言和命令列工具是相輔相成的,Windows在這兩者都居於弱勢。
由於相容性因素,Batch腳本的特性不會大改了。
但PowerShell適時補足Windows命令列環境的弱點。
不論是直接寫PowerShell腳本或是把PowerShell當成命令列工具來用都很方便。
除了要適應兩種腳本語言得花一些時間外,Windows的命令列環境的確是在進步中。
和C語言的整合.NET和Java平台本身就有(相對)不錯的速度,即使單純以C#(Csharp)或Java來實作程式,就可以獲得還過得去的速度。
所以這些語言對C語言的依賴沒那麼深。
但Python和Perl等命令稿語言,實際上包裝著以C實作的函式庫,背後運行的仍然是C程式。
單純以這些語言實作的程式速度偏慢,實用性偏低。
所以,這類語言對C運行環境的依賴就比較重。
但Windows對C語言的整合度沒有Unix那麼好,連帶影響許多基於C運行環境的高階語言。
所以,在Windows上,每個高階語言都會重包一次MinGW工具箱和常見函式庫。
其實只是重覆下載相同的開發工具而已。
熱門的函式庫通常都有預編好的版本,這些問題就隱藏起來了。
但在Windows上想從原始碼編譯軟體,反而是件困難的任務。
微軟也想改善這一點,所以會出現vcpkg這類套件管理程式。
希望之後Windows對C的支援度能再改善一些。
分享本文追蹤本站
延伸文章資訊
- 1「windows application, 應用程式」找工作職缺 - 104人力銀行
Application Developer 應用程式設計師-TC21197【Super Micro Computer, Inc._美超微電腦股份有限公司】、.net 應用程式開發工程師【耀瑄科技...
- 2Windows 10應用程式開發實戰- PChome 24h書店
NET平台開發基礎知識或熟悉C# 語言的讀者。 ... 儘管在Windows 8.1 的SDK 中已經出現了Universal App( 通用應用程式,UAP),但還不能算是真正意義上的通用,只...
- 3Windows 8.x App市集應用程式開發--使用C# (電子書) - 博客來
電子書:Windows 8.x App市集應用程式開發--使用C# (電子書),語言:繁體中文,ISBN:9789863471219,出版社:碁峰,作者:章立民,出版日期:2014/05/09,...
- 4Windows Azure Platform應用程式開發教戰手札(第二版) (電子書)
電子書:Windows Azure Platform應用程式開發教戰手札(第二版) (電子書),語言:繁體中文,ISBN:9789862767658,出版社:碁峰,作者:小朱,出版日期:2013...
- 5Day3 介紹Windows 8 App 開發方式 - iT 邦幫忙
Visual Studio 總共提供您以下幾種語言開發你要的應用程式:. 1.JavaScript 搭配HTML/CSS (適合web開發者)。 2.C#, Visual Basic, or C...