我數學不好、編程零基礎、不以編程謀生,自學 Python 失敗,為什麼放不下編程,總是想突破它?

我 (40歲) 數學一直不好,主觀上我沒太努力,關鍵是客觀上我沒數學天賦。我沒學過計算機,編程方面是徹底的零基礎,但我很羨慕「軟體工程師」、「網路工程師」、「 IT 黑客」 之類的大牛們。可能是我太不務實,始終有「編程情結」,前些年玩過 Ubuntu 系統,完全是依靠自學,只玩了半年,之後顯卡驅程出了故障,接著又是其它問題,兩個月里一有空就折騰,不是在查網路資料,就是在重裝系統和調整設置,差一點沒把我累死,心太累,眼睛更近視了,最後我一狠心,放棄了 Linux 。過了幾年,又了解到 Python 和 Ruby ,於是買了 C語言 教材和 Python 基礎教程 。我倒不怕背 命令,但讓我有挫敗感的是,我確實讀不懂那一行行、一片片的天書代碼,這些究竟是什麼意思?為什麼會這樣敲?怎麼知道這樣就能運行?我連習題都做不出,更不必說演算法和邏輯。其實,不會編程對我影響不大,頂多是不玩 Linux ,不玩 Python、Ruby、或其它流行的程序,甚至不玩 LaTeX 也無所謂。但我依然難以徹底放棄自學編程的「強迫症」。我的時間和精力都非常有限,即使要自學,也該學些更有益、對工作和生活更有幫助的。但就算我主動放棄編程,還是感覺自身在智力和能力方面受到了打擊,無論如何都是一種所謂的遺憾。請問:我應該如何化解這種自卑感和強迫症?

補充:自學編程,難點有四。一是:如何區分 編程語句 和 無效語句 (自然語言);二是:一行行的代碼,除命令詞之外,並無詳細的講解;三是:對零基礎自學者來說,照貓畫虎地粘貼代碼,也無法解決難題,結果會是系統或程序崩潰;四是:鼓搗半天忙了一身汗,一片片代碼到底是為了達到什麼目標?

感受:其實我自學編程屬於不務正業,因為我年紀大了,學會了用處也不多,何況還學不好。我知道自己應該多學些什麼,雖然都40歲了,但依然願意在有限的時間內,利用有限的精力和有限的智商,不斷充實自己。只可惜,我的強迫症嚴重影響了我自身的發展,白走了很多彎路,浪費了大好時光,讓青春在糾結中逐漸死去。所以,強迫症、壓抑感、厭世感、恐懼感、每天都在折磨著我,令我食無味、寢無寐,被各種細節瑣事圍繞著。這已不僅是 IT 編程領域的失敗,而是我整個人生的失敗,也再無機緣反敗為勝。


題主的三大偶像,除了軟體工程師,其他兩個網路工程師和黑客都不用太深奧的編程能力啊。

網路工程師和黑客也就是寫點腳本,題主不如先學個shell怎麼樣?這個比較簡單吧?如果題主看不懂腳本,可以畫流程圖https://wapbaike.baidu.com/item/%e6%b5%81%e7%a8%8b%e5%9b%be/206961?adapt=1fr=aladdin

黑客用到了python,也不複雜。python面向過程部分和shell差不多。面向對象方面內容,用不了多少,知道怎麼繼承類就差不多了。因為很多黑客庫會要實例化某個類的。實例化以後,工具就能用起來了。

更新:
仔細想想,題主學vba可能更合適,office文檔人人都要用,學vba真的對題主有真實的幫助,身邊會有眾多非計算機人士可以交流。其他編程語言,對於題主可能是空中樓閣,學的太淺沒啥成就感,學的深了就抓狂。還不如回歸實用主義?


樓主別灰心,最近我正在研究教我兩歲半的女兒編程,我認為就算是腳本語言,標記語言對初學者還是起點太高,所以我轉向圖形化編程語言和領域語言,你可以看看這些


