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

2020-12-11 電子工程專輯
關於馬化騰寫代碼的水平,網上有一個段子:曾經和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


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

相關焦點

  • 曾經寫代碼的馬化騰,居然熱衷於偽代碼?一步步教你寫偽代碼!
    關於馬化騰寫代碼的水平,網上有一個段子:曾經和pony(馬化騰)一起寫過代碼。當時我、pony、馬克3人擠在一個只有10個位置的房間裡,埋頭開發,用的啥語言我忘了。這是馬化騰當年寫的代碼: 圖片右上角寫著編寫的日期是99年2月21日,21日是大年初六啊! 馬化騰當年作為一個程式設計師,大年期間也在苦逼的加班!
  • 了解偽代碼
    使用偽代碼的目的是使被描述的算法可以容易地以任何一種程式語言(Pascal,C,Java等)實現。因此,偽代碼必須結構清晰、代碼簡單、可讀性好,並且類似自然語言。 介於自然語言與程式語言之間。以程式語言的書寫形式指明算法職能。使用偽代碼, 不用拘泥於具體實現。相比程序語言(例如Java, C++,C, Dephi 等等)它更類似自然語言。
  • 機器編程,會讓程式設計師丟飯碗嗎?
    它會在未來給我們的世界帶來顛覆性改變嗎?它會讓未來的程式設計師丟掉飯碗嗎?它與目前流行的低代碼開發是不是一回事兒?未來程序將無處不在如今IT業界赫赫有名的大佬很多是編程出身,包括微軟創始人比爾蓋茨、Facebook的創始人扎克伯格,也包括中國的諸多網際網路大佬——騰訊的馬化騰、百度的李彥宏、小米的雷軍、360的周鴻禕、微信之父張小龍、字節跳動的張一鳴等,全都是寫程序出身。
  • 機器編程會讓程式設計師們丟掉飯碗嗎?
    原標題:機器編程會讓程式設計師們丟掉飯碗嗎?它會在未來給我們的世界帶來顛覆性改變嗎?它會讓未來的程式設計師丟掉飯碗嗎?它與目前流行的低代碼開發是不是一回事兒?
  • 馬化騰每天刷 Leetcode?代碼你打算寫到幾歲?雷軍、張一鳴都曾寫過...
    我當時負責寫一個通訊模塊,有一個 bug 弄了兩天,沒有一點進展,下樓準備買點東西吃,消消愁。回來發現 pony 光著膀子,捧著瓶啤酒,站在陽臺,望著寂靜的夜,回頭冷靜地和我說了句:"幫你搞好了。"雖然沒有確切材料能說明馬化騰當年的代碼水平,但他做碼農時的勤奮是有跡可循的。2015年8月,網上首次曝光馬化騰寫過的代碼,寫作日期是在1999年2月21日、大年初六。
  • 馬雲經常被其他國家的領導人接見,為何馬化騰沒有這個待遇?
    最後成了兩敗俱傷,只能握手言和,但發展到如今,馬雲和馬化騰難免會被放在一起比較,比財富、比社會責任感等等,有人就提出了一個問題,為什麼經常能看到馬雲被外國領導接見,並且相談甚歡,但為何馬化騰沒有呢?馬雲和馬化騰本質上就是兩類人其實會出現這種情況也不足為奇,畢竟馬雲和馬化騰的性格也完全不一樣,馬雲在國內的曝光率眾所周知,可以說是自帶「明星光環」,而馬化騰則更偏向於走技術流,再者說,馬化騰本身就是程式設計師出身,雖然做的是社交領域,但不代表他就喜歡去社交。
  • 培訓班出身的程式設計師,和科班程式設計師有什麼區別?
    對於程式設計師的專業出身,一種是科班程式設計師,也就是上了大學的程式設計師,一種是在培訓機構用三五個月學完了技術,然後出來找工作的程式設計師。非科班的程式設計師缺乏底層知識和原理,根基不穩導致他們很難到達程式設計師行業的金字塔尖。個人認為,更看好科班出身的程式設計師。
  • 程式設計師一天工作量改了5行代碼,工作很輕鬆?
    「不是吧,你今天這麼輕鬆?」「哪裡輕鬆了,剛改好了5行代碼呢,耗了不少腦細胞」張工說,以為妹子會體諒。「不是吧,你這一天就改5行代碼,還說不輕鬆,你看看我,我今天做了兩張報表了,忙得夠嗆的,還是你們程式設計師好啊。
  • Python零基礎入門—算法的實現與偽代碼
    老師在這裡寫出計算長方形面積算法的步驟,同學們可以和自己寫的算法步驟比較一下,看看哪個寫的更詳細和完善一些?下面我們給出計算長方形面積的算法步驟,不過這次的算法步驟是站在計算機角度來寫的:第一步,算法的輸入就是長方形面積的長和寬。因次要設置num1和num2兩個變量,接收用戶輸入的長度和寬度,並存儲到num1和num2兩個變量。
  • 馬雲經常被外國領導人接見,為什麼馬化騰沒有這個待遇?
    在中國,有兩個企業家應該絕大多數人都知道,那就是馬雲和馬化騰,一個是電商領域的巨頭,一個在社交領域中「獨佔鰲頭」,可以說他們都在自身的領域中做到了第一,而隨著企業的不斷擴張,企業也投資或者進入了各種各樣的行業中,不過「盤子就那麼大」,你看中的別人也看中,馬雲和馬化騰之間難免就產生了競爭
  • 對程式設計師來說最難的是寫代碼嗎?
    相信看到這個標題的同學們都有自己的想法,可能剛剛進入這個行業的同學們會非常認同寫代碼就是程式設計師的主要工作,然而當你工作一定時間之後,寫代碼將變得不是那麼「重要」了,在悟空問答中眾位大咖為這個問題提供了多種多樣的答案:    答案一:寫代碼是程式設計師最主要工作,但是卻不是最難的工作,最難的是踢皮球和吵架!
  • 程式設計師婉拒面試,HR言論引爭議!網友:HR情商居然沒程式設計師高
    程式設計師婉拒面試,HR言論引爭議!網友:一個HR情商居然沒程式設計師高大概就是面試的程式設計師可能因為各種原因不想去面試這家公司,找了一個相當硬核不管是誰都無法拒絕的理由推掉了面試...但是由於朋友圈的原因被HR看到了,所以HR明白過來以後開始吐槽!
  • 福布斯中國發布50位最佳CEO,有多少是工程師出身?雷軍算嗎?
    出身工程師成為頂級公司的CEO,可能是EDN電子技術設計工程師粉絲們熱衷的一個話題。能夠做到頂級公司CEO也許是很多工程師的目標和希望。今天我們就盤點最新的福布斯中國發布的50位中國最佳CEO中有哪些是工程師出身。小米雷軍上榜了嗎?
  • 馬化騰提出的「全真網際網路」到底啥意思?
    移動網際網路十年發展馬化騰提出未來的關鍵機會因為身體原因,Pony馬已經很久沒出現在公眾視野裡了。最近,騰訊內部出了一本2020年度特刊《三觀》——「以一年為單位,記錄騰訊的成長和主要變化」,Pony馬親自為這本書寫了前言,其重要性不言自明。
  • 以後程式設計師可能再也不用寫代碼了!你信嗎?
    一位來自阿里巴巴程式設計師的吐槽,說出了無數程式設計師的心聲。軟體進步靠研發,研發進展靠程式設計師,程式設計師寫代碼主要靠加班。據說,十個程式設計師裡有十一個都曾經歷過996,乃至007的工作節奏。一個成熟的軟體,就要學會自己寫代碼來自飛算全自動軟體工程平臺發布會(下文簡稱:發布會)的一段「飛算全自動軟體工程平臺PK傳統軟體開發」的視頻。讓不少程式設計師都心跳加速。
  • 熱門問答:馬化騰|你覺得支付寶紅包之後,馬化騰接下來會有什麼動作?
    馬化騰在網絡上一向話題性十足,此前有多位網友曾對其進行發問,引來了大批網友圍觀討論,小編精選出以下幾個熱門問題供大家討論:你覺得支付寶紅包之後,馬化騰接下來會有什麼動作?可能會讓大家失望了,支付寶和微信兩個死對頭絕對不會打價格戰,讓大家有搶不完的紅包和領不完的賞金,只會相互競爭,共同進步。我們去商店消費不難發現收銀臺上還是微信和支付寶兩個付款二維碼,因為微信重社交和支付重消費的本質沒有發生變化,就好像人的基因,從出生到死亡一生相隨。
  • 「煮熟的鴨子飛了」,馬化騰早已「洞察」支付寶,還是理工男靠譜
    這位文科生出身的網際網路大佬有氣吞天下的志向,希望「花唄」成為年輕人的「福報」,然而微信的老闆馬化騰早已「洞察」一切,果然還是理工男靠譜!「此馬非彼馬」,相較於支付寶,人們還是偏愛微信支付,究竟支付寶何錯之有?支付寶這麼高端的產品怎麼就無人「疼愛」呢?網際網路金融公司該何去何從?支付寶,何錯之有?
  • 嫁給程式設計師有什麼好處?程式設計師新郎接親,被要求現場寫代碼告白
    很多人一談到程式設計師,是不是都覺得他們搞開發的,一定是非常聰明,鐵飯碗,工資很高,是不是都覺得程式設計師棒棒的,好崇拜,好羨慕,如果談到結婚,你會選擇嫁給程式設計師嗎?近日程式設計師新郎接親,被要求現場寫代碼告白,你知道嫁給程式設計師有什麼好處嗎?
  • 程式設計師真的需要程式設計師鼓勵師嗎?
    如以上漫畫所表達,有的程式設計師是十分反感工作時被打斷的。「從程式設計師的角度來說,一旦開始寫代碼,一點點打擾都不想有。一直覺得項目領隊就是程式設計師鼓勵師,雖然可能顏值不夠高、聲線不夠嗲,但:1)程式設計師遇到技術難題的時候:幫著寫代碼、查資料、找外援…2)程式設計師心情不好的時候:忙著請吃飯、組織活動3)程式設計師單身沒對象的時候:搜羅周圍的單身靠譜男女青年4)程式設計師的產品遇到bug被更大的老闆或者用戶罵的時候:只身前往背黑鍋5)程式設計師遇到特殊情況鐵定要離開的時候
  • 少兒編程系列-Scratch初級教程:第五課-流程圖和偽代碼
    這節課我們來了解下流程圖和偽代碼。孩子學編程了,很多家長都說:「我的孩子會寫軟體了,會編程了」。但是什麼是軟體?什麼是程序?5.偽代碼偽代碼是用介於自然語言和計算機語言之間的文字和符號來描述算法。目的是為了使得被描述的算法可以容易的使用任何一種程式語言實現。偽代碼的書寫規則:算法的開始和結束,使用begin和end來表示。輸入和輸出,使用read和write來表示。