源:伯樂在線
作者:伯樂在線 艾凌風
1913 年,美利堅工業之神——亨利福特,發明了世界上第一條流水線,汽車工業從此進入了大規模生產的時代。豐田公司提出的豐田生產系統(Toyota Production System)又為汽車工業帶來了很多先進的生產和管理理念。
先進的生產和管理理念是一個行業從小作坊走向規?;谋亟浿?,軟件工業雖然誕生較晚,但是發展卻非常迅速,這也同樣得益于軟件工業開發和管理理念的發展。這其中就從汽車工業吸收了很多成熟的理念。
下面,就讓我們通過這張出自 Toggle 的漫畫,來了解軟件開發模式的變遷史。
總 覽
這張圖片從上向下,五個房間,分別是瀑布模型(waterfall),敏捷開發(agile),看板(KANBAN),SCRUM 和精益軟件開發(lean)。
除了瀑布模型這間小屋和其他小屋有著明顯的界限之外,其他幾種模型就像一個四合院,有著不可分割的關系,這也恰好表明,瀑布模式和敏捷開發模式是軟件工業先后經歷的兩個階段,而 KANBAN,SCRUM 和 LEAN 則是敏捷運動的產物。
OK,客官里邊請,讓我們進第一個屋子看看。
舊時代 ——瀑布式軟件開發
所謂瀑布模型,就是說,軟件開發是按照一定順序展開的(傳統線性生產流程 : Traditional,linear production flow)。就像汽車生產的流水線一樣,每個部門各司其責,工作按照順序展開,交付件單通道線性流動。你看這幅圖,總體上就分為:需求 → 設計 → 制造 → 測試,四個階段。
在這個系統中,客戶被排除在生產系統之外(圍墻是密閉不透明的),它們只能從需求的接口人那里向系統輸入需求(Client places order)。正因如此,客戶無法理解生產所需的費用以及為什么交付總是會延期,因此,也難免會鬧出下面這樣的笑話:
客戶希望你造一輛汽車,卻只愿意支付一輛自行車的開發成本。
需求接納后進入到設計階段:
設計定型后,進入制造階段:
在線性的生產系統中,或者說在瀑布開發模式中,需求和設計是不可以進行修改的。工人被安排在制造系統中一個個工位上,每個人僅負責一個部件的生產和裝配,就像這位盤腿坐著的“I know HTML”大哥一樣,HTML 開發者只需要負責 HTML 的開發而無需,也不應該關心軟件的其他部分。
喂喂喂,這位老鐵,不上班玩什么球???哎,您也別怪他,畢竟交付件(整車/軟件)還沒有完成開發,測試工作自然無法開展,當然得等著咯。這也是瀑布模型最大的弊端,下游工作的開展嚴格依賴于上游交付件的完成情況,這無疑是一種浪費,在爭分奪秒的軟件開發過程中,你能忍受這種浪費嗎?
汽車完成生產和測試之后,一次性交付到客戶手中,完成客戶的全部需求。
走進新時代——敏捷開發模式
敏捷開發以用戶的需求進化為核心,采用迭代、循序漸進的方法進行軟件開發。在敏捷開發中,軟件項目在構建初期被切分成多個子項目,各個子項目的成果都經過測試,具備可視、可集成和可運行使用的特征。換言之,就是把一個大項目分為多個相互聯系,但也可獨立運行的小項目,并分別完成,在此過程中軟件一直處于可使用狀態。
有點書面是吧,其實很簡單,敏捷開發的一個前提假設是:用戶不可能在產品開發之前,設計之初就完整、明確的提出需求。期望用戶在開發過程中不變更需求是不現實的。用戶在開發前提出的需求,可能并不是它們最終希望得到的。
在敏捷開發中,客戶會參與到軟件開發的整個流程中。整個開發過程不再是一堵不透風的墻,透明是關鍵(TRANSPARENCY IS KEY),但是,隨著越來越多的用戶參與進來,越來越多的問題也暴露出來了,越來越多不著調的需求也會被提出。
敏捷開發的另一個重要概念就是迭代,所謂迭代,就是不斷對產品進行細微的、漸進式的改進(Small incremental changes)。
“先給您上個小號的尾翼,用著好我再給您換個大的~”
在敏捷開發中,生產不再是線性的,開發的同時還會進行測試工作,所有人都在同時工作。尷尬等待的日子一去不復返咯~
利用敏捷模式開發出的產品,相較于傳統的軟件交付方式,一個顯著的特點是能夠及時響應客戶需求的變更,不斷適應新的趨勢。
這不,隔壁老王喜當爹了,之前定的法拉利顯得有點不穩重,寶寶也沒地方坐。我們的產品經理和開發人員快速響應,轎跑變商務也不是什么大問題~~ 當然,為誰辛苦為誰忙,客戶爸爸們一定要買單呀!
什么?您問第一稿方案是什么樣的?去翻垃圾桶吧!
一股來自東方的神秘力量——看板
相信各位也注意到了,相對于瀑布模式的井井有條,敏捷開發在靈活的同時,也帶來了一定程度的混亂。
就在這個節骨眼上,還得請這位來自東方的神秘人物——豐田看板大師(KANBAN SENSEI)給你點撥點撥。
KANBAN,不是漢語拼音,更不是英文縮寫,它來自日語“看板”,カンバン的羅馬拼寫:Kanban。它正是豐田生產系統的一個重要概念:
看板管理,常作“Kanban管理”,是豐田生產模式中的重要概念,指為了達到及時生產(JIT)方式控制現場生產流程的工具。及時生產方式中的拉式(Pull)生產系統可以使信息的流程縮短,并配合定量、固定裝貨容器等方式,而使生產過程中的物料流動順暢。
KANBAN要求把開發中的任務,以 TODO List 的方式表現出來:
形式可以是即時貼,也可以是可視化軟件等等。
在制造業中,看板也是非常重要的管理方法。也有將其稱為目視化管理的。
SCRUM又是什么?
Scrum原始含義是指英式橄欖球次要犯規時在犯規地點對陣爭球。爭球雙方各有8個隊員參與,各方出3名前鋒隊員,并肩各站成一橫排,面對面躬身互相頂肩,中間形成一條通道,其他隊員分別站在后面,后排隊員用肩頂住前鋒隊員的臀部,組成3、2、3或3、4、1陣形。然后,由犯規隊的對方隊員在對陣一側1碼外,用雙手低手將球拋入通道,不得有利于本隊。當球拋入通道時,前排的3對前鋒隊員互相抗擠,爭相踢球給本方前衛或后衛隊員,前衛和后衛隊員必須等候前鋒將球踢回后,方可移動。
在敏捷開發領域,SCRUM是一種迭代式增量軟件開發過程,它包括了一些預定義的角色:
1)產品負責人 Product Owner
產品負責人負責維護訂單。
2)Scrum主管 Scrum Master
SCURM Master 對整個SCRUM 過程負責,不惜一切代價(AT ANY COST),保證團隊的工作時間和計劃。
3)開發團隊 Team
在 SCRUM 過程中,開發團隊通常會進行沖刺 (Sprint),一個沖刺周期的長度通常是2-4周。
在這個沖刺過程中,開發小組專注于完成一組訂單項的開發。比如:制造一個發動機。
對于KANBAN 和 SCRUM,有人說 KANBAN vs SCRUM,也有人說 KANBAN+SCRUM,究竟誰是誰非,我看只有適合自己團隊的才是最好的,畢竟方法和流程是為業務服務的。就這篇漫畫來看,SCRUM + KANBAN 是兩個避免混亂的好方法。
“來來來,兄弟們,我們來開一個關于減少站會的站會~~”
精益軟件開發
第二次世界大戰結束后,豐田公司前社長豐田英二曾經去美國汽車城底特律對福特生產線進行了考察,盡管福特高效的大規模生產線給他造成了很大的沖擊,豐田英二還是非常理智的認識到了當時日本制造業所面臨的困難。經濟蕭條,資源短缺,小批量差異化的需求使他不能盲目的引進這種大規模的生產方式,隨后豐田公司發明并實踐了一系列的管理和生產方法,這些方法在后來被統稱為精益生產和管理方式(lean)。
精益生產的思想, 簡單來說就是Just In Time(JIT),也就是說,只在必要的時候,按照需求的量,僅生產必要的產品,杜絕浪費。
Eric Ries曾在《精益創業實戰》中提出MVP(minimum viable product)概念,意即“最簡可行產品”——用最快、最簡明的方式建立一個可用的產品原型,這個原型要表達出你產品最終想要的效果,然后通過迭代來完善細節。
精益軟件開發不再像傳統的軟件開發一樣,耗時幾年才向客戶交付完整的軟件。取而代之的是,優先建立一個最簡可用的原型產品投放市場或交付到客戶手中。
一輛最簡可用的汽車是什么樣子的呢?不就是四個輪子、一個方向盤、一個座椅然后一起裝在底盤上么。能開、能停、能轉彎不就是汽車嘛。讓客戶先享受到產品帶來的收益是最重要的。
BUT?。。?/p>
你看,這里還有一位失落的大叔。
盡管MPV 的概念聽上去是如此的簡單,可是實施起來卻沒有那么容易。
因為在設計產品原型的過程中,很多設計師是這么做的:把他們認為的產品應當具備的功能羅列出來,然后一一排除,排定優先級,決定哪個功能要在最初的版本中出現,而哪個可以靠后一些。但設計師們往往無法真的只把最必要的功能留在初級版本中——因為誘惑太多。設計師們總希望把很cool、很有驚喜的小細節帶給用戶來博取贊嘆,但從全局來看,其實把某些功能刻意強加進產品,是會削弱產品整體流暢性的。Mr Jamie曾在其博客中把這種心理表現稱作“藝術家心結”。
所有不必的東西(ALL NON-ESSENTIALS ARE THROWN OUT)都不能應用到當前的最小可用產品。你說,藝術家們得多傷心?。ǔ畹暮佣奸L一臉了)。
此外,盡早交付產品給客戶或部署到生產環境,也促進了 DevOps,持續集成(CI),生產環境測試(testing in production)等實踐的發展。盡早交付產品,盡早從用戶獲取反饋,不論是好的還是壞的,促使問題盡早暴露,盡早修復,持續集成,持續改進。
眼尖的童鞋,估計早就看到了桌子上有一只程序員的好朋友 —— 小黃鴨。你還不知道小黃鴨?那你該看看這篇文章:《小黃鴨調試法,每個程序員都要知道的》。
結束語
實際工作中的軟件開發和管理模式,往往并不能純粹的歸類于以上某種類型。即使是相同的開發模型,在不同的團隊中也往往會根據實際情況進行變化和改進,留言告訴我們你所在的公司是如何進行軟件開發的吧~
此外,如果你對我的解析有不同的看法,或者你在圖中看出了新的內涵,也歡迎在評論中互動!
參考
[1] kanban vs scrum vs agile
[2] Scrum vs. 看板,還是Scrum + 看板?
[3] 精益軟件開發
[4] 使用 DevOps 進行精益軟件開發
[5] 豐田生產系統
+“CH050791”后 回“IDCF”,可入qun交流~
我們以往看到的頁面效果中,很多效果是需要JS搭配使用的,而今天在本文中,我將介紹如何使用純HTML打造屬于自己的實用效果。
使用Details和Summary標簽可以創建沒有JavaScript代碼的可折疊手風琴。
效果:
HTML
<details> <summary>Languages Used</summary> <p>This page was written in HTML and CSS. The CSS was compiled from SASS. Regardless, this could all be done in plain HTML and CSS</p> </details> <details> <summary>How it Works</summary> <p>Using the sibling and checked selectors, we can determine the styling of sibling elements based on the checked state of the checkbox input element. </p> </details>
CSS
* { font-size: 1rem; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; } details { border: 1px solid #aaa; border-radius: 4px; padding: .5em .5em 0; } summary { font-weight: bold; margin: -.5em -.5em 0; padding: .5em; } details[open] { padding: .5em; } details[open] summary { border-bottom: 1px solid #aaa; margin-bottom: .5em; }
瀏覽器支持:
該Meter和Progress 的元素標簽的基礎上,你可以調整屬性呈現在屏幕上的進度條。進步有兩個屬性:max和value校準進度條,而Meter標簽提供了更多的定制屬性。
效果:
HTML:
<label for="upload">Upload progress:</label> <meter id="upload" name="upload" min="0" max="100" low="33" high="66" optimum="80" value="50"> at 50/100 </meter> <hr/> <label for="file">File progress:</label> <progress id="file" max="100" value="70"> 70% </progress>
CSS:
body { margin: 50px; } label { padding-right: 10px; font-size: 1rem; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; }
瀏覽器支持:
在定義輸入元素時,您要知道現代瀏覽器已經允許您指定足夠多的輸入類型了。除了你應該已經知道text,email,password,number這些類型外,還有下面的這些。
效果:
HTML:
<label for="date">Enter date:</label> <input type="date" id="date"/> <label for="datetime">Enter date & time:</label> <input type="datetime-local" id="datetime"/> <label for="month">Enter month:</label> <input type="month" id="month"/> <label for="search">Search for:</label> <input type="search" id="search"/> <label for="tel">Enter Phone:</label> <input type="tel" id="tel">
CSS:
input, label {display:block; margin: 5px;} input {margin-bottom:18px;}
各種新輸入類型的MDN文檔非常廣泛且信息量很大。此外,檢查移動輸入類型以了解用戶在移動瀏覽器上時這些輸入元素的鍵盤行為。
video和audio元素雖然現在已經成為HTML規范的一部分,但是你一樣會驚訝于你可以使用video標簽在屏幕上渲染出一個體面的視頻播放器。
<video controls> <source src="https://addpipe.com/sample_vid/short.mp4" poster="https://addpipe.com/sample_vid/poster.png"> Sorry, your browser doesn't support embedded videos. </video
視頻標記中值得注意的一些屬性包括:
瀏覽器支持:
當你想顯示歷史編輯及校對的情況時,blockquote,del和ins元素標簽可以派上用場了。
示例:
HTML:
<blockquote> There is <del>nothing</del> <ins>no code</ins> either good or bad, but <del>thinking</del> <ins>running it</ins> makes it so. </blockquote>
CSS:
del { text-decoration: line-through; background-color: #fbb; color: #555; } ins { text-decoration: none; background-color: #d4fcbc; } blockquote { padding-left: 15px; line-height: 30px; border-left: 3px solid #d7d7db; font-size: 1rem; background: #eee; width: 200px; }
由于中英文引號的不同,使用<q>標記可以讓您很好的解決這個問題,它可使你的內容在大多數瀏覽器上更一致地呈現引號。
HTML:
Don Corleone said <q cite="https://www.imdb.com/title/tt0068646/quotes/qt0361877">I'm gonna make him an offer he can't refuse. Okay? I want you to leave it all to me. Go on, go back to the party.</q></p> <hr/> Don Corleone said <i>"I'm gonna make him an offer he can't refuse. Okay? I want you to leave it all to me. Go on, go back to the party."</i>
CSS:
body { margin: 50px; } q { font-style: italic; color: #000000bf; }
<kbd>標簽應該是一個少為人知的冷門標簽,但這個能使用更好的方式來說明組合鍵的樣式。
HTML:
<p>I know that <kbd>CTRL</kbd>+<kbd>C</kbd> and <kbd>CTRL</kbd>+<kbd>V</kbd> a are like the most used key combinations</p>
CSS:
body { margin: 50px; } kbd { display: inline-block; margin: 0 .1em; padding: .1em .6em; font-size: 11px; line-height: 1.4; color: #242729; text-shadow: 0 1px 0 #FFF; background-color: #e1e3e5; border: 1px solid #adb3b9; border-radius: 3px; box-shadow: 0 1px 0 rgba(12,13,14,0.2), 0 0 0 2px #FFF inset; white-space: nowrap; }
使用figcaption pre code標簽,您可以使用純HTML和CSS呈現出不錯的代碼片段。
HTML:
<figure> <figcaption> Defining a css <code>color</code> property for a class called 'golden' </figcaption> <pre> <code> .golden { color: golden; } </code> </pre> </figure>
CSS:
pre { background-color: #ffbdbd; }
這篇文章也只是拋磚引玉,也許您也有更多私藏的使用技巧,不妨也貼出來分享給大家。
另外,如果您不僅僅限于以上的效率,希望有更完整的動態功能。
例如:您希望在您的頁面中加入Excel功能,可以嘗試葡萄城的 純前端表格控件SpreadJS,再或者您希望為用戶提供更完備、更高效的前端UI控件,您也不妨可以試試 WijmoJS,相信它們都能為您的應用增色不少。
關于葡萄城
賦能開發者!葡萄城公司成立于 1980 年,是全球領先的集開發工具、商業智能解決方案、管理系統設計工具于一身的軟件和服務提供商。西安葡萄城是其在中國的分支機構,面向全球市場提供軟件研發服務,并為中國企業的信息化提供國際先進的開發工具、軟件和研發咨詢服務。葡萄城的控件和軟件產品在國內外屢獲殊榮,在全球被數十萬家企業、學校和政府機構廣泛應用。
now, learn, comprehend, understand 這些動詞都含"懂,知道,明了"之意。
know: 普通用詞,多指通過學習、經驗或他人傳播而得到知識,含直接知道的意味。
【英釋】If you know a fact, a piece of information, or an answer, you have it correctly in your mind.
【例句】 I don't know the name of the place.
我不知道那個地方的名字。
learn: 通常指通過他人而獲得消息或情況,側重從不知到知的變化過程。
【英釋】If you learn of something, you find out about it.
【例句】 It was only after his death that she learned of his affair with Betty.
一直到他死后她才知道他和貝蒂有染。
comprehend : 側重熟悉了解的過程。
【英釋】If you cannot comprehend something, you cannot understand it.
【例句】 I just cannot comprehend your attitude.
我就是無法理解你的態度。
understand : 指對事物已有徹底的認識,不僅知其性質、含義和細節,而且了解其內外的關系。
【英釋】You say that you understand something when you know why or how it happens.
【例句】They are too young to understand what is going on.
他們還太小,不明白發生了什么事。
來源:http://www.bobo0528.com/read-35.html
微信公眾號:詞老大
*請認真填寫需求信息,我們會在24小時內與您取得聯系。