您當前的位置:首頁 > 舞蹈

Python VS C#,哪個更適合建築業的人?

作者:由 BIMBOX孫彬 發表于 舞蹈時間:2020-07-22

​你好,這裡是BIMBOX,這次的文章源自於老孫和老朋友 @Vctcn93 的一次交談。

前些天他幫我們把Dynamo入門課程免費更新了,還組建了一個Dynamo課程學習交流群。群裡經常有人希望VCTCN93出一個適合建築業的程式設計課程,擔心外面9塊9學Python的課學不到東西。我們就和他商量,有沒有打算做這件事?

VCTCN93說,現在網上那麼多課,宣傳也是天花亂墜,但學習最大的成本不是買課的那點錢,而是後邊要砸進去的時間,尤其是程式設計這種東西,一旦走錯路要繞很多的彎子。甚至很多人連該學什麼語言都沒想清楚,就一猛子扎進去了。

所以他的建議是,學習不著急,得先讓大家根據自己的定位,想清楚該學什麼,這才要緊。

後來我們聊了很多關於程式語言的問題,老孫建議VCTCN93把這些想法和思路寫成一篇正式的文章分享給大家,他就熬了四個晚上,把東西寫出來了。

我們認為無論你是想學習二次開發,還是想給自己充充電,都應該先把他的建議給看完。

不同程式語言的優劣,在各種場合都是掀桌斷交的爭議話題,這次的內容儘量不引戰,我們討論的重點不是某一門語言好或者不好,而是特別針對建築行業的從業者,在你投入金錢和大把時間入坑之前先磨好刀。

以下是VCTCN93寫下的東西。

1

愈漸興盛的 Coding

在你翻看朋友圈,重新整理微博,在知乎吹牛的時候,你總能看到許多培訓機構打出的程式設計廣告:

Python VS C#,哪個更適合建築業的人?

似乎報了這些班,你就能掌握 Python、JAVA、C# 、JavaScript 等程式語言中的一個,然後憑藉著新技能,編出一個自動工作的流水線,從此從加班中解脫,升職加薪,當上總經理,出任 CEO,迎娶白富美,走上人生巔峰。

看到這些文案,你燃起了報名的衝動。

可是等一下:你乾的是建築行業啊!

你的日常工作場景和廣告中描述的完全不一樣,就連工作性質也和他們有天差地別。

於是,你不禁在腦海裡泛起一個問號:

建築從業者需要學程式設計嗎?

關於這個問題,我認為是一定需要的,我甚至在兩年前已經發表相關的文章,洋洋灑灑近千字,原文在這裡,感興趣你可以看看:

整篇文章的核心是兩句話:

➤得益於計算機技術的爆炸式發展,傳統手工作坊式的工作方式已經完全不能滿足時代的要求,使用計算機技術提高建築行業的效率,是全社會和產業鏈對建築行業的新要求。

➤如今的計算機程式設計技術,就像二十年前的電腦操作技術,在未來將會是人人必備的生存技能之一,能不能良好地使用計算機程式設計技術,將再度劃開截然不同的兩代人。

Python VS C#,哪個更適合建築業的人?

在這樣的時代背景下,越來越多的建築從業者躊躇滿志步入了程式設計的世界,當然,幾年之前的我也是其中之一。

2

截然不同的 Python 與 C#

Python 與 C#,是建築從業者在日常工作中出鏡率最高兩門語言了,很多人都會從中選擇一門進入程式碼世界。它們倆也常常被人拿來比較,以便選出最具價效比的答案。

Python VS C#,哪個更適合建築業的人?

的確,就語言特性而言,這兩門語言從一開始就截然不同:一個動態型別,一個強型別;一個講究自由,一個講究嚴謹;一個無限開放,一個相對完善。但這些比較,往往是沒什麼意義的,這世上沒有更好的工具,只有適合自己的工具。

所以,在選擇語言的時候,你應該從需求出發,看看究竟是誰更能提高你的工作效率。

針對我們的建築業從業者,依據程式碼水平的由低到高,我把一般人的程式碼力需求劃分為三個境界:

