2011年5月25日 星期三

絕大多數新技術的學習,都是浪費生命

作者: balaking (看八卦長知識) 看板: Soft_Job
標題: Re: [請益] java的效能!?
時間: Mon May 23 23:45:47 2011

※ 引述《Lordaeron (Terry)》之銘言:
: 我看三十人的code, 有十幾種不同的用法, 他們都只hibernate
: 啊, 其中同一位programmer, 也一下這樣,一下哪樣,
: 請問, 有比較好理解?
: 更別說當年struts 1.0 時, 為了tag 而tag 的jsp 畫面, 可以讓你
: 看到最高五層的tag嵌套, 明明套java code 只是一個loop加一行if.
: 這有比較好理解?
: 我強調的是, 不要為OO 而OO, 不要為framework 而framework
: 是case by case, 我自己的經驗, 當初國外設計framework 時
: 是照他們的經驗, 從初期版本就開始用的話, 在台灣根本不夠用.
: 台灣的user 比老外龜毛太多. 而且每個行業, 有它自己的使用
: 特性需求, 從來就沒有一條大路通羅馬的.
: 用了framework 會不會比較快, 分開發速度和執行速度
: 我只能說, 如果都是同一個人做的, 有用和不用兩版本
: 用framework開發速度(可能會比較快), 但執行速度不可能會比較快.
: 除非它只會用framework開發, 對沒framework 這種基礎知識是不清楚的.


這系列不要結束阿~~我來貼一個大陸人寫的文章好了, 搞笑成分居多
<絕大多數新技術的學習,都是浪費生命>
很多程序員,在很多的時間,都會說出很多相同的話來,其中最為引起共鳴的就是這麼一句話:「每天都要學習新知識,不然就會被淘汰」。

    嗯,這真是件很辛苦的事情,你看,老中醫就過得很輕鬆,收銀員也過得很輕鬆,官員當然過得更輕鬆。沒別的,絕大多數正常的人類,學會一種技能,則無需進一步學習其他的,大致上就能夠或輕鬆或艱難的生活下去。這個所謂絕大多數,應該是90%。

      那麼,程序員或者好聽一些,軟件工程師這種職業,為什麼就過得更辛苦一些呢?

     因為我們實際上完全沒有必要每天甚至每個星期甚至每個月都要學習新知識,因為很多所謂的新知識都是些將簡單的問題複雜化的東西,它們既沒有令事情變得更簡單,有時候甚至引起倒退,更多的時候是盲目的消耗了程序員的精力而一無是處。

      我們完全可以過得非常輕鬆。

      舉個例子,大家知道微軟的Wpf、Wcf和WF這些新的東西,其中任何一個專題,程序員都需要花費大量的時間去學習,當然,也許學習半年之後,還是碰到很多疑惑。人的一生有多少個半年呢?這樣的學習對你究竟有什麼好處呢?

       簡單的拿Wpf做例子,你需要瞭解這種新東西誕生的理由。

       微軟的工程師認為,桌面編程應該有一個類似Html的界面設計方式,使用一種規範的Xaml來描述界面,這是第一個動因。第二個主要的動因,是微軟的.net框架,這上面需要有專門的本地應用開發技術,微軟的工程師認為Winform形式太過落伍了。

       還有其他原因嗎?

       當你看到非常炫目的界面效果之後,你會覺得震撼,震撼之後你會覺得不學習實在就太會落伍了。

       可是結果呢?

       你想要用他開發桌面軟件,面臨的第一個問題,就是每個用戶下載的時候都需要下載好幾百兆的東西,還不一定保險。因為XP也好、Vista也好、Windows7也好還是Windows 2008 R2也好,老實說你要下載的包都不相同。

       第二個問題是用戶安裝你的軟件非常困難,這些打包附帶的東西顯然無法讓用戶在安裝你的軟件之後,還有更多的興趣再看一眼。

      第三個問題是開發應用並不簡單,有太多的概念,比如Xaml、比如樣式、比如Trriger、比如StoryBoard、比如MVVM,沒有圖表控件、沒有自動完成控件,完成一件最簡單的任務你比以前可能需要更多的時間,而非更少。

       第四個問題是有太多的細節,比如Command如何帶參數、比如進度條怎樣後台展現進度,嗯,我敢肯定的說,包括微軟的開發工程師在內,整個地球上用Wpf開發應用的程序員們,只有不到十個人有一個通用的方案,來使用進度條簡單的在後台報告進度。

       第五個問題是慢,驚人的慢。大家可以看看「飛信」,這是一個微軟控主導決策的,嗯,使用.net
