覺得自己程序寫得很差不敢寫了怎麼辦?

自學編程兩年多了,頭一年數據結構演算法之類的什麼都不懂,也不注意編程規範,但是一點一點開始寫了很多程序,第一年大概寫了怎麼也有4/5萬行了吧,當然重複性很高,沒什麼技術含量。後來慢慢的了解了編程規範,數據結構,演算法,面向對象,設計模式等等的概念,也看了一些其他人的代碼,慢慢就覺得自己以前寫的簡直不堪入目,導致現在有時甚至都不敢寫了,寫程序的時候總是忍不住在想這樣寫對不對,有沒有更好的辦法等等,因此寫的程序也比以前少了不少。我自己覺得代碼量少的話根本用不上什麼高級演算法,設計模式等,但是又覺得如果老是不思考重複寫也沒什麼進步,把握不好這個思考的度。請問我現在這種狀況是特例還是學編程的都會遇到的?有什麼好的建議嗎?


這有啥,繼續寫就是了。而且既然已經有代碼積累,那就可以用正經的數據結構替換掉原有的adhoc代碼,讓它逐步變好。這樣即便不增加新功能,也可以同時練編碼能力、重構能力、數據結構、演算法。

當然,還有一招,把讓自己不開心的代碼開源出來,讓大家開心開心。


別怕,大家都是這麼混過來的。以前我不會寫代碼的時候,你知道我是怎麼過來的嗎?是背代碼,把書上的代碼記住然後去實驗室的電腦敲進去,看看我,還不是挺過來了嘛。現在我可是無限的懷念每周六獨自去實驗室敲代碼的日子,我覺得這是我一輩子的財富與最難得的經歷。現在你想想,你比我當時好多了,只是覺得寫的差,我那時候是完全不知道怎麼下手。至於編程規範,設計模式這些,培養起來都很容易的,而且每個公司都有不同的編程規範,如果你現在很在意,可以參看以下Google的代碼規範。然後對於演算法和數據結構,有很多書籍的,如演算法導論。無論如何,多寫,多練。寫到一定的量和程度,你會有頓悟的感覺的。當你有一天回過頭,覺得怎麼這麼糟糕,然後要改的時候,你已經在運用重構的思想了,隨後可以去看看《重構:改善既有代碼的設計》這本書。


很早以前,我在美術館看俄羅斯大師原作展,都是列賓、列維坦這種等級的大師的小習作。那天我站在一張比巴掌大不了多少的列維坦的畫前哭了個傷心。

雖然在那之前我在畫冊上見過很多名作,可印刷品和原作的區別很大,只有站在原作前,你才能看清楚那些筆觸,揣摩出那幅作品如何畫就。

那是,我第一次看到那種水平的原作,站在作品近前,我清楚地明了自己和它的距離有多遙遠。那是我窮盡一生的時間努力,也無法企及的高度。我覺得我繼續學畫還有什麼意思,忍不住,就哭了個涕淚橫流。

在看一些經典棋局的棋譜時,也有這種感受。譬如說1818年拿破崙被流放到聖赫勒拿島之後與貝特朗將軍下的那一局,譬如說1851年安德森對基耶塞里茨基弈於倫敦的那一局,譬如說1967年鮑比費舍爾和米亞格馬蘇蘭在蘇西國際聯賽上的對局,譬如說1997年那場著名的人機大戰,卡斯帕羅夫對深藍。即便是卡斯帕羅夫,也還是向深藍認輸了。那麼,有了計算機這樣強大的存在,人類就別玩下棋了嗎?

不是這樣的。

不是說,反正我再怎麼努力也無法參加奧運會,那我還練習滑雪做什麼。

不是說,反正我再怎麼努力也拿不到格萊美獎,那我還練習唱歌做什麼。

在列維坦的畫前哭過的我,畢業以後做了美術老師。有句話這麼說:藝術能誘使一個人的才能從其繭中顯露出來,蝴蝶終會飛翔,種子終會發芽。我不算一個很好的老師,水平很有限,但足以滋養繭種與土地,給予孩子飛翔與萌芽的力量。

能力有限在下棋上無法有所成就的我,後來做了教練,雖然水平只夠教入門課,但我教過的好幾個孩子依靠稟賦與努力,取得了我自己都夠不到的成績。帶著他們去參加比賽,看著他們領獎,也挺有成就感的。

就算你眼下寫程序真的還很差,還不夠格給別人做指導,至少你還能看懂那些高水平的代碼高妙在何處,像我,都看不懂呢。隨著你的努力,就算不能躋身頂尖高手之列,至少你能比昨天的自己更高明一些。

雖然不是每個人都有能力攀上珠穆朗瑪峰,但即便是矮小一些的山,山頂的風光也不是永居山腳之下的人所能領略,而這,就是攀登的意義。


