您希望初级软件工程师具备哪些技能?[关闭]


64

我最近完成了软件工程理学硕士学位,而我将在几周内开始我的职业生涯。我将担任一家使用Java及相关技术(包括Spring和Hibernate)开发软件的公司的初级开发人员。老实说,我对即将发生的事情感到非常兴奋,尤其是因为我想发展自己作为Java开发人员的职业。我也对获得该领域的经验非常感兴趣。此外,这将是我作为专业开发人员的第一次工作经验,因此我真的很想从一开始就努力做到最好。

我想知道哪些软硬件和技术方面的技能和能力会成为可能成为您团队的一部分的新专业人员(初级开发人员)得到的最赞赏,以及我应该专注于哪些技能来实现软件事业的成功工程师。


13
一个精彩的问题雄辩地问到。
亚当·克罗斯兰

2
查找当现实世界中的工作无法按您想象的那样进行时的网关药物/活动,但要确保其影响不会扩散到早晨。
Job

注意细节-没有什么比这更重要了。
2011年

1
由于您是JSWE。熟练掌握您说过的语言。雇用说自己会说某种语言但只在一门课上学习过的人,这没什么好生气的。示例:在简历中列出C / C ++但不能使用任何一个的人(上帝禁止,不能使用任何一个!)
aqua

做电子游戏的梦想发生了什么?您“认真地想发展[您的] Java开发人员的职业”吗?只是在开玩笑,对每个人自己:)
cambraca 2011年

Answers:


50

无论您在职业中处于何处,这些都是正确的,但对于刚起步的人而言,这尤其重要。

  • 听多于说话。学习别人怎么说。
  • 要谦虚。不要害怕分享您的想法,但是不要以为您是对的,其他所有人都是错的。如果您发现自己认为不对的地方,请提出要求,不要发表任何声明。
  • 保持学习。您的教育基础(应该)很棒,但是您才刚刚开始学习该专业。通过实践学习。我认为除非您实际练习所学内容,否则您无法真正学习。
  • 直到看到顾客,顾客很少知道他想要什么。适应不断变化的需求。采用一种开发风格(如果允许的话),以快速将事情传达给客户,以获取反馈。
  • 寻找擅长与客户合作的人,并请他们指导您如何与客户建立关系。
  • 编写经过严格测试的健壮代码。达成目标不是目标。正确完成它是。如果您擅长于此,速度将随时间而变。
  • 努力工作。不要等待被要求做某事;寻找或要求做的事情。
  • 归因于您的错误或团队的错误。不要将您的团队成员丢在客户面前,但是当您遇到代码问题时要诚实。
  • 您可能认为您的队友希望您成为出色的编码员。那太棒了,但是您的队友真的希望您能胜任,而不是一个混蛋。如果您要成为一个混蛋,那么最好变得聪明。

3
为“客户在看到之前很少知道他想要的东西...” +1
FrustratedWithFormsDesigner

1
为“继续学习” +1。那可能是我在初级程序员中寻找的最重要的东西
Rachel

+对于“完成任务不是目标;正确完成任务是”确保代码不仅有效,而且经过严格测试非常重要。同样正确完成它意味着另一位开发人员可以查看您的代码,理解它并阅读注释,然后负责维护所述代码。
杰里米

61

这是我最想知道的快速清单:

  • 跟进(完成您的开始)
  • 诚实(告诉我,如果您遇到困难)
  • 好奇心(寻找更好的做事方式)
  • 开放的思想(对批评和不属于您的想法)
  • 慷慨大方(分享您的知识;培训下一代)

1
我同意所有列出的品质。如果我被要求指导这样的初级程序员,我会很乐意这样做,这将使我的工作变得非常愉快。
亚当·克罗斯兰

3
我认为这个清单几乎可以总结一下,我唯一可以添加的就是交流。我已经看到这么多有希望的年轻开发人员被遗弃了,因为他们只是不想与团队成员进行交流。如今,仅靠编码并不能解决问题,您必须与用户,团队成员交谈并参与进来。另外,学习如何写得好,因为您将做的比预期的要多。
Nodey The Node Guy 2011年

14
+1诚实:学会说“我听不懂”。-首先对您自己,然后对您的同事来说–非常重要。它为交流和学习打开了一扇门。我见过太多的程序员允许他们的自我阻碍他们发展思想。我从事该行业已经有40年之久了,但我每天仍然碰到我不了解的东西。因此,我在google上阅读并编写了练习代码,然后又有了另一项可以带到餐桌上的技能。
彼得·罗威尔

胸襟开阔-特别是规则书的例外。我在这一点上失败了。经验的一部分是学习何时违反规则。有时候,强迫一切都符合自己的理想只会使一切变得更加复杂。太太,根本不了解规则书
Steve314

