年轻程序员如何成长?
我一般会把程序员分为初级、中级和高级。他们的区别在哪儿呢?初级可以在别人的指导下完成工作,中级可以独立地完成工作,高级不仅仅可以指导别人的工作,而且可以很好地提炼自己的方法论,用这些方法论去影响别人,帮助他们成长。而架构师,他更多的职责则应该是确保一个项目不会因为技术的问题而失败,比如是不是伸缩性不足导致大量用户涌入时支撑不住、灵活性差导致功能很难添加,设计过于复杂导致开发持续延期,技术选型错误导致成本和稳定性出现问题,等等。
我们公司采用了 buddy 制度,简单来说就是任何一个新员工入职,都会指定一个 buddy ,在入职的前三个月,你不管什么事情都可以问他,这个制度对新员工快速平滑地融入团队帮助很大。如果你的公司没有这个制度,你可以考虑跟你的上级申请一个 buddy, 你的 buddy 也许很忙,那么你可以考虑一下定期(比如每天中午花半个小时)跟 buddy 核对一下之前遇到的问题。这些都是可以让你快速融入团队的办法。
一般过了 2 年左右,很多人就不再能直接从项目或者周围的同事身上获得成长了,这个时候一个比较好的手段是跳出现在的圈子,多参加一些本地社区的活动,多参加 QCon 这类的技术会议(当然看直播或者视频也行),看看这个也就的标杆长什么样,他们在解决什么问题,他的知识体系有哪些是你缺少的。我很认同的一句话是“参加会议的目的不是为了学到什么,而是为了知道要学习什么”。找到一个好的标杆,相信你在职业生涯的前面 5 年会一直快速成长。
如何在团队中脱颖而出?
方法其实很多,每个人都可能有不同的选择,甚至说在不同的团队,你的做法也可能会不一样,下面仅就个人的经验讲讲我自己的看法:
首先一点是要把手边的活做扎实,如果这点做不到,你的意见比较容易被人轻视和质疑。
其次是要经常参与项目中的设计与技术相关的讨论,勇于发表自己的意见,但这个时候要学习一些讨论问题的常识,比如说对于别人的方案,要先去接受而不是拒绝,然后从两个方面去考虑,一方面是这个方案有什么漏洞,礼貌地提出潜在的漏洞,等待对方抛出他的观点。另外一方面这个方案有什么可以延伸或者扩展的地方,是否可以根据对方的方案抛出一个更好的方案。对于自己的方案,不要过于强势,毕竟很多事情一个问题有超过一个正确答案,自己的方案没选上也要有平常心。
对于团队来讲很重要的一点其实是担当,也就是你是否愿意为某个小项目整体来承担责任,当然这也意味着你需要再代码之外做很多事情,包括很多沟通、妥协和持续跟进的事宜。这一点对于那些有志于在管理或者产品方向有进一步发展的人尤其重要。如果你在很多事情上表现出不错的担当能力,相信你的上司一定不会埋没你这种人才。
如何做好架构?
从我自己来看,我觉得我把自己定位从开发转为架构的一个时间点在于,我不再是在寻找一个问题的答案,而是在从问题的一堆答案中评估哪个对我们更合适,这个时候我感觉到我已经能充分驾驭这个问题,而且也有信心来面对未来更多的挑战。
如果你要走架构这条路,我有如下的几个建议:
首先是要多读一些书,其中最基础的是类似于重构和设计模式这种书,你需要知道很多小尺度级别上的问题解决技巧(如果你要做导演,你首先要做得是能熟练地把一个句子翻译为一组镜头),以及这些作者梳理问题的方式,反过来问一下自己,如果让你来写设计模式这本书,你有哪些知识点可以写?你如何组织这些知识点?如何让大家接受你的观点。
看完这两本书之后,非常推荐你看一下 Martin Fowler 写的《企业应用架构模式》和 Eric Evans 的《领域驱动设计》这类书,他能扩大你的视野,专注于更有意义的问题,而不是设计模式究竟有多少种这种缺乏意义的问题。有一句话叫,“如果要成功,就要远离那些廉价的娱乐”。类似的,对于软件工程师来讲,要想让自己更强,就要远离那些廉价的争论(vim vs emacs, linux vs unix, redhat vs debian, 这些争论其实并没有太大的价值)。
其次,你要对大量开源软件的实际特性有深入的了解,容量究竟多大?高可用怎么做?如何扩容?是否易维护?这些知识部分来自网上的各种测试和经验文章,部分还要来自你的亲手测试。作为架构师,你的每一个技术选型都是在挖坑,给你的开发、测试、运维团队挖坑,而你的作用之一,就是保证你的团队能够在你的帮助下从坑里走出来。
另外,要解决很多大尺度的问题,你需要从很多同行去吸收经验,我个人的经验就是,阅读每年两次 QCon 和 ArchSummit 架构相关的幻灯片,先只看题目和问题部分,自己想一想解决方案是啥,然后再看一下演讲者给出的解答,通过这种方式来淬炼自己的思维,丰富自己的工具箱。我想提醒的一点是,由于软件行业还远不成熟,所以一个架构师会长期跟进一个项目,这就导致了一个架构师如果不主动去练习的话,一辈子也做不了几个架构,至少相对于建筑专业的结构工程师来讲,我们每年的项目缺少少很多。你做的架构越少,你就越容易自满。
最后,我希望你是一个终身学习者,不管多忙,一定要规划你的学习时间,一个星期也许不用太多,几个小时即可,但这几个小时一定要用在刀刃上,所以最好是哪些需要几十个小时甚至更多时间才能弄清楚的课题,而且一直要坚持到这个课题结束。千万不能是学一点这个概念,遇到新事物,就马上转移方向。如果你有这样的习惯,我建议你先把新想法放到一个池子里,等手边的课题学习完,再到池子里边捞一个新课题来继续学习。不过关于学习,这个是一个很大的话题,就不在这儿阐述了。
下面就讲一下java架构师怎么学习才算合格
首先 工程化专题
高性能及分布式专题
双十一技术架构专题-九阳真经
性能调优
想学习以上进阶技术加群:561614305
源码分析
大家可以点击加入群:561614305【JAVA大神交流二群】里面有Java高级大牛直播讲解知识点 走的就是高端路线 (如果你想跳槽换工作 但是技术又不够 或者工作上遇到了 瓶颈 我这里有一个JAVA的免费直播课程 讲的是高端的知识点