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

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

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

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

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

17369 次点击
所在节点    程序员
102 条回复
66beta
2015-02-15 10:02:29 +08:00
碰到面霸了吧,各种面试会问到的东西,人家都背出来了
tabris17
2015-02-15 10:03:35 +08:00
赶时间
Actrace
2015-02-15 10:09:24 +08:00
能好好把原生sql写出来的程序员你碰到了就别放走了。
shenfeng
2015-02-15 10:26:58 +08:00
> 并且一直在用最basic的方式编程。
> 忽视好用的工具,很喜欢写原生的SQL
> 忽视很多语言的新特性和新的框架

我没看错? 这是在夸人吧 :)
编程,主要是解决问题,而不是秀技。 能解决问题才是好。
vzch
2015-02-15 10:38:49 +08:00
不用原生 SQL 用什么? TSQL?新框架就一定很好?坑就少?楼主的描述都是主观性的东西,上你和他的代码, Talk is cheap
railgun
2015-02-15 10:48:42 +08:00
这叫“大道至简,返璞归真”
wyan453351466
2015-02-15 10:51:09 +08:00
@shenfeng
@vzch
@Actrace
@Ison

回复一下各位大神的问题。。

编程,主要是解决问题,而不是秀技。我非常的认可这一点。

我想说的是:如果原生的SQL是最好的,那为什么要有ORM?如果现有的框架已经足够好用,那为什么不断地有大牛要开发新的框架?

写原生SQL有非常大的问题是,可读性差、冗余代码,以上两条会导致后期有巨大的安全隐患 - 一团乱麻的代码多人维护的情况下更容易产生BUG。《黑客与画家》里面曾经讲到,封装的层越多,代码的抽象性越高,代码的可重用性就越好。

很多一些新的框架,例如laravel,作为后起之秀,短短几年时间已经赶超很多老牌框架,把PHP语言带到一个新的高度,这难道不足以证明这个框架的价值吗?

为什么要一直在使用最老的东西,还总是欺骗自己XXX就是好呢?
tabris17
2015-02-15 10:53:39 +08:00
@wyan453351466

“封装的层越多,代码的抽象性越高,代码的可重用性就越好”?

我就呵呵了,你去找来EJB1.0用用看
barbery
2015-02-15 11:02:20 +08:00
额。。。写sql也能归类为代码烂???晕了
moosoome
2015-02-15 11:03:49 +08:00
哈哈哈 看别人的代码都是屎
Ison
2015-02-15 11:06:14 +08:00
@wyan453351466
首先俺不是啥大神
其次凡事都有可用范围
封装确实某些场合下很方便快捷
但可用性牺牲的时执行效率
而且你说的“写原生SQL有非常大的问题是,可读性差、冗余代码“
这不是原生的错 严格来说应该是使用的人的错
数据库设计问题、编写人员的水平问题才是导致你说的问题的直接因素
orm确实解决了部分生产中的问题 但事实上也同时让使用者限制在框架设计者的思维当中
跳出框架工具思维 从需求出发 也许你会体会到不一样的东西
其实很多公司都会在某一个阶段开发自己的框架、工具、中间件
就是因为市面上的已经不能很好的解决自己生产中的问题了
只有适合自己的才是最好的
而随着项目挖掘的加深 也只有自己才能根据自己需求做出最适合自己的东西
你提到的laravel不也一样是作者为了解决自己问题而做出来的么
只是有很多人觉得他的方案对自己也有用 或者只是道听途说的拿来用而已。。。
lsmgeb89
2015-02-15 11:07:03 +08:00
有的代码由于种种原因,其实只要能跑,不 crash 就好了,就这两点要求。
vagasnail
2015-02-15 11:17:03 +08:00
你怎么评定代码很烂,没有用新框架,写原生的sql就很烂?那效率呢?稳定性呢?可读性呢?用新框架,用很新的方式编程就没漏洞,就很牛逼?
Actrace
2015-02-15 11:19:08 +08:00
@wyan453351466 脚手架确实能够提升一部分的编程效率,但是若想编写一个属于自己的产品,基本上都无法用别人的设计思想来实现。对于一些富有经验的程序员来说,无论您的需求是什么,技术永远都不是问题,时间才是唯一的问题。
鄙人一直以来的的观点都是技术为产品服务,任何问题到了最后,最好都不是技术问题。
asmore
2015-02-15 11:25:07 +08:00
@surewen 赞同
monsoon
2015-02-15 11:32:26 +08:00
只有菜鸟才会看不出别人代码写的好不好。

我认为 很喜欢写SQL代码 = 水平差 这句话在某种程度上是等价的。
在绝大部分的开发中,根本不太需要考虑纯SQL和ORM的性能差(特殊的情况下可以ORM和SQL结合),如果一个人在开发中基本不用框架或者ORM,我可以认为他差。
说开发效率,ORM比写SQL效率也高了不知道多少倍(就像一个中型J2EE的项目,一个用JPA肯定比纯SQL的水平高)。

LZ,算法很好的人写的程序非常烂的可能性还是很高的,在同样的学习的时间下,如果在其他方面有更多全方面的学习的话,代码写好的可能性高很多的。
surefire
2015-02-15 11:38:26 +08:00
这种现象大多是态度问题。我也看到有很多基础好的人写的代码很烂,这是因为公司的态度造成的,大家只求完成任务,不求其他,没有太多追求
monsoon
2015-02-15 11:43:23 +08:00
还有,我觉得很多人其实是混淆了概念。
用更好的框架如果是初期的刚开始学习使用的话,可能的确会慢点。但是现在框架都是往开发速度越来越开的趋势发展,如果你熟悉和了解的话,不可能会比老的慢。而且新框架的思路理念比旧框架绝大部分是要好些的(当然Spring、RoR之类可以认为是一种新的版本)
而用语言特性、更多的语法糖也是为了更好的设计理念及部分效率出发的。

如果认为用新的东西和旧的东西在时间上有太大的差异的话,那么只是客观一直在用自己熟悉的东西而已。毕竟学习是要成本的,可是新的东西开发效率的提升也是巨大的。
garfeildma
2015-02-15 11:49:24 +08:00
每个人都倾向于自己习惯的工具和方法,越是大神越是熟悉这些基础的东西
9hills
2015-02-15 11:49:30 +08:00
语言特性确实也是考验程序员水平的,以Python为例,以下三段代码那个更好?

代码A:
print ",".join(map(str, a))

代码B

print ",".join([str(i) for i in a])

代码C:

t = ""
for i in a:
____t += (str(i) + ',')

print t[:-1]

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

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

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

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

© 2021 V2EX