Re: [心得] 前辈是Bug制造机

楼主: banqhsia (BEN)   2018-04-12 21:45:28
※ 引述《justsing (只是唱首歌)》之铭言:
: 最近进入一家蛮大的公司
: 才进去没多久已经把目前正在开发中的专案几乎重构过了
: 原因是因为某前辈写的code问题非常多
: 所有变量都用全域变量,导致资料常常出错
: 命名也很爱取那种
: abc1
: abc2
: 这种完全看不出来在干嘛的东西
: 开发完也完全不测试就推到正式branch上
讲到这个我就心有戚戚
最近在公司接手一些案子,这个案子有多厉害
* 用纯 PHP 意大利面方法写
* 无OOP,无框架
* 数据库无正规化、该索引的没索引,不该索引乱索引
* 因为太多专有名词,DB字段直接用 optA、optB、optC..... optH (option?)
* 重复coding的东西太多
例如查询数据库的部份只有字段不同,就干脆直接copy整份程式码,改字段->存盘
(说好的 class、function 呢? 每支程式都在 create connection or die )

get_user
edit_user
del_user
get_article
edit_article
del_article
... 你他妈每一个 CRUD 就给我写一个档案 (里面99%一样,只字段不同)
* N+1 query,比如先查询产品列表,再在循环查询每个产品的producer_id
(明明 JOIN 一次或 eager loading 就可以办到的东西)
* 开发途中才进版控,commit 记录全部 "no message"
* 公司把系统某部份再外包给下游接案公司,给PM接洽发包
接案公司心态:交差
程式码收回来之后,PM不懂coding,对方乱写看不懂,现在要维护、加新功能
花更多时间在还技术债,而且对案主还没结案
* 因为外包的关系,所以资料夹里面有好几包,都是独立的一支系统却串在一起
例如后台用某个写法,有自己的library资料夹等;
前台某个功能又自己一包,每个系统各自成一个生态,然后串在一起
: 后来主管们看不下去就请我帮忙改
: 改完后目前系统改善很多
: 但好像也惹得他很不高兴
: 虽然他现在几乎是半冷冻状态
: 但他偶尔只要写个新功能就会产生一堆Bug
: 之前跟主管反应过也是不了了之
: 毕竟主管不会写程式,也很难看懂他的问题在哪
: 通常大家遇到这种情形,会怎么做呢
: 是不是只能快逃了啊
我在进来现在公司以前,公司主管是有直接告诉我
“我们公司现在很多事情没有成型,如果有新的想法的话,可以直接提出”
确实,在进来的时候也讨论了满多的想法,建议导入开发框架跟SA的概念
明明感觉是业界已经非常简单行之有年的东西,却像登天一样难
我真的是活在平行世界吗
可能公司的心态也有差
公司认为简单的东西可以外包减少工程师 loading,结果程式码品质很难去控管
宁愿花一笔钱外包,也不愿意再请人,不就是饮鸩止渴吗?
(第二手接案公司赚到钱,结果债是我们在还)
不过现在看起来,是有慢慢在变好啦... 有吧。
回到你的问题
我接手这个专案之后,什么修改都是假的
到处 include 比乱继承类别还要难 code review,完全不知道变量从哪里开始出现
更别说程式码混著 SQL 跟 js 了
找 PM 要原始的需求,现任 PM 也不太了解 (因为换好几个PM接手)
后来我 refactor 的作法是:
旧程式码直接放一边,在前端把网站点一点,摸一摸 猜他要干麻
把需求反推回去,看着输入的表单,把 schema 推出来
等于是在大便里面挑黄金一样,最后剩下那一点点稀少的 就是最核心的东西
其他都是 a piece of shit bullshit
一边重写,一边SA
想想什么功能有可能扩充,什么功能是重复的
把逻辑抽出来,变得抽象一点,再各自实作
↑然后你会发现 这些东西不都重复的可以共用 class or method 吗
那些 copy & paste 重复的档案是...
大概就是这样吧
重构真的很累,边写你就会边感叹
以前觉得世界奇观要出国才有
结果发现一堆公司的程式码里面也有
(摊手)
作者: TauchK   2017-03-26 19:39:00
想插瑶瑶+1
作者: superbabyer (飛蓬夕瑤)   2017-03-26 19:40:00
楼上很糟糕
作者: j0958322080 (Tidus)   2018-04-12 22:00:00
jan der
作者: abccbaandy (敏)   2018-04-12 22:12:00
所以说什么专案公司练功快根本害人,练复制贴上的手速而已吧XD
作者: Deltaguita (伯利兹)   2018-04-12 22:20:00
以前有个人一直叫我去接案公司,学的东西比较多XD
作者: kalaja (菸酒生)   2018-04-12 22:44:00
有同感,不过是饮"鸩"止渴喔。
作者: newyellow (newyellow)   2018-04-12 22:50:00
接案公司还是要看公司啊 我也有遇过很厉害的
作者: menshuei (红茶)   2018-04-12 22:54:00
如果我是老板的话当然外包省钱又有弹性,然后再请一个像你这样有能力的员工来扛。
作者: bigshawn (棉花)   2018-04-12 22:58:00
怎么觉得这情境好熟悉 上层超爱外包 拿回一堆意大利面最后苦的都是底层工程师接案的确学很多 全端 各式语言 硬件规划 DBA全部一手包办不过学到的很多都是旁门左道
作者: supernow (善甲狼)   2018-04-13 00:24:00
真的,一手包真的常学到一堆旁门左道
作者: chuegou (chuegou)   2018-04-13 00:41:00
我看到外包回来的code吓到直接离职 听说后来案子死了
作者: Ghamu (猫丸)   2018-04-13 02:51:00
有听说外包可以练功 但总觉得很容易学坏 做一些自己coding轻松 维护的人骂干的事 毕竟本质上交差完拿了钱馆你去死话说我看到外包code我也想离职XDDD
作者: y3k (激流を制するは静水)   2018-04-13 11:11:00
外包包到没什么经验跟责任感的学生 连测都不测就直接丢出来等指示更是让人吐血...= =
作者: pttworld (批踢踢世界)   2018-04-13 11:20:00
外包征人要小心履历做几个月就丢包的人,很雷
作者: MOONY135 (谈无欲)   2018-04-13 12:27:00
意大利面XDDDDD可以问一下前端是php写的吗 如果是要怎样debug比较清爽啊
作者: TitanEric (泰坦)   2018-04-13 12:48:00
好可怕的扣…
作者: Argos (Big doge is watching u)   2018-04-13 14:35:00
不要以为这样就很可怕 事实上到处都是这样的code...应该这么讲啦 市面上95%以上你看到的网站 APP 背后code都是长这样喔! 啾咪~
作者: johnny94 (32767)   2018-04-13 14:50:00
心有戚戚焉,而且你会发现有这种 code 的公司不少
作者: lturtsamuel (港都都教授)   2018-04-13 14:58:00
混著SQL跟is? 不怕被sequel inject?*jsSQL写在js里面就代表后端会直接吃下前端送来的SQL 抖
作者: senjor (哞哞)   2018-04-13 16:10:00
有些人的做法是给前端送SQL,然后后端filter掉字段跟指令
作者: viper9709 (阿达)   2018-04-13 23:47:00
包山包海包...
作者: AvatarH (Avatar Hsieh)   2018-04-14 00:44:00
有人碰过外包价比正职薪水高,这样有省道钱吗?
作者: ifreeta1110 (Ifreeta)   2018-04-14 00:54:00
外包当然比正职薪水高,因为正职还有薪水以外的成本
作者: hellomotogg (你好机车)   2018-04-14 03:25:00
想到一个class里面有一万行等着重构就有点崩溃
作者: alice822 (梅露)   2018-04-15 10:24:00
怎么跟我们公司有87%像
作者: james732 (好人超)   2018-04-15 18:51:00
推 QQ
作者: linquer (哈)   2018-04-17 01:04:00
同QQ 87分像+1

Links booklink

Contact Us: admin [ a t ] ucptt.com