首先我们定一个基准点:架构只是功底深厚的程序员,千万不要成为不会写代码的架构师。
程序员从初级、中级、高级再到架构师,是一个不断经验积累的过程,但是在这过程中我们常常很迷茫,不仅仅是面对技术繁杂的无力感,更重要的是因为长期埋没于代码世界的浩大的分工体系中,无法看清从业务到系统架构的价值链条,无法清楚定位自己在分工体系的位置,处理不好自身与技术、业务的关系所致。所以在程序员生涯中除了技术实力以外,其它软实力也不容忽视。如:主动学习、积累经验、控制注意力、超越自我。
对于一个卓越的程序员来说,编程技能毋庸置疑是很重要的。但是,除了基本的编程开发能力,其他方面的能力也是体现一个程序员的能力的很重要因素。比如,问题排查能力、线上运维能力、项目管理能力、协调沟通能力等。
首先要具备解决问题的能:
解决问题的能力不是天生的,自然得靠后天努力,当遇到阻塞性的问题的时候,需要立即排查并处理,由于是线上的环境,有一定的难度,但是也有一定的方法可寻,一般按照如下步骤:
从日志中查看:
查看报错信息,一句这些信息进行问题排查。
代码检查:
这需要对代码有一定的熟悉程度,可以知道用户的操作是由哪里的代码执行的,然后对该块代码进行检查。
远程调试:
由于代码是静态的,而代码执行是动态的。静态代码的检查可能并不能检查出问题,而需要通过线上的环境、数据一并进行检查。这时,可以在不影响线上用户使用的情况下,远程断点调试程序。
本地调试:
有的系统可能并不方便进行远程调试,那么可以尝试把线上的全部数据(或者关键历史数据)拷贝下来,在本地环境使用线上环境的数据库,进行调试。断点调试是比较直观的一种检查错误的方式,通过异常信息的日志,能确定到指定的代码行,并结合线上的数据,很容易发现问题。
学会提问:
问问题的能力是一个人的修养,学会提问是一个人成长的必经之路。尤其是软件行业的从业者,要保持对技术的钻研精神,不做伸手党,问出水平,问出修养!
有礼貌:
毕竟谁也没有义务帮你解决;
问对的人:
选择相关主题的板块,不要多次发布相同问题!
主题清晰:
问了让别人不用看描述就知道问题类型和背景
描述要准确:
描述机器环境(os,机器配置,版本信息);描述自己的排查方向和相关现象;描述问题的触发背景(升级了什么组件/改了什么);提供复现方法。
描述要客观:
不要加主观判断;
描述目标:
不是中间的某个步骤step;可能你的方向偏了,实现目标根本就不需要实现这个step
想提高自己解决问题的能力,首先得学会如何提问。给自己提问或者向别人寻求帮助时。
总结分享:
人的脑袋不可能记住所有事情,将自己遇到的问题沉淀下来对以后自己查阅也有很大的帮助,就不必每次都要去Google,自己也能够有一个索引库。经常自己总结,也能够提高自己的写作能力,以后写文章、ppt总结提炼自然也难不倒你了,也是一举两得的事情。
非技能篇
主动学习:
目前我们获取新知识的途径一般都是碎片化的,阅读老司机的公众号或购买高质量的纸质书籍,现在的问题就是我们如何在短时间内阅读并吸收其中的技术点呢?好的阅读方法让你对于知识的掌握事半功倍,SQ3R法主动阅读法让你如何更有效阅读。
积累经验:
你需要从实践中学习其中的价值,而一些常见障碍会让这个过程很艰难。但是你也不要刻意地拼命实践,过犹不及。我们应该研究如何利用反馈、乐趣和失败来创造更有效的学习环境,关注设定最后期限的危害,并体会如何通过自我引导积累经验。
控制注意力:
超越自己:
开始时目标设置低一些。当你实现时奖励自己一下,再设立下一个目标。脑子里记住你的最终目标,但不要试图把所有步骤想明白。只关注下一步,一旦达到这一步,再继续为实现下一步目标而努力。
小结
用战术的勤快掩盖战略的懒惰!那么这样的后果就是我们把自己限死在流水线的工位上,阉割了自己能够发现业务价值的能力,而过多关注新技术对职场竞争力的价值。这也就是我们面对繁杂技术,而产生技术学习焦虑症的根本原因,希望通过上面的内容能让职业更进一步,让我们的职业生涯进行脱变。