1. 程式人生 > >【IT人生】寫給今天的初學者,明天的領航人

【IT人生】寫給今天的初學者,明天的領航人

寫給今天的初學者,明天的領航人

唐潔

2012 是個極特殊的年份, 瑪雅歷新紀元的開始, 祖國的改革開放進入全新歷史時期, 科學發展觀正式寫入黨章。 黨的十八大報告就明確指出, 堅持走中國特色新型工業化、 資訊化、城鎮化、 農業現代化道路, 推動資訊化和工業化深度融合。 加快推進國防和軍隊現代化, 加緊完成機械化和資訊化建設雙重歷史任務, 力爭到 2020 年基本實現機械化, 資訊化建設取得重大進展。 堅定不移把資訊化作為軍隊現代化建設發展方向, 推動資訊化建設加速發展。 這一切的一切都是那麼令人振奮, 我雖然從事軟體研發 12 年了, 從一線程式設計一直走到架構師及今天的管理人員, 雖說積累了一些經驗, 也取得了研發專家頭銜,但自我感覺還是很慚愧, 遠沒有達到心中的預期水平。 我不能算是什麼程式設計專家, 只能說積累了一些從業經驗而已, 從幾個方面談談我這十幾年程式設計生涯的一些感悟。

1 樹立正確的觀念, 合理選擇專業

從高考結束邁進大學校門開始,我們今後職業生涯的方向將逐步開始規劃,無論當初你怎樣想,你所填報的專業就是選擇的起點。我們國家的高等教育越來越普及,每年的就業形勢也不容樂觀,理工類相關專業從事軟體研發的較多,我身邊的大多數學生選擇這個專業方向主要是考慮以後好就業,不管喜歡不喜歡,反正跟著潮流走不會錯。在這裡我要特別提醒大家,專業選擇是人生轉折點,中國有句古語: “男怕入錯行,女怕嫁錯郎”。 學生的確應該冷靜地分析自己的各科水平和能力, 從興趣愛好和價值觀出發, 要想清楚兩個問題: 一是所填報的專業和自己喜歡從事的職業是否一致? 二是個人的理想與自身的學習能力是否一致? 一個人只有幹他願意幹的、 認為有價值的、 能力比較擅長的, 以及個性稟賦適合的工作, 才能更好地發揮潛能。 我身邊有一個現實的例子, 就是我的一位同學, 原來高中時他成績非常好, 基本是年級前三, 但高考填志願時只是按照老師的要求填報了一所重點大學的生物專業,多年後, 據他自己說的確當年沒有綜合考慮自己的意願和興趣愛好, 他根本就不喜歡生物, 雖然他階梯式地讀到了博士, 但最終他還是完全放棄了他的專業考到一個政府事業單位當了個完全與專業不相干的科幹。最近遇到他, 問起他的專業, 他竟然做抓狂狀說不要和他提生物, 這位同學且不論他個人發展如何, 這對於國家的教育資源就是一種浪費, 培養一個學科博士國家需要投入多少人力物力, 結果呢? 在這裡寫這些話就是要強調選擇專業是人生重要的轉折點, 要根據自己的具體情況具體分析, 大膽而又慎重地填寫好每一個專業的選擇, 用謹慎的態度和科學的方法真正做到從自身的情況出發, 既然你選擇了軟體研發行業, 就要喜愛它, 尊重它, 用心去對待它, 才能信心百倍地迎接明天, 在這個領域有長足的進步。

2 打下紮實基礎, 做好知識儲備

