程序员如何提升自己横向能力?

程序员如何提升自己横向能力?,第1张

   最近在和团队内几个小伙伴进行聊天时发现,当问到自己总结一下最近一年或者半年的成长这个话题时,大家给出的答案都是,我又学习了什么样的技术,对某个开发技术又精进了等此类的回答。当我们聊到横向能力的有哪些变化时,大家给出的答案和理解都有所不同。

   聊天的过程中有一个小伙伴向我咨询是该先针对某项技术进行深入研究,还是该综合横向能力去发展?此时就聊到对横向能力理解,小伙伴理解的横向能力是指学习市面主流的框架,中间件,新的语言等。这与我理解的横向能力却有很大的差异,下面谈谈我对从事软件开发小伙伴应该具有横向能力的理解。每个人的认知和观点都不同,此处不讨论对与错,只简单说说我的看法。

   毕业以后我从学校回到合肥,加入了一家初创公司,算是进入了软件开发这个行业。说一下这个初创公司,全职员工4人,兼职员工3人,公司的创始人都是技术出生,所以整个公司的技术氛围比较浓厚,我在这个公司工作了三年半。现在看来,在这个公司的三年多经验,仍在我现在工作中发挥重要的作用。初创公司的好处就是任何岗位都是处于人力缺失状态,可以让你有很多的机会承担不同岗位的工作,给你带来工作挑战和压力的同时,也会让你快速的成长。我从一个实习生加入公司,角色也由初级开发,中级开发,高级开发,项目主管,客户现场负责人,到产品业务线负责人,工作内容也由单纯的技术开发,到技术管理,项目管理,客户需求管理,以及到全面业务线管理,涉及了从项目启动,实施,维护等全流程经验。

   后来我加入了现在的公司,最初应聘的岗位是软件开发工程师,入职后被调整到一个大数据组,做内部创新项目孵化,当时的情况是我一个人需要承担从开发到上线的相关的事宜,庆幸的是之前的工作经历让我熟悉整个项目研发周期内的流程工作,经过紧张的几个月时间,带着两名实习生顺利推出孵化项目。接着所在团队调整为公司前瞻方向的团队,业务发展需要,我开始组建开发团队。随着业务的发展,我的工作内容由之前的研发慢慢转变为关注技术管理,工作集中在产品研发流程改进,质量改进,IPD体系落地建设,团队组织建设,人才培养等,与我最初的工作经历又完全不同。

   在我看来,我的本职工作是一名Java开发工程师,我把我在本职工作方面的能力成长都归为专业能力,剩余的我归为综合能力也就是我所理解的横向能力。例如开发技能的掌握的成熟度,开发技能的拓展,架构能力的提升等等我统一归为我的专业能力提升,而随着团队的需要额外掌握的项目管理,需求管理,研发技术管理或者产品设计,客户沟通等等我统一归为横向能力的提升。

   随着工作的年限增长,所遇到工作的内容和工作当中的人和事都会影响着自身制定的一些计划,在不同的阶段,都会有不同的想法。可能在刚开始自己还给自己制定了一个好的规划,例如工作三年,工作五年我要达到什么目标,技术达成什么要的水平,收入达到什么样的水平等等。

   我们在制定要目标后,要告诉自己你在向目标努力的时候,需要扩展自己的哪些横向能力。例如从初级程序员到高级程序员,你需要补充沟通能力,技术管理,需求管理等;当你需要着手独立管理项目时,你需要补充招投标商务能力,财务能力,项目管理,客户管理等;当你转变为业务线负责人时,可能你需要关注人员沟通,组织协调,应急处理等。所以当你有了明确的目标以后,你需要知道自己欠缺的哪些,然后去提升。

   如果制定好的规划不去想通过哪些途径完成,就会变成的空想,时间长了以后,就会变得过一天是一天,不在去主动的寻找机会,主动的提升自己动力也慢慢消失。所以在给自己做计划时,需要明白自己想要什么?最简单的一个原则,你在离你下一个目标时,找出你觉得你欠缺的能力去补充。有时候我们需要刻意的去学习一些知识,通过看书,看帖,网上的大牛文章,请教同事和领导,都会让你有很多的收获。另外在定计划时候,建议不要定太长的计划,一般我会定一个月、两个月,最多不要超过半年,自己找出最想做的3-5件事就可以了。

   有人会有这样的疑问或者说是困惑,在团队中可能短时间无法确定自己的下一个目标,这种情况下,我的建议是给自己假设一个情景,例如现在有一个新的业务线需要组建新的团队,自己能否去新的团队承担比现在更多的职责,我现在是一个中级开发,我能否过去承担一个小团队的负责人;我是一个高级开发我想尝试下项目经理,是否能够独立带领项目团队。当我们经常给自己假设目标时,每隔一段时间,你就会有新的挑战,自然而然的就去学习不同的知识。通过自己给自己设定一些具体的假设目标,这样会使得自己的规划在具体实现时有具体的抓手,而不至于无从下手。

   当明确好我们自己的下一阶段的能力提升目标,也进行了相关能力的理论知识学习,如何去实践,把理论真正的变成自己的经验。我自己的理解是:慢慢去实践,不用着急。不要想着一次性就能把事情做好,一口吃个胖子。当你在跨专业做一些事情的时候,往往也是打破自己传统认知,有时候也会有自我否定的过程。当你在实践的过程中,不断的尝试,不断的出错,不断的进行复盘,你才有可能把这些理论知识,变成自己的横向能力。

   在整个我们的角色转变的过程中,会出错,会让你紧张,压力大,产生焦虑,甚至于觉得自己没有能力做好,想要放弃。给我印象很深刻是事情是在我工作的第二年被公司派往客户现场进行驻点项目实施,这次的转变是我从来没有过的,在客户的现场不仅需要完成本职的开发任务,更多的是客户交流,如何做好客户管理,怎么样处理应急问题。在开始的被客户怀疑能力,应急响应能力差,甚至于被投诉,到最后客户主动的表示好感,最终通过客户的推荐,后续又接到了很多的合同。

   这些只有自己去做,去经历过,你才能知道如何使客户怎么样才能慢慢对你从怀疑到肯定,也会大大提高如何服务好客户方面的能力。今天回过头去看,每转换一个角色,你的抗压能力就会有大幅度增长,会让你的自我调节能力也得到很大的提升。有些能力的提升必须要经过一定的时间,必须要经历过一点的坎坷和困难,所以需要对自己有信心,相信自己。

   在职业发展的过程中,不是所有人都能得到很合适的机会,去做一些与当前工作角色内容的不同的事情或者说能有机会去尝试一些新的岗位和工作。或者是有了机会去到新的岗位工作,但是却不是自己计划目标内的理想岗位。有时是事情的发展促使你做了岗位转变,例如人力缺失,团队人员离职,需要你去补位做相关的工作;有时是领导需要你做出转变来应对团队发展的需要。

   我曾经经历过的岗位转变或多或少都存在以上的因素,但是给我带来了很多不同角色的应对事情以及处理问题的能力。所以当你觉得现在的工作内容可能不是你理想内容,千万不要有抵触或者消极的心态,更应该提高自己的眼界和格局,去突破自己的舒适圈。千万不能被自己所谓的规划和固执的思想所困住。

   珍惜每一个阶段,做好该做的事情,你的能力自然而然的就会多面开花。

   在我看来所有的能力提升,都需要自己主动愿意承担更多的角色,你才有机会去锻炼自己的能力,才有机会去挑战下一个目标。大家通常说机会是给有准备的人的,在我看来不仅仅是这样,机会更多的是给愿意主动出击的人。往往有时候机会不是别人给你的,而是自己主动争取的甚至有时候需要自己主动的去创造,只有你愿意走出第一步让别人发现你的能力,你才能体现出来你的能力。

   所以想要能力有快速的提升,先改变自己,从团队中站出来,主动出击吧。

 一般人们会选择纵向扩展(scale up)SQL Server数据库,而非横向扩展(scale out)。纵向扩展很容易:增加硬件、处理能力、内存、磁盘和提高网络速度。其原理就是仍然在一台服务器上运行数据库,但是增加了服务器的处理能力和资源。这种方法很昂贵,但是非常简单直接。

