zoukankan      html  css  js  c++  java
  • 十年风雨,一个普通程序员的成长之路(八)不想做技术总监的项目经理,不是好程序员

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


    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、数据库的性能调优,有……

    有技术,有情怀,有温度

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

    公众号

  • 相关阅读:
    SPOJ SAMER08A
    SPOJ TRAFFICN
    CS Academy Set Subtraction
    CS Academy Bad Triplet
    CF Round 432 C. Five Dimensional Points
    CF Round 432 B. Arpa and an exam about geometry
    SPOJ INVCNT
    CS Academy Palindromic Tree
    身体训练
    简单瞎搞题
  • 原文地址:https://www.cnblogs.com/yaomaomao/p/11925744.html
Copyright © 2011-2022 走看看