首页
学习
活动
专区
工具
TVP
发布

为什么我通知你看下C 语言进阶的这几个建议?

C 语言如何进阶(这里指从入门到能开始做工程项目开发)?

每次被问到这个问题,都有些尴尬,因为表面上是在问 C 语言,但是提问者真正想了解的往往是是以 C 为基础的职业发展方向,因此就更加不好得回答了。

总觉得这样的问题,如果是更有实力的人来回答会更好。但因为频繁被问到,如果总是打马虎眼,很容易被误会为傲慢。所以硬着头皮还是谈一谈自己粗浅的认识,希望不要说错得太离谱招致大家的批评。

下文谈及 Linux 时指的实际是 Linux/Unix 家族的一系列操作系统

建议一: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/C++游戏编程,有什么方法,这个问题,想必大家都已经心中有数了,打算深入了解这个行业的朋友,可以加下小编的C/C++游戏编程学习裙:666+295+498,邀请码(夏热)不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2018最新的C/C++资料和0基础入门教程,欢迎初学和进阶中的小伙伴。

每天晚上20:00我都会开直播给大家分享C/C++游戏编程学习知识和路线方法,群里会不定期更新最新的教程和学习方法(进群送2018C/C++游戏编程学习教程),大家都是学习C/C++的,或是转行,或是大学生,还有工作中想提升自己能力的前端党,如果你是正在学习C/C++的小伙伴可以加入学习。最后祝所有程序员都能够走上人生巅峰,让代码将梦想照进现实,非常适合新手学习,有不懂的问题可以随时问我,工作不忙的时候希望可以给大家解惑。

当然,Linux 并非完美无缺,也存在诸多不足。但就 C 程序开发而言,确实是首选平台。 做个比喻,如果说 C 是一颗有生命力的种子,那么 Linux 就是肥沃的土壤。咱们都说人的发展是内外因共同作用的结果。如果你拥有强烈地求知欲,那么 Linux 是非常棒的选择。

建议二:学会源代码组织与管理是走入更深入开发的关键一步

Richard Stallman 曾经提醒初入门的程序员——在真实世界的大型项目中去学习编程,而不是仅限于写一些玩具级的小程序。这会让你更好的了解软件开发中的各种问题,从而学习到许多关键的知识。

现实世界的大型(不一定是体积大,也可能是是影响力大,复杂度高)软件往往要考虑的因素非常多。其中代码的组织与管理就是第一个问题。

很多学习一段时间 C 后感觉不错的朋友刚开始接触实际的项目时碰到的第一道难关就是不懂源代码管理——看不懂别人的项目是怎么组织的,也不懂得怎么组织自己的项目

为什么要学会源代码组织与管理呢?因为你要用别人的项目,就必须先从宏观上对其代码组织结构建立一个基本的认识;一旦你具有这样的认识,你就能够做到许多事情——例如将某个大型项目中的局部进行替换,或者将某些模块单独抽出,应用到自己的项目中。又或者实现对大型项目的裁剪从而适应自己的需求等等。

而即使你不用别人的项目,只做自己的项目,也还要考虑项目长期开发过程中维护便捷与否的问题。缺乏项目组织与管理知识,不仅仅是读不懂别人的项目,还会导致自己的项目别人也难以读懂。而且以“土办法”管理的项目,难免会给人质量低下的第一印象——即使实际上质量不错。

因此,学会源代码组织与管理,是走入更深层次开发的第一步。跨过了这一步,你才真正的走入了真实世界的程序开发。

建议三:明确 C 的使用范围,更加深入地了解其局限性也是提升编程水平的关键

C 不是世界上最好的语言,因为根本不存在最好的语言。人们向你推销一个东西的时候,当然会说它好在哪里;但你真的使用这件东西事,最重要的事情却是意识到它不好在哪里。在正确的场景下使用正确的工具是生活教会我们的基本知识。你不会用扫把去炒饭,更不会用马桶去洗脸,正是因为你知道工具的「边界」在哪里。

C 很强大,但这种强大的是建立在它的低级性之上的。C 能够但却并不适合写所有类型的软件,甚至夸张一些而言,大多数类型的软件都不适合用它来编写。即使是谈及高性能之类的话题,C 也未必是最佳选择,比如说密集的数据计算,在同样代码量的情况下 Fortran 编写的程序比 C 还要更快。

C 目前主要是作为上层高级应用的低级支撑而存在的。做个比喻,很像是柱子。一根单独的柱子通常没什么用。但是组合在一起却是支撑建筑的关键。按照这样去理解,也就不难明白其长处和短处了。

现在大家做软件,大多是希望为具体的业务服务,这样才能有人买,有钱赚。但是做业务软件也不可能是建空中楼阁,还是要依托于一些具体的基础设施。而 C 扮演的正是业务软件的支撑者的角色,属于幕后工作人员。这也就不难解释为什么 C 程序通常干得都的是系统管理,资源管理,网络管理之类的「脏活累活」了。

这样一来,我们就应当意识到,在一个完整地应用系统中,并不是说只有 C 语言就可以,例如著名的 Emacs 编辑器虽然是基于 C 开发的,但是却在上层提供了 Lisp 语言作为扩展机制,既保证了较好的性能,又利用 Lisp 极度灵活的特点为后续扩展埋下了伏笔。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180428A1IFSM00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券