软件工程师的大学规划想做软件工程师的技术上需要学习计算机组成与操作系统原理、开发语言、数据库和网络等四大块的知识。
实际中的开发则一般用到开发语言和数据库两部份,后面我也会对这两块着重进行介绍。
由于我们开发的管理系统基本上都是C/S模式,所以在我们对网络这部分的知识也要掌握。
至少应学会如何架设一个局域网。
企业管理软件与互联网产品,基本上都是应用型的产品,不像操作系统、办公软件等基础类软件涉及大量底层技术,这也是信管电商专业的计算机方面的学习要求整体上没有计算机科学与技术、软件工程等专业高的一个原因。
像计算机组成原理、操作系统原理、计算机网络、汇编语言和编译原理等课程,如果仅仅是想从事上面两种产品的开发的话,可以不用钻研得太深入。
当然,这并不代表可以忽略或轻视,对所有想从事开发的人来说,这些其实都是基础,基础不打好,以后想走得更远就会很难,例如想成为架构师基本上不可能。
我们学校信管电商两个专业是不学汇编语言和编译原理这两门课的,同时在实际的开发中,基本上也用不到,但对于搞系统开发的我们来说,了解一下也是需要的,但不用太深。
基础性的东西,学习的难度比较大,好在这些课程一般都安排在大一、大二,大家有充裕的时间去钻研。
在开发语言技术当中,我们接触得最早的就是C语言和数据结构。
现在实际开发当中基本不会用到C语言,但在学习C语言过程中所学习的常量、变量、运算符、表达式、条件/循环语句、数据类型、函数等概念是一切开发语言的骨架。
学了C语言后,再结合数据结构这一门课程(这门课程也穿插了一些算法的讲解),基本上就掌握了程序开发的核心,书上常说的程序=数据结构+算法,就是这个道理。
当然,这两门课程许多时候面对的都是很抽像的数学模型,学习的过程中我们就可以通过研究书本上的代码例子来理解,并尝试着将看过的例子自己用代码写出来。
到了课程快结束时,老师会布置课程设计,任务一般是写一个像推箱子游戏这样的比较综合的小软件,这个时候,如果自己不会的,就要找别人的代码来研究,然后尝试着自己再写一次。
开发技术基本都这样,单靠看是掌握不了的,还得动手,动手的过程中可以通过研究别人的代码来获得一种思路。
我们学校08、09级的信管、电商两个专业都是在大一第二学期学习C语言,并且相对来说信管的要求会高一些。
由于我们系的发展发向是偏向管理系统(从专业名称也可知),所以我们的课程设计基本上都是管理系统,很少会做推箱子、贪吃蛇类的小游戏软件。
而在课程设计的过程中同于需要我们自己动手敲写代码(只复制别人代码的人需要注意了!),所以是我们真正能学习到C语言的时候,我们的编程思维和编程习惯也是在这时开始培养起来的,因此一定要重视第一次的课程设计。
数据结构电商是大二第一学期学习,信管是大二第二学期学习。
学习这门课程一定需要有C语言的基础,不然学起来会相当费力。
电商专业的学生会好一点,毕竟上一个学习才学了C语言,不会遗忘得太多,而信管专业的人就要注意了,由于大二第一学期基本上只学数学类的课程,没什么机会再次接触编程,所以要求信管的学生,在大二第一学期最后自已有空的时候复习一下C语言,或者先学习一些别的较先进的编程语言,如C++,C#,Java,当然自己去编写一下小程序是最好的,总之是要保持自己的编程感觉。
同时要说明的是学习数据结构最主要学的是数据结构的思想,虽然在实际的编程中用不太到它,但它其中的思维方式是需要我们掌握的。
相同的,大二第二学期,信管专业还会学习操作系统这一门课,学习其中的思想才是最重要的,一定要想办法用C语言或Java(推荐用C语言)实现其课程要求。
到了大二的时候,就会进入到在实际中经常用的面向对象语言的学习,一般是Java或C#。
有了前面的基础,这两种语言学起来就会很快。
这个时候,除了书本上的理论和例子,还可以找一些如《C#程序开发范例宝典》等这样的实例型的书来配合学习。
应该是学习Java,信管、电商都是在大二第二学期学习。
在学习该课程时将会学到“面向对象”这一非常非常重要的概念,一定要彻底掌握这一概念。
它是我们整个系统开发的核心思想。
但同时也不要废弃掉了“面向过程”这一概念(C语言就是面向过程的),因为“面向对象”的里面就是“面向过程”,没有“面向过程”的基础是学不好“面向对象”的。
在学习这两种语言的过程中,会接触到一种叫JDBC或ADO的技术,主要是用来将Java、C#等语言的应用程序跟数据库相连的。
这个时候,数据库的概念就水到渠成地引了出来,数据库的原理和工具的学习也就提上了日程。
常用的数据库,一般有MySQL、SQL Server和Oracle三种,对于初学者,建议多用MySQL,因为它的操作是以写代码的形式进行的,这更有利于对SQL语句的掌握。
数据库电商是大二第二学期学习,信管是大三第一学期学习。
数据库是我们系统开发的基础。
一个系统的好坏,可以从数据库的设计中看出来。
同时是否和数据库交互数据也是静态和动态网页最主要的差别。
JDBC只是将数据库中的数据抽取出来,那应该怎样将这些数据显示出来呢?一般有传统的图形界面和网页两种形式,分别对应我们常见的桌面软件和网页。
实际中许多大型的企业管理软件、网络游戏和个人应用软件都是桌面软件的形式,而大部份的互联网产品则是网页形式。
桌面类的Java和C#都有自己的如AWT等的图形库用以显示。
如果是网页产品的话,就会用到另一种技术:客户端语言,最基本的是HTML、CSS、JavaScript和Ajax。
近年来,客户端领域又出现了一种以AIR、WPF、Flex和SliverLight为代表的RIA的技术,集成了桌面软件和WEB软件的优点。
我们基本上开发的都是网页产品,比较少开发桌面系统。
HTML、CSS、JavaScript和Ajax就是系统开发中的“前台”技术,当然也应该包括美工方面的技术,如PhotoShop。
同时需要说明的是图形界面由于SUN公司和微软公司的竞争,基本不再使用图形界面技术,所以在学习Java时,对图形界面只需了解即可。
有客户端,就有服务器端,与Java相对的服务器端技术是JSP、Servlet 和JavaBean,而C#的则是ASP、.NET等。
对于这种网页形式的开发,一般叫WEB开发,想往这个方向发展的,就要继续研究三层架构和MVC模式。
对于Java的,常用的MVC模式应用除了前面提到的JSP+Servlet+JavaBean外,还有一些相对来说更重量级的开源框架,如Struts+Spring+Hibernate/iBatis,即是我们经常说的SSH/SSI框架了。
对于C#的,主要就是。
以上介绍的就是“后台”技术,而当下我们使用最多的就是SSH框架,而JSP、Servlet和JavaBean是基础核心,SSH是MVC的一个实例,可以把它看成是一种将各种常用功能封装好后的工具。
Java和c#的在WEB方面的应用相对来说都比较重量级,适应不了当下互联网“快”的需求,所以一般用于B/S架构的如Saas的企业管理软件或逻辑相对复杂的WEB产品的开发。
而逻辑相对简单但对用户体验要求较高的WEB产品,一般都用另一种语言PHP,它最符合敏捷开发的要求,开发速度很快。
在此大家应该通过分清JSP、ASP+.net、PHP三大阵营的区别和优劣势。
客户端和服务器端之间怎样通讯?对于网页的,除了上述的客户端和服务端技术外,还需要学习XML、JSON。
而对于桌面软件,则涉及到网络编程的问题,像Java中的Socket、RMI等技术就是专门介绍这方面的。
另外,想从事像网络游戏、QQ等即时通讯软件、下载软件、安全软件等这样的综合了传统图形界面和网络通讯的互联网产品的开发的话,用Java和C#是不够的,得学习C++语言。
前面提到重量级这个概念,其实,对于一些如企业级的应用(主要是企业管理软件),Java还有一种叫EJB的技术,要了解的话就要深入的学习J2EE 的知识了。
想专攻企业级产品的,还要学习另一个领域的知识:中间件,典型的代表有CORBAR和COM。
那么,为什么会有客户端和服务器端这两个概念?这其中就要涉及到计算机网络的知识了,想要深入了解网络的原理和实际中的组建技术,就要学习计算机网络和组网技术这两门课程。
计算机网络的知识很重要,因为许多产品在架构的过程中,需要对产品的网络架构进行设计。
如果单纯是看书的话,很难掌握得了实际的网络布局知识,大家可以利用大一或大二的时间加入到学校的网络中心中去学习。
电商大二第二学期将会学习《计算机网络》,而信管是大三第一学期(非常多的课程,电商比信管早一个学期学,但信管对课程的要求比较高)。
但课程中学的理论比实践多,大家应该多去尝试。
软件开发的过程也不是一蹴而就的,除了写代码,还要有前期的需求分析、系统设计和后期的测试和部署,所以除了单纯的技术学习,我们还得学习软件工程的相关知识,了解实际中,一款软件从确定要开发到最终上线要经过哪些环节。
当然,我们不必去找软件工程这本书,管理信息系统(MIS)这门课和课程设计就足够了。
管理信息系统(MIS)是信管专业的核心,重要性就不用多说了,学好该门课程可以促进往后开发出高质量的系统需要学习的理论整体上就这么多,接下来就是不断的实践了。
上面介绍的这些技术,都是专门针对开发过程中的某一个对象或环节的,但真正开发一款产品时,就会综合利用上面的种种技术,通过一些如企业网站、网上商城等的项目案例(可以买如《Java数据库系统开发案例精选》等案例介绍型的书获得)的学习,我们就能知道,在实际中,这些技术是怎样被利用起来的,一个软件又是怎样被编写出来的。
当然,这只是走出第一步,接下来,就需要你自己动手去编写一些系统。
动手编写是学好编程的不二法门,只有编得多才能学得好,学得快,同时达到一定程度后会发现再学一门技术的时候,这时已经可以不用跟着编写代码了,但这是建立在对代码非常熟悉的基础上。
在实际的编写过程中,你会遇到大量的像注册登录、验证码、分页显示、购物车、搜索、统计查询等的模块,找一些像《Java Web开发典型模块大全》这样的模块介绍的书来研究,你的技术就会得到迅速的提升。
在我们的平台上,会有非常多的实践机会,但能不能把握看个人的努力。
一定的实践后,我们很容易的就会陷入这样一种困境:总觉得有数不尽的技术要学习,觉得自己完全是被拖着走。
这其实是还没有对自己所学的技术形成一个体系的表现,所以在实践了一段时间后,就得对自己所学过的种种技术进行整理和总结,像《Java Web开发技术方案宝典》这样的书,就很清晰地为我们总结出了开发模式选择、页面设计、数据持久化、数据检索等9种方案。
除了自学,技术的学习更多的时候需要到团队中去实战,像数据库和MIS的课程设计就是一个很好的机会。
到了大三的时候,一些老师就会招一些同学去帮忙做一些项目,真正想要做开发的,就要努力把握住这些机会。