目录
- 十年风雨,一个普通程序员的成长之路(八)不想做技术总监的项目经理,不是好程序员
- 01 技术总监写不写代码?
- 02 面试的坎坷与杯具
- 03 新的开始 & 旧的结束
十年风雨,一个普通程序员的成长之路(八)不想做技术总监的项目经理,不是好程序员
01 技术总监写不写代码?
曾在IT界掀起腥风血雨的一个问题:技术总监要不要了解技术细节?
归根到底的问题就是:技术总监还要不要写代码了?
在18年12月前后,我给你的回答可能截然不同。
18年12月,我离开了相伴多年的公司,换了一个东家。
“我要写代码",五个大字映在我的胸腔。
就在前段时间,老东家的上司还问我要不要回去。
我想了下,回复如下:
回去的话,不想带项目,不做项目经理,可以做售前、架构把控,写代码也可以;可以找人做项目经理,我前期可以带一程,或者协助。
我觉得XXX(我当前公司)这边的组织架构还可以,有总工、架构师、项目经理,架构师负责规划项目或者核心代码实现,项目经理负责项目进度。
为什么这样说?
请看我上文十年风雨,一个普通程序员的成长之路(七)膨胀、骄傲,程序员转项目经理的原罪
两年的项目经理做下来,感觉在代码修炼、程序设计上没有任何的长进。
在组建大数据项目组的时候,本以为自己可以投身项目,写一些核心代码,弄一弄Hadoop、hbase、jstorm、kafka、spark、kylin这些我们项目中用到的大数据技术。
但是事与愿违,承担了一个项目经理的职责后,需求对接、项目里程碑跟进、对领导与客户的进度汇报、资源协调……等等等等,都成了不得不去关心、烦心、投入精力的事儿。
如此下来,当18年结束大数据项目,我转岗成为技术经理,不想再做项目经理。
可是又跟进了一个跨政府部门合作交换平台的项目,此时我唯一的要求就是给我配一个项目经理,我来负责这个项目的需求设计、架构选型与核心框架搭建。
结果领导答应的好好的,原本要做这个项目经理的同事,却因为手头的事迟迟交接不掉,最终还是让我接手了。而那个同事因为不满于当前的工作状况,最终也是离职了。
我觉得,这样的决策算是一种双输吧。
因此,这让我萌生了一个念头,我是不是也该出去看看了。
在18年12月前,我给你说上面那个问题(技术总监到底要不要写代码)的回答是,技术总监把控大方向就行了,写啥代码?哪来的时间给你?你又不是只负责这一个项目。
【我最多的时候,担任了5个项目的管理工作、2个项目以上的系统架构与技术评审。】
在18年12月后,我深深地跟你说,写代码吧兄弟。除非你想在这个公司养老。
不写代码则不了解技术细节,不了解技术细节一出去面试就一个接一个的懵逼。
关于这段经历的得到与思考:
对于技术能力还没达到一定程度的程序员,我的建议是,还是先暂且放一放管理性的工作。
可以做一做项目的研发leader,但是还是千万不要做事务型的项目管理工作,除非你对管理很感兴趣,那就走这条路吧。
02 面试的坎坷与杯具
在18年11月的时候,结束了跨部门交换平台的工作。于是闲了下来,便把51 job上的简历给更新了下。
基本上每天都会有一个电话过来,约面试。
可笑的是,当时真的是什么都没准备,两手空空,脑袋也是空空。
没有去leetcode刷刷题,没有去把一些基本的java知识复习下,没有去好好返场熟悉下分布式、高并发。
估计当时也是没做好离职的思想准备吧。
很随意地去面试了几家,发先自己连很多基础知识都给忘了。
有次印象深刻的面试,是一个年轻面试官拿了一份卷子出来,让我做笔试题。
笔试题?
Oh,No,我都好久没碰过这个玩意儿了。基本上都是面试聊一聊就结束了。
然后这个面试官问了一个让我至今都还记得的问题:“什么是对象?”
我特么直接懵逼了。什么是对象?要不要new一个给你?
这个问题不是学习毕业第一年问的问题吗?
我还真没答上来,脑子一片空白。
我笑着说:“我懵逼了,你能给我点提示吗?”
这次的面试经历应该是在我11月到12月这个阶段,多次面试经历中最糟糕的一次。
因为感觉这个公司或是不尊重,或是招人、面试的制度、流程有问题。
像是在进行校招似的。
(当然,我自身也有问题,连这些基础知识都给忘得干干净净。)
还有家公司的面试项目经理、项目总监、运维经理齐上阵面试我,结果问了一堆项目管理、数据库设计的问题,可是又说不到点上。
我问他们到底是需要什么岗位的人才?他们说岗位很多,都需要,看面试人的能力情况。
我了个去,你不说你招啥样的,我十八般武艺卖哪种呢?
面试的倒数第二家就是我现在所在的公司。
一面主要问的是对于性能有什么看法?
我说了下QPS、TPS相关的一些概念,基本就过了。
二面问了nginx、ES以及让我描述下性能优化的过程。
nginx说实话我是交换平台项目才用的,并不熟悉,熟悉的是weblogic。
面试官问我nginx有哪些负载策略?我挺懵逼的,还真没研究过,我说你能提示下吗?
他笑了笑,说例如轮询。
我想了下,回答说是配置upstream吗?
之后回去看了下,nginx是可以配置轮询、ipHash、平均负载、权重负载多种负载策略。
ES,即elasticSearch,我是真的没用过。这个东西我是知道的,但是遗憾的是面试时脑子有点糨糊,竟然说没听过这个玩意儿。
【这个没听说过在广度上减分很大。】
关于性能优化,我说了这样大致一个流程。
因为跟数据库、数据仓库、查询打交道比较多,所以着重说了下数据查询的优化过程。
(1)先找出慢SQL,以Oracle为例,可以通过AWR报表的方式查看。
(2)查看慢SQL的执行计划,看看查询的关键字段是不是缺失索引,添加索引。
(3)有索引,但是查看执行计划,并没有走索引。此时有两种方法,一是用hint,二是可能数据表最近被大批量的删除、新增过,需要手动收集数据表的统计信息,让SQL优化器正常解析SQL。
(4)数据表太大,没有合适的全局索引。可不可以建设分区表?按照时间、地区进行分区操作。
(5)不能分区,或者分区效果也不显著,需要考虑改动表结构了,有些字段是不是可以拆出去?做成维表、扩展表?
【这是垂直拆分。缺点是查询时如果要查询扩展表字段,需要join操作,插入修改时要考虑多表,事物复杂。单表数据量还是太大。】
(6)或者可以考虑进行分库分表操作。对于Oracle来说单张1亿以下数据分区就够了,不需要分库分表。
【水平拆分。缺点是会导致事物一致性更为复杂,还需引入分库分表的管理中间件。】
(7)进行历史数据分离。将一些不常用的数据,例如两年前的数据都拆分到历史表中。
【即冷热数据分离。】
(8)增加数据库性能,升级硬件,例如磁盘换上SSD。这个方法是被验证过了的,尤其是查询批量数据,无高效索引的时候。
(9)从数据库层面已经无法优化了,我们可以考虑在应用端使用并行查询的方法爬出数据,然后再行合并。
【事实上,很多报表工具都是这么做的。】
(10)从业务上去优化,看看这样查询是不是有道理,这些字段是不是确实需要?需不需要这么精细?需不需要这么频繁?大数据量报表每月一出就行了?那这样就无所谓时效性了。
面试最后,面试官问我对他们公司还有什么问题?
我问了下如果入职后,将从事什么样的工作。回答的是一些中间件、平台的开发。
我觉得还是比较契合我当前迷茫期的目标的。
【真的是迷茫期,不知道干什么了。在老东家那里,最多也不过就是升个总监,养老罢了。技术上就完全与主流脱节、荒废了。】
这个offer拿到后,便没有怎么再去面试了。
关于这个offer,其实我再认真刷两天面试题,拿到的级别跟工资应该会更高点,但是这可能是我,或者也是很多程序员的一个通病吧。拿到了offer便不想去面试了,麻烦。
其实还是应该再多看看的。
关于面试的思考与得到:
对于被面试者而言,应该准备充分点。因为时间太短,很多工作中可贵的品质没法在短短的半小时、一小时内展现出来。不要让自己遗憾,不要让面试你的公司错过你遗憾。
对于面试官而言,我认为在面试、考查一个人的能力时,应该是去着重发现他的优点,而不是努力找出他的不足。
每个人都有自己不擅长的一面。
我们是来挖掘人才为公司增长业绩的,而不是显示自己能力来玩找茬游戏的。
03 新的开始 & 旧的结束
在入职新公司后,第一周就是领个电脑,装些IDE工具,熟悉熟悉公司的规章,熟悉下同事,熟悉下工作范畴。
第二周便来活了,是写个小工具,可以自动将spring项目中针对Oracle、mysql的SQL语句转换为适配国产数据库(达梦)。
前期已有一个架构师做了初步调研,我喊他荣哥。荣哥搭了个架子,读入了mybatis的XML,我便开始解析、匹配、转换xml中的sql,按照插件模式做了个扩展接口,总共花了一周写好了这个demo。其中转换mysql的merge方法比较麻烦,花了有两天时间。
这个demo可以转换大部门的SQL语句,对于无法转换的,则输出log,予以提示,多少行什么方法需要人工去转换。
后续又调研技术专家,业务侧人员,做了这个工具的扩展方案,提炼了一个SQL辅助工具集。
规划了一些扩展功能。如可以连接JDBC,利用jdbc数据库连接池收集SQL的执行次数、消耗时间,生成慢日志、错误日志文件,开发导入SQL的检测功能,通过分析每条SQL的执行时间、表的索引、主外键关联等数据,发现SQL错误、警告,获取SQL执行计划,提供建议,如SQL是否存在全表扫描、笛卡尔积等?
当然,后续就没有后续了。
因为业务的调整,这个项目后续并没有展开。
而我,也开始投入下一个项目了。
但是通过这样一个项目,我却觉得,这,的确是我想做的工作。
2019,我来了。
---------------我的成长之路系列---------------
十年风雨,一个普通程序员的成长之路(一)怀念:西安的小黑屋
十年风雨,一个普通程序员的成长之路(二)外包:颠沛与流离
十年风雨,一个普通程序员的成长之路(三)铜陵:大雪与加班
十年风雨,一个普通程序员的成长之路(四)深圳:积累与转折
十年风雨,一个普通程序员的成长之路(五) 成长:得到与教训
十年风雨,一个普通程序员的成长之路(六)抉择与出发
十年风雨,一个普通程序员的成长之路(七)膨胀、骄傲,程序员转项目经理的原罪
欢迎关注我的公众号:姚毛毛的博客
这里有我的编程生涯感悟与总结,有Java、Linux、Oracle、mysql的相关技术,有工作中进行的架构设计实践和读书理论,有JVM、Linux、数据库的性能调优,有……
有技术,有情怀,有温度
欢迎关注我:姚毛毛& 妖生