为什么基础很好的程序员写的代码依旧很烂?

2015-02-14 19:41:31 +08:00
 wyan453351466

日常工作中发现一些基础很好的程序员,熟知各种设计模式、算法等高大上的技术,可是写的代码依旧很烂、漏洞百出,并且一直在用最basic的方式编程。

例如忽视很多语言的新特性和新的框架,忽视好用的工具,很喜欢写原生的SQL,并且使用很老的框架和很老的方式编程。

这是什么原因造成的呢?这样的情况在你的身边是否很普遍呢?

17371 次点击
所在节点    程序员
102 条回复
JQ
2015-02-15 11:54:43 +08:00
公司一般都是追求又快又好,这就需要花更多的时间提高技能。
tabris17
2015-02-15 11:56:37 +08:00
@9hills 第三种,简单明了,即便是不懂python的人也能看懂。
9hills
2015-02-15 11:58:32 +08:00
@tabris17 如果只学了一周Python,写第三种情有可原。。可能都写不出来,而是在for循环中加个判断是否是结尾。。而不是 t[:-1]

但是如果简历上写Python是熟练,那么写第三种直接不要。第二种勉强,第一种及格
lbp0200
2015-02-15 12:00:55 +08:00
@monsoon 用orm调试找错,蛋疼
qwlhappy
2015-02-15 12:05:14 +08:00
忽视新框架不等于代码烂吧。
代码的可读性什么的还是要看到底怎么写,新框架也可以写的很烂。
烂不烂还是要很综合地看,可读性啊效率啊什么的很多情况下都要取舍。
用啥框架还是要看个人喜好和工友老板喜好吧
lbp0200
2015-02-15 12:15:51 +08:00
原生sql才能把数据库的威力发挥到最大
monsoon
2015-02-15 12:19:38 +08:00
@lbp0200
这的确是可能的。
如果是复杂到需要调试的,肯定要考虑是否使用纯SQL来(大型的ORM框架里都会提供接口的)。
但是大部分情况下,我们可能只需要查几个字段、关联几张表,这时候ORM带来的开发效率是巨大的(很多框架都约定大于配置了、提供一个接口就可以简单实现)。

现在也有人批评 CoffeeScript 之类的转译语言在遇到有些问题而难以调试(尽管可以Sourcemap),我想更多的人不会考虑这些,因为世界上绝大部分的东西不是只有优点而没有缺点的。如果某些方面可能没有优势,这方面可以用其他东西去替代(ORM中夹杂SQL),也可以用其他手段来减少如到这样的情况(单元测试、更小的组件)。
wdlth
2015-02-15 12:25:43 +08:00
原生SQL有何不妥?毕竟上ORM,要做的事不会少,甚至更多。就像常见的Hibernate和MyBatis,前者学习门槛很高,但是熟练后基本上都是自动生成的,移植性也好;后者要自己完成SQL语句的编写,考验SQL基本功,但是性能上有优势。新的框架也不一定就好,现在仍然有很多地方使用Struts 1而不是Struts 2,在Struts 2漏洞满天飞的时候,Struts 1不受影响,旧框架也能很好的提供服务。
monsoon
2015-02-15 13:06:47 +08:00
https://spring.io/guides/gs/accessing-data-jpa/
写ORM不可能这么简单

Hibernate 的确很复杂(因为绝大部分的Java的框架都很重),但是现在的Spring Boot或者Play Framework之类封装后写JPA基本都不用什么配置.
其他动态语言的ORM写起来更简单。

偏激的我讽刺一个性能的例子:
Java开发者都在做企业级项目,用户量都是几千万,金额都是几个亿的项目。自然是不能用RoR之类看上去是绣花姑娘一样的框架。
开发者的团队朋友都再三叮嘱他:千万别用ORM,我们要做的项目可是要每秒能响应几千万个请求的打项目。