我十幾歲就沒讀書了在社會混,從小到大就玩過全平台各種主機遊戲。忽然有一天我有一種很強烈的渴望,我想做遊戲。開始學c語言,學了很長時間學不會,實在不知道怎麼用它寫一個遊戲出來。在家好久沒幹活家裡人趕了我出來。那年我快十八歲,用很低的薪水在一家網路公司打雜。真的很羨慕那些寫代碼的同事,每天都去纏他們學一點,他們給我推薦了一些教程。慢慢的我開始能用php和javascript寫一些東西了,慢慢的公司居然很多編碼的活給我干,我拚命干,除了吃飯睡覺寫吐了,寫的都是面向過程的代碼,現在想想PHP和javascript都可以過程式,我寫多了自己不自覺將代碼分類來寫提高效率。一年後我跳槽了,是做多媒體軟體,用的是和js很像的ActionScript3。我非常欣喜的發現OOP這種概念和我之前總結的概念類似。一年後我終於跳槽到一家頁游公司,我在自學中發現我知識的淺薄,我開始補回高中數學,物理和英文。高中數學在遊戲中非常有用,我業餘寫了大量小遊戲。去圖書館借物理的書,使用各種As3版的2d物理引擎。在編程中我對變數名潔癖的執著,英文辭彙從2000背到5000。後來公司安排我去寫java服務端不做就滾蛋,我對java感到畏懼。不過上手之後發現很多網路通信的概念和mysql資料庫和php相通,而java和as3相似度90%。寫了兩年,經歷各種框架和debug的折磨。期間我發現自己學歷太低了,總是給人鄙視。一氣之下報了中大計算機自考本科,然後過了。期間跳槽到一家寫軟體的外企,終於有雙休了,公司偶爾需要維護一些c#的軟體,接觸多了才發現這東西和java太像了。業餘寫了一個2d的arpg,發現外包給美術手繪的2d圖片實在太多了。總是幻想一個高效率的方式,然後發現了3d引擎這種概念。就開始研究3d引擎源代碼,發現看不懂。慢慢的我把線性代數和相關的數學知識補充起來,寫了個軟3d引擎。之後公司外派我出國,在國外公司用的是QT,奶奶的這個是c++,不啃就要回國,慢慢的寫了好幾年。一邊在這邊讀了個研究生,c++底層性能都研究透了。由於家庭原因回國了,跳槽到一家一線遊戲公司,公司購買了unity的源代碼,要我這邊啃,一邊寫一些插件什麼的。我覺得unity的2d開發有點渣,就根據一個開源項目agg做了個高效2d插件進去。忽然有一天任天堂的新主機發售了,我忽然發現十多年來我已經很久沒好好玩過遊戲了。這麼多年的積累,財務也自由了,於是我辭職了,去做一些我想做的事。這就是我的經歷。為了學會編程,我耗費了十幾年的青春,每天都是超過12個小時的編程。這期間多少疲憊和汗水,才能成為出色的程序員。如果只是想單純玩一玩,註定淹沒在平庸中,你要考慮好這種代價。


執著是好事,但不要鑽牛角尖。我感覺到題主好像是把「會編程」視為「(高)智商、(高)能力」的一種體現,想通過自身努力學會編程以便證明自己。這種想法也不能說徹頭徹尾的錯誤,但題主把自學編程的失敗歸咎於「智商低」,進而產生自卑感便是大大的不對了。關於「智商」知乎已經有許多討論,我覺得 @edmond 有個很精彩的回答,題主不妨找來看看,相信會有收穫。
關於編程,我覺得你可以在公開課上找到一些非常基礎的課程,甚至還可以選擇這本書《與孩子一起學編程》,體會到編程的樂趣才能堅持的更久,加油!


個人覺得,程序員必須是個懶人,習慣發號施令的那種。

寫程序無非就是把一件事情拆散成命令然後排列起來。再按需要插點判斷和循環。

學編程需要的從來都不是數學,而是思維方法。


越是簡單的東西(其實不簡單)越難以用最簡單的話講明白,通常最好的方式是比喻,那就結合自己的理解(水平有限,全當拋磚引玉)說一個類比不太恰當但大家都能理解比喻吧。

就拿我們兩個人當面說話來做比喻吧,我想告訴你:40歲依然堅持學習真的非常贊。
我的編程目的是:向你傳遞我的贊意
我使用的編程語言:漢語
我寫的代碼:「40歲依然堅持學習真的非常贊」