1
在诚实方面:我告诉人们为我工作的时候是花半小时尝试自己解决这个问题,然后向我寻求帮助或指示。如果我没有即时的答案,请先敲四个小时左右,然后再告诉我要花更多的钱。那是我们开始将人们从其他任务中拉出来以提供帮助的时候。这些天,我也建议他们先进行搜索,然后在Stack Overflow和Google中进行询问。我在这里的目标是防止即时中断响应,该响应会破坏您周围人员的生产力。
哈克锯


4

好奇心,热情为自己树立了高标准,乐于学习,乐于承认他们不知道,对企业的工作及其如何影响您的工作产生了兴趣。(即使您有20年的工作经验,也都具备良好的素养)

熟练的技术知识很棒,但是您必须展示如何应用这些知识。

最重要的是,面试官必须能够看到您在此工作并做出贡献并希望留下。如果你太好了,那可能会使一些人离开低于平均水平的人更快。;)


4

动机。你知道如何激励自己吗?您知道哪些策略可能比其他策略更好吗?这是关于自我意识,有些人可能希望您从所学到的所有知识中了解到这一点。

基本的测试和调试技能。您知道什么是单元测试吗?您知道几种调试问题的方法吗?这不是专门了解在环境中做什么,而是关于最基本的测试可以是什么以及在解决问题时应采取何种策略的一般想法。

沟通技巧。您的语言精确度如何?您从技术到非技术的水平如何?当然,这是有待开发的东西,但这是要注意的东西,在某些情况下,可以拯救一个可能由于不了解他们所声称的含义而陷入困境的人。您与人相处得如何?并不是说这是一个严格的要求,但是如果您可以与同事保持良好的关系,则可以使某些工作更容易处理。诚实和正直也属于此技能组,因为通常可能会有关于您说出的意思和您说出的意思如何的问题。 “办公空间” 有很多沟通不佳的例子,虽然作品是虚构的,但对于某些人来说,在办公室环境中工作可能确实接近许多现实。

多功能性。团队中的新人员可能承担广泛的职责,因此,如果在一家小型公司中,您可能必须设置数据库,网络,Web服务器以及其他开发以外的内容。努力帮助团队按时完成任务将是这里的另一个例子。


1
+1:我想在“沟通技巧”部分添加诚实。如果您完全不熟悉某件事,或者您对某个问题感到困惑,那么尽早告诉高级同事或团队负责人可以帮助以后避免更严重的问题。
oosterwal

2
等等...“办公室空间”是虚构的???
PSU

3

对我而言,作为一个没有任何学位的初级开发人员,我努力工作和自我完善的意愿极大地帮助了我的职业生涯。我也注意到能够应付一些批评(积极与否)并能够跟进批评,这对我的上司表示赞赏。

至于新环境:我建议在第一周左右就顺其自然。我做的过于卖力的错误,这是赞赏。


是。接受批评意味着要提出很多后续问题,以使“批评者”更加自在。询问您还有哪些改变可以做得更好。显示具有相同问题的下一个示例-这次您做得更好了吗?你在进步吗?一旦每个人都对建设性批评真正感到满意,乐趣就开始了。请记住,您的业务产品人员可能不会这样想;)
Michael Durrant

3

我同意已经提到的所有内容,但是我想强调一点,您永远不应忘记这些通用(和软)技能来代替成为技术专家。您应该同时做这两个工作,但我更希望有一个中级可以交流他们所知道的知识,然后有一个宁愿一个人工作的硕士。

另外,不要在书本上花费过多的时间。书籍很好,甚至很棒,但是如果您将大部分时间都花在阅读上,而花在工作上的时间却更少,那么您将不会从这些书中获得一半的收益。


++好点,韦斯,尽管我不得不怀疑。如果我这些天问人们是否读过某某东西,答案通常是-阅读?
Mike Dunlavey

2

很好的答案。根据我有限的飞行经验,我只想补充一句-您知道他们所说的飞行员执照吗?

学习许可证。


2

很多很好的答案。

即使我不为“大人物”工作而且我不是专家,我也会加2美分。

对人友善

尝试与您的同事进行社交,如果可能的话,每天与他们中的一些人在一起。偶尔与他们一起吃晚饭,和他们一起开心地笑。

换句话说,如果没有一个社区,则尝试建立一个“社区”;如果确实存在,则尝试加入其中。

认识您的同事将帮助您更轻松地与他们相处。另外,赔率很好,您会乐在其中。


2

除了社区(上)提交的所有好东西之外,我还希望看到一些技巧的证据。不是完美或极客能力,而是对基础知识和基本概念有很好的了解。您已经获得了工作(顺便恭喜!),所以您就在那里。

但是,刷新您的知识和/或紧跟公司使用的工具,语言和技术,这将意味着您将立于不败之地,并留下良好的第一印象。

