别去研究C++
YH,今天早晨起来。回想昨天,虽然吐槽了 C++ 的各种问题,但给别人打工,还是要靠 C++ 干活吃饭。我对待 C++ 的态度和云风不同,虽然他所说的 C++ 技术的事情我都懂都理解,而我感受到的不是技术问题,而是人生的问题以及人的精力问题,所以我感到还是需要写一篇文章,和你探讨下程序猿的编程人生。
请先容我在这里倚老卖老下。我用 C++ 也用了好久,2000 年开始真正开始学C++。之前是为了找工作需要,学了几年的 Delphi 以及 Foxpro。2001 年下半年毕业开始,感受到 C++ 的强大,我开始买大量的 C++ 的书去学习。
朋友周爱民对我的评价就是:你是个学院派的。你最适合去大学里搞研究。
呵呵,可能我是从我父亲那里遗传并继承了他的研究能力。我很喜欢找到一个东西,并深究研究到我认为透了,我才去用。这个在其他地方也同样体现。
在学 C++ 之前,我也学了2~3 年的 Delphi,而且毕业设计都是 Delphi 做的。我去面试的是 Delphi 的工作,但业余时间,看 C++ 的书,写一些 C++ 的代码练手,后面时机成熟了,就很轻松的上手写代码。
但我那堪比猫的好奇心。让我总是在不停的被 C++ 的“特性”所干扰。因为 C++ 提供的特色太多了。模板,模板库。虚拟、虚拟、再虚拟的东西。各种抽象、抽象、再抽象的方式。这里就不逐一叙述各种 C++ 概念了。
而这些有趣的东西。会让我的精力一次又一次的转到研究这些 C++ 的有趣的设计上。但多年以后回过头来看,这些东西尽管设计的确实很不错,但占你人生的代码量而言,大概有1% 到 10% 左右不等,具体看人的工作性质。而这种代码,也会被其他方式替换,只不过 C++ 提供的是比较易懂的机制。而不管编写底层库,还是编写顶层实现代码。最多的还是业务代码,而这种业务代码,就是基础逻辑代码。任何计算机语言都提供的那类基础功能。
在十来年前,流行过一套小书,其中有一本书叫《编程之道》。里面充满了道家的思想,很多地方甚至就是把老子、庄子的话稍微改一下就成了一种很神秘的话, 呈现在你面前。多年来,我一直时不时的看看这本书,感悟下书里面所说的道理。
一个初学者被要求编写一个财务软件。
他疯狂地工作了很多天,但他的主管检视他的程序时发现,它写了一个编辑嚣,一个图形程序集,和人工智能的界面,但是看不到任何跟财务有关的东西。
主管要求解释时,程序员被激怒了:“你太没耐心了,我会在最后写财务的部分。”
起初看这个小故事,并没有感受到作者到底是在写什么。工作以后才明白,这个程序猿一开始就没有考虑核心的财务功能代码,而是写了周边的代码。要说周边代码没用吗?其实也是有用的,但那不是核心功能。当业务真正投放使用之后,这些代码的使用过程中,会被反复推敲修改的,如果最初就没有思路去思考,那结果必定是一团糟。而程序猿就这么轻易被那些“花哨”,看上去很好很强大的东西给吸引了,而忽略了最核心的需求。
而 C++ 正是让你看到,这个不错,可以用哦。那个也不错,试试看?结果呢?短期来说,有可能真正的工作可能耽误了。长期来说,积累的C++“使用经验”,对编程水平的提高帮助几乎微乎其微。
现在信息量如此之巨大,书籍如此多,网上的新兴概念,新的资料还在不停的生产。你或许一辈子可能都看不完的东西。
《C++标准程序库》和《代码大全》是差不多一样厚的。两本书摆在你面前你是选择哪本呢?《深入理解计算机系统》和《C++ Primer》也是差不多一样厚的,你是选择哪一本呢?
当你可能懂得如何谨慎的对待 C++ 标准库的时候,boost 库又在你的面前了,loki 之类的库都逐一出现在你面前。都是海量的信息轰炸着你的头脑。还有巨额的各类引擎代码。
C++可以用,用了这么长时间。我深知它仅仅是一门语言而已。但要阻止被各种所谓的“设计”给迷惑。使用他提供的一些基本功能。
去研究 C++ 的周边的时间。你可以研究下计算机结构基础,基本的虚拟机原理,完善你的编辑器,研究下工具链,研究下各种有趣的算法,看下 Lua 或者 Python 的源码,值得研究的东西太多了。而这辈子精力太有限了。
因为这些不仅仅是属于 C++ 的东西,而是属于“编程”这个大范畴的东西,而很多在现代计算机出现之前就存在,这种不变的东西,才会提高你的编程能力。把精力视角扩大,多专注与编程,多专注于你所在行业的业务需求。这才能提高你的工作能力。甚至可以和两三好友去玩也会提高你的社交能力。
可以用C++,但不要去研究C++
最后,我再用一段《编程之道》的小故事做个总结。
有一天编程大师碰见了一个正玩掌上游戏机的编程新手,他说:“给我看一下?”
新手把游戏机递给大师,“我看到上面说明了三种难度的玩法:容易,中等,高难”,大师说,“但是每个这样的游戏机都有另外一种玩法,此时游戏机即不是想着怎么赢你,也不是怎么被你赢。”
“那么请问大师”,初学者说,“这种玩法到底是怎样玩的呢?”
大师把游戏机摔到地下然后用脚踩碎它,突然初学者明白了。
别去研究C++的更多相关文章
- 自由是有代价的:聊聊这几年尝试的道路 要想生活好,别看哲学书和思想书。简单看看可以,看多了问题就大了。还是要去研究研究些具体的问题。别jb坐在屋子里,嘴里念着海子的诗,脑袋里想康德想的事情,兜里屁都没有,幻想自己是大国总理,去想影帝是怎么炼成的。
自由是有代价的:聊聊这几年尝试的道路 现在不愿意写过多的技术文章了,一点是现在做的技术比较偏,写出来看的人也不多,二来是家庭事务比较繁多,没以前那么有时间写了.最近,园子里多了一些写经历的文章,我也将 ...
- 按照自己的思路去研究Spring AOP源码【1】
目录 一个例子 Spring AOP 原理 从@EnableAspectJAutoProxy注解入手 什么时候会创建代理对象? 方法执行时怎么实现拦截的? 总结 问题 参考 一个例子 // 定义一个切 ...
- 第二天了,由于博主太分心了,看看就跑去研究了一下ssh和ufw以及nmap,现在急需记录一下啦,哈哈!
昨天看到了视频的ssh远程连接,因为我点电脑上装的是一个ubuntu的虚拟机,我根据视频看了一下,自己又试用了一下,我发现自己的ubuntu是能够远程到自己的Mac电脑上,一开始主要是因为自己不能连接 ...
- 都 2021 年了,竟然有人搞大数据时忽略 JSON 而去研究用 C# 把 XML 转换为 XML 的技术
在大数据项目开发过程中,ETL(Extract-Transform-Load)是必不可少.即便目前 JSON 非常流行,开发人员也有必定会有对远古系统的挑战,而 XML 格式的数据源作为经典存在浑身上 ...
- 对html与body的一些研究与理解
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=259 一.写在前面的最 ...
- 一篇通俗易懂的CSS层叠顺序与层叠上下文研究
网上有很多这方面的教程,但不是苦涩难懂就是从哪copy过来的,反正很长一段时间我是没看懂,时间长了也没打算去研究了,主要原因是,基本上很少会遇到那些问题(所以说啊,要是没有研究精神的才懒得管它).但自 ...
- 写js写傻了,明天研究一下异步
在html某元素上绑定一个click事件,该事件是一个执行事件很长的函数,比如执行几十亿或几百亿次加法,那么在这个函数执行的过程中,其他元素绑定的事件,是如何触发的呢,异步触发还是同步,触发时是怎么执 ...
- paper 100:何恺明经典去雾算法
一:由简至美的最佳论文(作者:何恺明 视觉计算组) [视觉机器人:个人感觉学习他的经典算法固然很重要,但是他的解决问题的思路也是非常值得我们学习的] 那是2009年4月24日的早上,我收到了一封不同 ...
- 深入研究 蒋金楠(Artech)老师的 MiniMvc(迷你 MVC),看看 MVC 内部到底是如何运行的
前言 跟我一起顺藤摸瓜剖析 Artech 老师的 MiniMVC 是如何运行的,了解它,我们就大体了解 ASP.NET MVC 是如何运行的了.既然是“顺藤摸瓜”,那我们就按照 ASP.NET 的执行 ...
随机推荐
- OSPF
Ospf OSPF(开放最短路径优先协议)是一种无类内部网关协议(IGP):是一种链路状态路由选择协议: 入门: 可以把整个网络(一个自治系统AS)看成一个王国,这个王国可以分成几个 区(area), ...
- freeswitch 接通后再录音
需求 录音时不要将前置媒体录制进去. 用法 <action application="set" data="media_bug_answer_req=true&qu ...
- Linux 用户态和内核态
1.特权级特权级用来管理和控制程序执行.如Intel x86架构的CPU,有0~3四个特权级,0级最高,3级最低.硬件在执行每条指令时都会检查指令具有的特权级.硬件提供了特权级使用机制,对操作系统来说 ...
- 遇到EDIUS视频条全变灰色编辑不了如何处理
上次使用EDIUS编辑完的视频,这次再打开时,原素材都还能用,时间线上的视音频却都呈灰色不可编辑状态,要怎么办呢?别慌,小编来告诉你解决视频条全变灰色EDIUS不可编辑的办法. 下图就是视频全变灰色E ...
- 防止浏览器拦截的window.open新窗口方案
背景 当前的浏览器为了保证用户体验,在很多场合下禁止了window.open打开新窗口,下面就给出一些方案,最大程度上的实现新窗口打开一个链接. 方案 //打开新链接方法实现 function win ...
- 项目发布: error CS0103: 当前上下文中不存在名称“*****”
项目发布,发布不出来,而且编译,发布过程中vs也不报错,也不提示错误. 在错误窗口忽闪一个错误提示之后,输出窗口有西边的提示: error CS0103: 当前上下文中不存在名称"Cur ...
- unity 合并skinnedMeshRenderer中遇到的一个大坑
将多个skinnedMeshRenderer合并成一个skinnedMeshRenderer,主要涉及的mesh合并.骨骼列表合并.重定向顶点骨骼索引.其中重定向顶点骨骼索引只是通过加偏值即可完成,所 ...
- Mysql 索引 转载
转自 :http://blog.csdn.net/wud_jiyanhui/article/details/7403375 什么是索引 索引时一种特殊的文件,他们包涵着对数据表里所有记录的引用指针. ...
- js之浏览器对象模型(BOM)
一.BOM的层次结构: window(可以访问BOM中的所有元素,是最顶层的元素)下一层包括如下: →document (document的属性:forms.cookie.links/anchors. ...
- (转)textarea去掉右侧滚动条,去掉右下角拖拽
本文转载自:http://blog.csdn.net/cctv_end/article/details/7946188 代码: <TEXTAREA style= "overflo ...