C++ 程序员成长经历:

转载 2012年03月30日 09:25:38
一个典型的 C++ 程序员成长经历:

1.  完整的学一遍 C++ 所有语言特性,典型书籍 "The C++ Programming Language" Part1, Part2, "C++ Primer"

    感觉 C++ 像大杂烩(多编程范型),各种精妙的语法特性 (friend, virtual/RTTI, const/mutable, exception, template),太多精妙的东西容易导致记忆琐碎化,学了又忘了,尤其是那些很少用的部分

    实践:编写一些带 class 和 virtual 字眼的所谓的 C++ 程序

2.  树立 C++ 的规则,明确在 C++ 世界“合法的并不一定是合理的”,典型书籍 Effective C++ 系列

    有些东西可用 C++ 写,但一般情况下并不合理,如 protected 成员数据, 覆盖 non-virtual 成员

    实践:发现 C++ 有强烈的语义约束,和次语言 (sub-language) 范畴,开始写一些规矩的代码

3.1 为了使上述的约束更加形式化,开始使用设计模式,典型书籍 "The C++ Programming Language" Part4, "Design Patterns"

    实践:教条的套模式,与人协作,编写真实规模的程序

    开始想:有时传统的设计模式对 C++ 很难看 (OO),有没有一种原生化的 C++ 模式实现思路(以便利用 C++ 的高效性),开始对静态类型系统和模板推导着迷 (GP)

3.2 为了开发快捷,开始使用标准库,典型书籍 "The C++ Programming Language" Part3, "The C++ Standard Library", "Effective STL"

    光用标准库是不能满足真正的 C++ 程序员的好奇心:auto_ptr, iostream 这些精妙的东西是怎样实现的?string 的开销究竟有多大?functional/alogrithm, iterator, container 这三者是怎样分离的?

    于是开始阅读某个标准库实现(典型的是 HP-SGI 的实现,但建议 Windows coder 读 MSVC 的),并尝试自己的等价实现,虽然可能只是标准库的一部分功能。这里一个很大的驱动力是重视 C++ 的高效性

    至此,已经知道如何在 raw/smart pointer, char*/string, static/dynamic bind, array/STL container 之间抉择

    实践:编写可稳定工作的程序,重视模块的复用性和扩展性,并理解将书本模式(学院派)实化为优质的 C++ 代码之间的鸿沟

4.  插曲:3.1 和 3.2 过程会交替重叠进行,并导致重学 template C++ 这个次语言,典型书籍 "C++ Templates: The Complete Guide"

5.1 玩转 template C++ 和 GP,发现它是超强的代码生成器,和模式塑型器,典型书籍 "Modern C++ Design"

    开始进入一种偏执狂式的 GP 和模式应用状态:
    1. 把所有的实体都对象化, wrapper hell
    2. 把所有的概念都抽象化, abstract class/factory
    3. 把所有的行为都策略化, 动态的: strategy, 静态的: traits, policy
    4. 把所有的实现都向标准库靠拢, Think in STL: every IO is iostream, every algorithm uses iterator, every container is type-safed and nonintrusive with specialization for optimization

    成也萧何败萧何:炫技和实用只在一念之间

    至此,几乎每个 C++ 程序员手上都有自己的一个 semi-STL 的私人库,那是多年的积累

    实践:编写工业强度的 C++ 程序,你的一部分代码(库)可能以开源或闭源的形式供他人使用

5.2 开始使用一个 Think in STL 的叫做 Boost 的东西,于是你对 Boost 做了和上面 STL 同样的事,典型书籍 "Beyond the C++ Standard Library", "Boost Docs", "Boost 程序库完全开发指南"

    也许还对 C++11 感兴趣,现在可用即 TR1,典型书籍 "The C++ Standard Library Extensions"

    实践:以较高的效率编写工业强度的 C++ 程序

5.1 和 5.2 过程会交替重叠进行

6.  过度的玩 template C++ 将会导致元编程,典型书籍 "C++ Template Metaprogramming"

    尽管它很炫耀,但生产环境中却很少用

    补充:既然认为 TMP 是 turing-complete 的,并且秉持 handy coding 和 compiling is running 的理念,实际上你是需要一个动态语言(把 C++ 编译器当解释器用,而且还不能调试)。再将范围缩小:从目前 C++ 社区工作来看结合最成熟的 interop 语言是 Python

    实践:地球很危险,回火星去吧


