最新消息:红方科技年末特惠:.com域名55元、云虚机五折优惠,买3年送2年,更有智能建站套餐等你来取!

专访陈抒:C++至今不成替代

C yinhexi 2176浏览 0评论

177_121204134000_1.jpg 

陈抒以为能纯熟控制技术的办法是勤入手脑、抠细节
陈抒,具有十年以上编程经历的老程序员。目前就职于Esri研发中心。文科毕业,自考计算机本科。曾做过保险业务员,程序员。通晓Windows/Linux平台下的C++编程,熟习Java,擅长互联网开发和基于Linux的效劳器。
CSDN:你何时开端接触计算机?身为业务员,是什么缘由促使你走上编程的道路?
陈抒:自大学毕业,再接触电脑是从1999年开端。我天生就对科学有很强的猎奇心,当时我以为人的大局部时间是工作,选择本人喜欢的工作就是选择本人的生活方式。结果我很合适这个行业,也取得了本人喜欢的生活。
C++不成替代
CSDN:在众多言语中,你为何会首选C++,而不是其他言语,其中最主要的缘由是什么?
陈抒:在我行将完成一切自学考试开端准备毕业论文的时分。我认识到文凭不克不及代表才能,必需控制一门言语,才干找到工作。当时的选择似乎并不多,VB大行其道,VC也很提高。我的想法很简单,VC较难,会的人自然会少,竞争也少。并且我对本人有自信心,能学会该言语。
CSDN:你以为C++最大的难点和优势是什么?
陈抒:以我经历来看构成C++学习艰难有四点:

学问点普遍并且难度高。依照几年前Scot Mayer在Effective C++中对C++的定义来看,C++是一门多范型言语,包罗了C、面向对象编程和泛型编程。程序员需求正确了解很多根底概念,比方,堆和栈的区别、指针、指针的指针、虚函数的内部原理、继承引发的对象内存规划、多继承引发的不置可否、模板以及编译器推导、STL算法等。C++的内容如此普遍,因而每个学问点的学习和积聚都不是件容易的事情, 自然误用的状况常会发作。C++翻开了直接面向操作系统API编程的大门,因而运用C++完成工作,很多时分需求学习大量的平台相关的API,这些API有的十分复杂。比方被称为噩梦般的技术,Windows提供的COM/COM+库,其实就是需求理解一大堆根底学问才干支配好。再比方:面向接口编程、虚函数表、设计形式中的工厂形式、Windows DLL天堂的由来、Windows注册表、序列化、Windows平安、RPC、IDL言语、支持脚本言语的自动化技术(IDispatch)、对象援用计数器,线程平安和套间和ATL模板技术等。而在C++的演化过程中,由于缺乏商业公司的鼎力资助,缺乏良好设计的跨平C++类库,多数人只能运用规范C++库,但跨平台效果也不佳。直到近几年Boost为代表的现代C++库起到了很大的作用。同时,Java程序员早就享用着十分好的支持,SUN的丰厚的JDK,大量活泼的开源社区(比方Apache) 对Java的推进也是十分明显的。

  • C++程序员生长周期长,特别是中国很多靠做项目挣钱的生长型企业面对选用C++作为编程言语会有所顾忌。
优势同样很明显:
假定程序员能很好的运用C++,那么程序能够取得很高的性能,耗费较少的资源。在云计算时期,C++在很多关键业务上起到不成替代的作用,也为这个地球节能。举个例子,我有一次要在美国效劳器上部署一个JSF编写的网站,装置GlassFish失败是由于虚拟机中心线程和进程的总数被限制,只能换成C++编写的网站。这台效劳器还同时运转着C++编写的TCP效劳程序和NoSQL数据库。
CSDN:Linux之父Linus Torvald和Google首席工程师、Go言语之父Rob Pike曾暗示,C++比拟复杂,需求扎实的编程根底和期编程经历,没有丰厚经历的程序员很难运用自若。你对此有什么想法或观念?理由是什么?
陈抒:Torvalds对这个世界奉献很大,我每天都在运用Ubuntu和Git,十分感激他。但不晓得他为什么恨C++。他曾说暗示假如要用面向对象只需用C#和Java,为什么需求C++。正巧这三个言语我都很熟习。我以为仅仅是面向对象的话,C++、Java和C#都能胜任,但是只要C++可以同时到达C的性能。并且GCC团队早就用C++来完成C的编译器,而Linux内核听说运用的正是GCC编译代码,不晓得Torvalds做何感受。
假如Go言语之父说将Google的关键效劳,比方搜索引擎用非C++言语来替代,不晓得他会做何答复。每个言语都有其擅长之处,其实我自己目前很喜欢Lisp言语。假如未来不再需求C++,只能阐明我们的科技又有了宏大的进步。
扎实的根底=胜利的阶梯
CSDN:你学习过很多言语,并且能运用自若,对编程新手有什么好倡议吗?
陈抒:十多年的时间让我纯熟控制C++、Java、C#、JavaScript和Bash,但这并不是一件了不起的事情。侥幸的是我对C++的深化研讨与应用奠定了我扎实的根底,因而有利于学习其他高级言语。我对新手的倡议是:

多上CSDN写博客。好忘性不如烂笔头。特别是技术,十分细节。假如可以在博客中明晰的表达出来,那就阐明对技术问题控制的比拟好了。

  • 尊重言语的设计准绳。每个言语创造出来都有其设计目的,为理解决某个范畴的问题,有其明白的设计准绳。计算机科学包罗算法,数学,也包罗言语。我的一些伴侣,总以为编程就是算法,结果对言语不认真研讨。这样一是容易掉进言语的圈套,影响代码质量,二是会让本人无法融入真正专业的技术团队。