假设的理想初级开发人员将了解以下方面的基本知识

  • 语言。
  • 输入输出
  • OO概念,例如继承
  • 对象接口
  • 数据库访问(尤其是关于在新代码店中如何进行访问)
  • HTTP模型
  • 的CSS
  • JavaScript / jQuery
  • 数据库设计
  • SQL和存储过程
  • 您将要使用的IDE
  • 相关框架(您提到了Spring)

等等。他将能够专注于掌握新技能,而不必停下来学习基础知识。他将能够使用在线表格的常规票价(许多初学者在头几个月中遇到的管理页面)踩踏(问自己喜欢的许多明智的问题-大多数高级开发人员喜欢明智的技术问题)。成为一名可靠的初级开发人员可能是您的第一个团队入门测试;-)

当我刚开始在一家大公司的Web团队中担任大三学生时,分配给我的大部分初始工作虽然没有什么启发性,但是却使我感到难以接受,使我每天晚上都无法读书,这样我便可以理解自己的打算第二天必须做。我通过了,但是那是我的硕士课程相对豪华之后的五到六个月的压力;-)

如果您可以高效地完成所有基本工作,则可以更快地获得更多有趣的工作,这当然将有助于您的职业发展。

呼应以上许多观点,计算机和代码的世界正在不断发展。您将需要隔天学习新知识。睁大你的思想,并尝试保持一开始就着手的原因-因为你<3。在未来的几年中,有时这将不在您的考虑之列。热情会带您渡过大部分的坎and和障碍。

说了这么多,我过去十二年左右的经验表明,大多数大三生不会永远留在第一家公司,所以不要对“完美”抱有太大的兴趣。犯错是整个过程的一部分,它将使您从初级到最终的目标。我已经这样做了一段时间,几乎每年至少要删除几次生产数据库。

祝您事业顺利。


1
+1具有提到一个答案的东西具体到编程,因此不能移动未经编辑成boyscout手册。
psr 2012年

大声笑。是的,这个问题有很多陈词滥调;)
5arx 2012年

1

(1)思想开放。您不希望有人被制度化地在每个项目中使用语言X和环境Y。您希望某人能够在特定技术无法彻底解决问题并提供良好替代方案时有所作为。最重要的是,您希望有人可以挑战传统思维,并提出激发业务发展的解决方案。您可能自己会遇到这种情况,但是我发现人们已经习惯了一个流程,以至于他们没有改变它,但是他们仍然抱怨它给他们带来的痛苦。通常,当我到达时,我会研究如何改善这种情况并向经理提供解决方案。现在,我还要说,个人应该对他/她的建议“外交” :)

(2)良好的领域建模能力。我发现有些人忽略了这个很大的东西。在我工作过的一些地方,对业务的了解正在“弄脏你的手”,人们回避纯粹的技术问题,例如将拼写检查器集成到版本控制中,等等,他们并没有花费很多时间来改善商业。能够查看业务并从中创建模型(简化)并将其传达给各种听众,无论是口头表达,视觉表达(UML,SSADM还是其他),或者两者兼而有之,您都希望拥有这种心态的人。

我可以推荐的两本书是:《热情的程序员》《实用的程序员》。这两本书都为初级和高级程序员提供了很好的建议。


+1推荐书;OTOH域建模技能需要一段时间才能成熟,所以我不希望这些是初级的。但是,在任何层面上,努力理解业务观点并解决用户的实际问题确实很重要。
彼得Török

彼得,通过大学(至少从我所见),开发人员将建立一套强大的分析技能。这实际上是建模,提取专业知识并使其他人学习的目标。因此,我想说这是我期望大多数开发人员掌握的一项基本技能。能够在微观/马尔科层次上解决特定问题,并向金融交易员解释这一问题,获得反馈并将其传达给队友。不过,那只是我的看法。
荒凉星球

1

主动。我有很多人根本不这样做,总是等着被告知要做什么。如果您发现需要改进的地方,请执行此操作。您有想法要改进吗?提出来。需要其他技巧来改善某些东西吗?学习吧。

表明您关心自己的工作并想改善。


1

一点也不吓吓您,但我要警告您的一点是,在我工作的每家公司中,都是肮脏的巨大滚动方法以及名称不正确的对象,它们使您不敢纯粹地打开源文件如此混乱的震惊和恐怖。通常会在对话框中的“确定”按钮或网页上的“提交”按钮的事件处理程序中找到这些位置。

我从心底里求你。请安装一个心理警钟,当一个方法开始看起来很大时,我的意思是说,超过10行左右,请考虑创建另一种方法...这么多方法以后,您将了解您正在开发的对象。

我建议的下一个警钟是某个方法中最多2-3个参数。如果看到带有大约10个输入参数的方法,请向OO语言的函数式编程打个招呼...

