用C#、C++、Java能编写出Adobe等级的行业软件吗?
▍用C#、C++、Java能编写出Adobe等级的行业软件吗?
就这么说吧,不要说c++,c#和JAVA,你可以去百度搜webps,会搜到很多在线ps的站点。这些都是在网页端用JavaScript实现的。虽然不如真正的Photoshop强大,但是起码涵盖了80%以上常用的基本功能。我经常拿来做简单的图像处理,扣图,拼图,调色调饱和度啥的。连JavaScript都能做的事情,你说c++,c#和JAVA会不能做吗?唯一的问题就是性能如何。
▍用C#、C++、Java能编写出Adobe等级的行业软件吗?
Adobe这种软件工具的核心是算法,你列的三种语言都可以很好地实现。
我90年代初做过断口图像处理的基金项目,有很多类似Adobe的功能,那时还没有上述CSharp、Java语言,也没有Adobe,用C语言写的软件,何况现在这些面向对象的语言。
C语言写,相当于手工打造。擦掉一根线都要按位进行各个点的异或处理,不象C#之类语言,删除一个对象即可。对图像进行降噪、去毛刺、二值化、特征提取都要编写相关算法。比如边缘增强、平滑处理要用到插值算法,模式匹配用到圆邻域方法……现在很多算法都有函数库,通过接口调用就行了,简单了很多,用C#、C++、Java处理起来绰绰有余。
▍用C#、C++、Java能编写出Adobe等级的行业软件吗?
用C++当然可以写出adobe的软件,因为它们本身就是用C/C++写的。这里我没有区分C和C++,可以不严格地认为后者就是前者的超集。
现在重点讨论的是C#和Java到底能不能写出类似adobe这样的软件。
二八原则我们都听过,我们多数人可能只用到了adobe的20%的功能,但是它却可以满足80%的需求。如果问我们能否用C#和Java去实现这20%最基本的功能,那自然是没有问题的。现在网上就有用C#写的图像处理软件,对标photoshop。
但是一个优秀软件、专业软件,它们的竞争力恰好是那普通人很少用的功能。就像一辆汽车一样,基本功能很多厂家都能做(有的国产车可以卖到5万以下),绝对能满足多数人80%甚至99%的代步功能。而贵车就强在一些不常用或不必须的功能,安全问题就是其中之一。我们可能一辈子都经历不了一次车祸,但是遇到了,贵车就更能保命。
我们先以adobe的photoshop为例。基本的图像处理,对于C#和Java来说那都不是事,无非就是加载图片、缩放、颜色、像素、保存等等这些东西。但是,很多人可能没有意识到,C#和Java是运行在虚拟机上的,它们的核心代码用的就是C/C++。当我们写一个Jpg加载程序时,你以为你写的是纯粹的C#和Java,而实际上后端的关键实现是用的C语言。
为了证实这一点,我特地去网上下载了一份JDK的源码,清清楚楚地看到了在某一个native目录下,放着用C语言写的JPG处理程序。
除了Jpg,还有zip压缩、音频、视频处理也是用的C语言。
网上几乎很难找到有用纯C#和Java写的JPG处理程序。光是JPG的图片格式,都可以写一本书。不是那么容易的。就算写出来了,其性能也远远不如C/C++。
你可能会说两点:一、虚拟机自带的JPG足够用了,那本身就是标准库,是语言的一部分。第二、用纯C#和Java去实现JPG等算法,似乎性能不会低,无所谓。
第一、JVM和.Net framework自带的JPG能满足大部分需求,但是一旦涉及优化和修改,就傻眼了。而PS专业处理图像,必定需要反复优化。举个不一定对的例子,或许虚拟机只能处理某种最最主流的Jpg标准,遇到非主流就无能为力了。
第二、在底层算法方面,C#和Java是无法与C/C++比速度的。这得益于后者对内存的精确掌控。这个具体原因讨论起来可以单独开一个帖子了,就不再展开。只说结论,现在主流的各类语言,在涉及复杂算法,特别是运算密集型时都用的C和C++(也有用fortran、go、rust的)。JPG、压缩、加密、MP3、MP4、机器学习,等等。说到机器学习,有人说脚本语言python不是大行其道吗?其实python的大部分优秀算法底层都是C/C++,比如大名鼎鼎的tensorflow。
至于说现在硬件性能很高了,性能低一点无所谓,这就又回到之前的问题了,就是什么叫专业软件。一辆5万的汽车和50万的汽车,性能差别也是几乎可以忽略不计。起步块?动力足?跑高速能飙到180?这就是二八原理了,人们往往反而喜欢这些不太重要的细节。我哪怕起步比你快0.1秒,我也自豪!你先别管我敢不敢跑不跑180码……专业软件也是如此,就是快,你别管我快几秒能干啥。要的就是体验……
上面说的还主要是JPG举例。如果遇到音频、视频这类专业adobe软件,C#和Java将更显得无力。尤其是视频。JPEG,比MPEG-4,完全不在一个难度系数等级,对性能要求也高很多很多。不信?你看看网上能不能找到相关的MP4源代码,C语言除外。
其实C#和Java也是可以写出类似adobe的专业软件,只不过不是纯粹的,是要和C/C++结合使用。前者负责写上层框架,特别是图形界面,后者负责其中一部分复杂的算法实现。
▍用C#、C++、Java能编写出Adobe等级的行业软件吗?
上述3中平台都可以编写出你想要的行业软件,但是如果真的编写首推C++。
C++完全可以编写出不错的行业软件,因为C++比较底层,可以操作指针、内存、硬盘分区等。以上特性可以完美处理计算机对应图像处理的高难度需求。看似简单的图像处理软件其实对底层算法有这很高的要求,这时候C++的指针以及对内存的直接控制可以帮助软件提升处理能力与运行速度。顺便一提现在很多游戏中提到的游戏引擎也是使用C++写的内核。毕竟C++又叫做“带类的C语言”。
反观C#与JAVA就比较高端,他们都在底层的外壳上包装了一层。JAVA叫做java虚拟机,而C#使用framework。由于C与C++的超级灵活性,对于软件编写的安全性等问题C#和JAVA基本取消了指针这种神一般的类型,取而代之的是委托、继承、重载。可以说C#\JAVA完全做到了面向对象编程,如果使用这2款平台开发在运行速度上会有所欠缺。
手工回答不易,点个赞再离去。
▍用C#、C++、Java能编写出Adobe等级的行业软件吗?
完全没有问题,应该效果不错。Adobe的那些东西不是什么高精尖的东西,只是他们做的比较早,打磨的时间长些,感觉上好像很了不起,其实也就那么回事儿。这些东西赚钱比较难,我是说投资人要求那个增长率根本没法达到,你就是有技术也没有人投资你,所以做不出来。如果世界上有三家像Adobe的公司,大家很快一起死掉,现在的Adobe在投资人眼里和半死不活差不多。其实很多基础软件都是这个情况,例如,JAVA,sun公司发明这么牛逼的语言,25年依然坚挺,再有几年还是没有问题的,但是,sun公司现在在哪呢?说回Adobe,不像外行认为的那样风光无限,拓展业务很困难,前几年想进军移动开发,结果被乔帮主踹了个跟头,再也没有爬起来。帮主都去世好多年了,他们连炸个刺儿都不敢。
其实好多基础的东西都是由研究机构来做的,在国外能潜心做研究一般生存不成问题,一般都是豪奢之家,例如,计算机之父诺依曼,不要忘了他叫冯.诺依曼。带这个冯,就说明这个家伙不会差钱的。反观中国基础研究人员,基本和穷困潦倒差不多,急着出点成绩改善生活,有点能拿的出手的,发明人立刻做商人了。整个社会想发财想疯了,那有人做基础的东西?
大家被芯片吓坏了所以美国一禁个软件都浮想翩翩,其实,没个必要。不让用Adobe了,会迅速有软件补进来的,可能不如Adobe好用,但也不会差太多的。
------------------
推荐阅读: