作為程序員,女朋友想學習編程,我該做些什麼?

我是個Python 與 Node 的粉絲, 是否從中選擇一門來教女朋友?如何來教女朋友?
如果選一門新的語言,好處是可以和女朋友一起學從0開始,但是會增重我的負擔。
如果選擇一門新語言,Ruby合適嗎?因為我也喜歡Coffee,也喜歡Ruby的code for fun。


之前試著教過自己的女朋友寫代碼,事情發生在一年前。當時她正在寫《極客愛情》,一個中文女和一個工科男的故事。當時我覺得可以教她寫代碼,就先從幾個點開始:

1. 先找一個她的興趣點——如某個應用。
2. 選定一門簡單的語言,No Java, No Lisp。最好是JS,或者Ruby/Python之類的動態語言,考慮到Python的Logo是一條蛇,我覺得JS會好一點。
3. **手把手教她寫代碼這點很重要**
4. 帶她把她的應用的原理過一遍,或者做一遍。

之前,還寫了一篇文章介紹了一下:

原文鏈接:為何開始教中文女友學編程

過去編程這種事只有專業的人才能做,見過不同的人掌握著很好的編程能力,有學美術的,有學金融的,應該也會有學中文的。學編程這種事情需要一種動力,對於不需要以編程為生的來說。編程可以訓練人的邏輯思維,相對於數學來說,編程更容易加強人的思維能力,數學已經被教材和大多數的老師教得枯燥乏味。


事情的起因

簡單地說事情的起因就是:

  • 女友最近在使用一個叫」詞CI」的APP,一個用來填詞(即唐詩宋詞中的宋詞,如蝶戀花之類的都是填出來的)的軟體(網上有各種關於作者的介紹,或者說這算是對於作者APP的一種推廣)。
  • 除此還有一個好的契機是蘋果推出了新的語言Swif,看上去這種語言已經適合一般人來寫程序。
  • 不過主要原因是,她有點爭強好勝。

接著便拿女友的iPhone(我用的是Lumia 920),試用了下APP,感覺了下大致就是把詞的平仄都存在資料庫中,再讀取出來一個個做比較。於是拿著她的Windows(自己的電腦主板壞了,用的是借的一台古董級的西門子,裝的是Ubuntu)找了個手機助手下了個APP,解壓完發現果然有一個sqlite3的db文件,再一看資料庫的內容,教她理解這個邏輯應該不難(難的應該是UI和用戶體驗)。


蛇或者寶石

」Python是蛇,Ruby是寶石」,你會選擇哪一個。


大部份人應該都是傳統課堂過來的,也就是學C語言的,C語言最強大的是指針,於是很遺憾的是這造成了一種編程很難的錯覺。考慮到此,我便將選擇放到了Python和Ruby之間,兩者感覺起來似乎難度不大,但是這是對於程序員來說。

  • Ruby講究的是——做一件事,可以有多種方法。這和它的前輩Perl真是像極了,所以要讀懂Perl沒有那麼簡單,Ruby在我剛接觸到一些產品的代碼時候也是如此。
  • Python講究的是——做一件事,只有一種方法。換句話說,Python追求的是簡單。

於是在蛇和寶石之間選擇了蛇。而且

  • 個人用得比較多的是Python,因為庫比較豐富。
  • 找不到適合的Ruby書本。

於是上了亞馬遜買了本《Head First Python》,可以翻譯為《深入淺出Python》,意思就是可以很簡單地學Python。書中後面講的是移動開發,以及WEB開發。


目前的結論

兩個晚上的三個小時過去了,演示了一個基礎版的漢字到平仄的轉換,有興趣的話可以在稍後的內容中關注。主要難度:

  • 專業名詞太多了。這是一本寫給程序員看的書。

另外的結論便是:

  • 對於一般人來說,教他們開始學編程沒有想像中的難。

如果你打算教你的女友學編程:

  • 有耐心的教。
  • 親自去教。而不是只給一本書,只給一本三天入門某某語言的書。
  • 找個她感興趣的突破點。如果她學的是生物你應該試著去找些相關的。

我所做的大致就是:

  • 讓另一半理解你的工作。
  • 讓她能理解一些基礎的原理。

當然如果你不會試著那樣做的原因可能是,帶有點歧視的大男子主義,編程這種事男生可以的,女生也不會有問題的。腦子不用是容易生鏽的~~,現在的想法便是簡單地做一個demo出來,在亞馬遜的平板上用QPython,直接上手APP有點難,當然除此之外可能需要更多的語法。邏輯上能理解的,語法上便也不過來。


附上她寫的極客愛情:

