⑴ 程序员初学者需要掌握哪些知识
如果做一个专业的程序员: 1.基础语言知识 :从底层的ASM 到结构化的C,到面向对象的C++ java,如果不能都精通,但是要了解,至少要精通一门 2.基础数学知识: 高等数学(数学分析) 线性代数 离散数学,概率.数理统计等等 3.基础计算机原理:操作系统原理,...
⑵ 一个标准的程序员需要学习哪些知识
我觉得作为一个标准的程序员,首先他要学习很多编程的工作以及技能,同时也要对一些操作系统的结构比较了解。这样她才能够在编程的时候,有条不紊地编出一个比较好的程序,同时他也应该有比较好的数学基础,因为程序设计其实也是一种数学问题
⑶ JAVA程序员需要掌握什么知识
给你个参考吧。
作为一个合格的Java软件工程师必须具备的条件?
这个问题是我一直想知道的。但是它又分为很多个方面...
比如,是掌握具体的技术,
还是,拥有很强的自学能力?
现在的软件方面跟新和升级特别快,
无论是什么知识,当你真正掌握它的时候,也许就已经被淘汰了。
所以这就要求我们不停的去学习...
所以自学能力很重要.
但是我觉得自控能力更重要...(悲哀...今天看了一天动画...)
我自认为是没有什么自控能力的人...
好了,再来说说技术方面。
到底现在该掌握些什么具体的知识呢?
这里,我真羡慕.net程序员...
从头到尾就一个.net framework(.net框架),
这样就可以很集中精力去深入学习它,而且不用担心会被淘汰...
而Java这边,洽洽相反框架满天飞,而且各有所长...
这就难免让人需要经历选择性的痛苦...(虽然原理都差不多)
而且还要根据公司的不同而使用不同的组合...
这就产生了n种集成方案...(崩溃啊...)
所以要全部学会几乎不可能啊...
虽然是这样,但是有点挑战性才有意思嘛...呵呵...
那么一个合格的java软件工程师究竟需要掌握哪些具体的知识呢?
下面就我个人的角度来总结一下,如有不足,也请高手指出。
(ps:本人只列出普遍常用的知识)
首先当然是Java语言本身了。Java语言的创始人曾说过"Java=C++--"。
什么意思?就是Java语言是在C++的基础上减去一些不必要的东西,使其更为实用,更具有生产力。
Java语言的语法很简单并不像C++那样复杂.(本人曾经接触过C++...伤心的经历...)
很多较为复杂的数据结构Java都能简单实现,而C++较为麻烦。
其中很大的原因是因为Java是单根结构.
而且Java的垃圾回收机制也有很大的功劳.(.net的垃圾回收机制也是Java的灵感)
但是如果想深入底层了解Java还是需要费很大的功夫的...
比如,你要学会javap命令去反编译java文件然后再去看懂那些反编译后的结果...
这样你才能了解Java语言的原理。
很多情况下不同的代码,但是最后产生的字节码是相同的。
也有些情况,虽然代码只相差一点但是效率是天壤之别。
(例如JDK5新添加的StringBuilder和StringBuffer的区别)
这些在都可以反映在字节码里。
关于Java语言的问题不是本文的重点,我就不多说了。
总之学好Java这门语言是基础中的基础。
其次,说到Java语言就不能不说面向对象(OO)。
Java语言的产生也有很大的一部分是为了生成一个具有生产力的OO语言。
为什么这样说?
在早些年代OO的思想虽然被提出,但是那些纯粹的OO语言却没有丝毫的生产力。
(如出名的:smalltalk它是100%的OO)
而Java在保持高度的OO的前提下更注重生产力。
(ps:Java是98%的OO,其中8种基本数据类型,static关键字,运算符等,这些都不OO)
所以随着软件工程的庞大OO的思想很重要。
好了,到这里如果以上你有所了解,并掌握的一般。那么就可以继续往下学习:
如果你想掌握Java语言中更精髓的东西,那么我建议你可以做一些小的桌面应用程序。
其中,你会学习到另一些知识:
并发,IO,GUI,AWT,Event,Listener,Socket,Reflect等java更深层的东西。
(当然,有些只需了解,因为有些东西将来在做B/S结构的系统上是用不到的...
如果将来你想从事嵌入式开发,这些你就要多一点了解了。
很可惜,我还没有想过去做那个...
还记得当我第一次了解AWT里的Event和Listener的实现方式后,
我觉得JDK的设计人员真是厉害,设计的是那么的巧妙,第一次感觉代码是那么优美,
里面用到了各种设计模式,真是让人惊讶。
遭了,又在自我陶醉了...)
回到正题,关于Java语言的基础,我就先讲到这。
当我们掌握了Java之后呢?
真正的Java开发现在才是开始:
这时我们必须要接触另外一样东西,
没错,那就是数据库!
数据库的重要性就不用我在这里强调了吧?
无论你学习什么技术,数据库都是必备品。
作为Java程序员,我们不是DBA,我们没有必要掌握太多的数据库的管理知识。
我们只要知道如何连接数据库进行访问和CRUD操作,并对一些地方提高效率就可以了。
如创建索引和适当的使用存储过程即可。
首先,学习什么样的数据库呢?
没办法,多了解一点吧...毕竟每个公司用的都不一样...
目前的4大主流数据库是必须要学习的:
DB2(IBM号称世界上用的最广泛的数据库,不过近些年已被MySQL慢慢侵蚀掉了.但是很多的大公司在用,毕竟是IBM啊。)
SQLServer(当年凭借SQLServer2000获得很大成功,由于和Microsoft的产品兼容很好,所以很受欢迎。)
MySQL(真正的轻量级啊...而且是低端的主流开源数据库,使用量已经超越DB2。)
Oracle("甲骨文","神谕","圣贤","哲人"...光是对Oracle这个单词的翻译就可以看出它多么拥有实力。不过大的有点夸张...)
好了,如果你已经会简单的使用上面的数据库了,那么就继续往下吧:
既然要访问数据库,那就离不开JDBC!
JDBC相信大家都知道,它只是一组接口,然后由不同的数据库厂家去实现,
这样用JDBC访问数据库的时候方法其实都是一样的,这里我就不多说了。
另外JDBC是将来ORM的底层实现,学习好了它,对ORM框架的实现就更为清楚原理。
下面重点要说说SQL语句。
SQL有2套标准(82和99),我不太确定...记得不太清楚了...
现在的数据库基本这2种都支持。
但是问题来了,不同的数据库,又对其改变了一点...
这是最令人头痛的...
也就是说,4种数据库,你就要记住4种SQL的区别是什么,虽然大体差不多,但是还是要区分开来的。
而且不同的数据库,对SQL语句又有不同的优化。
也就是同样的SQL语句在不同的数据库上执行的效率不同。
所以SQL语句也是一门必修之路啊...
而且不要看似简单,其实要想写出一条高效率的SQL语句很难啊...
尤其是在复杂的多表联合查询中,这种效率问题一定要考虑。
另外,最烦人的莫过于数据库程序设计。
每种数据库有自己的语法。如SQLServer里的T-SQL,Oracle里的PLSQL等...
使用这些语言编写触发器,存储过程等...自我感觉是最头疼的...而且用的不多...
了解一下就好...
好了,当学习完数据库.我们就可学习web开发了.
所谓的web开发,就是基于浏览器/服务器(B/S)的开发。
那么既然是在浏览器上跑的程序那么就离不开HTML、CSS、JavaScript、DOM等网页技术。
所以下一步就是学习HTML,HTML应该是最简单的标记语言.很容易就能学会。
根据web2.0的标准,XHTML将是规范。
所谓的XHTML其实和HTML4.0的规范差不多,就是标签的要求更加严厉了。
学习HTML的同时还要一起学习CSS,这个东西说简单,也简单,说难也难。就看你个人了。
但是毕竟我们不是美工,只要了解就好了。(有时我就在界面上消耗了很多时间...郁闷...)
JavaScript我个人建议还是要稍微花点功夫研究一下的...
毕竟后面涉及到Ajax和用户体验等方面需要用到它...
它是一门客户端脚本语言,即:浏览器解释执行。
是一种弱类型语言,但是研究起来还是很深奥的...
至于DOM本人还没有花时间研究过,不敢轻易下结论.
当完基本的网页技术后,就可以进入正题,Java在internet上的应用就从这里开始:
前面学习了网页技术后,我们就可以做出简单的静态网站。(即:没有与数据库交互.)
静态网站由后缀名为.html或.htm结尾。
但是静态网站是毫无用处的,所以我们要开发动态网站。
最古老的技术就是CGI(通用网关接口).
它根据浏览器端的http请求激活响应进程,每一个请求对应一个进程。(注意不是线程,是进程!)
当同时有很多请求时,程序挤占系统资源,造成效率低下。
目前流行的动态网页技术有:ASP、JSP、php、ASP.NET等...
这里我就不一一介绍他们了。关于他们的对比,网上比比皆是.
而今天的主角就是JSP!
JSP是什么?说白了就是在HTML里嵌入服务器端可执行的Java代码。
这里的Java代码和前面所说的Java代码是一样的。
这里要注意的是jsp最终会转换成servlet。
所以学好Jsp就要先学习servlet。
与applet对应,servlet顾名思义就是服务器端脚本。
这里是学习的重点。
其他的也没什么好讲的。
这里要掌握几个概念:servlet容器,IDE,taglib,DAO,MVC等...
servlet容器,就是解释执行servlet代码的地方。
IDE,前面我都没有提过,也就是因为前面的学习都很简单,并不需要IDE的支持。
而接下来的开发会比较复杂,文件数量的增多和管理会很麻烦,而且很多的API不可能都背下来。
所以这里就是使用IDE的时候了...至于用什么IDE本人觉得无所谓...
(我用的是最普遍的Eclipse,当然你也可以用NetBeans6.0以上版本.我觉得也很不错。)
taglib,这里用的比较少,以后学习框架用的比较多.
DAO,很重要。它的实现方式多种多样,值得研究。
MVC,很重要。但是重在理解,理解为什么要用MVC。
最后关于Http协议,Servlet容器里的线程池的实现等...
这些如果你有能力和时间就去看看...没有什么坏处...
学到这里,可能中间你会用到另一门技术XML!
作为java程序员来说,我觉的只要了解XML原理就可以了。
不可能还让你去写scherma或DTD的...
所以我们只要学习读写XML就可以了...(JDOM或DOM4J)
下面在来简单的说说ajax...
当你程序要求你在不刷新页面的情况下读取数据并显示,这是就是ajax的勇武之地.
如果你之前的javascript没有学的特别的牢固,也没什么关系,用框架吧。
所谓的ajax框架就是一个javascript的库。它简化并对javascript封装。
常见的ajax库有很多,这可以根据情况自己选择学习。
(dojo、prototype、jquery、dwr、ext等...)
等学习到了这里,你已经可以独立的开发一个简单的网站了。
但是,这里有很多的问题:
1.代码量大
2.开发时间长
3.系统扩展性差
4.虽然用MVC分层,但是JSP+Servlet+JDBC这种开发方式难以维护。(尤其是JSP里有大量代码,像ASP那样)
5.理论上不OO
6.效率低
7.安全性低
等等...
短短一时间我就能想到这么多的不足,证明这离企业级开发还有很大的差距.
那么正真的企业级应用是什么呢?
JavaEE的本质就是为了企业级开发...
可惜,至今还未能领悟JavaEE的核心思想...
但从技术角度,JavaEE拥有哪些技术呢?
貌似太多太多...EJB是JavaEE的核心思想...感觉有点类似.Net框架...即:一个框架包含所有功能.
可惜一直没时间学习过EJB...
所以我下面要讲的是如何针对上面的不足加以改进?
1.代码量大就造成"开发周期的延长"。而且自己写的代码有时会有漏洞,或效率上的问题。(如果你不是专家的话)
所以要解决这个问题就要引入"框架".
如果引入了框架,那么有些问题就可以迎刃而解。
1.代码量的减少。
2.开发周期的缩短。
3.效率提高一点。
4.安全性提搞了一点。
毕竟人家是顶尖的专业人士,写出来的代码肯定比自己写的健壮又高效。对吗?而且又可以减少代码量。
框架分很多种,就像上面的ajax框架一样,它也是一种框架。
下面就列出一些流行的框架:
MVC框架:Struts1.x,Struts2.x,JSF,webwork等...其中最令我期待的是struts2.
ORM框架:Hibernate3,Ibatis,jpa等...其中最令我期待的是JPA.
AOP框架:Spring2.5 貌似现在只流行这个...AspectJ都没人提...
至于EJB里的,我不太了解...
但是至少上面的是主流.如果遇到非主流...也就算我倒霉...再学呗...
至于系统扩展性和维护性差是系统架构的设计问题.
这个问题不是我在这里一句两句就能表达清楚的。
(前些日子搞了个泛型DAO模式,都研究了很久)
UML和design pattern是需要经验的...
在学习这些框架的过程中会有很多意想不到的事情发生...
再深入学习就是webservice和分布式了...
感觉我还没有触及到那个层次...
还差的远呢...不过慢慢来吧...
今天说了那么多就是想知道做为一个java软件工程师.到底需要哪些技术?
我很需要自我反思...
可能我今天说的都只是皮毛,也有很多欠考虑的地方...希望朋友指出...
也可以给我意见...
也许我看问题不全面,或是有偏见,也欢迎指出。
⑷ 程序员分哪几种,分别要学什么知识,工资怎么样
一、程序员的分类
程序员从事的人群很多,分工也不相同,从大的方面可以分为以下几类:asp程序员、delphi程序员、php程序员、powerbuilder程序员、C程序员、linux程序员、net程序员、vb程序员、java程序员、javascript程序员、C++程序员、Python程序员、ABAP程序员、android程序员、iOS程序员。
二、所学的知识与必备技能
1、熟练开发软件
做为一名程序员至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C++编写。而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在,而JAVA即其相关的技术集JAVAOne很可能会成为未来的主流开发工具之一。其次,能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,CBuilder,则更好,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。
2、熟悉数据库
很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操作方法。
3、了解操作系统
要想成为一个真正的编程高手,需要深入了解操作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。要懂得网络协议TCP/IP。网络技术已改变了软件运行的模式,从最早的客户/服务器结构,到今天的WEBServices,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,深入掌握TCP/IP协议是非常必要的。至少,需要了解ISO七层协议模型,IP/UDP/TCP/HTTP等常用协议的原理和三次握手机制。要明白DCOM/CORBA/XML/WEBServices存在的意义。DCOM/CORBA是当前两大主流的分布计算的中间平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布式计算的基石之一。
三、薪资待遇
程序员的薪资待遇分档次,大致情况是这样的:
初级软件工程师(0-3年开发经验),平均月薪(3000-8000)
中级软件工程师(3-5年开发经验),平均月薪(5000-12000)
高级软件工程师(5年+开发加2+管理),平均月薪(10000-90000)
一般只有刚毕业的初级工程师说的是月薪,中高级基本是年薪。
也有刚毕业就签的年薪的。这个是大致范围就这样,也有少部分低于3000或高于90000的 具体差别要看自己的,毕业院校,专业学历,专业能力,外语能力,职称等级,综合能力,以及所在城市还有自己的选择等。但最主要的是看专业能力的。
⑸ 程序员必备知识有哪些
根据软考程序员职称的考试内容,我们可以得出,程序员需要具备以下的知识。但这些只是基础,还要不断扩展。
计算机硬件基础知识。
1. 计算机科学基础。
1.1数制及其转换。
二进制、十进制和十六进制等常用数制及其相互转换。
1.2数据的表示。
数的表示(原码、反码、补码表示,整数和实数的机内表示方法,精度和溢出)。
校验方法和校验码(奇偶校验码、海明校验码)。
1.3算术运算和逻辑运算。
计算机中二进制数的运算方法。
逻辑代数的基本运算和逻辑表达式的化简。
1.5常用数据结构。
数组(表态数组、动态数组)、线性表、链表(单向链表、双向链表、循环链表)、队列、栈、树(二叉树、查找树)、图的定义、存储和操作
1.6 常用算法。
算法与数据结构的关系,算法效率,算法设计,算法描述(流程图、伪代码、决策表)
2. 计算机系统基础知识。
2.1计算机基础知识。
2.1.1计算机系统的组成,硬件系统、软件系统及层次结构。
2.1.3 中央处理器CPU。
运算器和控制器的组成,常用的寄存器、指令系统、寻址方式、指令执行控
处理机性能。
2.1.4 主存和辅存。
存储器系统。
存储介质(半导体、硬盘、光盘、闪存、软盘、磁带等)。
主存储器的组成、性能及基本原理。
Cache的概念、虚拟存储的概念。
辅存设备的类型、特性、性能和容量计算。
2.1.5 I/O接口、I/O设备和通信设备。
I/O接口(总线、DMA、通道、SCSI、并行口、RS232C、USB、IEEE1394)。
I/O设备的类型和特性(键盘、鼠标、显示器、打印机、扫描仪、摄像头,以及各种辅存设备)。
I/O设备控制方式(中断控制、DMA)。
通信设备的类型和特性(Modem、集线器、交换机、中继器、路由器、网桥、网关)及其连接方法和连接介质(串行连接、并行连接,传输介质的类型和特性)。
2.2 软件基础知识。
2.2.1 操作系统基础知识。
操作系统的类型和功能。
操作系统的内核(中断控制)和进程概念。
处理机管理、存储管理、设备管理、文件管理、作业管理、汉字处理。
2.2.2 程序设计语言和语言处理程序基础知识。
汇编、编译、解释系统的基础知识。
过程(函数)调用。
2.3 网络基础知识。
网络的功能、分类、组成和拓扑结构。
网络体系结构与协议(OSI/RM,TCP/IP)。
2.4 数据库基础知识。
数据模型,ER图。
数据操作(关系运算)。
数据库语言(SQL)。
2.5 多媒体基础知识。
多媒体基础概念,常用多媒体设备性能特征,常用多媒体文件格式类型。
3.软件开发和运行维护基础知识。
3.2 软件需求分析、需求定义及软件基础知识。
结构化分析概念(数据流图(DFD)、实体关系图(ER))。
面向对象设计、结构化设计基础知识。
模拟设计、代码设计、人机界面设计要点。
3.3 程序设计基础知识。
结构设计程序设计,程序流程图,NS图,PAD图。
程序设计风格。
面向对象设计基础知识、可视化程序设计基础知识。
3.4 程序测试基础知识。
黑盒测试、白盒测试、灰盒测试基础知识。
4. 安全性基础知识。
安全性基本概念。
加密与解密基础知识。
5. 标准化基础知识
标准化基本概念
6. 信息化基本知识。
有关的法律、法规要点。
7. 计算机专业英语。
考试科目2:程序设计。
1. 内部设计
1.1 理解外部设计。
1.3 物理数据设计。
确定数据组织方式、存储介质,设计记录格式和处理方式。
2. 程序设计。
2.1 模拟划分(原则、方法、标准)。
3. 程序实现。
3.1 编程。
编程方法和标准。
程序设计语言的使用。
4.程序设计语言(C语言为必选,其他语言可以任选一种)。
4.1 C程序设计语言(ANSI C标准)。
程序结构,语法,数据类型说明,可执行语句,函数调用,标准库函数,指针。
4.2C++程序设计语言(ANSI C++标准)。
C++和面向对象程序设计,语法和程序结构,类、成员、构造函数、析构函数、模板、继承、多态。
4.3Java程序设计(Java 2)。
语言机制(程序结构和语法,类、成员、构造函数、析构函数、继承、接口)。
4.4Visual Basic程序设计(Visual Basic 6.0)。
用户界面设计。
⑹ 作为一个合格的程序员需要掌握的知识
1宁专勿多
我认为,在学习技术时,不应该把面铺行太广,不要试图把OS,语言,数据库,设计等都掌握了,一个人的精力是有限的,不可能也没有必要去学习那么多的技术.'这方面想的多了,那方面必竟就想得少了'.另外,技术在某方面是相通的,比如Java和C.所以,我认为,在学习技术时,可以根据自己的情况结合公司以及技术本身(最好选主流技术,而不要先已经过时的.比如,就是公司需要,也最好不要再学VFP)的情况,选取一种或者两种主流技术当作自己学习的核心技术.然后深入进去,在学习的过程中,最好做一些小项目或者向一个技术高手学习.这样是很有必要且很有效的.想必大家都深有体会.这样,用不了三年,你就会成为一种技术领域内的专家.
2选取什么样的技术
技术可以分为两种:一种是一些高深的技术,直到现在也在研究和探索中,或者存在争议.虽然绝对华丽且时髦,却不一定实用.比如:UML.WebService等,到底有多少公司和人能够理解它并完全用于项目中?不得而知.到底哪一种分析设计更适合我们?RUP?我觉得这些都需要时间去验证.而且它本身是否完善也许仍是一个问题.所以,我认为这种技术适合那些对技术有狂热的兴趣,本身又有很高的悟性,且有条件(公司需要学,或者有一些培训机会),则可以去学习这种技术,如果掌握以后,肯定会站在技术的前沿.而个人待遇也会有很大的前进,掌握这种技术对个人能力要求比较高.所以,在选取这样的技术时,要结合自身条件.也就是你能不能学会.
第二种是成熟的技术,大家都在应用,且能够解决公司或者个人所面临的一系列问题.比如:delphi,java,pb,sql server等等,这种技术发展到今天,已经非常成熟和完善,而且学习的资料全面,易于掌握.所以,如果你注重应用的话,可以选取这种技术.就像上面的文章中提到的:"单纯的技术,无论如何先进,如果不能给企业带来好处,都没有任何意义;同样是技术,无论多么原始和落后,如果对企业来说足够用,能带来好处,就应当采用".所以.选择这样的技术在以后的几年里,仍然有很多用武之地.如果能够精通的话,待遇方面也不会低多少.
3从技术转入管理
现在看到很多人在谈论技术人员在超过35以后能不能编程,担心自己过了35就会失业.其实这完全是没有必要的,据我了解,国外超过35的程序员是非常多的.而国内之所以出现程序员很少有超过35的是因为,在国内,程序员这个职业起始于上世纪90年代初,而当时做这个行业的和今天情况一样:大多是刚毕业的学生,他们当时不过20多点,那也是国内第一代程序员,他们到今天为至,也很少有超过35的,而且很多选择了自己做公司,不再亲自写程序.所以,现在国内的程序员很少有超过35的.说了这么多,只是为了说明程序员超过35仍可以写程序,纵然是这样,程序员这工作仍然是脑力劳动中工作量很大的一个职业,所以,大家可以根据情况,从技术转入管理,这样的话,以后的生活会轻松许多.如果选择以后做管理的话,那么现在学习什么就应该重新选择了.
⑺ 程序员需要学些什么
程序员的岗位需求很多,例如大型网络公司、软件开发公司等等都需要程序员。
程序员需要学习:
1、掌握数据及其转换、数据的机内表示、算术和逻辑运算,以及相关的应用数学基础知识;
2、理解计算机的组成以及各主要部件的性能指标;
3、掌握操作系统、程序设计语言的基础知识;
4、熟练掌握计算机常用办公软件的基本操作方法;
5、熟练掌握基本数据结构和常用算法;
6、熟练掌握C程序设计语言,以及C++、Java、Visual Basic中的一种程序设计语言;
7、熟悉数据库、网络和多媒体的基础知识;
8、掌握软件工程的基础知识,了解软件过程基本知识、软件开发项目管理的常识;
9、了解常用信息技术标准、安全性,以及有关法律、法规的基本知识;
10、了解信息化、计算机应用的基础知识;
11、正确阅读和理解计算机领域的简单英文资料。
程序员必备技能:
1、熟练开发工具
做为一名程序员至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C++编写。
而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在,而JAVA即其相关的技术集JAVAOne很可能会成为未来的主流开发工具之一。
其次,能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,CBuilder,则更好,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。
另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。
2、熟知数据库
作为程序员,他们自然有自己的理由:很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。
虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操作方法。如果没有机会接触商业数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL,Postgres等。
3、了解操作系统
当前主流的操作系统是Windows,Linux/Unix,熟练地使用这些操作系统是必须的,但只有这些还远远不够。
要想成为一个真正的编程高手,需要深入了解操作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。
Linux作为开发源码的操作系统,是一个很好的学习平台,Linux几乎具备了所有现代操作系统的特征。虽然Windows系统的内核实现机制的资料较少,但通过互联网还是能获取不少资料。懂得网络协议TCP/IP。
在互联网如此普及的今天,如果您还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握,就需要迅速补上这一课,网络技术已改变了软件运行的模式。
从最早的客户/服务器结构,到今天的WEBServices,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,深入掌握TCP/IP协议是非常必要的。
至少,需要了解ISO七层协议模型,IP/UDP/TCP/HTTP等常用协议的原理和三次握手机制。
4、明白DCOM/CORBA/XML/WEBServices存在的意义
随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是未来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。
XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布式计算的基石之一。
5、不要将软件工程与CMM分开
大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员。
一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能。
如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。
6、需求理解能力
程序员要能正确理解任务单中描述的需求。在这里要明确一点,程序员不仅仅要注意到软件的功能需求,还应注意软件的性能需求。
要能正确评估自己的模块对整个项目中的影响及潜在的威胁,如果有着两到三年项目经验的熟练程序员对这一点没有体会的话,只能说明他或许是认真工作过,但是没有用心工作。
7、模块化思维能力
作为一个优秀的程序员,他的思想不能局限在当前的工作任务里面,要想想看自己写的模块是否可以脱离当前系统存在,通过简单的封装在其他系统中或其他模块中直接使用。
这样做可以使代码能重复利用,减少重复的劳动,也能使系统结构越趋合理。模块化思维能力的提高是一个程序员的技术水平提高的一项重要指标。
就业方向:
1、网络开发
现在网络已经成为世界通讯的一座桥梁,好像Javascript、PHP、Ruby这几类开发语言大部分是用作网络开发方面。
2、企业软件开发
JAVA、C#、VB这几类开发语言都实现了面向对象开发的目标,更多时候用于企业系统的开发。
3、系统软件
C语言、C++、Object-C这些软件更多是用在系统软件开发,嵌入式开发的方面。
当然,这分类不是绝对,像JAVA、C#、VB很多时候也用于动态网站的开发。在很开发项目都会使用集成开发的方式,同一个项目里面使用多种开发语言,各展所长,同步开发。
但所以在刚入门的时候,建议先为自己选择一种合适的开发工具,“专注地投入学习,全力一击”。
会编程、会计算机语言就能加入互联网发展大潮中,享受数字经济发展的红利,一时间社会上的程序员培训机构都变得格外火爆。
但是现在,专家的数据分析结果告诉你:若想跟上数字经济发展的步伐,光会编程可不行,这个行业现在紧缺高端的、综合型人才。
11月22日下午,清华大学经管学院互联网发展与治理研究中心与领英联合发布《中国经济的数字化转型:人才与就业》,揭示我国数字人才现状与趋势。
报告显示我国数字经济发展面临人才短缺的挑战,但这种短缺主要体现在拥有中高级专业技能数字人才的比例不高,拥有人工智能、智能制造等前沿技术的人才更是少之又少。
与美国、英国、加拿大等国家相比,中国的数字人才储备尚有很大差距。
此外,报告根据对人才需求的数据分析,结果显示我国数字人才的技能需求不再强调单一编程技能,更加看重技术、管理和领导力等综合技能。
2015年,我国从事信息传输、软件和信息技术服务相关工作的人数约350万,但其中中高端人才,特别是前沿技术的数字人才并不多。根据领英中国智库的研究,在人工智能领域,美国的从业者数量在85万人以上,印度15万,英国14万,中国只有5万多人。
报告负责人、清华大学经济管理学院副院长陈煜波教授表示,我国目前在大数据与人工智能领域人才缺口明显。
他解释说,目前中国85%以上的数字人才分布在产品研发类,而深度分析、先进制造、数字营销等职能的人才加起来只有不到5%,存在较大缺口,新兴技术人才和创新型人才培养方面存在滞后和不足。
这份研究报告的基础数据来自领英在中国的3600万个人用户,这些用户毕业于1.5万多所国内外院校,分布在36.4万家企业,拥有超过2.3万项技能。
陈煜波研究团队从中筛选了72万数字人才,多维度提取用户画像并跟踪其职业轨迹,以此预测不同地区的人才流向、雇佣率、受雇主欢迎的技能等人才趋势层面的信息。
陈煜波说,根据数据分析结果,整体来看,虽然编程技能和数据分析技能需求占据主导,然而随着数字产业走向成熟,企业除了强调编程技能,也逐步更加看重人才的技术、管理和领导力等综合技能。
近年间,项目管理、产品运营等“技术+管理”类技能的需求呈现出明显的上升趋势,懂技术、懂管理的人才被认为是“一将难求”。
领英中国代理总裁曾志恒也提醒,如果你有兴趣向数字职能转型,不能仅仅专注于自己的技术能力,沟通和领导力等软性技能将成为你脱颖而出的关键。
陈煜波希望这些研究结果能为教育行业和政府部门提供借鉴。他说,教育行业可根据职位的供需趋势更好地规划人才培养的方向,政府也可更好地了解人才流动方向、技术缺口等,以此制定有针对性的引才策略。
程序员岗位职责:
1、对项目经理负责,负责软件项目的详细设计、编码和内部测试的组织实施,对小型软件项目兼任系统分析工作,完成分配项目的实施和技术支持工作。
2、协助项目经理和相关人员同客户进行沟通,保持良好的客户关系。
3、参与需求调研、项目可行性分析、技术可行性分析和需求分析。
4、熟悉并熟练掌握交付软件部开发的软件项目的相关软件技术。
5、负责向项目经理及时反馈软件开发中的情况,并根据实际情况提出改进建议。
6、参与软件开发和维护过程中重大技术问题的解决,参与软件首次安装调试、数据割接、用户培训和项目推广。
7、负责相关技术文档的拟订。
8、负责对业务领域内的技术发展动态进行分析研究。
相关书籍:
很多程序员响应,他们在推荐时也写下自己的评语。 以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 9的书。
其实除了前9本之外,推荐数前30左右的书籍都算经典,笔者整理编译这个问答贴,同时摘译部分推荐人的评语。
下面就按照各本书的推荐数排列。
1、《代码大全》 史蒂夫·迈克康奈尔
2、《程序员修炼之道》
3、《计算机程序的构造和解释》
4、《算法导论》
5、《重构:改善既有代码的设计》
6、《设计模式》
7、《人月神话》
8、《计算机程序设计艺术》
9、《编译原理》(龙书)
10、《活着》
⑻ 当程序员需要什么知识
如果做一个专业的程序员:
1.基础语言知识 :从底层的ASM 到结构化的C,到面向对象的C++ JAVA,如果不能都精通,但是要了解,至少要精通一门
2.基础数学知识: 高等数学(数学分析) 线性代数 离散数学,概率.数理统计等等
3.基础计算机原理:操作系统原理,微机原理,编译原理 数据库原来等等
4.看你感兴趣的学习一个方向:图形学...windows应用程序开发...Linux程序开发,数据库方面 网络编程,等等
----------------------------------------------------------------------
如果只是想快速编软件:
敬告:这样不会成为一个真正的高手!
比如windows平台的编程:<这里仅仅是比如>
学习C语言(熟悉结构化编程)->《windows程序设计》(学习windowsAPI知识) ->可以用API进行编程了。
但是现在用纯API编程几乎绝迹。不是淘汰,因为商业用要尽快成为软件好卖,API开发会消耗程序员大量时间,但是API是基础。
或者
学习C++语言(熟悉面向对象技术)->《MFC程序设计》(学习MFC编程)->MFC开发 -> MFC应用比较广
.net技术我没有接触过。现在正流行这个,等楼下的给你介绍吧!
------------------------------------
相比较而言,用DELPHI最省事。但是你要了解Object Pascal语言,这个编程工具是以这个语言为基础的。Delphi开发也是很不错的。
-------------------------------------
以上只是一个建议,学习不可能简单,而且路子不一样,上边提到的两windows书,是微软出版社,在这个方面最权威的书。