指令碼境界、二次開發、九重天外。

第1層:指令碼境界

在這一境界的最大特徵,就是你可以使用 Dynamo 和 Grasshopper 等視覺化程式設計軟體中的相關語言電池,寫出語法和邏輯的基本正確的簡單指令碼,實現定製與自動化部分內容,從而提升自己的效率。

在這一境界,我會更推薦大家學習 Python。

首先,Python 的學習門檻比 C# 要低得多,即使是一個小學生,都可以憑藉一本教材,在一個星期之內寫出能跑的指令碼。當 C# 初學者往往還在為語言的各種特性而頭疼不已,學 Python 的你已經可以上場寫指令碼了。

其次,Python 是一門高階語言(

High Level Language

,也翻譯為上層語言),它在程式設計世界的定位,就是居高臨下,安排調動,指點江山的總裁式角色。你只需要在乎結果,不需要搞清楚其每一個細節是怎樣實現的,非常適合快速上手。

最後,Python 的程式碼邏輯極為清晰,可讀性極強,簡單的 Python 程式碼交給你的同事,他也能快速明白你幹了什麼。它能輕鬆跨平臺,即寫即跑,一次學習,多地使用,比如你在 Dynamo 設計好邏輯,組織好電池 API 之後,稍作修改,就可以移植到 Grasshopper 上去跑。

Python 的學習成本低,上手速度快,平臺支援廣,如果你的目標只是指令碼境界,那麼 Python 一定是你的不二之選。

第2層:二次開發境界

當你想真正的寫出一個比指令碼境界更為深入的功能,寫一個能嵌入到 Revit 工具欄的外掛,那麼你需要步入二次開發的境界。

在這一境界,類似 Dynamo 和 Grasshopper 中經過包裝的電池 API,已經無法滿足你的需求,你需要去使用官方的

SDK

Software Development Kit

,軟體開發工具包),查閱大量的官方開發者文件,理解一個功能背後的邏輯,並對整個軟體有一個比較完整的認知。

Python VS C#,哪個更適合建築業的人?

此時簡單的程式碼已無法滿足你的需要,Python 入門簡單和上手迅速的弊端也會凸顯出來。

首先就是因為它太過簡單,會讓很多人在沒有形成完整程式設計世界觀的情況下,就能開始寫指令碼。又因為Python 的智慧,他們可以在完全不理解面向物件,不懂測試、不注意異常捕捉、不關心程式碼規範和架構設計的情況下,開展他們的工作,這將直接導致他們的程式碼質量非常低下。這一切都會導致新手在二次開發這一境界舉步維艱。

在 Python 世界,不同人之間的程式碼水平會有天壤之別。大神的程式碼往往精簡且高效,非常的 Pythonic,優雅得和詩句一般,令人沉醉;新人則往往整出一大堆又臭又長的東西,效率低下,讓人看不下去。

反觀 C#,不同人寫出的程式碼差距反而不會那麼大,新人在邁過了痛苦的學習門檻之後,也能夠寫出老手一般標準而成熟的程式碼。

所以在這一境界,學習成本略高的 C# 將會是最好的選擇。

另外,因為 Revit、Rhino、Unity 等圖形軟體,都是基於一個叫 。NET 的框架執行的,它們自身就使用了大量 。NET 框架的 API,所以你會看到,類似 Revit 的官方推薦語言,都是 C#、VB、Visual C++ 等 基於 。NET 平臺的語言。

Python VS C#,哪個更適合建築業的人?

當然也會有人說,Python 雖然不是官方推薦的語言,但由於基於 。NET 實現的

IronPython

的存在,讓你也可以使用 Python 來開發 Revit 和 Rhino 等 。NET 平臺下的產品。

可 IronPython 畢竟是個嫁接產物,一個綜合了 。NET 和 Python 雙方短板的「雜交品種」,你一旦接受了這種設定,你就不能再使用原生 Python(又稱 CPython)的庫了,廣受讚譽的 Numpy、Pandas、Scipy、Matplotlib 以及很多高大上的 AI 庫,都會徹底和你絕緣。