01.愛它,還是愛我
02.去實驗室約會吧
03.我真的不是修電腦的
04.我的編程養成記
05.極客的神邏輯
06.我們的戰爭
07.和電腦的親密接觸
08.邋遢IT民工拯救記
09.當情書遇上技術博客
10.技術宅不解風情
11.和不會聊天的人談戀愛
12.不想加班的程序員不是好程序員
13.技術宅的網購屬性
14.找女朋友難,找工作更難
15.極客的文藝情懷
16.二十二歲開始的初戀
17.當愛情遭遇遠程調試
18.基友一生一起走
19.夢想還是要有的,萬一實現了呢
20.待我代碼編成,娶你為妻可好 (完)
番外之一:愛情中的那些碎段子
番外之二:程序員如何邂逅真愛之偽攻略篇
番外之三:極客男友的情人節禮物大作戰

和她弄的微信公眾號:


http://weixin.qq.com/r/zDqpsQzET1EwrUjS92-e (二維碼自動識別)

然後我也陪她搞微信公眾號:


http://weixin.qq.com/r/mnVYQHrEVicprT4j9yCI (二維碼自動識別)


這事兒我明白,老婆跨專業學CS,以前沒有編程基礎。入門語言是Python和Java。

說說好多CS專業的人習以為常但是對初學者非常困惑的概念吧

1. 什麼是function?和數學上的函數有什麼關係?
2. method又是什麼?和function又有什麼關係?
3. static method又是什麼?和普通method又有什麼關係?
4. instance是什麼?class是什麼?還有啊你都沒跟我說面向對象是什麼還是從頭說說吧
5. lambda是什麼?(不要想著介紹清楚什麼是closure…)

所以真的想入門的話,學一門functional programming language吧。我沒有開玩笑

  • functional PL里函數的概念天然和數學的函數概念等價,除了函數和type之外幾乎沒有額外的概念需要學習(closure/currying之類概念對於沒有任何編程基礎的人來說沒有負擔)
  • 絕大多數函數式語言又有強大的類型推導或者動態類型所以初學者不用和類型奮鬥或者在選擇面前掙扎(為什麼有Array之後還有ArrayList?你真的想在剛開始就介紹列表的插入效率、伸縮效率嗎?)
  • 以及絕大多數函數式語言都有REPL所以不用跟初學者說:不用管這個int main(或者static void main)是什麼只管死記硬背記住先。

教咯,你會什麼教什麼,題目做不出來就懲♂罰♀她。


你是python和node的粉絲,又覺得學一門新語言是「負擔」。。。所以想學、教ruby,突然又開始喜歡coffee,但又覺得ruby是code for fun

我看到了一顆對cs滿懷期待最終被狠狠擊碎的??了

如果非要你來教的話,教java php吧。。


1. 如果你們不在一個地方,你通過聊天教她,呵呵,教了一會兒話風就完全變了。。。
好難呢!不會呢!⊙︿⊙
這都是什麼鬼!(⊙0⊙)
我不要學編程,你們這幫變態的程序猿!~&>_&<~+(喂,窩還在讀書啊,怎麼就成程序猿了!)
不會呢,怎麼辦呢!
2. 如果你們在一個地方,不是家裡,你教她,呵呵,教了一會兒話題就變了。。。
好餓,咱們去吃東西吧!└(^o^)┘(尼瑪,明明才坐下來不到十分鐘)
這些東西好無聊啊,咱們去吃東西吧!(^o^)/(是誰說要學的來著,是誰來著)
好難啊,我們去吃東西吧!(☆_☆)(為什麼又是吃東西。。。)
3. 如果你們在一個地方,是在家裡,你教她,呵呵,教了一會兒,歐麥噶,這也是編♂程♀?(ˉ﹃ˉ)

所以,作為一個過來人,我跟你說啊,你能做的也就供一些參考資料了


基本上來說,女朋友說想學編程,性質與男生對女生說想一起看電影一樣。
如果題主真的遇到了萬中無一的真想學編程的女朋友…只說一句,千萬從面向對象開始…


你不覺得,糾結語言是非常不程序猿的表現么

程序猿應該糾結於字體和編輯器
所以你可以試試先教一下如何使用vim和emacs
然後選擇一門像是ML或者Oz這種有道理的語言去教導一下,順便講點type相關的或者設計模式相關的

然後就可以啪啪啪了
說起來,每次我和別人講Linux的時候我總是想從謂詞,名詞和副詞/形容詞成分開始講起怎麼破


話說,程序猿必備的技能是『需求分析』,
經典段子『用戶要的不是電鑽,而是洞』聽說過沒?

我想你首先需要搞清楚,你女朋友為什麼想要學編程。

如果是以下這種情況
-- 你女朋友是用戶,『編程』就是『電鑽』,而你就是那『洞』 -- ,
而你又真喜歡她,
還是想想有什麼活動是你們倆都喜聞樂見的吧。


稍微更新點~
我就在跟男票學習中。

因為本人是新媒體專業(以前是傳媒狗),跟互聯網的關係還算緊密。
然後越發覺得沒有點技術性的本領不太行,就想學點簡單的編程。
目前只是帶點興趣了解,並不會說靠這個來吃飯什麼的。
只因為自己智商有限(像大學裡java學得很爛,差點掛掉? ???? )。
男票不是計算機專業的,他學的是控制,然後碩士學了CE,沒有學CS

