`
zuowj
  • 浏览: 10141 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

成为跨平台的C++程序员

阅读更多

最近看到javaeye 上的坛友,想达到
“有勇气说自己会c++,标准c++,而且能跨平台” 这样的目标。身边有不少想学习C++的朋友,就这个问题,说说我的理解

跨平台的C++程序员也曾是我的目标,不过多年来,我只有在windows和 unix 下的开发经验,所我的经验来自于这两大平台。

带具体任务进行学习

如果没有具体的任务做为目标,你的学习将没有效率可言,并且知识都本都停留在书面上,过段时间,你又基本上都忘记。


因此在学习C++过程要不断给自
己设定任务。 并且将这个任务不断非富,不断重构


以下我举例来说明:

编写双人对弈的五子棋 ver 1.0

在unix下使用GCC  + MAKE +  VIM (跨平台的编辑器)
来完成这个任务,熟悉C++的基本语法,学习使有类或者结构来表达领域的概念。在这个期间尽可能的少用库(除非不得已),界面显示是次要问题,在控制台上
显示即可。

达到标准: 五子棋可以双人对弈,源代码有信心给人看, 基本符合代码大全的标准 : )

目的:  GNU下的开发环境,  C++ 程序对 类、指针、基本算法、内存管理问题 的学习。

五子棋 ver 2.0 (重构 ver 1.0)

自己学习模版、STL 以及 Boost  然后来重构之前的 ver 1.0 版本。 尽可能的使用STL, 使用boost  的
smarty 智能支持来管理内存。

达到标准: 程序代码行数要减少至原来的 50% 以下。

目的: 对泛型抽象及模板技术的初步学习以及熟悉 STL 库和 BOOST 库

五子棋 ver 3.0  (增加对弈结果保存以及复盘的功能)

加上以上两个功能,需要做不少的工作。要考虑各种外部资源不满足的情况。

达到标准: 功能上满足要求, 并且能实现破坏性测试( 存盘文件不存大, 棋局文件内容错误)

目的:     数据保存、对象序列化、  异常、异常安全、外部资源管理的学习

五子棋 ver 4.0  (支持网络对战)

学习网络编译,基于TCP来实现

五子棋 ver 5.0  (支持与电脑对战)

进行算法的学习,提供人工智能能力,并有难度级别

五子棋 ver 6.0  (提供可操作的界面)

可操作的界面,可以是windows 下的, 也可以是linux  还可以考虑与python 结合 学习混合编程。 另外这个只影响界面层的代码。

达到以上6个版本,你已经是一个跨平台的标准C++的程序员,以后完全可以自己来解决C++领域的大部份问题。 另外你的这个作品,对于找工作来说,已是利器,无往而不胜

在学习过程注意几点:

  • 除了版本1.0 和 6.0 外,程序要尽可能的使用标准库,跨平台的库
  • 放弃使用便捷的IDE,  在unix 下   vim + gcc + gdb + make   才是C++开发的主流.


有选择的阅读
C++ 书藉非常之多, 其它如设计领域、网络编程、多线程多进程编程、界面开发 等资料十在是太多。你无法全部读完,还是有选择的来阅读。
书一定要区分这书是手册类型的,还是系统理论型

的。
前者在需要时查就可以,后者则需要精读,有了实战后再读。

推荐几本需要精读的书

  • 《深入理解计算机系统》
  • 《C++ 程序设计语言》
  • 《代码大全》
  • 《C++ 语言的设计和演化》
  • 《C++ Templates 中文版》
  • 《unix环境高级编程》


 

豆瓣上我推荐的书单  http://book.douban.com/doulist/518190/

其它的书找点电子版来读吧,或以后再读。


blog  http://zuowj.com

 

分享到:
评论
23 楼 zuowj 2010-03-27  
visualcatsharp 写道
Elminster 写道
ray_linn 写道
zuowj 写道
ray_linn 写道
•放弃使用便捷的IDE,  在unix 下   vim + gcc + gdb + make   才是C++开发的主流.

--- 自虐型


有很多unix 环境,如我工作用过的 freebsd 在线服务器,都不充许装图型环境,那你用什么IDE?
另外,学习好了vim 到处使用,有何不好? 一种好的习惯可以受益一辈子




我甚至不介意你用Edlin去编辑C,但别把这种倒退当做best practive。

服务器不能用图形界面,和开发机有什么关系。任何IDE都是提高效率的方式,别把这种扯淡的vim挂嘴边,你用vim调一个联机帮助文档给我看看。


在你的开发机上装上适合使用的IDE才是王道。


我个人的感觉是这个世界上没啥好使的 C++ IDE,和 Java/C# 这些比起来,所有 IDE 的 C++ 支持都是渣。当然 Visual C++ 加上 visual assistant 会好那么一点 ———— 也就是在写 windows 程序的时候查 API 方便那么一点而已。

你在这里装什么13呢?


说这种话有意思么?  尊重别人也就是尊重自己。
你不同意别人的意见,说出你的观点、列出你的事实。
22 楼 visualcatsharp 2010-03-27  
mikeandmore 写道
ray_linn 写道
你用vim调一个联机帮助文档给我看看。




什么东西你man不到?

请继续玩标准库,沉浸在自娱自乐中吧。
21 楼 visualcatsharp 2010-03-27  
Elminster 写道
ray_linn 写道
zuowj 写道
ray_linn 写道
•放弃使用便捷的IDE,  在unix 下   vim + gcc + gdb + make   才是C++开发的主流.

--- 自虐型


有很多unix 环境,如我工作用过的 freebsd 在线服务器,都不充许装图型环境,那你用什么IDE?
另外,学习好了vim 到处使用,有何不好? 一种好的习惯可以受益一辈子




我甚至不介意你用Edlin去编辑C,但别把这种倒退当做best practive。

服务器不能用图形界面,和开发机有什么关系。任何IDE都是提高效率的方式,别把这种扯淡的vim挂嘴边,你用vim调一个联机帮助文档给我看看。


在你的开发机上装上适合使用的IDE才是王道。


我个人的感觉是这个世界上没啥好使的 C++ IDE,和 Java/C# 这些比起来,所有 IDE 的 C++ 支持都是渣。当然 Visual C++ 加上 visual assistant 会好那么一点 ———— 也就是在写 windows 程序的时候查 API 方便那么一点而已。

你在这里装什么13呢?
20 楼 ray_linn 2010-03-27  
<div class="quote_title">zuowj 写道</div>
<div class="quote_div">
<div class="quote_title">ray_linn 写道</div>
<div class="quote_div">
<div class="quote_title">zuowj 写道</div>
<div class="quote_div">
<div class="quote_title">ray_linn 写道</div>
<div class="quote_div">•放弃使用便捷的IDE,  在unix 下   vim + gcc + gdb + make   才是C++开发的主流.<br><br>--- 自虐型</div>
<br><br>有很多unix 环境,如我工作用过的 freebsd 在线服务器,都不充许装图型环境,那你用什么IDE? <br>另外,学习好了vim 到处使用,有何不好? 一种好的习惯可以受益一辈子<img src="/images/smiles/icon_smile.gif" alt=""><br><br>
</div>
<br><br><br>我甚至不介意你用Edlin去编辑C,但别把这种倒退当做best practive。<br><br>服务器不能用图形界面,和开发机有什么关系。任何IDE都是提高效率的方式,别把这种扯淡的vim挂嘴边,你用vim调一个联机帮助文档给我看看。<br><br><br>在你的开发机上装上适合使用的IDE才是王道。<br><br>
</div>
<p> </p>
<p>你的假设是,  我们都可以在本地自己独立拥有一个跟在线服务一样的环境。 但这个假设是不一定成立的。 <br><br>其一、 开发环境可能依赖外部资源或服务是受限的。 比如,一个查询引擎,将要装载上千万条数据。这个开发机就是直接放在IDC的。 <br><br>其二、 文化的影响, 我在公司经历过或所知的unix下 C/C++项目,没有一个用到图型环境的IDE的。 <br><br><br>“扯淡的vim挂嘴边” <br><br><br>我认为你,没有真正了解过vim 或没有很好的撑握它 ,  不然,你会喜欢上vim的。  另外不也要说 vim 没有效率。 vim的使命就是提高编辑效率。我很喜欢vim <a href="http://zuowj.iteye.com/blog/625887" target="_blank">http://zuowj.iteye.com/blog/625887</a> </p>
</div>
<p> </p>
<p> </p>
<p>用编辑效率换编写效率,你觉得划算么?</p>
19 楼 ray_linn 2010-03-27  
mikeandmore 写道
ray_linn 写道
•放弃使用便捷的IDE,  在unix 下   vim + gcc + gdb + make   才是C++开发的主流.

--- 自虐型

我目前没有发现有用vs的程序员比我用emacs更快的了。
好多情况下都是我都设置+调试+测试+部署好了,他们才刚刚找到哪里需要改。

vi和emacs的快捷键设置从来都是很科学的,基本能保证手腕完全不动,手指运动的总距离较短。
vs则不行。我可以在一秒钟之内完成全选+格式化+编译,可以在0.x秒之内定位到第一个错误(而不是警告)。vs程序员恐怕需要至少2,3秒吧。


我们说的重点是编写时候的效率,比如写个驱动,DDK的或者WDK的,你一选哗啦一下,架构生成了,vi程序员还在努力vi balabala.h balabala.c...
18 楼 ray_linn 2010-03-27  
mikeandmore 写道

至于代码提示。我觉得可有可无。如果一个c/c++程序需要代码提示才能写,那么说明这个程序需要重构了。
和java不同,c/c++语言给了程序员太多的自由。
如果是java/c#这类语言,我绝对会用ide(除非规定不让用)。对于c/c++,ide提供的太多便利加上语言提供的太多自
由会给设计带来潜在的危害,使程序员意识不到代码要重构。最明显的,会造成one-big class的情况



我猜你大概只玩C/C++自带库吧? 试着接触一下各种SDK,那些庞大的API入口会成为你的噩梦,当然只玩标准库和ESQL的例外了,那里本来就没多少东西。
17 楼 ray_linn 2010-03-27  
mikeandmore 写道
ray_linn 写道
你用vim调一个联机帮助文档给我看看。




什么东西你man不到?


你觉得man的效率比chm的高?请问man一屏显示多少个字符?
16 楼 mikeandmore 2010-03-27  
ray_linn 写道
你用vim调一个联机帮助文档给我看看。




什么东西你man不到?
15 楼 mikeandmore 2010-03-27  
ray_linn 写道
•放弃使用便捷的IDE,  在unix 下   vim + gcc + gdb + make   才是C++开发的主流.

--- 自虐型

我目前没有发现有用vs的程序员比我用emacs更快的了。
好多情况下都是我都设置+调试+测试+部署好了,他们才刚刚找到哪里需要改。

vi和emacs的快捷键设置从来都是很科学的,基本能保证手腕完全不动,手指运动的总距离较短。
vs则不行。我可以在一秒钟之内完成全选+格式化+编译,可以在0.x秒之内定位到第一个错误(而不是警告)。vs程序员恐怕需要至少2,3秒吧。

至于代码提示。我觉得可有可无。如果一个c/c++程序需要代码提示才能写,那么说明这个程序需要重构了。
和java不同,c/c++语言给了程序员太多的自由。
如果是java/c#这类语言,我绝对会用ide(除非规定不让用)。对于c/c++,ide提供的太多便利加上语言提供的太多自由会给设计带来潜在的危害,使程序员意识不到代码要重构。最明显的,会造成one-big class的情况
14 楼 zuowj 2010-03-27  
<div class="quote_title">ray_linn 写道</div>
<div class="quote_div">
<div class="quote_title">zuowj 写道</div>
<div class="quote_div">
<div class="quote_title">ray_linn 写道</div>
<div class="quote_div">•放弃使用便捷的IDE,  在unix 下   vim + gcc + gdb + make   才是C++开发的主流.<br><br>--- 自虐型</div>
<br><br>有很多unix 环境,如我工作用过的 freebsd 在线服务器,都不充许装图型环境,那你用什么IDE? <br>另外,学习好了vim 到处使用,有何不好? 一种好的习惯可以受益一辈子<img src="/images/smiles/icon_smile.gif" alt=""><br><br>
</div>
<br><br><br>我甚至不介意你用Edlin去编辑C,但别把这种倒退当做best practive。<br><br>服务器不能用图形界面,和开发机有什么关系。任何IDE都是提高效率的方式,别把这种扯淡的vim挂嘴边,你用vim调一个联机帮助文档给我看看。<br><br><br>在你的开发机上装上适合使用的IDE才是王道。<br><br>
</div>
<p> </p>
<p>你的假设是,  我们都可以在本地自己独立拥有一个跟在线服务一样的环境。 但这个假设是不一定成立的。
<br><br>其一、 开发环境可能依赖外部资源或服务是受限的。 比如,一个查询引擎,将要装载上千万条数据。这个开发机就是直接放在IDC的。
<br><br>其二、 文化的影响, 我在公司经历过或所知的unix下 C/C++项目,没有一个用到图型环境的IDE的。
<br><br><br>“扯淡的vim挂嘴边”
<br><br><br>我认为你,没有真正了解过vim 或没有很好的撑握它 ,  不然,你会喜欢上vim的。  另外不也要说 vim 没有效率。
vim的使命就是提高编辑效率。我很喜欢vim <a href="http://zuowj.iteye.com/blog/625887" target="_blank">http://zuowj.iteye.com/blog/625887</a>
</p>
13 楼 zuowj 2010-03-27  
[quote=&quot;ray_linn&quot;]
[quote=&quot;zuowj&quot;]
[quote=&quot;ray_linn&quot;]•放弃使用便捷的IDE,  在unix 下   vim + gcc + gdb + make   才是C++开发的主流.

--- 自虐型


有很多unix 环境,如我工作用过的 freebsd 在线服务器,都不充许装图型环境,那你用什么IDE?
另外,学习好了vim 到处使用,有何不好? 一种好的习惯可以受益一辈子[img]/images/smiles/icon_smile.gif&quot; alt=&quot;[/img]





我甚至不介意你用Edlin去编辑C,但别把这种倒退当做best practive。

服务器不能用图形界面,和开发机有什么关系。任何IDE都是提高效率的方式,别把这种扯淡的vim挂嘴边,你用vim调一个联机帮助文档给我看看。


在你的开发机上装上适合使用的IDE才是王道。



你的假设是,  我们都可以在本地自己独立拥有一个跟在线服务一样的环境。 但这个假设是不一定成立的。

其一、 开发环境可能依赖外部资源或服务是受限的。 比如,一个查询引擎,将要装载上千万条数据。这个开发机就是直接放在IDC的。

其二、 文化的影响, 我在公司经历过或所知的unix下 C/C++项目,没有一个用到图型环境的IDE的。


“扯淡的vim挂嘴边”


我认为你,没有真正了解过vim 或没有很好的撑握它 ,  不然,你会喜欢上vim的。  另外不也要说 vim 没有效率。 vim的使命就是提高编辑效率。我很喜欢vim http://zuowj.iteye.com/blog/625887


12 楼 Elminster 2010-03-26  
ray_linn 写道
zuowj 写道
ray_linn 写道
•放弃使用便捷的IDE,  在unix 下   vim + gcc + gdb + make   才是C++开发的主流.

--- 自虐型


有很多unix 环境,如我工作用过的 freebsd 在线服务器,都不充许装图型环境,那你用什么IDE?
另外,学习好了vim 到处使用,有何不好? 一种好的习惯可以受益一辈子




我甚至不介意你用Edlin去编辑C,但别把这种倒退当做best practive。

服务器不能用图形界面,和开发机有什么关系。任何IDE都是提高效率的方式,别把这种扯淡的vim挂嘴边,你用vim调一个联机帮助文档给我看看。


在你的开发机上装上适合使用的IDE才是王道。


我个人的感觉是这个世界上没啥好使的 C++ IDE,和 Java/C# 这些比起来,所有 IDE 的 C++ 支持都是渣。当然 Visual C++ 加上 visual assistant 会好那么一点 ———— 也就是在写 windows 程序的时候查 API 方便那么一点而已。
11 楼 ray_linn 2010-03-26  
zuowj 写道
ray_linn 写道
•放弃使用便捷的IDE,  在unix 下   vim + gcc + gdb + make   才是C++开发的主流.

--- 自虐型


有很多unix 环境,如我工作用过的 freebsd 在线服务器,都不充许装图型环境,那你用什么IDE?
另外,学习好了vim 到处使用,有何不好? 一种好的习惯可以受益一辈子




我甚至不介意你用Edlin去编辑C,但别把这种倒退当做best practive。

服务器不能用图形界面,和开发机有什么关系。任何IDE都是提高效率的方式,别把这种扯淡的vim挂嘴边,你用vim调一个联机帮助文档给我看看。


在你的开发机上装上适合使用的IDE才是王道。

10 楼 七猫 2010-03-26  
zuowj 写道
ray_linn 写道
•放弃使用便捷的IDE,  在unix 下   vim + gcc + gdb + make   才是C++开发的主流.

--- 自虐型


有很多unix 环境,如我工作用过的 freebsd 在线服务器,都不充许装图型环境,那你用什么IDE?
另外,学习好了vim 到处使用,有何不好? 一种好的习惯可以受益一辈子



生产机上不许装图形环境,开发机应该可以吧。
9 楼 zuowj 2010-03-26  
ray_linn 写道
•放弃使用便捷的IDE,  在unix 下   vim + gcc + gdb + make   才是C++开发的主流.

--- 自虐型


有很多unix 环境,如我工作用过的 freebsd 在线服务器,都不充许装图型环境,那你用什么IDE?
另外,学习好了vim 到处使用,有何不好? 一种好的习惯可以受益一辈子

8 楼 zuowj 2010-03-26  
haoshuo 写道
受教了,推荐的书可以写清楚作者和出版社吗


豆瓣上我推荐的书单  http://book.douban.com/doulist/518190/
7 楼 fxsc 2010-03-26  
C++在一个平台搞深入已经不容易,跨平台还得靠移植库。
6 楼 jaxchow 2010-03-26  
做了多年的java 对于C或C++已经没有想法,骨子里的深处还是想学的
5 楼 ray_linn 2010-03-26  
•放弃使用便捷的IDE,  在unix 下   vim + gcc + gdb + make   才是C++开发的主流.

--- 自虐型
4 楼 raojl 2010-03-26  
用ide的人是聪明的,除非没法选择!

相关推荐

    C++ 程序员成长中最常走的 4 条弯路

    掌握基本的编译命令和错误信息解读能力,对于成为一名优秀的C++程序员至关重要。 ### 弯路二:将C++与VC等同 C++是一种通用的编程语言,其标准由国际标准化组织(ISO)维护,而VC(Visual C++)是微软针对C++的一...

    C_C++程序员Java编程

    它具有“一次编写,到处运行”的跨平台特性,因为它的运行依赖于Java虚拟机(JVM)。Java被广泛应用于企业级应用开发、Web应用、移动应用(尤其是Android系统)等领域。 从C/C++过渡到Java,程序员需要注意以下几点...

    visibroker c++程序员指南 英文版

    ### visibroker c++程序员指南 英文版 #### 一、引言 在《visibroker c++程序员指南》中,我们了解到这是一本专为C++程序员设计的指导书籍,旨在帮助开发者掌握visibroker这一强大的中间件平台。本书涵盖了从基本...

    Visual C++程序员实用大全精华版&源代码

    《Visual C++程序员实用大全精华版》是一本深入探讨Visual C++编程技术的综合性书籍,旨在为程序员提供...通过深入学习和实践,你可以掌握从底层系统调用到高级应用开发的全方位技能,成为一名出色的Visual C++程序员。

    C++程序员转C#必看入门书籍

    .NET是一个由微软开发的软件框架,它提供了一套标准的API(应用程序接口)和运行环境,使开发者能够创建跨平台的应用程序。C#则是专门为.NET平台设计的现代编程语言,具有简洁、高效、面向对象的特点,适合开发各种...

    C++程序员快速学习C#

    综上所述,C++程序员转向C#不仅涉及语法层面的学习,更需理解C#面向对象的深入概念及.NET框架带来的跨平台和多语言协作能力。通过对C#的特定语法、数据类型和框架特性的掌握,C++程序员能够顺利过渡并充分利用C#的...

    c++程序员JAVA编程.rar

    JAVA是一种跨平台的面向对象语言,它的垃圾回收机制和自动内存管理与C++有着显著的区别。 2. **JAVA语法基础**:学习JAVA的基础语法,包括数据类型、变量、常量、运算符、流程控制语句等,这些都是从C++到JAVA过渡...

    《C/C++编写跨平台程序:实践篇》

    C/C++作为一种广泛支持的系统编程语言,具有强大的功能和性能,但在编写跨平台程序时,它的一个主要问题是直接暴露系统级API和内存对象布局,使得程序员在不同操作系统之间移植代码时会遇到障碍。为了解决这一问题,...

    C++程序员快速学习C#.docx

    `.NET`程序在运行时会转换为中间语言(IL),这使得跨平台执行成为可能,并且允许不同语言编写的组件之间互相调用。 在数据类型方面,C#与C++保持了一定的一致性,但也有所扩展: 1. 浮点类型:C#引入了`decimal`...

    Visual C++程序员实用大全(源代码).zip

    这使得Visual C++程序员能够编写跨平台的应用程序,并与.NET生态系统的其他语言如C#、VB.NET无缝交互。 在源代码中,你可能会发现各种各样的示例,比如: 1. 多线程编程:Visual C++支持多线程编程,源代码可能...

    c++ 连接mysql 跨平台

    MySQL提供了C语言接口,使得C++程序员可以通过调用这些API函数来执行SQL语句、处理结果集、管理连接等。这些API包括`mysql_init()`, `mysql_real_connect()`, `mysql_query()`, `mysql_store_result()`等。C++程序...

    C++程序员高级阶段学习规划

    3. **图形用户界面开发:** 熟练使用Qt或MFC进行跨平台GUI应用程序开发。 4. **嵌入式系统开发:** 有一定嵌入式开发经验,熟悉嵌入式系统的硬件特性及软件开发流程。 5. **多线程与内存管理:** 掌握多线程编程原理及...

    Visual C++.net技术内幕第6版最新版PDF,是C++程序员通行.net世界的金钥匙.

    通过阅读这本《Visual C++.NET技术内幕第6版》,读者可以系统地学习到如何利用C++在.NET平台上构建高效、跨平台的应用程序,从而在.NET世界中游刃有余。对于想要提升自己技能的C++程序员来说,这本书无疑是通往成功...

    C语言C++程序员编程必备.pdf

    8. **Code Lite**:Code Lite是一个跨平台的免费开源IDE,可在Mac OS X、Windows和Linux上运行。它为C/C++编程提供了基本但实用的功能,如代码高亮、代码折叠等。 9. **NetBeans C++**:NetBeans为C和C++项目提供了...

    C++Builder程序员成长攻略-源代码

    4. **FireMonkey框架**:除了VCL,C++Builder还提供了一个跨平台的开发框架——FireMonkey (FMX)。FMX支持Windows、macOS、iOS和Android等多平台,使得开发者能轻松创建原生的多平台应用程序。 5. **集成调试器**:...

    C_C++程序员查询辞典 (第二版)

    C++的预处理器在编译阶段执行文本替换,允许宏定义和条件编译,这在编写跨平台代码或条件执行特定功能时非常有用。类与对象的继承和多态性则实现了代码的复用和扩展,接口的抽象使得设计更加灵活。模板是C++的另一个...

    C++网络编程 卷1 卷2 ACE程序员指南 带详细目录

    - **ACE库介绍**:ACE是一个跨平台的C++库,提供网络通信、并发处理、时间管理等服务。 - **网络编程基础**:涵盖了TCP/IP协议栈、套接字编程、异步I/O等基础知识。 - **ACE设计模式**:介绍了面向对象和面向服务...

    C语言C++程序员编程必备[汇编].pdf

    8. **Code Lite**:这是一个跨平台的免费开源IDE,可在OSX、Windows和Linux上运行,为C/C++开发提供了全面的支持。 9. **NetBeans C++**:NetBeans不仅提供了C/C++项目的模板,还拥有代码助手、编译器配置、单元...

    《C++ Builder程序员成长攻略》-蒙祖强-源代码

    9. **跨平台开发**:C++ Builder支持Windows、macOS、Linux等多个平台,书中可能会涉及跨平台应用的开发技巧。 10. **源代码分析**:书中的源代码实例可以帮助读者加深对理论知识的理解,通过实际操作和分析,提升...

Global site tag (gtag.js) - Google Analytics