IT从业者自我修炼之道

多年前在CSDN上写的一个随笔,自己转过来玩玩。

http://blog.csdn.net/rmlgwu/article/details/42016483

       2005年走上程序设计这条路开始,多年来,一直忙忙碌碌,各类软件项目一个接一个开发,各类MIS系统、GIS系统、CRM系统、嵌入式开发、WEB类项目开发等,做到后来感觉对自己已经没有多大提高了。由于项目规模都不是很大,基本上项目组都是在5个人之内。而且项目组成员除了参与开发之外,且项目组成员还承担很多其他任务(而且经常出现其他任务的重要性比项目开发更紧迫的情况),很多时候都是自己什么事情都是一肩挑。从一开始跟用户接触开始,帮助用户完成需求分析;辅助用户完成需求确认;进行系统概要设计;进行系统详细设计和数据库设计等;跟项目组一起进行开发任务分工制定WBS;组织大家将完成的程序进行系统集成(在开发WEB系统的时候,借助SVN等工具确实可以提高团队的开发效率,但在开发桌面程序的时候系统集成确实是件耗时耗力的事);组织系统内部测试;对用户进行系统使用培训;系统上线运行并安排保障人员维护等。整个过程是充满煎熬的,特别是在遇到比较难缠的用户在开发过程中不断更改用户需求,对系统的开发周期和人员的心理会造成非常大的影响。

    说了这么多,重新回到初始话题。对于有意从事与计算机相关行业者来说,如何学习编写计算机程序?如何让成为软件开发高手?这里面有没有捷径?我想从自己多年的实践经验出发,给后来者一点建议,如果觉得我的建议还有可取之处,请大家拍砖;如果觉得我写的不好,也请手下留情,权当一笑置之。

    要从事计算机相关的行业,特别是走程序员、软件设计师、系统分析师这样的标准化成长路线。对从业者最基础的要求就是要保持一颗充满激情、积极好学的心态。本人才疏学浅,见识有限,且表达能力有限,有很多地方可能会写的不全面,甚至会出现不尽正确的地方,也请大家不吝指出。《IT从业者自我修炼之道》可以划分为四个阶段,暂且称为:基础篇、实践篇、进阶篇和沉思篇,下面对每个阶段需要掌握的内容和达到的目标进行逐一阐述。

   (一)基础篇

   基础篇主要针对有意学习计算机程序的人员(已经学习过程序设计语言的人员可以跳过),在这个阶段主要通过学习一门程序设计语言,达到了解程序设计的目的。程序设计是一门实践性非常强的工作,看再多的理论,都得从Programming开始。

   虽然软件开发行业盛行面向对象技术,但是我建议没有学过程序设计的人首选C语言。C语言虽然被称为一种标准的面向过程的程序设计语言,似乎与现在主流的面向对象思想不太吻合,但是C语言从1972年诞生风靡至今,自然有他可取之处,而且创始人丹尼斯.里奇因此获了图灵奖。在学习完C语言后,可以继续学习一门面向对象程序设计语言,鉴于目前计算机程序开发的现状,建议学习C++、C#或者Java。在这三门语言里,个人认为C++稍显复杂,难度稍大;C#上手比较快,目前使用群体也比较多,但由于其与Windows系统的捆绑,导致应用平台有限,开发出来的桌面应用程序只能在Windows系统平台中使用,如果需要迁移到Linux等系统中,需要使用诸如QT等进行重新编译;Java由于其开发的程序具有跨越平台优势,程序员群体非常大,在学习过程中可借鉴的资料也多,特别是随着Android系统的推广,目前在程序设计语言的热度多年排在第一。

   在学习完语言后,建议学习一些关于数据结构的知识。编写计算机程序,其实质是为了处理数据,而数据结构就是组织数据的思想和方法,数据结构是超越具体的某种程序设计语言的。对数据结构的学习,是一个反复的过程,在初次学习完后,在后续具体系统开发过程中遇到问题时还需要回过头重温数据结构知识。

   完成基础阶段的学习后,应该进行多实践,可以尝试写一些小程序。此时的你,应该可以跃跃欲试,想进入实际项目中,真刀实枪的开发真正“实用”的应用程序。

   (二)实践篇

   在完成基础篇的学习后,可以进行一些实践,完成一些小型系统的开发。在这个阶段,可以结合需要完成的项目性质,选定一个开发工具(专业叫法IDE,集成开发环境)。

   如果要完成的项目是桌面应用程序(专业叫法C/S程序,客户端服务器应用程序)开发,如果使用C++语言的话,建议阅读《VC++技术内幕》和《深入浅出MFC》等实践性书目。当然,开发的程序通常需要处理大量的数据,这时候可能会使用到数据库,可能用到的数据库包括:ORACLE、DB2、SQLServer、MySQL、SQLite、Access、国产达梦、人大金仓、神州通用等。这些数据库各有各的特点,在使用操作上各不相同,但有些共性的东西,在编写程序对数据库进行数据存储和检索时都要用到结构化查询语言SQL,因此,基础的SQL语言需要掌握一些。而且开发的应用在访问数据库时可能会用到ADO、ODBC、JDBC等,对这些知识也需要掌握。鉴于所编写的桌面应用程序可能还涉及到多个程序跨计算机进行通信的问题,这时候还需要了解计算机网络中的TCP/IP知识,学习基于Socket的程序设计。如果开发有些,可能还需要学习DirectSDK相关知识,甚至学习三维建模工具3DMax、Creator、Maya等,以及OpenGL等模型驱动技术。

   在编写WEB程序(专业叫B/S程序,浏览器服务器程序)时,可能需要学习诸如HTML、CSS、Script、JQuery、ExtJS、Ajax、ASP.NET、JSP等具体的开发技术。如果你所在的开发团队缺少诸如UI设计人员,你可能还得掌握诸如Photoshop等图像处理软件,具备一定的美学修养,使开发出来的程序界面不至于太难看。

   编写移动端应用程序时,可能还需要针对不同的手机系统,学习诸如Android应用程序开发知识,或者Objective C应用程序开发的知识等。

   如果需要编写计算机病毒、安全防护程序,还可能需要学习一些汇编语言、Windows内核程序编写的知识等。

   当然,如果想了解现在的程序设计是如何从汇编语言演变到现在的基于API的程序设计,可能还需要学习编译原理之类的知识。

   在实践阶段需要学习的东西是最多的,也是最杂的,通常需要根据开发项目的需求,不断的学习积累。因此,能够从事软件开发的人,必须是一个善于学习的人。几年前,国内很多外行误认为从事计算机程序设计是吃青春饭的人,实际上这是错误的,像微软、甲骨文等大型软件公司中,程序员干到退休的大有人在。江湖传闻比尔.盖茨是绝顶的程序员,而且尤其擅长BASIC程序设计,但是很少有人见识到他真正的功力。套用当前比较流行的网络语就是“哥不在江湖,但是江湖还流传着哥的神话”。

   (三)进阶篇

   在长期的程序开发实践中,很多人开始反思如何使开发的软件更好,如何进行软件项目的管理,如何对开发的软件进行重构等途径。从上个世纪50、60年代开始,计算机行业就将软件开发作为工程来对待。软件工程,简单的说就是为了更好的对软件开发过程中人员、资金、时间等诸多因素进行管理,提高软件开发效率和性价比的一整套方法,属于方法论的范畴。关于软件工程的知识,需要掌握诸如瀑布模型、快速原型、增量模型、敏捷软件开发等模型和方法的适用范围,此外还需要掌握使用一些辅助工具进行系统的分析和设计,如使用Rational Rose、StartUML等工具完成对系统的分析和设计工作,要掌握编写完整的软件开发过程中各类文档的能力。通常,软件工程也是晋升到项目管理人必须掌握的知识。我接触的第一本软件工程著作《人月神话》,是美国两院院士Fredrick P.Brooks在20世纪80年代编写的一本经典书籍,畅销30多年,多年来一直高居软件工程丛书排行榜。

   在学习软件工程的同时,还需要学习一些关于设计模式的知识,这是程序员通向架构师的必须掌握的知识。设计模式,简单来说其实就是关于代码设计的一些经验总结。采用好的设计模式可以提高开发程序的可重用性,让编写的代码更容易被他人理解,提高代码的可维护性。设计模式是绝对值得每一个IT行业从业者反复研读的知识,也是最能体现面向对象程序设计精髓的地方。我记得我接触的第一本关于设计模式的书是《设计模式:可复用面向对象软件的基础》,这本书反复看了多遍,但是我现在也不能保证我对设计模式有多深的理解。后来又接触了《大话设计模式》、《设计模式之禅》等论述设计模式的著作。对设计模式的理解不是说你记住了六大原则,23种模式就算掌握。水平和技术的提高只有通过大量的项目实践,在实践后进行反思,需要经历一个量变引起质变的过程,质变的结果之一就是对设计模式有更深的理解和体会。

   在软件开发经验积累到一定程度后,很有必要对自己以往的开发进行反思。为此,软件行业提出了“重构”的概念,所谓重构并不是完全打翻重来,我们知道软件开发是一个过程,软件使用的人群、环境都可能在进行中发生变化,当初设计中的一些假设、条件都会变化,这就需要根据新的状况做出调整。“重构”是代码层面的重设计,是对原有代码的完善,消除代码中的腐臭味,让代码更健壮、效率更高、更易维护。这是软件开发的规律决定的,没有人能一次写出完善的代码。

   (四)沉思篇

  我一直纠结沉思篇里面写些什么内容,可能很多经验丰富的IT从业者最后都会感觉,其实软件开发完全是一个哲学层面、方法论层面、科学层面、甚至艺术层面的东西。本人认识水平有限,同时实在找不到合适的言语来表达,还是送“悟”这个字与大家共勉吧。

posted @ 2017-09-27 09:21  rmlg  阅读(151)  评论(0编辑  收藏  举报