! B1 m% U. y9 G7 @关于技术,很多本科生都存在诸多误区。初学者总喜欢追随牛逼的技术,实在过于盲目,找准自己的定位最重要。2 l% K9 v. k( `) g
, E' x0 J, t6 u! L! Q1 C7 ^6 T) L. l误区1:图形化的东西比非图形化东西更牛逼 6 ]- H8 \0 A% x! `0 C+ `$ p: z5 w8 M
多见于初学者,尤其是计算机专业新生(我大一的时候就是)。当时学校教了点C语言,一直都是控制台程序,面对黑窗口,我就各种百度看看怎么弄出图形化的东西,那时候才知道GUI这个缩写是啥意思(当初知道这个缩写的全称还小激动了一下下,果然我还是太年轻了),然后知道了WIN32、MFC这些名词。。确实只能说是知道名词。当时对着视频教程做了计算器,就是用VC++拖拖控件,视频里的人敲一句代码,我就敲一句。后面虽然弄出来了,但是感觉自己什么都不懂,只是依样画葫芦。这时我才意识到,还有很多基础没有打劳。6 p& f0 I* R0 M- O6 B( T x& v
% w# b! z! Y' \八卦一下,现在桌面客户端的开发工作并不多,所以大家谨慎选择这一技术方向。桌面端GUI技术一度火爆(MFC、Qt、WinForm、WPF、Swing……),但如今早已是互联网及移动互联网时代。所以大家真的要慎重选择。不过还是可以学习一下的,至少能加深你对编程语言以及设计模式的理解。7 ^; Z/ {2 s% T! }
R7 e% G* l. N: U4 S
误区2:非图形化的东西比图形化的东西更牛逼 4 _( l3 f5 m2 \+ T2 w , G0 s6 D3 x! [) \) Z5 I具体而言就比如说:后台技术比前端技术、客户端(Android、IOS)更牛逼。多见于有Linux背景的人(没错,说的就是我=_=|||)。3 h+ j3 c+ d. B& \+ I6 B
$ A6 j- N3 w0 b9 p) l我也一度这样认为,其实不然。这里和上一个误区一起澄清一下:技术本身没有高低优劣之分,但程序员对其有好恶之别。# X. \' q5 Q7 z& E
% H+ a! F! }2 z% }
另外要说明一下,不能说前端就简单,后台就更难,同样反过来说也不对。我只能说这完全是不同层面的东西,不能量化的去比较。前后端都自有其难点以及G点。你不能说你能处理后端复杂的并发、同步、高可用,那么你就能轻松地完成美观的网页及特效、处理麻烦的浏览器兼容、极尽所能地降低页面的加载速度。就好比同样是一双按在键盘上的手,那么钢琴家演奏优美的乐曲和程序员开发高性能的软件,哪个更困难?(比喻不一定贴切,但希望大家能明白这个意思) & i" S* T9 q4 e. H; s1 M2 S( x# i E' o/ N: [, h! p: h" g) |; s误区3:XXX是最美的语言/框架/平台/……5 @& W) z6 b0 I3 \$ x } m
2 H* ~$ f1 m' f0 r
多见于PHP程序员。哈哈,开个玩笑。这里不是在谈论谁是最好的语言,而是告诉大学生朋友们不要迷信论断。 1 d/ n7 l6 A$ B0 F& T2 H' Q ! d) x% P B! O4 V% a我大一的时候去图书馆看书,看到有JavaWeb的书,前言写的很清楚,痛陈了PHP和ASP.NET的缺点,阐述Java是多么优秀,OK。你可能也和我一样,在入门的时候经历过类似的事。我要告诉你的事,多翻几本书,你会看到ASP.NET和PHP书籍的前言写的同样精彩,你绝不会在ASP.NET的书里看到夸耀Java的句子。不同的技术自有其优劣,千万不要成为前言驱动的学习者。。: J; U( z; ?" }% u4 \/ L3 \) X) O
/ j) ]2 y, m$ e' E7 B: X4 q
继续八卦一下,虽然说不通技术自有其优劣,但是就目前国内形势来看,学习Java绝对是不错的投资,Java后台几乎占据了中国互联网企业后台的半壁江山。而.NET技术确实日薄西山。不过PHP现在依然有很顽强的生命力。 4 n9 c+ d3 L# w, G. @3 G5 j H% x% q: [# M6 \* `
另外还有一些经典论断: 5 B7 N. {( q# n) Q+ } W& m* \& ]. j. Y5 g! N( `4 s: E" T3 E* _
LAMP架构只适合中小企业; 2 t8 S% Z. J* ?8 J7 K( a$ ^1 _ + I* f Q8 \+ }" ^MySQL只能用于中小企业,大企业都用Oracle。等等。% A1 D: z7 i; E, w W/ X. p$ ]9 j
9 ?: Z' z9 D4 ?. f Q' o
这些论断从技术角度出发,确实无可非议,但却并不客观。见过一些朋友,对MySQL充满鄙夷,觉得MySQL很容易出现瓶颈之类的。其实我想说,阿里、腾讯都大量使用了MySQL。别问我为啥MySQL被这么大体量的公司采用(无外乎开源的好处和历史原因啦),我觉得,只要技术够屌,什么瓶颈都能克服。。+ O" i: y3 e4 v* Z' x; X
w, P' w* m: _7 |程序员 & V; H+ X3 \* c: Q0 E1 M" ]* y; [# I
2.学习那点事 8 n8 z0 J# n9 f r& x7 N& u1 m4 n5 l1 G+ E5 c4 O5 r( y% E5 L
2.1关于逃课 5 I9 ]# K" K, {# i . V0 p, K" `% d. h9 O1 r a4 c相信每一个大学生都逃过课,我也不例外,而且很多。我在谈逃课,其实也是从某个侧面来谈自学。之前有个网友和我咨询如何面试,如何准备之类的,他已经大三了。学校的课程完成的不错。但我感觉他还欠缺很多。要想找到好工作只靠老师教你那些东西是不够的,跟着学校的进度走,其实只会让你落后。我并非一味的鼓励大学生逃课,我的观点是要选择性的逃课(如果是好课那么即使不开课也要去蹭课的)。哪些课要逃呢? & ]1 {- o, M( e i7 B" l( R2 O4 Q " g5 u6 I1 }' M) C- o/ r1.无聊的课程。比如思修、毛概、马原统统要逃。别急着反驳我,就是逃课而已,不要形而上。我不是党员,也没有申请过。数学相关的课程,我只想说量力而行,数学确实对于程序员来说还算重要,但是不同岗位对数学的要求又不尽相同,你能应付就好好听,不能应付就。。 K) \! i; ?! f! y# k# F* i8 d7 `8 w0 e. v! ?
2.与你的技术方向无关。这个就要看你是不是计算机专业了,如果你是其他专业学生,但是对计算机感兴趣,相信很多课都是可以逃的了。或者比如你的技术栈是建立在Linux基础上的,但是学校有一门MFC编程的课,你有兴趣又有时间可以听听,没时间就逃,OK的。这个也是有个前提的,就是你能清楚的明白哪些课程是对你有帮助的。你说:“我学C++的,我把数据库的课逃了”。=_=||别说你读了我的文字。。' b; _& g! k. l o8 z8 j% ~- z! W
! i3 z7 A+ d- q3 q1 \, |' C
1.你已经掌握了的。相信会自学的孩子,都有这种情况,那就是在学校开课前,你就自学过了某门课程。那么等到开课以后你就可以逃了,我就是这样逃了Linux编程的课。当然你要清楚的了解自己到底掌握了多少,不要自己是一知半解,还自以为懂了,就不听课了。其实要逃这种课,你也不需要懂得太多,你只需要保证你比老师讲课的水平高就行了。我们有的老师,水平真心烂,不逃课对不起他。" {2 [1 Z2 n9 z2 A. U' P
, q- V, m3 d8 {- D( P
但是很多学生总是走极端,说到自学就一点课都不上了,看不起学校的课程安排。自己在寝室学个把月就能轻轻松松地做出网站或者APP。但是我想告诉你,你能做到的,别人同样能做到。有一句话说的很好: $ h4 {2 q; K0 T8 h: {1 g! t$ T- p0 T4 C6 D
你的工资不是和你的工作时间成正比,而是和你的不可替代性成正比。' Q8 T7 |! f A. m( l/ G$ l
; H. D% e& Q* w) m7 s" k
你和培训机构几个月量产出来的程序员差别在哪?仅仅是你没有给培训机构交学费吗?但你的技能和他们是差不多的啊。所以说学校教的基础课是很重要的,最直接的好处就是笔试,笔试考的就是基础。然后这对你长期的职业发展也是很有帮助的。你工作几年之后(可能就是一两年),发展肯定会遇到瓶颈。2 D# ^* }% V* }: n
' x: j. q* K$ \6 O' B/ p4 i2.2关于读书' B9 |8 y& y( |
5 [* N3 N+ x K% E5 H9 ^0 U多读书,读好书/ j l2 G; s) K0 D
. c& s8 n; f- _) a) x! U" r i这是一句老掉牙的话了,但是事实就是如此,阅读经典书籍,你的投资回报率其实远高于阅读低质量的书籍。那么什么是低质量的书籍呢?比如《21天精通XXX》之类的。但是不管读什么书,都不能盲目跟风、囫囵吞枣。在网上,生活中经常看到各种索要书单的网友,借鉴别人的书单是可以得,但是直接照搬照抄则是不明智的。因为每个人已有的知识储备是不一样的,别人阅读的书籍不一定适合你。所以阅读合适的书籍也是一种重要的命题。 2 ?) }0 ~) z- _' L T0 H0 f) }( c, ~ e, H3 }: d; a/ J! a/ R
阅读合适的书籍% _8 E% f4 [+ w5 ?# u
$ J' C5 v& d& i- T: |$ |) ~
那什么是不合适的书籍呢?我认为有如下几类: ; e, z/ r) I0 V( q+ ]5 F; \0 O- a& z: e* V. b" r6 V
1.与自己的技术栈毫不相干的。这相关与否是建立在你已经做了清晰的职业规划的基础上,并且通过搜集信息能够自己辨识哪些是和自己的技术栈相关的,哪些是不相关的。当然,我并不是鼓吹大家技能点越单一越好,技术人员当然需要不停扩充知识面,但是对于大学生而言,这要建立在你在主要的技术栈上的积累已经足够多的时候(足以应付面试),不然东一榔头,西一棒槌,最后只能样样稀松。 * n, o9 n r1 h; s$ A% p( _2 }" {$ S3 {7 U3 o9 s3 K
1.超出自己能力范围的。虽然我前面说要读好书,要读经典书籍,但是一定要量力而行。很多经典书籍的阅读需要一定的基础,如果你只看到了别人对这本书推崇备至就开始强行阅读,最后通常也不多是走马观花,像读小说一样读完了而已,最后什么都没学到,还浪费了时间。老子说“企者不立,跨者不行”就是这么个道理。% K) r& d1 x2 {! ]/ j
0 S. o' W9 K7 j; @" y0 Q1.知识点与自身已具备知识过度重合的。面对一本经典书籍,可能你已经具备了那本书中所阐述的绝大部分知识,那么还有没有必要读呢?我的建议是:可以查漏补缺,但不要通读。很多经典书籍,单拿出一本来说都是值得阅读的,但是放到一起就不一定了。因为两本书籍可能70%甚至80%的内容类似,这时你读完一本,再通读另一本就没有必要了,比如我读了《C++Primer》就没再去读《C++PrimerPlus》了。当然你可以阅读不重合的部分,这需要你有较强的辨识能力。& L" j7 Z* C2 K6 k7 O6 t+ I
+ d* X: i) L, T《C++PrimerPlus》虽然从名字上看起来像是《C++Primer》的加强版,但其实并不是。它们是不同的作者,并且从风评来看《C++PrimerPlus》貌似比《C++Primer》还要基础一些。。9 b# @ T/ x- F6 X& W
: s# J5 Q) g' P# ?0 C
善待图书馆9 C$ ~0 k% ?2 N% p% A9 t3 r
: M8 q) j9 O8 y请大家一定一定要善待图书馆。说实话我大学几年对我们学校并没过多好感,但是唯一让我不舍的就是图书馆。相比电子书,我更喜欢那种手指翻阅纸张时那种真实的触感。大学临近尾声,这几个月疯狂的去图书馆借书读书。上个月竟然发现图书馆新购入了好几本好书,可惜的是我实在是没时间读了。哎,突然发现自己一直以来都是不太会读书的人,从大一到大四都借过不少书,但真正能读完的并没有几本。当然了,前面我也提到了,有些书是不适合通读的。但仍旧有很多需要通读的书籍被我丢弃,直到最近几个月才认认真真地读了基本完整的。) U2 B) V* S! v: D% q9 D
( c, B2 J! |8 }“书非借不能读”% ?; z# X" Y/ ]; ^, p8 E
6 _. Q( u d% E/ ~9 O很朴素的一个真理,借的书因为是时间限制,所以会逼迫你阅读。而如果是你自己买的书,你潜意识就会觉得“啥时候读都一样”。当然这是对自制力不强的同学们说的。/ g F4 \/ P6 A4 @ |* R0 ^
; i- W& k6 _- a6 {, z: s; b# F2.3打造自己的技术栈 ; ?- s3 a. L) c) p; }( _! M* q4 n4 M2 f; w* Z: N
技术栈,或者叫技术体系、知识体系。首技术栈起于编程语言却又不止于编程语言。你可以多尝试,然后找到自己喜爱的技术方向开发深挖。然而很多学生通常会在起步的时候就陷入迷茫。在网上看到过一个人,想学web开发,各种调研,然后向别人征求意见该学哪门语言比较好,哪个框架更有优势。后面大概过了半年,他还在纠结该选哪一个。。) _# C& }# @0 h5 B5 g
; {; @; \& l4 [# X# q, `2 L! |: G我只想说:先跑起来。语言很重要但并没有那么重要。无论语言还是框架这些都是工具,在这些工具的使用过程中提炼出的思想、方法、认知才是你的能力。有了能力,即使你换了语言,换了框架照样能快速上手。我觉得大公司一般不会计较你对某一框架的API熟悉不熟悉,他更看重的是你对框架背后的设计哲学和原理是否了解。 5 t; i; N& F+ W; U9 f; y( b+ X: ?9 d' H' }$ h+ P& M- L
技术栈就像一棵大树,树根可能是操作系统、网络、算法、数据库。再靠上一点是编程语言。接着树干就是你的职业方向,可以是安卓、IOS、前端、后台等等。别忘了还有树枝和树叶。技术没有孤岛。把自己封闭在闭塞的圈子内十分危险。你应该是具备了深度的同时再拥有广度,请注意拥有深度是前提。* X. o$ G5 y+ X4 u: {$ b7 t; P
" v- F% F1 R* _2 }/ B
没有什么东西绝对该学或者绝对不该学的,切忌盲从,照搬照抄别人的学习经历,强迫自己看别人的书单。谁说你是后台的就不能看前端的东西?在你后台技术成熟之后是可以的,这样也能加深你对整体架构的理解。 8 ]+ n* O& ?* w5 Y2 y% K) G8 o3 F6 }2 W9 i
另外这些树枝和树叶上悬挂着的也可能NoSQL、Git或者Docker等,你不需要在每个方面都是专家,但你应该对新技术抱有好奇心。 3 R5 k, O$ v9 q0 n! [9 G+ w1 R. c7 \5 e
2.4深度思考和提炼6 g# T# {1 B1 c) a8 O
1 R, o) }+ g6 }2 @
不管是前端还是后台,框架都是层出不穷的。每个都学,谁都会疲于学习。但实际上你并没有必要这么做,对于一个框架,记忆它的API永远是最低的技能,你要从中提炼出一些共性的知识点。比如后台框架,你学了之后你要记住的应该是URL路由、模板、权限控制、MVC的设计等等。那么你换一个框架,即使有不同,你也能快速上手,思维上只是换一套API,接着补一下个别差异,新特征而以。对于编程语言的学习也是如此。( q+ Q. j+ U# }+ h- E