本科階段課程的學習是一切行業的基礎,在軟體研發行業尤為重要。最重要的兩門基礎課程就是數學和英語,業界有句話 “數學水平決定你能走多遠, 英語水平決定你能走多快”,現在我是深有體會。 李開復先生曾說過: “在全球範圍內, 美國的研究水平無疑是先進的。 而除了美國之外, 你會發現英國的研究水平也是相當突出的。 究其原因, 其實就是語言問題。英國人可以毫無阻礙地閱讀美國乃至全球各種最新的英文研究報告和資料。這對於他們把握研究方向,跟蹤最新進展, 發表研究成果都有很大的幫助”。 因此, 英語學習對於我們做研發的人來說是相當重要的。 只有加強這方面素質的培養, 才能適應將來的發展。 從業多年的朋友都知道英文原版教材更新速度遠快於國內教程, 且很多經翻譯過的資料會失去原來精闢的講解內涵, 如果你英文水平足以閱讀原版教材的話, 會比別人進步快很多。 工科專業必修的幾門數學課程: 高等數學、 高等代數、 概率論與數理統計、 解析幾何、 計算方法、 離散數學、 初等數論等等必須是全部熟練掌握, 最好精通 (如果你想以後達到較高的設計層次); 英語與數學的學習可能會伴隨你全部的職業生涯, 很多在校學生對於這兩類課程不是很重視, 認為只是簡單的基礎瞭解, 這非常不好。 舉個例子, 現在很熱門的3D 類軟體 (遊戲, 繪圖引擎等 ) 設計會用到大量的積分思想與高等代數中的線性變換概念, 而資料探勘和預測決策分析類軟體如果不懂數學分析與概率統計是根本沒法做的,對於人工智慧類軟體的設計必須要求深入理解模糊數學理念。也許有朋友會說我是做資料庫應用的,用不到什麼高等數學類知識,很可惜你也錯了,複雜庫表結構組合的設計的合理與否完全要靠你對拓撲代數以及離散數學的理解程度,不要以為會幾個 SQL函式,會用 IDE 環境做出幾個操作 Oracle, DB2 的應用就是會資料庫開發了,這個僅僅是皮毛功夫而已,不理解數學概念的深層次應用,永遠只能停留在初級水平,而且走不遠的。 舉一個例子, 一家國內比較大的公司設計, 他們核心團隊的研發經理對於數學知識的運用不是很好, 典型的資料庫類軟體J2EE+WEBLOGIC+ORACLE 的 B/S 架構, 由於系統龐大 , 後端庫表邏輯設計不合理, 造成很多缺陷, 最致命的是整體庫結構與前端 code 不能分離, 導致一個服務埠只能對應一個年度的庫結構, 做年終結轉與年度初始化時痛苦萬分。 請多位專家綜合分析之後, 分析結果是核心架構必須推翻, 80%的程式碼都要重構,我曾經尋問那個研發經理,做系統規劃時考慮了代數拓撲的耦合度設計了嗎?他一臉茫然, 由此可見數學知識的重要性。另外就是專業基礎課的學習: 計算機組成、 作業系統原理、組合語言、 資料結構、 編譯原理、 資料庫原理、 軟體工程、 結構性設計語言 (Pascal、 C)、 面向物件設計語言 (C++、 C#)、 計算機網路等, 最好還深入學習一下演算法分析、 分散式系統、 計算機圖形學、 形式邏輯、 人工智慧原理、 軟體設計模式、 人機互動, 軟體構架/框架等的課程。 在軟體研發界, 新技術層出不窮, 但基本原理變化不大, 我從業十多年來, 越深入研究越體會到這些基礎理論的重要性。 比如我正在做的數學分析與D3D 生物運動模擬引擎課題,就要用到大量的 3D 數學與專業基礎理論,而且有些深層次沒有理解透徹的概念還要回過頭找這些資料學習參考。現在的大學普遍擴招,很多學生進入大學之後很茫然,對待課程學習也是純應試目的,基本都是丟掉書本就忘了,很多教師在傳授專業知識的時候也僅是淺嘗輒止,不能形成知識的關聯體系。計算機相關專業是實踐性很強的學科,許多理論只看書是無法領會的,實踐與理論必須相結合才行,這就需要我們自己做個有心人,現在的網路資源比十多年前要豐富多了,學習的時候可以多方面蒐集相關資料,彙集理解, 另外 MIT 的公開課很好, 可以抽空看看, 有助於加深理解。 本科階段的各項知識儲備非常重要, 我見到過很多計算機專業課學的很好的, 但數學與英語基礎不好, 沒辦法繼續深入研究下去。 如果條件允許, 讀研是有必要的,可以加深專業方向的學習, 提高職業素養與研究能力。 其實最理想的軟體研發學習之路是本科學數學, 研究生讀計算機相關專業, 讀博時再考慮在某個感興趣的領域發展。 如果有條件可以考慮一直深造下去, 等到各項理論水平都很紮實了, 再考慮投入工作。 我見過一些所謂寫程式碼的程式設計師, 他們整天討論自己掌握了多少編碼技術, 什麼 VB, Delphi, 資料庫玩得多順等, 其實他們忽略了軟體研發最本質的東西, 以至於多年之後仍然進步不大。 現在有很多觀點認為高等教育的重要性在下降, 軟體研發是吃青春飯的等等,其實這是極端錯誤的, 在很多大公司的研究院裡, 高層次的研發專家基本都在35 週歲向上, 而一些研究院的首席軟體科學家基本都是數學專業畢業, 軟體界的職業生涯有著典型的兩類曲線。

這兩幅圖中 T 代表時間, P 代表專業水平,很明顯第一幅圖中起步發展很快,但到了某一點時開始轉折,發展會變慢而後將停留在某一極限而無法超越。第二幅圖起步雖然很慢,但到了某一階段量變轉化為質變開始飛躍,而後無限向高層次發展。這兩幅圖就是著名的人月神話第一版所述的內容,已成為很多行業職業生涯的描述。寫在這裡是告訴大家,基礎課程學習與知識儲備的重要性,千萬不要浪費青春,追求所謂快速入門的短平快式的學習。說個很形象的例子:很多年輕人都喜歡看武俠小說,倚天屠龍記的張無忌為什麼那麼厲害,原因是他的內功基礎非常紮實,學什麼都很快, 臨場發揮現學現賣, 超越了很多練了很多年的高手, 其實這些知識儲備就是你從業的內功, 記得我從入門到運用Java 以及 J2EE 設計一款 B/S 架構的組合演算法模擬機只花了 2 個月時間,而且黑白盒測試一次性通過,這些都得益於我較紮實的知識儲備。

3 注重理論學習的同時, 選擇合適的軟體專案實踐鍛鍊

無論你是在校學生,還是業界人士, 理論學習的同時, 配合實踐鍛鍊是提升專業水平的必經之路。 計算機相關專業是實踐性很強的學科, 所有的軟體都是動手研發出來的。 沒聽說過只看書, 考試做題就能誕生軟體專家。 有個現實的例子: 我以前有個同學很聰明, 理論學習非常好, 考試總是前幾名, 但他有個毛病, 不喜歡靜下心來動手搞研發, 後來碩士畢業進入了一家很大的跨國公司核心研究機構, 但由於總是不願意動手,跟不上科研進度, 最終不得不轉行做了學院派, 這是很可惜的。 軟體界的學習是 40%的理論, 60%的實踐, 當然盲目的實踐是沒有效果的。 現在各學校的教學資源都很好, 計算機專業的學生獲得實踐鍛鍊的機會比以前多很多, 找到一名理論與實踐經驗都很豐富的教授作為自己的第二老師是很有必要的,記得我後來就非常幸運地遇到了這樣的導師,作為一名初學者可以嘗試從普通的資料庫類應用類軟體開始動手,可以較為全面地接觸一些資料庫運用,網路通訊及設計模式,編碼規範等。特別要注意選擇好自己使用的第一門開發語言工具,很多同學為了上手快喜歡用一些所謂的 RAD 類 IDE 環境,比如 Delphi,DOT NET 之類的, 這些其實不利於良好編碼習慣的養成 , 最嚴格規範的語言就是 C/C++系列, 很多底層驅動與引擎都是基於 C/C++基礎研發的, 一個真正的研發專家必定是一個 C/C++語言專家。 我當年獨立設計的第一款 CMS 架構的物流倉儲應用就是用C++平臺開發的, 現在回想起來還是覺得很有益處。在校的學生尤其要注意理論學習與實踐鍛鍊的同步。比如高等數學系列課程的學習可以結合 Matlab 的實驗進行,有助於深入領會數學原理與演算法學的基礎。學習資料結構與演算法分析學的時候有必要將教程的各個演算法用語言逐個實現,對於彙編與計算機原理的學習可以嘗試結合編寫簡單的顯示卡或音效卡驅動去領會,作業系統的程序、執行緒池、 多併發等機制一定不要只停留在基本原理的理解, 動手做一個基礎框架的核心模型會讓你有很深的認識, 學習作業系統時可以結合Unix 設計原理與Windows 核心程式設計等書籍同步學習,會讓你對一些很抽象的概念有具體形象的認識。編譯原理的學習可以加深對編譯機制與人工智慧初步的理解,可以嘗試編寫基本的編譯框架。在校期間如果有合適的專案研發可以抽空參加,理論與實踐的同步進行可以快速提升對專業的理解。當然, 專案不是盲目去做的,各種型別的都應該嘗試, 資料庫應用類是比較基礎與簡單的演算法設計類、 驅動程式、 核心引擎等等都應該有所接觸, 對專業的各個領域應用都會有比較深的認識。 尤其是畢業設計非常重要, 一定要認真對待, 選題儘量選擇某個領域有一定深度的課題, 我當年的本科畢業設計就是資料結構動態模擬課題, 以C++編碼用計算機動畫的方式將軟體專業的 80 多個核心演算法全部模擬出來,設計了一套一體化教學平臺的軟體,後來這款畢業設計軟體被評為優秀設計並一直在學校作為教學案例儲存。工作以後, 我一直堅持理論學習與實踐相結合, 同時注意數學與英語學習的同步進行, 為了將研發領域不斷深入, 後來進一步深造時利用空餘時間歷時 4 年系統學習了數學專業的全部課程,同時還在數學分析與概率統計及人工智慧領域做了深入研究性學習,結合專業知識, 在 10 餘年間大小做了 90 多個專案, 同時總結自己的實踐經驗寫成各類論文並參加各類軟體研發大賽, 一步步從一執行緒序員走到現在的帶隊架構師, 這都得益於不間斷的理論學習與實踐的相結合, 希望我的一點學習經歷對大家能有所幫助。

4 從小工到專家, 在不斷探索中積累渴望創造的激情, 完成職業生涯進階

經歷了以上幾個階段的努力,基本上算可以進入職業軟體研發的門檻了,但要記住你只能算是一個 Coder 小工而已,至於能走多遠還要看自己的努力,在這裡有幾點經驗供大家參考:

(1)從編譯原理的角度來理解工作中使用的高階語言。 如果做到這一點, 至少有兩個好處: 第一個好處是避免一大堆低水平重複出現的編譯錯誤。 一名優秀的 Coder 平均在一個工作日中應該完成200 行以上的原始碼,其編譯錯誤應該控制在 5 個以下,要知道這 200 行原始碼不是一次完成的,所以大多數情況下你都要追求一次編譯通過,而一名職業水準的程式設計師,應該進一步做到即使 purify 這類的工具來檢查原始碼,也不會存在嚴重的記憶體洩露;第二個好處是可以提高原始碼的可讀性和效率。規範地編寫你的程式碼使你自己的邏輯清晰,因為你明白多加幾個括號和空行、多換行對齊、多註釋, 編譯器是會自動識別的, 不影響程式執行的效率, 反過來, 控制好遞迴呼叫和迴圈內的 if 語句才是提高程式效率的關鍵, 要全力避免遞迴, 但要深刻理解遞迴, 能通過自己建立堆疊來把遞迴程式轉換成非遞迴程式, 要求還是較高的。

(2)避免思維陷阱。 人都有自己的思維慣性, 這一定又會表現在你的程式邏輯中, 有時你就是從這個慣性中跳不出來(誰都有這個時候),但要心裡有數才行, 所以你需要幫助 , 如果你有幾個水平相若或更高的職業夥伴, 太好了, 當遇到花30 分鐘還打不下的 bug 時 , 就別浪費時間了 , 找他們吧 , 最要緊的是能思路清晰明確地表述你的問題, 通常你自己在這個過程中或者夥伴中就有人把問題解決了, 又快又好。 另外, 有幾個可以良性競爭的職業夥伴是人生的一件幸事, 1+1>2,大家各有所長, 你最好做到及時公開你的成果, 技不壓身, IT 發展的這麼快, 你再優秀, 那點東東也沒有什麼值得隱藏的, 所以你可以技術或水平不夠高, 但千萬不可以讓真正具有職業水準的選手鄙視你的職業品質和行為。

(3)有自己 debug 的特點。這一點只是經驗之談,即使在VC 這種高度完善的開放環境下, 仍然應該要求自己僅憑列印語句就能 debug。這也有兩點好處:第一個好處是, 遇到 bug你會認真想問題所在, 而不是用 debug 工具一步步簡單地追蹤卡在哪兒了, 你定位 bug 範圍的方式是從大到小、 從粗到精,這是一種自頂向下的思維方式, 而用工具追蹤, 容易形成自底向上的思維方式, 這不算好, 你應該先看到森林, 再看到樹木。 程式就是邏輯過程, 大多數程式從 main 函式開始, 是由資料結構和功能子程式組成的一個樹形結構的邏輯過程 (要認清即使是面向物件的程式語言也是一樣的),它的執行過程是深度優先的,但你定位 bug 應該是廣度優先的;第二個好處是強迫你思考並記住而不是用工具看到呼叫過程,大腦的抽象邏輯思維能力和胳膊上肌肉的力量一樣,都是練出來的, 如果你的 bug 是程式結構上的邏輯錯誤引起的, 這一點就非常重要了,順便說一句, 最難打的 bug 就是程式邏輯結構錯誤導致的bug。總之, 程式設計師的職業水準: 生產效率和程式質量, 主要是取決於原始碼中 bug的數量和 debug 的速度,而不是取決於編寫原始碼的速度。給你一個我自己定義的考查一個職業程式設計師的指標:一個合格水準的職業程式設計師,程式設計的時間如果算一分的話,其累計 debug 的時間不能超過一分,真正職業高手累計 debug 的時間應該控制在 0.5 分以下,如何? 你關上門悄悄問問自己, 你花費在程式設計和 debug上的時間比例是多少?如果你把程式設計師作為自己一生的職業,那麼就永遠都要牢記一點:追求做一個 0bug 的優秀程式設計師!這是任何一個想成為職業程式設計師的人的理想,請相信: 堅忍不拔地追求實現這個理想將讓你出類拔萃!

(4)做好程式的單元測試。這是另一項考查你是否是一名具有合格職業水準的程式設計師的一個必要指標。其實在你拿到需求的時候就要準備單元測試用例了,並且這些用例將直接影響你的詳細設計。舉個例子, 當你拿到一個需求時, 除了分析它靜態的功能外, 還應明確它動態的操作/執行過程, 把這個動態過程明確地用流程圖畫出來, 比如分為 A~Z 的 26 步, 其中A 又可以進一步分解為 A1~A5 的 5 步, 直到不能再分解為止 。又比如說 A3 步不可分解了, 那麼你應該把 A3 步的正常操作和所有五花八門的異常操作都列出來, 確保正常的操作肯定正確, 異常的操作起碼程式不退出才行。 這樣你就要寫好多好多的測試用例, 說句老實話, 我也從來不寫! 但我一般會列一個提綱, 比如 A3 步有正常的操作 a、 b、 c、 d、 e 共 5 項, 異常的操作有 f、 g、 h、 i、 j、 k、 l、 m、 n 共 9 項, 你在進行單元測試時都應該跑一遍, 這樣的程式都還不敢說質量如何好, 但起碼可以說較穩定吧! 如果要想在進行單元測試時幹得快、 效率高, 那麼在進行詳細設計時, 你就應該把 A3 步中對所有正常操作和異常操作的判斷都設計好, 在程式設計實現 A3 步時, 使得程式的結構合理高效。 所以, 如果你在工作中是割裂地看待軟體工程中從需求、 分析、 設計、 編碼、 測試等各個環節, 恐怕水平很有限喔! 但如果你在分析需求時就能看到測試的問題, 並改進設計和實現, 為此做好相應的準備工作, 整個軟體開發過程你的效率會高很多, 通常你在一個開發團隊中就會高度自信的, 你已越過當一名偏頗、 露骨的高手的境界, 成為一個平靜的高手, 這可是 The bestin the best!因為別人看不出你高在哪兒,沒見你有什麼高招或特拼命幹,但反正你就是幹得又快又好、又省力。 關於進行單元測試還有很多複雜的方法, 這裡只提到了最基本的一點, 目的是讓你在工作上考慮周全、 安排有序, 其他的還要靠自己慢慢領悟。

(5)要學會如何思考 。 如何處理工作及學習中的各項問題, 因為思想決定行動, 行動決定習慣, 習慣決定命運。 學習團隊精神和溝通能力, 培養團隊合作的能力和領導才能, 也可以發揮你的專業特長。 但更重要的是, 你要做一個誠心誠意的服務者和志願者, 或扮演溝通橋樑的角色, 並以此鍛鍊自己的溝通能力。 把握不用 “付學費” 的學習人際交往的機會, 犯了錯誤也可以從頭來過。 一個有為的公司, 員工比拼的是胸懷。一流的人才招聘的是一流的人才, 二流的人才招聘的是三流的人才。 要與優秀的員工做好朋友, 做你一生的朋友, 和優秀的人接觸會改變你的一生。 只有胸懷廣闊的人才可以有所作為,否則就是平庸。 只有這樣才可以成為一位合格的軟體人員。

(6)不要只關注專業相關的理工科類知識。 人文 、 歷史 、哲學有空也可以看看, 對啟發創造力很有幫助, 日常工作中你採用何種設計架構模式都是具有創造性的, 創造力的培養不單單是專業知識的範疇, 有很多人文修養在其中。 要豎立正確的人生觀, 價值觀, 堅定自己的專業方向, 有條件一定要繼續讀研深造。 需要說明的是, 選擇研發的人未必個個都是高手, 嚴格來說, 大部分都不會程式設計序。 也就是說, 庸庸碌碌之輩仍然佔絕大多數。 研究生畢業的師兄只拿 3 千左右的比比皆是, 所以不要寄希望於拿一張研究生文憑出去賺高薪。 在繼續深造前要想想自己目前具備的能力, 而不是混文憑, 以下供參考:  

1) 你已經認為 C++和組合語言都是很簡單的語言 , 並能夠自如地運用;