好了,我們來分析一下這段話:
1.什麼是有效和無效的「代碼」呢?如果一個不懂中文的人想破腦袋也想不出來哪裡是有效哪裡是無效的,語言都有它的規範,編程語言也不例外,把一門語言的系統學習一下,解決這個問題其實是不難的,所以建議專註一門語言把共性的東西掌握,其他的語言上手就很快了
2.解決問題這一塊:能上知乎的朋友基本都會說漢語的,但能說漢語跟寫出10w+還是有很大的差異的,這中間可能需要大量的閱讀,寫作,不斷磨練技巧以及其他,換做編程也是一樣的,學會一門語言跟使用它產出產品,差距還是不小的,需要學習有關產品,程序組織,數據結構,部分演算法等等,一棟樓並不簡簡單單靠堆砌材料就可以完成的,相信這個應該能夠理解
3.我的目標是傳遞給你贊意,所以我會用特定語句用符合場景的話語去表達,而不是用莫名其妙的話和不和場景的語氣去表達,編程也是一樣的,如果我想寫一個靜態頁面,那麼就沒必要搭建linux伺服器,甚至去買個域名什麼的(自己喜歡折騰當然是支持的),打開編輯器,寫幾個標籤雙擊就行,所以說,先弄明白你想做什麼,然後開始學習相應的技術棧!


當然依我的經驗,題主陷於自身處境,很多問題可能並沒有表述清楚,我結合自己學習過程中遇到的問題借這個比喻說一下,說不定能對題主學習上有一些幫助。

剛開始我不明白為什麼qq能夠聊天,網路到底是怎麼回事,我在淘寶點一下為什麼就能夠收到貨物,後來我理解了,就好比我們兩個人說話,我說「你」,你理解就能理解我在指代你,「你」這個漢字以及它的聲音並沒有任何意義,但這並不重要,重要的是我們兩個能理解它的意義,它就是我們協商的口號,推而廣之,但凡能夠重現的信號都可以拿來做溝通的工具,比如0和1,我們可以協商0是你,1是我,信號太多,那就用更多的01對應更多的信號,只要我們雙方協商好,我發送什麼,你就能接到什麼,恰好無線電,光線什麼的發高低兩種信號可以承載這種信息,好了,數據流通了,很多問題就不難理解了,通信協議,七層模型,通信安全什麼的都是圍繞這個數據流展開的。

我之前還有一個被困擾了很久的問題,就是計算機為什麼能夠計算:一個死的物體為什麼能夠對你的指令有反饋?這是不是一個司空見慣到對於一個非專業人士來講近乎無解的難題?說實話我現在也說不好,但是我知道問題在哪裡,需要往哪個方向尋找答案,最根本的還是回歸到物理定理上,沒錯,就是物理特性,就跟我們談話最根本的還是要回歸到空氣振動,傳遞聲音,你要問振動的實質是什麼,這個我也回答不了

編程很多時候就是在跟數據打交道,語言是工具,想要通過編程達成目的,首先得掌握語言,其次要有掌控數據的能力,其他的也說不了太多,希望你能找到自己喜歡的方向,快速構建知識網路,然後專註繼續學習吧!


看視頻學Unity3D+C#,永除煩惱


我情商不高,戀愛經驗為零,我很喜歡那個叫Python的女孩,可當我向她表白,她卻拒絕了我,我心裡總放不下她,總想突破她怎麼辦?


其實這時候,你可以看看旁邊的女人嘛。喜歡底層勞動的勤勞中年婦女如C++,長得好像一個模子刻出來的網紅少婦如Java和C#,魔鏡魔鏡告訴我誰是世界最美的女人之PHP,甚至可以嘗試下水靈靈但是未成年的GO! (逃~

Python? 她第三方備胎可多了,就是個綠茶,你不要喜歡她,儘管她看起來很漂亮,小聰明也有,可是真正干大事的時候,她腦子就跟不上趟了,唉,別問我怎麼知道的,都是淚啊,作為過來人,我只能給你這個忠告,一定要謹記啊!

(夜晚,家中)
Python小姐姐,我想...


這個問題本來不想點進來,因為有太多的同類問題了

本文針對的是所有把編程做業餘愛好的朋友。

先說結論,樓主完全可以學會編程。也包括任何人都可以自學學會編程,編程本身並不需要你多少數學知識,但當你用編程解決具體問題時, 你就會遇到領域相關的問題, 比如當你要做一個畫圖軟體, 你就會用到許多數學知識, 你要做一個記事本, 你也需要一些演算法用來處理字元串.

一是:如何區分 編程語句 和 無效語句 (自然語言);

所有不符合語言語法的語句全都是無效語句.

二是:一行行的代碼,除命令詞之外,並無詳細的講解;

這個屬於你的教程的問題, 對於新手, 應該對所有字元都給出解釋.