采用云技术

有时候,最简单的方法就是将问题交由其他人处理。微软的Windows Azure云服务包含一个基于云的SQL Server版本SQL Azure.这在技术上并非真正意义的横向扩展,因为它是一种无限纵向扩展方法。所以,转移到Azure并不需要对您的应用程序进行大改动。实际上,您只需要将应用程序迁移到SQL Azure,然后支付存储、处理和数据传输费用。这些都是收费服务,但是您不需要再担心扩展问题。

复制

SQL Server原生复制是一种支持横向扩展的解决方案,与数据库的创建和使用方式有关。您只需要在多台服务器上复制多个数据库副本,然后将不同的用户指向各台服务器。这种方法通常最适合支持地理位置分散的用户,如亚洲办公室的用户使用服务器1,而北美办公室的用户则使用服务器2.每一台服务器都拥有完整的数据副本,并且会复制伙伴服务器的所有修改。

这种方法不支持自动负载均衡,并且最适合用在用户固定只使用一部分数据的情况。换而言之,如果亚洲用户只需要编辑与他们办公室相关的数据--例如,主要是亚洲客户的信息,那么复制能够保证其他数据库副本也包含这些记录的副本。如果所有用户都需要编辑完整的数据集,那么复制就变得有一些复杂,因为SQL Server必须在支持用户的同时,编辑位于不同服务器的同一个数据。