7.  一个高质量的 C++ 程序所在的商业项目失败了,导致你陷入沉思

    考察失败的可能原因:
    1. 商业决策,和 C++ 无关
    2. 其实是部分高质量 C++ 程序,高质量的模块由优秀程序员编写,其它人的很烂
       办法 1. 你很喜欢现在的团队:循循善诱那些新手,让他们经历你的至少 2-3 阶段,短时间领悟是不可能的,你很清楚
       办法 2. 离开去找和你水平相当的人,记住:C++ 是真正懂它之人的利器,而是一知半解者的绞绳,还不如完全不会用 C++
    3. 过度的个人炫技,导致代码复杂度过高
       不易理解、难维护、开发时间长
    4. 需要一个度
       1. 实现复用性和扩展性的难度不宜超过团队的平均水平
       2. 团队的平均水平不宜低于同类产品开发的市场竞争者的平均水平
    5. 需要一个目标和态度
       1. 以制作可交付使用,可工作的产品为终极目的
       2. 做最好产品,而不一定用最好的技术

8.  返璞归真

典型的C++程序员成长经历

1.  完整的学一遍 C++ 所有语言特性,典型书籍 "The C++ Programming Language" Part1, Part2, "C++ Primer"     感觉 C++...
  • duangyhn
  • duangyhn
  • 2017年06月25日 14:22
  • 244

一个毕业6年的程序员工作经历和成长感悟(终)

接上篇:一个毕业6年的程序员工作经历和成长感悟(上)               一个毕业6年的程序员工作经历和成长感悟(中)               一个毕业6年的程序员工作经历和成长感悟...
  • linguifa
  • linguifa
  • 2013年05月20日 00:34
  • 76967

一名C++程序员的成长之路

1.不要看到别人的回复第一句话就说:给个代码吧!你应该想想为什么。当你自己想出来再参考别人的提示,你就知道自己和别人思路的差异。   2.初学者请不要看太多太多的书那会误人子弟的,先找本系统...
  • wo17fang
  • wo17fang
  • 2015年06月06日 10:58
  • 1024

一个毕业6年的程序员工作经历和成长感悟(上)

把时钟拨回到2007年的夏天,大学毕业。那时非常迷茫,不知道自己能做什么,想做什么,对工作有一种期待和憧憬,只是觉得计算机、网络有关的职位都可以投递简历。 2007年5月12日(历史惊人的巧合,没...
  • linguifa
  • linguifa
  • 2013年05月13日 00:10
  • 16709

从高考到程序员,一生无悔的选择,码农的成长之路

高考毕业了,学弟学妹们哈皮了。但是我身为程序员还在为追梦而努力着。会想高考,仿佛就是一场梦,一场我无法都无法忘记的梦。高中三年的时光,对于我来说是痛苦的,我现在极其后悔高中三年的生活,很多的东西都被沉...
  • wenfeng627
  • wenfeng627
  • 2017年06月09日 17:14
  • 894

纪录一个程序员的成长历程

     新开空间,希望自己的空间可以成为一个大家交流的平台!本人姓郭,绰号阿炮,07年毕业于杭州电子科技大学,大学本科的专业是电气工程于自动化,本非计算机专业,但是本着一颗对IT行业的崇拜与热爱(可...
  • ghy039092
  • ghy039092
  • 2008年10月24日 15:29
  • 431

一个JAVA程序员成长之路分享

我搞JAVA也有些日子了, 因为我比较贪玩,上进心不那么强, 总是逼不得已为了高薪跳槽才去学习, 所以也没混成什么大牛, 但好在现在也已经成家立业, 小日子过的还算滋润, 起码顶得住一月近万元的吃喝拉...
  • u013659231
  • u013659231
  • 2017年05月26日 16:18
  • 4661

经历就是成长

我曾经一度的怀疑过,到底什么是成长?成长是不是一种必然?或许看了下面的文章,你就会对成长有了另一种理解。 说实话,再写这篇文章之前,已经想了很久,也构思了很久。但就在我提笔之时,却发现自己突然语屈...
  • happylee6688
  • happylee6688
  • 2014年02月23日 22:28
  • 1674

我的IT之路成长故事

我的IT之路成长故事      ----文章来源:黑马程序员        2013已经过去,2014已经来临,在2013年的12月20日我开始接触黑马论坛,整整10天了,我在论坛的积分过千,技术分...
  • u013390020
  • u013390020
  • 2014年01月05日 20:54
  • 585

成长,必是经历痛苦的过程

成长,必是经历痛苦的过程,只有经历过痛苦,经历过反思,经历过一次次的纠结与选择,如凤凰涅槃一样,才可谓成长,这个过程,无人替代。 记得刚办身份证那会儿,大概只有16周岁,对,那是高一,宿舍好友拿着我...
  • laner0515
  • laner0515
  • 2012年03月21日 19:38
  • 7686
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ 程序员成长经历:
举报原因:
原因补充:

(最多只允许输入30个字)