整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          HTML + CSS 為何得不到編程界的認可?

          果我在用HTML+CSS編程,那么,我能算是名開發人員嗎?

          作者 | Amadou Ibrahim

          譯者 | 彎月,責編 | 郭芮

          以下為譯文:

          有好多次,別人說我算不上程序員,因為我在用HTML + CSS編程。我非常傷心,因為別人都不認為我是開發人員。我們討論了好幾個小時,網上也有很多關于這個話題的討論。但仍然還有人否認這一點,那么就讓我們在本文中好好探討一番。

          在深入探討之前,讓我們先來了解一下HTML + CSS的基礎知識。

          根據維基百科:

          超文本標記語言(英語:HyperText Markup Language,簡稱:HTML)是一種用于創建網頁的標準標記語言。

          這意味著你需要使用HTML來構造顯示在網頁上的文檔。下面是一個基本的HTML頁面的例子:

          <!DOCTYPE html>
          <html>
          <head>
          <!-- Metadata goes here -->
          </head>
          <body>
          <!-- Page content goes here -->
          </body>
          </html>

          除了HTML之外,你還可以利用CSS來美化頁面。這就是為什么我們會結合二者使用。

          根據維基百科:

          層疊樣式表(英語:Cascading Style Sheets,縮寫:CSS;又稱串樣式列表、級聯樣式表、串接樣式表、階層式樣式表)是一種用來為結構化文檔(如HTML文檔或XML應用)添加樣式(字體、間距和顏色等)的計算機語言。

          下面是一個CSS文件的示例:

          *{ 
          box-sizing: border-box; max-width: 100%;
          }
          body{
          font-size: 1.25rem; padding-bottom: 70px;
          background: #fff;
          }

          編程語言的結構

          首先,我不止一次聽說有人認為HTML + CSS沒有編程結構。那么編程結構是什么?經過一番搜索后,我發現,現代編程語言的編程結構幾乎都如出一轍。控制結構和數據結構。別著急,且聽我慢慢道來。

          控制結構

          控制結構指的是,分析變量并根據給定的參數選擇程序執行順序的一塊程序。

          控制結構包括順序控制、條件控制和循環控制。下面我來舉例說明。我使用Ruby語言來書寫示例。別擔心,Ruby很接近英語,非常易于理解。

          順序控制:逐條執行的指令。在下面的示例中,我們將執行一系列指令。

          # Sequences control-structures
          ## Set a new varibale age to 0.
          age = 0
          ## Then another varibale required_age to 15.
          required_age = 15
          ## Print this message "What is your age?" to the user
          puts "What is your age?"
          ## Get the user input and store it in age. Type 14
          age = gets.chomp.to_i
          ## Print this message "You are 14 year's old" to the user
          puts "You are #{age} year's old"

          條件控制:如果條件為true,則執行此處的代碼。程序根據條件的結果,決定要執行的代碼塊。

          # Condition Control Structure
          ## Set a new varibale age to 15.
          age = 15
          ## Then another varibale required_age to 16.
          required_age = 16
          ## check if the user age is less than 16
          if age < 16
          ## If the condition is checked, print the message "Sorry, you can't pass the driver license!" to the user
          puts "Sorry, you can't pass the driver license!"
          else
          ## If the condition is not checked, print this message "Great! You can pass your driver license" to the user
          puts "Great! You can pass your driver license"
          end

          上述指定的代碼塊將循環執行多次,直到條件成立為止。示例中的條件是“counter”等于5。因此,這則消息輸出了5次。

          # Loop Control Structure
          ## Set a variable "counter" to zero
          counter = 1
          ## Iterate through the loop as long as "counter" is less than 5
          while counter <=5 do
          ## Print "Get your driver license with LicenseGuru"
          puts "Get your driver license with LicenseGuru"
          ## Add 1 to the current value of counter
          counter+=1
          end

          那么,HTML+ CSS有這樣的控制結構嗎?你怎么看?

          數據結構

          什么是數據結構?維基百科上說:

          數據結構(英語:data structure)是計算機中存儲、組織數據的方式。

          簡單來說,數據結構表示組織數據、定義數據類型以及操作數據的方法。大多數編程語言都有不同類型的數據,包括字符串、整數、布爾值、數組、對象...

          那么,HTML + CSS也有這種數據結構嗎?此外,還有人說HTML + CSS不具備圖靈完備性——那么,圖靈完備性又是什么?

          我的第一反應也是發懵。但經過幾個小時的查閱后,我有了大致的了解。

          簡而言之,在計算理論里,如果一系列操作數據的規則(如指令集、編程語言、細胞自動機)可以用來模擬單帶圖靈機,那么它是圖靈完備的。

          圖靈機是英國數學家艾倫·圖靈于1936年提出的一種將人的計算行為進行抽象的數學邏輯機,其更抽象的意義為一種計算模型,可以看作等價于任何有限邏輯數學過程的終極強大邏輯機器。

          圖靈機是一個規則、狀態和轉換的系統,并不是指真正的機器。

          如此說來,HTML + CSS確實不具備圖靈完備性。因為HTML + CSS無法更改系統狀態。也無法做出決策或根據輸入更改狀態……

          那么,我還能說HTML + CSS是編程語言嗎?

          CSS的控制結構

          是的,你沒看錯,CSS有自己的控制結構方式。下面是一些例子。

          順序控制

          與其他編程語言一樣,我們可以在CSS中逐行執行指令。

          body{
          // Set the background to white color
          background:#fff;
          // Set the font size to 20px
          font-size: 20px;
          // Set the background to yellow
          background:yellow;
          // Set the font size to 14px
          font-size:14px
          }

          在上述代碼中,第一條指令被覆蓋, 所以最后的結果是:

          條件控制

          @media screen and (max-width: 567px) {
          // Style 1
          }
          @media screen and (max-width: 900px) {
          // style 2
          }

          在上述代碼中,如果設備屏幕的最大寬度為567px,則應用樣式1;如果最大寬度為900px,則應用樣式2。因此,這就是一個條件控制。

          @supports (display: flex) {
          navbar{
          display:flex;
          }
          }

          對于上述navbar的樣式代碼,如果用戶的設備支持,則顯示屬性將設置為“flex”。你甚至可以使用關鍵字“not”書寫false語句:

          @supports not (display: flex) {
          div { float: left; } /* alternative styles */
          }

          循環控制

          你是認真的嗎?是認真的。CSS也有類似循環的指令。盡管看上去與其他編程語言的循環有所不同。CSS的循環指令沒有“for”循環或“while”循環。讓我們看一下這段代碼:

          li a{
          font-weight:700;
          display: block;
          padding: 15px;
          margin-bottom:10px;
          background:#333;
          color:white;
          text-align: center;
          text-decoration: none;
          }
          li a.active{
          background:red;
          color:white;
          }

          第一段代碼告訴瀏覽器循環遍歷“li”元素內所有的“a”元素,然后應用給定的樣式。第二段代碼告訴瀏覽器再循環一遍。如果“a”元素的類為“active”,則應用給定的樣式。因此,我結合使用了循環和條件控制。

          現在你是否同意HTML + CSS具有編程語言結構?你同意?那太好了!我們之間達成了共識,你可以走了。

          哦?你還在繼續閱讀?你還有疑問?那么就讓我來一一解答吧。

          如果有人說CSS具備圖靈完備性,你會說什么?你無言以對,是嗎?事實上,有一位名叫Eli Fox-Epstein的名人證明了這一點。他進行了一項實驗,并證明HTML + CSS具備圖靈完備性,而這個故事發生在2011年。有關的詳細信息,請點擊這里(https://accodeing.com/blog/2015/css3-proven-to-be-turing-complete)。

          所以,你現在可以接受HTML + CSS是一種編程語言了嗎?

          HTML + CSS就是當代網頁的“雙俠”(請參照電影《雙俠》)。

          對于全世界所有的網站而言,無論其服務器端的語言是什么,前端都使用了HTML + CSS。

          當目前為止,互聯網上的網站數目高達17億,供44億用戶使用。而且這個數字還在不斷增長。

          這些網站又分為靜態網站和動態網站。靜態網站僅使用HTML + CSS構建。而動態網站還用到了其他語言。

          其他語言是什么意思?

          為了讓HTML + CSS大放異彩,你還需要其他的編程語言來潤色。常見的編程語言包括PHP、Python、Ruby、Javascript等等。Facebook、Twitter、Google和Medium都是動態網站。他們的網站因結合了多種語言而得以蓬勃發展。

          感謝您的閱讀。如果你有不同的觀點,請在下方留言。

          原文:https://medium.com/swlh/the-most-used-and-unrecognized-programming-languages-b0882e8c8c6f?

          本文為 CSDN 翻譯,轉載請注明來源出處。

          【End】

          文:mindprod.com/jgloss/unmain.html

          譯者:陳皓 (@左耳朵耗子)

          譯文:coolshell.cn/articles/4758.html

          對,你沒看錯,本文就是教你怎么寫出讓同事無法維護的代碼。

          一、程序命名

          • 容易輸入的變量名比如:Fred,asdf
          • 單字母的變量名。比如:a,b,c, x,y,z(如果不夠用,可以考慮a1,a2,a3,a4,….)

          • 有創意地拼寫錯誤。比如:SetPintleOpening, SetPintalClosing。這樣可以讓人很難搜索代碼。

          • 抽象。比如:ProcessData, DoIt, GetData… 抽象到就跟什么都沒說一樣。

          • 縮寫。比如:WTF,RTFSC …… (使用拼音縮寫也同樣給力,比如:BT,TMD,TJJTDS)

          • 隨機大寫字母。比如:gEtnuMbER..
          • 重用命名。在內嵌的語句塊中使用相同的變量名有奇效。
          • 使用重音字母。比如:int ínt(第二個 ínt不是int)
          • 使用下劃線。比如:_, __, ___。
          • 使用不同的語言。比如混用英語,德語,或是中文拼音。
          • 使用字符命名。比如:slash, asterix, comma…
          • 使用無關的單詞。比如:god, superman, iloveu….
          • 混淆l和1。字母l和數字1有時候是看不出來的。

          二、偽裝欺詐

          • 把注釋和代碼交織在一起。

          for(j=0; j<array_len; j+ =8){total += array[j+0 ];total += array[j+1 ];total += array[j+2 ]; /* Main body oftotal += array[j+3]; * loop is unrolledtotal += array[j+4]; * for greater speed.total += array[j+5]; */total += array[j+6 ];total += array[j+7 ];}
          • 代碼和顯示不一致。比如,你的界面顯示叫postal code,但是代碼里確叫 zipcode.
          • 隱藏全局變量。把使用全局變量以函數參數的方式傳遞給函數,這樣可以讓人覺得那個變量不是全局變量。
          • 使用相似的變量名。如:單詞相似,swimmer 和 swimner,字母相似:ilI1| 或 oO08。parselnt 和 parseInt, D0Calc 和 DOCalc。還有這一組:xy_Z, xy__z, _xy_z, _xyz, XY_Z, xY_z, Xy_z。
          • 重載函數。使用相同的函數名,但是其功能和具體實現完全沒有關系。
          • 操作符重載。重載操作符可以讓你的代碼變得詭異,感謝CCTV,感謝C++。這個東西是可以把混亂代碼提高到一種藝術的形式。比如:重載一個類的 ! 操作符,但實際功能并不是取反,讓其返回一個整數。于是,如果你使用 ! ! 操作符,那么,有意思的事就發生了—— 先是調用類的重載 ! 操作符,然后把其返回的整數給 ! 成了 布爾變量,如果是 !!! 呢?呵呵。

          三、文檔和注釋

          • 在注釋中撒謊。你不用真的去撒謊,只需在改代碼的時候不要更新注釋就可以了。
          • 注釋里面寫廢話。比如:/* add 1 to i */
          • 只注釋是什么,而不是為什么
          • 不要注釋秘密。如果你開發一個航班系統,請你一定要保證每有一個新的航班被加入,就得要修改25個以上的位置的程序。千萬別把這個事寫在文檔中。
          • 注重細節。當你設計一個很復雜的算法的時候,你一定要把所有的詳細細設計都寫下來,沒有100頁不能罷休,段落要有5級以上,段落編號要有500個以上,例如:1.2.4.6.3.13 – Display all impacts for activity where selected mitigations can apply (short pseudocode omitted). 這樣,當你寫代碼的時候,你就可以讓你的代碼和文檔一致,如:Act1_2_4_6_3_13 千萬不要注釋度衡單位。比如時間用的是秒還是毫秒,尺寸用的是像素還是英寸,大小是MB還是KB。等等。另外,在你的代碼里,你可以混用不同的度衡單位,但也不要注釋。
          • Gotchas。陷阱,千萬不要注釋代碼中的陷阱。
          • 在注釋和文檔中發泄不滿

          四、程序設計

          • Java Casts。Java的類型轉型是天賜之物。每一次當你從Collection里取到一個object的時候,你都需要把其轉回原來的類型。因些,這些轉型操作會出現在N多的地方。如果你改變了類型,那么你不一定能改變所有的地方。而編譯器可能能檢查到,也可能檢查不到。
          • 利用Java的冗余。比如:Bubblegum b = new Bubblegom; 和 swimmer = swimner + 1; 注意變量間的細微差別。
          • 從不驗證。從不驗證輸入的數據,從不驗證函數的返回值。這樣做可以向大家展示你是多么的信任公司的設備和其它程序員
          • 不要封裝。調用者需要知道被調用的所有的細節。
          • 克隆和拷貝。為了效率,你要學會使用copy + paste。你幾乎都不用理解別人的代碼,你就可以高效地編程了。
          • 巨大的listener。寫一個listener,然后讓你的所有的button類都使用這個listener,這樣你可以在這個listener中整出一大堆if…else…語句,相當的刺激。
          • 使用三維數組。如果你覺得三維還不足夠,你可以試試四維。
          • 混用。同時使用類的get/set方法和直接訪問那個public變量。這樣做的好處是可以極大的挫敗維護人員。
          • 包裝,包裝,包裝。把你所有的API都包裝上6到8遍,包裝深度多達4層以上。然后包裝出相似的功能。
          • 沒有秘密。把所有的成員都聲明成public的。這樣,你以后就很難限制其被人使用,而且這樣可以和別的代碼造成更多的耦合度,可以讓你的代碼存活得更久。
          • 排列和阻礙。把drawRectangle(height, width) 改成 drawRectangle(width, height),等release了幾個版本后,再把其改回去。這樣維護程序的程序員們很快就不明白哪一個是對的。
          • 把變量改在名字上。例如,把setAlignment(int alignment)改成,setLeftAlignment, setRightAlignment, setCenterAlignment。
          • 保留你所有的沒有使用的和陳舊的變量,方法和代碼
          • Final你所有的子結點的類,這樣,當你做完這個項目后,沒有人可以通過繼承來擴展你的類。java.lang.String不也是這樣嗎?
          • 避免使用layout。這樣就使得我們只能使用絕對坐標。如果你的老大強制你使用layout,你可以考慮使用GridBagLayout,然后把grid坐標hard code.
          • 環境變量。如果你的代碼需要使用環境變量。那么,你應該把你的類的成員的初始化使用環境變量,而不是構造函數。
          • 使用全局變量。1)把全局變量的初始化放在不同的函數中,就算這個函數和這個變量沒有任何關系,這樣能夠讓我們的維護人員就像做偵探工作一樣。2)使用全局變量可以讓你的函數的參數變得少一些。
          • 配置文件。配置文件主要用于一些參數的初始化。在編程中,我們可以讓配置文件中的參數名和實際程序中的名字不一樣。
          • 膨脹你的類。讓你的類盡可能地擁有各種臃腫和晦澀的方法。比如,你的類只實現一種可能性,但是你要提供所有可能性的方法。不要定義其它的類,把所有的功能都放在一個類中。
          • 使用子類。面向對象是寫出無法維護代碼的天賜之物。如果你有一個類有十個成為(變量和方法)你可以考慮寫10個層次的繼承,然后把這十個屬性分別放在這十個層次中。如果可能的話,把這十個類分別放在十個不同的文件中。
          • 混亂你的代碼。使用XML。XML的強大是無人能及的。使用XML你可以把本來只要10行的代碼變成100行。而且,還要逼著別人也有XML。(參看,信XML得永生,信XML得自信)
          • 分解條件表達式。如:把 a==100分解成,a>99 && a<101
          • 學會利用分號。如:if ( a );else;{ int d; d = c;}
          • 間接轉型。如:把double轉string,寫成new Double(d).toString 而不是 Double.toString(d)
          • 大量使用嵌套。一個NB的程序員可以在一行代碼上使用超過10層的小括號,或是在一個函數里使用超過20層的語句嵌套{},把嵌套的if else 轉成 [? :] 也是一件很NB的事。
          • 長代碼行。一行的代碼越長越好。這樣別人閱讀時就需要來來回回的
          • 不要過早的return。不要使用break,這樣,你就需要至少5層以上的if-else來處理錯誤。
          • 不要使用{}。不要在if else使用{},尤其是在你重量地使用if-else嵌套時,你甚至可以在其中亂縮進代碼,這樣一來,就算是最有經驗的程序員也會踩上陷阱。
          • 瑣碎的封裝。比較封裝一個bool類,類里面什么都做,就是一個bool.
          • 循環。千萬不可用for(int i=0; i<n; i++)使用while代替for,交換n和i,把<改成<=,使用 i–調整步伐 。

          五、測試

          • 從不測試。千萬不要測試任何的出錯處理,從來也不檢測系統調用的返回值。
          • 永遠不做性能測試。如果不夠快就告訴用戶換一個更快的機器。如果你一做測試,那么就可能會要改你的算法,甚至重設計,重新架構。
          • 不要寫測試案例。不要做什么代碼覆蓋率測試,自動化測試。
          • 測試是懦夫行為。一個勇敢的程序員是根本不需要這一步的。太多的程序太害怕他們的老板,害怕失去工作,害怕用戶抱怨,甚至被起訴。這種擔心害怕直接影響了生產力。如果你對你的代碼有強大的信心,那還要什么測試呢?真正的程序員是不需要測試自己的代碼的。

          六、其他

          • 你的老板什么都知道。無論你的老板有多SB,你都要嚴格地遵照他的旨意辦事,這樣一來,你會學到更多的知識以及如何寫出更加無法維護的代碼。
          • 顛覆Help Desk。你要確保你那滿是bug的程序永遠不要被維護團隊知道。當用戶打電話和寫郵件給你的時候,你就不要理會,就算要理會,讓用戶重做系統或是告訴用戶其帳號有問題,是標準的回答。
          • 閉嘴。對于一些像y2k這樣的大bug,你要學會守口如瓶,不要告訴任何人,包括你的親人好友以及公司的同事和管理層,這樣當到那一天的時候,你就可以用這個bug掙錢了。
          • 忽悠。你會學會忽悠,就算你的代碼寫得很爛,你也要為其掛上GoF設計模式的標簽,就算你的項目做得再爛,你也要為其掛上敏捷的標簽,讓整個團隊和公司,甚至整個業界都開始躁動,這樣才能真正為難維護的代碼鋪平道路。

          總之,我們的口號是—— Write Everywhere, Read Nowhere

          如果喜歡本篇文章,歡迎轉發、點贊。關注訂閱號「Web項目聚集地」,回復「進群」即可進入無廣告技術交流。

          文:http://mindprod.com/jgloss/unmain.html

          譯者:陳皓 (@左耳朵耗子)

          譯文:http://coolshell.cn/articles/4758.html

          對,你沒看錯,本文就是教你怎么寫出讓同事無法維護的代碼。

          一、程序命名

          • 容易輸入的變量名。比如:Fred,asdf
          • 單字母的變量名。比如:a,b,c, x,y,z(如果不夠用,可以考慮a1,a2,a3,a4,….)
          • 有創意地拼寫錯誤。比如:SetPintleOpening, SetPintalClosing。這樣可以讓人很難搜索代碼。
          • 抽象。比如:ProcessData, DoIt, GetData… 抽象到就跟什么都沒說一樣。
          • 縮寫。比如:WTF,RTFSC …… (使用拼音縮寫也同樣給力,比如: BT,TMD,TJJTDS)
          • 隨機大寫字母。比如:gEtnuMbER..
          • 重用命名。在內嵌的語句塊中使用相同的變量名有奇效。
          • 使用重音字母。比如:int ínt(第二個 ínt不是int)
          • 使用下劃線。比如:_, __, ___。
          • 使用不同的語言。比如混用英語,德語,或是中文拼音。
          • 使用字符命名。比如:slash, asterix, comma…
          • 使用無關的單詞。比如:god, superman, iloveu….
          • 混淆l和1。字母l和數字1有時候是看不出來的。

          二、偽裝欺詐

          • 把注釋和代碼交織在一起。
          for(j=0; j<array_len; j+ =8)
          {
           total += array[j+0 ];
           total += array[j+1 ];
           total += array[j+2 ]; /* Main body of
           total += array[j+3]; * loop is unrolled
           total += array[j+4]; * for greater speed.
           total += array[j+5]; */
           total += array[j+6 ];
           total += array[j+7 ];
          }
          
          • 代碼和顯示不一致。比如,你的界面顯示叫postal code,但是代碼里確叫 zipcode.
          • 隱藏全局變量。把使用全局變量以函數參數的方式傳遞給函數,這樣可以讓人覺得那個變量不是全局變量。
          • 使用相似的變量名。如:單詞相似,swimmer 和 swimner,字母相似:ilI1| 或 oO08。parselnt 和 parseInt, D0Calc 和 DOCalc。還有這一組:xy_Z, xy__z, _xy_z, _xyz, XY_Z, xY_z, Xy_z。
          • 重載函數。使用相同的函數名,但是其功能和具體實現完全沒有關系。
          • 操作符重載。重載操作符可以讓你的代碼變得詭異,感謝CCTV,感謝C++。這個東西是可以把混亂代碼提高到一種藝術的形式。比如:重載一個類的 ! 操作符,但實際功能并不是取反,讓其返回一個整數。于是,如果你使用 ! ! 操作符,那么,有意思的事就發生了—— 先是調用類的重載 ! 操作符,然后把其返回的整數給 ! 成了 布爾變量,如果是 !!! 呢?呵呵。

          三、文檔和注釋

          • 在注釋中撒謊。你不用真的去撒謊,只需在改代碼的時候不要更新注釋就可以了。
          • 注釋里面寫廢話。比如:/* add 1 to i */
          • 只注釋是什么,而不是為什么
          • 不要注釋秘密。如果你開發一個航班系統,請你一定要保證每有一個新的航班被加入,就得要修改25個以上的位置的程序。千萬別把這個事寫在文檔中。
          • 注重細節。當你設計一個很復雜的算法的時候,你一定要把所有的詳細細設計都寫下來,沒有100頁不能罷休,段落要有5級以上,段落編號要有500個以上,例如:1.2.4.6.3.13 – Display all impacts for activity where selected mitigations can apply (short pseudocode omitted). 這樣,當你寫代碼的時候,你就可以讓你的代碼和文檔一致,如:Act1_2_4_6_3_13()千萬不要注釋度衡單位。比如時間用的是秒還是毫秒,尺寸用的是像素還是英寸,大小是MB還是KB。等等。另外,在你的代碼里,你可以混用不同的度衡單位,但也不要注釋。
          • Gotchas。陷阱,千萬不要注釋代碼中的陷阱。
          • 在注釋和文檔中發泄不滿

          四、程序設計

          • Java Casts。Java的類型轉型是天賜之物。每一次當你從Collection里取到一個object的時候,你都需要把其轉回原來的類型。因些,這些轉型操作會出現在N多的地方。如果你改變了類型,那么你不一定能改變所有的地方。而編譯器可能能檢查到,也可能檢查不到。
          • 利用Java的冗余。比如:Bubblegum b = new Bubblegom(); 和 swimmer = swimner + 1; 注意變量間的細微差別。
          • 從不驗證。從不驗證輸入的數據,從不驗證函數的返回值。這樣做可以向大家展示你是多么的信任公司的設備和其它程序員
          • 不要封裝。調用者需要知道被調用的所有的細節。
          • 克隆和拷貝。為了效率,你要學會使用copy + paste。你幾乎都不用理解別人的代碼,你就可以高效地編程了。
          • 巨大的listener。寫一個listener,然后讓你的所有的button類都使用這個listener,這樣你可以在這個listener中整出一大堆if…else…語句,相當的刺激。
          • 使用三維數組。如果你覺得三維還不足夠,你可以試試四維。
          • 混用。同時使用類的get/set方法和直接訪問那個public變量。這樣做的好處是可以極大的挫敗維護人員。
          • 包裝,包裝,包裝。把你所有的API都包裝上6到8遍,包裝深度多達4層以上。然后包裝出相似的功能。
          • 沒有秘密。把所有的成員都聲明成public的。這樣,你以后就很難限制其被人使用,而且這樣可以和別的代碼造成更多的耦合度,可以讓你的代碼存活得更久。
          • 排列和阻礙。把drawRectangle(height, width) 改成 drawRectangle(width, height),等release了幾個版本后,再把其改回去。這樣維護程序的程序員們很快就不明白哪一個是對的。
          • 把變量改在名字上。例如,把setAlignment(int alignment)改成,setLeftAlignment, setRightAlignment, setCenterAlignment。
          • 保留你所有的沒有使用的和陳舊的變量,方法和代碼
          • Final你所有的子結點的類,這樣,當你做完這個項目后,沒有人可以通過繼承來擴展你的類。java.lang.String不也是這樣嗎?
          • 避免使用layout。這樣就使得我們只能使用絕對坐標。如果你的老大強制你使用layout,你可以考慮使用GridBagLayout,然后把grid坐標hard code.
          • 環境變量。如果你的代碼需要使用環境變量。那么,你應該把你的類的成員的初始化使用環境變量,而不是構造函數。
          • 使用全局變量。1)把全局變量的初始化放在不同的函數中,就算這個函數和這個變量沒有任何關系,這樣能夠讓我們的維護人員就像做偵探工作一樣。2)使用全局變量可以讓你的函數的參數變得少一些。
          • 配置文件。配置文件主要用于一些參數的初始化。在編程中,我們可以讓配置文件中的參數名和實際程序中的名字不一樣。
          • 膨脹你的類。讓你的類盡可能地擁有各種臃腫和晦澀的方法。比如,你的類只實現一種可能性,但是你要提供所有可能性的方法。不要定義其它的類,把所有的功能都放在一個類中。
          • 使用子類。面向對象是寫出無法維護代碼的天賜之物。如果你有一個類有十個成為(變量和方法)你可以考慮寫10個層次的繼承,然后把這十個屬性分別放在這十個層次中。如果可能的話,把這十個類分別放在十個不同的文件中。
          • 混亂你的代碼。使用XML。XML的強大是無人能及的。使用XML你可以把本來只要10行的代碼變成100行。而且,還要逼著別人也有XML。(參看,信XML得永生,信XML得自信)
          • 分解條件表達式。如:把 a==100分解成,a>99 && a<101
          • 學會利用分號。如:if ( a );else;{ int d; d = c;}
          • 間接轉型。如:把double轉string,寫成new Double(d).toString() 而不是 Double.toString(d)
          • 大量使用嵌套。一個NB的程序員可以在一行代碼上使用超過10層的小括號(),或是在一個函數里使用超過20層的語句嵌套{},把嵌套的if else 轉成 [? :] 也是一件很NB的事。
          • 長代碼行。一行的代碼越長越好。這樣別人閱讀時就需要來來回回的
          • 不要過早的return。不要使用break,這樣,你就需要至少5層以上的if-else來處理錯誤。
          • 不要使用{}。不要在if else使用{},尤其是在你重量地使用if-else嵌套時,你甚至可以在其中亂縮進代碼,這樣一來,就算是最有經驗的程序員也會踩上陷阱。
          • 瑣碎的封裝。比較封裝一個bool類,類里面什么都做,就是一個bool.
          • 循環。千萬不可用for(int i=0; i<n; i++)使用while代替for,交換n和i,把<改成<=,使用 i–調整步伐 。

          五、測試

          • 從不測試。千萬不要測試任何的出錯處理,從來也不檢測系統調用的返回值。
          • 永遠不做性能測試。如果不夠快就告訴用戶換一個更快的機器。如果你一做測試,那么就可能會要改你的算法,甚至重設計,重新架構。
          • 不要寫測試案例。不要做什么代碼覆蓋率測試,自動化測試。
          • 測試是懦夫行為。一個勇敢的程序員是根本不需要這一步的。太多的程序太害怕他們的老板,害怕失去工作,害怕用戶抱怨,甚至被起訴。這種擔心害怕直接影響了生產力。如果你對你的代碼有強大的信心,那還要什么測試呢?真正的程序員是不需要測試自己的代碼的。

          六、其他

          • 你的老板什么都知道。無論你的老板有多SB,你都要嚴格地遵照他的旨意辦事,這樣一來,你會學到更多的知識以及如何寫出更加無法維護的代碼。
          • 顛覆Help Desk。你要確保你那滿是bug的程序永遠不要被維護團隊知道。當用戶打電話和寫郵件給你的時候,你就不要理會,就算要理會,讓用戶重做系統或是告訴用戶其帳號有問題,是標準的回答。
          • 閉嘴。對于一些像y2k這樣的大bug,你要學會守口如瓶,不要告訴任何人,包括你的親人好友以及公司的同事和管理層,這樣當到那一天的時候,你就可以用這個bug掙錢了。
          • 忽悠。你會學會忽悠,就算你的代碼寫得很爛,你也要為其掛上GoF設計模式的標簽,就算你的項目做得再爛,你也要為其掛上敏捷的標簽,讓整個團隊和公司,甚至整個業界都開始躁動,這樣才能真正為難維護的代碼鋪平道路。

          總之,我們的口號是—— Write Everywhere, Read Nowhere

          廢了他,歡迎留言區留下你曾經遇到的沒法下手的代碼


          主站蜘蛛池模板: 亚洲一区无码中文字幕乱码| 中字幕一区二区三区乱码| 一区二区中文字幕| 麻豆视频一区二区三区| 亚洲视频在线一区二区三区| 伦理一区二区三区| 国产一区二区三区电影| 久久精品无码一区二区WWW| 国产在线无码视频一区二区三区| 无码人妻精品一区二区三区99不卡 | 国产精品美女一区二区视频| 婷婷国产成人精品一区二| 国产成人一区二区三区精品久久| 影音先锋中文无码一区| 精品欧洲av无码一区二区14| 久久精品免费一区二区| 最新欧美精品一区二区三区| 麻豆AV天堂一区二区香蕉| 波多野结衣一区二区| 国产一区二区久久久| 无码日韩人妻av一区免费| 无码人妻啪啪一区二区| 亚洲欧美日韩中文字幕在线一区| 中文乱码人妻系列一区二区| 欧美激情国产精品视频一区二区| 午夜福利无码一区二区| 成人精品一区久久久久| 天码av无码一区二区三区四区| 精品无码综合一区| 久久精品一区二区免费看| 中文字幕日韩一区| 韩国福利视频一区二区| 波多野结衣在线观看一区| 无码毛片一区二区三区中文字幕 | 无码欧精品亚洲日韩一区| 人妻夜夜爽天天爽爽一区| 无码日韩人妻av一区免费| 一区二区在线播放视频| 国产精品丝袜一区二区三区 | 国产福利一区二区| 国产精品无码一区二区在线观一 |