CSDN:为什么你开发JavaEmacs而不是IDE?
陈抒:2006年,同事教我运用Emacs。由于以前美国公司的请求,必需手动写Ant脚本编译整个Java Web项目,因而从IDE换成了Emacs + JDEE的开发形式。当初本人探索很辛劳,直到若干个月后才享用JDEE的开发形式。益处也十分明显:

没有IDE能够自在的掌控本人的代码。便于在效劳器上远程调试代码,由于一切都是基于命令行。开发机器请求配置低。

  • 由于要手工完成构建脚本,无论是Ant还是Maven,对Java工程的控制才能明显加强,为构建大的持续集成系统奠定了很好的根底。
CSDN:以你经历来看,美国程序员和中国程序员之间最大的区别是什么?
陈抒:我和美国程序员有过一些开发项目的协作,就我接触到的程序员来说,他们都很专业,用VIM开发C、Java、Ruby。我也是在他们的请求下,放弃了IDE开发的习气。后来,我接触到很多开源社区的国外程序员,用VIM和Emacs编程的十分多,这跟Unix传统有很大的关系。
普通来讲,美国程序员(来自世界各地在美国工作的程序员)其实并不比中国程序员聪明,但是美国文化很尊重工程师。现代计算机范畴还是美国在领跑,学校和企业都有比拟标准的编程习气和研发传统,因而一个年轻的工程师在美国公司的生长通常比我们快。同时,在英语上具备较大优势。
CSDN:你最尊崇或崇拜的技术人是谁?为什么?
陈抒:对我影响较大的专家或作者有C++作者Scott Mayer、Herb Sutter和Andrei Alexandrescu。COM范畴是Don Box。C++库是CppCMS作者Artyom。
CSDN:Esri研发中心是如何停止Java项目开发办理的?
陈抒:Esri北京研发中心的总经理Moxie先生来自美国,因而依照那边的规范请求软件研发过程。项目办理采用Scrum矫捷办法,强调工程师的自我办理。我主要引见一下我们的代码评审系统和持续集成系统。
首先我们运用Git停止代码办理,不同于VSS、CVS、Subversion,这是个散布式版本系统,功用极端强大,但是学习本钱高,原理和运用技巧复杂。在此根底上,采用了Gerrit停止用户权限办理和代码评审办理,程序员的代码只要经过评审才干进入Git仓库。Gerrit是Android社区的评审系统,有很严谨的工作流,合适于那些关注代码质量的团队。持续集成,也就是代码入库后,会有效劳器自动编译代码,运转单元测试,产生报表,打包并装置。这里面包含大量的技术细节。下面有个运用场景:
程序员A编写一个Java的库,经过代码评审后入库,一台Jenkins效劳器发现代码曾经更新,自动从Git中获取最新代码,停止编译。这个Java库采用Maven构建,因而编译后能够运转测试用例,停止代码静态扫描(运用Checkstyle、PMD、FindBugs),并将测试结果,代码扫描结果, 测试掩盖率等生成HTML报表发往报表效劳器。假如测试经过的状况下,编译后的jar包会被部署在Nexus效劳器上,供其他程序运用。
程序员B正在开发一个Web程序,也是经过Maven构建本人的工程,经过Maven的依赖办理很容易的就将Nexus效劳器上的A写的jar包引入到本人的工程运用。当B的程序经过评审进入代码仓库,Jenkins效劳器获取最新代码停止构建,同样停止代码扫描,运转单元测试,然后担任将war包远程部署到一台web效劳器上用于并发测试。
程序员C正在制造一个装置包,他编写脚本装置web效劳器和B的程序,以及其他一些产品需求的程序和文档。他一切的脚本和文件也会被提交到代码仓库中,Jenkins效劳器检查到更新后会获取并运转一些事前编写的脚本执行复制文件,创立紧缩包的工作。然后经过SSH公钥方式自动的登录到一台运转KVM的Linux机器上,将其中的一个虚拟机恢复到某个测试状态。再登录到这个虚拟机上,装置这个紧缩包。
当一切都自动化的完成后,经理和工程师们都能够经过阅读器拜候虚拟机,来检查产品的功用,经过报表系统来检查代码能否标准,测试能否经过。这个自动化过程其实是跨言语的。Java社区在这方面特别成熟,提供了很多有用的工具,因而我们先在Java开发中普遍运用。同时我们也曾经用于JavaScript言语,还打算集成C++项目。别的,Esri工程师散布在全球各地,数量众多。因而我们正在建立基于GitLab的公司内部的Social coding形式,让工程师们像在社交网站上一样看到其他工程师的工作,并分享本人的工作。
CSDN协助程序员理解国外的创新成就
CSDN:你在学习或工作中,是怎样接触到CSDN?CSDN关于你的工作或学习有什么影响,起到过什么协助?有没有故事能够分享?
陈抒:接触CSDN是一件很自然的事情,当年我日以继夜的研讨COM+和ATL,把本人总结的经历从Word文档直接复制到CSDN博客上颁发。随着时间的推移,这个习气就从2003年持续到如今。
CSDN:你对CSDN有什么倡议,以及你对CSDN的将来有什么等待?
陈抒:比来两年技术开展十分快,CSDN每年举行了很多活动,协助中国的程序员理解世界各地的创新成就,起到了十分好的社会作用。假如CSDN可以布置一些专题,去发掘为什么硅谷有那么强的发明力,应该会很有意义。北京各大IT公司就有很多从硅谷回来的技术高管,他们应该可以分享很多这方面的见解。
中国历来都不缺优秀的人,但是缺让很多聪明人都能发挥的制度。

转载请注明:红方博客 » 专访陈抒:C++至今不成替代