個人項目總結
本次個人項目的內容是寫一個統計英文詞頻的程序。這也是我第一次使用C#開發一個相對完整的程序,還是學到了不少東西,在這里總結一下吧。
首先給出我的項目預估時間和實際時間的對比:
Work Items |
Time estimation |
Time Actual |
Size estimation |
Size Actual |
Due Date |
Finish Date |
Algorithm design |
1 day |
0.5 day |
N/A |
N/A |
16-Aug |
17-Aug |
I/O Module |
2 hours |
1.5 hours |
30 lines |
15 lines |
17-Aug |
18-Aug |
Kernel algorithm |
0.5 day |
3 day |
50 lines |
150 lines |
21-Aug |
23-Aug |
Code Review |
3 hours |
3 hours |
N/A |
N/A |
23-Aug |
23-Aug |
Testing and Debugging |
0.5 day |
1 day |
N/A |
N/A |
24-Aug |
24-Aug |
可以看出,表面上雖然時間還是控制的比較好,但是對於核心算法的時間和代碼量估計都遠遠不足;多出的時間實際是用加班來彌補的。因此我認為預估代碼量以及時間的時候都不能過於樂觀。
再說實現過程,雖然從最后結果來看,我的程序是所有C#實現的詞頻程序里最快的,但這中間也經歷了幾次大的改動。最開始我自己寫了Trie樹進行排序,但速度不能令人滿意。與其他同學交流了一下以后,決定改用C#自帶的Hashtable,速度得到了明顯的改善。之后在檢查代碼的時候,意識到了自己之前寫的Trie樹不夠完善,可以有很大的改善空間,於是就又將核心算法轉回了Trie樹,並取得了較好的效果。事實上,如果在動手寫代碼之前能夠更好的規划自己的算法和數據結構,無疑會節省掉中間不停更改實現算法的時間,這也是我需要注意的問題。
總之,通過這一次個人項目的實踐,我不僅練習了用C#開發項目的基本流程,並且對於如何設計和規划自己的項目有了更加深刻的認識。