你好,这里是BIMBOX,这次的文章源自于老孙和老朋友@VCTCN93的一次交谈。
前些天他帮我们把Dynamo入门课程免费更新了,还组建了一个Dynamo课程学习交流群。群里经常有人希望VCTCN93出一个适合建筑业的编程课程,担心外面9块9学Python的课学不到东西。我们就和他商量,有没有打算做这件事?
VCTCN93说,现在网上那么多课,宣传也是天花乱坠,但学习最大的成本不是买课的那点钱,而是后边要砸进去的时间,尤其是编程这种东西,一旦走错路要绕很多的弯子。甚至很多人连该学什么语言都没想清楚,就一猛子扎进去了。
所以他的建议是,学习不着急,得先让大家根据自己的定位,想清楚该学什么,这才要紧。
后来我们聊了很多关于编程语言的问题,老孙建议VCTCN93把这些想法和思路写成一篇正式的文章分享给大家,他就熬了四个晚上,把东西写出来了。
我们认为无论你是想学习二次开发,还是想给自己充充电,都应该先把他的建议给看完。
不同编程语言的优劣,在各种场合都是掀桌断交的争议话题,这次的内容尽量不引战,我们讨论的重点不是某一门语言好或者不好,而是特别针对建筑行业的从业者,在你投入金钱和大把时间入坑之前先磨好刀。
以下是VCTCN93写下的东西。
1 愈渐兴盛的 Coding
在你翻看朋友圈,刷新微博,在知乎吹牛的时候,你总能看到许多培训机构打出的编程广告:
似乎报了这些班,你就能掌握 Python、JAVA、C# 、JavaScript 等编程语言中的一个,然后凭借着新技能,编出一个自动工作的流水线,从此从加班中解脱,升职加薪,当上总经理,出任 CEO,迎娶白富美,走上人生巅峰。
看到这些文案,你燃起了报名的冲动。
可是等一下:你干的是建筑行业啊!
你的日常工作场景和广告中描述的完全不一样,就连工作性质也和他们有天差地别。
于是,你不禁在脑海里泛起一个问号:建筑从业者需要学编程吗?
关于这个问题,我认为是一定需要的,我甚至在两年前已经发表相关的文章,洋洋洒洒近千字,原文在这里,感兴趣你可以看看:
作为建筑师,我们为什么要学编程? - 知乎
整篇文章的核心是两句话:
➤ 得益于计算机技术的爆炸式发展,传统手工作坊式的工作方式已经完全不能满足时代的要求,使用计算机技术提高建筑行业的效率,是全社会和产业链对建筑行业的新要求。
➤ 如今的计算机编程技术,就像二十年前的电脑操作技术,在未来将会是人人必备的生存技能之一,能不能良好地使用计算机编程技术,将再度划开截然不同的两代人。
在这样的时代背景下,越来越多的建筑从业者踌躇满志步入了编程的世界,当然,几年之前的我也是其中之一。
2 截然不同的 Python 与 C#
Python 与 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 入门简单和上手迅速的弊端也会凸显出来:
首先就是因为它太过简单,会让很多人在没有形成完整编程世界观的情况下,就能开始写脚本。又因为Python 的智能,他们可以在完全不理解面向对象,不懂测试、不注意异常捕捉、不关心代码规范和架构设计的情况下,开展他们的工作,这将直接导致他们的代码质量非常低下。
这一切都会导致新手在二次开发这一境界举步维艰。
在 Python 世界,不同人之间的代码水平会有天壤之别。大神的代码往往精简且高效,非常的 Pythonic,优雅得和诗句一般,令人沉醉;新人则往往整出一大堆又臭又长的东西,效率低下,让人看不下去。
反观 C#,不同人写出的代码差距反而不会那么大,新人在迈过了痛苦的学习门槛之后,也能够写出老手一般标准而成熟的代码。
所以在这一境界,学习成本略高的 C# 将会是最好的选择。
另外,因为 Revit、Rhino、Unity 等图形软件,都是基于一个叫 .NET 的框架运行的,它们自身就使用了大量 .NET 框架的 API,所以你会看到,类似 Revit 的官方推荐语言,都是 C#、VB、Visual C++ 等 基于 .NET 平台的语言。
当然也会有人说,Python 虽然不是官方推荐的语言,但由于基于 .NET 实现的 IronPython 的存在,让你也可以使用 Python 来开发 Revit 和 Rhino 等 .NET 平台下的产品。
可 IronPython 毕竟是个嫁接产物,一个综合了 .NET 和 Python 双方短板的「杂交品种」,你一旦接受了这种设定,你就不能再使用原生 Python(又称 CPython)的库了,广受赞誉的 Numpy、Pandas、Scipy、Matplotlib 以及很多高大上的 AI 库,都会彻底和你绝缘。
关于 IronPython 的问题,我也写在了《硬核分享:一套云操作,让Dynamo成为变形金刚》这篇文章里,链接放到文末,感兴趣你也可以去看看。
总之,失去了第三方库武装的 IronPython,永远只能算个半成品,完全失去了它存在的意义。
反观 C#,作为 .NET 平台的亲儿子,能获得 .NET 平台最完美的支持,甚至 Revit 等软件其本身就是用 C# 写就的。它在 .NET 的能力上限和开发体验,都远超其他语言。
此外,由于解释型语言(Interpreted Language)和编译型语言(Compiled Language)在原理上的区别,Python 本身的速度,就要比 C# 慢得多。
在同时原厂支持 IronPython、C# 与 VB 电池的 Grasshopper 中进行性能测试,你能看到非常明显的速度差异:
Python: 6776.7ms VB: 26.5ms C#: 26.9ms
到 C# 的速度大致与 VB 持平,而 Python 比它们慢了 250 多倍,就好比 10 ms 的游戏延迟卡顿到 1秒开外,在讲究性能优先的软件开发领域,这是不可以容忍的。
.NET 框架的无缝支持,相较 Python 更为杰出的效率,都让 C# 在二次开发领域成为当之无愧的王者。
第3层 九重天外
掌握了编程技能的你,如果对时代前沿的大数据、人工智能、神经网络等热门名词产生了兴趣,那么作为编程界「养老工作」的二次开发将难以进入你的法眼。
到这一层次,你需要学习大量的算法、程序架构、底层和上层原理,拥有很多大型程序开发的经验,你的编程实力不能比一般的程序员逊色,你最好还要具备一门踏实的跨学科知识,从而让你拥有常人不具备的眼光和视角。
说实话,一般的一线程序员,都不一定拥有这样的水平。目前,建筑业内处在这一层级的人才,凤毛麟角、万中无一,主要有以下几个原因:
➤ 建筑行业其本身就是一个需要大量投入大量精力的学科,工作强度大,专业程度高,足够你钻研几十年,很少有建筑从业者能够在如此巨大的工作量之下,还能够保有足够的精力,去钻研前面所提到的内容。
➤ 与建筑行业一样,编程也是一门需要积累大量实践经验的学科,一般的建筑从业者根本无法接触到那样大量的实际项目,经验难以积累,水平难以进步。
➤ 如果一个人真的历经艰辛与磨难,并做完了几个开发项目,以至于拥有了我前面说到的水平,那么他90%是会决定转行,从此与建筑行业绝缘。
所以我非常不推荐各位往这个方向努力,因为到岸的人实在太少,你极有可能耗尽心力,却一无所获。
如果你说:「我已经做好了不撞南墙不回头的准备,那么我应该选什么编程语言呢?」
到这个阶段,其实已经不受语言的限制了,你有很多语言可以选择。给你举几个例子:
万物之源 : C
上古神器,底层语言之一,运行速度极快,学习难度极高。1972 年诞生于美国贝尔实验室,至今快 50 年过去了,依旧有一大帮程序员在进行相关开发,支持颗粒级别的程序优化,Cpython 的 C,指的就是它。
真男人必玩:C++
C 语言加强版,具有绝大多数 C 的特性,能向下兼容 C 的代码,是「效率」二字的代名词,至今绝大多数强调性能的运算,比如计算机图形学,都是靠它完成。它也可以和 Python 混编,代替 Python 完成需要性能的部分,是 Python 的黄金搭档之一。
大厂之爱:JAVA
至今仍是主流中的主流,生态链极为完善,目前互联网大厂和游戏公司的主力语言,培训机构的最爱,当年最火爆的时候,JavaScript 需要蹭它的热度,C# 都在模仿它,留下了极富盛名的设计模式。
前端霸主:JavaScript
虽然名字里也有个 JAVA,但和 JAVA 基本是两个东西。它由大神 Brendan Eich 在 10 天内设计完成,发展至今,已经基本垄断前端开发,决定了网页的动效和 DOM 管理,是一门运行效率高、库又多又齐全的多功能语言。JS 学习难度不大,学习价值很高,我认为 Python做后端,JS 做前端的模式会很完美,直到我学完了 Node.js。目前和 BIM 相关的很多轻量化平台,都是基于 Three.js 使用 JavaScript 开发的。
东瀛出品 :Ruby
目前流行语言中,唯一的非白人出品,语言长得和 Python 有点像,社区比较小众,比较精英化,你可以用它开发 Sketch Up。
小众之选:Lisp
也是个小众之选,你可以用它开发 CAD(虽然目前 Python 也可以)。
未来的 C:Go
Google 背书,C 语言原班人马出品,兼具开发效率和运行效率的完美存在,是计算机语言自 C 以来真正的自立门户,另成体系,越来越热门,而且前景无限。如果你需要为孩子选择编程语言,可以考虑这门未来之语。
如果你希望更深了解不同语言的差异,我极力推荐大家看知乎上的这篇回答,作者非常有创意地表现了他眼中各种语言的机能:
https://www.zhihu.com/question/25038841/answer/44396770
在这个阶层,如果你要从 Python 和 C# 中选择一个,我会建议你选择 Python。
Python 目前风靡学术界,跨平台的资源也极为丰富,很多热门领域都可以听闻它的大名。C# 很明显和前沿有一定的距离和滞后性,.NET 虽然完善,但也略显封闭,这都是 C# 发展的瓶颈。
当你突破了一定的技术线,并保持持续学习的动力,Python 无尽且强大的第三方库,能直接让它从脚本小工具进化成核武器,甚至在 .NET 的生态,Python 都可以通过上云和各种库的加成,全面超越 C# 。
3 总结
VCTCN93不止一次被问起:「你什么时候推出 Python 教程啊?」
可是对于这个问题,他总会是会三缄其口,最主要的原因,是随着自己不停地学习深入,他的技术观产生了变化。这一期的分享,也是他作为一个同路人,给出的正面回答。
VCTCN93和我们说,随着对不同语言使用量的增加,他越发坚定了这个观点:Python 的确是神奇,但却不一定是最适合建筑从业者的。简单的入门不需要教程,深入的学习不但困难重重,还会因为学会的东西没处用而渐渐遗忘。
建筑从业者不是程序员,建筑行业有自己特定的需求,程序员可以使用 Python 造核武器,建筑从业者绝大多数情况下不需要、也没这个能力,程序员虽然一天到晚歧视 .NET,但它却最能干好我们手上的开发任务。
所以,你的需求是什么?你有突破技术线的动力吗?你愿意为编程付出多少心力?
这些,都将影响你自己的选择。
BIMBOX和VCTCN93合作也有很长时间了,他和我们最聊得来的地方就是三观正。生活是要过的,钱也是要赚的,但靠信息不对称、写几句文案就卖钱的事,我们都宁可不做,他也是所有和BIMBOX合作的老师里,第一位愿意把整个课程全部免费更新重录的人。
所以他给出的建议,我们愿意站出来背书。希望你在学习的路上,能少走一些弯路。如果你看了这篇文章有什么想法,欢迎留言,我们会让他看到,本期内容所有小伙伴的打赏也会转交给VCTCN93。
有态度,有深度,BIMBOX,咱们下次见!