三是:對零基礎自學者來說,照貓畫虎地粘貼代碼,也無法解決難題,結果會是系統或程序崩潰;

這個屬於Debug能力, 不要怕程序出錯, 就是大牛, 也不可能在平時開發的時候一直一遍過. 能不能快速的分析出原因並解決才是體現能力的時候.

四是:鼓搗半天忙了一身汗,一片片代碼到底是為了達到什麼目標

書上的代碼一般是為了解釋語言的特性.

學習資料
目前的計算機教材基本都是專業性的,沒有針對普通愛好者的編程書.
尤其令人髮指的是某些書,以國內作者居多,比如說一個軟體教程吧,他把菜單里所有選項給你流水賬似的介紹。
我用你介紹?我自己點開菜單看不懂文字?到編程書也一樣,他給你一個一個的數據類型,關鍵字介紹,所有細節,羅列出來。我要想知道數值型的長度我不會去文檔上查?這類就燒了。浪費你的時間和精力。

我建議題主學編程不要從c語言開始,c語言的地位和重要性沒有想像中的那麼大,你如果不想研究系統和網路的原理,沒必要學。有自動步槍不用,非要用手動上膛退殼的單發火槍,這不虐待自己嗎?真有用c語言的需求,可以以後再學,那時候學起來會更容易。

關於操作系統,首選mac,其次,如果你對計算機不是太熟悉,或者懶,你沒必要用linux。折騰那玩意浪費時間,就好比題主遇到顯卡問題。Linus也曾因為驅動問題換髮型版,以Linus的能力,他完全可以自己寫個驅動出來,但是他不會浪費時間做這個。如果你覺得linux系統問題多,消耗了精力,那乾脆就用windows。沒必要迷信linux,它的優勢對於你未必是不可替代的,真的需要linux環境,開虛擬機也能解決問題。

關於語言,我覺得還是python吧。
然後初學者,多用idle,在windows上安裝時就自帶了這個工具。

關於python教程,沒有推薦的。我倒是看到過一些ruby的針對0基礎的教程。老外寫過一些,國內沒出版。

也許head firsrt的可以看看。


和我大一時學C時一樣一樣的感受。大二C++,java然後又教我做人……欲哭無淚,看到程序想死的心都有,我真的很佩服題主的毅力。

不過到了大三後,反而愛上了編程。為什麼呢?

建議題主學習過程中學習其基本語法和命令後多以簡單的Demo為興趣導向,用效果來提升學習驅動力,然後回過頭反思為什麼。

為什麼這行語句能輸出東西,為什麼這段代碼能構建布局,為什麼這段代碼能實現簡單交互等等……


放不下還是你想學。
回答一下四個問題:

Q:如何區分 編程語句 和 無效語句 (自然語言);
A: 計算機的語句是為了改變計算機的狀態(去看圖靈論文)。凡是不能做到這一點的都是廢物。

Q:一行行的代碼,除命令詞之外,並無詳細的講解;
A: 你想要什麼解釋?編程語言本身不會帶解釋的,要解釋看文檔。本身那些關鍵詞都是來自英語的,要理解還是要學英語。至於別人代碼里的命名,如果是規範命名的話基本一眼看懂,如果不規範還沒注釋,那就只能問作者了,但這不是語言的鍋。

Q:對零基礎自學者來說,照貓畫虎地粘貼代碼,也無法解決難題,結果會是系統或程序崩潰;
A: 不要粘貼!就算是學習,也要自己把代碼打出來。打完後一定要自己在腦子裡把代碼的流程過一遍去理解他,看不懂的去 Google ,不然複製完了不會有任何提高。

Q:鼓搗半天忙了一身汗,一片片代碼到底是為了達到什麼目標?
A: 為了解決問題。代碼、機器都是為人類服務的,如果沒有需求,那寫代碼確實沒意思。

我覺得作者基礎還不行,先學習一下原理演算法(不用很深,有點印象,有計算機的思維即可),然後再去學習編碼。


自學這種東西,你不說它失敗它就沒有失敗
所以你能做的,就是厚著臉皮說,我還在學


