| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3886 人关注过本帖, 2 人收藏
标题:【轉】经验分享:如何成为一名优秀的高级C++程序员?
取消只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
结帖率:100%
收藏(2)
已结贴  问题点数:100 回复次数:5 
【轉】经验分享:如何成为一名优秀的高级C++程序员?

来源:码农网


C++这门语言从诞生到今天已经经历了将近30个年头。不可否认,它的学习难度都比其它语言较高。而它的学习难度,主要来自于它的复杂性。现在C++的使用范围比以前已经少了很多,java、C#、python等语言在很多方面已经可以代替C++。但是也有很多地方是其他语言完全无法替代的,主要集中在需要运行效率比较高的行业,比如游戏、高效的服务器。

现在学习java、C#等语言的人数远远高于C++,主要是C++的入门门槛太高,可能学习了一段时间后还做不了什么东西,导致信心大受打击,进而放弃。

我想把我自己的经验分享给大家,希望帮助新人少走些弯路。

在此我们不讨论具体的技术细节,只说我们应该学习什么东西。

一、技术能力

1. 语言

我们要成为一个程序员,学的东西会很多很杂,但是最开始一定要从语言开始学习,而学习语言最关键的莫过于选好一本书,学校的教材就算了,根本没有写得好的。在此隆重推荐《C++ Primer》,这本书很厚,内容也很丰富,对知识的讲解不仅仅停留在表面。如果这本书能有耐心看完,语言方面基本就没有什么大问题了,对以后的学习也打下了一个很好的基础。

2. GUI

C++方面的GUI库有很多种,比如MFC、WTL、wxWidgets、QT。这些GUI库都各有自己的特点,其实我们只要先了解一种就可以了,只要深入了解了一种GUI库,需要的时候再学习其他的就够了,本质上都差不多,很快就可以上手了。MFC虽然设计上有很多问题,但是作为入门还是不错的,而且学习资料很多,碰到问题也好解决。

3. 数据结构和算法

很多人都忽视了数据结构和算法方面的知识,尤其是一些编程语言的库做得非常好,几乎不需要自己去实现一些数据结构和算法,导致现在很多程序员不重视甚至忽略这方面的知识。但是,当我们想让我们的程序跑的更快、内存占用更少的时候,这些知识就非常非常重要了。很多程序员都是刚开始的时候不重视这些,但是工作几年后又来补习这些知识。

最开始可能不需要学习的太深入,但是基本的数据结构和算法一定要知道。

推荐《数据结构(C语言版)》,在数据结构和算法的学习中,最好不要去关心面向对象方面的技巧,就用C语言来实现,这样能更关注于算法本身的内容。

4. 数据库

学习数据库的基础知识,并且掌握一种数据库使用,推荐使用mysql,而且最好不要用一些封装好的接口,而应该直接用mysql提供的数据库api,可能对数据库了解的会更深入。

5. 并行

cpu主频已经不能遵循摩尔定律了,现在cpu发展的趋势是多核心。无论是多线程,还是多进程,都是为了更好的利用cpu的性能,提供更好的用户体验。这就要求我们如果要写出高效的应用程序,必然要涉及到并行计算。多花些精力在并行计算上吧,一定会有丰富的回报。

6. 网络编程

这里所指的网络编程是指socket编程。现在C++的应用很多都是在做服务器开发,如何开发一个高并发、大吞吐量、高稳定性的服务器就是我们要考虑的了。

7. 设计模式

设计模式不是具体的技术,更多的是如何让代码更容易阅读、更好扩展、更容易使用。

8. 库的使用

C++标准库仅仅提供了一些很基本的功能,所以我们经常会引入一些第三方库。最著名的恐怕就是被称为准标准库的boost库,它提供了我们编程中用到的各方面的技术,文本处理、算法、网络、多线程、图像处理等等,几乎无所不包。其它也有一些专著于某一方面的库,比如ACE是网络通信方面的,TinyXML是解析xml的,OGRE是图形渲染方面的。

9. 操作系统的知识

程序员需要了解的操作系统知识和普通用户是不一样的,一个高手是需要深入了解操作系统的方方面面,而不是停留在使用层面。至于应该了解哪些知识,windows上的去看《windows核心编程》,linux的去看《深入理解linux内核》,应该可以知道自己应该学什么了。

二、项目经验

以上的内容如果都精通了,也算是个比较厉害的程序员了。但是对程序员来说,项目经验更加重要。一个好的项目可以让你把各种技术进行综合运用,并且能学到一些新的知识。比如说做游戏的就需要学习图形方面的知识,做播放器的要学习编解码器方面的知识。

