程式設計師出身的馬化騰,居然熱衷於偽代碼?你會寫嗎?

2020-12-22 電子工程專輯
關於馬化騰寫代碼的水平,網上有一個段子:曾經和pony(馬化騰)一起寫過代碼。當時我、pony、馬克3人擠在一個只有10個位置的房間裡,埋頭開發,用的啥語言我忘了。
馬克當時負責寫兩個bug,弄了10個月,沒有一點進展,下樓準備買點瑞士卷吃,消消愁。
回來發現pony光著膀子,啃著個豬蹄兒,站在陽臺,望著寂靜的夜,回頭冷靜地和馬克說了句:「幫你搞好了。」
當然,這只是個段子。但當年創業時,公司主頁確實也是馬化騰自己寫的代碼,並親手調試一些小細節。
「那時我們幾乎什麼都做,例如幫人家做一些網站的小項目,包括深圳信息局的郵件系統也是我們做的。
當時馬化騰和張志東都自己親手做網站,公司主頁也是馬化騰自己寫的代碼並親手調試一些小細節。這是馬化騰當年寫的代碼:
圖片右上角寫著編寫的日期是99年2月21日,21日是大年初六啊! 馬化騰當年作為一個程式設計師,大年期間也在苦逼的加班!
按時間推算,1971年出生的馬化騰,18年前還是一個28歲的小夥。而騰訊公司是在1998年成立,也就是說這條代碼還是在騰訊成立不久,馬化騰寫下的。
聽騰訊的大師兄Tony(張志東)說,騰訊最早的辦公室,是一間舞蹈室,還掛著80年代「迪斯科」風格的大燈球,後來才搬去賽格。
兄弟們加班累了,還可以舞一曲兒放鬆心情,比現在格子間的條件好多了,而最早的企鵝就在這誕生。

03
代碼寫累了,分分鐘嗨起來

後來騰訊就搬到了深圳華強北的賽格科技園,並一待就是6年,正是這6年為今天的騰訊打下了根基。
就是在這個地方,馬化騰和他的小夥伴熬夜修復了多少BUG,QQ誕生賺取第一桶金,香港上市都在這裡度過。(小貼士:騰訊是2004年在香港上市的)


04
偏愛偽代碼的馬總


有傳聞稱當年馬化騰最喜歡的就是編寫偽代碼,他的這點興趣愛好,也不知道是真是假,畢竟大佬不是隨便人都能見的。不知道各位對偽代碼的編寫有什麼心得,下面就來談談偽代碼應該怎麼寫!

偽代碼(Pseudocode)是一種算法描述語言。使用偽代碼的目的是為了使被描述的算法可以容易地以任何一種程式語言(Pascal,C,Java,etc)實現。因此,偽代碼必須結構清晰、代碼簡單、可讀性好,並且類似自然語言。介於自然語言與程式語言之間。
它以程式語言的書寫形式指明算法的職能。相比於程序語言(例如Java, C++,C, Dephi 等等)它更類似自然語言。它是半角式化、不標準的語言。我們可以將整個算法運行過程的結構用接近自然語言的形式(這裡,你可以使用任何一種你熟悉的文字,中文,英文 等等,關鍵是你把你程序的意思表達出來)描述出來. 使用偽代碼, 可以幫助我們更好的表述算法, 不用拘泥於具體的實現。

人們在用不同的程式語言實現同一個算法時意識到,他們的實現(注意:這裡是實現,不是功能)很不同。尤其是對於那些熟練於不同程式語言的程式設計師要理解一個(用其他程式語言編寫的程序的)功能時可能很難,因為程序語言的形式限制了程式設計師對程序關鍵部分的理解。這樣偽代碼就應運而生了。

當考慮算法功能(而不是其語言實現)時,偽代碼常常得到應用。計算機科學在教學中通常使用虛擬碼,以使得所有的程式設計師都能理解。

綜上,簡單的說,讓人便於理解的代碼。不依賴於語言的,用來表示程序執行過程,而不一定能編譯運行的代碼。在數據結構講算法的時候用的很多。

例如,類Pascal語言的偽代碼的語法規則是:在偽代碼中,每一條指令佔一行(else if,例外)。指令後不跟任何符號(Pascal和C中語句要以分號結尾)。書寫上的「縮進」表示程序中的分支程序結構。這種縮進風格也適用於if-then-else語句。用縮進取代傳統Pascal中的begin和end語句來表示程序的塊結構可以大大提高代碼的清晰性;同一模塊的語句有相同的縮進量,次一級模塊的語句相對與其父級模塊的語句縮進。