Python VS C#,哪個更適合建築業的人?

關於 IronPython 的問題,我也寫在了這篇文章裡,感興趣你也可以去看看:

總之,失去了第三方庫武裝的 IronPython,永遠只能算個半成品,完全失去了它存在的意義。

反觀 C#,作為 。NET 平臺的親兒子,能獲得 。NET 平臺最完美的支援,甚至 Revit 等軟體其本身就是用 C# 寫就的。它在 。NET 的能力上限和開發體驗,都遠超其他語言。

此外,由於解釋型語言(

Interpreted Language

)和編譯型語言(

Compiled Language

)在原理上的區別,Python 本身的速度,就要比 C# 慢得多。在同時原廠支援 IronPython、C# 與 VB 電池的 Grasshopper 中進行效能測試,你能看到非常明顯的速度差異:

Python VS C#,哪個更適合建築業的人?

Python: 6776。7ms VB: 26。5ms C#: 26。9ms

到 C# 的速度大致與 VB 持平,而 Python 比它們慢了 250 多倍,就好比 10 ms 的遊戲延遲卡頓到 1秒 開外,在講究效能優先的軟體開發領域,這是不可以容忍的。

.NET 框架的無縫支援,相較 Python 更為傑出的效率,都讓 C# 在二次開發領域成為當之無愧的王者。

第3層:九重天外

掌握了程式設計技能的你,如果對時代前沿的大資料、人工智慧、神經網路等熱門名詞產生了興趣,那麼作為程式設計界「養老工作」的二次開發將難以進入你的法眼。

到這一層次,你需要學習大量的演算法、程式架構、底層和上層原理,擁有很多大型程式開發的經驗,你的程式設計實力不能比一般的程式設計師遜色,你最好還要具備一門踏實的跨學科知識,從而讓你擁有常人不具備的眼光和視角。

說實話,一般的一執行緒序員,都不一定擁有這樣的水平。目前,建築業內處在這一層級的人才,鳳毛麟角、萬中無一,主要有以下幾個原因:

➤建築行業其本身就是一個需要大量投入大量精力的學科,工作強度大,專業程度高,足夠你鑽研幾十年,很少有建築從業者能夠在如此巨大的工作量之下,還能夠保有足夠的精力,去鑽研前面所提到的內容。

➤與建築行業一樣,程式設計也是一門需要積累大量實踐經驗的學科,一般的建築從業者根本無法接觸到那樣大量的實際專案,經驗難以積累,水平難以進步。

➤如果一個人真的歷經艱辛與磨難,並做完了幾個開發專案,以至於擁有了我前面說到的水平,那麼他90%是會決定轉行,從此與建築行業絕緣。

所以我非常不推薦各位往這個方向努力,因為到岸的人實在太少,你極有可能耗盡心力,卻一無所獲。

如果你說:「我已經做好了不撞南牆不回頭的準備,那麼我應該選什麼程式語言呢?」到這個階段,其實已經不受語言的限制了,你有很多語言可以選擇。給你舉幾個例子:

萬物之源 : C

Python VS C#,哪個更適合建築業的人?

上古神器,底層語言之一,執行速度極快,學習難度極高。1972 年誕生於美國貝爾實驗室,至今快 50 年過去了,依舊有一大幫程式設計師在進行相關開發,支援顆粒級別的程式最佳化,Cpython 的 C,指的就是它。

真男人必玩:C++

Python VS C#,哪個更適合建築業的人?

C 語言加強版,具有絕大多數 C 的特性,能向下相容 C 的程式碼,是「效率」二字的代名詞,至今絕大多數強調效能的運算,比如計算機圖形學,都是靠它完成。它也可以和 Python 混編,代替 Python 完成需要效能的部分,是 Python 的黃金搭檔之一。

大廠之愛:JAVA

Python VS C#,哪個更適合建築業的人?

至今仍是主流中的主流,生態鏈極為完善,目前網際網路大廠和遊戲公司的主力語言,培訓機構的最愛,當年最火爆的時候,JavaScript 需要蹭它的熱度,C# 都在模仿它,留下了極富盛名的設計模式。

