找回密码
 注册
关于网站域名变更的通知
查看: 57|回复: 0
打印 上一主题 下一主题

一名优秀的高级C++程序员的修炼过程?

[复制链接]
  • TA的每日心情
    开心
    2023-6-1 15:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2023-6-19 16:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

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

    7 w' k9 A* U( H( i  x) u4 l: `
    7 [; d4 n8 U( n6 J7 h- A. @6 \, [' a. C- S( x: V" I( |( ]" G
    " J2 V- v* s% `& D
    9 [) |* I6 C/ ]2 w3 q" z
    1 m# \' v$ J3 x现在学习java、C#等语言的人数远远高于C++,主要是C++的入门门槛太高,可能学习了一段时间后还做不了什么东西,导致信心大受打击,进而放弃。8 |9 N  L1 V6 ?8 B
    9 N4 \/ C4 Y4 }/ T2 r我想把我自己的经验分享给大家,希望帮助新人少走些弯路。! q* V( g5 ?) U

    : Y9 `$ T0 F9 S$ U) W3 K3 v9 `0 i" A+ K0 T# Y  r
    , M+ G+ y/ g+ H2 J9 o) G在此我们不讨论具体的技术细节,只说我们应该学习什么东西。
    9 k, V. u, S8 S3 h; L; D0 l4 D: f; Z( [  P
    " q1 M5 O) t' b0 R1 |0 I8 B% N0 L; w
    一、技术能力! I4 w5 w) _8 ~' o' b) E
    / }  U# ~9 Q* H( o) R# O. M9 T$ @8 h+ y1 |$ q; Q" h2 N! ^0 M; K2 Z
    ( ~8 e; h( I3 h9 `) T+ ]- K) C9 c

    ' k% Y. z7 n, E. I8 C4 N, W1. 语言1 N6 T" @1 u0 ]6 p* U0 j
    我们要成为一个程序员,学的东西会很多很杂,但是最开始一定要从语言开始学习,而学习语言最关键的莫过于选好一本书,学校的教材就算了,根本没有写得好的。在此隆重推荐《C++ Primer》,这本书很厚,内容也很丰富,对知识的讲解不仅仅停留在表面。如果这本书能有耐心看完,语言方面基本就没有什么大问题了,对以后的学习也打下了一个很好的基础。) C0 H+ r6 }; \/ o: n5 P" g% O9 B6 E0 f7 U1 U

    5 i( H" p. s& `) f$ ]9 ~/ G- w/ c' |& h/ `) _' F
    2. GUI, G! c% B) X* w: `7 d+ g5 P/ |; O1 p7 C5 g$ ~" U$ G7 ^
    C++方面的GUI库有很多种,比如MFC、WTL、wxWidgets、QT。这些GUI库都各有自己的特点,其实我们只要先了解一种就可以了,只要深入了解了一种GUI库,需要的时候再学习其他的就够了,本质上都差不多,很快就可以上手了。MFC虽然设计上有很多问题,但是作为入门还是不错的,而且学习资料很多,碰到问题也好解决。; t5 D+ G. W6 K8 i: a* u/ ?
    ; g: _% \, z: a& k
    " n: S7 Q7 M8 L, R' U( c0 j; }! n) r- B1 e/ w
    & j5 P6 N2 d8 Z3. 数据结构和算法1 r- K! _# ~, q- Q# E- J$ k: ^5 j9 o! T7 G6 O$ V5 _( d3 Z6 w
    很多人都忽视了数据结构和算法方面的知识,尤其是一些编程语言的库做得非常好,几乎不需要自己去实现一些数据结构和算法,导致现在很多程序员不重视甚至忽略这方面的知识。但是,当我们想让我们的程序跑的更快、内存占用更少的时候,这些知识就非常非常重要了。很多程序员都是刚开始的时候不重视这些,但是工作几年后又来补习这些知识。2 \) e% M  T/ O- I% G/ v+ E- j
    % W) b# v" A6 Z, e6 z6 ^
    ! W1 D- b4 J9 Q- Y' I8 I; V1 |
    4 w4 N6 }  z7 }4 h1 Y! I最开始可能不需要学习的太深入,但是基本的数据结构和算法一定要知道。7 P$ a& z- h. d, T! W
    推荐《数据结构(C语言版)》,在数据结构和算法的学习中,最好不要去关心面向对象方面的技巧,就用C语言来实现,这样能更关注于算法本身的内容。: W/ s. t7 g" \% C$ O$ ]1 R
    0 A5 P' k+ m$ q2 d% g9 K1 K% k, P* k4 x: Q. K2 c' `; F' F2 v. M$ X% G
    8 d  t+ K* S, y/ \& u$ d6 e& f  y8 g+ |& q
    4. 数据库
    ' m, [$ K% g+ j. O5 W! ]. l学习数据库的基础知识,并且掌握一种数据库使用,推荐使用mysql,而且最好不要用一些封装好的接口,而应该直接用mysql提供的数据库api,可能对数据库了解的会更深入。( V( E/ h7 x. h" `; t3 z; S4 u- z* R$ z9 ~/ J5 e: l
    , \; l! R* I( S- b1 o
    ; G0 z  z/ X5 B5 b6 {. |; y
    * o2 `2 {& w, w$ C% r3 L0 R% ~9 K5. 并行/ K3 @$ p7 o) s6 ~) G2 K
    ) s8 m  M" G' _3 X; g& W" \" U# lcpu主频已经不能遵循摩尔定律了,现在cpu发展的趋势是多核心。无论是多线程,还是多进程,都是为了更好的利用cpu的性能,提供更好的用户体验。这就要求我们如果要写出高效的应用程序,必然要涉及到并行计算。多花些精力在并行计算上吧,一定会有丰富的回报。: L7 ^2 [! P# J; `7 W/ J& M# T4 d8 D
    7 g+ T2 `* w. u) e/ U$ R0 M4 ~: F1 i5 _, n' R0 y' [

    * |3 l/ [8 p4 G+ g4 q* o% m6. 网络编程3 R0 Y& ?: P3 D" @! n# F6 y& a1 P1 Q, U
    这里所指的网络编程是指socket编程。现在C++的应用很多都是在做服务器开发,如何开发一个高并发、大吞吐量、高稳定性的服务器就是我们要考虑的了。7 q5 Q: `2 j) m5 C9 b+ k; R
    ! r' V* ?: f+ R& j% ^5 y/ Z: V/ t
    4 b" O9 {( F. W- M, m- k% J6 `7 Y8 h1 m6 r1 V
    7. 设计模式' M9 x, L& L* o/ m
    2 @3 Z9 H# ]1 ~+ f设计模式不是具体的技术,更多的是如何让代码更容易阅读、更好扩展、更容易使用。3 Z4 @' ]* b& X5 T9 U# H" m% t: e& [6 d% g9 `
    ; B4 Q  r' Q8 D- O
    8 l1 W9 Z! b$ ~( P1 t1 F4 g) a: |( N- h' }! {9 S9 l7 d' J) ~
    8. 库的使用" _5 x" l9 E  k6 R7 y# k  L
    C++标准库仅仅提供了一些很基本的功能,所以我们经常会引入一些第三方库。最著名的恐怕就是被称为准标准库的boost库,它提供了我们编程中用到的各方面的技术,文本处理、算法、网络、多线程、图像处理等等,几乎无所不包。其它也有一些专著于某一方面的库,比如ACE是网络通信方面的,TinyXML是解析xml的,OGRE是图形渲染方面的。0 B, b; z! W, r1 s. p& ~3 @3 Z, N5 t
    # \. Q  X! A0 m0 S$ [3 R: r* u2 T& o% z7 A
    9 _8 |: u* ^/ J3 ~: M5 M1 a$ `4 \$ \+ _3 Q( O1 m7 v  i6 e
    9. 操作系统的知识
    0 w. Y2 M: {. j* ~9 [程序员需要了解的操作系统知识和普通用户是不一样的,一个高手是需要深入了解操作系统的方方面面,而不是停留在使用层面。至于应该了解哪些知识,windows上的去看《windows核心编程》,linux的去看《深入理解linux内核》,应该可以知道自己应该学什么了。
    8 k; a6 d7 P+ A* w9 H* Y& S; U# [/ Q6 N7 i
    8 d( _, ~. o4 ^) }+ ^/ B5 p
    : ?8 D; e' ^$ \( e5 h二、项目经验3 }; {) g3 l4 j4 `1 s/ j" i
    以上的内容如果都精通了,也算是个比较厉害的程序员了。但是对程序员来说,项目经验更加重要。一个好的项目可以让你把各种技术进行综合运用,并且能学到一些新的知识。比如说做游戏的就需要学习图形方面的知识,做播放器的要学习编解码器方面的知识。9 O! B: a, ]/ i8 y) J
    6 p' o( e  Q5 e7 h! U1 t1 M8 }" W- l5 W8 _+ [/ G" y" X* ?/ b7 i8 d6 d. g/ `* \
    3 g# d2 F2 w: X
    很多程序员会忽略项目的经验,而单纯的谈技术能力,这是错误的。其实这就是理论和实践的关系,技术就是理论知识,做项目就是实践,理论对实践有知道作用,实践能加深我们对理论的深入理解。; u& m- \8 X* p/ o' _* y% A; [* Q; o5 d/ S0 d
    ! i, K9 s  d: I1 U5 W" u- x4 e3 z5 ?8 x, r( [& Q$ Z/ v

    8 N; P6 V; l0 B1 u三、沟通能力
    , z  x) n/ y9 b: H$ W沟通能力是一个高级程序员要具备的软实力。; Y& G% g: X8 f; S% I) f! j- A; ?* D$ c
    我这里想说的沟通能力并不是一般说的能说会道,夸夸其谈,说话天花乱坠。而是建立在技术基础之上的沟通能力。
    0 u5 R  R9 @4 U( G( q( Y+ X% p
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-8-18 06:25 , Processed in 0.125000 second(s), 27 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表