很少有人能靠自己的力量推进和发展自己的事业。一路上,他们有经验丰富的同事、导师和领导的帮助和指导。现在,你已经在职场上步步高升,你发现自己处于一个可以回报的位置。你有一个由软件工程师组成的团队,他们需要的不仅仅是一个监督者或任务主管。他们需要一个教练,一个能够提供指导和支持他们学习过程的人。虽然教练是大多数管理角色的一部分,但软件团队的运作方式却有些不同。你的团队在多个项目上工作,不断地生产代码,测试代码,并根据反馈进行调整。对细节的思考、对所有变化部分的跟踪以及与他人的良好合作,是引导团队取得巨大成就的关键。这些动力往往需要一种独特的培训方法。以下是培养优秀软件团队的四种方法。
1. 专注于提出问题
当孩子遇到困难或遇到路障时,父母会落入试图拯救他们的陷阱。担任技术职务的员工的管理者也会有同样的习惯。虽然这很诱人,而且有时更容易接管,但这并不能帮助你的团队学习。相反,它让他们学会了依赖你,并没有让他们有能力去思考问题。与其说出解决方案,不如尝试将你的反馈重构为问题。这种方法被称为苏格拉底方法。
什么是苏格拉底方法?
苏格拉底方法是由希腊哲学家苏格拉底开发的,它是教师和学生之间的对话,由教师不断地提出探究性的问题,共同努力探索形成学生观点和意见的基本信念。虽然经常被误解,但从柏拉图开始,大多数西方教学传统都是基于这种辩证的提问方法。1973年的电影《纸上谈兵》中由约翰-豪斯曼扮演的臭名昭著的教授金斯菲尔德博士采用了这种技术的极端版本。为了了解道德困境的核心和道德品质的原则,金斯菲尔德博士恐吓和羞辱他的法律学生,痛苦地拷问他们法律案件的细节和影响。
,它旨在帮助发展批判性思维能力。通过询问软件开发人员,在他们向你寻求帮助之前,他们已经尝试过什么,你将设定一个不同的对话。虽然你仍然会引导工程师找到解决方案,但你不会表现得像一个传统的命令和控制的领导者。你的开发人员有时会了解到他们确实有知识和技能来帮助自己。其他时候,他们会看到自己有能力评估自己专业知识的差距,并确定如何获得帮助。也许那是通过团队中的老手,你,或一个团体知识库。员工也可能意识到他们想参加一个课程,或接受一个更有经验的同事的指导。
2. 设计个人学习计划
大多数组织和部门都有标准的入职和培训程序,但一刀切的做法错过了将软件开发人员的职业发展交给他们的机会。虽然你不应该完全抛弃通用的基础知识,但询问工程师他们想学什么是值得的。个人发展计划是每个团队成员可以在你的帮助和反馈下设计的。新的团队成员可能需要一些时间来适应,然后才能制定计划。然而,如果有些人在第一天就带着职业目标的清单来上班,也不要惊讶。鼓励你的新员工记录和交流他们希望完成或学习的内容。作为团队领导,考虑与个别团队成员进行入职面试。入职面谈的目的是让员工谈论他们喜欢的工作内容。这些会议帮助团队成员确定流程和工具方面的问题,并表达激励他们的因素。你也会了解到你如何能够最好地支持整个团队和其中的每个成员。入职面试传统上是为新员工设计的,但你可以为经验丰富的员工调整问题。
3. 提供扩展任务和指导机会
在开发人员在工作的第一年里完成了他们的工作后,试着提供延伸任务或项目。你可以根据你对这个人的优势和发展目标的评估来分配这些任务。到现在,你也应该对他们的兴趣和团队对他们工作的反馈有一个概念。然而,你不希望只是突然给某人分配一个新的伸展任务。先征求他们的意见,问问他们是否愿意处理这个问题。了解他们认为在完成任务时需要哪些资源和支持。准备好提供这些资源,包括部门或组织内的导师。如果他们想更谨慎地应对挑战,要愿意修改任务。团队中的退伍军人也需要延伸任务,以防止无聊和脱离。这可能包括在新员工入职或第一年期间成为他们的导师。指导的机会也可以包括教授专业知识和提供项目的指导。与团队中的新成员一样,向经验丰富的老员工介绍专业发展机会,既是自愿的,也是可以修改的。
辅导你的开发人员
由大多数高级开发人员组成的开发团队是罕见的。相反,在技能和经验水平方面存在着差异。没有哪个初级开发者或新手是天生就有知识或经验的。他们可能没有足够的知识来避免陷阱,减少bug,或独立工作。研究人员还分析了四十三项研究,发现接受指导的员工i)对自己的职业更加投入,ii)更有可能相信自己会在事业上有所发展。
无论是否在工作描述中,高级工程师都需要建立一个技能的生态系统,而这只有通过导师计划才能实现。这里有几个提示可以让你开始:
在你的团队中发展导师-学员配对计划。更有经验的员工可以CodeReview审查代码,而初级开发人员则编写代码。(在这里获得更多关于结对编程的提示)。
指派练习编码项目。告诉被指导者在Java中建立程序,或根据真实世界的任务创建项目。
定期审查他们的代码并提供反馈。找出提示、命名方法、测试模式、结构等方面的问题。
始终让他们参与对他人工作的代码审查。
与你的团队中的导师举行会议--汇总导师的反馈,了解你如何发展被指导者的技能。
推荐书籍、参考资料或博客文章来扩展他们的知识。
4. 促进项目合作和目标设定
作为领导者,你的工作就是要想办法让你的团队步调一致。为项目提供一个整体愿景或方向,使每个员工都有一个共同的目标。每个人都有单独的、重要的任务要完成,但仅仅完成这些任务,然后继续下一个任务是不够的。团队成员需要看到他们如何影响整个项目和他们同事的工作。 有了项目管理软件和协作工具,概述细节和大局是一件轻而易举的事。当然,你仍然需要在启动会议和签到会议上沟通目标和期望。然而,管理和协作解决方案让每个人都能了解项目的范围并衡量进展。工程师们可以实时地一起完成里程碑,或者在他们有空的时候交换反馈。你能够介入,为个人和小组的贡献提供建议,随着项目需求的转变,团队可以在一个集中的地方提出问题,分享想法,并做出调整。
作为一名技术领导,你有能力确定团队的方向。仅仅命令别人和完成项目是不够的。你需要设定一个愿景,并确定你能做出贡献的最佳方式,使其成为现实。例如,当迈克尔-德胡格(Michael de Hoog)成为Coinbase(一家数字货币兑换公司)的技术领导人时,他专注于组织的规模化工作。这是一个重大的变化,因为他已经习惯了产品工作,而不是管理规模化的挑战。然而,他保持镇定,在六个月内有条不紊地处理这种情况。他的努力得到了回报,随着加密货币价格的急剧上升,Coinbase的规模扩大了40倍。他说:""你可以说那些时间很辛苦,因为我们在做长时间的工作,与这些规模化的挑战作斗争。但它们也是如此有趣。我认为,没有人会放弃这个机会。我们看到的东西可能在我们的一生中都不会再看到,这种规模的挑战,每个人都想在那里,不管它有多难。我们从迈克尔身上学到了什么?设定一个能够对你的团队或组织产生实质性影响的愿景是第一步。然后你需要为你的主要目标而努力。即使你可能对自己的能力没有信心,但你最终会成长为这个角色,并发展出领导技能。
”你可以说这些时间很辛苦,因为我们在做长时间的战斗,这些规模的挑战。但它们也是如此有趣。我认为,没有人会放弃这些。我们看到的东西可能在我们的一生中都不会再看到,这种规模的挑战,每个人都想在那里,不管它有多难。“
5. 学习反馈的艺术
拥有高级职位使你有权力在会议或讨论中向成员提供反馈。对初级团队成员的工作方式和表现的评论可以大幅提升他们的表现。一项研究发现,员工强烈支持反馈的价值,而当他们很少或没有得到反馈时,10个工人中有4个会主动脱离。开发人员对反馈并不陌生,因为之前有代码审查的经验。定期提交工作,让你的同行把它拆开,有时是一个艰难而关键的过程,但这就是工程师们向上晋升的方式。
技术带头人如何才能提供诚实和富有成效的反馈?这里有一些提示,可以为你的成功做准备:
考虑将你的反馈表述为问题。这可以鼓励接受者思考和反思解决方案。询问他们觉得自己做得如何,并倾听他们的回答,以建立对话的 "共同所有权"。
识别背景,学会同情员工。在批评之前,要努力理解他们的行为。
阐明问题或批评,但提出替代方案。提供建议的解决方案,帮助有关各方了解他们如何能够茁壮成长和出类拔萃。
没有人愿意听到完全负面的评论。突出胜利,关注员工做得对的地方,以增加动力和支持发展。
6. 掌握任务授权
技术带头人应该把他们所知道的事情委托给别人,以保持对重要任务的关注。如果你知道如何解决可能出现的问题,那么将任务委托给初级团队成员会更容易。当他作为一个软件工程师工作时,科迪-恩格尔把他自己能迅速完成的任务交给了别人。例如,他的架构小组想用Volley来处理Android内部的网络。他多年来已经做了好几个AsyncTasks,所以他把它分配给一个初级工程师。他写道:"我能够非常容易地回答他们的问题,如果他们在调试中遇到问题,我就在那里把他们从悬崖上拉下来。我还通过代码审查看到了Volley的样子,而工程师则了解了所有关于网络请求的情况。这也有一个额外的好处,就是让我看起来像个万事通,因为在这种情况下,我的知识非常丰富。"
这种策略让初级工程师犯错,承担风险,并经历失败--这些事情对学习过程都是至关重要的。当他们在正确的指导下自由地完成任务时,他们可以迅速建立自己的能力。
7. 保持相关性
高级职员工作的另一个方面是要保持对行业趋势和发展的更新。每天抽出1到2个小时阅读你所在领域的材料,并使之成为一种习惯。关注相关的技术出版物。在社交媒体上关注你的同龄人。订阅相关的subreddits。建立一个由经验丰富的技术领袖和分析师组成的网络,以获得对当前和不断发展的技术的洞察力。不要忘记监测你的竞争对手如何改变他们的产品,以及他们使用的技术。了解你的团队正在使用或反对什么,总是很重要的。这里有几个提示,以保持对你的竞争对手的关注。
在社交媒体上关注竞争对手。
订阅他们的博客和新闻简报。
定期阅读他们的最新发布说明。
看看竞争对手的评论,注意负面反馈。利用这些评论来制定产品功能和升级的想法。
使用像Marketing Grader这样的应用程序来检查社交媒体粉丝、索引页面和链接域等指标。
8. 发展自主领导
官僚主义会使事情变慢,这已经不是什么秘密了--平均而言,公司会因为一种叫做组织阻力的东西而损失20%以上的生产能力。无论你是初创公司还是大公司的技术领导,当等级制度最少、流程较少时,效率会更高。建立一个员工有自由和自主权的环境是非常重要的,可以让他们自我指导。哈佛商学院高级管理项目主席Ranjay Gulati将自由定义为相信员工能够代表组织独立思考和行动。Gulati研究了Netflix的自由和责任文化。该公司的员工可以选择他们的产假、旅行费用和休假时间。作为交换,他们被期望为企业做出正确的决定。他指出。"这种自由并不仅仅是供人享用的。员工被期望行使它作为他们对组织的责任的一部分。例如,他们的工作是阅读、理解和辩论基础性文件中的观点"。
在现实中,你的企业可能无法提供与Netflix一样的福利--但你应该以自主为目标。鼓励团队成员在会议上分享他们的想法。给他们自由,让他们做出改变,提高工作质量。伟大的技术领导不是一夜之间就能完成的。他们从对自己团队的愿景开始。他们的团队通过反馈、任务授权和导师制发展出一个技能的生态系统。他们磨练了自己的技能,并达到了顶峰,因为他们接受了挑战,保持了决心,并保持对解决方案的关注。
如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。
我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
当您在Ruby脚本中使用系统调用时,您可以像这样获得该命令的输出:output=`ls`putsoutput这就是thisquestion是关于。但是有没有办法显示系统调用的连续输出?例如,如果您运行此安全复制命令,以通过SSH从服务器获取文件:scpuser@someserver:remoteFile/some/local/folder/...它显示随着下载进度的连续输出。但是这个:output=`scpuser@someserver:remoteFile/some/local/folder/`putsoutput...不捕获该输出。如何从我的Ruby脚本中显示正在进行的下载进度?
网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.
所以基本上是为了好玩,我试图生成一列数字(7位数字只有0和1)我的代码很短:a=rand(0000000-1111111)b=220a1=rand(0000000-1111111)a2=rand(0000000-1111111)a3=rand(0000000-1111111)a4=rand(0000000-1111111)a5=rand(0000000-1111111)whileb!=0putsaputsa2putsa3putsa4putsa5end我的问题是,不是生成随机的0和1列,而是所有,而是使用了数字。 最佳答案 这是惯用的
我正在尝试使用RubyEventMachine访问使用SSL证书身份验证的HTTPSWeb服务,但我没有让它工作。我编写了以下简单代码块来对其进行端到端测试:require'rubygems'require'em-http'EventMachine.rundourl='https://foobar.com/'ssl_opts={:private_key_file=>'/tmp/private.key',:cert_chain_file=>'/tmp/ca.pem',:verify_peer=>false}http=EventMachine::HttpRequest.new(url).g
下面的代码通过ftp上传文件并且它有效。require'net/ftp'ftp=Net::FTP.newftp.passive=trueftp.connect("***")ftp.login("***","***")ftp.chdir"claimsecure-xml-files"ftp.putbinaryfile("file.xls",File.basename("file.xls"))ftp.quit但是如何确定上传是否成功呢? 最佳答案 之后ftp.putbinaryfile("file.xls",File.basename("
现在我正在使用我的Rails应用程序成功收费,但我想获取有关交易的某些详细信息,例如商品购买的描述和信用卡的最后四位数字,以显示给用户他们的收据页面。我一直在查看文档,但实际上没有任何内容可以解释如何为应用提供token并取回charge_id,然后我可以使用它来获取有关费用的其他信息的哈希值。任何帮助都是巨大的。谢谢! 最佳答案 Stripe在对费用创建调用的响应中返回费用ID。如果您使用的是Ruby库,则可以执行以下操作来获取ID:require"stripe"Stripe.api_key=''charge=Stripe::Ch
我在Ruby(test.rb)中有这么简单的代码:#!/usr/bin/envrubyrequire'optparse'OptionParser.newdo|option|option.on("--sort","Sortdata")doputs"--sortpassed"endend.parse!然后我运行它:./test.rb-s并得到:--sortpassed我错过了什么吗?我希望唯一的--sort(长)选项有效,而不是短选项。如何获取? 最佳答案 我在optparse.rb的第1378-1380行中找到了导致此行为的代码:#i