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

    有技术,有情怀,有温度

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

    公众号

  • 相关阅读:
    实现图片旋转木马3D浏览效果
    !important的用法
    css中!important的作用
    js深拷贝和浅拷贝
    Javascript 数组循环遍历之forEach
    javascript高级选择器querySelector和querySelectorAll
    CSS3系列教程:HSL 和HSL
    linux 静态库、共享库
    UNIX网络编程之旅-配置unp.h头文件环境
    apue2e unp安装
  • 原文地址:https://www.cnblogs.com/yaomaomao/p/11925744.html
Copyright © 2011-2022 走看看