SQL Server的合并复制能够处理这种冲突,但是您必须进行一些自定义合并编程,这意味着您的开发人员必须开发一些算法,确定用户并发访问数据时谁获取编辑权限。客户应用程序也需要增加编程;使它们不仅向数据库提交数据修改,也要循环检查这些修改是否被其他并发用户重写。用户也需要重新培训,因为客户端应用程序可能会提示:"您正在编程的数据已经发生变化。您需要重新检查,确定您的编辑是否仍然有效。"

联合数据库

另一个重要的横向扩展方法是联合。通过这种方法,您可以将数据库划分到多台服务器上。垂直分割将同一个表的不同行保存到不同的服务器上。同时,地理分区是最常用的方法:将所有亚洲数据记录保存在一台服务器上,而所有欧洲数据则保存在另一台服务器上。这种方法不同于整体复制:每一个位置的服务器都不具备完整的数据库,而只拥有该位置的数据。通过实现一种SQL Server分布式分区视图而形成完整的表,用户就可以浏览一个"联合"或组合的数据视图。水平分割则将表的字段保存在不同的服务器上,因此各台服务器一起协作构成组合的表。

这些数据库的创建并不简单,其中涉及一种整体 *** 作。您需要掌握关于数据访问和使用的详细信息,才能够实现正确的部署。此外,您还需要一位SQL Server数据库架构师,他应该全面理解这些技术,分析您的业务情况,并且能够正确地创建这些组件。

在一些情况中,实现这种横向扩展对客户端应用程序的改动很小。对于本身在设计上大量使用视图和存储过程进行数据访问的应用程序,更是如此。因为这些元素只是是在后台抽象,在客户端上不会发生变化。但是,这些应用程序并不常见;通常,实现横向扩展都需要修改客户端程序,使客户端与后台结构分离。

横向扩展并不简单

毫无疑问,实现SQL Server横向扩展非常复杂--这也是Azure等云数据库系统流行的原因之一。此外,有一些第三方供应商能够帮助实现横向扩展技术,而不需要完全依赖SQL Server的原生特性。您需要自己下功夫了解这些方法,理解数据访问和使用方法,这样才能够选择最符合您要求的方法。

作为一名程序员,能避免中年危机的方法:

1、明确的职场定位。作为一名程序员,随时都要学习一点新东西,不能为了找工作迫不及待的随便找一份。如果不是自己的专业,不是自己感兴趣的行业,稀里糊涂的上班之后所带来的麻烦是自己无法估量的。可能做到中年的时候,自己就会被淘汰的危险,所以找工作一般不是企业嫌弃你,而是您要时刻注意自己所要面临的危机。如果另外从一个行业学起,也就意味着从零开始对自己是没有任何好处的。

2、选择大型的企业。找工作的时候不要因为在意一时的工资而随意的找一份可能你本来就不够优秀,却偏偏呢,因为这个小企业看重您的学历而半推半就的答应。这对你自己而言是没有好处的,因为在大公司可以学到很多的东西,而在小的企业能够学到的东西是很少的。

3、不怕苦。工作中要时刻知道自己该多学一点东西,不能为了完成任务而完成项目开发的过程遇到的技术障碍,要努力的去克服,想尽一切办法多放放资料,趁自己年轻的时候多学习。在业余的时间也要利用起来,不断的扩大自己的知识面,加深理解,只有这样才能够提高能力,并且在危机当中游刃有余的对付。

4、多交流。程序员一份工作并不是说自己能够把工作做好就可以了,要多沟通多交流,这样可以从别人的建议当中学到一些新东西。不然只能是不断的翻工,而程序可能会有一大堆的bug。技术上要多交流,这样可能实现一个功能的方法和设置的等级并不一样,给自己带来的好处是多多的。多沟通多交流,可以写出的程序将会大大的提高它的性能,也可以减少错误的出现。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11806194.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存