转载

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++的更多相关文章

  1. 自由是有代价的:聊聊这几年尝试的道路 要想生活好,别看哲学书和思想书。简单看看可以,看多了问题就大了。还是要去研究研究些具体的问题。别jb坐在屋子里,嘴里念着海子的诗,脑袋里想康德想的事情,兜里屁都没有,幻想自己是大国总理,去想影帝是怎么炼成的。

    自由是有代价的:聊聊这几年尝试的道路 现在不愿意写过多的技术文章了,一点是现在做的技术比较偏,写出来看的人也不多,二来是家庭事务比较繁多,没以前那么有时间写了.最近,园子里多了一些写经历的文章,我也将 ...

  2. 按照自己的思路去研究Spring AOP源码【1】

    目录 一个例子 Spring AOP 原理 从@EnableAspectJAutoProxy注解入手 什么时候会创建代理对象? 方法执行时怎么实现拦截的? 总结 问题 参考 一个例子 // 定义一个切 ...

  3. 第二天了,由于博主太分心了,看看就跑去研究了一下ssh和ufw以及nmap,现在急需记录一下啦,哈哈!

    昨天看到了视频的ssh远程连接,因为我点电脑上装的是一个ubuntu的虚拟机,我根据视频看了一下,自己又试用了一下,我发现自己的ubuntu是能够远程到自己的Mac电脑上,一开始主要是因为自己不能连接 ...

  4. 都 2021 年了,竟然有人搞大数据时忽略 JSON 而去研究用 C# 把 XML 转换为 XML 的技术

    在大数据项目开发过程中,ETL(Extract-Transform-Load)是必不可少.即便目前 JSON 非常流行,开发人员也有必定会有对远古系统的挑战,而 XML 格式的数据源作为经典存在浑身上 ...

  5. 对html与body的一些研究与理解

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=259 一.写在前面的最 ...

  6. 一篇通俗易懂的CSS层叠顺序与层叠上下文研究

    网上有很多这方面的教程,但不是苦涩难懂就是从哪copy过来的,反正很长一段时间我是没看懂,时间长了也没打算去研究了,主要原因是,基本上很少会遇到那些问题(所以说啊,要是没有研究精神的才懒得管它).但自 ...

  7. 写js写傻了,明天研究一下异步

    在html某元素上绑定一个click事件,该事件是一个执行事件很长的函数,比如执行几十亿或几百亿次加法,那么在这个函数执行的过程中,其他元素绑定的事件,是如何触发的呢,异步触发还是同步,触发时是怎么执 ...

  8. paper 100:何恺明经典去雾算法

    一:由简至美的最佳论文(作者:何恺明  视觉计算组) [视觉机器人:个人感觉学习他的经典算法固然很重要,但是他的解决问题的思路也是非常值得我们学习的] 那是2009年4月24日的早上,我收到了一封不同 ...

  9. 深入研究 蒋金楠(Artech)老师的 MiniMvc(迷你 MVC),看看 MVC 内部到底是如何运行的

    前言 跟我一起顺藤摸瓜剖析 Artech 老师的 MiniMVC 是如何运行的,了解它,我们就大体了解 ASP.NET MVC 是如何运行的了.既然是“顺藤摸瓜”,那我们就按照 ASP.NET 的执行 ...

随机推荐

  1. U3D Transform组件

    Variables position Vector3类型,物体位置,相对于世界坐标系的值.就是矩阵的最后一行的值. localPosition Vector3类型,物体相对于父元素的位置. euler ...

  2. Anroid 异常:is not valid; is your activity running?

    本文转载于:http://blog.csdn.net/biangren/article/details/7514722 是由于有activity时依附于另一个activity的,当被依附的activi ...

  3. 使用 margin 让div块内容居中

    问:有一个div块,其width为300px,如何设置margin让div块居中显示? 答:margin设置为 margin:0 auto,即div块的上下外边距设置为 0 , 左右外边距设置为 自动 ...

  4. distinct和group by

    distinct:同时查询两个字段,另外一个字段(不是distinct的那个字段,下例是tagid)需要多个值,如下                 group by:同时查询两个字段,另外一个字段( ...

  5. asp.net如何确定是哪些控件验证失败

    Page.Validate("FeedBack"); if (!Page.IsValid) { foreach (IValidator validator in Validator ...

  6. linux服务之ntp与chrony

    centos7.2变成了chrony RHEL从7.0开始改用chrony同步时间,原ntp同步方式也可以使用,但要安装ntp服务. [root@1st-kvm plymouth]# rpm -qa| ...

  7. linux安全

    http://drops.wooyun.org/ 最专业的安全知识分享平台 http://www.freebuf.com/ 关注黑客与极客 http://book.beifabook.com/prod ...

  8. unity, 搜索组件

    Hierarchy的搜索栏中既可以搜节点名,也可以搜组件名.

  9. MvcPager2.0 中分页初始化失败的问题

    页面初始化时只有一页数据,或没数据时,出现分页控件初始化失败以及后续Ajax分页功能失效的问题, <div class="pagin"> <div class=& ...

  10. 淘宝天猫关键词SEO优化

    淘宝天猫的网站完全像是一个成熟的搜索引擎,只是从google.bing.baidu改成了淘宝天猫而已,普通搜索引擎有品专,有皇冠,有PC,有无线:淘宝天猫里面有钻展,有直通车,也有PC,无线.搜索引擎 ...