精通C++還是寫不好程序?

最近群里有些同學(xué)問我,為什么我覺得我精通C++了還是寫不出來程序?
這其實(shí)是學(xué)習(xí)程序挺普遍的狀態(tài)。我自己也遇到過。
首先,這個(gè)精通的意義不是特別明確。
我認(rèn)為主要分為三種。
第一種:精通語法
這種最常見,學(xué)半年左右精通一門語言的語法一般沒問題。
但是只是精通了語法寫不出好程序。就好比你把字典整本記下來也寫不出好文章。
學(xué)會(huì)語法不等于能寫出好程序。
寫程序和寫文章差不多,你首先要明白寫程序的目的。然后分解為問題,再一步一步解決。這是做程序的常規(guī)流程。
所以單獨(dú)記憶語法不行。你需要去解決問題。
我開始學(xué)C語言時(shí)看的一本書C Primer plus,開篇強(qiáng)調(diào)了寫程序的七個(gè)步驟,對我影響非常大。
在這把這七個(gè)步驟和大家分享一下。
(1)定義程序目標(biāo)
在動(dòng)手寫程序之前,腦中要有清晰的思路。想要程序去做什么首先明確自己想做什么,思考程序需要哪些信息,要進(jìn)行哪些計(jì)算和控制,以及程序應(yīng)該要報(bào)告什么信息。在這一步驟中,應(yīng)該用大白話描述問題。
(2)設(shè)計(jì)程序
對程序應(yīng)該完成什么任務(wù)有概念性的認(rèn)識后,就應(yīng)該考慮如何用程序完成它。例如,用戶界面應(yīng)該是怎樣的?如何組織程序?目標(biāo)用戶是誰?準(zhǔn)備花多長時(shí)間來完成這個(gè)程序?
還要決定在程序中如何表示數(shù)據(jù),以及用什么方法處理數(shù)據(jù)。
應(yīng)該用大白話描述問題,而不是具體的代碼。
(3)編寫代碼
(4)編譯
(5)運(yùn)行程序
(6)測試和調(diào)試程序
(7)維護(hù)和修改代碼
其中定義和設(shè)計(jì)程序非常重要,而且一般是在紙上寫好。直到第三步開始寫具體代碼。

第二種精通:功能實(shí)現(xiàn)很熟練就是想不起來用。
這種也比較普遍,主要集中在碎片化學(xué)習(xí)上。
道理很簡單,你看視頻一個(gè)功能怎么寫?它是直接給你答案了。不需要你去一步一步分析。問題就出在這個(gè)解決問題的過程上。
你直接把答案記下了,那么除非遇到非常相似的功能,你會(huì)求解。功能稍微變化一下可能就想不到了。
本質(zhì)上還是分析問題的過程。
寫程序是解決一個(gè)問題,那么分析問題的能力自然就很重要。我個(gè)人覺得甚至比語法都重要。
而這種能力是碎片化學(xué)習(xí)最欠缺的部分。
第三個(gè)精通:需求模糊
這種問題我在工作中也經(jīng)常遇到。
主要是因?yàn)樾枨蟛幻鞔_,這種時(shí)候考驗(yàn)的是對某個(gè)行業(yè)的理解程度,這種情況就是業(yè)務(wù)不熟練,導(dǎo)致你沒辦法做出最適合的解決方案。
那么這個(gè)就主要靠深耕某個(gè)行業(yè)來解決了。