十年风雨,一个普通程序员的成长之路(八)不想做技术总监的项目经理,不是好程序员...

目录

  • 十年风雨,一个普通程序员的成长之路(八)不想做技术总监的项目经理,不是好程序员
    • 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、数据库的性能调优,有……

有技术,有情怀,有温度

欢迎关注我:姚毛毛& 妖生

公众号

你可能感兴趣的:(十年风雨,一个普通程序员的成长之路(八)不想做技术总监的项目经理,不是好程序员...)