小白入行IT到底难不难?
感觉进步缓慢怎么办?
感觉要学的东西越来越多?
遇到了瓶颈应该怎么度过?
……
许多想要转行IT的同学或者程序员朋友们可能会有以上疑问?到底答案如何,本文为大家介绍一篇资深程序员的文章,看看关于程序员这个行业,程序员有几个发展阶段,他是怎么说的。
大凡提到读书、学习,都几乎会提到“计划”、“方向”、“坚持”、“静心”、“总结”、“思考”、“实践”这些个关键词。其实都是没错的,如果日积月累下来,你最大的感悟往往也就是沉淀于此。而所谓“知易行难”。
我在这篇文章里想尽可能从“自己作为一名程序员”的角色及历程——来做些思考,算是对自己学习过程的一个审视。
想了想,我的知识积累过程大抵分为四个阶段。
第一阶段:困惑期
这个阶段往往是小白阶段,要么经验积累不够,要么是重大技术转型阶段。
以前刚出道时,写的基本是C++的GUI应用和Foxbase管理信息系统,之后的技术发展逐渐向Web趋势演进,而Web应用从程序模式到部署模式都完全不同,以至于当年着实跌了不少跟头。
记得刚涉足Web开发时,即使是拿着一本类似“21天精通”这样的入门书,也是走得跌跌撞撞。啥IIS、Apache应用服务器、请求/响应、Cookie/Session、Servlet……陌生到一度让我怀疑人生。
这个阶段也许一个月才能写出一个聊天HelloWorld程序,心境往往起伏得厉害。但万事开头难,这个阶段一定是要坚持、坚持再坚持,而且尽量沉下心学会控制情绪,千万不要怨自己基础不够、脑袋不灵光。你咬牙坚持个一段时光,相信就可以进入“发展期”。优秀的人在这个阶段:“不贪进度,稳扎稳打,愿意打破砂锅寻到底”。
第二阶段:发展期
在“打破砂锅寻到底”的模式下,随着之前的障碍逐个被击破,我觉得啃一部入门书确实越来越轻松了,这个阶段学得快也学得多,而且过程中冒出的问题越来越多,比如“要添加一个图表咋办?”、“想整个带编辑、删除功能的翻页列表咋整?”之类的问题。这时候我往往是把这些点记录下来,但不打断自己(跟书或跟计划)学习的节奏,好比“没学会走之前不要试图学飞”。
这个阶段让我想到小时候刚学会骑自行车,心里欢喜得不得了,有一次竟然忘乎所以,豪情万丈般地撒开手把子想让车子自己保持平衡,结果一下子连人带车就扎到路边土沟里去了。此时其实就是个“半桶水”阶段,摸着了门槛但切勿得意忘形,还是扎扎实实跟着书本或计划学基础为妙。
第三阶段:瓶颈期
基础的内容掌握了,积累的困惑又呈现出了越来越多的趋势。因为我已经不满足温饱,想做得更好了。这就是往更高层次发展过程中会遇到的障碍,一种“书我都读完了也理解了,但就是在实践中感到无从下手”的感觉。
想要进一步提升自己,基本也就是靠“继续学习深入的知识”跟“不断尝试/实践去解决问题”这两个方式并重了。如果你完成了第一个翻页控件,是会有不小的成就感的。随着一方面博览群书、另一方面不断勇于解决问题,这个瓶颈期就会在不知不觉中慢慢地度过去。
这个过程是最关键的阶段,在这里学到的、掌握到的都是行走江湖的真功夫。而且经历了这个过程,就基本能把程序员分出个三六九等来。
第四阶段:自由期
苦尽甘来后发现自己已经到了一个相当高度了。一方面经验积累得很丰富,另一方面能做到触类旁通。在这个阶段你再学新知识、探索新方向,其实都能进展得比较顺利。此时的你厚积薄发,打通任督二脉,原力生生不息。
这个阶段基本不会有什么困惑,而且也更能主动式学习及洞察事物趋势。一年学个两门语言不在话下。爱学啥学啥。但如果要深度运用新知识,则仍有一个小周期:进展期->瓶颈期->自由期,只是周期缩短了不少,再也不会像第一次蜕变过程那般痛苦不堪了。
到达这个阶段可不容易,可能之前你早已摔得遍体鳞伤了……
阶段和过程摆在那儿,但要成就一名杰出的程序员、工程师、架构师甚至管理者、创业者,都需要个人具备一些优秀特质:
1、能够沉浸其中,“做一行爱一行”,也就是通俗意义上的“兴趣”;
2、熟稔总结之道。我一般喜欢联想,比如这个内容书上是这么讲的,但再延伸一下问题应该怎么解决呢?或者把模糊之处,自己用文字和代码把它展开,甚至封装起来进一步抽象。把这些方方面面的问题点、难点逐个突破,一点一滴地抽象成自己的知识库、工具库,一定程度之后各种现实问题几乎都能从中挑出答案;
3、不满足现状。程序能跑了,但能跑得更好吗?代码实现能更简洁优雅些吗?就算是生产环境你不能随意更改,你也应该在自己的环境或测试环境中去尝试改进代码——得出的经验教训都是你自己的收获。而且只有不满足现状,你才更可能去主动式思考与学习;
4、周边知识的探索,算法、架构模式、设计模式、语言/技术新版本、新概念/新架构等等,不要觉得累。一旦你觉得累你就差不多走不远了;
5、锻炼身体——比如我现在学习武当太极拳;有一门其他爱好——比如我现在学习武当太极拳。