2.0。為瞭解決程序發佈的問題,專門弄了個微型的.net框架,但是你將它與QQ比,是不是覺得慢得太多?持續多年以後,移動的先生們不耐煩了,才有的現在的基於C++的原生版本,請比較一下速度。這裡特別提醒一下,飛信的開發,是中國移動投入巨資、得到微軟中國整個團隊無微不至的支持的,這些高人甚至赤膊上陣親自動手,這樣使用他們的開發工具,歷時數年也不過是做出一個被淘汰的產品。先生,請掂量一下,你比他們這些傢伙更厲害嗎?你比孩子的母親對孩子更瞭解嗎?

        嗯,最後可以看到,包括微軟自己在內,地球上並沒有太多基於Wpf的產品。少得可憐,但它確實浪費了至少一百萬程序員的生命,基本上每個程序員因此短命了半年以上。

     微軟則繼續想在殭屍的基礎上,禍害更多的人,於是出現在Web領域,老天,有了Silverlight,事實無情的宣告這種妄想進一步失敗,依然找不到多少有點看點的Silverlight的商業應用。微軟碰了一鼻子灰,但他成功的繼續禍害了50萬以上的另一批程序員,這個時間估計超過半年,因為據說Web程序員更固執、也更捨不得告別已經浪費的生命。

       故事還沒有完結,微軟開始將這一套東西轉到手機領域。

      我彷彿看見一隻野狗,被左邊的一個人踢了一腳,這個人叫桌面應用;又被右邊的人踢了一腳,這個人叫做Web應用;然後,他高高的跳向空中,嗯,空中等著他的那個人叫手機開發,他是不是也長著一雙腳呢?

      他們推出WP7,這種微軟最新的手機操作系統,開發工具是Silverlight,我已經看到他失敗的那一天了……

      這是新技術典型的例子,你不用責怪微軟,dos到Windows,是一種包裝,將底層封鎖住;Win32到.net FrameWork是第二次包裝,繼續封閉第二底層;.net「原生」開發到Wpf又是一種包裝,這是封閉了WinForm的內容改用Xml呈現的包裝。

      你能夠想像得到,每一次包裝,顯然都帶來運算效率的下降,這種包裝如果成功,是有益的,因為硬件性能畢竟在快速的增長。當然,也正由於這種包裝,電腦發展幾十年之後,我們常見的應用基本上都沒有真正的變快,甚至與二十年前比較更慢了。

      同時,開發應用軟件,好像每經過一次包裝,複雜度又增加許多,而開發成本又上升許多。

     這很矛盾,不是嗎?多數時候,微軟的目的都是讓開發更簡單,這是沒錯的。

     但什麼是簡單?

     我的理解是:第一是概念儘可能少,理解上簡單。第二才是代碼儘可能少,實現上簡單。

     微軟幾乎百分之百的工程師,和幾乎百分之百的高層決策人員,都不理解第一個問題,「概念要儘可能少」。

    嗯,你這麼想想吧,剛剛看到有研究Prism的,我估計此人又要浪費半年以上的生命。

    這是個什麼東西呢?MVVM框架嗎?依賴注入嗎?模塊化嗎?

    看看上面這句話,普通人定然看不懂,這也是我們絕大多數程序員漸漸變得不會說人話的原因。

    你只要看到Prism那些難以理解的代碼,然後看到使用這種編程框架需要理解多少個概念,使用這種框架開發應用會使人多麼發狂。對於一個團隊來說,這又會造成多大的災難。

    請記住,即使你誤入了微軟的賊船,也一定要記住:每次面臨一項新的技術的時候,花費5分鐘的時間瞭解一下,它的目的是什麼?它是否達到了這些目的?使用這種東西需要理解的概念多不多?有無可能在一天內完全掌握?

    如果不能,忽略它。

    微軟是沒錯的,錯的是你,先生,你不知辨別,你也不知道自己究竟有多長的生命。

    想一想,還是列出一個清單吧:

    1、Asp.net Mvc V3:可以看一下,新的視圖引擎確實更簡單

    2、WCF:忘掉它,這是微軟希望擴展和取代Web服務的東西,它不是標準,這些年也基本上很少有應用。

    3、WPF:忘掉它,要開發原生應用,還是老老實實的用VC+Mfc,要好看一點,用Vs2010里的Ribbon體系。

    4、WF:不需要關注,當然,如果你從事工作流範疇的開發,這個有一定益處,問題是性能也堪憂

    5、Sql2008 R2的數據挖掘部分:忘掉它,基於數據庫的挖掘,基本上是很難實用的.

    6、Silverlight:請轉向Html 5吧,或者現實一些,Flash。你不應該這樣特立獨行,遵循多數人的標準吧

    7、Wp7:躲遠一點,買手機也不要買這種

    8、Silverlight手機開發:不要碰,賺不到錢的

    9、嵌入式開發WinCe或windows Mobile:轉向Android或者linux吧

    10、Ado.net Entity FrameWork :忘了它,這只是微軟在面臨強抱的時候無力的呻吟,它希望能夠實現數據庫和對象之間的無縫連接、也希望解決領域驅動開發問題,但是老天,十年之內請大家不要幻想這種DDD的方式能為成為現實---這也意味著所有程序員失業先…

    11、linq:關注但一定要慎用,linq To Sql性能肯定不如原生Ado.net直接訪問數據庫,linq To Object很多基於IEnumerable接口的,很顯然在針對數組和IList的時候較之直接編程性能大幅下降。

    12、TFS:重要,很好的工具,但記住一定要用基本安裝,只使用源碼管理和基本的項目管理,不要安裝SharePoint之類,簡單就好

    13、Tfs的Scrum模版:重要,這樣一種方法論,對個人對團隊都有益處

    14、Vs2010的單元測試項目:重要,這是改變個人變成習慣,改變心態的習慣。不會TDD的基本上是苦瓜程序員。會了,你就是蜜瓜程序員。

    15、.net Framework:出現之後,桌面應用開發工具出現斷檔,僅在Web領域應用,在桌面應用和手機應用中應該遠離。

    16、C# 3.0之後:C#語言設計的存在一定問題,從細節的所謂裝箱拆箱到高層面的linq之類,我猜想語言設計人員沒有列出「開發人員應掌握多少概念、特定場景如何實現、結合.net Framework的主要領域是哪些」這樣的清單。邏輯層次上下浮動的很厲害。但C# 3。0之後的擴展方法、匿名代理、lambda表達式、匿名類、動態類型等,可以多用,對簡化代碼和代碼的清晰度確實有益。

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.112.249.64
→ balaking:新技術、新framwork懂它 不一定要用它 就跟學武功一樣     05/23 23:53
→ balaking:各種拳法套路 都能一眼看出重點在哪 最後融合出自己武功   05/23 23:56

沒有留言:

張貼留言

您好.本資料庫並非第一手資料.如果你有對文章作者的詢問,意見與需求,請自行找尋文章作者並提供意見,謝謝.