算法的偽代碼語言在某些方面可能顯得不太正規,但是給我們描述算法提供了很多方便,並且可以使我們忽略算法實現中很多麻煩的細節。通常每個算法開始時都要描述它的輸入和輸出,而且算法中的每一行都給編上號碼,在解釋算法的過程中會經常使用算法步驟中的行號來指代算法的步驟。算法的偽代碼描述形式上並不是非常嚴格,其主要特性和通常的規定如下:

1) 算法中出現的數組、變量可以是以下類型:整數、實數、字符、位串或指針。通常這些類型可以從算法的上下文來看是清楚的,並不需要額外加以說明。

2) 在算法中的某些指令或子任務可以用文字來敘述,例如,"設x是A中的最大項",這裡A是一個數組;或者"將x插入L中",這裡L是一個鍊表。這樣做的目的是為了避免因那些與主要問題無關的細節使算法本身雜亂無章。

3) 算術表達式可以使用通常的算術運算符(+,-,*,/,以及表示冪的^)。邏輯表達式可以使用關係運算符=,≠,<,>,≤和≥,以及邏輯運算符與(and),或(or),非(not)。

這裡a是變量、數組項,b是算術表達式、邏輯表達式或指針表達式。語句的含義是將b的值賦給a。

5) 若a和b都是變量、數組項,那麼記號a<->b 表示a和b的內容進行交換。
這裡c是邏輯表達式,s和s′是單一的語句或者是被括在do和end之間的語句串。對於上述兩種形式,假若c為真,則s被執行一次。假若c為假,則在第一種形式中,if語句的執行就完成了,而在第二種形式中,執行s′。在所有的情況下,控制就進行到了下一個語句,除非在s或s′中的goto語句使控制轉向到其它地方。

這裡c是邏輯表達式,而s是由一個或更多個語句組成的語句串。當c為真時,執行s。在每一次執行s之前,c都被檢查一下;假若c為假,控制就進行到緊跟在while語句後面的語句。注意,當控制第一次達到while語句時,假若c為假,則s一次也不執行。

for var init to limit by incr dosend


這裡var是變量,init、limit和incr都是算術表達式,而s是由一個或多個語句組成的語句串。初始時,var被賦予init的值。假若incr≥0,則只要var≤limit,就執行s並且將incr加到var上。(假若incr<0,則只要var≥limit,就執行s並且將incr加到var上)。incr的符號不能由s來該改變。

9) exit語句可以在通常的結束條件滿足之前,被用來結束while循環或者for循環的執行。exit導致轉向到緊接在包含exit的(最內層)while或者for循環後面的一個語句。

10) return用來指出一個算法執行的終點;如果算法在最後一條指令之後結束,它通常是被省略的;它被用得最多的場合是檢測到不合需要的條件時。return的後面可以緊接被括在引號的信息。

11) 算法中的注釋被括在/* */之中。諸如read和output之類的各種輸入或者輸出也在需要時被用到。

偽代碼只是像流程圖一樣用在程序設計的初期,幫助寫出程序流程。簡單的程序一般都不用寫流程、寫思路,但是複雜的代碼,最好還是把流程寫下來,總體上去考慮整個功能如何實現。寫完以後不僅可以用來作為以後測試,維護的基礎,還可用來與他人交流。但是,如果把全部的東西寫下來必定可能會讓費很多時間,那麼這個時候可以採用偽代碼方式。比如:

IF 九點以前 THEN do 私人事務; ELSE 9點到18點 THEN 工作; ELSE 下班; END IF


這樣不但可以達到文檔的效果,同時可以節約時間. 更重要的是,使結構比較清晰,表達方式更加直觀.

下面介紹一種類Pascal語言的偽代碼的語法規則。

在偽代碼中,每一條指令佔一行(else if 例外,),指令後不跟任何符號(Pascal和C中語句要以分號結尾);

書寫上的「縮進」表示程序中的分支程序結構。這種縮進風格也適用於if-then-else語句。用縮進取代傳統Pascal中的begin和end語句來表示程序的塊結構可以大大提高代碼的清晰性;同一模塊的語句有相同的縮進量,次一級模塊的語句相對與其父級模塊的語句縮進;

在偽代碼中,通常用連續的數字或字母來標示同一即模塊中的連續語句,有時也可省略標號。

