TA的每日心情 | 开心 2023-6-1 15:13 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
C++这门语言从诞生到今天已经经历了将近30个年头。不可否认,它的学习难度都比其它语言较高。而它的学习难度,主要来自于它的复杂性。现在C++的使用范围比以前已经少了很多,java、C#、python等语言在很多方面已经可以代替C++。但是也有很多地方是其他语言完全无法替代的,主要集中在需要运行效率比较高的行业,比如游戏、高效的服务器。; G1 G# R( L$ X% c; Q3 F$ }' z
* `7 }5 B- ^3 B
7 [; d4 n8 U( n6 J7 h- A. @
2 g2 }0 ^7 Q3 f) l8 z
6 G9 ?. V- E: y" t2 g( o9 [) |* I6 C/ ]2 w3 q" z
e- J* @8 m8 c9 i$ _. F现在学习java、C#等语言的人数远远高于C++,主要是C++的入门门槛太高,可能学习了一段时间后还做不了什么东西,导致信心大受打击,进而放弃。8 |9 N L1 V6 ?8 B
/ C, k! w& q7 x/ \3 J我想把我自己的经验分享给大家,希望帮助新人少走些弯路。( D9 f# ]' p. V; ~& D
0 h( v( P7 |+ \5 _0 p
9 `0 i" A+ K0 T# Y r0 ^* w6 S1 V# g' h( Z
在此我们不讨论具体的技术细节,只说我们应该学习什么东西。
( n! [: k) g4 c& `: j
1 L) Y' ?- y0 T. a7 k" q1 M5 O) t' b
/ C8 l N5 p0 V8 f一、技术能力! I4 w5 w) _8 ~' o' b) E2 Q' A- y# B, B, K. N D
1 |$ q; Q" h2 N! ^0 M; K2 Z
% B6 H2 Q: q( |, S
4 C5 v7 J5 Q0 L! @5 O2 W4 u: @1. 语言/ y# Q% e( }* j# C5 j
我们要成为一个程序员,学的东西会很多很杂,但是最开始一定要从语言开始学习,而学习语言最关键的莫过于选好一本书,学校的教材就算了,根本没有写得好的。在此隆重推荐《C++ Primer》,这本书很厚,内容也很丰富,对知识的讲解不仅仅停留在表面。如果这本书能有耐心看完,语言方面基本就没有什么大问题了,对以后的学习也打下了一个很好的基础。) C0 H+ r6 }; \/ o: n5 P
5 b0 y& _2 u: w p- n1 j# J/ j. f% z$ q3 G# Q' r) R3 S
Q' d0 z$ @7 x! a; A5 f2. GUI, G! c% B) X* w: `7 d+ g
9 J- k2 N/ Y& E9 b: eC++方面的GUI库有很多种,比如MFC、WTL、wxWidgets、QT。这些GUI库都各有自己的特点,其实我们只要先了解一种就可以了,只要深入了解了一种GUI库,需要的时候再学习其他的就够了,本质上都差不多,很快就可以上手了。MFC虽然设计上有很多问题,但是作为入门还是不错的,而且学习资料很多,碰到问题也好解决。
. y+ V* `% S/ P& u; g: _% \, z: a& k: q0 `& @4 r+ l( F9 Z
( c0 j; }! n) r- B1 e/ w
' \% V5 L' ~" O8 I% f) D3. 数据结构和算法1 r- K! _# ~, q- Q# E- J
+ q: o( b7 ]* _: ^# B* d很多人都忽视了数据结构和算法方面的知识,尤其是一些编程语言的库做得非常好,几乎不需要自己去实现一些数据结构和算法,导致现在很多程序员不重视甚至忽略这方面的知识。但是,当我们想让我们的程序跑的更快、内存占用更少的时候,这些知识就非常非常重要了。很多程序员都是刚开始的时候不重视这些,但是工作几年后又来补习这些知识。# B$ f6 n( S- u) ^ x3 q- l7 v' v
7 V5 X0 |; R9 t8 d$ u5 [5 u! W1 D- b4 J9 Q- Y' I8 I; V1 |/ w; O' J& ^) z" {
最开始可能不需要学习的太深入,但是基本的数据结构和算法一定要知道。: C; c# r5 Y4 P7 T: ^$ F: t; g
推荐《数据结构(C语言版)》,在数据结构和算法的学习中,最好不要去关心面向对象方面的技巧,就用C语言来实现,这样能更关注于算法本身的内容。: W/ s. t7 g" \% C$ O$ ]1 R
R0 J8 l+ ^' h$ r( r% g9 K1 K% k, P* k4 x: Q. K2 c
$ k3 C; T( F" M8 d t+ K* S, y/ \& u
3 C0 P& H5 n3 o: m, x4. 数据库% n% i) ^4 ~: V {
学习数据库的基础知识,并且掌握一种数据库使用,推荐使用mysql,而且最好不要用一些封装好的接口,而应该直接用mysql提供的数据库api,可能对数据库了解的会更深入。( V( E/ h7 x. h" `; t3 z; S4 u1 T/ F; i& |: @& ^9 y! s+ q
/ D4 P! }$ x5 k9 p, q
; G0 z z/ X5 B5 b6 {. |; y
5 Y$ V0 T" \5 F! Q1 S' e+ @+ a% Y- \' j( V5. 并行/ K3 @$ p7 o) s6 ~) G2 K6 f, x, v/ K9 b! O) s. N
cpu主频已经不能遵循摩尔定律了,现在cpu发展的趋势是多核心。无论是多线程,还是多进程,都是为了更好的利用cpu的性能,提供更好的用户体验。这就要求我们如果要写出高效的应用程序,必然要涉及到并行计算。多花些精力在并行计算上吧,一定会有丰富的回报。9 a1 P. ^$ ]5 e5 s$ o. q- m; u
7 g+ T2 `* w. u) e/ U$ R0 M4 ~1 G8 V$ C/ j/ K
; [/ q4 S6 e% W' Q) ?' F! l6 m6. 网络编程3 R0 Y& ?: P3 D" @: B2 p8 i* I: f3 X4 w
这里所指的网络编程是指socket编程。现在C++的应用很多都是在做服务器开发,如何开发一个高并发、大吞吐量、高稳定性的服务器就是我们要考虑的了。$ N3 u2 D3 B9 X: O4 O, G
! r' V* ?: f+ R& j
1 Z# H5 M7 L, }$ _+ S9 C1 M4 b" O9 {( F. W- M, m- k
C2 T$ v- y. ^9 v3 m0 y7. 设计模式' M9 x, L& L* o/ m
- f$ u$ d4 Z7 Q8 i# } r" z- ^设计模式不是具体的技术,更多的是如何让代码更容易阅读、更好扩展、更容易使用。3 Z4 @' ]* b& X
( O. z0 z# R% n6 k. B
; r, ^0 C4 l" u: a) F8 l1 W9 Z! b$ ~( P1 t1 F4 g) a: |
, A1 K8 f7 ?: B' \8. 库的使用$ u: A3 W" M, d% P" ^
C++标准库仅仅提供了一些很基本的功能,所以我们经常会引入一些第三方库。最著名的恐怕就是被称为准标准库的boost库,它提供了我们编程中用到的各方面的技术,文本处理、算法、网络、多线程、图像处理等等,几乎无所不包。其它也有一些专著于某一方面的库,比如ACE是网络通信方面的,TinyXML是解析xml的,OGRE是图形渲染方面的。0 B, b; z! W, r5 Z* y1 r; R5 h' f
# \. Q X! A0 m0 S$ [
c# V$ {+ m# z$ G/ n( D$ s! D6 X9 _8 |: u* ^/ J3 ~5 F$ J. {' R; n$ V/ s# {8 M" U
9. 操作系统的知识
% q w: Q: z. l4 Y+ K- B程序员需要了解的操作系统知识和普通用户是不一样的,一个高手是需要深入了解操作系统的方方面面,而不是停留在使用层面。至于应该了解哪些知识,windows上的去看《windows核心编程》,linux的去看《深入理解linux内核》,应该可以知道自己应该学什么了。7 m6 I! C" C6 G, o# A
% H$ ^5 Y" j8 L9 N% `0 F8 d( _, ~. o4 ^) }+ ^/ B5 p, V. J) x* [: |1 h
二、项目经验
6 l% Z( ~/ [- t4 c- c以上的内容如果都精通了,也算是个比较厉害的程序员了。但是对程序员来说,项目经验更加重要。一个好的项目可以让你把各种技术进行综合运用,并且能学到一些新的知识。比如说做游戏的就需要学习图形方面的知识,做播放器的要学习编解码器方面的知识。9 O! B: a, ]/ i8 y) J6 [. ]% B' I( G, A
1 t1 M8 }" W- l5 W8 _+ [/ G: o& W$ b" k: {/ q8 d
' a: x( I$ W; S' n, {7 i7 }. Z
很多程序员会忽略项目的经验,而单纯的谈技术能力,这是错误的。其实这就是理论和实践的关系,技术就是理论知识,做项目就是实践,理论对实践有知道作用,实践能加深我们对理论的深入理解。; u& m- \8 X* p/ o' _* y% A9 T d, g/ q( s2 p8 x: {
! i, K9 s d: I1 U5 W" u- x4 e
& r! _% w( p' |9 X. J2 v, j3 Q( n$ J4 h9 T3 g; {& a' u
三、沟通能力
; d2 T- i+ t9 p3 h) z沟通能力是一个高级程序员要具备的软实力。; Y& G% g: X8 f; S2 X1 V) W. [, \5 q7 f7 {1 u
我这里想说的沟通能力并不是一般说的能说会道,夸夸其谈,说话天花乱坠。而是建立在技术基础之上的沟通能力。, }/ w t$ k* n1 D% n+ h" }# }
|
|