老外教編程
A. 老外學編程是不是很容易
老外學編程的難度跟我們一樣,不要去高估他們,只不過英語為母語的老外有一點點語言上的優勢而已,畢竟絕大部分編程語言的函數名稱都是用英語來命名的,他們更容易知道其代表的含義而已,不過我們國家從兒童到大學都在不遺餘力的開展英語教育,相信很多人也不會相差太多的。
B. 美國人學代碼會不會比較容易點
美國人學代碼肯定是優勢的,英語國家的人,在其他條件同等下,比如智力,勤奮程序,肯定優勢很大。(1)代碼語言是英文的,他們看著輕松,關鍵詞,一看就懂。 (2)計算機是美國人搞出來的,各類文獻資料比我們多。他們也看得懂。 一個客觀實例,印度人為什麼好多地方不如中國人,但是軟體業不錯,英語優勢嘛。
求採納
C. 為什麼在編程語言的教程上,老外總是比中國人寫得書更
因為外國的程序設計教育起步比中國早得多,加上像美國這些國家,一般在小學的時候就接受計算機教育了,對計算機程序設計的理解普遍比中國要好.
D. 不懂英語應該怎麼學編程
一般的編程,不需要高深的數學,但邏輯要清楚。不需要太多英語,但了解些基本的單詞對編程有好處,必要時也可以查外文文獻。下面我為你收集了不懂英語學編程的建議的資料,希望對你有所幫助!
不懂英語學編程的建議
1. 從小的有用的程序入手
學習可以從編寫一些具體的小的真正有點用程序入手,需要用到數據結構與演算法時,順帶著就學了,感興趣的再深入系統地學一下。除非你在一些特定的有特殊要求的領域寫程序,否則,大多數情況下用不上很高深的數學。
2. 堅持使用英語
至於英語,你要把它真當成一種語言去用,用它去與別人交流,去吸收新知,建議你在有一定基礎後,直接看一些英文版的教材和視頻,開始會比較難,慢,但堅持下來,好處很多的,你既能學到了知識,又能提高英語水平。
3. 要多嘗試,多動手
不能一味地停留在知識點掌握的程度上,因為知識點是死的,然而可以通過這些知識點的串聯可以解決很多活的問題。踏實學習,多動腦多探索,多練代碼慢慢就會有一個不錯的水平!
英語和數學給我們帶來的優勢
1. 英文好的,你的技術資訊永遠都是領先其他人
2. 數學好的,你的代碼質量永遠都是優越其他人
回到現實中:如果你要成為別人的焦點,那你就要學好英文和數學。如果你要提高你的編程質量,那你就要學好英文和數學。如果你要領高薪,那你就要學好英文和數學。
給英文和數學不好的朋友建議
1. 英文可以補習,數學可以補習,時間是擠出來的,不要為自己的學習找借口
2. 編程領域太廣了,需要各種人才,中國這么多人口,你不做編程,別人也會做。
3. 很多先進的技術,不用你去操心的,讓老外去完成。我們要學會拿來主義,我們的目標就是掙錢,有錢了才能實現你自己的理想。
你也不要隨便地給自己貼標簽,比如自己給自己貼上“數學和英語不好”這個標簽,也許它符合你現在的情況,但並不等於你以後也是這種情況。
學習編程的注意事項
一:自學也需要看書
自學只是說沒有專門的老師手把手教你,並不是說連書本都可以不要了。有人天天來問我一些很基礎的概念問題,我問他:“這些概念書上不都寫得很明白嗎?”他回答:“我沒有書。”如果沒有書,那麼你很難在腦子里形成一個較為整體性的認識,所有了解到的知識都是支離破碎的。且不說大多數人沒有精力回答你這些問題,即使回答了,很多東西也不是三言兩語就能說清的,很多高手說出來的都是他們自己的理解,這些理解或許很有意味,但也許費了你半天的腦子卻怎麼也搞不明白。一本書,即使不是什麼經典之著,它也可以向你提供一個大體完整的框架,成為你自學過程中的一個向導。這里要說的是:網上電子教程資源豐富,看看無妨,但手中至少應有一本印刷的書——畢竟網上的教程魚龍混雜,其作者也許並不精通此道,很難分辨其質量好壞。
二:學編程更需要實踐
書是有了,可是整天抱著書也不成。編程最怕的就是紙上談兵,我看到有的初學者,看完了大半本書,和我說起循環函數來頭頭是道,卻連編譯器長什麼樣都沒有見過。真要他寫幾行程序,便是錯誤百出。我的建議是,無論你涉及編程的時間是多麼地短,無論你目前學到的知識多麼地少,你都應該不斷地盡自己所能去編寫一些小程序——即使是把書上的“Hello, World!”親手輸入進去運行一遍,都能讓你的編程能力有著極速地提高。
三:編程是創造,不是默寫
有人甚至打算用題海戰術來學習編程——這完全沒有理解編程的內涵。僅僅通過“欣賞”別人寫的代碼也無法學好編程。有一點需要明白:編程是一個創造的過程。編程的意義在於:通過程序的形式,教計算機如何去完成一項任務。寫代碼只是形式,真正重要的是如何完成特定的任務。學習別人的代碼固然是很有用的,可以學習別人的思想;但是如果僅僅是記憶了一些別人寫好的代碼,就希望能通過拼拼湊湊成為自己的程序,那是基本不可能的。我的建議是:在自己編寫程序,進行創造的過程中,借鑒前人程序中的思想方法——而不是整天處於復制粘貼的狀態中。
四:好習慣要從開始做起
所謂“不以善小而不為”,等壞習慣養成了,再改就困難了。因此,類似寫程序要注意縮進、為變數和函數起有意義的名字、大小寫的使用、行末分號的注意等等,要從一開始做起。很多人對這些善意的提醒不屑一顧,覺得多此一舉,浪費時間。其實,如果真的能嚴格地去做,它們反而可以幫你節省許多時間。
五:不必太刨根問底
“打破沙鍋問到底”確實表現了一種鑽研的精神,不過我還是建議初者學,有的時候,不必太刨根問底。編程的相關知識都是盤根錯節交織在一起的,大多數問題深挖下去會越說越復雜,對於知識掌握不多的初學者來說,只能是越來越糊塗。很多東西,時間長了,隨著知識了解得深入,自然而然會明白。就像剛剛學英語的時候,你知道“goodbye”是再見就足夠了,難道非要把這個good和再見的關系先弄個水落石出嗎?作為初學者,最重要的是盡快地能全面地了解整個知識的全貌,在單獨的知識點上,暫時不需要太深入。可以等知識經驗豐富之後,再回頭來研究。
E. 老外說的關於並發編程的笑話,是什麼意思
『別讓你的權利睡著了』,這句話通常用於洞房花燭夜時。
F. 零基礎想自學編程,可以推薦什麼書籍或程序嗎
零基礎想自學編程,可以推薦什麼書籍或程序嗎
編程這個東西自學有一定難度,因為你無法在短時間內體會到它的實際用途,所以一大批人會半途而廢。就算你學會了c語言,你會發現你照樣做不出東西,忙碌了半天,也只會在黑乎乎的控制台上顯示些字元。所以你還得學習其他知識,像SQL。
想要以最短時間體會到代碼的作用,那莫過於學習前端 HTML 了,配合CSS,你會立馬寫出幾個靜態頁面,然後沾沾自喜,有種成就感。然而這並沒有什麼卵用。前端還需要學習一門叫javaScript的語言,JavaScript才是編程語言,HTML和CSS只能叫做頁面設計,類似美工。
而你想要學習JavaScript時,你就得明白什麼叫編程,像是數據類型、函數、各種判斷循環語句,這時你學起來就會感覺很吃力(當然也能學會,我就是沒接觸過C語言就直接學了前端了)。
真正的編程入門級語言是C語言,為什麼要先學C語言呢?這時你得明白編程語言的歷史發展。C語言的前身是B語言,B語言由貝爾實驗室開發。B語言寫出了世界上第一款操作系統Unix,沿用至今,比如銀行的取款機和大型商務機就是用的Unix。後來由Unix 進化出了linux操作系統。這款操作系統一直應用於伺服器,而Windows操作系統是由C語言寫的。暫且不談操作系統。
C語言往後發展就有了C++ 這些都同屬貝爾實驗室開發。Java是由C++改寫而來。C#也是由C++改寫而來。所以你會發現C#與Java語法相識。總結一點,這些語言都由C語言而來。只要你學會了C語言,以後你學其他語言就會簡單的多。你學C語言就是學了80%的Java。C++又是完全兼容C語言的。所以你可以把C語言看成是祖宗,其他的都是分支。
本人就是自學的。走了很多彎路。因為我一開始就是學的前端HTML。後來才去學的C,不過也沒關系,我學會JavaScript後,學C語言就輕松很多。
說了這么多言歸正傳,如何自學編程,其實就是如何自學C語言。我認為最好是找教學視頻來看。個人推薦 : 郝斌c語言180個視頻。
網上很多人力推《c語言程序設計 譚浩強》這本書,你可以去看看。這是大學計算機專業必備教程。也是C語言入門書籍。反正看書我是看不進去的。
一句話,這些語言都大同小異。真正重要的是編程思想。就是如何通過語言來實現解決問題的思路。
零基礎學習編程,推薦書籍
應該先學C語言,它是C++的基礎課程,我們就是這么學過來的,剛學完C++,如果你要學C++,我們的教材就很好,就是C語言程序設計基礎與應用,清華大學出版社出版的,書皮是紅色的,挺基礎的,對於初學者先學習C++就難了
零基礎自學編程,先學什麼語言,請推薦相關書籍
完全零基礎的話,建議學做網頁吧,比較簡單。書籍的話,先計算機基礎,然後就學一些web前端的東西。
請問自學編程零基礎入門看什麼書籍好?
當然學習C語言入門,看C語言的書,我是大學計算機專業的,師大987奇巧300雜項192,提出數字,能Q,共同進步
零基礎想自學編程
請問你想學什麼語言,我推薦C語言,最接近底層的高級編程語言,我學了很多的計算機編程語言,最愛的還是C語言,最酷最炫。
入門級的書籍我推薦《C primer》老外寫的,可能有一定難度。譚浩強的C語言程序設計是國內不錯的入門書。
進階的書包括《C缺陷與陷阱》《C專家編程》,都是老外寫的。
編程零基礎,想自學python語言,有什麼適合的教材或者書籍推薦碼?
簡明python 教程入門錯相關我文資料算少我兩前搜集百MPYTHON教程相關資料
零基礎學編程求推薦好書
編程這個概念很大,不同領域需要學習的編程語言不同。應該先從你興趣開始,有興趣再決定編程領域,有了編程領域在決定語言.不同的語言對應著不同編程領域,只有確定這些信息了,才知道要看什麼書籍。如果你要學完那是有點不現實.
因此你要回想一下你興趣來源是什麼?比如喜歡做黑客,喜歡研究反病毒,喜歡為Windows桌面開發一些實用的小軟體等等.要分析好興趣來由,在決定你的發展方向,就好了.比如你喜歡為WINDOWS開發軟體,那麼 C語言是必備基礎,學好好瞭然後在擴展一門面向對象的語言比如C++ C# JAVA 等.這些是不錯的選擇。然後光有語言不行,為了軟體的質量保證,還需要研究一下系統理論基礎,這樣你的軟體才能做到對系統的作家兼容性和獲取最佳性能。
也可網路一下, 80x86匯編小站 這個網站裡面有幾篇關於編程入門文章或許會對你有幫助, 或者 你直接聯系 這個站長 跟他交流編程方面的事情
零基礎學編程c語言java選什麼書籍
我覺得應該根據你的工作需要或者說你的發展方向而定。基本上兩大類吧:C/C++和Java。比如,如果你要做企業級應用的你應該學習Java和C#;如果你想做嵌入式,那麼應該學好C語言;其他情況下,在你不知道要做什麼之前你可以選擇學習C/C++。學會這兩大類中的一類,對於你學習其他語言都將是比較輕松,包括腳本語言,動態語言„„呵呵,這里想就自己的學習經歷和情況給大家一個建議,僅供參考。
零基礎怎麼自學編程
第一:硬體保證,首先你應該具備一台電腦,不管是筆記本還是台式,也不管性能高低,性能對前期學習編程幾乎無任何影響,就入門來看,操作系統還是首選windwos或者mac
第二:有xx語言的入門本書,紙做的,具體xx語言是哪種語言,後面我們再討論這個問題。雖說現在鋪天蓋地的都是電子書了(保留這句話的確定性),到處是掃描版,還高清呢,但我還是推薦看紙做的書,好處有兩點,其一是便於攜帶,可以隨時翻閱;其二是避免眼疲勞,我不信你一直晚盯著顯示器看電子書眼睛不會酸;還有一點,尊重圖書作者的版權。
第三:時間保證,如果你每天都有一大堆事等著你去處理,先去處理那些事吧,處理完後把剩餘時間劃出一整塊的給編程,進行隨時可能被打斷的學習
–1>.去了解計算機的基本組成,計算機的發展史和編程的發展史,看起來和編程沒什麼關系,潛在的影響還是十分大的;
–2>.選擇一門簡單的語言作為入門語嚴;
–3>.學會使用搜索引擎;
–4>.知道如何看書;
–5>.要」像」個高手;
–6.>應具備的學習態度;
選定方向
編程的世界是多元紛繁的,大的方向就分前端開發、後端開發、移動開發、雲計算、數據處理、智能硬體、物聯網、虛擬現實等等,光編程語言都幾十種。如果沒有做過功課,貿然進入只會分分鍾懵逼。所以最好是根據自己的興趣愛好再結合市場前景,先選定一個方向,再選擇一門語言,然後頭也不回的深深扎進去。
我當初開始自學編程的時候,因為工作時學了點Linux,就准備學Linux。Linux沒學幾天,發現游戲編程的Unity 3D挺好玩的,就轉學Unity 3D。Unity 3D學了段時間又覺得大數據很火,感覺接下來是大數據的時代,要跟上時代的腳步,然後又去學習Python。後面才意識到自己在移動應用上面有極大的興趣並有一些自己的想法,再加上本人很喜歡Google,遂最終決定好好學習Android移動開發。
如果自己對自己興趣愛好沒有深刻的認識,沒有明確的學習目標,只是一味茫然的去嘗試,最終只會像猴子掰玉米一樣,不但浪費了自己寶貴的時間,還會一無所獲。
####制定學習目標計劃
選定了方向之後,剩下的就是朝著目的努力前進了。自學的過程是枯燥乏味的,也沒有人陪伴督促,所以要想自學有一定成果,除了要有清晰明確的目標計劃,還要有很強的自我約束能力,還要善於自我及激勵。不然很容易自由渙散,三天打魚兩天曬網,看起來花了不少時間,實際上沒學到什麼。
我開始的時候就是憑興趣漫無目的的學習,結果發現收效甚微,於是才制定學習計劃,開始系統的學習。我先是學習了JAVA基礎語法,然後將整個Android開發涉及到的所有知識面簡單快速的學習一遍,這樣對整個體系框架有一個全面大概的認識,然後在詳細具體的學習每一部分,盡量搞明白其中的實現邏輯和原理,以達到掌握知識的目的。最後開發練習的時候再根據自己要實現什麼功能,去查相關的資料。
優化學習方式
一、做好筆記,記錄經驗
我們大多數人並沒有過目不忘的神技,很多時候我們學了也不一定馬上掌握,需要過後花時間慢慢領悟,而且還有忘掉的風險,所以對於重要的知識點都要做好筆記。
編程的過程中總會遇到各種各樣的問題,比如編程環境的配置,常用的快捷鍵,編程過程中的錯誤、異常,軟體更新問題等等。這些問題往往會不只一次出現,所以我們面對這些問題都是如何解決的,一定要記錄下來,一是增加自己解決問題的經驗,而是以防下次出現。
我做筆記記錄的方式:
* 截圖
* 拍照
* 思維導圖
* 寫Word文檔
除了最初用紙質筆記本做過筆記,後面都是用上面的方式。用電子的方式方便快捷易於分享,而且我還能傳到手機上,利用其它時間隨時隨地閱讀。
二、認認真真敲代碼
二、認認真真敲代碼
二、認認真真敲代碼
編程沒有捷徑,只有勤奮努力。
三、多看官方文檔,外文資料
互聯網是一個更新迭代很快的行業,所有編程語言都會不斷的更新新功能和修復舊Bug,網上查的資料很有可能是舊的解決方案,現在已經不適用了。所以最好最快的方法就是查看官方文檔。
畢竟互聯網技術還是國外發展起來的,所以在很多技術問題方面,人家還是有優勢的。有些問題在國內不一定能找到答案就去外網找。
四、進入行業圈子
只有進入行業圈子與其他人交流,你才了解最新的行業動態,才知道自己需要更新哪些技能。最重要的是有了這群人,自己遇到問題解決起來嗖嗖的,那速度才叫「倍爽兒」。
進入行業圈子的方式:
* 混跡各行業網站論壇個人技術博客
一般在搜問題時很容易就搜到這些網站
* 關注各種行業話題和人
比如知乎、微博、微信公眾號等
* QQ群、微信群
交流基地,技術後援團
* Github
互聯網聖地,行業大圈子就在這。
五、動手做項目
我們學習編程的最終目的就是用所學的做出具有一定功能的項目,而做項目又是最好的學習和鞏固知識的方式。如果前期能力不足就先做一些簡單的功能模塊,一步一步慢慢來,不要一開始就要實現各種酷炫炸天功能,遇到不會的就在網上查, 現在互聯網這么發達,獲取資源也及其方便。而且開發前也最好在網上查一下有沒有已經成型的框架或模板,編程界有一句很流行的話「不要重復造輪子」,什麼都自己做一是很耗費時間,二是自己技術能力不足還可能留下不少坑。
G. 學編程是不是一定要英語很好
不一定。學編程的人最根本的還是要數學底子好,所有的演算法都是靠嚴密的思維邏輯才能夠行得通的。編程語言要寫大量源代碼,其實只要是認得26個字母的人都可以編程。
但是畢竟程序這個東西是西方那裡過來的,我們現在編程的代碼都是英文字母。先進的計算機編程技術也都是西方那裡學過來的,一些大型的計算商用程序大多數被西方壟斷。如果要想在編程上有所進展,學習英語對拓展視野大有用處。
國內也有編程不用英文字母寫源代碼的,比如說易語言,所以學習編程外語不一定要很好,將來中國強大了,源代碼用中文寫,不也是很好嘛!我們的雷軍,英語雖然不是很好,但編程可也是一流的,這正說明了學編程不一定要英語很好。
H. 老外的測試讓你更好地編程
老外的12條測試讓你更好地編程
你聽說過SEMA么?它是一個用來測試一個軟體團隊有多好的相當深奧的系統。不,等等!不要手賤點開這個鏈接!它會花費你大概六年的時間來了解這個東西。所以我提出了我自己的、跟它相比極不負責任的、草率的評價一個軟體團隊的質量的測試。這個測試最棒的方面是它只會花費你3分鍾的時間。你節省下來的所有時間,還可以去上個醫學院。
Joel測試
TheJoelTest
Doyouusesourcecontrol?
Canyoumakeabuildinonestep?
Doyoumakedailybuilds?
Doyouhaveabugdatabase?
?
Doyouhaveanup-to-dateschele?
Doyouhaveaspec?
?
?
Doyouhavetesters?
Donewcan ?
?
Joel測試的好處是很容易快速得出針對每一個問題的“是”或“不是”。你不必去翻出那些每日編程行數和每個拐點的平均bug數。如果你的團隊有一個“是”就得一分。關於Joel測試令人失望的是,你真的不應該用它來確保你的核電站軟體的安全。
獲得12分是完美的,11分也還可以容忍,但10分或更低的分數表明你有嚴重的問題。事實上,大多數軟體企業都以2分或3分的分數在運轉著,他們真的很需要幫助,因為像微軟這樣的公司一直以來都以12分的完美表現在運轉。
當然,這些都不是決定成敗的唯一因素:特別是當你有一個正在開發沒人要的產品的偉大的軟體團隊的時候,那麼,人們是真的不會接受這個產品的。同時一個沒有這么做的“神槍手”仍然能產生出令人難以置信的改變世界的軟體也是可能存在的。但是,在其他條件相同的情況下,如果你把這12件事情都做好了,你就會擁有一個能始終如一完成任務的團隊。
你使用源代碼管理么?
我用過商業源代碼管理包,也用過CVS,它是免費的,讓我來告訴你,CVS很好用。但如果你沒有對源代碼進行管理,你就要應激嘗試把程序員都弄到一塊來工作。程序員根本不會知道別人都做了什麼。犯過的錯誤不能輕易改過來。關於源代碼管理系統的另一個好處就是源代碼本身可以在每個程序員的硬碟上進行驗證---我還從沒聽說過哪個使用源代碼管理的項目丟失了很多代碼。
你能在一步之內編譯程序么?
通過這條測試我想明白:從最新的源代碼的快速復制到進行能輸出的編譯需要多少步驟?再優秀的團隊里,有一個單獨的腳本,它能從零開始對代碼做一個全面的檢查,重新編譯每一行代碼,生成EXE文件,在他們各種各樣的版本、編程語言和#ifdef宏定義組合,創建安裝包和最終媒體--CDROM 布局、下載網站等等。
如果這個過程需要一個以上的步驟,就很容易出現誤差。當你接近完工的時候,你很想有很快的修復“最後一個”bug的周期,生成最後的EXE文件等。如果編譯代碼要用20步才能完成,運行安裝編譯器,……,等等,你會抓狂的,並且會導致你犯下愚蠢的錯誤。
正式由於這個原因,我曾工作過的上個公司就從“聰敏”模式切換到了“軟體安裝打包”模式:我們要求安裝過程中可以運行,使用NT調度從腳本整晚自動地運行,“聰明”模式做不到這些,所以我們就拋棄了這個模式。
你每天都編譯代碼么?
當你使用源代碼管理的時候,有時候程序員偶然會檢查出會停止編譯的東西。比如,他們添加了一個源文件,一切在他們的機器上編譯起來都很好,但他們忘記把源文件添加到代碼庫里了。所以他們鎖定了機器就回家去了,比較健忘也比較高興。但其他人都不能繼續工作了,所以他們也不得不很不愉快地卷鋪蓋回家了。
打斷編譯是很糟糕的(也很常見的),但它能幫助程序員每天都編譯代碼,以確保不會出現沒有預兆的編譯中斷。在大型團隊裡面,一個很好的確保中斷能迅速修復的方法是每天下午都對代碼進行編譯,比如可以在午飯時間做這個。每個人都盡可能多地在午飯前做代碼檢查。這樣當他們吃完午飯回來的時候,這個編譯就已經完成了。如果它能用,就太好了!每個人都對最新的源代碼進行檢查,然後才繼續工作。如果編譯失敗了,你就修復它,但每個人還能在預編譯、沒有中斷版本的源代碼上繼續工作。
在Excel項目組,我們有一條規則:誰中斷了編譯,作為對他的“懲罰”,他就要在其他人中斷編譯之前臨時照顧代碼編譯的工作。這是一個很好的不中斷編譯的激勵方式,也是一個讓每個人輪流參與編譯工作從而都能知道編譯原理的好方法。
你有bug資料庫么?
我不在乎你怎麼說。如果你在開發代碼,即使是在一個人的團隊,沒有一個組織的列出代碼里所有已知bug的資料庫,你將會產生出低質量代碼。許多程序員都認為他們能把眾多的bud存在腦子里。真是胡說八道。我根本就不能再同一時間記住兩個或三個bug,第二天早上,或者在寫代碼的高峰時期,就記不起它們了。你絕對要正式地跟蹤bug。
但資料庫可以是復雜或簡單的。一個最小限度的bug資料庫必須包含以下對每個bug的數據:
再次出現這個bug的完整步驟
預期的行為
觀察到的行為
它是被設計來幹嘛的
它是否已被修復
如果bug跟蹤軟體的復雜性是讓你不想跟蹤你的bug的唯一理由,只用上麵包含簡單的5個元素的表格用在這些至關重要的領域,開始使用它吧。
你在寫新代碼前會修復bug么?
第一個版本的Windows系統上的微軟Word被認為是一個“死亡行軍”項目。不知道這項目要什麼時候才能完成,它不斷的延期。整個項目組在荒謬的時間里工作著,項目再次、再次、再次延期,這時候的壓力的令人難以置信的。當討厭的事情最終出貨,幾年以後,微軟把這整個團隊都送到坎昆去度假了,他們可以靜下來做些嚴重的自我反省了。
他們意識到,項目經理一直在堅持按照“日程安排”部署工作,而程序員們只是頭腦簡單的趕緊完成敲代碼的過程,又因為修復bug階段並沒有成為正式日程安排的一部分,這導致他們寫出了及其惡劣的代碼。沒有能試圖保持住bug不發作的倒計時。恰恰相反,據說一個程序員寫了計算文本行高的代碼,僅僅寫了“renturn12;”然後就開始等待關於他的功能總是正確的bug報道。日程安排僅僅是即將變為bug的功能的檢查清單。事後,這個被稱為“無窮大缺陷的方法”。
為了解決這個問題,微軟普遍地採取了一種叫做“零缺陷方法”的東西。公司的許多程序員都咯咯地笑,因為它聽起來是一種好像通過行政法令就能夠減少bug數量的管理思想。其實,“零缺陷”意味著在任意給定的時間內,優先順序最高的是消除bug,然後才是編寫新代碼。讓我來講講為什麼。
一般情況下,你等待修復bug的時間越長,這個bug就需要付出的代價就越大(在實踐和金錢上)。
比如,當你犯了一個編譯器能捕捉的拼寫或語法錯誤時,修復它的代價微不足道。當你第一時間看到你嘗試運行的代碼里有bug的時候,你能夠很快的把它解決掉,因為所以的代碼在你腦子里印象還很清楚。
如果你在幾天前的代碼里發現了bug,你會花費一段時間來找到它,但當你重讀先前寫下的代碼後,你就會記起一切然後就能在一個合理的時間內修復這個bug。
但如果你在幾個月前的代碼里發現了bug,你很可能把關於這段代碼的大部分東西都忘了,要修復它就很難了。這個時候你可能正在修復別人代碼里的bug,他們可能會在阿魯巴島度假,這種情況下,修復bug就像科學一樣:你不得不放緩步調、有條不紊、細致地開始工作,並且你還不能確定需要多長時間才能找到問題的治療方法。
如果你在已經售出的代碼中發現了bug,你會招致令人難以置信的代價修復它。
這是要立刻修復bug的一個原因:因為這樣花費更少的時間。這關繫到寫新代碼之前而不是修復bug之前還要等多長時間。比如,如果我要你預測寫一個給列表排序的代買要多長時間,你可以給我一個很好的估計值。但如果我要你預測修復一個安裝Explorer5.5版本後代碼就不能工作的bug需要多長時間,你猜都猜不出來,因為根本不知道到底什麼導致了這個bug。它可能需要3天時間才能跟蹤到,或者僅僅3分鍾就足夠了。
這句話的意思是,如果你有一個很多bug有待修復的日程安排,這個日程是不靠譜的。但如果你修復了所有已知的bug,並且所有剩下的都是新代碼,這樣你的日程安排才會更加驚人的精確。
關於把bug控制到零還有另一件重要的事,那就是你可以對競爭響應更快。一些程序員認為這點能讓產品在任何時候為發售准備好。如果你的競爭對手從你的客戶那裡引入了一個殺手級的新功能,你就能在發售之前只實現這個功能,而不必去修復大量累計下來的bug。
你有最新的日程安排么?
這條測試把我們帶到了日程安排上來。如果你的代碼對生意是很重要的,會有很多知道代碼完成日期怎麼對生意很重要的原因。程序員在制定日程安排上是出了名的倔。“該完成的時候就完成了!”他們會這樣對商務人士尖叫。
不幸的是,這並沒有讓一切變得更好。在發售代碼之前,公司需要做太多的計劃好的決定:軟體演示,展會,廣告等。而要做到這一點的唯一方法就是擁有一個日程安排,並保證其為最新版本。
關於要有一個日程安排的另一個至關重要的原因是,它能強迫你決定要做哪些功能,然後迫使你挑選出最無關緊要的功能並砍掉它們,而不是陷入長期的猶豫中去。
同時,跟隨日程安排做事並不一定要很苛刻。
你寫代碼有規范么?
書寫規范就像牙線,每個人都同意這是一個很好的事情,但卻沒人做。
我不知道這是為什麼,但很可能是因為大多數程序員討厭寫文檔。結果,對一個大部分有程序員組成的團隊遇到了一個難題的時候,他們更傾向於用代碼來表達他們的解決辦法,而不是用文檔。他們寧願埋頭寫代碼而不是先寫一份規范。
在設計階段,當你發現問題時,你可以很容易地通過編輯幾行文本就修復它。一旦開始寫代碼,修復問題的代價就大大地提高了,無論在感情上(人們討厭扔掉代碼)還是在時間上,所以這時候修復問題是有阻力的。不是從規范開始建立起來的軟體通常會很糟糕地結束設計,並且日程安排會不受控。這個在 Netscape好像已經成為大問題了,Netscape的前四個版本慢慢變得一團糟,然後管理層愚蠢地決定拋棄舊代碼再重新開始。然後他們又在 Mozilla上再一次犯了這個錯誤,創建了一個失控的怪物,並且浪費了好幾年時間才又回到初始階段。
我的一貫主張是,這問題可以通過把程序員送去學習寫作的集中課程,把他們變為差不多的寫手來解決。另一個方案是僱傭一些聰明的程序管理人員,讓他們來寫代碼規范。在這兩種情況下,你應該執行簡單的規則“無規范不出代碼”。
程序員有安靜的工作環境么?
廣泛的記錄表明,通過給知識型員工提供空間、安靜和隱私就能提高生產力。經典的軟體管理書《人件》就廣泛地記錄了生產力受益於這些方面。
問題來了。我們都知道知識型員工隨著“靈感流動”工作最好,就是我們所說的“進入狀態”,在哪裡他們會全身心專注於他們的工作,並且完全脫離了周圍的環境。通過絕對的專注,他們忘記了時間,產生出偉大的代碼。這是他們把工作完成的過程。作家、程序員、科學家,甚至籃球運動員都會告訴你要進入狀態。
問題是,進入狀態並不那麼容易。當你嘗試去考量它的時候,在最大生產力下好像需要15分鍾才能開始工作。有時,如果你累了或那天已做了很多創造性工作時,你就是進入不了狀態,你會把這天剩下的時間都用來擺弄點什麼,看看網頁,或玩玩俄羅斯方塊。
另一個問題是,很容易脫離那個狀態。雜訊,來電話,出去吃午飯,不得不開5分鍾車去星巴克喝咖啡,還有被同事打擾--尤其是被同事打擾-- 都會把你從那個狀態里拉出來。如果同事問你問題,導致了一分鍾的中斷,但這個會很悲慘地把你從狀態里脫離出來,你的話費半個小時才能再次變的高效起來,你的整體生產力會遇到很大的麻煩。如果你在一個含咖啡因的網路公司喜歡創造的嘈雜的牛棚一樣的環境里,有營銷人員在程序員身邊尖叫著打電話,你的工作效率會大幅下跌,因為知識型工作者一次又一次的'被打斷,一直都進入不了狀態。
對程序員來說,這就更難了。工作效率依賴於能夠同時在短期記憶中兼顧很多小細節。任何類型的打斷都會導致這些細節轟然倒下。當你重新開始工作,你已經記不起任何細節(比如你剛才還在使用的本地變數名字,或你剛想出來的實施搜索演算法的好點子)了,你不得不一直回想這些事情,這會讓你變得很慢,直到你重新變得高效起來。
這有一個簡單的代數運算。可以這么說(有證據暗示)如果我們打斷了一個程序員,即使只有一分鍾,我們真的會失去15分鍾的工作效率。在這個例子里,我們假設有兩個程序員,Jeff和Mutt,在一個標準的相鄰開放的格子間里。Mutt記不起strcpy函數的Unicode版本的名字。他可以查一查,這需要30秒,或者他可以問問Jeff,這需要15秒。因為他就坐在Jeff旁邊,所以他選擇直接問Jeff。Jeff被分心了,失去了15分鍾的工作效率(僅僅節省了Mutt的15秒)。
現在我們把他們兩個分到有門和牆隔開的兩個辦公室去。這時如果Mutt忘記那個函數名,他可以花30秒去查一查,或者花45秒去問問 Jeff,這過程包括了站立起來(考慮到程序員的平均體能這並不是一項簡單的任務!)。所以他會選擇自己查一查。這樣Mutt失去了30秒的工作效率,但同時為Jeff節省了15分鍾。哈哈哈哈!
你使用錢能買到的最棒的工具么?
在公園里使用家用電腦立即用一門編譯語言寫代碼仍然是最不能做的事情之一。如果你的編譯過程超過幾秒鍾,使用最新和性能最強的電腦會讓你節省點時間,當編譯器運行的時候,程序員會感到厭倦,這是他們會切換到閱讀點別的書籍,這會吸引他們的注意力,失去好幾個小時的工作效率。
使用單個顯示器調試GUI代碼是很痛苦的,這也不是不可能。如果你在寫GUI代碼,兩台顯示器會讓很多事情變得更加容易。
大多數程序員最終要處理圖標或工具欄的點陣圖,但他們大多數都沒有一個好用的點陣圖編輯器。嘗試用MicrosoftPaint來處理點陣圖是個笑話,但這就是大部分程序員們所要做的。
在我上一份工作中,系統管理員一直給我發自動的垃圾郵件抱怨,說我用了超過220兆位元組的伺服器上的硬碟存貯空間。我指出,鑒於最近硬碟的價格,這些硬碟空間的成本比我使用的衛生紙的成本都低多了。甚至花費我10分鍾來清理我的郵件目錄,這真是對我工作效率的極為荒誕的浪費。
頂尖的開發團隊不會折磨他們的程序員。即使是因為功能不完善的工具引起的小挫折累加起來,也會使程序員脾氣暴躁和不愉快。一個脾氣暴躁的程序員是不會有工作效率的。
程序員最容易接受最酷、最新的東西賄賂了。與支付有競爭力的薪水比起來,這是一種讓他們為你工作更便宜的方式。
你有測試人員么?
如果你的團隊沒有專門的測試人員,至少應該為兩三個程序員就配一個測試人員,你會寫出有很多bug的產品,或者你在花冤枉錢讓測試人員30 刀每小時就能做的工作交給100刀每小時的程序員來做。在測試人員身上節省下來的錢是一個離譜的虛假的經濟,我只是想讓更多的人認識到這一點。
找工作的人面試時會寫代碼么?
你會僱傭一個沒看過他魔術技巧的魔術師么?當然不會。
你會僱傭一個沒嘗過他的食物的餐飲服務商來為你的婚禮服務么?我對此表示懷疑。
然而,一天天的,程序員通過讓人印象深刻的簡歷被僱用,或是因為面試者喜歡跟他們聊天。或者他們被問到很細的問題(“CreateDialog()和DialogBox()之間有啥不同?”),這些看文檔就能回答了。你不關心他們是否記得關於編程的成千上萬的細節,你只關心他們到底能不能寫出代碼。或者,更糟糕的是,他們被問到的都是“啊?”問題:就是那種你知道答案就看起來很簡單,但如果不知道答案就什麼也回答不上來的問題。
拜託,以後不要這么幹了。在面試期間你想怎麼問就怎麼問,但一定要讓參加招聘的程序員寫點代碼。
你會做走廊可用性測試么?
走廊可用性測試就是當你在走廊上遇到一個路人就強迫他試著用你剛寫的代碼。如果你對五個人做過這種事,你會學到你代碼里需要學習的95%的實用性問題的答案。
好的用戶界面設計並不像你想的那麼難,如果你想讓用戶喜歡並購買你的產品這就至關重要了。
但關於用戶界面最重要的事情是,如果你把你的程序展示給很多人看(實際上五六個就足夠了),你就會發現人們存在的最大的問題。即使你的用戶界面設計技術還不怎麼樣,只要你強迫自己去做走廊可用性測試,這並沒什麼代價,而你的用戶界面會越來越好的。
;I. 為什麼編程厲害的都是外國人
編程一開始,由外國發明的,許多編程代碼全是英文,所以說變成厲害的人很多都是外國人,你這是以前的事兒現在,由於我國發展,即使人才逐步增加,親,在握彎,人民,知識分子感到這個缺點了所以說,變成,葉,通過學習,我們國人,也掌握了很多的知識,也出現了,也處理,寶隊的編制,人才,所以說,編程,厲害都是外國人,那是以前的歷史,現在我國依然可以,這世界是走入了世界前列了。