在偽代碼中,變量名和保留字不區分大小寫,這一點和Pascal相同,與C或C++不同;

在偽代碼中,變量不需聲明,但變量局部於特定過程,不能不加顯示的說明就使用全局變量;

賦值語句用符號←表示,x←exp表示將exp的值賦給x,其中x是一個變量,exp是一個與x同類型的變量或表達式(該表達式的結果與x同類型);多重賦值i←j←e是將表達式e的值賦給變量i和j,這種表示與j←e和i←e等價。


x = y;x = 20*(y+1);x = y = 30;


選擇語句用if-then-else來表示,並且這種if-then-else可以嵌套,與Pascal中的if-then-else沒有什麼區別。

if (Condition1)then [ Block 1 ]else if (Condition2)then [ Block 2 ]else [ Block 3 ]


循環語句有三種:while循環、repeat-until循環和for循環,其語法均與Pascal類似,只是用縮進代替begin - end;

1. x02. y03. z ← 04. while x < N
1. do xx + 12. yx + y3. for t ← 0 to 10
1. do z ← ( z + x * y ) / 1002. repeat
1. yy + 12. z ← z - y3. until z < 04. z ← x * y5. yy / 2


x = y = z = 0;while( z < N ){x ++;y += x;for( t = 0; t < 10; t++ ){z = ( z + x * y ) / 100;do {y ++;z -= y;} while( z >= 0 );}z = x * y;}y /= 2;


數組元素的存取有數組名後跟「[下標]」表示。例如A[j]指示數組A的第j個元素。符號「 …」用來指示數組中值的範圍。

A[1…j]表示含元素A[1], A[2], … , A[j]的子數組;

複合數據用對象(Object)來表示,對象由屬性(attribute)和域(field)構成。域的存取是由域名後接由方括號括住的對象名表示。

數組可被看作是一個對象,其屬性有length,表示其中元素的個數,則length[A]就表示數組A中的元素的個數。在表示數組元素和對象屬性時都要用方括號,一般來說從上下文可以看出其含義。

用於表示一個數組或對象的變量被看作是指向表示數組或對象的數據的一個指針。對於某個對象x的所有域f,賦值y←x就使f[y]=f[x],更進一步,若有f[x]←3,則不僅有f[x]=3,同時有f[y]=3,換言之,在賦值y←x後,x和y指向同一個對象。
有時,一個指針不指向任何對象,這時我們賦給他nil。

函數值利用 「return (函數返回值)」 語句來返回,調用方法與Pascal類似;過程用 「call 過程名」語句來調用;

1. x ← t + 102. y ← sin(x)3. call CalValue(x,y)

參數用按值傳遞方式傳給一個過程:被調用過程接受參數的一份副本,若他對某個參數賦值,則這種變化對發出調用的過程是不可見的。當傳遞一個對象時,只是拷貝指向該對象的指針,而不拷貝其各個域。

開始置t的初值為1置i的初值為2當i<=5,執行下面操作:使t=t*i使i=i+1{循環體到此結束}輸出t的值結束

begini→t2→iwhile i<=5{t*i→ti+1→i}print tend


老師說編程序前要養成寫算法的好習慣,覺得流程圖太煩,比較喜歡偽代碼。感覺寫出偽代碼就等於編出程序了,所以很懶,很少寫算法。
馬化騰可以說是程式設計師界的傑出人才,想當年他也要苦逼的加班。馬化騰如今的成功,不知道是不是加班加多了,激發了他的鬥志。當然,這是玩笑話。畢竟作為程式設計師,相信大家加班都加習慣了。關於上面偽代碼的編寫,大家還有什麼看法,歡迎踴躍回復。