2) 你能夠在 30 分鐘之內想到正確的五子棋AI 演算法設計思路和方向;

3) 你完全理解 STL 為什麼這麼重要;

4) 你能夠獨立地解決所有的編譯與連結問題 , 哪怕你從來沒有遇到的問題, 你也不需要詢問任何人;

5) 英文網站是你的首要資訊來源;

6) 能夠讀懂英語寫成的國際標準, 比如 NTFS 磁碟格式標準;

7) 你經常站在集合論的角度思考演算法問題;

8) 能夠理解一個簡單的驅動程式, 能夠理解一個簡單 3D互動程式;

9) 你能夠認識到線性代數和概率論在實際程式設計工作中的極端重要性;

10) 你完全理解 COM 的設計思想, 尤其能夠理解 COM 為什麼要設計成這樣;

11) 當我說到虛擬函式的重要作用時, 你不會急著去找書來翻;

12) 你能夠說出 C++為什麼比其他語言優秀的理由。

如果你同時具備 5 條以上,可以認為你已經具備較好的開發經驗了。 在這種狀態下深造讀研, 你將取得最大的效益值。從小工到專家, 在不斷探索中積累渴望創造的激情, 完成職業生涯進階, 特別注意進階深造期間, 你一定要做有理論深度的演算法設計, 比如大規模資料的搜尋演算法, 效能是首要考慮因素, 不要奢望 SQL 函式能夠幫你解決問題, 所有的問題你都必須自己解決, 你必須解決內外存交換的效能瓶頸。 再比如極品飛車的 3D 場景生成、 圖形變換、 碰撞檢測、 物性模擬、紋理對映、 燈光模型等等, 這些都是必須精通的技術。 要是你認為深造多年之後還是要去搞一般的程式設計, 如資訊管理系統之類的軟體, 那麼你職業生涯的價值就完全不會得到充分的體現。

5 選擇合適的領域, 自主創新核心技術, 為振興國產軟體出力

以正確的學習方法經過堅持不懈的努力,你終將在軟體研發的某一個領域有所成就,可能你已成為某個領域的專家,這時你可以專注地在某個領域發展,而不必擔心基本的衣食住行問題。這時如果你有心,建議你考慮支援一下我們民族軟體的發展,考慮一下自主創新一些核心的技術。在此藉機呼籲一下,我們廣大的 IT 人士,各類資訊化公司,多投些精力做一下系統級的基礎研發,有能力多關注一下自主創新核心技術,讓我們自主研發的作業系統、編譯器、 資料庫、 D3D 引擎等等基礎核心技術的平臺能夠在祖國大地生根發芽, 結出累累碩果。 有句話 “師夷長技以制夷”, 還有句話“天下興亡匹夫有責”, 僅做為一名從業十多年的老鳥在這裡寫下這些話, 期盼廣大的正在入行及一起奮戰的 IT 同仁們,今天的初學者, 也是明天的領航人, 讓我們一起為振興國產軟體努力奮鬥。 祝願祖國更加強大, 明天更美好!