Ⅰ 一个程序员要具备的基本素质是什么
团队精神和协作能力 :
把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最重要的安身立命之本。
文档习惯:
作为代码程序员,30%的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这个比例还要高很多。缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。
规范化,标准化的代码编写习惯:
作为一些外国知名软件公司的规矩,代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。
需求理解能力:
作为程序员需要评估该模块在系统运营中所处的环境,将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性。就这一点,一个成熟的程序员至少需要2到3年的项目研发和跟踪经验才有可能有心得。
复用性,模块化思维能力:
复用性设计,模块化思维就是要程序员在完成任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作。
测试习惯:
软件研发作为一项工程而言,一个很重要的特点就是问题发现的越早,解决的代价就越低,程序员在每段代码,每个子模块完成后进行认真的测试,就可以尽量将一些潜在的问题最早的发现和解决,这样对整体系统建设的效率和可靠性就有了最大的保证。
学习和总结的能力:
善于学习,对于任何职业而言,都是前进所必需的动力,对于程序员,这种要求就更加高了。但是学习也要找对目标,一些小coding fans们,他们也津津乐道于他们的学习能力,一会学会了asp,一会儿学会了php,一会儿学会了jsp,他们把这个作为炫耀的资本,盲目的追逐一些肤浅的,表面的东西和名词,做网络程序不懂通讯传输协议,做应用程序不懂中断向量处理,这样的技术人员,不管掌握了多少所谓的新语言,永远不会有质的提高。
Ⅱ 怎样才能成为高级软件工程师
高级软件工程师(java)
◇
培养对象
中高级Java程序员
◇
课程介绍
测试用JAVA
开发应用程序的能力,考试者必须先完成一个程序的设计方案,再回答与此方案相关的一些问题。本课程将提供给学员设计关系数据库服务器程序的实际方法,学员将使用Java声音、图形、网络通讯等接口,编写与服务器相连接的Java应用程序,通过本课程学员还能学到如何在Java程序中调用本机上用其它计算机语言编写的程序。
◇
学习目标
在这门课程学习完之后,您可以胜任Java应用程序开发工作、JSP网络程序开发工作,并能掌握J2EE企业构架体系。
◇
课程内容
第一章
Java
Beans介绍
第二章
EJB
第三章
企业Bean的设计和实现
第四章
有状态会话Bean示例
第五章
BMP的例子
第六章
CMP的例子
第七章
一个消息驱动Bean的例子
第八章
EJB查询语言
第九章
网络客户端及组件
第十章
Java
Servlet技术
第十一章
JSP技术
第十二章
JSP页面中的JavaBean组件
第十三章
在JSP页面中自定义标签
第十四章
事务
第十五章
安全
第十六章
资源连接
第十七章
DUKE的银行应用程序
第十八章
xxx保险公司座席系统
第十九章
系统概要设计
第二十章
管理系统概要设计
第二十一章
业务咨询概要设计
第二十二章
业务查询概要设计
第二十三章
业务受理概要设计
第二十四章
统计报表概要设计
◇
课程时间
授课时间为:240学时
编程中函数运用比较多,数学好的话对这项工作有很大的帮助,JAVA的基础和C++的差不多,想把基础弄扎实点是好事,但是不要过于求快,要一点点的做,逻辑思维能力要强,用一些时间去练习。虽然是基础,你也要做大量的小程序来锻炼自己,不要只做教程上面的那一点点,多找些例子。多思考。这样,你的编程经验多了,做起东西来就快了。编程是不只靠语言来实现,更重要的是有思想。也就是那些数学理论。
引自:
and
Net
Ⅲ 程序员的十种级别
第一级:神人,天资过人而又是技术狂热者同时还拥有过人的商业头脑,高瞻远瞩,技术过人,大器也。如丁磊,
求伯君。
第二级:高人,有天赋,技术过人但没有过人的商业头脑,通常此类人不是顶尖黑客就是技术总监之流。
第三级:牛人,技术精湛,熟悉行业知识,敢于创新,有自己的公司和软件产品。
第四级:工头,技术精湛,有领导团队的能力,此类人大公司项目经理居多。
第五级:技术工人,技术精湛,熟悉行业知识但领导能力欠加,此类人大多为系分人员或资深程序员,基本
上桀骜不逊,自视清高,不愿于一般技术人员为伍,在论坛上基本以高手面目出现。
第六级:熟练工人,技术有广度无深度,喜欢钻研但浅尝辄止。此类人大多为老程序员,其中一部分喜欢利用工
具去查找网上有漏洞的服务器,干点坏事以获取成绩感。如果心情好,在论坛上他们会回答菜鸟的大部
分问题。此级别为软件业苦力的重要组成部分。
第七级:工人,某些技术较熟练但缺乏深度和广度,此类人大多为程序员级别,经常在论坛上提问偶尔也回答菜
鸟的问题。为软件产业苦力的主要组成部分。
第八级:菜鸟,入门时间不长,在论坛上会反复提问很初级的问题,有一种唐僧的精神。虽然招人烦但基本很可
爱。只要认真钻研,一两年后就能升级到上一层。
第九级:大忽悠,利用中国教育的弊病,顶着一顶高学历的帽子,在小公司里混个软件部经理,设计不行,代码
不行,只会胡乱支配下属,拍领导马屁,在领导面前胡吹海侃,把自己打扮成技术高手的模样。把勾心
斗角的办公室文化引入技术部门,实在龌龊!
第十级:驴或傻X,会写SELECT语句就说自己精通ORALCE,连寄存器有几种都不知道就说自己懂汇编,建议全部
送到日本当IT产业工人,挣了日本人的钱还严重打击日本的软件业!
Ⅳ 程序员在职业生涯中易犯的7个错误
1.没有明确的职业目标
没有目标的人生,就像无根的浮萍,水流到哪里就飘到哪里,一生漂泊。
如果你想要在软件开发领域获得真正的成功,那么就必须知道该何去何从。或许面对遥远的未来,你已经有了一个粗略的目标了。但是除了这点还不够,你应当坚实自己的目标——清楚的定义在实现过程中的每个重要时间点所需要达到的效果。
我认识许多程序员和其它方面的专业人士,数十年来他们都在相同的职位上反复地做着同样的事情。是的,你没有看错,是数十年。接受职业现状,不做任何改变,是造成这种悲剧的根源。对于未来,如果你没有明确的职业规划,这样的悲剧就很可能会发生在你身上。
面对于此,你该怎么做呢?
从现在开始,花一些时间来认真规划一下职业并确定最近的目标。一旦你达到了这个目标,你就要选择一个新的目标了。在职业生涯中,这样的目标会一个接着一个。你可以把这些目标写下来,放在一个每天都可以看见的地方,这样就可以让你随时回想起当前需要做的工作。
2.不重视“软技能”或非技术的东西
我认识许多擅长写代码的程序员,他们可以用所写的算法把我耍得团团转,他们对复杂架构的理解力和思考能力令我自愧不如。
但是真实的状况却是:技术不如他们的我,软件开发领域的职业发展却全面超过了他们,除了职位,还包括薪水、生产力等诸多方面。
在这里我并不是为了吹嘘自己多了不起,而是为了向那些只埋头专研技术的程序员们说明“软技能”对于职业发展有多重要。
作为一个软件开发者,我相信你也清楚,编写代码并不是工作的全部。在通往成功的道路上,还需要学习很多其它技能。我们需要长期与他人打交道,所以必须学习为人处事;软件开发面临长期的赶工与不同的需求变化,所以需要学习对心态和注意力的调整;在不断变化的环境里有许多事情需要处理,所以应当学习对事情划分优先级以做到效率的最大化。另外,我们对待身体健康应当和对待自己收入一样敏感,这个才是革命的本钱。
我还可以继续列举出更多的东西,关于了解开发者应当掌握的“软技能”你可以去阅读我写的《SoftSkills:TheSoftwareDeveloper’sManua》一书。
总的来说,在生活中无论从事什么样的工作,那些软技能通常都比硬性的技术能力更为重要,所以请保持不断地学习这些技能。
3.不融入社区生活
在程序员生涯中有一样东西令我受益颇深,它就是社区的帮助。成为这个大群体的一部分,不仅让我拥有了归属感不再孤独,也帮助我改进了自身的技能,向着更高的平台发展。
如果你还没有参与社区生活的话,我强烈建议你融入这个圈子里来。它是一个比自我宽广得多的平台,有助于你的发展。
如果你感觉自己的软件开发工作停滞不前,费劲脑力也无法获得更大突破的时候,最好的方式就是加入社区,与一群有志同道合的人共同探讨所遇到的困难,获得有助于解决问题的建议。另外,融入社区生活还能够聚集人气,培养人脉,这对于提升自身的职业发展也有很大帮助。
但是,如何才能融入到社区生活中呢?
这很简单,世界各地都有很多开发者团体,你可以通过程序员网站找到并加入到他们当中去。你还可以参加开源夏令营,这是一个一年一度的免费地方性活动,众多开发人员会聚在一起分享他们的工作,任何人都可登记参加自己感兴趣的话题。
如果你不希望在现实生活中与过多的人接触,也可以选择加入虚拟社区。
那些大众的程序员社区会是你的第一选择。在社区中你会发现有一些非常厉害的程序员,他们会在自己的博客上写一些精辟的文章并解答大家的问题。除此之外,还有另外一些不错的在线社区,比如大牛们的博客网站、各种技术论坛、讨论群等。
当你开始学会分享,把自己的所知与所想都写出来的时候,你就真正的融入进了社区生活——而这个博客就是我为自己加入这个程序员社区所做的第一件事。:-)
4.没有专长
如果你过去常访问我的博客或者YouTube视频,你会发现我很多时候都在谈论这个话题。这个话题是如此重要,以至于我一有机会就会说到它。
俗话说,术业有专攻。你应当选择一项想要专精的技术并努力磨炼它。但这并不意味着你就可以放弃对其它技术的基本理解而一味地去专研某项技术——我对那些会数种语言的人是非常欣赏的。这一点非常重要,尤其是在你职业生涯的早期培养一技之长的时候。
专长可以满足更高级的需求,因此,在同等条件下,它会带来更丰厚的报酬并更快的积累声望——这些对于业界对你的认可是很有帮助的。
有专长的人好比是小池塘中的大鱼,受人瞩目。或许最终这条大鱼会跳入更宽广的池子,但是所累积的声望和名气同样有助于在软件开发行业的其它领域的发展。
凡事只要七分就好,对于专长技术的研究学习同样如此。过度的投入会对程序员的时间与精力造成浪费,这是得不偿失的。
5.无视个人品牌价值
生活中充满着各种变数:搬家、结婚、换工作、一夜暴富、突然发福等等。无论如何,有一样东西始终会伴随着你一生,而这个东西就是——名字。
你的名字会贯穿于你的全部生活,难道它还不值得你去重视么?
你的名字或者也可以称作是你的个人品牌是一件非常有投资价值的东西,可许多软件开发人员对此却一无所知。
对于获得工作、取得晋升、客户端的登陆以及工作的开展等,名字无疑都展现了其强大的作用。毫不夸张的说,假如你臭名昭着的话,会万事难行,而如果你有良好的名誉的话,大多事情只需通过简单的握手就能搞定。
我认识很多的软件开发人员,他们从不担心自己会失业,这是因为他们投资了时间和精力来打造坚实的个人品牌。他们知道,无论发生什么事情,在他们失业后的几个小时内就可以获得一份新的工作,这是因为他们在业界有良好的声誉。
对产品和服务进行的投资看起来很正常,但是你是否考虑过自我营销的价值?要在软件开发行业建立起自己的个人品牌,我的建议是从创建自己的博客开始,选择将自己的专长或者有很深了解的领域作为提高自己影响力的跳板,学会把自己的名字一步步做成行业的金字招牌。如何快速的提高自己的影响力呢?最好的方法之一就是创建对别人有帮助的文章。
就拿这个博客为例吧。这个博客建立了我在互联网上的个人品牌和声誉,如果你认为我的文章或者网站是有价值的,你会选择进行分享。甚至你有可能把它列入收藏或者进行订阅,以方便以后继续访问。而这只是其中一种打造个人品牌的方式。同样的,你还可以选择视频网站、播客等媒体,或者在书刊上发表文章,在会议上演讲等方式。如果你对如何在软件开发领域深度挖掘自身的品牌价值很感兴趣,这个网站会告诉你如何去做。
6.荒废业务时间
在工作之余,你应当做一些项目来练练手。
做业余工作有许多你不知道的好处。首先,它可以有效的改进你的专业技能,特别是那些在平时的工作中很少用到的技术。相比起平时朝九晚五的工作,业余工作类型多变,对于专业技能的提高更有好处。其次,它有助于你对新的开发技术和技巧的学习。这对于日后你想从事新的工作是很有帮助的。我碰到过许多程序员,他们向我抱怨在当前工作中没有机会去学习新技术,这让他们今后无法在工作市场上立足。而我向他们建议工作之余去做一些小项目,使用他们今后想要立足的新技术——这种方式对于提高相关技术是很有帮助的。
除此之外,我们不要忽视做业余工作所带来的经济利益。人们常认为业余时间做的那些小项目是挣不到什么钱的,而事实上它却是额外收入的重要来源。4年以前,我在业余时间里开发了一个在Android和iOS平台上使用的应用程序,而到现在,这个应用程序还能为我创造价值。
我还认识一些程序员,他们从业余工作做起,最后把这些工作发展为了全职工作。而事实上我就是这些程序员中的一位。这个博客本身以及SimpleProgrammer周围的其它部分现在成为了我的全职工作。我喜欢称自己为程序员的生活导师,但是也有很多人认为我是一个专职的博客写手。
业余工作可以让你充满乐趣,它能够把你从那些你不喜欢但又必须去做的工作中解脱出来。作为一种释放工作压力的好方法,它会每天带给你新的希望。
7.没有自我学习的计划
在我面试软件人员的时候,我首先会问到的一个问题就是关于他们的自我学习和持续完善的计划——如何进行自我完善。程序员如何在这个快速变化的领域保持技术与观念上的更新?我希望获得的回答是他们能告诉我对于自我学习与成长他们有着一个实际可行的计划。因为一个致力于不断学习进步的人不仅能够让自己迈向成功还能影响到周围的人,使他们一同迈向成功。
然而,有如此之多的程序员对于自我学习没有任何计划。假如你是这些人中的一员,你就应该立即行动起来做一个自我学习的计划。
这儿有一个可供参考的个人简单计划:
坚持每月读一本关于技术学习或者职业发展的书籍。
这意味着一年时间里你需要阅读12本书。对于我来说,我会在每天用至少45分钟时间来阅读。当我在跑步机上运动的时候我会同时阅读一些与我个人职业发展相关的文章。
积沙成塔,集腋成裘。每天只需花费30分钟时间来阅读书籍,一两年时间之后你的人生境遇就会发生很大的改变。
Ⅳ 程序员的七种武器是什么
根据本人的多年开发经验,向那些刚刚踏入IT行业的新程序员们或正在迷茫的程序员们整理出了程序员必须掌握 的七种武器以及相关的视频教程。 第一种武器:开发工具 基于C++、VC++开发平台工具快速入门: 第一部份: VS2008 IDE开发环境的基本使用方法 第二部份:VS2008调试环境的使用 第三部份:VS2008性能分析工具 基于MyEclipse平台的Java程序快捷开发: 第一部份:JAVA开发环境的搭建 第二部份:MyEclipse工具常用开发操作和技巧 第三部份:MyEclipse高级使用技艺 - 重构与快速实现 基于Linux操作系统平台下的Java语言开发: 第一部份: 安装虚拟机以及Linux操作系统 第二部份: Linux桌面系统 第三部份: Linux文件和目录管理 第四部份: VIM的使用(上) 第五部份: VIM的使用(下) 第六部份: Linux终端常用命令第七部份: Java开发环境的搭建 第二种武器:数据库 SQL Server 2008 数据库基础及应用: 第一讲:SQL Server的安装与配置 第二讲:SQL Server中的库、表、数据完整性 第三讲:SQL Server中的CRUD语法 第四讲:SQL Server中的查询语句 第五讲:SQL Server中的高级查询 第六讲:SQL Server高级查询综合示例(一) 第七讲:SQL Server高级查询综合示例(二) 第八讲:SQL Server高级查询综合示例(三) ORACLE系列之SQL从入门到精通: 第一讲:数据库基础知识 第二讲:创建数据库 第三讲:管理和控制Oracle数据库 第四讲:Oracle数据库表管理 第五讲:基本SQL语句 第六讲:对数据进行限定和排序 第七讲:处理单行的函数 第八讲:从多个表中获取数据 第九讲:数据查询的综合案例(一) 第十讲:使用分组函数来对数据进行聚集 第十一讲:子查询及高级应用 第三种武器:操作系统 Linux系统编程(文件篇、进程篇、信号与管道篇、时间篇、实战篇): 第一部分:Linux系统编程之文件篇 第二部分:Linux系统编程之进程篇 第三部分:Linux系统编程之信号与管道篇 第四部分:Linux系统编程之时间篇 第五部分:Linux系统编程之实战篇(minishell实现) 第四种武器:网络协议TCP.IP Windows服务器与网络编程实战课程(VC++系列之网络编程、WinSock超基础): 第一部份:计算机网络和网际协议(TCPIP) 第二部份:标准套接字SOCKET原理及编程 第三部份:WinSock工作模式和编程模型 第四部份:WinSock2.0API和SOCKET池 剖析.NET网络通信、音频、移动平台IM及服务器端编程: 第一部份:.NET网络通信了解基本的.NET网络通信基础 第二部份:UDP点对点网络通信 第三部份:UDP服务器/客户端通信 第四部份:UDP网络文件传输 基于TCPIP协议的java多线程高并发服务器实战: 第1课:TCPIP协议,多线程,高并发网络编程概述 第2课:基于TCPIP协议的自定义网络通信协议实现(一) 第3课:基于TCPIP协议的自定义网络通信协议实现(二) 第4课:多线程精讲(一) 第5课:多线程精讲(二) 第6课:网络基础编程(一) 第7课:网络基础编程(二) 第8课:网络基础编程(三) 第9课:java NIO(一) 第10课:java NIO(二) 第11课:java NIO(三) 第五种武器:DCOM.CORBA.XML.WEB Services .NET下面的WebService开发: 1.掌握 Web Service 的基本工作原理 2.理解 Web Service 的优势 3.掌握 Web Service 的开发和使用 4.ASP.net中如何通过代理类调用WebServic 5.ASP.net中如何手工调用WebService(Get/Post两种方式) 6.JavaScript如何同步调用WebService 7.JavaScript如何异步调用WebService 8.ExtJs中如何调用WS 9.通过SOAP头来增强WebService安全性 10.Web Service开发中需要注意的问题 Java平台下的WebService框架Xfire深入解析: 第一部分、WebService 概念与xFire入门 第二部分、xFire开发起步 第三部分、Web服务客户端及Web服务安全性 第四部分、xFire与Spring集成 第五部分、xFire使用综合示例 第六种武器:软件工程与CMM IT人必备实用项目管理系列订餐系统实例化教学—Java版,10年IT经验总结,涉及测试、风险、负载等: 1. 课程综述:我们目前项目管理中遇到的困惑和我们所处的现状。 2. 团队组建和项目计划。 3. 需求管理:任何人都为之头疼的东西。 4. 实战订餐系统需求管理:,体验一把从头构建需求的快乐和痛。 5. 软件配置管理:只是技术,纯粹解决项目开发问题。 6. 软件设计:该怎么去设计一个软件。 7. 进度控制:进度是大部分项目组头疼的事情。 8. 风险管理:我们能做到的到底有多少。 9. 成本管理:不是说如何报价,而是说如何做能合理些。 10.软件测试:确保软件质量的关键点。 11. 单元测试:如何使用junit实施单元测试。 12. 负载测试:看看这辆车到底能拉多少货? 13. 验收交付:客户满意,公司满意,我们的追求。 14. 过程改进:下个项目我们还需要这么费力吗? IT项目管理实战ASP.NET版(负载均衡+Web测试+VSTS单元测试+VSS+订餐系统,10年经验总结): 1. 课程综述:我们目前项目管理中遇到的困惑和我们所处的现状。 2. 团队组建和项目计划。 3. 需求管理:任何人都为之头疼的东西。 4. 实战订餐系统需求管理:,一起体验一把从头构建需求的快乐和痛。 5. 软件配置管理:只是技术,纯粹解决项目开发问题。 6. 软件设计:该怎么去设计一个软件。 7. 进度控制:进度是大部分项目组头疼的事情。 8. 风险管理:我们能做到的到底有多少。 9. 成本管理:不是说如何报价,而是说如何做能合理些。 10.软件测试:确保软件质量的关键点。 11. 单元测试:如何使用junit实施单元测试。 12. 负载测试:看看这辆车到底能拉多少货? 13. 验收交付:客户满意,公司满意,我们的追求。 14. 过程改进:下个项目我们还需要这么费力吗? 第七种武器:算法与数据结构 C#版数据结构与算法高级教程(深入探讨)--附各种算法实例: 一、算法的评价指标 (1) 二、线性表:(3) 三、栈和队列 (3) 四、串(3节) 五、树(5) 六、排序(4) 实战应用Java算法分析与设计(链表、二叉树、哈夫曼树、图、动态规划、HashTable算法): 第一讲、算法基本概述、抽象数据类型 第二讲、算法的设计目标、时间复杂度和空间复杂度 第三讲、线性结构与顺序表的实现与应用 第四讲、单向链表以及单向链表的应用 第五讲、循环链表仿真链表以及循环链表应用 第六讲、栈的基本概念以及顺序栈的应用 第七讲、链式堆栈以及栈的应用 第八讲、中缀表达式转换后缀表达式算法 第九讲、队列以及顺序循环队列的应用 第十讲、链式队列以及优先级队列应用
记得采纳啊
Ⅵ 程序员要具备什么技能
一名合格的程序员需要掌握哪些技能呢?
熟练掌握开发工具
做为一名程序员至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C编写。而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在,而JAVA即其相关的技术集JAVA One很可能会成为未来的主流开发工具之一。其次,能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,C Builder,则更好,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。
熟知数据库
为什么数据库是如此重要?作为程序员,他们自然有自己的理由:很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操作方法。如果没有机会接触商业数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL, Postgres等。
对操作系统有一定的了解
当前主流的操作系统是Windows,Linux/Unix,熟练地使用这些操作系统是必须的,但只有这些还远远不够。要想成为一个真正的编程高手,需要深入了解操作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。Linux作为开发源码的操作系统,是一个很好的学习平台,Linux几乎具备了所有现代操作系统的特征。虽然Windows系统的内核实现机制的资料较少,但通过互联网还是能获取不少资料。只有对操作系统有一定的了解后,你会发现自己上了一个新的台阶。
懂得网络协议TCP/IP
在互联网如此普及的今天,如果您还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握,就需要迅速补上这一课,网络技术已改变了软件运行的模式,从最早的客户/服务器结构,到今天的WEB Services,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,所以,深入掌握TCP/IP协议是非常必要的。至少,你需要了解ISO七层协议模型,IP/UDP/TCP/HTTP等常用协议的原理和三次握手机制。
明白DCOM/CORBA/XML/WEB Services存在的意义
随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是未来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。程序员需要做的不仅仅是利用商业的开发平台来开发软件,而是要理解这些技术的初衷,即为什么需要这项技术,如果你能理解了这一点,再回头看这些技术的具体实现,就如庖丁解牛,迎刃而解。XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布计算的基石之一。
不要将软件工程与CMM分开
现代大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员,一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能,如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。一句话可以概括我的看法:“创意无限,流程保证”。
拥有强烈的好奇心
什么才是一个程序员的终极武器呢,那就是强烈的好奇心和学习精神。没有比强烈的好奇心和学习精神更好的武器了,它是程序员们永攀高峰的源泉和动力所在。
Ⅶ Java程序员需要掌握哪些技术
Java程序员需要掌握哪些技术?Java的技术体系是非常庞大的,需要我们学习的技术非常多,往往很多初学的人,通过互联网查阅了一个庞大的学习列表,然后不知道如何下手。网上很多大牛列的技术不是不重要,但是掌握住企业应用的Java的核心技术,快速上手,是一种高效的学习手段。下面汇总了一下关于Java程序员需要掌握那些技术
第一、Java程序员需要掌握哪些技术?学会一个web服务
J2EE服务器——tomcat、Nginx、httpd等。其实要掌握的也简单那,知道什么文件部署在什么地方,只要会下载,能启动,能知道最直接、最关键的配置文件名字和位置就可以了。其他的服务器的名字了解一下就足够了。
第二、Java程序员需要掌握哪些技术?会一个框架
建议你学springMVC,因为所有的mvc框架都类似,只要坚持学习了MVC,其他的SSH、SSM等是容易借鉴的。作为一名新人在面试的时候可以说你自己擅长的,其他的框架了解一点点原理就行了,但是欠账还是要补上的,虽然说平时用顺手的框架也就那么几个,但是后期还要继续学习。
第三、Java程序员需要掌握哪些技术?数据库
mysql关系型数据库就很好,坑浅应用多,最近连集群支持的都很好了,你只要强调一点,数据库,你不是DBA,你还不懂如何调优,如何调执行计划,你只懂增删改查,所以你要学的就是T-SQL,标准是你能手写带条件的增删改查,会复杂语句更好,稍微了解下sql效率方面的问题,为了面试也是可以。MSSQL在国内被鄙视的不行,如果有人叫你弄oracle,那又是太装逼,我身边有一票的5年+程序员,其中有超过一半连oracle的AWR都不会读,有的连数据字典都不知道。
第四、Java程序员需要掌握哪些技术?程序方面
jdbc需要了解下,相关的有连接字的写法,如何准备和获取结果,什么是resultset这类东西,当然,数据库连接的关闭和释放也是需要的。
类和抽象类和接口的关系搞清楚,继承和实现搞清楚,重载重写搞清楚这些都是基本概念。
由于Java主要是B/S结构,无论是集成还是自己的前后端,你都要看一下http,整个http的生命周期是什么?存在哪些步骤和不同的application负责哪个阶段,相关的有几个request和response实体,包含什么是session了解下。
业务逻辑的话,上手仔细写几个例子就好了
第五、Java程序员需要掌握哪些技术?IDE
你总逃不过eclipse和几个大厂的东西。要用简单易用的,别花太多时间在这个上面。
第六、Java程序员需要掌握哪些技术?设计模式
你要稍微看一下,了解什么是设计模式,你大可以老实说,你根本刚入行,只是粗通工厂模式和单粒,其他的需要在工作中学习,这样既不会显得完全不懂,也不会出什么纰漏。
第七、Java程序员需要掌握哪些技术?前端
前端不需要了解太多,JSP+JS就足够了。jsp上有个容易忽视的基础点:tag到底是什么如何处理。jsp的生命周期这些也最好看一下。
基础的devops稍微了解下,git的代表,github可以注册一个账号,搞清楚本地repo和远程repo之间的关系即可。SVN更为简单一点。
Maven也要学习一下,主要是pom文件的几个主要的部分,尤其是depedency。
Java程序员需要掌握哪些技术?想要成为一名合格的Java程序员需要具备以上技术技能,并且不断地进行学习才能获得更好的发展。
Ⅷ 一名优秀的程序员必备的素质
一个好的程序员必备条件之一就是严谨的思维
1、养成良好的书写代码的习惯,该加注释的时候一定要加注释,该大写的地方一定要大写,变量命名不能模糊不清。这是基础,是为了让别人能看明白你所写的代码,不能你写的代码只有你自己才看的明白。
2、注意所写软件的版本控制。
3、勤奋学习最新的技术,计算机技术日新月异,这点我不说相信你也知道。
4、养成写开发文档的好习惯,再接到一个项目时,第一件事情是进行需求分析,然后写开发文档,把你每一步要做什么都先写清楚,再动手做。
5、不要怕技术难题,在计算机领域,只有不能解决难题的人,没有人解决不了的难题。
6、虚心象他人学习,即使技术实力比你差很多的人,也肯定会知道一些你所不知道的技术点。
Ⅸ 程序员的工作环境是怎样的
每个人职场人都希望在一个轻松、开心、干净、舒适的环境里面工作,这样心情好工作起来自然效率高,但是这毕竟是理想状态下的工作环境,当然现在绝大多数企业工作环境虽然达不到百分百,但至少有百分之六七十以上吧。
那么对于程序员这种有点特殊的工种工作环境又是怎么样的呢?
程序员又被人们称之为码农,也有人调侃戏称“程序猿”,程序员对工作环境往往需要有一张大的办公桌,他们不仅用一台电脑在工作,有时候需要几台电脑同时操作,而且遇到一些bug或者瓶颈的时候需要和同事协同工作,当然在硬件方面除了办公桌要大外,还需要配置比较高的电脑,毕竟这是程序员最基本的工作工具,试想如果刚有灵感,结果电脑卡顿或者死机了,那有可能灵感顿时就消失了,所以他们大多数工作环境都拥有足够大的办公桌和高配置的电脑。
前面就提到了程序员是有点特殊的工种,因为他们往往加班到很晚,时常会通宵,这就和我们正常上班的时间上错开了,他们往往白天睡觉,晚上工作,有时候为了打起精神工作,他们提神的方式各自不同,有抽烟的、有喝咖啡的、有听歌的等等,大家可以想象这是什么样的工作环境吗?但是程序员工作的时候,大多数情况下都需要安静的环境,毕竟安静能让人更好的思考问题。
每个人对工作环境要求都不一样,让自己觉得舒服的环境是自己愿意留在公司的原因之一吧,程序员也是一样的。
大公司的程序员,工作环境基本上就是一个电脑版的“衡水中学”,每天就是开会写代码改代码查代码开会继续循环往复,跟中学里每天就是拼命读书刷题刷题读书吃饭无味上厕所要跑一个样。
硬件配置无需你考虑,肯定是够你用。跟人的成本比起来,硬件就是个渣。
大公司的程序员工作比较稳定,每个人的分工是比较明确的,职业路径也很明晰,越往上的职位对智商的要求越高,这点和靠情商往上升的工作还真有点不一样。在程序员这个队伍里拍马屁搞关系基本没啥用,你写的代码都无需用户检验,自己一跑就知道成不成。这也是IT公司通常人际关系和氛围都比较轻松且简单直接的根本原因,特别适合那些不喜欢搞关系的同学去撸起袖子加油干。
如果你想在这个行业长期发展,智商一定要够用,真的。有没有基础倒在其次,如果数学好更佳。有些业内大咖本身是学数学或物理这些靠智商吃饭的学科的。
小公司的程序员,尤其是那些非IT类小公司里的程序员工作压力更大。面对不懂程序的销售和老板,还有极度贪心又不愿多付费的客户,需求三天两头变,界面是个人就可以提意见改,时间永远是“明天就要”。他们觉得程序员比悟空办法多,所以什么要求都提得出来。能在小公司做出成绩的程序员,真心让人敬佩不已。
小公司的程序员是掌握公司核心机密最多的人,比老板都掌握得多,所以通常他们的待遇也还过得去。另外他们一来二去把公司业务摸透了,出来自己干的也不少,当然能不能干成是另一回事。
其实程序员的工作环境真没什么要求,只要没什么干扰就行。学霸们在这里会找到十分熟悉的感觉,所以程序员之间以“同学”相称的极多。
我是2015年本科毕业的,但是2014年就开始工作了,从程序员+运营的工作开始实习(其实也是看最后哪一个更合适就走哪一个方向)。
对于实习阶段,因为当时待的是小公司,所以大家的配置都很一般。几个主力程序员加上我这个实习的,工作用的都是windows笔记本,联想的,除了我自己配的固态硬盘之外,很多都是机械硬盘在跑,没有特别明确的代码库规范、没有知识系统,交流全靠跑,有的是后端和前端一起干、前端和客服一起干,所以我兼职运营也是如此……平时要是不忙的话,那还没什么事儿,大家会闲聊扯淡,也算是其乐融融;但是要是忙起来,可能会突然加班到很晚——当然这种情况还是比较罕见的。
工作到了中型公司,跟以前的小公司就不在一个量级上了。这个时候主要的工作是后端开发,配置的电脑是联想的ThinkPad,但不是最高配那种,仍然没有固态硬盘,慢的要死。第一梯队的程序员配置有双显示器、机械键盘、mac。我的话配置的是外接显示器,座椅很一般,坐久了比较累。公司分工明确,办公室跨越两座楼,各个团队都有自己的办公室。有自己的wiki、定期站会、严格的代码规范、安全规范。一般情况下主要是在解决各种bug,或者开发新系统。偶尔流量高峰的时候,会加班到一两点,平常并不是特别忙,工作还是比较有序的。
其实想要招妹子进团队的,因为我们团队唯一的测试工程师长得真的一般,而且性格也很差……一个性格好长得好看的运营妹子真的能调动整个团队的气氛。
所以什么机械键盘、Mac、外接多少显示器、加多大固态硬盘、多好的人体工学座椅……这些都是假的,开发的团队里面有好看的妹子才真的是“好的开发环境”。
可以穿拖鞋?可以戴着耳机听着歌?配备两个显示器?身边总是围绕这MM端茶递水果?还是以上都不是,而是诗和远方?
程序员,一个高薪却严重亚 健康 的群体 。他们有着极客精神,疯狂coding的时候可以废寝忘食,但他们也追求精神自由,喜欢自由自在。对于这样一个群体,良好而又恰到好处的工作环境显得尤为重要。
1. 弹性上班制
常规企业的朝九晚五上班制度,说实话并不适合程序员一族,因为这种制度一定程度上扼杀了这个最需要差异性的群体的差异性,把程序员的Coding灵感等同于工厂流水线上机械手臂,希望按钮一按下,灵感发动,按钮再一按下,灵感结束。这是一种一厢情愿的想法。
所以对于高层次的程序员群体,请不要在作息时间上严格限制他们,因为他们不是装配工,有着独一无二的个体差异性,有着不同的思维G点,他们需要差异性的时间作息来调整自己的最佳状态,从而迸发激情和灵感。
2. 宽松的工作氛围
程序员群体讨厌管理,任何自上而下的所谓管理都容易引起程序员们的心理抵触,特别是那种死板的、指令式的管理模式,尤其让程序员们作呕。
程序员们希望自己做的事情是出于内心的意愿,那样他们就会干劲十足,而不是来自于经理计划文档中那条冷冰冰的文字,哪怕是他们心里意愿的和经理的计划本是同一件事。所以对于程序员群体的管理需要技巧,要化管理于无形,让他们感觉不到管理的痕迹,让他们感觉着做这些事情就是出自于他们自己的意愿。
总结来说就是让他们作为自己的管理者,而团队的管理者所要做就是培养他们这种自管理的能力。
适度的压力可以产生做事的动力,但长时间的持续的压力却是扼杀激情和创造力的罪魁祸首。压力会让程序员焦虑,同时也会造成低劣的设计和代码实现,因为交付的压力会让程序员对匆忙设计出来的方案妥协,而不会持续的优化找到最优方案。而一系列看似微不足道的缺陷设计集合到一起,就会形成让人意想不到的、不可控制的乱象。
所以,“快”不见得是好事,“慢”也不见得是坏事。
3. 鼓励参与开源项目
开源项目社区的欣欣向荣,是一朵盛开的奇葩,无论怎么赞誉都不为过。
一些着名的开源项目,例如Linux,Apahce, openssl等等,数不胜数的优秀设计,给我们带来了多少的惊喜,同时也催生了多少的商业公司。
参与到开源项目中,是一个程序员从初级走向高级、完善技术的最有效途径之一。一些着名的开源项目,架构设计和Coding技巧上都属上乘之作, 浸淫其中,受益匪浅。
其实以上三点不仅是对程序员群体,对任何一个职业的人来说都是适用的。再看下知乎上程序员们理想中的工作环境是怎样的。
@萧井陌:我读书的时候就有一个执念,一定要找一家可以穿拖鞋背心大裤衩上班的公司(当然我不穿大裤衩),如果我找不到这样的公司,说明我学得不好,所以我一直以来努力的目标似乎只是为了进一个能穿拖鞋的公司?哈哈哈哈。。。
@知乎用户:我只想要2个显示器
@知乎用户:1.安静,没有人随便喊你或者在你耳边说话;2.绝对的自由,程序员都有一定的怪癖,比如我喜欢听着摇滚乐写代码。这些都要被允许。3.温度,气味舒适的环境。
4.有个养眼的MM同事,大概是这样的
嘿,箭头方向那个哥们才是真正的程序员吧
5.独立10M光钎线
@Indream Luo,软件工程师:1.女多男少,人均年龄不到27;2.身处白云山上,与广东外语外贸大学一墙之隔;3.无边界文化,有问题可以找任何人沟通,包括高层,如果你见得到;4. 健康 文化,加班有补休,提倡8小时,自建食堂和农场,买下巴马泉眼特供矿泉水
@石磊
硬件:
1. 顶配的 MacBook Pro。
2. 上厕所不需要排队。
与人相关:
1. 不会在开发到一半时被通知要重新讨论功能,然后把以前做的东西全部推翻。
2. 没有不必要的会议,必要的会议速战速决。
3. 行政人事什么的做事清爽高效,这样不用在各种日常手续上浪费时间,只管写代码就好。
4. 同事们效率高、工作态度严肃、善于沟通、活泼有趣。
@张英锋:最理想的工作环境应该是能帮助团队沉下心来,开发出最好产品的环境。
1.上级对程序员工作的认可和尊重;
2.对所作的工作有自主权和决定权;
3.营造能让程序员专注于工作的设施,比如大家都提到的安静、以及各种提高生产率的硬件条件;
4.最后是公司是盈利的,最好是暴利,能持续提供更多福利。
@庄生:其实最重要的工作环境,还是有一帮靠谱的同事,真心的。可以术业有专攻,但是该你负责的你负责到底,保质保量,不要麻烦别人。
那你呢?你希望你的工作环境是怎样的?
上联:一个项目两部电脑三餐盒饭只为四千工资搞得五脏俱损六神无主仍然七点起床八点开会处理九个漏洞十分辛苦 ;
下联:十年编码九年加班八面无光忙的七窍生烟到头六亲不认五体投地依旧四肢酸软三更加班只为二个臭钱一生孤苦;
横批:苦逼程序员。
程序员飘过
作为一名程序员的我可以很负责任的说:是的,工作环境就像问主图片那样,可能会稍微好点,我们公司都是中央空调,不用电风扇!
我在程序员的岗位上也有好几年了,也待过几家公司,其实就工作环境来说,程序员的工作环境还是不错的,不用风吹日晒雨淋,而且是冬暖夏凉!和人们眼中的白领工作人员的工作环境是差不多的。
工作氛围其实也是很好的,程序员在穿着方面大部分公司是没有什么太大要求,可以穿着自己喜欢的风格(脑补一下大裤衩配凉拖的程序员正在撸代码),同事之间的交流也是很活跃的,所以程序员的苦逼之处不在工作环境,而是工作内容和压力。
程序员分工:
1.纯软件工程师,就是只靠电脑吃饭的,设计包括但不仅限于---网页、架构、UI、数据、运维、系统等等,整天与代码打交道;
2.Firmware(分位)工程师,半软半硬的工种,要焊板,要搭建环境,还要写代码维护代码,算法可能没有纯软件工程师牛,但动手能力绝对强,涉及的知识面可能更广。
本人就是后者,来看下我的桌面:
各个公司对于办公环境都不一样,国外都注重个人隐私,很多都是一个人一个封闭的房间。国内大部分就像图中所示那样,半隔开。也有 科技 公司,鼓励大家敏捷开发,多沟通,开方式办公
请忽略那些包含“安静,优美,闲逸的办公环境”的答案吧!
图中的环境,只是正常普通公司的工作环境。
不一定是程序员的。
程序员的工作环境,因工作内容,导致需要很多屏幕。
而且电脑配置也需要很高。
每个人因面对的公司、自身能力等因素,都会导致工作环境的不一样。
所以就有了工作环境好坏的区分。
如果你曾对着大海构思过某个接口,
在樱花飘落的院落里调试过代码,
那么你还觉得在写字间喝着咖啡对着三屏显示器敲键盘是理想的环境吗?
工作环境,还是得靠自己改变。
在程序者的不断追求下,编程是可以和写作一样成为艺术创造过程,
那么任何一个能够激发出你灵感的时刻和环境都应该可以成为你的办公环境。
资深码农应邀回答这个问题。笼统来说,程序员的工作环境与图中展现的差别不大。但根据工作属性和所属行业来讲,还是有一些区别。
甲方和乙方的区别
我在刚毕业时进入了一家软件外包公司,几乎所有的工作都是在甲方所在地完成的。
因为甲方员工是公司的稳定员工,所以工位来讲就要精致一些,配备也要完善一些。一般都会是隔间,有抽屉、插座、文件架、座机、台式电脑,甚至还有床等等。
而我们作为乙方因为流动性大,人数也不固定,甲方公司不太可能为我们准备这些精致的办公位,一般只是拉几张桌子拼凑起来,然后再接几个线板,有时候靠椅都没有,还得坐独凳。
技术驱动和业务驱动的区别
现在任何一个互联网公司,技术部门是必不可少的。但是有的公司会以业务为驱动,有的公司会以技术驱动业务。
以业务为驱动的公司就会优先考虑业务的发展,然后技术来辅助实现。我现在所在的就是这样一家公司,这样的公司技术部门就会非常的小,人员也会很少。这样的公司程序员的工位大体上和整个公司的风格没有太大的区别,因为人少,一般只有5-6个人,做技术的也喜欢安静,所以一般位置会选择靠近办公室的角落。
以技术为驱动的公司会依靠自身技术实力结合行业发展,碰撞出一些具有竞争力的业务品种,并与业务部门配合来实现并推广产品。这样的公司技术人员起码占到50%以上,这样的公司更有可能为程序员规划一个单独的大办公室,与外界隔离。一方面是为技术人员提供安静、舒适的办公环境,另一方面也是尽量避免闲杂人等进出公司技术核心所在地。
以技术为驱动的公司往往技术实力比较突出,所以他们会为自己的技术团队配备“驾驶舱”、小机房等设施。
就问题中的格子间来讲,不管是什么性质的公司,只要场地不是特别的拥挤,都会设计成格子间,这样既保护了员工隐私也充分利用了办公场地的空间。这并不是程序员特有的风格。