相關焦點

  • 馬化騰每天刷 Leetcode?代碼你打算寫到幾歲?雷軍、張一鳴都曾寫過...
    馬化騰可以算得上是中國最早的一批程式設計師之一,如果身價超3千億的他還在每天寫代碼,確實是"不忘初心"。絕大多數的網際網路大佬創業成功之後,已不用再親自寫代碼。這也代表,他們已經通過寫代碼創造出市場最需要的產品,實現巨大商業價值。而他們曾經寫出的代碼,即便放到今天,也會被很多開發者交口稱讚。
  • Leetcode驚現馬化騰每天刷題?為啥大佬都這麼努力!
    馬化騰稱得上是中國最早的一批程式設計師之一,如果身價超過千億的他還在每天寫代碼,真就可以說是「不忘初心」。 馬化騰做碼農時的勤奮是有跡可循的。 2015年8月,網上首次曝光馬化騰寫過的代碼,寫作日期是在1999年2月21日、大年初六。
  • 讓軟體自己寫軟體,機器編程未來會取代程式設計師嗎?
    機器編程會導致失業?然而,強大會不會意味著取代?功能如此優越的機器編程在未來是否會讓部分程式設計師失業?這種擔憂並不難理解,畢竟如果機器編程可以實現自動化構建程序,那原來做這件事的人該怎麼辦?Justin 其實經常被問到這個問題,但 Justin 始終認為,機器編程如果成功,那未來只會創造數千萬甚至數億個就業機會,而非取代專業程式設計師使其失業。他的理由很簡單,有兩個方面:當今存在的大多數機器編程系統都需要大量的數據。數據通常是以代碼的形式存在,而代碼則是由專業程式設計師所編寫。
  • 看了馬雲、馬化騰、王健林的父親,你認為他們真的是白手起家嗎?
    馬雲、馬化騰、王健林就是我們眼中勵志的例子,他們的成功鼓舞了很多人,讓我們相信我們也可以通過努力像他們一樣賺很多錢。可是,那些我們熟知的首富們,看看他們的父親,他們真的是「白手起家」嗎?阿里巴巴馬雲馬雲創業奮鬥的事跡,在我們印象中是相當艱難和辛酸的。
  • 我是培訓機構出身的程式設計師,不敢告訴任何人
    很多培訓機構出來的程式設計師在面試時是不會告訴用人單位培訓背景的,有些人甚至會刻意隱瞞這段經歷。「好多人被公司知道後就直接被辭退了,有的人還背著房貸、要贍養老人,但也沒有辦法。」小健說。在小右看來,培訓機構其實是複製粘貼出來一堆差不多的人。「人家用大學四年打下基礎,你培訓幾個月速成,很難完全領悟。」
  • 如果把程式設計師們細分為各種貓,你會是哪款「程序貓」呢?
    管理一個程式設計師團隊通常被形容為「牧養貓」,為什麼人們會把程式設計師形容為貓?,大概是因為貓的孤傲、專注和超高的忍耐性,和程式設計師特別的像。那如果把程式設計師們比喻為貓,你覺得自己屬於哪種貓呢?1.夜貓子: 這種程式設計師隔三差五的搞一次通宵奮戰。
  • 馬化騰提出的「全真網際網路」到底啥意思?
    移動網際網路十年發展馬化騰提出未來的關鍵機會因為身體原因,Pony馬已經很久沒出現在公眾視野裡了。最近,騰訊內部出了一本2020年度特刊《三觀》——「以一年為單位,記錄騰訊的成長和主要變化」,Pony馬親自為這本書寫了前言,其重要性不言自明。
  • 程式設計師:你的代碼為誰而寫 - OSCHINA - 中文開源技術交流社區
    為了突出的考核結果 [至尊版]當管理者本身不懂代碼,卻有一套程式設計師「好壞」評價標準時,會出現什麼情況?程式設計師要理清這套標準並不困難,因為他們的特長就是解決難題,然後他們會努力完善自己,從而迎合評價標準。
  • 程式設計師能做一輩子嗎
    年齡大了,以後會被頂替嗎?能升到管理嗎?問題還有很多,不過這些最為突出,細思極恐。我等程式設計師,大多數都不願意去想這些。你得會寫文章,還得get到人們的點,讓人們能夠讀到你的文章。薪資這塊就不用說了,肯定比做技術差的多,無論哪個城市。有些人可能會想了:我可以先進去,順便學習一下這方面的知識,然後自己單幹。而現實的情況是:人家根本不要你。
  • 對不住,我真沒本事幫你約見馬化騰、馬雲
    我說:「那也夠可以了,能讓我蹭一下嗎?」對方說:「那位基金經理看了一下名單,皺了皺眉頭,說……」我說:「別賣關子了,基金經理說什麼啦?」對方長嘆道:「基金經理說,這幾個人不夠分量,還是等你約到馬化騰、馬雲之後再說吧!」
  • 騰訊帝國傳,《馬化騰》是如何只用6年時間,就成為億萬富翁的呢
    中國最會賺錢的富二代是誰,他家境優渥,父親和李嘉誠是老鄉私交甚好,1989年,他以739分的高分考入了深圳大學計算機系,大學的時候他是班裡唯二有自己電腦的人,那時候的一臺電腦,頂得上一名普通職工一年的工資,他經常用這臺電腦寫「病毒程序」,把機房的電腦全部鎖死,氣得老師大罵,這麼好的技術,就不能幹點兒好事兒嗎?
  • 印度首富身價超巴菲特 富二代出身身家超過馬雲、馬化騰
    首頁 > 外聞 > 關鍵詞 > 巴菲特最新資訊 > 正文 印度首富身價超巴菲特 富二代出身身家超過馬雲、馬化騰
  • 大家好,我是結城浩,我為程式設計師寫了一本數學書
    還記得《數學女孩》的作者結城浩嗎?他還有一個身份:程式設計師。▲ 圖為結城浩先生在社交網站上使用的頭像結城浩生於 1963 年,是日本資深技術作家和程式設計師。在程式語言、數學、設計模式、加密技術等領域,編寫了很多深受歡迎的入門書。
  • 馬雲、馬化騰都是白手起家的嗎?看看他們的父親,你就明白了
    馬雲、馬化騰富豪都是白手起家的嗎?看看他們的父親,你就明白了在現在這個金錢至上的時代當中,家世以及長相都可以變得不重要,只要這個人有錢,那麼他將會有一些比較好的關注度,而現在的很多人工作基本上都是為了錢而生活,現在的人們開始漸漸忘記了關於生活的一些意義,僅僅只是依靠著這些金錢物質來滿足生活。
  • 36歲的博士程式設計師找不到工作?大廠的「年齡歧視」從來都不是秘密
    【新智元導讀】一名36歲的機器學習專業博士,能夠在矽谷找到工作嗎?Reddit上的一個提問又引發了大家對程式設計師「年齡危機」的討論。無論是矽谷還是國內BAT等科技網際網路企業,「年齡歧視」已經是一個不爭的事實。但對於那些大齡程式設計師而言,35歲真的就意味著他們要被市場淘汰了嗎?
  • 讓AI來寫代碼,程式設計師要讓自己失業了,會畫草圖就能開發手機APP
    讓AI來寫代碼,程式設計師要讓自己失業了,會畫草圖就能開發手機APP 2020-11-
  • IT是程式設計師嗎
    程式設計師平時都做什麼?it是程式設計師嗎?這些疑問,小編一一為你解答。IT是什麼意思?IT(Information Technology):即信息科技和產業的意思。它主要是應用計算機科學和通信技術來設計、開發、安裝和實施信息系統及應用軟體。它也常被稱為信息和通信技術。
  • 好傢夥,馬化騰又出山了!
    郭拽拽謙虛小王子張小龍曾經含蓄地表達過地球上產品經理的排名:賈伯斯第一,馬化騰第二,微信之父他自己只能排第三。江湖地位如此之高的小馬哥,究竟有過什麼拿得出手的產品設計呢?試問誰的14歲沒有在QQ空間寫過類似「從此。愛情,絕口不提。」之類酸澀的話呢?小孩們還會發匿名的「秘密」,分享成績的煩惱,姐妹的八卦。從營收上來說,QQ空間一直都沒有進行過多收費模式的探索,小馬哥也是免費和年輕人們「交個朋友」。
  • 字節跳動給程式設計師的節日卡寫著「2020-1024」
    字節跳動給程式設計師的節日卡寫著「2020-1024」 996?字節跳動給程式設計師的節日卡寫著「2020-1024」 今日迷惑行為 10-24 18:07 【字節跳動給程式設計師的節日卡寫著「2020-1024」】字節給程式設計師發了一張節日卡,上面的數字是什麼含義呢?
  • 在中國,程式設計師這行能幹一輩子嗎?
    相比於國外的大齡、高齡程式設計師,35歲程式設計師「天花板」,已經成為一個廣為流傳的梗。程式設計師在內的網際網路工作者過年回家,恐怕也沒少被質疑這一行就是碗青春飯。但事實真的是如此嗎?唯一會讓朱老師感覺到年齡焦慮的,是「學不動」的問題:是會有擔心,自己的技術能力突然就落後了。不過,碼代碼的快樂會衝淡這種憂慮——作為一個主業是DevOps的程式設計師,朱老師最大的業餘愛好是遊戲開發和折騰伺服器。談到自己的未來,已經邁過30歲門檻的朱老師說:未來3-5年應該是不會失業的。