使用Mono平臺前,請牢記產品觀點
技術領域有很多讓人深感困惑的地方,不管是架構師、設計師還是程序員,在完成任務之余,偶爾都有自責的地方:程序員在使用新技術完成任務的時候,有時會覺得自己舊技術都沒有完全掌握,使用新技術有些好高騖遠;設計師對于架構師所采用的新技術和程序員的學習成本表示擔憂;架構師覺得自己可能沒有完全了解技術細節,關心了客戶,卻忽略了程序員的感受。
互聯網充斥著各種技術,從十幾歲編寫第一個BASIC程序到現在,我的感受是:我從技術進步中獲得生產力的提高,技術更新也帶來了新的問題,在新技術的學習和使用過程中,技術創造了無限可能。很好,非常好,但是,大量的學習和試驗時間,使得展示創造力的時間變得少之又少,偉大的創造只因技術學習而晚他人一步,非常可惜。剛開始學習BASIC時,我就想編寫一個俄羅斯方塊的游戲,那是已經確定了基本的矩陣旋轉算法,但是,在老式游戲機上控制圖形實在不容易,沒弄成,我就編寫了一個終端版的打字練習作為處女作。以后的日子里,來來回回幾次,我都沒有完成編寫,感覺每天都在惡補,沒有時間,終于有一次去朋友家,我們打賭我能不能在兩個小時內編出俄羅斯方塊,兩個小時,確實沒編出來,為了方便重用和面向對象,那個簡單的程序用了我9個小時,從晚上10點一直到早晨8點,好在他一直都在睡覺,在他醒來時時,我說:“看,我贏了吧”,我作弊,嘿嘿。但是C語言版的俄羅斯方塊,我150行左右就能搞定,功能全面。那些都是問題的縮影,更深遠的影響在后面。
沒料到博客和論壇一樣充滿爭論,技術的團隊需要討論,但是從來都不需要爭論,爭論反映了參與者試圖確定自己正確性,而不是用來確定對最終用戶是否有益,技術是用來創造產品和改善生活的,只要做到這一點,就是成功的。對產品而言,只有有市場,就能持續生產,就能建生態圈,就能發展。我們爭論和討論的核心是集中于軟件的可行新和正確性的,這是正確的,但是若是過分集中于個人觀點,那么對團隊無益。當談及產品觀點時,有一個廣泛存在的爭論就是,有時,人們認為軟件設計是高科技產品,不能按常規產品一概而論,軟件設計會出現各種特殊因素,要特殊對待。有時,我們坐在一起閑聊時,有人不免抱怨說:“計算機太折磨人了”,很對,我完全贊同,只是,不要忘記:“你坐在電腦前就能實現夢想,過好生活,但是,其他行業可能沒有這沒好,不一定能這樣--自己更多的決定自己的命運。”
當我討論為準備Mono而制作產品時,人們的反映各式各樣,但是對一個平臺和技術永遠都不要咒罵,因為,存在即道理。微軟公司,是優秀的技術托拉斯,成功的商人,有著最優秀的科學家和開發人員,可否記得MFC/ATL帶給你的喜悅,可否記得DirectX,很多與計算同起同休的故事,都是跟Microsoft緊密關聯的,可以說對于Windows平臺而言,軟件設計人員的榮耀都是跟Microsoft的戰略聯系在一起的。微軟的傳奇之處在,當你看到一款產品時,你認為他是一個應用產品,但是最后,微軟總能讓他成為戰略平臺,像Office、SharePoint和Visual Studio 等等。即便在眾多公司競爭愈演愈烈的今天,我從來都沒有忘記windows所帶來的快樂,和Windows平臺所創造的可能性。世界從來都是發展的,說到底,技術也是產品。通常意義上的軟件設計,是為最終用戶設計產品,只要用戶滿意,軟件就能存活;為軟件設計人員設計的產品,生產者是平臺銷售商(像微軟、SUN等等),消費者是開發人員。微軟公司已經從競爭對手那里學到很多,IBM這些年一直在不停的大把撈錢,居然放棄了自己的PC事業,這足見Money的巨大魅力。對微軟而言,微軟公司一直從Windows銷售、Office銷售以及開發工具和服務其產品的銷售賺夠了錢。這些年,技術公司的收益更多的來自最終客戶,這是時代的轉變。Google這樣的公司,取悅開發者的目的是為了更多的吸引最終客戶,雖然單一客戶給Google帶來受益較少,但是從互聯網廣泛的客戶和市場Google賺夠了錢,不用生產信息,只需要收集和顧慮便可,這就是Google的產品,與其說Google是廣告中介商,不如說Google將信息發布者變相買給了信息獲取者;像IBM這樣的公司,關心的是如何吸引大客戶,如何從哪些關心事務、邏輯以及自身業務的大公司撈錢;微軟關心的是如何維護生態圈,如何適應新潮流,這需要成本,并且通常只能獲取間接收益,現在微軟公司明顯增加了最終客戶的比重,更多的制作政府和企業應用軟件,那是極富有前景的。過去的輝煌會積累豐富的基礎,但是也成為前景的阻力。生產軟件,關注客戶,這就是生存之道。
搞清楚技術工作的最終目的是什么:首先,和其他人任何行業一樣,人最大的滿足在于自己,因此,如果你對你的工作很滿意,那么請繼續;技術是為了展現你的思想,因此,如果她辦不到,那么請放棄;技術是為了完成今天的任務,并且能夠為明天投資,如果不能,請放棄(生存壓力,請慎重);最重要的一點,不要忘記了,技術也是一份工作,辛勤工作的目的是為了享受生活,不要忘記親近自己家人。
可能朋友們并不反對這些話,只是,我們都未必明白其內涵,滿足自己是人辦事的一個基本立足點,在團隊里,首先明白這些。適當處理問題,保證項目成功,軟件工廠是神奇的工廠,不管你多么細心,失敗的幾率還是很大,小心一點,留住客戶的錢,攢給BOSS。個人滿足的一個重要部分,就是學習,這是一個風險點,作為個人,會比較趨于這種方式,作為BOSS,在項目成功的前提下,絕對支持,否則,就不那么確定了。技術是為了展現我們的創造力和思想,技術人員面臨的事實就是,一年12個月中,我們需要3個月來學習,不管是架構師、設計師還是程序員,誰都不能例外,否則,明天,你將找不到對自己的滿足:),時間緊迫,明白想擁有的和你能擁有的,在時間有限的情況下,你可否明白,在你的軟件設計生涯中,能否設計一個自己滿意的產品,或者是,你一直都在學習,不曾應用,對開發人員10年如一日,大量的應用、市場、規范、標準、數學學習,不管是基礎學習、應用學習或者是對自己重新定位和確定新目標,時間總是最大的障礙,也許也是最大好朋友和教師,競爭是永無止境的。牢記一點,軟件設計相關的人員不僅僅是生產者,也是消費者,我們消費的能力永遠都趕不上技術公司生產的能力。完成任務很重要,為明天投資也很重要,不管怎樣閑散,我相信軟件設計師、程序員都像蜜蜂一樣勤勞,因此,懶惰根本不是問題,問題是你如何為自己投資,你的最終目標是什么,不要忘記概率論的常識。誠然,你如果中了一百萬的股彩票,生活會一下子變得非常好,你會因此變得很自在,但是你是否曾經因此就留戀股票的事情,你沒有,因為你知道概率,你知道該做什么。同樣,當我們學習技術的時候,技術誠然是越多越好,但是有時技術其實也像股票一般,很有魔力,但是,最終收益必然是有部分因素決定的,我們所學習的部分技術供養了我們,并且明天可能會有其他活法。時間是有限的,你必須明白如何投資,概率,找期望值最大的活法。如果忘記概率,那么,技術人員會認為所有的服務器更多的應該采用微軟的,更多的技術人員都應該向微軟靠攏,畢竟,微軟的方案,總體擁有成本是多有多么有吸引力呀,你現在是否為你作為一名開發者剛到驕傲,我相信,每個人都會,誰會忘記Windows帶來的快樂呢。停下來,考慮一下,你過得是否如預期的好,你是否發現微軟所創造的可能為你創造了價值,Sure,第一批.Net書赫然寫著:“微軟公司為你未來十年做好了準備......",完全沒錯,微軟公司為自己也為生態圈做了十年準備,并且每年都有新十年J。
不要批評任何人,不要批評任何公司,關注產品,關注付你錢的那些人,有些人會讓你賺更多的錢,有些人會最終付你錢,讓這些事情發生,打開潘多拉魔盒的神諭就是產品,不要忘記這一點。還記得軟件工程給你的提示不?可靠性處理、安全性處理、可擴展性處理、兼容性處理和用戶體驗處理等等,種種種種,都是以產品為核心的教義,可否記得,可否做到?如果客戶沒有付你錢,問題在那里?客戶之所以付款,是因為客戶從軟件中的得到了好處,生產力提高、市場的敏捷性、資源和成本的節省,我們的軟件是否幫助客戶做到這一點,如果做到了,下次索取更多的回報,如果沒有,退回你多拿的部分。軟件是抽象和難于使用的,客戶有自己的最終目標,如果他沒有達到,他不會付款。同樣的需求說明書,可能交付不同層次的產品,問題在哪里?如果我們為客戶的未來進行了投資,軟件的可維護性、可靠性,這些能否讓客戶接受她,我們的軟件是否為客戶現在進行了足夠的投資,軟件是否可靠,軟件是否易用;如果為現在進行了投資,那么未來呢?很明顯,資源是有限的,如何均衡資源,如何達到雙贏,永遠記住客戶要什么、我們想提供什么、我們能提供什么、我們該提供什么。誰是上帝,如何投資,期待什么樣的回報,付出什么樣的代價,實際上得到什么。今天的合作,明天的合作。生產產品時,如果忘記概率常識,那么就很難成功。在學習中,如果忘記概率常識,那么必將疲憊而死。自己想做的,自己該做的,自己能做的,如何去做。
從Windows DNA戰略,到Windows .Net戰略,到現在或者是未來的云戰略,我們不可能駁斥Microsoft的道路,因為需求所產是的改變和革新是不能阻擋的,Microsoft是正確的,那只是微軟,你得到了什么,你應該如何做,如何能適應微軟的戰略藍圖,還能做好自己的那部分。我一直覺得,如果想要理解微軟的策略,我們需要從兩頭考慮,架構師心目中的微軟方案和程序員心目中的微軟技術。微軟技術是根據用戶需求改進的,或者說更多的,微軟是由競爭對手所提出的技術方案,確定自己應該如何改進技術戰略,微軟很少創造什么新思想,最后,卻能將新思想表現的淋漓盡致,讓她根據時代的發展演變和延續。架構師心目中的微軟方案,很明顯,是根據戰略需要不時改進自己的技術戰略,非常平滑,微軟高層的視野依然很清晰,10年都就想到的,就知道的,就做到的,今天她做她該做的,她發現,表達不夠優美,應用不夠廣泛,這是程序員視野中技術改進的源動力。至于設計師,那么就是根據兩頭發揮調節作用,對上提供可能性,對下保證可能性。微軟公司從來都沒有忘記產品,技術框架就是她們的產品。
我看到有人為Restfull爭論,因為表達方式就指著框架的優劣,有些太過火。如果微軟有,用就好;沒有,要么等,要么創造;盡最大努力發揮創造力,才是目標。
看待產品,請關注時間段,拿一個已經用了十幾年的方案、技術和最進幾年的新實現相比,顯然,老方法不夠優美,然后因此說他失敗的也太荒唐了,舊產品已經完成了自己的使命,曾經勝出競爭對手就是成功,今天的戰爭是后來者的故事。典型例子很多, COM/COM+/DCOM、內核結構,關于微軟的基礎架構優劣的問題總有說不完的話題,我表示中立,這些產品在歷史贏得客戶、軟件生產商、硬件生產商的支持,取得了成功,那么她就是成功的,今天新競爭要用新產品。看待技術,我們過于偏執,忽略了驅動力,技術只是為了生產產品,技術本身就是不斷改進的產品。
除了微軟之外,世界上還有很多成功的產品:gnu、apache、php、perl、linux、oracle、firefox、safaric、ruby、python、ruby on rails、Novell等等很多,關于這些產品的爭論很多,有些沒有必要,對微軟市場也許很有必要,但是對我們沒有必要。軟件設計者要足夠謙遜,抬頭做人,低頭做事,關注產品。為爭論浪費時間顯然不是蜜蜂族的特征,嘿嘿:)
我想Perl、python和ruby程序員可能都不會花時間做長時間的爭論,因為他們的方案從全局看起來似乎不夠完整,但是,不是所有的客戶都要求面技術面面俱到,迎合需求,做好自己該做的事情,發揮創造力,這就是成功的設計者,也是過的最好的人。
在微軟的平臺下工作就要了解微軟,微軟提供了任何軟件公司都不能提供的巨型軟件生態系統,進化的因素包括了框架和開發工具,微軟的開發工具平臺都會照顧到整生態圈,生態圈就是技術產品存在的理由,這是設計這有時難于把自己事情做好的原因之一,一個技術可以以不同的姿態在多個領域內完美運行,在她所提供的諸多功能之中,你是怎么學習,你如何選擇,怎樣才是最佳做法,如何扮演好自己的角色,這會比較費力,太多太復雜。有時候復雜的平臺遮掩了表達意圖的最佳方式,作為微軟,必須這樣做,作為個體,這有時是一個問題。技術框架帶來的潛在優勢,是否為你的發展鋪平道路,是否幫你更多的解決今天的問題,讓你享受勞動權利的同時,是否過的舒適,不要爭論優劣了,請關注產品。
微軟的正確立場帶來了無限的可能,但是永遠不要忘記自己,不要忘記消費者身份,不要忘記自己生產的職責,否則就會流失最終客戶,流失資金來源。微軟的技術屬于架構導向的,站在架構的高度架構,很好,很強大。如果站在架構的角度學習技術,那么,他將摧毀設計師和程序員的健康。由于架構決定最終產品,所以,微軟采用架構,決定了微軟產品平臺的質量,也決定了最終客戶所見到產品的質量。這個角度不太適合用來學習技術,因為太多太大了。作為最終的設計者必須明白這個差異,做好自己的事情,否則,問題很嚴重。
程序員經常慚愧的一點就是:即使十幾年前的技術,自己似乎都不夠了解,這不是一個問題,現有技術是進化的產物,當你了解和學習現有技術的時候,其實你已經是在研讀過去了,只是了解歷史有利于更好的在現在掌握和利用它,明白她的弱點和優點,預知她的未來(不用參加PDC大會,不用看路線圖,玩笑),他的未來就是為我們服務的,永遠不用悔過,做好自己的事情就好。
現在,也許應該說以前,當ruby程序員在炫耀ruby on rails 對 rest 技術的內在支持時,你會怎么想,你可能會說:“耶,很酷,太棒了”,完了,這就是你該說的全部,你只需知道微軟遲早會提供Rest的支持,并且,更重要的是,確定這是否對你項目產生風險,找到方案在現在避開他。如果你惋惜微軟的緩慢,那么,很抱歉,你不適合在微軟的框架下工作,微軟公司首先關注生產力,其次關注創造力。最早了解技術動向(特別是互聯網領域,微軟為壟斷的領域),在微軟社團可能有些困難,但是通常這是好事,等晚些時間,客戶剛剛意識到需要這種技術時,微軟已經制造出了商業產品級的技術,產品、文檔和示例俱全,你用的時候到了J。
不管是最終產品還是技術產品,市場和用戶就是存在理由。
Mono平臺提供者(Novell) 不用急急茫茫實現wpf、企業服務等等,第三方社團的產品能讓她工作的很好,至少對php、本地程序員甚至是perl程序員而言,mono都能提供他們希望的社會環境(Open Source, may be partly)和技術環境(.Net, even just partly),這就是Mono的存活理由,當然還有Suse和Novell。良臣當侍明主,選一個好的方案是很重要的,不要聽信什么技術(語言)消亡,技術是活的不斷改進的產品,技術的消亡只是因為支持公司的無能,無法跟進市場的需求改進方案和技術,跟微軟肯定是跟對了。不要忘記自己的目標,軟件設計者的夢想不應該是僅僅為了解和掌握最新的技術,而是制造優秀的軟件,改善我們的生活。最終,回到鍵盤時,你的目標不會是要應用微軟方案提供的所有功能,而是遵守夠用就好的原則。沒有這些新技術(更貼切的說是新的表達方式)前,我們就體驗了近乎完美的產品,今天表達方式的進步,為產品創造了更多可能,不過,讓你記住技術的……,可能更多的是產品吧。
Mono平臺,對于Linux本地程序員很好,對那些使用perl的牛仔程序員也很好,對與php程序員也不錯,在以網站為中心的中小規模應用,應該是沒有問題。技術人員的一個重要特點就是推銷,好不容易學到的東西,一定要用到項目中去,最終客戶未必喜歡,我們要給客戶需要的,不是“好”的技術,更多是產品,這更多在我們自己的修煉。當各種新思潮步入我們這個文明的國度是,你是否記得是什么技術幫他們達成心愿,論壇、博客、維客、社交網絡等等,你是覺得ASP.Net程序員的資源似乎太多了,充足的資源限制了創造力。微軟給的太多,我們用的太少,我們滿足的是學習,客戶關心的是應用,我們的價值卻必須通過客戶才能體現,這是基本的矛盾。IBM不用自己開發基礎平臺,它使用自己的數據庫、自己的CASE工具、自己的開發工具以及社團的工具就能不斷的撈錢,你是否知道原因:客戶認為IBM生產了優秀的產品,這就是全部。關系數據庫(也許更多)概念的提出來源于IBM,概念提出者不但獲得了圖靈獎,更多的,他們將數據的概念留給IBM,這就是生存至寶,IBM獲得客戶的信任,贏得了市場,取得了成功。回過來,當你向客戶展示產品時,客戶會不會僅僅因為你是ASP.NET程序員就給項目更高定位,客戶只關心產品(這也包括成本)。微軟創造了可能性,就展現了自己的價值,而你的價值只有通過你的產品才能實現,這就是生活。
不管處于哪一個階層,明白你的客戶是誰、你能生產什么樣的產品、客戶需要什么樣的產品、你應該生產什么樣的產品,這才是軟件公司的生存之道,也是軟件設計者的生存之道。
如果你選擇了Mono那么,你必然加倍努力,你應該了解更多。并且從Windows .Net 到 Mono .Net 成本是高昂的,除非能夠生產更好的產品,滿足你的利益取向,否則,Mono并不適合你。或許,你應該花更多的時間在.Net上,只需要更加努力并且關注產品即可。