想学c++,有人建议将氢元素说过时了,不建议我学,但是自己比较感兴趣。是不是c++在编程语言中没有优势

当前位置:
C++与Java混合编程
C++与Java混合编程
发布日期: 14:31
浏览次数:22081次
标  签:C++,Javascript
文章评分:5.0
操  作:
称号:未设置简介:...
文章概要:
现在的程序员,不再像以前一样,掌握一种编程语言就可以混得有模有样了,现实的情况是,真实的项目中,通常是涉及多种编程语言,举几个简单的例子,一个软件为了快速开发,可能是使用Delphi或VB作为界面开发首选语言,底层的指令或核心算法,会使用C/C++处理,涉及数据处理的时候,为了安全和快速开发,会使用Javascript或Python等脚本语言实现数据分析处理。因此,开发者应该学习或掌握语言混合编程。 C++和Java是主流的两种编程语言,但是现在整个网上对实现这两种语言混合编程的资料少之又少,却又说之不全,并且有时多种问题现在也含糊不清,对正在学习或使用这两种语言的朋友造成很大的困扰。本人的这篇拙作,希望对使用这两种语言混合编程学习的朋友可以抛砖引玉。
&现在的程序员,不再像以前一样,掌握一种编程语言就可以混得有模有样了,现实的情况是,真实的项目中,通常是涉及多种编程语言,举几个简单的例子,一个软件为了快速开发,可能是使用Delphi或VB作为界面开发首选语言,底层的指令或核心算法,会使用C/C++处理,涉及数据处理的时候,为了安全和快速开发,会使用Javascript或Python等脚本语言实现数据分析处理。因此,开发者应该学习或掌握语言混合编程。 C++和Java是主流的两种编程语言,但是现在整个网上对实现这两种语言混合编程的资料少之又少,却又说之不全,并且有时多种问题现在也含糊不清,对正在学习或使用这两种语言的朋友造成很大的困扰。本人的这篇拙作,希望对使用这两种语言混合编程学习的朋友可以抛砖引玉。
实现Java和C++的交互,使用的技术是称为JNI( Java Native Interface ),C++编写的程序,只要实现JNI生成的接口,则可以让Java程序调用,而Java编写的程序,C++调用,则需要运行Java虚拟机,通过JNI查询调用Java实现的方法。
环境变量设置
本文中使用的Java的版本是( build 1.6.0_03-b05 ),C++的版本为VC++ 6.0版本。并根据你本机上的Java和C++安装目录设置以下的环境变量
注意不要缺少Java的include和lib这三个红线标出部分(为源码包文件中的cpp-env.Bat这个批处理文件)。
设置Java的环境变量,如下图所示
注意红线标注的这处部分,这部分与C++调用Java的方法时候影响非常重要(为源码包文件中的java-env.Bat这个批处理文件)。 在command模式运行这两个批处理文件后,就可以在command模式运行demo程序了。
Java调用C++的方法
源码文件中 %SRC%/Java-cpp目录中的WinFile.java的这个文件(Java语法规定类名与文件名必须一致),定义了一个WinFile类,这个类的内容如下
在代码的第18行,声明一个带native属性的方法GetFilesFromDir,这个方法传入一个字符类参数,并返回一个字符类参数,而System.loadLibrary则会加载指定的共享链接库,参数所示加载的动态库为libwinfile.dll,在windows平台上,执行时会自动加入后缀.dll。 在command模式运行以下命令:
第一条命令则会生成WinFile.class的编译文件,而第二条命令则会生成WinFile.h这个头文件,这个头文件包含了WinFile.java中的native的方法的C/C++语言的定义。
在C/C++的语言定中,Java语言的String的定义为jstring,注意,Java的语言的字符与程序的编码都是以UTF-8编码实现的,所以Java中的中文字符在C++的方法中如果没有编码转换,则会显示为乱码。同理,在C++的方法中将中文字符返回给Java,如果没有将字符编码转为UTF-8,在Java的方法显示同样会是乱码。
以上为%SRC%/Java-cpp/WinFile.cpp的部分代码,代码中实现了两个函数,一个是将UTF-8转为GB2312,另一个为将GB2312转为UTF-8,而jni.h这个头文件中也同时提供了jstring与char*的类型之间转换函数。
GetStringUTFChars NewStringUTF
运行如下编译命令:
cl -GX -LD WinFile.cpp -FelibWinFile.dll
则生成libWinFile.dll这个动态库(注意,生成的名称要与System.loadLibrary这个函数内的参数的名称一致),运行这个Java的类。
则输出如下
C++调用Java类方法
这里演示String作为参数的调用返回的方法,其它的类型的方法调用也类似。
创建一个静态声明的Java方法
这个方法将会接受一个C++的传入的字符参数,并返回Java的字符类,让C++函数输出内容。代码位于%SRC%/cpp-java/WinFile.java
编译该文件后生成是一个java字节码的文件,它必须要运在JVM上,C++要执这些Java字节码,必须要运行JVM,运行JVM的代码位于文件%SRC%/cpp-java/WinFile.cpp中,如下图所示
通过JNI_CreateJavaJVM这个函数,C++则会运行JVM,注意,生成的WinFile.exe这个文件提示需要jvm.dll,但是千万不要将jvm.dll从jre这个目录拷贝到WinFile.exe这个目录,因为jvm能够正常运行,必须依赖jre的java库和其它的动态库,虽然从dependency看不出jvm.dll依赖jre中的其它库和文件。如果把jvm.dll抽离出来与WinFile.exe位于同一目录,虽然能够运行,但JNI_CreateJavaJVM调用永远失败的。解决方法,就是将jvm.dll这个动态库加入的搜索路径中,如上面的批处理文件所示。
成功建立Java虚拟机后,就需要动态获得类名,并通过类名和函数签名获得Java的方法,获得函数签名的方法是运行如下命令。
Java -s -p WinFile
则输出了我们在Java文件中定义的函数的签名,
剩下的事情就是要负责将字符的参数进行编码调用,如下图标注出值得注意的地方
参数的转换过程是为char*转为UTF8编码再转变成为jstring伟入java方法,java方法的返回值也应该是先转成jstring类型,再转为char*类型再转为GB2312。运行程序,输出结果如下
混合语言编程要注意的是编码传输,语言运行环境的因素。例如要在C++中构造Java的运行环境。混合语言编程有困难,但也很有趣,两种语言的优点都可以得到,不是很好的事情吗?
感觉很高深哦
11:48 发表
学习了。(www.loveprogram.net)
19:39 发表
最多还可以输入100字
【VIP年会员制套餐】
【C/C++软件工程师实战能力集训大纲】
VC知识库发布了C/C++业界的“本草纲目”
【牛人都在千人一号群! 加群三步走!!!】
第一步:请必须加VC知识库QQ: 为好友;
第二步:请必须关注本站微博:
第三步:申请加入群:.(必须将关注微博截屏发到QQ方可通过!)
【最新2013:】
全部100% VC++源码提供: E-Form++全新大型SCADA & HMI解决方案源码、CAD解决方案源码、Gis解决方案源码 、电力石油化工仿真与图形建模解决方案源码、大量其他高级制图VC++源码下载!
【 新视频发布】
o o o o o o o o o o
用CListCtrl来显示数据比较方便,有时候我们需要标注某一列或某一个单元格的背景和字体颜色,或者需要改变一下行高和字体大小,CListCtrl要改变这些并不是很方便。本文将介绍如何派生一个类来改变CListCtrl及其表头的高度、字体大小、列背景颜色、单元格背景颜色、列字体颜色、单元格字体颜色。...
用CListCtrl来显示数据比较方便,有时候我们需要标注某一列或某一个单元格的背景和字体颜色,或者需要改变一下行高和字体大小,CListCtrl要改变这些并不是很方便。本文将介绍如何派生一个类来改变CListCtrl及其表头的高度、字体大小、列背景颜色、单元格背景颜色、列字体颜色、单元格字体颜色。...
本文介绍了套接字编程的基本知识。...现在C++是不是处于一个很尴尬的底部啊?学习C++现在还能在哪些方面应用的比较广泛啊...会不会逐渐的被JAVA或者C#代替啊?
C是应用于底层的,有人说,现在语言组合就是C/C++或者java/C#,但C++现在除了在游戏开发方面存在优势,在其他方面还有优势吗?而且C++学起来很庞大,会不会逐渐的就没了....中小型企业还会选择C++做为开发语言吗?
回复讨论(解决方案)
C++的用途非常广。
要么往下学C语言和汇编,要么网上学JAVA和脚本语言,C++其实是不上不下的。
我去,你看下那一个互联网和计算机公司招人的时候不是要C++的多?
C++最能考察一个人对计算机知识掌握的能力。
windows使用C、C++写的,现在又有qt、codeblocks等跨平台开发工具。
可以这样说,基本上大型软件的底层使用C或者C++开发,上层使用C#、C++、Java开发,这样可以导出对应版本的API以提供开发者进行二次开发。
比如说windows系统、AutoCad、matlab等。
现在用纯c写底层的已经很少了,因为比如你做个图形库就要不知要写几千几万行代码,这对程序员来时是一种考验,在这种竞争日趋激烈的社会,时间就是生命,效率就是金钱,C++以其开发效率高而性能只比C损失10%的情况下具有无可比拟的优势,也不能完全这样,因为C++是C的超集,也可以完全采用c语言编程。所以说为什么现在的库都往面向对象方向发展,连gcc也开始转向C++了,图形方面的XBOX、OpenGL都有很多C++版本。
就比如你知道的qq用的是Microsoft&Visual&C++&6.0写的,其它大多组件也是用的这个,,可用PEiD查&QQ.exe的主程序。另外有一小部分用的VS2005,包括QQ.exe,也是VS2005编译的。包括qqlive、qq管家。
再比如google和百度搜索引擎底层是用C和C++写的。
所以,对效率要求高的一般是C、C++混合编程,而对于网络前段和二次开发用Java和.net的居多。
MySQL是用C++开发的,Oracle是用C写的。
所以学习C++用途是很广的。
语言没有好坏,只有学习的人掌握的深浅。
而且据我所接触的语言,Java、C++、C#作为C语系,而且都是面向对象语言,具有非常相似的语法,如果你精通了一种,转换为另外一种也是非常容易的。
楼主被流言迷惑了。。。
/articles/6548.html
很多方面是暂时还没法取代的。。。再说,现在很多公司招人,C++/C的明显工资高啊
C/C++生命力很强的吧
JAVA的反射对我是个新概念,不知道是什么。但我学过的其它的东西都可以映射到C++的某一部分上,C#也给我一样的感觉,so...
C++目前为止,生命力还是很强大的。至于中小企业是否会选择C++开发,这个我还真不清楚,但C++的开发周期确实长了点。
C++好比电动自行车,Java、C#好比汽车。我们都需要。
不会吧,各有其用
使用c/c++开发的知名软件:
Microsoft&Windows
Symbian&OS
Apple&MacOS&UI&(Aqua)
Oracle&database
Microsoft&SQL&Server
Microsoft&Internet&Explorer
Mozilla&Firefox
Google&Chrome
Microsoft&Visual&Studio
Microsoft&.Net&CLR
Java&Virtual&Machine&(JVM)
Adobe&Photoshop
Microsoft&Visual&C++ &&&
Microsoft&Visual&Basic
Microsoft&Visual&C#
Microsoft&DirectX
更多的可以去Bjarne&Stroustrup的主页上看。
,C++/C的明显工资高啊
坚定不移。。。即使没落了,你学好了一样碉堡了。。。
coolshell那个帖,“Performance就是钱”,这什么鸟翻译……
1.比较赞同的观点:&&基本上大型软件的底层使用C或者C++开发,上层使用C#、C++、Java开发,这样可以导出对应版本的API以提供开发者进行二次开发。
2.万变不离其宗,C/C++&是基础。如果你身怀C/C++绝技,搞个C#&Java那不是小菜一碟?
C++学好了,学习其他语言很快的!其编程思想都是相通的
Java&继承自&C++
回答这个帖子主观意识占主导,很难得出什么结论
随着现在的两极分化,C++越来越处于尴尬的位置,其和Windows系统一样,日落西山是趋势。一极是追求低成本的嵌入式产品,一般用C和汇编来开发;一极是追求高速度的产品,一般用JAVA/PYTHON/C#等等高级的智能的安全的工具来实现。
去51job里面搜一下c/c++
不要被流言迷惑。认真学C++吧,相对其他语言它的确有点“难”,但是是值得的。
不要被流言迷惑。认真学C++吧,相对其他语言它的确有点“难”,但是是值得的。&
存在就是合理的,做客户端界面还是用C++比较好呢,效率比较高呢!!!!
十年前帖子都讨论这事了
天天讨论,天天买c++&prime,天天花钱买书看.累死累活的...
相信c/c++足够强大!!!!!!!!!
/applications.html
跟10年前比起来确实少多了。
很多人不愿意或者不想面对现实,这样的人必然被淘汰,C++没落确实是一种趋势和现实,
不管某些人是否承认,优秀的开发者会正确的选择工具,语言不过是种工具,任何工具都有
被替代的一天,同时任何工具也有适用它的场合,但总的来说,C++日薄西山我觉得是不可逆转的。
虽然有这些观点,但是这不代表我不支持C++。热爱它并一直追随它,就算到了它被人遗忘的那天。
只是一门语言而已。C++相对于精英化。。刚开始学的不好找工作。不如JAVA。
Java&就是C++的精简版,学好c++,其他的都会很简单
C++的优势在于在运行效率和开发效率之间达到了很好的平衡。
C++从C借鉴了整个C标准库及几乎全部语法,PO范式基本上可以取代C,不仅如此,PO还是一个超强的C风格模式,PO可以使用C所没有的函数重载、默认实参、模板、OB甚至异常等特性,特别是模板元编程,迷人的编译期计算在某些任务中可以轻松获得超越C数倍的运行期性能,而付出的代价仅仅是编译时多等待一会而已。
抱歉我一直觉得这类问题有点庸人自扰的感觉.因为这是开发语言人的游戏规则和市场的游戏规则.
c++确实很尴尬,不上不下,
上层比不过java&c#
底层又比不过c
c++一般是用来做比较大的东西,也在很多科研领域用到。我反正以后准备去搞科研,所以编程语言上在汇编,c和c++上努力。
对比编程人员来说,比学好C++,更重要的是&面向对象思想和调试技巧,
只要面向对象的世界观没有崩塌,&就算C++,JAVA&这些语言的生命周期结束又有什么好怕的呢?
马上可以换另一种主流语言,&只不过一些编译器和API不一样罢了,,,
应该不会把&不然现在高校科班的就不会让学c++了
不要被流言迷惑。认真学C++吧,相对其他语言它的确有点“难”,但是是值得的。
复制帝、、、
不要被流言迷惑。认真学C++吧,相对其他语言它的确有点“难”,但是是值得的。
不用担这种心
其实想用C++,可惜就毕业那头两年再用,之后就再没机会用了。
java&c#&没有RAII.
虽然最近加上了模板&但是远不如c++的设计
c++0x增加了很多语法糖&编程更直观了.
大哥&做游戏啊,&&&&
4楼和22楼回复的比较权威,楼主认真学习即可。
学c++好比开手动档的车,java相当于开自动档的车。各有各的优点,但是看你注重的是什么,如果要尽快上路的话,那么自然是开自动档的好一些,如果想让自己开车技术有所建树的话,还是手动档好。所以,漂移的,都是手动档。
C++的用途非常广。
会被Go替代&&未来只有C和Go&&&Go是对所有语言进行批判式的设计而生的极其优秀的语言
C++没有想象中的这么难。
我用Java的方式做C++感觉也挺好。
每周我都能看到这种话题
看过一个大师说的话,学会了C++,就学会其它高级语言的90%,剩下的10%是那种语言一些语法改进~~~所以学会了C++的人可以很快的学习一门新有语言。
其实我倒是很想知道开发网络游戏需要学习c++之外,还要学习什么,怎样才能算入门?
c++博大精深,真正学好了你已经不是苦逼的程序员了,而是成了哲学家。我想假如真正到达了这个地步,万物归宗,任何语言在你眼里可能都只是一个信手拈来的工具而已。飞花摘叶,均可伤人。时间,效率,空间,可能对你来说都是纸老虎了。
我以前读书的时候先学的C,PB,ASP,JAVA,工作后学的C++
我以前读书的时候先学的C,PB,ASP,JAVA,工作后学的C++
引用&23&楼&&的回复:
不要被流言迷惑。认真学C++吧,相对其他语言它的确有点“难”,但是是值得的。
复制帝、、、
估计我们这一代人是看不到C++消失了……&SO……
JAVA的反射对我是个新概念,不知道是什么。但我学过的其它的东西都可以映射到C++的某一部分上,C#也给我一样的感觉,so...
搜索MFC运行时类型识别(MFC&RTTI)与动态创建
长得和反射像不像?
10年前的技术,悲剧吧。MFC用宏+一点点面向对象就完成了。
别管太多,努力吧。
C++11&懂&?
楼主,C++很强大!你知道怎么干了吧!
C++现在还是有很大前途的,现在是将来也是。楼主要淡定
不管c++会不会没落,只要在咱有生之年不没落就行了
每个时期都有C++迷惑者,
一开始看到这个帖子&&心里吊着8个桶看完。
如今再看这个帖子就一笑了之~
c++入门真的挺难的,这得靠时间跟天赋堆起来的。。。最后唠叨一下,学会C++到哪里都有饭吃。。。
学习C++,就像学习英语一样,用途广泛。
以为例,网页页面用Java,你上传一个视频后,服务器后台对视频的压缩用的是C++。
Java和C#通常做页面,后台的WebService通常用C++。不过一般小型企业的网页就是增删改查,不需要WebService。
没有任何一种东西是永恒的,事物的发展规律,
C++其实很简单,简单到可能会超过java,但是很多人都说C++很难,主要还是在指针和从VC、VS、MFC来的一些观念,我要说你们被不懂C、不懂C++的人写的东西教坏了。
微软所有的东西开发不是来自于C或C++,而是来自于宏,微软将宏语言玩到了极致,做出了3个语言还有一大票的类X语言,宏直接来自于汇编,现如今几乎已经没有人知道这个事实了,但微软硬是用宏创造了一个庞大的软件帝国,现如今在PC领域有哪家公司做的比微软更大更广?人家用宏,C#、J++、VC不过是另一种形式的宏而已,虽然很像是其他语言。
用C++,不如用dev&C++,如果用过BCB或RAD,你会发现C++编写windows程序是那么的简单写意,你会后悔学习用java,学习语言,一个好工具太重要了,重要到可以完全改变一个人的认知。
C/C++重要的还是在指针,但是两者在这方面也是差异最大的地方,C的指针可以说仅仅是转换地址,是与句柄(长整型数)息息相关的,因此在任何时候,只要是必要就可以对指针进行升阶或降阶操作,而这一点在C++上却是完全不可以的。我在很多回帖中都提到过这点,这也是国内国外很多人写的书中竭力回避的地方,然而这却是事实,还有字符串,字符串不应该用于指针样例,因为它的特性更符合链表(以顺位代替指向指针的隐式链表),如果那本C或C++将其作为指针样例,很遗憾,你看错书了,写书的人对指针还不是很清楚。
我先学好C++,再考虑其他的..
C++再没有用也要学,基础+必修课,所以就不要问这种无聊的问题了。
语言是不可替代的。
只不过,现在中国的市场上,确实C++工作的比例越来越少了。
楼主,我是一个准备大二的学生,大一接触的是C++,之前我也有过这样的困惑,但是后来学长告诉我学就是了,当你精通了一门语言后学习其他语言就会相对简单了不少。语言这种东西,说不清的,所涉及的领域太大了,而且C++现在也挺热门的啊。加油吧,呵呵数学好适合学 JAVA 还是 C++,或其它编程语言?
【tefx的回答(180票)】:
适合Lisp和Haskell。
我是认真的。
=============
下面认真答题。
首先我认为这个问题没有意思。因为,学会一门语言不是目标,计算机语言只是实现我们想法的手段。所以,没有适合学哪一门语言,只有我们需要哪一门语言。所以,这个问题就相当于,我是广东人,适合学俄语还是法语,答案是,看你想去俄国还是法国。
所以我回答的问题,其实是“好在学哪一门语言时更有优势”或者“哪一门语言中数学比较重要”。这里我没有限定在Java和C++,因为可能是题主暂时只知道Java和C++,但其实应该不介意了解更多语言。
当然,如果题中数学好指的是高中数学成绩好,或者说“初等代数”好,那确实“学程序语言和数学没关系”。但这样也至少说明对数学有兴趣,很有可能对抽象代数继续有兴趣,那也还是有意义的。
那么,我的答案是Lisp和Haskell,当然还包括其他functional语言。我这里保留的functional的英文,没有说是“函数式语言”,不是装逼,是因为这个词,在数学里有另外一个广为人知名字:“泛函”。(不过下面我直接说函数式语言了跟顺口一点。。。。)
之所以说数学好学函数式语言更有优势。是因为1)相较其他语言,函数式语言和数学“更像”,2)函数式语言更依赖数学。
说函数式语言和数学更像,最基本的就是“函数”。要注意,虽然都叫函数,但是其实二者是完全不一样的。数学中的函数是一个从定义域到值域的映射,而计算机语言中的“函数”至少包括两个意思:procedure和function(Pascal中就是分开的两个概念,呃。。。说出Pascal是不是就等于暴露了OI历史。。。),function还可以粗略的等于从参数的空间到返回值的空间的映射关系,但procedure完全就是程序跳转到另一个位置去执行,和“函数”这个东西基本没有任何关系。而在学C的时候,我们叫着函数,却基本都把它理解成procedure。既是是有输入有输出的函数,还有和数学中函数的一个最大的不同:确定性,或者说,副作用。
一般来说,数学中的函数是一个从定义域到值域的确定的映射关系。换言之,确定的输入总产生确定的输出。但是过程式语言中这一点完全无法保证,例如允许对函数外的变量进行修改。而纯函数式语言中通常要求函数保证无副作用(比如通过强制变量不可变),这样保证了语言中函数和数学中的函数的一致性。
再举个可能不太恰当的例子:在纯函数语言中,通常变量不可变。于是,困惑了无数小白的诸如“a=a+1”这样违背数学常识的语句也不太可能出现了。
因为语言中的函数和数学中的函数统一了,递归这个概念也好理解多了。因为递归不再是“一段代码调用本身”这么拗口的概念,就是数学中的递归定义或者递推公式而已。
再者,配合函数式语言中常见的模式匹配,函数式语言仅仅是“看上去”,也更像数学。比如Erlang中实现斐波那契数列:
fib(0)-&1;fib(1)-&1;fib(N)-&fib(N-1)+fib(N-2)
基本就是数学定义。
然后,泛函。数学上,泛函通常是指定义域为函数的函数,而函数式语言中,函数是first-class的,即和普通变量一样,函数可以操作函数。看,又和数学统一了。使用函数式语言,完全就是从数学的角度看问题了。这种操作在C和Java中不能直接实现。当然,C可以使用指向函数的指针,Java通常借助一个接口。但这样,都是从机器的角度思考,或者从面向对象的角度思考,而不是从数学的角度思考。
另外,学习函数式语言也确实需要数学基础。
过程式语言,包面向对象语言等等,都可以用图灵机来理解,但是函数式编程则不然,理解好函数式编程你需要理解lambda演算,然后不可避免需要形式系统的推理和证明,这些还真的需要数学基础。而Haskell更进一步,即使不碰monad,至少需要集合论的知识甚至部分泛函(向量空间)的知识,而如果涉及到monad,没有抽象代数和范畴论的概念基本很难真正理解。(是的我要承认我还没有真正理解)
综上,如果数学好,“适合”学函数式语言,而我所举的,是其中两个典型。另外有人提到clojure,我认为clojure可以视为Lisp的一种方言。其他推荐学习的函数式语言包括Erlang和OCaml。
然后再来回答一下原来的问题,如果以后会搞计算机,那这两门语言都跳不过去,但是两者选其一,建议先学Java,因为C++太复杂(抱歉我是C++黑,不争论)。但是,更建议C和Lisp。
学C,推荐的教程只有一本:《程序设计语言》,作者K&R,不要去看任何其他的书。
学Lisp,推荐的教程也不用多说:《计算机程序的构造和解释》。
然后,虽然我大部分时间会使用Python,但我坚决不同意一个专业的程序员从Python入门。虽然Python上手很快,但是无益于理解计算机的运作方式,也无益于理解程序的数学本质。当然,Python是个好语言,(Perl?哈哈哈哈,逃~)。
说这么多,不是表达Lisp和Haskell比Java和C++高端,或者Java和C++是inferior languages。C/Java/C++应用比函数式语言广泛毋庸置疑,而函数式语言学习的更大好处其实是学习其中的思想不是为了工程应用(大多数情况下,Lisp在人工智能领域应用很广)。数学和机器都是计算机的一部分,对机器感兴趣,就去学C,学体系,对数学感兴趣,就去学Lisp,学计算理论,最后会发现,殊途同归。只不过,选择一样的时候,记得对另一样保持好奇心。
计算机很好玩的!!!!!我们不要再(让别人乱)黑了好不好!!!!!
最后,也别全信《黑客与画家》,那就是一本Lisp软文集。。
【彭斯的回答(4票)】:
对于好的软开来说,语言都是互通的,可以举一反三。编程的思想不在乎就是面向对象或面向过程,搞明白了根本,像语法什么的,很快上手。编程不在于写什么语言的代码,而在于解决什么样的问题。如果沟通比较好,全局思维好,并且对某个特定的商业领域有较深的了解,那比较适合做下游产品,跟各种人沟通,解释来龙去脉,获得新的客户需求,push新的feature。而如果是数学比较好,如果不那么喜欢沟通,那比较适合做算法,可以去谷歌这样对算法要求高的地方,或者投行里专门设计计算模型的部门。但前提是,数学真的超级好。
【知乎用户的回答(2票)】:
数学好应该自己设计先进的。设计出来至少也得是APL那种级别的。
【姜山的回答(1票)】:
数学好可以去做模式识别啊,机器学习啊。最近再搞这方面发现会啥语言都没用,数学好才是王道。
所以我想说的是数学好坏决定的研究方向而不是你的编程语言。
【蓝色回忆的回答(1票)】:
敢不敢不炫耀自己的专业知识?
楼主提出这个问题,我第一直觉就是楼主是个学生 “将来就业选哪个语言好”。推荐Java,和数学学得好没有关系,应用范围更广,就业更容易。无论是各种pc软件项目开发,网络项目开发,还是近些年热门的手机应用开发都可以,JAVA应用更广泛一些,工作机会也多一些。
不知道直觉对不对,楼主最好补充一下问题的背景,楼主将来想做什么。学术研究,考研考博的话,tefx的建议不错。就业的话 建议JAVA
【本帅的回答(1票)】:
数学好与学哪种语言没有关系。不过对人工智能,图形渲染有很大帮助。
【田雨的回答(1票)】:
学程序语言跟数学没关系,与数学有关系的是相关算法,如数据挖掘,大数据处理,图像识别等
【何煁的回答(1票)】:
大家成功把双选题跑偏了。。为什么没人说matlab?那里面才是用数学知识的地方。各种高端词,什么数字信号处理,图像识别,语音处理,控制建模,模糊控制,鲁邦控制,机器学习,神经网络。不都是用matlab吗?
【明瑶的回答(1票)】:
作为一名高中数学还不错的计算机专业学渣想告诉你,其实数学好不好跟编程屁关系没有……
【LeeSam的回答(1票)】:
我本科数学专业的,现在在做金融,因此我的经历应该对题主有借鉴意义。
对于搞数学的人来讲,计算机无非是个巨大的计算器,这些计算器的区别,到头来无非是这三个方面:操作的容易性,计算速度,和功能性。而这三个中哪个对你最重要,实际上取决于你做的工作。
如果你做的是比较”纯”的数学,如搞数值分析,模型优化等,matlab绝对是首选。matlab操作起来巨简单,可以说基本是无脑式操作,其次各种常用的方程已经跟你写好而且优化了,绝对能满足你的大部分需求。
如果你做的东西稍微麻烦点,如涉及到怎么把数据快速的从数据库里调出来,数据结构有点复杂,而且需要构造一些抽象概念的时候,java就是比较好的选择了。java是所谓的object oriented program,能够把很多东西抽象为一个物体对其进行操作,会让你写起代码来省力很多,最后维护起来也方便很多。
如果你做的是及其特殊的工作,要求你的算法和计算机高度结合,或者对计算速度有很大的要求的(比如搞高频交易),那么就要用C++了。c++会让你对电脑的控制力加强,让你设置更多的参数,而不象java一样中间夹着一个帮你自动设置参数的东西,所以运算速度就更快了。当然这速度也是有代价的。c++比java难学不少,同时维护起开也更困难。
至于其他语言,如r, vba等也就介于上述三种语言之间,你可以自己选择。
我个人推荐你先去学java。一是因为上手不难,我学的第一个语言就是java。二是因为它难度刚好。java好歹会让你了解下计算机的机构,让你以后写程序时会照顾下电脑,而如果一开始就学matlab,你会以为所谓的编程就是个复杂的计算器而已。第三个原因是学完java后进可攻,退可守。用完java再去搞matlab, vab等都是小菜一碟。想晋升到更难的C++也不是问题。综合来讲,java是个非常好的入手语言。
最后强烈推荐题主去学下vba。相对其他语言,vba要速度没速度,要功能没功能,但人家有一点牛逼:能天然的跟excel结合。你可以把复杂的算法做成一个简单的excel插件按钮,然后存成xlsm格式就可以发出去了。实用性非常高。
【酒肉和尚的回答(0票)】:
大一学C要死要活,现在学汇编这么LOW的是在否定大一学的C?
【侯杰的回答(0票)】:
【ClarkChange的回答(0票)】:
据说Python不错,适合科学计算。
Python(x,y)是科学计算的库。
当然为了关注算法,淡化编程,可以考虑Matlab
【知乎用户的回答(0票)】:
补充一楼。
楼主可以看SICP,计算机程序构造和解释艺术。
Scheme。Lisp的分支
关键点是这本书就是告诉你怎么把函数翻译成计算机语言。
Java和C是很难达到高等函数的抽象层次的,Lisp/Scheme可以达到。
这本书的每个题目直接在网上有回答。而且这本书一直都是MIT的入门书。
楼主可以看看
【SiliLiu的回答(0票)】:
适合学量子力学。
【XiangLian的回答(0票)】:
数学好的话在研究算法和设计算法方面都会有优势。根据具体工作的要求再来选择合适的语言。
【孙浩然的回答(0票)】:
先吐槽一下这是什么话题
-----------------------------------
看到楼上推荐Lisp或者haskell之类的语言,但是很多初学者学了以后都不知能做什么。
这里强烈推荐—下 elm lang :
它有着类似Haskell 的语法 但是最终是编译为html5的。
官网的例子也非常的吸引人。
下面举出一个官网上的例子
import Keyboardimport Window-- MODELmario = { x=0, y=0, vx=0, vy=0, dir="right" }-- UPDATE -- ("m" is for Mario)jump {y} m = if y & 0 && m.y == 0 then { m | vy &- 5 } else mgravity t m = if m.y & 0 then { m | vy &- m.vy - t/4 } else mphysics t m = { m | x &- m.x + t*m.vx , y &- max 0 (m.y + t*m.vy) }walk {x} m = { m | vx &- toFloat x , dir &- if | x & 0 -& "left" | x & 0 -& "right" | otherwise -& m.dir }step (t,dir) = physics t . walk dir . gravity t . jump dir-- DISPLAYrender (w',h') mario = let (w,h) = (toFloat w', toFloat h') verb = if | mario.y & 0 -& "jump" | mario.vx /= 0 -& "walk" | otherwise -& "stand" src = "/imgs/mario/" ++ verb ++ "/" ++ mario.dir ++ ".gif" in collage w' h' [ rect w h |& filled (rgb 174 238 238) , rect w 50 |& filled (rgb 74 163 41) |& move (0, 24 - h/2) , toForm (image 35 35 src) |& move (mario.x, mario.y + 62 - h/2) ]-- MARIOinput = let delta = lift (t -& t/20) (fps 25) in sampleOn delta (lift2 (,) delta Keyboard.arrows)main = lift2 render Window.dimensions (foldp step mario input)
这段代码实现了控制角色移动、跳跃。
p.s. 第一答达成qwq
【赵金庆的回答(0票)】:
个子高适合打羽毛球还是乒乓球,或其他球类运动?
&&&&&本文固定链接:
【上一篇】
【下一篇】
您可能还会对这些文章感兴趣!
最新日志热评日志随机日志

我要回帖

更多关于 有人建议推动街区作文 的文章

 

随机推荐