当一个软件技术人员选择了自己的发展方向后,应该怎么为实现目标打下良好的基础呢?这里,我们要讲述的是软件技术人员需在学习哪教学法知识,以及如果训练自己的思维方式和软件开发习惯。
Ø 助推器一:软件基础知识
首先,要充分学习软件基础知识,当一个初学者接触软件开发的时候往往想马上就能动手开始开发,这是一个普遍的现象。现代的软件语繁多,很多语言开发起来异常方便,看一本书就可以上手开发了,然后,这样的情形往往会误导技术人员,当你沿着这种“方便”的开发道路走下去的时候,几年后你会发现,自己的进步不是很大,自己开发了很多应用,但是为什么拿不了高工资,进不了大公司呢?我想,这是因为软件基础知道缺乏,造成了发展空间的有限性。试想一下,,没有很深的地基怎么可能建设高楼大厦呢?在平地造房,就只能造平房。软件技术人员的发展和建楼的道理是一样的,只有打下了深厚的基本功,你才可能在软件的道理上越走越远。
那么软件开发人员要具备那些基础知识呢?笔者那间首先要学习C语言。在C语言真正掌握的基础上在学习数据结构、操作系统、数据库等。这是基础,对于从事应用开发的技术人员来说,这些基础知识不一定要掌握到自己具有动手开发数据库和操作系统的能力,但是在掌握其中的概念,并在开发过程中娴熟的应用这些概念却是很重要的。
对于从事基于Java体系应用开发的技术人员来说,Java语言的基础非常的重要,在没有学懂、学透Java语言之前最好不要学习应用开发。如果没有良好的Java语言基础而只学习应用开发,很多时候只能知其然而不知其所以然,在软件技术道理上是不会走的太远的。
基础知识的学习是枯燥的、费脑筋。反复地学习,真正的理解这些基础知识才能为将来发展打下良好的基础。在这个学习阶段,一定要耐得住寂寞,花在多的时候都是值得的。
Ø 助推器二:应用系统知识体系
在具备一定的基础知识的基础上就可以学习应用知识了。对于具备良好基础知识的人来说,应用知识的学习会变得很简单,而且会理解很深刻。对于一个Java工程师来说,典型的应用知识就是基于JSP、JavaScript、Servlet的Web应用开发。基于企业计算的Java分层、EJB、分布式计算的开发,其实就是J2EE定义企业应用开发知识。
那么,你该怎么分配基础知识和应用系统开发知识这两者的学习时间呢?在基础知识学习的时候,枯燥感、挫折感随时会向你袭来,然而这是你必须攻克的难关,基础知识的学习通常会花掉大量的时间,一项基础知识用去3个月、半年、一年是常事,不要着急,不要羡慕那上些已经能够开发应用程序的人;要知道,你学好了基础比他们走的更远。路遥知马力,想要使自己成为高手就要修炼内功,内功就是这些基础知识,花在多的时间都是值得的。应用知识通常是一个个的知识点,一个知识点学习很快就可以完成,几天完成一个应用知识的学习是常事,对于应用知识来说需要不断的积累,要成体系,当你的知识结构组成一个体系的时候你才能融会贯通,才会有系统级的提升。当然,应用知识的掌握程度和你的基础知识是否扎实有关。基础知识越扎实,对应用知识的理解就越深刻;否则你学到的应用知识也只是皮毛,而这点皮毛是不足以支持你走的更远的。
Ø 助推器三:软件思维方式
除了应该具备的基础知识和应用开发知识以外,良好的软件思维方式对于能力的提升也是很重要的,那么,应该具备哪些思维方式呢?
l 从框架入手
世界上很多事物仿佛都有共通性,当我们写文章的时候首先要拟提纲,建房的时候要先画蓝图、打地基和浇注框架。同样,我们开发软件的时候首先也要构思软件的框架。那么,什么是软件的框架呢?当我们接受一项任务的时候,会从任务的功能出发进行细分,将其分为适合开发语言的功能点,根据这些功能点构思软件的设计模式,然后确定这些设计由哪些程序来实现。这整个思维过程就是一个从框架入手的思维过程。
什么是框架呢?就是软件系统的提纲。这个系统在我们大脑里面已经形成了这5个功能块,我们以后的工作就是围绕这个框架展开的。这个过程叫做系统分析,或者叫做业务建模。
l 模块化(组件化)
软件是在框架构思的过程中自然会形成不同的模块,模块化思维就是在软件设计和架构的时候对于不同的功能采用不用的程序组来实现,而不是一个程序组具有所有的功能。
l 面向对象
面向对象的概念提出很久了,建立面向对象的思维方式对软件来开发者来说非常重要。面向对象的概念已经诞生了十多年了,这个概念几乎没有过非常清晰的阐述。笔者理解的是一种思维方式,是过程、实例、逻辑用对象的方式进行抽象和概括的思维过程。对象就是过程、实体、逻辑抽象和概括后的产物,这个产物就是类。对象时而是抽象的,时而是具体的,时而具有父子关系,时而具有包含关系,建立面向对象的思维就是要用一个类或是一组类来包装一个或者一组相关的过程、逻辑、实体的思维方式。
l 技术解决方案
当你在对面一项任务的时候,在构思完框架、模块之后,一个重要的问题就是采用什么样的技术解决方案。有时技术方案也会在模块化之前完成,因为很多时候模块化需要根据技术方案面定。
很多时候我们无须构思出高深的技术方案,技术方案重的是要合理,满足性能要求,在这种情况下越是简洁明了,越有利于开发维护。这个过程叫做系统架构和系统设计。
l 细致周到、逻辑严密
用细致周到、逻辑严密形容软件的思维方式,可见其重要性。软件性能是否稳定,客户满意和高低都和这种思维关系密切。这种思维好比是责任心,就是要求你预想各种可能遇到的情况并对这些情况提供处理方式。
对于软件的性能,还要考虑运行速度、对资源和占用等情况。如果不考虑这些情况,很可能一个简单的程序就会耗费大量的系统资源,甚至导致整个软件系统崩溃。
Ø 助推器四:软件过程的良好习惯
在学习了软件基础知识、应用知识体系,并建立了软件思维之后,通常已经能够成为一个优秀的程序员了,但这是不够的。对于一个软件工程师来说,路还要继续走下去,了解软件工程的规律是非常重要的。学习一些软件工程理论和软件工程规划也是有必要的。但是实际的工作中对于烦琐的软件工程规划也不可盲目追求,切不可为了规范而规范,为了模型面套用模型。一定要选择适合公司特点,适合自身项目特点的规范和过程。好的规范和过程可以控制开发的进程,可以避免一些风险,可以减少问题的出现。通常,我们需要有一个完整的需求、设计、代码、测试、评审过程。
Ø 蜕变的过程
软件开发这个职业有时候是残酷的,有些人说软件开发是“吃青春饭”。这话虽然不好听,可是也不无道理。作为一个软件技术开发者,如果始终从事低端的开发工作,随着年龄的增长,很可能被这个行业边缘公,甚至被淘汰出开发的队伍。到那时,“吃青春饭”这句话可能就变成了现实。面对这一残酷的现实,一个程序员必须不断的进步,必须在成长过程中不断的蜕变,才会在这一行业中站稳脚跟,才会在软件开发行业取得成绩。
图1-4说明了程序员和蜕变过程。
从图中可以看出,一个程序员从初级工程师开始成长,经历高级工程师、架构师、项目经理,最后可以成了部门经理或是技术总监。在这一过程中,程序员要经历三次蜕变。第一次从一个普工的工程师蜕变为核心工程师,这一过程是技术水平不断提升而积累的一个蜕变;第二次从高级工程师蜕变为项目经理或是架构师,要完成这个蜕变的过程则需要技术水平进一步提高,形成一个知识体系,积累大量的项目经验;第三次蜕变成了部门经理或理技术总监,这一过程是“管理”的蜕变,要完成这一过程,必须使自己成为一个优秀的管理者。
小结:
作为一个程序员,要知道自己的成长道路并不是一帆风顺,一定要了解自己的特点,了解软件行业的现状,为自己规划一条适合自己的道路。同时,要让自己不断“蜕变”,只有不断的蜕变才能成为软件行业的成功者,否则随着年龄的增长很难在这个行业中找到自己的定位。
一旦选择了软件开发的道路,就要不断的充实自己。对于程序员来说,一定要有扎实的软件基础,如果从事基于Java的系统开发,就一定要深刻的理解Java语言,这是一切的基础。同时,要形成知识体系,只有形成了知识体系才能对系统有整体的了解。另外,要不断训练自己的软件思维,多了解优秀的系统,形成良好的开发习惯。