很多程序员会忽略项目的经验,而单纯的谈技术能力,这是错误的。其实这就是理论和实践的关系,技术就是理论知识,做项目就是实践,理论对实践有知道作用,实践能加深我们对理论的深入理解。

三、沟通能力

沟通能力是一个高级程序员要具备的软实力。

我这里想说的沟通能力并不是一般说的能说会道,夸夸其谈,说话天花乱坠。而是建立在技术基础之上的沟通能力。
搜索更多相关主题的帖子: 世乒赛 python 服务器 程序员 java 
2015-12-31 14:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
輕量級應用還是可以用C++的

授人以渔,不授人以鱼。
2015-12-31 16:10
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
文章老,跟中國大陸學校教學生用vc6匹配啊

授人以渔,不授人以鱼。
2015-12-31 16:12
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用wengbin在2015-12-31 17:06:32的发言:

想知道简单易学又应用广的语言有什么,哎,马上毕业了,想以编程行业找个事干呀

漢語、英語……

授人以渔,不授人以鱼。
2015-12-31 17:14
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
沒有什麽是既容易又好的,語言祇是表達思想的工具,價値不在語言。會中文的很多,但不見得都會寫文章、出名著,很多大學生,連寫張請假條也成問題。把語言運用好,哪門語言都不容易,都要下苦功。這裏的關鍵是運用,要學的是運用,不是單學語言,所謂“格物致知”,格物祇是途徑,目標是致知,物是載體,不是價値,價値總在物外,價値是普遍的,物是具體的,可以通過各不相同之物致同一的知,就是殊途同歸。不要死磕語言,也不是學通一門語言就可以闖天下的。

授人以渔,不授人以鱼。
2015-12-31 17:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 14楼 wengbin
參考一下這篇文章:


靠编程赚钱的7个方法:普通程序员最难

2015-12-27 12:49:09
来源:码农网
作者:小峰


原标题《编程赚钱的7个方法》,IT之家编辑酌情修改。

几个星期前,当我收到一个自称Someone712的人发给我的一条消息时,我决定要写一篇如何用编程赚钱的博客文章。

Someone712:

我对电子、物理和编程很感兴趣,我今年15岁,我想问问你,你如何满足财务上的实验和设备预算。你对电子和物理感兴趣吗?或只对编程感兴趣?

故而,我想和大家分享关于我是如何赚钱的,以及你可以如何开始用编程赚钱方面的内容。首先我要回答最后部分的问题:是的,我对电子和物理这两方面都很感兴趣,并且我已经决定开始工作于结合了这些领域的项目:Kerbal Space Program控制面板。

在编程的初期,你需要不断地支出:你得订阅如Treehouse的服务去学习编程;如果你想与现实世界互动的话,你得购买Arduino;如果你想要(并且是应该的)展示自己的作品,获得更好的工作机会的话,你得有一个网站。

但是,你可以通过编程赚钱,即使你年纪轻轻。举个例子,就说我吧,就靠这个博客赚了一点钱(虽然也不比费用高多少),而且我还计划了做其他的项目,这些项目都可以赚钱,既然我可以,你也一定可以!

靠编程赚钱的7个方法:普通程序员最难

下面我要为大家介绍用编程赚钱的7种方法:

1、成为一名自由职业者

成为自由职业者,是在你年少时用编程赚钱最简单的方法之一,你要做的是进入类似的网站,找一个你可以胜任的项目或任务,做好项目或任务,然后获得这笔钱,就这么简单。

成为自由职业者的缺点

当我在自由职业者的世界里寻找任务的时候,我总是有一种奇怪的恐惧,恐惧自己不能完成任务,尽管我确实具备了所需的所有技能。可能你很幸运,没有这种非理性的恐惧,但如果你和我一样,那么你必须克服它。

自由职业往往不会待遇优厚,并且在刚开始的时候,也许你只能找一些只付你$10甚至更低薪酬的工作,所以如果你想迅速脱贫致富奔小康,那么自由职业很可能并不是你的菜。

作为一个年轻的自由职业者,你不会有固定的收入。你的任务将大多为可在一个星期内,有的甚至不用一小时就可以完成的小任务。有时候你可能甚至找不到适合自己的任务。所以对于那些想要获得某种形式固定收入的人,自由职业并不可取。

但自由职业是一个在学习编程的同时又能获得经验的伟大方法,要知道经验可是你能够得到更好编程工作的最重要的条件之一。

2、工作于开源项目

虽然工作于开源项目不会直接收获金钱,但有几个方法可以让你在增加工作经验的同时,货币化你的项目。

当我们年轻程序员在做一个项目的时候,通常会幻想自己的项目将因其伟大的特性而成为世界上最好的产品之一,而问题在于我们没法靠自己完成所有的事情。而这就是开源的目标和精粹。使用Github这样的平台,让每个人都参与到你的项目中,这也是表明项目好坏的标志。它教你如何与其他程序员一起写代码,这是搞大项目时最重要的技能之一。

除了让你的简历有内容,并教你一些伟大的合作能力,你也可以从开源中赚到钱。你可以在你的项目中添加一个捐款表格,虽然可能你一笔捐款都得不到,但如果你正在创建一个杀手级产品,那么你就能赚到一些钱。而且这也是求职时可以炫耀给企业的事情,它能让你拥有更大的雇用机会。

不过,我不得不承认,我并没有贡献过很多开源项目,我有点惭愧,不过我希望在发了这篇博客以后,我能够更加努力,这样我才能有真正值得炫耀的东西,我才能更善于合作,而合作正是我想在工作中努力提高的技能。愿与君共勉。

3、制作应用程序

正如我以前所描述的那样,我现已经在着手做一个Android应用程序,细节方面我不会说太多,因为做一个应用程序算是一件相对容易的事情,而且是赚钱(广告或app内购买)的一个快速又简便的方法,同时也可以作为展现给求职企业的内容。

不过有一件事值得一提,Android应用程序和iOS应用程序有很大的区别,那就是Google Play中的app只需要一次性花费25美元的成本,但iOS的app每年需要99美元,因此,如果你正在编写适用于iOS的app,那么你得确保自己通过这个app所赚的钱得比写Android app要多。

4、为WordPress制作插件或主题

这是赚钱的好方法。你可以自己做,也可以与其他一些人一起,并且你几乎可以做任何你想做的内容,从捐款插件到分享按钮,再到星球大战的主题(我不知道这是否会侵犯版权,但你知道我的意思……)。

你可以选择让它免费,通过广告来赚钱,或者直接制作插件赚钱,一切都取决于你。

Treehouse对于WordPress开发也有一些很棒的的课程。

缺点?它往往会过于复杂,但这只有当你的用户和WordPress一样多(全球四分之一的所有网站)时,才会发生。而且由于WordPress提供的文档很棒,所以你不必整天在Stack Overflow上搜索答案。

5、教其他年轻的程序员

这是用编程赚钱最简单的方法之一。每个城市都有很多年轻的程序员,他们中的很多人不知道从哪里开始编程之路,你可以帮助他们,无论是通过在线课程,现实课程,还是一对一的教导,我几乎可以向你保证,总会有人愿意为你提供的帮助买单。

我是从我的一个朋友那儿开始学习编程的,而他则是他父亲——微软的一个前雇员教的。那时的我有一个学习编程的梦想,但我以为学习编程意味着昂贵的软件和数千美元的费用,直到后来他教我编程的基础知识,于是成就了今天的我。我的基础知识是由另一个年轻的程序员教的,不过如果他现在教我,我肯定会付他钱(当时我们都只有11岁)。

你可能已经猜到了,他不是一个编程高手,所以你也没有必要是,你只需要了解基本知识,就可以“传道”了。

同样的,除了可以赚钱,这也有助于你成为更有经验的程序员。

6、制作一些电子产品

制作电子产品并不复杂,只要买一个Arduino入门套件,学习它的基础知识,再学一点PCB设计,那你就可以做好创建类似DigiRule的准备了,制作电子产品的优点之一就是,你可以开源,除了享受上述提到的开源的好处,还可以通过销售实际产品赚钱。

关于电子产品的唯一问题是,一开始需要相当多的钱,并且如果出现问题,可能你需要买一些全新的东西。

7、找一份编程的工作——也不是没有可能

最后这个方法可能会很艰难,如果你不具备任何编程经验的话。但如果你只是一味地做项目,然后线上展示这些项目的话,那么你会错失很多提升的机会,所以,不要闭门造车,尝试上面的这些事情,然后试试申请工作,我可以向你保证,你会有更多的机会在编程世界中找到工作。

授人以渔,不授人以鱼。
2015-12-31 18:19
快速回复:【轉】经验分享:如何成为一名优秀的高级C++程序员?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014868 second(s), 9 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved