转载

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. 黑马程序员——JAVA基础之程序控制流结构之循环结构,循环嵌套

    ------- android培训.java培训.期待与您交流! ---------- 循环结构: 代表语句:while ,do while ,for while语句格式 : while(条件表达式) ...

  2. 论文笔记之: Recurrent Models of Visual Attention

    Recurrent Models of Visual Attention Google DeepMind 模拟人类看东西的方式,我们并非将目光放在整张图像上,尽管有时候会从总体上对目标进行把握,但是也 ...

  3. java jfinal + ajaxfileupload.js 上传

    功能上传 需求:同时上传多张图片 前端:jquery.ajaxfileupload.js 后端:jfinal upload.htm <html> <body> <div ...

  4. 套接字I/O模型-完成端口IOCP

    “完成端口”模型是迄今为止最为复杂的一种I/O模型.然而,假若一个应用程序同时需要管理为数众多的套接字,那么采用这种模型,往往可以达到最佳的系统性能!但不幸的是,该模型只适用于Windows NT和W ...

  5. 谓词的使用 -ios

    #import <Foundation/Foundation.h> @interface Person : NSObject<NSCopying> @property(nona ...

  6. OkHttpUtils

    对okhttp的封装类,okhttp见:https://github.com/square/okhttp.目前对应okhttp版本3.3.1. 用法: Android Studio compile ' ...

  7. android loginDemo +WebService用户登录验证

        android loginDemo +WebService用户登录验证 本文是基于android4.0下的loginActivity Demo和android下的Webservice实现的.l ...

  8. 利用KMeans聚类进行航空公司客户价值分析

    准确的客户分类的结果是企业优化营销资源的重要依据,本文利用了航空公司的部分数据,利用Kmeans聚类方法,对航空公司的客户进行了分类,来识别出不同的客户群体,从来发现有用的客户,从而对不同价值的客户类 ...

  9. python--web.py使用

    web.py 是一个轻量级Python web框架. 下面我将使用web.py框架,创建一个简单的html页面示例. 1.项目的目录结构如下所示: exweb2\  uniqueenv\  app.p ...

  10. 怎么用CorelDRAW插入、删除与重命名页面

    在绘图之前,页面的各种设置也是一项重要的工作,本文主要讲解如何在CorelDRAW中插入.删除.重命名页面等操作.在CorelDRAW的绘图工作中,常常需要在同一文档中添加多个空白页面,删除一些无用的 ...