开玩笑的,别太当真。我也是太认真了,其实对立的观点还不然来下卖萌的好。驳到他人一点价值都没有。
wanjun
2015-02-15 13:11:51 +08:00
也或许是你并不理解比人的代码。
jerryouyang
2015-02-15 13:21:45 +08:00
@WhatIf 第一个问题有点莫名其妙。第二个问题就太扯了吧,没区分度
arachide
2015-02-15 14:32:32 +08:00


家里基本都是猪圈
WhatIf
2015-02-15 15:09:41 +08:00
@jerryouyang 不知道莫名其妙在什么地方?考察一下对于最基本的web项目在服务器上的部署而已。 一个号称做java web开发的,连web.xml是干嘛, 连jar包放在什么地方, 连项目怎么在服务器上运行起来都不知道的人,至少我认为都是不合格的。 实际情况是,发现太多的3到5年经验的人根本不知道怎么回答,这个真的很可怕。
duzhe0
2015-02-15 15:31:48 +08:00
对于代码质量, 下面是我的想法。
-----------------
代码质量分几个因素.我认为最重要的几项是:
1.可靠程度.程序是否处理了所有的可能性,比如是否处理了可能出现的错误? 是否处理了可能出现的SQL注入?
2.可维护性.代码结构是否合理?代码是否可读易读? 类、变量、函数命名是否合理?注释是否合理?
3.算法设计合理,性能优秀。

还有一些被过度关注,但我认为其实不那么重要的东西:
可扩展性。有时候我们为程序设计一定的可扩展性,以应对未末新增的业务。但我认为在很多时候,我们预料不到未来的业务是怎样的,追求可扩展性成为了过度设计和做无用功。在很多情况下,等新需求到来时,再对已有代码做重构也并不晚。
设计模式。这一点和前一点有点类似,我见过很多代码,为了使用设计模式而使用设计模式,同样是过度设计和做无用功。
-----------------
对于新的语言特性、框架、工具, 我认为它们往往不是关乎代码质量最关键的东西。是否使用它们,需要评估它们的可靠程度、学习成本和收益才能决定。如果一个程序员倾向于保守, 我认为其实无可厚非。
jerryouyang
2015-02-15 15:32:27 +08:00
@WhatIf 如果你先问对方使用过/熟悉什么框架,有没有亲自开发/部署过服务,然后再问一个这个框架下 web 工程的目录结构一般是什么样子,这样就显得比较合理了。原因:一是框架太多了,什么 struts,sprintmvc,play ,各个都不一样,不是各个都有类似于 web.xml 这样的文件;二是即使是用的同一套框架,有些公司也会进行二次开发,导致实际开发环境与开源版本相去甚远;三是有些顶级公司根本不用开源框架。有一个共识是,国内很多公司的面试官的面试水平也参差不齐。但是少有人能反思。
andy1987
2015-02-15 15:35:20 +08:00
这句话“最basic的方式编程”本身就存在问题,不知道楼主有木有这总感觉呢?
编程是一种习惯,习惯会成为自然行为,有些人就是不喜欢jquery,就是喜欢用原生javascript实现jquery的功能,你能说人家这种方式是最basic的吗?
再者以前我一个同事明明很熟悉Net的 EF和linqToSql可是人家在产品应用就是喜欢写原生的sql语句来操作数据库,不知道这又算不算最basic的编程方式呢?
andy1987
2015-02-15 15:38:21 +08:00
很多新的东西并不是好的,一些看似能简化工作的工具和框架有时候并不一定适合,新东西的存在是为了更好的解决某些场景下事务操作,但是并不意味的就是一种取代和推崇~
iugo
2015-02-15 15:40:54 +08:00
初学, 越来越觉得自己写得是垃圾, 先来我能这样看也说明自己入门了. 但不知道下一步该如何提高.
andy1987
2015-02-15 15:42:15 +08:00
@monsoon
我觉得我们在讨论一个问题应该更多的将场景考虑到里面,我很赞成你的ORM在性能上并不比SQL差,但是前几年,我真的不敢ORM,因为那时候它真的糟透了了
icedx
2015-02-15 16:00:28 +08:00
编程需要经验 很多代码都是Magic

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/170996

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX