此次結對編程真的是一次很鍛鍊人的經歷,過程當中充滿了波折,最終也有很多收穫,下面就從具體技術和通常開發經驗兩個方面談談我此次的收穫。php
具體技術上,此次採用的是Qt與C++,我曾經有過一些Qt經驗,但只是本身寫着玩玩,代碼都不長。此次寫Qt我最大的感覺是,想成爲一個入門的程序員,第一件事就是要懂得如何簡明扼要地描述本身遇到的問題或者須要的技術,扔到百度上搜索,找到合適的解答。更成熟一點的程序員還要能用英語描述本身的問題並扔到 google 上找答案。在這個時代,技術老是不斷更新的,做爲程序員必定要培養學習新東西的能力,對於新技術要可以獨立得迅速掌握,這樣才能不被時代out。程序員
我感受在上了軟工課以及這學期在各個場合用了一些之前不多用過的框架以後,我學習新東西的能力大幅提高,最重要的是我再也不畏懼未知的技術,可以耐心地閱讀各類庫的使用方法。此次我在代碼中使用了兩個對我來講很陌生的庫,一個是定時器 QTimer 類,另外一個是 xml 文件讀寫工具 QXmlStreamReader 類和 QXmlStreamWriter 類,其中後者的使用更爲複雜,我有了這學期之前的經驗,很快在網上找到了我須要的技術解答並掌握了這幾種庫的使用方法,也很快調試成功。這應該算我這學期很大的進步之一。編程
技術上還有一個很重要的問題就是代碼規範,這一點其實涵蓋了代碼的各個方面,從基本的變量命名到代碼的整個架構,都須要規範。架構上,代碼的規範能夠參考設計模式中的內容,詳見個人讀書筆記,此次我想說的是一些更基本的問題。設計模式
首先是變量和函數命名,此次的UI包括了一大堆 QLabel 、 QLineEdit 以及 QHBoxLayout 、 QVBoxLayout 等控件與佈局對象,我一上來的命名還算比較規範,可以一眼看懂這個控件表明的是什麼,但隨着各類類似的對象愈來愈多,我很難再在原來的命名方式內增長一個新的對象名而不搞混。當我意識到這個問題,我馬上狠下心把全部的變量按統一標準所有更名,好比顯示算式的標籤叫作 labelExp,顯示答案的標籤叫作 labelAns ,用戶輸入精度的文本框叫作 editPrecision ,點擊後產生隨機算式的按鈕叫作 buttonGenerate ,用這種控件類型加名字的方式統一命名,變量瞬間清晰了很多。函數命名方面我一直的習慣都很好,統一採用駝峯法,由於Qt庫函數都是首字母小寫(這點不如安卓函數首字母大寫科學),我此次統一採用首字母小寫的駝峯法。函數命名這一點有不少組就作得很是很差,有函數用駝峯法有函數用下劃線,很有php風範。架構
其次,變量到底定義爲局部變量仍是 QMainWindow 類成員變量必定要考慮好,窗體對象的生存週期在Qt的UI編程裏是一個很重要的問題,我由於一開始沒有規劃好每一個對象的創建方式(成員變量仍是局部變量,創建在堆上仍是棧上),出了很多問題,好幾回重寫相關代碼。這裏我給出我最終的經驗總結:對可能會修改的對象定義爲成員變量,對絕對只用一次的對象設爲局部變量;全部 QMainWindow 類內定義的對象所有創建在堆上,全部主函數新定義的對象所有創建在棧上(這兩條主要是考慮了Qt的父子對象關聯與析構方式)。這方面的規範對於從此的Qt編程相當重要。框架
還有一些細節問題好比頁面切換方式等,給個人進程製造了一些障礙,但與上述的兩點比都是小問題,詳見我結對編程做業總結博客中的 bug 分析部分。函數
下面講講此次我此次收穫的通常開發經驗。此次做業工程中鄧老師有句話讓我印象深入:標準是要靠搶的。之前我本身報過經濟學類課程,其中很重要的一個問題就是標準,先搶到標準制定權的人每每能搶得先機。軟件開發中也是這個道理,先發出sdk接口的組,只要質量基本使人滿意,便頗有機會壟斷整個行業。工具
此次做業剛開始時。同窗們一直等着老師和助教發佈接口標準,可是老師和助教都靜觀其變,當同窗們意識到這個問題須要本身解決的時候,已經比較晚了,而後各類亂七八糟的接口開始被髮到了羣裏,根本沒有一個統一的標準,以致於UI組的對接十分困難,對接幾個組就須要寫幾份代碼。我以爲我在這個問題上就過於樂觀了,我覺得全部人都能打成共識最終使用 xml 格式傳遞數據,因而在寫本身的存取錯題文件功能時用的都是 xml 文件解析庫,結果最終沒有人用這種方式,都是普通文件或者字符串。的確他們的這種方式很是沒有遠見,使core不具備好的可移植性,可是畢竟我沒有在羣裏提這個問題,僅僅主觀以爲你們都會這麼作,結果我作了不少無用功。這個經歷給我好好上了一課,我如今深入地體會到團隊項目中標準真的真的很重要,並且想讓本身佔得先機,標準是要搶的。佈局
而且,此次做業中多了許多交流合做與信息溝通的成分,不管是組內溝通仍是UI、core交流,都是在你們以往的編程經歷中從未出現過的。信息交流在真正的團隊開發中是十分重要的,其重要性毫不亞於我的碼代碼的能力,此次做業中的接口標準、彼此須要實現的功能,都是很是須要溝通的內容,缺乏了必要的信息溝通會嚴重耽誤整個項目的進展。學習
而針對二人結對編程方面的收穫,我我的的體會主要是在別人面前寫代碼(邊分析邊寫)會讓思惟更清晰,下降出錯率。至於其餘理論上結對編程具備的功能我在另外一篇博客裏都寫了,此次因爲個人隊友的編程能力較欠缺,很難體現出其餘結對寫代碼的效果,但願老師之後在分組和評分的時候可以考慮到這樣的問題。
最後,一句話歸納一下我此次的收穫:不管是從我的技術方面仍是團隊合做開發方面,規範與標準都是相當重要的。