我不知您是學什麼出身的,但是看您的年紀,我猜測可能是您原本的思維模式造成的障礙。您試著不要用常識去理解編程,而是把它看做一條條的規章制度來看待。
實際上,程序員做的編程,就是給電腦規定第一步做什麼,第二步做什麼,並且這樣的規定有固定的格式和遣詞造句(也就是所謂的什麼語言)。
如果真的對大段的程序感到頭疼,不知如何下手,我出個餿主意(之所以說是餿主意是因為肯定會有人說我推薦的東西不好,但我覺得挺適合您),您找一些易語言程序的實例和代碼,不用學,看一下易語言的代碼,對照您準備學的編程語言,體會程序和自然語言的異同。相信會對學習有所幫助的。
另外,編程本身不是很困難的東西,達到普通水平是只要認真學都能達到的,祝您成功,實現自己的願望。


看起來你好像是把編程當成是你智力的證明了,這種心態本身就不太對。

我認為對待 編程,應該是把他當做一項技能,一種工具,最終是要用這個工具做出某種產品。

你就把編程當成是木工活就行了,總之就是不要把某種東西神聖化。


程序 怎麼寫是 語法規定的。

你不明白的部分,和它能做什麼?

「它實現的是你的邏輯」。

就是說:它實現的就是你讓它做的。


你說的「 一行行的代碼,除命令詞之外,並無詳細的講解 」

因為這不可能有。

這「並無詳細的講解」的部分,是你該自己讀懂的

比如:

a=1;

if(a&<0){

print("a 是小於0的");

簡單嗎?

(它只是判斷如果a小於0,就顯示「"a 是小於0的」,否則什麼不幹)


程序員都是這樣,通過代碼讀懂程序。


其實,我感覺你是在鑽牛角尖。

我不知道你是什麼工作的

但你已經40了,一定也有老婆孩子了。

你與其 和一行行代碼較勁,

不如把這部分時間和精力用在工作和家庭上。

也許能獲得更好的收益(回報)。


我覺得你需要一個領路人,比如參加個靠譜的培訓班,畢竟不是所有的人都能夠通過自學實現入門。
即使入職之後你會發現,自己不會的東西還有很多很多,經驗和技術都是需要積累的。


可能是知乎上多了


我個人覺得,從最簡單,最實用的,開始學習,就學習c語言把。可以在網上買書。我個人建議蘇小紅第三版不錯,而且網上也有她講課的視頻,還有,學習氛圍很重要。你可以自己去一個安靜環境,開始有點難,你要沉下心,而且多上機。不會的在網上查,自己在在電腦上打出來。寫代碼還需要專門的軟體,網上有,自己下載,百度就可以了


很多人,都把自己對某種東西的焦慮當做了對那件東西的渴望。

想要錢,卻對財富相關的知識不感興趣,拿了一筆錢就想著買這買那,而不是想著怎麼能賺更多的錢,你這是對錢的焦慮而不是渴望!

同樣,想學計算機,卻對計算機沒有靜下心來研究的心態,學計算機為了快速成名,為了好找工作,你這也是對計算機的焦慮而不是渴望!

焦慮讓你無法真正投入,讓你患得患失,最終敗下陣來。

如何區分 編程語句 和 無效語句 (自然語言),你真想學自己應該試過吧,就沒有總結出來規律嗎?

一行行的代碼,除命令詞之外,並無詳細的講解。沒有講解就不學啦?現在這個網路上,除了個別高精尖的東西,還有啥不能輕易找到的?

對零基礎自學者來說,照貓畫虎地粘貼代碼,也無法解決難題,結果會是系統或程序崩潰。你告訴我世界上有哪一樣東西是可以完全照貓畫虎搞定的?

鼓搗半天忙了一身汗,一片片代碼到底是為了達到什麼目標?真想學的人,根本不會意識到自己流了汗,而是在思考代碼哪裡有問題。

所以,正視你內心真實的願望吧。從你提問中,可以看出,你真正想要的是,成為「軟體工程師」、「網路工程師」、「 IT 黑客」 之類的大牛們,然後享受別人羨慕的眼光。而不是對計算機本身感興趣,想去探索,想去了解。

凡是不願意付出努力,又想要xxx的人,都是耍流氓!

最後,世界上沒有彎路,凡是你全心全意走過的路,都會在生命中留下有意義的痕迹!


行動是最好的反擊
http://www.bilibili.com/video/av8802480程序員的數學
也可以進入up主空間里看其他的教程Python/go之類的


推薦閱讀:

你曾成功自學過哪些技能?有何經驗之談?
提前自學到底是利大於弊還是弊大於利?
如何學會自學?

TAG:編程 | 信息技術IT | 軟體工程師 | 強迫症 | 自學 |