前端霸主:JavaScript

Python VS C#,哪個更適合建築業的人?

雖然名字裡也有個 JAVA,但和 JAVA 基本是兩個東西。它由大神 Brendan Eich 在 10 天內設計完成,發展至今,已經基本壟斷前端開發,決定了網頁的動效和 DOM 管理,是一門執行效率高、庫又多又齊全的多功能語言。JS 學習難度不大,學習價值很高,我認為 Python 做後端,JS 做前端的模式會很完美,直到我學完了 Node。js。目前和 BIM 相關的很多輕量化平臺,都是基於 Three。js 使用 JavaScript 開發的。

東瀛出品 :Ruby

Python VS C#,哪個更適合建築業的人?

目前流行語言中,唯一的非白人出品,語言長得和 Python 有點像,社群比較小眾,比較精英化,你可以用它開發 Sketch Up。

小眾之選:Lisp

Python VS C#,哪個更適合建築業的人?

也是個小眾之選,你可以用它開發 CAD(雖然目前 Python 也可以)。

未來的 C:Go

Python VS C#,哪個更適合建築業的人?

Google 背書,C 語言原班人馬出品,兼具開發效率和執行效率的完美存在,是計算機語言自 C 以來真正的自立門戶,另成體系,越來越熱門,而且前景無限。如果你需要為孩子選擇程式語言,可以考慮這門未來之語。

如果你希望更深瞭解不同語言的差異,我極力推薦大家看知乎上的這篇回答,作者非常有創意地表現了他眼中各種語言的機能:

在這個階層,如果你要從 Python 和 C# 中選擇一個,我會建議你選擇 Python

Python 目前風靡學術界,跨平臺的資源也極為豐富,很多熱門領域都可以聽聞它的大名。C# 很明顯和前沿有一定的距離和滯後性,。NET 雖然完善,但也略顯封閉,這都是 C# 發展的瓶頸。當你突破了一定的技術線,並保持持續學習的動力,Python 無盡且強大的第三方庫,能直接讓它從指令碼小工具進化成核武器,甚至在 。NET 的生態,Python 都可以透過上雲和各種庫的加成,全面超越 C# 。

總結

VCTCN93不止一次被問起:「你什麼時候推出 Python 教程啊?」可是對於這個問題,他總會是會三緘其口,最主要的原因,是隨著自己不停地學習深入,他的技術觀產生了變化。這一期的分享,也是他作為一個同路人,給出的正面回答。

VCTCN93和我們說,隨著對不同語言使用量的增加,他越發堅定了這個觀點:

Python 的確是神奇,但卻不一定是最適合建築從業者的。

簡單的入門不需要教程,深入的學習不但困難重重,還會因為學會的東西沒處用而漸漸遺忘。

建築從業者不是程式設計師,建築行業有自己特定的需求,程式設計師可以使用 Python 造核武器,建築從業者絕大多數情況下不需要、也沒這個能力,程式設計師雖然一天到晚歧視 。NET,但它卻最能幹好我們手上的開發任務。

所以,你的需求是什麼?你有突破技術線的動力嗎?你願意為程式設計付出多少心力?

這些,都將影響你自己的選擇。

BIMBOX和VCTCN93合作也有很長時間了,他和我們最聊得來的地方就是三觀正。生活是要過的,錢也是要賺的,但靠資訊不對稱、寫幾句文案就賣錢的事,我們都寧可不做,他也是所有和BIMBOX合作的老師裡,第一位願意把整個課程全部免費更新重錄的人。

所以他給出的建議,我們願意站出來背書。希望你在學習的路上,能少走一些彎路。如果你看了這篇文章有什麼想法,歡迎留言,我們會讓他看到,本期內容所有小夥伴的打賞也會轉交給VCTCN93。有態度,有深度,BIMBOX,咱們下次見!

--擴充套件閱讀--

93的DY入門課 | 雲操作突破DY封鎖

自動批次建族 | Revit 二開的大門

標簽: Python  C#  語言  NET  程式設計