专访李伟:这么多编程语言,为什么我选择了C++?
面向对象在C++的开发圈子里成了一种主流,以至于在有些人看来,C++与很多编程语言类似,只是一种面向对象的方言而已。
但事实上,C++所支持的不仅是面向对象这一种编程风格。它还支持另一种编程风格:泛型,并由此衍生出一套编程方法,即编译期计算与元编程。
今天有幸邀请到了《C++模板元编程实战:一个深度学习框架的初步实现》的作者李伟,让我们听听他对C++编程语言的所思所想。
异步社区:可以介绍一下自己吗?目前正在做哪些事情?
李伟:我2011从学校毕业之后就一直从事软件开发相关的工作。曾经在百度自然语言处理部机器翻译组负责线上系统的维护,目前在微软亚洲工程院从事Being搜索的相关开发。
平时的爱好是读书,特别是编程相关的书籍。喜欢尝试新的语言与技术,但对C++编程情有独钟。
异步社区:是什么初衷开始创作《C++模板元编程实战 一个深度学习框架的初步实现》这本书,写书带给您的最大收获是什么?
李伟:感觉是心性方面的锻炼吧。这本书讨论了一项更多来说处于探索阶段的技术,可供参考的资料并不多。所以写作的过程也是一波三折的,经常要把很多内容推翻重写。中间数次都感觉写不完了,但最终坚持了下来,感觉整个写作的过程就是一个自我修炼的过程了。
异步社区:《C++模板元编程实战:一个深度学习框架的初步实现》您最想将这本书推荐给谁看?
李伟:(1)对C++有一定了解,想进一步提升C++编程能力的读者。
(2)从事深度学习框架开发相关工作的读者。对于这部分读者来说,可以参考一下深入应用模板元编程对框架本身产生的影响。
异步社区:创作《C++模板元编程实战:一个深度学习框架的初步实现》过程中遇到的最大困难是什么?
李伟:时间紧迫:这本书本身是对模板元编程技术的一个探索,写书的同时还涉及到对元编程技术的总结、引入新的技术修改原有框架的设计等等。这些都是利用业余时间完成的,工作量还是比较大的,总是感觉时间不够用。
异步社区:您的大学生涯是如何度过的呢?在清华大学您又接触了怎样不同的教育呢?
李伟:我的本科、硕士、博士学习分别是在北京工业大学、北京航空航天大学、清华大学3所学校渡过的。在清华大学获得了博士学位。虽然经历了三所大学,但其实在每所大学中是生活都是比较规律的:以看书为主(早期还尝试打游戏,但由于打得不好,经常被虐,所以也慢慢放弃了)。我的专业是电子工程,但业余更喜欢看计算机方面的书。在本科时完成了学校组织的计算机辅修,到硕士期间开始使用MFC编写界面程序,从此开始系统性地使用C++进行程序开发。
我感觉我所就读过的三所大学都给了我很好的学习环境,都非常好。因此,在清华读博士期间,谈不上接收到了什么特殊的教育。反到是因为读博士,让我体会到(1)很多事情只有坚持才能有结果;(2)干完一件事情要写总结。这些都对后续模板元编程的研究以及这本书的写作产生了影响。
异步社区:对于进入IT这一行业,学校专业力量是否重要?
李伟:我觉得学校专业力量有一定的作用,但并不起决定作用。重要的还是能否保持一种积极的心态,不断地学习与实践。
异步社区:清华大学毕业后您曾先后供职于百度和微软亚洲工程院,哪一段的工作经历带给您的收获最大?为什么?
李伟:没有所谓的最大吧,每一段经历都有其独特之处,都是一种阅历,一种成长。
异步社区:您目前供职于微软亚洲工程院,您的研究方向是什么呢?您平常每天都做些什么?或者说您典型的一天是如何度过的?
李伟:算不上研究方向哈,在微软每天主要的工作就是编写代码,跑一些实验,尝试提升系统的速度与效果啥的。每天基本上就是早上坐地铁到公司,开始干活,然后回家带孩子,晚上等孩子睡了后再看一会儿书。可能对于一些人来说,挺无聊的哈。
异步社区:经过这么多年的工作积累,您对计算机编程的感觉是否还如当年一样热衷?如何在繁重的工作压力下,保持初心呢?
李伟:还是很热衷的。我并不觉得由于工作压力大,就无法保持下去。这是一个兴趣的问题,找一个感兴趣的方向,坚持下来,其实并不是特别困难的一件事哈。
异步社区:针对刚毕业、初入职场的小白,有什么建议?
李伟:永远不要停止学习。无论每天的工作量多还是少,总要抽出一些时间来学习。无论是从书本上,还是从视频上,坚持学习,每天提升一点。只有这样才不会被社会的进步所淘汰。
异步社区:您是如何平衡工作,写书,家庭?
李伟:基本上来说,是家庭第一位,工作第二位,学习第三位,写书第四位哈。对我来说,工作赚钱是为了养家;而学习与写书是为了更好的工作,以及充实自身。因此大部分事情的优先级也是按照这个顺序来排列的。
异步社区:对您工作和生活帮助最大的三本书?一定要推荐的?
李伟:《高效能人士的七个习惯》,《细节决定成败》(好吧,我承认,书中有很多细节问题),《你自以为的极限,只是别人的起点》
异步社区:模板元编程从来都是C++程序设计中被多数人视为畏途的领域,类型设计本就是具备丰富经验的工程师才能操刀的活计,您是如何攻克的?
李伟:算不上攻克,因为感兴趣,所以一直在看而已。前前后后看了将近小10年,再笨也有点心得哈。
C++模板元编程还是一个发展的领域,我觉得相比面向对象来说,还远远算不上成熟,因此也不能说是攻克。就像我在书的后记中提到的,有很多方面都不完美。编程语言是不断发展的,而标准对模板元编程的支持还有待提升。但相关的研究与改进可能需要来自不同领域的共同努力(比如有些实验可能需要改进编译器才能进行)。
李伟 著
本书将以一个深度学习框架的实现为例,讨论如何在一个相对较大的项目中深入应用元编程,为系统性能优化提供了更多的可能。本书分8章,前两章讨论了一些元编程与编译期计算的基本技术,后面六章则讨论了元编程在深度学习框架中的实际应用,涉及到富类型与标签体系、表达式模板、复杂元函数的编写等多个主题,详尽地展示了如何将面向对象与元编程相结合以构造复杂系统。
邀请10名好友关注异步图书10天,即可免费获得异步新书。
长按二维码,可以关注我们哟
每天与你分享IT好文。
点击阅读原文,购买《C++模板元编程实战》
阅读原文
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
前后端分离与不分离的本质区别!
前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高。 请求的数据交互如下图: 这种应用模式比较适合纯网页应用,但是当后端对接App时,App可能并不需要后端返回一个HTML网页,而仅仅是数据本身,所以后端原本返回网页的接口不适用于前端App应用,为了对接App后端还需再开发一套接口。 前后端分离 在前后端分离的应用模式中,后端仅返回前端所需的数据,不再渲染HTML页面,不再控制前端的效果。至于前端用户看到什么效果,从后端请求的数据如何加载到前端中,都由前端自己决定,网页有网页的处理方式,App有App的处理方式,但无论哪种前端,所需的数据基本相同,后端仅需开发一套逻辑对外提供数据即可。 对应的数据交互如下图 : 在前后端分离的应用模式中 ,前端与后端的耦合度相对较低。在前后端分离的应用模式中,我们通常将后端开发的每个视图都称为一个接口,或者API,前端通过访问接口来对数据进行增删改查。 原文发布时间为:2018-11-21 本文来自云栖社区合作伙伴“Java技术栈”,了解相关信息可以关...
- 下一篇
Debug JDK源码没变量值怎么办?
对于程序员而言,阅读源码是一个非常重要的能力,相信Java程序员最常看的就是JDK的源码了,但有时候我们想具体看看源码在运行时某个变量的值,就会发现Debug时看不到变量的值,这是因为官方在编译 rt.jar 中的类的时候去除了调试信息,那么该怎么办呢? 有两种办法:一种是去网上找编译好有调试信息的 rt.jar,另一种是自己去编译JDK源码,下面就是自己编译的详细过程,希望大家第一次不要怕麻烦,跟着做,弄好之后以后调试就非常方便了 问题效果图: 解决后的效果: 具体步骤: 1.制作可调试的 rt.jar 包 1.1 .在D盘新建jdk7_src及jdk7_rt-debug两个文件夹 1.2.复制JDK源码 将环境变量中配置的java_home地址或者将用的外部JDK安装目录下的src.zip 复制到D:/jdk7_src,解压.效果如下图 1.3.选择要编译的源码 原文中说,留下Java,javax,org三个文件夹就足够了,其他都可以删除。 我只是把swing的内容删除了,其他都留下了。大伙可以随意。 swing包目录位置:com\sun\java\swing,javax\swin...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果