找回密码
 注册
关于网站域名变更的通知
查看: 56|回复: 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++。但是也有很多地方是其他语言完全无法替代的,主要集中在需要运行效率比较高的行业,比如游戏、高效的服务器。) m& j- }2 \7 i- L* n2 V

    ! C, Q% Z/ Y0 l
    7 [; d4 n8 U( n6 J7 h- A. @! A' ~4 l9 e7 q7 y3 \5 a

    5 l$ U7 C; Y7 d! E3 O3 i/ X) |9 [) |* I6 C/ ]2 w3 q" z- T. w! _$ q2 n! n- l
    现在学习java、C#等语言的人数远远高于C++,主要是C++的入门门槛太高,可能学习了一段时间后还做不了什么东西,导致信心大受打击,进而放弃。8 |9 N  L1 V6 ?8 B/ [- I4 A; K: q  e* o
    我想把我自己的经验分享给大家,希望帮助新人少走些弯路。
    & [2 M. b2 \# n3 v1 d* x! w0 B1 Q8 N4 i' m) c( b
    9 `0 i" A+ K0 T# Y  r
    , s3 v+ j2 Q+ o- G- L在此我们不讨论具体的技术细节,只说我们应该学习什么东西。* a- m8 n( g$ K0 n; S- f! a

    ; t6 s8 Y6 _7 |4 }" q1 M5 O) t' b
    + K* [$ z& I  X! A一、技术能力! I4 w5 w) _8 ~' o' b) E
    7 x4 t5 R0 M. c8 ]1 |$ q; Q" h2 N! ^0 M; K2 Z( r2 U% A! @- W6 S6 c! z- x

    5 G$ p5 M5 }, h, P; E5 q% {1. 语言: G& B! B; L) _  a
    我们要成为一个程序员,学的东西会很多很杂,但是最开始一定要从语言开始学习,而学习语言最关键的莫过于选好一本书,学校的教材就算了,根本没有写得好的。在此隆重推荐《C++ Primer》,这本书很厚,内容也很丰富,对知识的讲解不仅仅停留在表面。如果这本书能有耐心看完,语言方面基本就没有什么大问题了,对以后的学习也打下了一个很好的基础。) C0 H+ r6 }; \/ o: n5 P7 F+ E4 `- K* o# ?
    0 [- ]- T" j0 c; k

    2 z4 ?& w: O( @; J; W2. GUI, G! c% B) X* w: `7 d+ g- \% Y8 v( a6 z$ v' x) y( k  f- A7 G- `
    C++方面的GUI库有很多种,比如MFC、WTL、wxWidgets、QT。这些GUI库都各有自己的特点,其实我们只要先了解一种就可以了,只要深入了解了一种GUI库,需要的时候再学习其他的就够了,本质上都差不多,很快就可以上手了。MFC虽然设计上有很多问题,但是作为入门还是不错的,而且学习资料很多,碰到问题也好解决。5 V' c) L, g) j
    ; g: _% \, z: a& k4 ^  s7 Y; @+ P
    ( c0 j; }! n) r- B1 e/ w
    ) i9 P/ p9 S) }2 @( F3. 数据结构和算法1 r- K! _# ~, q- Q# E- J
    ) u$ N1 i3 s4 C  v很多人都忽视了数据结构和算法方面的知识,尤其是一些编程语言的库做得非常好,几乎不需要自己去实现一些数据结构和算法,导致现在很多程序员不重视甚至忽略这方面的知识。但是,当我们想让我们的程序跑的更快、内存占用更少的时候,这些知识就非常非常重要了。很多程序员都是刚开始的时候不重视这些,但是工作几年后又来补习这些知识。7 j* E1 E' B* H1 {( P

    ' N# T3 p8 X6 B! W1 D- b4 J9 Q- Y' I8 I; V1 |
    # e# S) o( k  N3 \: ?/ n3 y0 i最开始可能不需要学习的太深入,但是基本的数据结构和算法一定要知道。8 ?7 o  S. w. n# X( |
    推荐《数据结构(C语言版)》,在数据结构和算法的学习中,最好不要去关心面向对象方面的技巧,就用C语言来实现,这样能更关注于算法本身的内容。: W/ s. t7 g" \% C$ O$ ]1 R0 H9 @: G3 @, t+ _5 J
    % g9 K1 K% k, P* k4 x: Q. K2 c
    + m0 B) Y" _6 k2 N2 t. x8 d  t+ K* S, y/ \& u
    . H& b- a  y5 z2 k4. 数据库
    # ]" D% s( G. D  y! Q学习数据库的基础知识,并且掌握一种数据库使用,推荐使用mysql,而且最好不要用一些封装好的接口,而应该直接用mysql提供的数据库api,可能对数据库了解的会更深入。( V( E/ h7 x. h" `; t3 z; S4 u+ N$ Y- f* N9 l8 d/ x  D; x

    9 Y% b5 A* @* m; G0 z  z/ X5 B5 b6 {. |; y7 q& m$ F; ]9 K! f' u1 ~3 z- k( \
    5. 并行/ K3 @$ p7 o) s6 ~) G2 K
    + W! Z  T* Y8 [/ u7 O% Kcpu主频已经不能遵循摩尔定律了,现在cpu发展的趋势是多核心。无论是多线程,还是多进程,都是为了更好的利用cpu的性能,提供更好的用户体验。这就要求我们如果要写出高效的应用程序,必然要涉及到并行计算。多花些精力在并行计算上吧,一定会有丰富的回报。( |! D4 [: e# `: V5 X
    7 g+ T2 `* w. u) e/ U$ R0 M4 ~# L/ @! U% d+ W3 b1 ?

    5 e' b/ m8 B+ P# c6. 网络编程3 R0 Y& ?: P3 D" @/ L* O, h! n$ o: e! g
    这里所指的网络编程是指socket编程。现在C++的应用很多都是在做服务器开发,如何开发一个高并发、大吞吐量、高稳定性的服务器就是我们要考虑的了。
    $ _  e' U; `) t0 F( m9 `! r' V* ?: f+ R& j
    ( W, t  B; o0 q9 w6 ^3 h4 b" O9 {( F. W- M, m- k7 G. B. Y7 i( O+ E
    7. 设计模式' M9 x, L& L* o/ m$ `0 J; e6 M) x* W) |, v& c7 ?
    设计模式不是具体的技术,更多的是如何让代码更容易阅读、更好扩展、更容易使用。3 Z4 @' ]* b& X/ f4 i6 q- G" c

    $ L' c# L0 O/ ~8 l1 W9 Z! b$ ~( P1 t1 F4 g) a: |& R+ F8 |) K* A* R7 H- }: {# [
    8. 库的使用+ y$ w$ C* l9 ^) l
    C++标准库仅仅提供了一些很基本的功能,所以我们经常会引入一些第三方库。最著名的恐怕就是被称为准标准库的boost库,它提供了我们编程中用到的各方面的技术,文本处理、算法、网络、多线程、图像处理等等,几乎无所不包。其它也有一些专著于某一方面的库,比如ACE是网络通信方面的,TinyXML是解析xml的,OGRE是图形渲染方面的。0 B, b; z! W, r
    " u. E- a$ C3 L6 E3 Y3 n, a# \. Q  X! A0 m0 S$ [
    ( W2 Z2 a) q' k& F3 P9 _8 |: u* ^/ J3 ~
    2 Q# T4 m4 E0 U+ Q9. 操作系统的知识) P; i3 }, s; a8 w8 _# C$ p- k
    程序员需要了解的操作系统知识和普通用户是不一样的,一个高手是需要深入了解操作系统的方方面面,而不是停留在使用层面。至于应该了解哪些知识,windows上的去看《windows核心编程》,linux的去看《深入理解linux内核》,应该可以知道自己应该学什么了。
    ; V: P- e& u/ h: b- Y5 f0 d& g# o/ ]- n+ Q, U+ x  Y9 K# a( O. _- _. m$ X
    8 d( _, ~. o4 ^) }+ ^/ B5 p
    7 X; Y/ U& r6 J* |( v) o二、项目经验) j. i* H3 B% _1 J
    以上的内容如果都精通了,也算是个比较厉害的程序员了。但是对程序员来说,项目经验更加重要。一个好的项目可以让你把各种技术进行综合运用,并且能学到一些新的知识。比如说做游戏的就需要学习图形方面的知识,做播放器的要学习编解码器方面的知识。9 O! B: a, ]/ i8 y) J
    / U! G9 F7 ]5 ^' I) ?1 t1 M8 }" W- l5 W8 _+ [/ G! J5 E2 L% L; v" G
    : |5 ^8 O( d6 O% x
    很多程序员会忽略项目的经验,而单纯的谈技术能力,这是错误的。其实这就是理论和实践的关系,技术就是理论知识,做项目就是实践,理论对实践有知道作用,实践能加深我们对理论的深入理解。; u& m- \8 X* p/ o' _* y% A
    ! N) h: _! g) n  b7 k! i, K9 s  d: I1 U5 W" u- x4 e
    * J1 p' i3 X: y) S5 Q; g+ S2 |) f/ b( q6 e
    三、沟通能力8 {1 N. l2 R; h# Q8 E$ S
    沟通能力是一个高级程序员要具备的软实力。; Y& G% g: X8 f; S
    . |! U) e) y$ k# C我这里想说的沟通能力并不是一般说的能说会道,夸夸其谈,说话天花乱坠。而是建立在技术基础之上的沟通能力。
    : r4 p& _  k0 G
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

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

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

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

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