抱歉,此响应中表达了一些小小的挫败感,我只是无法大声尖叫,学习如何编写简洁的代码有多有益。

请给自己拿一份罗伯特的副本C马丁斯清洁法典。每周阅读一次,拿出来吃晚饭,在枕头下睡着,在厕所里放些副本,打印出几页并将其粘贴在天花板上,以便睡觉时可以先阅读你点头;)。

祝您事业顺利!此时您的热情已经表明您将做得很好。


1

我能提供的唯一建议就是永不停止学习。这些摇滚明星开发人员到达那里的方式是花时间学习新技术和语言,这是他们自己的空闲时间。如果您在那里呆了10年真是太好了,但是当您出来时,您只会了解Java + Spring + Hibernate。这就是为什么在业余时间我会看.NET平台,Python和偶尔的C ++代码保持活动的原因。作为在信息安全秒内处理MS的人员,时间可能是宝贵的,必须明智地花费时间。


1

使用谷歌的能力。真。

并不是说我永远也不会帮助任何人,特别是初级同事。但是没有什么比让某人持续地不尽职尽责来解决问题更令人沮丧的了。

我给初中的建议。工程师将尽您最大的努力解决问题。当您不了解某些内容时,请勤劳而有条理地使用google,wikipedia或stackoverflow。

不要等太久再去找更高级的同事寻求帮助-不过这取决于组织的类型。在一家可以互相帮助的优秀公司中,如果您花了半天以上的时间来寻找答案,请不要犹豫,停止自己的研究以寻求帮助。

在其他人总是互相尊重的组织中,您可能需要花费几天的时间(记录您所做的一切以及所研究的所有内容),然后才能寻求帮助。在这样的公司中,记录您所做的工作会有所帮助,这样您就可以向他们显示“您在Google上做了它”,因为这将是他们对您的第一个反驳。

但是无论如何,我在初级工程师中所寻找的本质是尽力而为地努力解决问题,而不是一直期待得到答复。简而言之,请告诉我您可以使用Google。



1

如果您遵循人们在这里所说的所有话,那很好的答案,我相信任何人都会擅长于他/她的所作所为,

只想强调几点。

  • 谦虚,不要害怕发表您的意见,但是一旦分享了意见,请不要坚持下去,并准备向他人学习。
  • 与您的团队成员建立关系,我们想与聪明和成熟的程序员一起工作的人,我们仍然需要可以与之交谈的人,与您的团队成员保持健康的关系将极大地帮助您的事业。
  • 积极主动,不要等到工作,寻找工作,向环境提出新想法时,即使他们不被接受,这也会为您增加对公司的价值。
  • 与他人分享您所学到的知识,这将增加您的理解水平,并增加您对公司和社区的价值。
  • 完成您的开始后,承诺是一种伟大的品质。
  • 当事情没有按计划进行时,要保持快乐,不要失望,会有跌宕起伏,但要坚持下去

一切顺利


1

我认为很多Jr程序员都没有的一种技能,但确实是一种很好的技能,它可以创建自己的工具。您可以使用一些精心制作的自定义工具来节省大量时间和精力。而且它们不必花哨,我的大多数是3行shell脚本,尽管有些更长。

但是,学会使事情自动化将使您的生活更轻松。(当您做好事时,给同事留下深刻的印象)


-3
  • 非常不喜欢Java和C ++。
  • 对操作系统内部,算法和数据结构的基本了解。
  • 精通C语言,至少有一种脚本语言。
  • 一个主流VCS(Mercurial,Subversion或Git)的工作知识。
  • 能够在命令行上熟练工作的能力。
  • 不喜欢Windows,偶尔会在家中使用Unix衍生的操作系统(例如Linux,BSD或Solaris)进行开发或通用。

我不认为完全不喜欢Java / C#/ C ++并不重要,因为要理解世界并非始于它们。Java有它的用途,但这样做的Ruby,PHP,二郎,Lisp语言等
扎卡里ķ

培养主流VCS的工作知识需要多长时间?
Andrew M

@Andrew M:精通VCS周围的大量工具可能需要花费数周的时间。差异,分支,修补,合并。然后,解决每个VCS的局限性或过度复杂性。
马特·乔纳

@马特:我明白了,谢谢。那么,独自完成此操作的最佳方法是什么?仅将它用于您自己的宠物项目就足够了吗?
Andrew M

2
您的第一个和最后一个要点与擅长开发或学习(新开发人员需要做的主要事情)无关。只有团队中的每个人都共享“不喜欢XYZ”,这才有用。如果每个人都没有,那只会引起裂痕。Windows仇恨者和Linux仇恨者之间没有什么区别,除了它们都是讨厌者之外。另一方面,由于个人经验而有理由不喜欢某事的人意味着他们可以拿东西-值得拥有...但是在家使用Suse不会使您变得更聪明。
corsiKa 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.