第一次做遊戲的時候,由於不知道for-next語句怎麼用,我還人肉展開循環(逃


不覺得過去的自己是傻逼的話,說明你沒有進步。

不覺得現在的自己是傻逼的話,說明你看不到多少進步空間。

剩下,缺的就是持續地讓自己變得不那麼傻逼的努力。

怕啥啊。


重構。


這個問題適合我回答,因為我的程序一直寫的很差,畢業十年多了,還是很初級的程序員,甚至連初級程序員都算不上,只能算是半個程序吧.

但我認為程序技術只是一種技術工具,是為用戶需求服務的.如果你只是想成為寫代碼的程序員,下面我寫的你不用看了.

其實跳出成程序員思維會有新天地,合理利用現有技術水平可以創造最大可能.我到目前為止也只是會寫簡單的網站程序,但在個人站長的路上已經走了十年.我所有的網站都是自已敲的代碼,連最基礎的三層架構模式都不會.

我大專只學了半年c語言,上過兩節aspnet的課,其他java,數據結構等都沒去上課,玩了兩年半.

2006年剛畢業的時候,想進軟體行業,但基礎太差,筆試都過不了,只能找個做網站的工作上了兩個月的班.然後辭職開始一個人摸索做了第一個自己的網站搜博網,一個博客聚合搜索引擎門戶,網站失敗後去南方打工.

最初幾年,我連類都不會用,全程寫函數方法,一個頁面寫好長好長,大部分都是資料庫讀寫的重複代碼,後來慢慢學會了點類的概念,自己寫了個生成類的工具,減少85%的工作量,一直用到現在.現在技術還是很差,別人的代碼都看不懂,但不影響自己開發網站.

前幾年最能拿出來手的一個網站,最好的時候才三年1500w,還不太成功,我一直在努力.

現在已經快35了,還是每天奮鬥在代碼的最前線,以最差的技術.誰讓我也喜歡寫程序呢?


20%的時間用來設計

30%的時間用來編碼

30%的時間拿來測試

20%的時間用來重構

這個並不是開玩笑啊,重構是一件很好玩的事情。

前提是你必須要衡量好,怎麼樣在項目的Deadline和代碼的質量之間做權衡。

重構有一本好書,好像是叫重構之美還是什麼的。

別的沒記住,就記住 一句話,Bad Smell,保持對程序的敏感,不斷的能嗅到BadSmell。

重構代碼會讓你明白,下個項目該怎麼寫。


學Python吧,它會強制你的代碼好看些,哈哈。


如果連做都不敢去做,那麼,還有誰能夠拯救你?我是處女座,有完美主義強迫症,做什麼事都想一次性做到最好,然後就覺得這種方法不好,這種語言不行,最後拖成了拖延症患者,還好後來我明白,沒有任何人能夠一次性做到完美,你不行,我不行,我們大家都不行,但是,我們可以盡自己所能做到最好,這一次我做到我自己水平的最好,然後積累經驗,查缺補漏,然後再寫一遍更好的,就像迭代一樣,一個版本一個版本的更新,最後才能做出更好的作品。最後,奉上四個字:先做再說。


代碼一般來說除了作者本人,其它人很難讀懂,也不願意去讀

所以你只要確保代碼的邏輯是正確的就好了,具體風格如何不要去管它。其實寫出正確且穩健的代碼是需要很多智慧的,而且和代碼風格比起來是重要得多的智慧


繼續寫下去,寫到不再害怕,而是欣賞了為止。


題主的問題到底是啥:

寫的差怎麼辦?

覺得寫的差怎麼辦?

還是,不敢寫怎麼辦?

對過去的自己的不滿就是現在的自己的進步的一個表現。我覺得題主現在的狀態非常好,是成長最快的階段,加油。


你看到自己半年前的代碼,嘲笑過去的自己的青澀和幼稚;這是好事,說明你在不斷成長。

當你偶然回首過去的成就,卻被自己感動涕零的時候,自己的精神已經垂垂老矣,不求上進了。

編程,稱其藝術也好,搬磚也罷,是一件技術更迭極快的領域。開始的無力感,每個人都有過;更多的人早已放棄,而你沒有就說明你比他們強上很多倍;就算有人達到技術的波峰的時候,如果停滯而怠,也很快被後來者超越;唯有不斷追趕,才能屹立於風口浪尖。

共勉!


這種感覺很難得

應該珍惜

繼續寫

成為高手必不可少的一個步驟就是學會代碼批判

包括對自己的批判


臉皮厚一點,誰對你的代碼有意見就噴他,但是得想清楚噴他的理由,五年後你就是凡人眼裡的大神了。


怕啥,誰忒么沒事review你代碼。


找個老印多的公司工作上幾個月,你就會發現你那些自己特不好意思的代碼,都比老印的不知道強了多少。然鵝就這樣人家老印都覺得自己簡直牛的上天了。然後你就會覺得謙虛是要不得的,有一說十,有十,那四捨五入等於一萬才能跟老印一起混。。。

現在待的公司基本沒老印,只有一位印度姐姐人也很溫和,我很開心~


while (!satisfied) {

refine your code;

}


十年前我覺得其他程序員都是怪物

五年前我覺得還有一半是怪物

現在我覺得有些人始終是怪物,但是也有些人覺得我是怪物了


推薦閱讀:

未來想從事Linux 後台開發,需要學習linux內核嗎?像讀內核源碼。還是學好linux網路編程,C,演算法。學習內核的意義有哪些呢?
c語言未來的前景(比如就業)是怎麼樣的?
C語言怎麼寫窗口化程序?
如何理性的評價各種編程語言的優劣?
使用 C 語言進行伺服器端編程,未來職業前景與發展前途怎樣?

TAG:編程 | C編程語言 | 嵌入式系統 | CC |