zoukankan      html  css  js  c++  java
  • C++到底还能做什么?

    C++到底还能做什么? 

    肖舸 

    嗯,这是一位朋友发到我邮箱里面的,很奇怪,发到了gmail邮箱,而不是我常用的hotmail邮箱哈。 
    我呢,试着回答一下,如果回答得不好,叫做肖某人学艺不精,回去重新学习再来过哈。呵呵。 
    一家之言哈,欢迎拍装。 
    原文如下: 

    我呢,试着回答一下,如果回答得不好,叫做肖某人学艺不精,回去重新学习再来过哈。呵呵。 

    一家之言哈,欢迎拍装。 

    原文如下: 

    肖老师您好: 
    我现在是一名在校大学生,在学校期间自学C++有两年的时间了,看过C++Primer,stl,inside C++ model(侯捷翻译的那本),com本质论等... 
    在学习C++的过程中感觉C++语言本身的确很强大,而且随着学习的深入,我逐渐感到要想在短时间了解这门语言的本质几乎是不可能的.因为我也学习过javaSE的一些东西,感觉就java和C#来说,语言本身不难,不过在底层调用方面有时候就会显得有点费力了. 
    不过对于C++我一直有很多疑问,所以想请教您,向您学习一下: 
    1)关于C++的应用: 
    曾经我以为C++的应用比较多的就是用MFC来编写各种应用软件,但是,我现在感觉编写软件这方面,用一些其他语言和开发平台,要比C++方便和快捷的多,而且也听人说,现在几乎不用MFC或是C++做软件了.至于网络应用和跨平台方面,现在应该是C#和java在这方面的应用比较有优势吧.至于一些其他有关硬件方面比如嵌入式,单片机控制系统等方面,用C语言就可以满足大多是的应用了.所以,现在哪方面的工作是用C++来做的? 
    2)关于找工作的事: 
    现在学C++到底能做什么样的工作?就像我前面说的,因为不大了解C++主要的应用在哪,所以,也不清楚到,能用C++来做哪方面的工作. 
    3)关于com: 
    我之前听人说,C++做到最后就是做com组件开发.情况是这样的吗?如果是的话,是不是用com来做有关远程调用对象和接口或是分布式系统等方面的应用.如果想做com开发的话,现在有哪些工作是需要用com组件编程的? 
    4)最后: 
    虽然我学习c++两年了,不过感觉,没做过什么像样的应用,因为我在我们学校的一个网站的技术部里做过网站前台开发的工作,就是html,css这些,感觉这些语言虽然在学习的时候感到有很多东西不理解,但是通过做一些简单的网页,逐渐的基本掌握了如何编写网页代码.所以,也做过一些专题网站什么的.不过,就是c++这门我学的时间比较长的语言,我没有做过什像样的应用,想练习可是又找不到合适的方向. 
    所以,想让您给我提点建议,我现在应该学习或者是做哪方面的东西来提高自己的C++水平,还有就是在学习这门语言时,如何能够通过实践来更好的掌握C++. 

    P.S: 
    我的表达能力有限,可能有些问题我描述的不清楚,不过,还是希望老师能辛苦一下,尽量帮我解答这些问题. 
    谢谢了. 

    我的回答: 

    嗯,这位同学你好,我看了你的问题,也有点头大,说实话,你这个问题我不是没想过,我想得比较“野”,说白了,虽然我也用C++,但是,想这个问题的时候,我确实尽量站在一个客观的立场上在想,想出来的结论,说实话对C++不是很有利,我也怕说出来被人拍砖,所以一直没说,呵呵。 

    不过,你既然问得这么细,我想我还是说说吧,说得不好听,大家就担待一下吧。 

    嗯,恶意拍砖,我拍回去! 

    这第一个问题,其实里面就很不好回答了。 

    你说的“我以为C++的应用比较多的就是用MFC来编写各种应用软件”其实话没说完整,在Windows下,这个大前提不能少,大家开发Windows的应用程序,如果使用VC++的话,建议使用MFC来开发,因为它是微软提供的一套C++扩充类库,专门针对WindowsAPI封装,开发Windows程序最方便。 

    这个话,倒退10年,是绝对正确的,因为那会儿,Linux没怎么起来,100个程序员,估计有99个都在为Windows开发程序,应用软件想当然跑在Windows下,这是对的,不过现在,使用Linux开发的人越来越多,Windows即使在桌面平台上,也一般只占据Client市场而已,Server中早就是Linux一家独大了,没办法,老外版权意识强,但老外也想省钱,Linux不花钱,WindowsServer花钱,就这一点,就够了。国外大量部署的商用服务器,其实是Linux平台。 

    嗯,国内貌似也差不多。 

    所以,我在年初的演讲《明日世界--云端计算下的程序员需求分析》中强调,MFC可能会衰落。起码,没有上世纪90年代那样,一家独大的感觉了。 

    这其实也正是我为什么一直强调大学生尽量打好基础,不要太早涉足商业应用开发的原因,因为商用类库,有生命期,今天最火,你学了,明天等你毕业出来,人家被淘汰了,你不是做了无用功?甚至,工作都不好找。不信,有谁是专门研究TurboC的graphics开发的,就是BGI,现在出来找得到工作不? 

    其实,MFC最大的问题,不是它自己的问题,是业界发展的一个普遍结果。 

    现在的社会,请问大家一句话,纯正单机版程序的应用还有多少?大家打开自己的Windows系统看看,有哪些应用是纯粹单机版,一点不带网络访问的? 

    恐怕不多了吧? 

    现在随着互联网的发展,网络化应用越来越多,在Server端不好说,因为要求高吞吐量,高性能和高安全性,C/C++开发还占有一席之地,但是,客户端,恐怕未必了。 

    客户端应用,一般都很贴合应用客户的需求,更多的以数据库服务为主,目前,我这里再提个看法,纯粹功能性应用越来越少,像暴风影音,像光阴魔术手,这类纯功能应用其实是越来越少,目前应用开发的主流,是利用强大的中心服务器的处理能力,为用户带来越来越多的数据密集型应用体验。 

    QQ,它的用户群有多少?MSD和gtalk什么的不说了吧?大用户量,就是大数据量,带来了全新的沟通体验。 

    SNS社区,包括我们这个网站,大家是不是在享受大数据量的应用体验? 

    即便是强调终端用户体验效果的游戏,目前大家可以比较一下,网游和单机游戏的比例,就知道了,人们到底喜欢什么样的应用了。 

    这就带来了一个问题,以后的社会发展,对于程序员来说,越来越偏重强中心,弱客户端的这么一种开发模式,这其实就是云计算的由来啦。 

    大家是不是发现,自己用IE的时候越来越多了? 

    但是,这就带来一个问题,开发弱客户端,还用得着C++这种大型的语言吗? 

    我不说,大家自己想,学C#和Java容易,还是学C++容易? 

    大家别耍酷啊,呵呵,其实我当初就是为了耍酷,非要学C++的,不过,要是站在商用立场,站在老板的立场,早出人才,快出人才,出便宜人才,嗯,Java和C#,PHP也算,就是不能算C和C++,为啥,学起来费劲,程序员学习成本高,自然价格也高,同样的功能,用Java实现,程序员满地跑,用C++实现,老板抱着程序员大腿哭,恐怕程序员都未必肯应聘,太少啦,也太贵啦。 

    这不是肖某人危言耸听啊,我也声明一句,我一点歧视Java和C#这些程序员的意思都没有,仅仅是请大家比较一下,Java、C#程序员多,还是C++程序员多。 

    不过,这并不说明C++程序员的优势啊,这反过来证明另外一个问题,大多数中小型企业,在研发上投入不会很大的企业,急于做出成绩,快速获得市场表现的企业,在同等条件下,即Java和C++都能满足需求的时候,会选择Java、C#、PHP等语言作为公司的主流开发语言,而不会选C++。 

    这对Java等语言来说,其实是最利好的消息,当越来越多的公司需要这方面程序员时,程序员的市场越来越大,价格越来越高,而C++呢,虽然摆出一副曲高而和寡的样子,端着架子,但是,由于没有太多公司选择C++作为开发语言,因此,反而市场越来越小,找不到工作,即使找到,也得降价销售,这就是市场规律。 

    这里我要说一句,其实C++程序员,我个人认为,前景并不好,从我个人经历,和很多朋友的感觉,发现有问题。主要就是不好找工作,工作机会太少,没有太多的选择空间,而Java的朋友们,由于选择空间大,其实很好谈价,我好几个Java朋友,薪水比我高的。呵呵。 

    因此,我的建议,如果以后定位在应用程序员,主要做Client业务,建议不要选择C++,更多选择Java和C#什么的吧,工作更好找,还有,我的经验,薪水与语言无关,大家千万不要以为C和C++程序员薪水就一定高。高的有,肯定有,但是,不是所有人,也不一定就是你。 

    嗯,说到这里,顺便说说第二个问题,C++找什么工作,我的经验,游戏,无论是客户端还是服务器,需要C++程序员的,不过,由于目前引擎公司越来越强劲,很多游戏公司自己不开发引擎,而是用买的,因此,客户端这边,恐怕需求会越来越少,主要恐怕以后还是做服务器需要。 

    但是也很难讲,C++比Java主要就是速度,但是,硬件越来越快,多核开发越来越多,很多网页游戏其实用PHP已经够了,这个,C++程序员的工作空间也受到挤压。 

    C不一样,C呢,在很多时候,做驱动,做嵌入式小规模应用,满够用的,而老板为了节约硬件成本,往往会挑选比较弱的平台,Java等脚本语言目前跑不下来,只能用C,嗯,稍微大点,用点C++也可以的。 

    在嵌入式平台上,C++貌似还有一点市场。 

    不过很难讲,目前的arm9已经接近当年P2的计算能力,随着嵌入式CPU的发展,嵌入式系统最终走向脚本化,也不是什么难事。 

    其实,Java等脚本语言,针对C++最主要的优势就是没有指针,没有很多费解的东东,学习曲线低,程序员容易学出来,还有就是底层已经处理了很多细节,上层更多地专心与用户的业务,这样,用户业务贴合度好,更容易受到用户的青睐,还有就是,不处理复杂数据结构,大家都调用基本库,程序成功率高,bug率低,开发成本低,公司容易赚到钱。 

    说白了,Java相对C++,不是技术在推动,而是钱在推动,所以,C++必败。 

    com就不说了吧,com本质上是跨进程远端调用,dcom甚至允许跨机器。但是,大家想想,其实正是因为com的存在,进一步挤占了C++的生存空间,越来越多的基本C++功能,被以com形式提供出来,最终被Java、C#等其他语言所调用,扩充了其他语言的功能和性能,使原来仅有C和C++能做的事情,现在Java、C#等做起来也很好,很快。 

    其实,我私人认为,com更像是C++程序员自己为自己挖的墓坑。 

    当把基本功能支持完善,Java、C#等语言获得了更好的性能和功能支持,可以通过com调用很多C和C++的基本库,获得更好的开发能力的时候,纯UI,纯数据应用,其实已经被Java和C#牢牢占据了,C++没什么事了。 

    嗯,针对你最后一个问题,学习方向问题,我的建议是,基础的要学,但是,出于好找工作的目的呢,我建议你应该学点html相关,css相关。 

    如果不是立志,这辈子就要做一个C++程序员,(我总觉得纯正的C++程序员有点曲高而和寡,不好找工作),而是很务实的,希望毕业后在程序界迅速找到一份工作,我建议多学点Java和C#这类脚本语言,对于各种数据库的访问做到滚瓜烂熟,嗯,基本的数据结构和算法这不说了,要熟悉的。 

    这样起码帮助你在毕业后,能找到饭碗。 

    不过,这并不是说你这辈子不能做C++,当找到饭碗,工作稳定了,在有空的时候,是可以继续学习C和C++的,学好了,有合适的工作机会,跳一下也不是不行,说不定,收入更高。 

    嗯,还是那句话,程序员就是程序员,写得出程序就是程序员。程序员不要在自己脑门上加太多修饰,什么C++程序员,什么Java程序员,什么Windows程序员,什么Linux程序员,这些加了修饰的程序员,其实不容易存活的。 

    要能掌握程序设计的通理,什么语言,什么平台,掌握了基本的程序设计道理的时候,其实都一样。 

    大学生,打好基础,毕业先抓饭碗,总不好意思工作了还要父母养活。 

    在饭碗稳定的时候,随时注意学习,特别是注意利用自己的基础功底,跟踪主流语言技术,不断与时俱进,方能立于不败之地。 

    C++不是永恒的,C不是,Java也不是,C#更不是,没有永恒的语言,没有永恒的平台,只有永恒的程序设计技术。 

    这就是我的看法。 

    嗯,本文写到这里,还是要补充一点: 

    虽然上面本人写了很多关于C++前景堪忧的言论,不过呢,我本人确实还是在从事C/C++的开发工作。我想我并不是对C++有什么偏见,仅仅是想尽量客观一点,不带个人感情色彩,讨论一下C++程序员的就业前景问题。 

    其实C++我认为还是一门非常优秀的开发语言,它与C配合,可以实现很多底层的调用,这是Java等语言无法企及的。 

    比如我最近完成的一个高精度计时器(http://blog.csdn.net/tonyxiaohome/archive/2010/04/29/5541805.aspx),实现了差不多0.0031ms的计时精度,就我个人的能力而言,恐怕只能C/C++来完成,其他语言也许能做到,但至少我不会。 

    我也希望各位C++er能正确看待本文的论点,起码,我们现在还是一起的。呵呵。
  • 相关阅读:
    PAT (Advanced Level) Practice 1100 Mars Numbers (20分)
    PAT (Advanced Level) Practice 1107 Social Clusters (30分) (并查集)
    PAT (Advanced Level) Practice 1105 Spiral Matrix (25分)
    PAT (Advanced Level) Practice 1104 Sum of Number Segments (20分)
    PAT (Advanced Level) Practice 1111 Online Map (30分) (两次迪杰斯特拉混合)
    PAT (Advanced Level) Practice 1110 Complete Binary Tree (25分) (完全二叉树的判断+分享致命婴幼儿错误)
    PAT (Advanced Level) Practice 1109 Group Photo (25分)
    PAT (Advanced Level) Practice 1108 Finding Average (20分)
    P6225 [eJOI2019]异或橙子 树状数组 异或 位运算
    P4124 [CQOI2016]手机号码 数位DP
  • 原文地址:https://www.cnblogs.com/incyanggan/p/3176955.html
Copyright © 2011-2022 走看看