你好,這里是BIMBOX,這次的文章源自于老孫和老朋友@VCTCN93的一次交談。
前些天他幫我們把Dynamo入門課程免費更新了,還組建了一個Dynamo課程學習交流群。群里經(jīng)常有人希望VCTCN93出一個適合建筑業(yè)的編程課程,擔心外面9塊9學Python的課學不到東西。我們就和他商量,有沒有打算做這件事?VCTCN93說,現(xiàn)在網(wǎng)上那么多課,宣傳也是天花亂墜,但學習最大的成本不是買課的那點錢,而是后邊要砸進去的時間,尤其是編程這種東西,一旦走錯路要繞很多的彎子。甚至很多人連該學什么語言都沒想清楚,就一猛子扎進去了。
所以他的建議是,學習不著急,得先讓大家根據(jù)自己的定位,想清楚該學什么,這才要緊。
后來我們聊了很多關(guān)于編程語言的問題,老孫建議VCTCN93把這些想法和思路寫成一篇正式的文章分享給大家,他就熬了四個晚上,把東西寫出來了。
我們認為無論你是想學習二次開發(fā),還是想給自己充充電,都應該先把他的建議給看完。
不同編程語言的優(yōu)劣,在各種場合都是掀桌斷交的爭議話題,這次的內(nèi)容盡量不引戰(zhàn),我們討論的重點不是某一門語言好或者不好,而是特別針對建筑行業(yè)的從業(yè)者,在你投入金錢和大把時間入坑之前先磨好刀。
以下是VCTCN93寫下的東西。
在你翻看朋友圈,刷新微博,在知乎吹牛的時候,你總能看到許多培訓機構(gòu)打出的編程廣告:似乎報了這些班,你就能掌握 Python、JAVA、C# 、JavaScript 等編程語言中的一個,然后憑借著新技能,編出一個自動工作的流水線,從此從加班中解脫,升職加薪,當上總經(jīng)理,出任 CEO,迎娶白富美,走上人生巔峰。可是等一下:你干的是建筑行業(yè)?。?/span>你的日常工作場景和廣告中描述的完全不一樣,就連工作性質(zhì)也和他們有天差地別。于是,你不禁在腦海里泛起一個問號:建筑從業(yè)者需要學編程嗎?關(guān)于這個問題,我認為是一定需要的,我甚至在兩年前已經(jīng)發(fā)表相關(guān)的文章,洋洋灑灑近千字,原文在這里,感興趣你可以看看:https://zhuanlan.zhihu.com/p/60243408整篇文章的核心是兩句話:
? 得益于計算機技術(shù)的爆炸式發(fā)展,傳統(tǒng)手工作坊式的工作方式已經(jīng)完全不能滿足時代的要求,使用計算機技術(shù)提高建筑行業(yè)的效率,是全社會和產(chǎn)業(yè)鏈對建筑行業(yè)的新要求。? 如今的計算機編程技術(shù),就像二十年前的電腦操作技術(shù),在未來將會是人人必備的生存技能之一,能不能良好地使用計算機編程技術(shù),將再度劃開截然不同的兩代人。在這樣的時代背景下,越來越多的建筑從業(yè)者躊躇滿志步入了編程的世界,當然,幾年之前的我也是其中之一。
Python 與 C#,是建筑從業(yè)者在日常工作中出鏡率最高兩門語言了,很多人都會從中選擇一門進入代碼世界。它們倆也常常被人拿來比較,以便選出最具性價比的答案。的確,就語言特性而言,這兩門語言從一開始就截然不同:一個動態(tài)類型,一個強類型;一個講究自由,一個講究嚴謹;一個無限開放,一個相對完善。但這些比較,往往是沒什么意義的,這世上沒有更好的工具,只有適合自己的工具。所以,在選擇語言的時候,你應該從需求出發(fā),看看究竟是誰更能提高你的工作效率。針對我們的建筑業(yè)從業(yè)者,依據(jù)代碼水平的由低到高,我把一般人的代碼力需求劃分為三個境界:腳本境界、二次開發(fā)、九重天外。在這一境界的最大特征,就是你可以使用 Dynamo 和 Grasshopper 等可視化編程軟件中的相關(guān)語言電池,寫出語法和邏輯的基本正確的簡單腳本,實現(xiàn)定制與自動化部分內(nèi)容,從而提升自己的效率。首先,Python 的學習門檻比 C# 要低得多,即使是一個小學生,都可以憑借一本教材,在一個星期之內(nèi)寫出能跑的腳本。當 C# 初學者往往還在為語言的各種特性而頭疼不已,學 Python 的你已經(jīng)可以上場寫腳本了。其次,Python 是一門高級語言(High Level Language,也翻譯為上層語言),它在編程世界的定位,就是居高臨下,安排調(diào)動,指點江山的總裁式角色。你只需要在乎結(jié)果,不需要搞清楚其每一個細節(jié)是怎樣實現(xiàn)的,非常適合快速上手。最后,Python 的代碼邏輯極為清晰,可讀性極強,簡單的 Python 代碼交給你的同事,他也能快速明白你干了什么。它能輕松跨平臺,即寫即跑,一次學習,多地使用,比如你在 Dynamo 設(shè)計好邏輯,組織好電池 API 之后,稍作修改,就可以移植到 Grasshopper 上去跑。Python 的學習成本低,上手速度快,平臺支持廣,如果你的目標只是腳本境界,那么 Python 一定是你的不二之選。當你想真正的寫出一個比腳本境界更為深入的功能,寫一個能嵌入到 Revit 工具欄的插件,那么你需要步入二次開發(fā)的境界。在這一境界,類似 Dynamo 和 Grasshopper 中經(jīng)過包裝的電池 API,已經(jīng)無法滿足你的需求,你需要去使用官方的 SDK(Software Development Kit,軟件開發(fā)工具包),查閱大量的官方開發(fā)者文檔,理解一個功能背后的邏輯,并對整個軟件有一個比較完整的認知。此時簡單的代碼已無法滿足你的需要,Python 入門簡單和上手迅速的弊端也會凸顯出來:首先就是因為它太過簡單,會讓很多人在沒有形成完整編程世界觀的情況下,就能開始寫腳本。又因為Python 的智能,他們可以在完全不理解面向?qū)ο螅欢疁y試、不注意異常捕捉、不關(guān)心代碼規(guī)范和架構(gòu)設(shè)計的情況下,開展他們的工作,這將直接導致他們的代碼質(zhì)量非常低下。這一切都會導致新手在二次開發(fā)這一境界舉步維艱。在 Python 世界,不同人之間的代碼水平會有天壤之別。大神的代碼往往精簡且高效,非常的 Pythonic,優(yōu)雅得和詩句一般,令人沉醉;新人則往往整出一大堆又臭又長的東西,效率低下,讓人看不下去。反觀 C#,不同人寫出的代碼差距反而不會那么大,新人在邁過了痛苦的學習門檻之后,也能夠?qū)懗隼鲜忠话銟藴识墒斓拇a。所以在這一境界,學習成本略高的 C# 將會是最好的選擇。另外,因為 Revit、Rhino、Unity 等圖形軟件,都是基于一個叫 .NET 的框架運行的,它們自身就使用了大量 .NET 框架的 API,所以你會看到,類似 Revit 的官方推薦語言,都是 C#、VB、Visual C++ 等 基于 .NET 平臺的語言。當然也會有人說,Python 雖然不是官方推薦的語言,但由于基于 .NET 實現(xiàn)的 IronPython 的存在,讓你也可以使用 Python 來開發(fā) Revit 和 Rhino 等 .NET 平臺下的產(chǎn)品。可 IronPython 畢竟是個嫁接產(chǎn)物,一個綜合了 .NET 和 Python 雙方短板的「雜交品種」,你一旦接受了這種設(shè)定,你就不能再使用原生 Python(又稱 CPython)的庫了,廣受贊譽的 Numpy、Pandas、Scipy、Matplotlib 以及很多高大上的 AI 庫,都會徹底和你絕緣。關(guān)于 IronPython 的問題,我也寫在了《硬核分享:一套云操作,讓Dynamo成為變形金剛》這篇文章里,鏈接放到文末,感興趣你也可以去看看。總之,失去了第三方庫武裝的 IronPython,永遠只能算個半成品,完全失去了它存在的意義。反觀 C#,作為 .NET 平臺的親兒子,能獲得 .NET 平臺最完美的支持,甚至 Revit 等軟件其本身就是用 C# 寫就的。它在 .NET 的能力上限和開發(fā)體驗,都遠超其他語言。此外,由于解釋型語言(Interpreted Language)和編譯型語言(Compiled Language)在原理上的區(qū)別,Python 本身的速度,就要比 C# 慢得多。在同時原廠支持 IronPython、C# 與 VB 電池的 Grasshopper 中進行性能測試,你能看到非常明顯的速度差異:Python: 6776.7ms VB: 26.5ms C#: 26.9ms到 C# 的速度大致與 VB 持平,而 Python 比它們慢了 250 多倍,就好比 10 ms 的游戲延遲卡頓到 1秒 開外,在講究性能優(yōu)先的軟件開發(fā)領(lǐng)域,這是不可以容忍的。.NET 框架的無縫支持,相較 Python 更為杰出的效率,都讓 C# 在二次開發(fā)領(lǐng)域成為當之無愧的王者。掌握了編程技能的你,如果對時代前沿的大數(shù)據(jù)、人工智能、神經(jīng)網(wǎng)絡等熱門名詞產(chǎn)生了興趣,那么作為編程界「養(yǎng)老工作」的二次開發(fā)將難以進入你的法眼。到這一層次,你需要學習大量的算法、程序架構(gòu)、底層和上層原理,擁有很多大型程序開發(fā)的經(jīng)驗,你的編程實力不能比一般的程序員遜色,你最好還要具備一門踏實的跨學科知識,從而讓你擁有常人不具備的眼光和視角。說實話,一般的一線程序員,都不一定擁有這樣的水平。目前,建筑業(yè)內(nèi)處在這一層級的人才,鳳毛麟角、萬中無一,主要有以下幾個原因:? 建筑行業(yè)其本身就是一個需要大量投入大量精力的學科,工作強度大,專業(yè)程度高,足夠你鉆研幾十年,很少有建筑從業(yè)者能夠在如此巨大的工作量之下,還能夠保有足夠的精力,去鉆研前面所提到的內(nèi)容。? 與建筑行業(yè)一樣,編程也是一門需要積累大量實踐經(jīng)驗的學科,一般的建筑從業(yè)者根本無法接觸到那樣大量的實際項目,經(jīng)驗難以積累,水平難以進步。? 如果一個人真的歷經(jīng)艱辛與磨難,并做完了幾個開發(fā)項目,以至于擁有了我前面說到的水平,那么他90%是會決定轉(zhuǎn)行,從此與建筑行業(yè)絕緣。所以我非常不推薦各位往這個方向努力,因為到岸的人實在太少,你極有可能耗盡心力,卻一無所獲。
如果你說:「我已經(jīng)做好了不撞南墻不回頭的準備,那么我應該選什么編程語言呢?」到這個階段,其實已經(jīng)不受語言的限制了,你有很多語言可以選擇。給你舉幾個例子:上古神器,底層語言之一,運行速度極快,學習難度極高。1972 年誕生于美國貝爾實驗室,至今快 50 年過去了,依舊有一大幫程序員在進行相關(guān)開發(fā),支持顆粒級別的程序優(yōu)化,Cpython 的 C,指的就是它。C 語言加強版,具有絕大多數(shù) C 的特性,能向下兼容 C 的代碼,是「效率」二字的代名詞,至今絕大多數(shù)強調(diào)性能的運算,比如計算機圖形學,都是靠它完成。它也可以和 Python 混編,代替 Python 完成需要性能的部分,是 Python 的黃金搭檔之一。至今仍是主流中的主流,生態(tài)鏈極為完善,目前互聯(lián)網(wǎng)大廠和游戲公司的主力語言,培訓機構(gòu)的最愛,當年最火爆的時候,JavaScript 需要蹭它的熱度,C# 都在模仿它,留下了極富盛名的設(shè)計模式。前端霸主:JavaScript
雖然名字里也有個 JAVA,但和 JAVA 基本是兩個東西。它由大神 Brendan Eich 在 10 天內(nèi)設(shè)計完成,發(fā)展至今,已經(jīng)基本壟斷前端開發(fā),決定了網(wǎng)頁的動效和 DOM 管理,是一門運行效率高、庫又多又齊全的多功能語言。JS 學習難度不大,學習價值很高,我認為 Python 做后端,JS 做前端的模式會很完美,直到我學完了 Node.js。目前和 BIM 相關(guān)的很多輕量化平臺,都是基于 Three.js 使用 JavaScript 開發(fā)的。
目前流行語言中,唯一的非白人出品,語言長得和 Python 有點像,社區(qū)比較小眾,比較精英化,你可以用它開發(fā) Sketch Up。也是個小眾之選,你可以用它開發(fā) CAD(雖然目前 Python 也可以)。Google 背書,C 語言原班人馬出品,兼具開發(fā)效率和運行效率的完美存在,是計算機語言自 C 以來真正的自立門戶,另成體系,越來越熱門,而且前景無限。如果你需要為孩子選擇編程語言,可以考慮這門未來之語。如果你希望更深了解不同語言的差異,我極力推薦大家看知乎上的這篇回答,作者非常有創(chuàng)意地表現(xiàn)了他眼中各種語言的機能:https://www.zhihu.com/question/25038841/answer/44396770在這個階層,如果你要從 Python 和 C# 中選擇一個,我會建議你選擇 Python。
Python 目前風靡學術(shù)界,跨平臺的資源也極為豐富,很多熱門領(lǐng)域都可以聽聞它的大名。C# 很明顯和前沿有一定的距離和滯后性,.NET 雖然完善,但也略顯封閉,這都是 C# 發(fā)展的瓶頸。當你突破了一定的技術(shù)線,并保持持續(xù)學習的動力,Python 無盡且強大的第三方庫,能直接讓它從腳本小工具進化成核武器,甚至在 .NET 的生態(tài),Python 都可以通過上云和各種庫的加成,全面超越 C# 。VCTCN93不止一次被問起:「你什么時候推出 Python 教程啊?」可是對于這個問題,他總會是會三緘其口,最主要的原因,是隨著自己不停地學習深入,他的技術(shù)觀產(chǎn)生了變化。這一期的分享,也是他作為一個同路人,給出的正面回答。VCTCN93和我們說,隨著對不同語言使用量的增加,他越發(fā)堅定了這個觀點:Python 的確是神奇,但卻不一定是最適合建筑從業(yè)者的。簡單的入門不需要教程,深入的學習不但困難重重,還會因為學會的東西沒處用而漸漸遺忘。建筑從業(yè)者不是程序員,建筑行業(yè)有自己特定的需求,程序員可以使用 Python 造核武器,建筑從業(yè)者絕大多數(shù)情況下不需要、也沒這個能力,程序員雖然一天到晚歧視 .NET,但它卻最能干好我們手上的開發(fā)任務。所以,你的需求是什么?你有突破技術(shù)線的動力嗎?你愿意為編程付出多少心力?BIMBOX和VCTCN93合作也有很長時間了,他和我們最聊得來的地方就是三觀正。生活是要過的,錢也是要賺的,但靠信息不對稱、寫幾句文案就賣錢的事,我們都寧可不做,他也是所有和BIMBOX合作的老師里,第一位愿意把整個課程全部免費更新重錄的人。所以他給出的建議,我們愿意站出來背書。希望你在學習的路上,能少走一些彎路。如果你看了這篇文章有什么想法,歡迎留言,我們會讓他看到,本期內(nèi)容所有小伙伴的打賞也會轉(zhuǎn)交給VCTCN93。有態(tài)度,有深度,BIMBOX,咱們下次見!