`今天我们来普及一下,作为一个 C++程序员应该如何进阶。 C 语言如何进阶(这里指从入门到能开始做工程项目开发)? 下文谈及 Linux 时指的实际是 Linux/Unix 家族的一系列操作系统 建议一:学会源代码组织与管理是走入更深入开发的关键一步 Richard Stallman 曾经提醒初入门的程序员——在真实世界的大型项目中去学习编程,而不是仅限于写一些玩具级的小程序。这会让你更好的了解软件开发中的各种问题,从而学习到许多关键的知识。 现实世界的大型(不一定是体积大,也可能是是影响力大,复杂度高)软件往往要考虑的因素非常多。其中代码的组织与管理就是第一个问题。 很多学习一段时间 C 后感觉不错的朋友刚开始接触实际的项目时碰到的第一道难关就是不懂源代码管理——看不懂别人的项目是怎么组织的,也不懂得怎么组织自己的项目。 为什么要学会源代码组织与管理呢?因为你要用别人的项目,就必须先从宏观上对其代码组织结构建立一个基本的认识;一旦你具有这样的认识,你就能够做到许多事情——例如将某个大型项目中的局部进行替换,或者将某些模块单独抽出,应用到自己的项目中。又或者实现对大型项目的裁剪从而适应自己的需求等等。 而即使你不用别人的项目,只做自己的项目,也还要考虑项目长期开发过程中维护便捷与否的问题。缺乏项目组织与管理知识,不仅仅是读不懂别人的项目,还会导致自己的项目别人也难以读懂。而且以“土办法”管理的项目,难免会给人质量低下的第一印象——即使实际上质量不错。 因此,学会源代码组织与管理,是走入更深层次开发的第一步。跨过了这一步,你才真正的走入了真实世界的程序开发。 建议二:明确 C 的使用范围,更加深入地了解其局限性也是提升编程水平的关键 C 不是世界上最好的语言,因为根本不存在最好的语言。人们向你推销一个东西的时候,当然会说它好在哪里;但你真的使用这件东西事,最重要的事情却是意识到它不好在哪里。在正确的场景下使用正确的工具是生活教会我们的基本知识。你不会用扫把去炒饭,更不会用马桶去洗脸,正是因为你知道工具的「边界」在哪里。 C 很强大,但这种强大的是建立在它的低级性之上的。C 能够但却并不适合写所有类型的软件,甚至夸张一些而言,大多数类型的软件都不适合用它来编写。即使是谈及高性能之类的话题,C 也未必是最佳选择,比如说密集的数据计算,在同样代码量的情况下 Fortran 编写的程序比 C 还要更快。 C 目前主要是作为上层高级应用的低级支撑而存在的。做个比喻,很像是柱子。一根单独的柱子通常没什么用。但是组合在一起却是支撑建筑的关键。按照这样去理解,也就不难明白其长处和短处了。 现在大家做软件,大多是希望为具体的业务服务,这样才能有人买,有钱赚。但是做业务软件也不可能是建空中楼阁,还是要依托于一些具体的基础设施。而 C 扮演的正是业务软件的支撑者的角色,属于幕后工作人员。这也就不难解释为什么 C 程序通常干得都的是系统管理,资源管理,网络管理之类的「脏活累活」了。 这样一来,我们就应当意识到,在一个完整地应用系统中,并不是说只有 C 语言就可以,例如著名的 Emacs 编辑器虽然是基于 C 开发的,但是却在上层提供了 Lisp 语言作为扩展机制,既保证了较好的性能,又利用 Lisp 极度灵活的特点为后续扩展埋下了伏笔。 建议三:C 程序开发的首要平台是 Linux,而不是 Windows 不要误解,这么说绝不是说 Windows 不如 Linux,只是站在 C 程序开发的角度从实际工程应用出发来说的。我在 Windows 下编程有一些年头了,对于这个平台还是很熟悉的。微软很了不起,建立起了一整套非常完善的开发体系,但是在这套体系里,C 主要扮演的只是一个历史遗留角色。建立在 .NET 平台之上的 C# 才是微软大力发展的重点,并且已经取得了有目共睹的成就。因此,就算是我自己,如果被要求针对 Windows 平台开发(非跨平台应用),应当会更愿意选择 C# 。 但微软只是一家厂商,它并不能代表整个 IT 行业。因此如果只盯着微软,可能会错误的发出 C 江河日下的感慨。真实地情况是,C 在 Linux 下过去一直是,现在也依然是支柱性的语言,就在近几年,以它为基础源源不断的诞生出许多有影响力的软件,例如大红大紫的 nginx,风头正劲的 libuv 等等。(前者是基于 C 的高性能 Web Server,后者是基于 C 的跨平台高性能网络库,node.js 就是在后者基础上加上 Google v8 引擎实现的) 为什么 Linux 上能不断诞生有影响力的 C 程序呢?因为它是 C 程序员的「家」: 1、为 C 程序员而生——整个 Linux 系统就是以 C 为核心建立的,甚至连文件目录结构的组织都是为 C 程序开发优化过的,并且有便捷的命令行工具来获取丰富的开发资源(当然这也正是它对非程序员用户不友好的根源) 2、海量资料,hacker 最爱——拥有丰富的技术资料,对渴望深入了解各项技术内部原理的 hacker 提供了极大的便利——可执行文件是怎么构成的?调试器是如何实现的?文件系统的基本原理是什么?所有的这一切都能查到,而且还能获取到实际的工程级代码以供研究。 3、人才汇聚,充满活力——拥有顶尖的 技术社区,每天都在不断演进变化,参与到这样的社区中可以避免坐井观天闭门造车,能够大大地开拓自己的眼界 。 发烧友平台将会开展一门C++进阶的免费课程!欢迎同学们一起进来学习!
`
|