happypeter,2015年1月9日

昨天进燕山大学编程爱好者 QQ 群,看到有很多同学在学 C++ ,我当然是不喜欢了,因为我是做 Web 开发的嘛。所以怀着猥琐的心情,今天写篇傻傻的文章,来黑一下 C++ 。 Peter 你有资格聊这个吗?我是研一(2006)那年开始全职用 C 语言开发嵌入式系统,(我的一个 C 语言项目,click here )研二开始就接触 C++ 了,用 Qt(一套 C++ 编程框架) 来写。09年毕业后第一份工作就是 “Qt Developer” 在中关村一家公司,叫做红旗 Linux 。全职做 C++ 一共9个月,项目代码在这里。我不是 C++ 大牛,今天我也不从很深的技术角度来黑 C++ ,而是给你举出很多实际的例子,论证一下,从大学生职业发展的角度来说,C++ 是不适合的。

你真的要远离互联网?

传统 IT 公司,通信公司,IT 咨询公司,新兴互联网公司,这些公司类型是有差异的。前几天我在北京跟 ThoughtWorks (他们是高端咨询公司)的朋友聊天,他说我们这里的薪水比传统 IT 公司要高,但是跟互联网公司真是没法比。什么是互联网公司?国内的 BAT ,国外的 facebook,twitter,google 。Twitter 最早用 ruby ,facebook 用 php,google 主推 python。同时当然大家都会用大量的 Javascript 了。有谁是主要用 C++ 的吗? C++ 在传统 IT 公司用的比较多,主要应该是微软带的,但是看看微软惠普这些老恐龙们现在在干什么?一边在裁员,一边在做互联网转型。

C++ 极度不适合初学者学习

我自己入门面向对象编程是从 C++ 语言这里,现在看来是一个巨大的错误。Why? 因为 C++ 很复杂,C++ 是我自己了解的语言中细节最为庞杂的一种。如果我用 ruby 或是 python 入门编程,学起来会容易的多。为啥 C++ 那么复杂? 在早年需要考虑硬件资源利用率的时候,可以说它很强大。现在只能说弱智。说说我自己做 C++ 的经历,简单来讲两面受气。一方面你要去实现业务逻辑,要让客户满意,这个是应该的;但是同时还要哄好手里的硬件,不然的各种编译错误运行时错误搞死你。如果用 ruby/python 这样的高级语言,程序员只需要关心业务逻辑,讨好机器的工作在底层完成,所以给程序员的是更加接近于人话的语言接口。

中国很多学校是用 C/C++ 来教编程入门,这个是错误的,晦涩的语法直接把大家的兴趣干掉。 MIT 用 python ,UCB 用 ruby 编程,大家可以 google 一下,看看他们的视频课程,非常的简单,精力都用在实现自己的想法了。好像开车,你首先应该学习的时如何使用方向盘,而不是直接就研究如何修车。做事情应该由粗到细,而不是先不管方向往深处钻,如果你方向错了呢?那回头损失岂不很大。

几个我朋友的故事

我的 C++ 水平有限了,现在我来说说我的几个朋友的故事。

A 君,清华大学硕士,对 C++ 情有独钟,真正的技术大牛,我很敬重的人,写过一本 C++ 的书。2010 年我们都在一家公司工作,他当技术总监,公司是互联网性质,有 php 有 python 但是就是没有 C++ 。他在那家公司任职两年,离职后兴趣就转了 nodejs 。后来去国外工作,做 C++ ,很没意思,但是那次他回来我在北京请他吃烤串, 问他未来搞什么?他还是坚持说是 C++ 。前几天,他又来秦皇岛找我玩,跟我说:”靠,我这个出国出错了,把我的方向都搞乱了“。现在他是一个3D打印机公司的联合创始人和技术负责人,但是也很少用 C++ 。 他说:”迷茫啊.. 我还是要去国外读一个计算机的学位“,话说他比我还大一岁呢!

B 君,我曾经的同事,也曾经是国内排名第一的计算机系的老师,十几年 C 语言经验。2011 年我跟他在一起工作的时候,我就逗他:”别搞 C 了,跟我学 Ruby On Rails 吧,互联网意味着开放和自由“,当时他没反应,我猜他的想法是:” Web 的那些东西都太肤浅,C 语言才有严肃的学术性“。后来2013年他家搬到了硅谷,受那里氛围的影响,他先学 RubyOnRails 一年多,现在又搞 meteorjs(这两个都是 web 的) 。C 方面的研究和写书方面的事情,据我所知,他都慢慢放下了。顺便把 C 语言也给黑了吧,尽管 Linus Torvalds 到现在依然是我的偶像。

结语

总的意思就是让大家别学 C++/C 这些底层语言,而去拥抱互联网,一个既有钱又有梦想的领域。开发 iphone 应用原来用 OC 这个是很类似于 C++ 的一个东西,不过这是历史遗毒了,貌似苹果公司正在用 swift 来纠正这个错误。最后说一下,我叫 Peter ,github 账户是 https://github.com/happypeter 上面有我的邮箱,欢迎大家来信跟我交流。

http://qqpeter.github.io/cpp.html

