是一样的。软件开发工程师更书面更正式,程序员更口语化更随意。一般的招聘信息里面都是写需要JAVA软件开发工程师。但是工作环境通常就直接说给我找个JAVA程序员。
另外,通常程序员都调侃自己是码农,意思也是一样的。但是招聘信息里面绝不会这么写,工作里也不会说给我找个码农来。
Ⅱ java工程师和java程序员工作内容有什么不同
如果真要评论应该是技能层次的不同。程序员相当于工人,可以在详细设计的基础上进行开发。工程师则可以在明确需求的基础上进行设计和开发。
例如要人程序员工作,会告诉他需要什么校验,访问什么表,记录什么日志。
要工程师,只需要告诉他,统一规范是什么。 然后要完成什么事就可以了。
当然以上所说都是理想情况。真实场景中,这两者几乎没有区别。真要说区别是,工程师的说法是对客户的。程序员的叫法是内部用的。
Ⅲ java软件工程师和 java程序员有什么区别吗
我觉得广义上应该是一个意思,现在很多公司对于这个没有区分,工程师与程序员都是写代码的,不过对于架构师,要求会更高,写代码少,架构的比较多。
Ⅳ JAVA架构师和JAVA工程师的职业区别
朋友,我觉得这两个好像没有什么相似的地方吧,JAVA工程师说白了就是一个程序员,不过就是名称好听了一点,而架构师是负责整体布局的,成为架构师!
首先你得明确,工程师就是码农,专注于学代码,而架构师主要关注于你的项目布局,他把握的是整体性
其次,码农无非就是了解会用代码就行,而架构师主要关注的是原理问题,他是对项目进行各方面的协调与优化,更好的搭配资源
Ⅳ 请问JAVA程序员与JAVA工程师的区别是什么。 与系统架构师有什么区别
程序员(Programmer,Computer Programmer或Coder),它可以指在程序设计某个专业领域中的专业人士,或是从事软件撰写,程序开发、维护的专业人员。但一般Coder特指进行编写代码的编码员。
随着时代的发展,对程序员的要求也在变化,需要他们掌握更多的知识与技能如:UML、单元测试、各种方法论等,以更快更好的满足不断变化的商业需求。
工作范围:代码撰写, 测试与除错, 撰写技术文件
软件工程师一般指从事软件开发职业的人。软件工程师跟一般程序员的分别,在于一个程序员的工作是按照指定的规格进行编码,而软件工程师的工作则需要设计和规划。不过,由于现时社会的分工愈来愈模糊,软件工程师跟程序员的分工也愈不明显。但对于严格执行CMM的机构来说,各人的工作分也比较清晰,这有助于了解软件工程师跟一般程序员的分别。
系统架构师是一个最终确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节、扫清主要难点的技术人员。主要着眼于系统的“技术实现”。因此他/她应该是特定的开发平台、语言、工具的大师,对常见应用场景能马上给出最恰当的解决方案,同时要对所属的开发团队有足够的了解,能够评估自己的团队实现特定的功能需求需要的代价。 系统架构师负责设计系统整体架构,从需求到设计的每个细节都要考虑到,把握整个项目,使设计的项目尽量效率高,开发容易,维护方便,升级简单等。
Ⅵ Java程序员跟工程师有什么区别,应该怎样进行职业规划
去疯狂软件专业系统学习吧
第一、工程师不写黑箱程序
“程序=数据结构+算法”,这个着名的公式大家都知道,不幸的是,它不适合描述工程领域或者现实世界的程序。有很多程序,数据结构和算法都写得很棒,功能足够强大,系统足够复杂,但是——它很难调试,一跑起来就无法停止,而且谁也不知道程序现在到底在干什么,里面发生了什么。
别觉得好笑,我遇到过很多工作三四年甚至五六年的开发人员,仍然不停地生产黑箱程序:出现问题的第一反应是直接杀掉进程重启(天哪你们的程序不能安全关闭吗)。当然还有更生猛的,直接用开发机连上生产数据库(防火墙上开个洞)去调试。
你说他们技术不好吗?明明各种技术问题也能搞定。你说他们没有系统意识?做过的程序也不简单。但是,他们做的充其量只能叫“程序”,而不是工程上成熟的“系统”。
怎样的程序不是黑箱?你需要考虑它的层次划分,你需要考虑哪些(功能之外的)运行信息必须暴露和记录,以什么方式暴露记录,你甚至还需要考虑这些暴露和记录对性能的影响,以及程序需要对外提供什么操纵接口……当你把这一切都考虑清楚,写出能够让运行细节“尽在掌握中”的程序的时候,你的一条腿就迈进了“工程”的大门。
这方面,互联网和软件开发的大厂会更加关注一些,但也不是说个人就毫无追求的空间了。网络爬虫大家都会写,大家也都知道如果要数据抓得准,调试起来很麻烦。我有个朋友在某大厂写过一套“可视化”的爬虫,可以用逐步操纵语句的执行,迅速定位问题所在。这种水平的工程师,属于可遇而不可求的类型,每次说起来大家仍然啧啧称赞。
第二、工程师注意实现和接口分离
Java面试的一道经典问题是:请描述抽象类和接口的区别。通常,大家都会知道“接口”和“实现”要分离。不幸的是,很多人理解的“接口”,只是狭义的特定语言提供的Interface,而没有考虑“接口”真正的含义。
接口的真正含义是什么?计算机最擅长处理的是信息,它可以让信息脱离现实的障碍高速流动起来。如果说“实现”是干脏活累活,“接口”就是发出干脏活累活指令的窗口。脏活累活干一遍就足够了,但发指令的窗口却可以有千千万万。
更具体一点说,完成功能的是程序员,完成功能并且设想它会在什么情况下使用,并且让人方便使用的,是工程师。我见过不少这样的程序:登录会话一开始放在本地内存里没问题,到了要切换到数据库里方便会话转移就得大兴土木,虽然要做的其实仍然只是存取而已;程序自动加载的数据出了问题,就根本不能手动加载;以前手动加载的数据,改成自动加载就要推倒重来……
有没有接口意识,能不能真正区分接口和实现,这是区分程序员和工程师的一大标识。
第三、工程师注重功能的逻辑联系
很多系统都在不断的变化和改进过程中,程序员看到的是功能点,工程师看到的是功能点之上的逻辑。
任何系统当然都是由若干功能构成的。但在功能点之上,还需要一张有逻辑意义的大网,才能把功能点组合起来,把复杂度降低,成为大家能理解的对象。最简单的“登录”,就包含数据输入、数据验证、登录信息记录等等功能,“登录”是这些功能的逻辑集合,也是理解这些功能的基础。
随着时间的推移,业务的增长,新功能可能越来越多,比如用户数据的加载,对好友的通知,广告的推送准备等等。这些功能实现起来当然都容易(因为很具体),但功能堆积的后果是复杂度急剧上升,因为功能之间的逻辑联系被切断了。所以,工程师必然需要思考,这些功能应该怎么组合,放到哪些具有逻辑意义的动作——比如“登录”里去?正是经过这样持续不断的思考,系统的复杂度才能够被一直维持在较低的水平,容易让大家理解。
这个例子看起来很简单,但做起来却没那么容易。我有时看到复杂的系统操作手册,简直让人哭笑不得:1) 点这里;2) 点那里;3) 输这个……
这些操作对应的逻辑意义那么准确,分明就该是一次性自动完成的啊,把它们割裂开来的后果大大提高了系统的复杂度,既不方便维护,也不方便操作。最后来擦屁股的,只能是开发人员自己。
我经常反思自己接受的教育,在学校里写程序,和工作了写程序,有那么一点相同,但又好像完全两回事,到底有什么不同,只有亲自体会、思考了才能明白,所以我想把自己的所见所感写出来。悟性好的有机会接受很好训练的同学,估计不需要了解这些。但对于没有这样条件的同学,但愿我的这点念叨能给你们一点帮助。
Ⅶ java程序员和java工程师的有什么不同
程序员(Programmer,Computer Programmer或Coder),它可以指在程序设计某个专业领域中的专业人士,或是从事软件撰写,程序开发、维护的专业人员。但一般Coder特指进行编写代码的编码员。
随着时代的发展,对程序员的要求也在变化,需要他们掌握更多的知识与技能如:UML、单元测试、各种方法论等,以更快更好的满足不断变化的商业需求。
工作范围:代码撰写, 测试与除错, 撰写技术文件
软件工程师一般指从事软件开发职业的人。软件工程师跟一般程序员的分别,在于一个程序员的工作是按照指定的规格进行编码,而软件工程师的工作则需要设计和规划。不过,由于现时社会的分工愈来愈模糊,软件工程师跟程序员的分工也愈不明显。但对于严格执行CMM的机构来说,各人的工作分也比较清晰,这有助于了解软件工程师跟一般程序员的分别。
Ⅷ Java开发工程师与Java软件工程师有什么不同
软件工程师必须知道20个知识点,看看你了解多少?
1,针对面向对象的设计与分析:为了让软件有更好的可维护性,重用性以及快速开发, 简短的OOAD与它的SOLID原则对于每一个软件工程师来说都是该牢记的。
2,软件品质因素:软件工程的好坏与软件的品质因素是绝对关联的。请在开发过程中深 刻的理解这一点。
3,数据结构与算法:深刻理解像数组,列表,栈,树,图,集合等这样的基本数据结构 ,并在软件开发过程的关键部分使用好的算法。这样整个软件逻辑就会很清晰了。
4,Big-O符号来标记算法复杂度:在开发过程中,请务必使用 Big-O 符号来比较两个代 码段或者不同算法所消耗的时间复杂度,这在开发高性能软件项目中是非常重要的。
5,UML图:UML图已经是一个通用的软件设计与分析的语言。如果你们在开发软件的过程 中还没有做UML图,那么给人的感觉就是这压根就不是软件工程。
6,正确的衡量软件开发进度。
7,设计模式:设计模式是前人在解决各种各样问题的过程中总结出来的一套标准对策, 在绝大部分情况下,使用这些模式肯定是利大于弊的。如果你不想在开发过程中重新造 轮子,那么就直接使用它吧。
8,理解操作系统的基本原理:因为所有的应用程序都是直接运行在操作系统这个层级的 ,学习操作系统的基本原理能让我们对应用程序的底层以及性能有更好的把握。
9,学习计算机组成原理:几乎所有的应用程序甚至是OS都需要与物理硬件打交道的,所 以学习计算机组成原理与理解操作系统原理一样都可以让你对于应用程序有更深刻的理 解。
10,网络基础:网络与计算机组成,操作系统以及传输流程都是紧密关联的,理解网络基础 能让你在开发过程中得心应手。
11,需求分析:对于软件工程来说,需求分析是项目的起点,也是整个项目最最重要的 部分。如果这玩意你搞错了,整个项目的方向也就错了。
12,软件测试:在软件工程中,测试也是非常重要的。单元测试,黑盒测试,白盒测试,TDD,集成测试等等都是我们必须知道的。
13,独立管理:主要是说类库(JAR,DLL等等)的管理,熟悉使用一些类似Maven,Ant,lvy这样的知名工具对于大型项目的类库管理是非常有用的。
14,持续化集成:持续化集成能让测试大型模块与组件更加简单与自动化,关于这一点,你可以去了解 Hudson 这个工具。
15,ORM:了解Hibernate这种将对象与数据库表映射工具是非常有好处的,它可以减少你的代码量并节省你的代码维护时间。
16,DI(独立注入):DI或者IoC(Inversion of Control)的具体实现框架Spring能让你创建对象时更加轻松,对于大型企业级项目更是如此。
17,版本控制系统:VSC工具(SVN,TFS,CVS等)对于团队合作开发以及版本控制都是非常重要的。熟练使用这类工具算得上是必备技能。
18,国际化:通过i18n来将不同语种的字符串存储在其他文件是让软件支持多语种的方法。所以i18n在不同的IDE上使用的方法我们应该了解。
19,架构模式:理解类似MVC,MVP,MVVM这样的架构模式非常关键,这能让你写出易维护,简洁以及方便测试的代码。
20,编写干净的代码:你的代码仅仅只是能够正常运行是远远不够的,它必须让编程人员轻易看懂来方便后续维护,所以,代码格式以及编写易读的代码技术都是我们需要了解的关键点。
Ⅸ Java高级软件工程师和Java程序员有什么区别
...哎
现实中的java高级软件工程师就是在某一个行业有很充足的开发经验,很了解开发模式就差不多了,一般的公司都会叫你高级工程师
程序员就是只敲敲代码 ,对啥都不管不问的
一般来说 你兢兢业业的在一个好点的公司干一年 跳个槽 就成高级了