我以前有點點編程基礎,HTML算是比較所見即所得,能調動點興趣,所以我本身最開始只是想學點HTML。
然後我想要有點動態效果,所以又加了CSS

每次他會做好ppt,然後音頻加共享桌面來給我講解。
當然PPT很簡單啦,就是這樣:

然後這樣:

很基本的概念講,然後是例子咯。留點課後思考題,下次由我回答。
因為兩個人都很忙,加上異國時間差,所以現在才上了兩次課嗚嗚。(異國狗的憂桑

從我的角度:
如果不是將編程作為職業來學習,妹子只是對編程好奇。
那心態大概跟我一樣,只是想知道
「哇,那個點上去會變顏色是怎麼實現的!」
「那個下拉菜單又是怎麼實現的!」
……
然後如果自己也能夠做出來那成就感滿滿哦~
你在給她講的時候,可以更多地給例子,不要講一堆概念。
用一些生活中的簡單例子類比,這樣比較好理解

另外,建議可以手把手教妹子自己搭個博客!


嘛近期我發現這種上課方式效率太低 遠沒有我自己看書練習快ˊ_&>ˋ
畢竟編程這種還是實踐來得快
於是只在有問題的時候詢問他
不匿啦


作為女程序猿,第一語言是java(中學)不喜歡,導致很久沒有考慮過編程什麼的。我覺得ruby用來教很不錯! 在北京等城市還有Rails Girls的活動,一般免費,她可以去參加。Rails Girls一次活動就可以弄出一個web app,有教練/師資,有助於培養興趣, 而且在初級階段可你給你這個老師省心不少。儘管不是專門教ruby coding,但是有了更明確的目標coding學的也快,再說rails也是比較程序員友好的框架。

我覺得Python可以教,而且教學難度要小,外面資源也多,code academy, pyGirls等等。但是剛開始學,能用來直接做的東西比較虛。畫個圖啊算個數據啦甚至實現一個複雜演算法還算比較快學會,但沒有那種。。。看得到用的來的東西,不像到處都用的web app (難道教Django?!),看喜好了吧。

Node.js嘛...嗯,我覺得一開始學「編程」就寫一層一層的callback,感覺怪怪的,不大對。需要更多recursion theory,寫點functional program才會理解得更好吧,我覺得。我也一直不是很喜歡javascript,水微深,安全性也不高,但Node.js大勢所趨也算是從了。我用的[這個](https://github.com/rvagg/workshopper)學的Node.js,還算循序漸進,但是樣子不敢恭維,看她願不願意這種形式了吧。

我倒是聽到有很多在說用前端甚至圖像的代碼來教小孩子Javascript,因為更視覺一些。你也可以考慮一下。

利益相關: Rails Girls coach-to-be (但總是沒時間&>______&<)
什麼時候充氣娃娃也會學習了?


剛給女朋友買了個ikbc彩虹,就看她能不能好好寫代碼了。。。


一點點教。
找一個小項目從頭開始做。
引導她的思路。
代碼不會寫沒關係,思路和邏輯要有。
有了思路,再去想辦法實現。


你們需要先考慮以下問題:

  • 誰在游, 誰在
  • 誰做端, 誰做端。

如果她是零基礎,讓她試試這個吧:Scratch - Imagine, Program, Share

  • MIT開發的編程入門語言。
  • 不需要輸入任何晦澀難懂的文字,只需要拖動卡條就可以編程。
  • 簡單的幾個卡條就能輸出動態的可視化結果,讓她覺得編程是件很酷的事情。
  • 下面是開發界面,挺簡潔易懂的。

  • 如下面的例子,是個很有趣的程序,女孩子會喜歡。
  • Mabel"s Dress Up by MagicianCat

已被男票現在是老公培養成前端開發,謝謝。


@潘濤你要教我嗎?


如果你女朋友一點基礎都沒有,就先教 hello world!她會覺得好神奇。
如果有點基礎,就教她感興趣的,你就問她,你喜歡做淘寶那種漂亮頁面的前端呢,還是喜歡秒殺那種技術性的後端。。。。
反正一開始不要教很難的,然後編程工具不好用的那種語言,python不錯的啊。你可以在自己的項目中,留個小功能讓她實現或者修改下。。。。
女生都有點共性,喜歡IDE好用的那種,然後東西做出來又漂亮厲害的那種。。。


腿打斷


難道不是換個女票~


推薦閱讀:

你是怎樣通過學習改變命運的?
不在意名利的人有必要認真工作學習嗎?喜好追求不適應社會怎麼辦?
是否存在活得華麗而輕鬆的優秀學生?
學Python Django學得很迷茫,怎麼辦?
有哪些年輕人該看的優秀書籍?

TAG:學習 | 編程 | 女朋友 | Node.js | Python 入門 |