为何放弃 C++ 的工作(开发慢,难度高。完全不适应互联网的快速迭代的思想)的更多相关文章

  1. ABP开发框架前后端开发系列---(14)基于Winform的ABP快速开发框架

    前面介绍了很多ABP系列的文章,一步一步的把我们日常开发中涉及到的Web API服务构建.登录日志和操作审计日志.字典管理模块.省份城市的信息维护.权限管理模块中的组织机构.用户.角色.权限.菜单等内 ...

  2. C++11(及现代C++风格)和快速迭代式开发

    过去的一年我在微软亚洲研究院做输入法,我们的产品叫“英库拼音输入法” (下载Beta版),如果你用过“英库词典”(现已更名为必应词典),应该知道“英库”这个名字(实际上我们的核心开发团队也有很大一部分 ...

  3. 取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!

    作为一名 Java 后端开发,日常工作中免不了要生成数据库表对应的持久化对象 PO,操作数据库的接口 DAO,以及 CRUD 的 XML,也就是 mapper. Mybatis Generator 是 ...

  4. 用Netty开发中间件:高并发性能优化

    用Netty开发中间件:高并发性能优化 最近在写一个后台中间件的原型,主要是做消息的分发和透传.因为要用Java实现,所以网络通信框架的第一选择当然就是Netty了,使用的是Netty 4版本.Net ...

  5. SNF开发平台WinForm之七-单据打印和使用说明-SNF快速开发平台3.3-Spring.Net.Framework

    8.1运行效果: 8.2开发实现: 1.  先要创建.grf报表模版,指定数据列.存储位置:Reports\Template文件夹下 2.  之后在程序当中查出数据,之后把数据和打印模版 传入方法进行 ...

  6. 用Netty开发中间件:高并发性能优化(转)

    用Netty开发中间件:高并发性能优化 最近在写一个后台中间件的原型,主要是做消息的分发和透传.因为要用Java实现,所以网络通信框架的第一选择当然就是Netty了,使用的是Netty 4版本.Net ...

  7. 简明易懂,将细节隐藏,面向新手树立web开发概念——学完Java基础语法,超快速上手springboot+mybatiJavaWeb开发

    简明易懂,将细节隐藏,面向新手树立web开发概念 --学完Java基础语法,超快速上手JavaWeb开发 Web本质(先忽视各种协议) Web应用可以理解为浏览器和服务器之间的交互. 我们可以看一个简 ...

  8. Linux从入门到放弃(为做一个开发+运维的全能性人才而奋斗)

    Linux?听说是一个操作系统,好用吗?” “我也不知道呀,和windows有什么区别?我能在Linux上玩LOL吗” “别提了,我用过Linux,就是黑乎乎一个屏幕,鼠标也不能用,不停地的敲键盘,手 ...

  9. Java的虚拟线程(协程)特性开启预览阶段,多线程开发的难度将大大降低

    高并发.多线程一直是Java编程中的难点,也是面试题中的要点.Java开发者也一直在尝试使用多线程来解决应用服务器的并发问题.但是多线程并不容易,为此一个新的技术出现了,这就是虚拟线程. 传统多线程的 ...

随机推荐

  1. 编译安装PHP-7.2.8

    一 下载并软件包 wget http://124.205.69.169/files/A218000006E9730A/cn2.php.net/distributions/php-7.2.8.tar.g ...

  2. 跨域请求发送不了cookie问题: AJAX跨域请求JS配置和服务器端配置

    1.ajax是同步方式 $.ajax({ type: "post", url:url, async:false, data:datatosend, dataType:"j ...

  3. CSS3常用属性及用法

    1.transition: 过渡属性,可以替代flash和javascript的效果 兼容性:Internet Explorer 9 以及更早的版本,不支持 transition 属性. Chrome ...

  4. 【前端图表】echarts实现散点图x轴时间轴

    话不多说,老规矩,先上图,实现echarts实现散点图,x轴数据为时间年月日. 实现代码如下: <!DOCTYPE html> <html> <head> < ...

  5. spring mvc笔记

    80214shuenjian224shuenjian@sina 北风网公开课课程大纲1.学习MVC框架的步骤2.Spring MVC运行机制3.演示Spring MVCAdd Maven suppor ...

  6. 洛谷——P2515 [HAOI2010]软件安装

    https://www.luogu.org/problem/show?pid=2515#sub 题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中 ...

  7. android问题及其解决-优化listView卡顿和怎样禁用ListView的fling

    问题解决-优化listView卡顿和怎样禁用ListView的fling 前戏非常长,转载请保留出处:http://blog.csdn.net/u012123160/article/details/4 ...

  8. amazeui学习笔记--css(常用组件4)--关闭按钮Close

    amazeui学习笔记--css(常用组件4)--关闭按钮Close 一.总结 1.关闭按钮基本用法:关闭按钮样式,可以结合其他不同组件使用.对 <a> 或者 <button> ...

  9. LeetCode Algorithm 05_Longest Palindromic Substring

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  10. vue项目实现导出数据到excel

    实现导出功能分两种,一种是客户端拿到数据做导出,第二种是服务器端处理好,返回一个数据流实现导出 第一种网上很容易找到,也很好用,本文要说的是第二种. fetchExport({ id: this.so ...