微信号:programmer_club

介绍:程序员第一自媒体,与你探讨码农人生路上遇到的各类泛技术话题,定期为你推荐码农人生思考、感悟以及启迪!

为什么说要成为软件艺术家,而不只是程序员?

2017-12-01 22:00 程序员之家


当程序员被别人说自己的代码写得“不够好”时,他们会作何反应?


  1. 代码跑得好好的,为什么要去改它?

  2. 这个设计不是已经可以了吗,为什么还要再简化?

  3. 我来给你解释一下这些代码,你会明白的。


还有很多类似这种“不够好”的说法,比如“不够简洁”、“不够好理解”、“对用户不够友好”,等等。我经常和程序员聊起这样的话题:为什么要让设计架构更简洁,为什么要让代码简洁易懂、为什么要格式化代码、为什么要在两个符号中间加一个空格……如果你是一个技术老鸟,或者经常看一些讲解如何写出好代码、设计出好架构的书,你可能也会有同感。这些都是最基本的概念,但并不是每个程序员都能意识到它们的重要性。


不仅是一些新手程序员不会拿这些高标准来要求自己,那些有多年经验的老手程序员也存在同样的问题。你可以建议他们去阅读《代码大全》、《代码整洁之道》、《Unix编程艺术》之类的书,或许他们当中有些人能够从书中获益,但有些仍然我行我素。



为什么并不是每个程序员都能写出高质量的代码或做出高质量的架构设计?有可能是因为他们经验不足,也有可能是因为他们不知道如何将从书中学到的或从经验中总结出来的东西应用到实际当中,又或者他们只是在完成任务,对于他们来说,程序员只不过是个糊口的工作。但从根本上讲,那是因为他们认为自己只是个程序员,而不是软件艺术家。


成为一个程序员需要具备哪些条件?


  • 知道如何写代码和测试代码。

  • 知道如何分析业务问题、收集用户需求、设计和发布项目。

  • 完成程序员JD里描述的那些工作。


而成为一个软件艺术家需要具备哪些条件?



为了回答这个问题,我们先来看看一个艺术家的设计应该是什么样子的。



Eames夫妇在1950年设计了这张塑料座椅,到现在已经流行了几十年。我被它简洁的设计和舒适感所折服,于是我在想,我们怎样才能像设计这把椅子一样设计我们的软件呢?


这把椅子我用了三年,之所以很喜欢它,是因为:


  • 它看起来很顺眼。

  • 每个人一看到它就知道它是一把椅子。这么说好像有点傻,但这个世界上确实存在一些设计,你根本看不出它们是干什么用的。

  • 坐板和椅背一体成型,看起来不像传统的椅子那么单调。

  • 因为采用了塑料材质,它会根据身体的坐姿做出轻微的调整。

  • 它可以放在任意的地方,卧室、办公室、客厅、餐厅……

  • 它很环保,因为它是使用百分百可回收材料制成的。


那么,如果我们要开发出具有这种“风格”的软件应该是什么样子的?


  • 代码、设计、架构看起来要顺眼。

  • 任何一个人在阅读代码片段、设计文档、架构文档时都能立即明白它们的用途。

  • 代码、组件、设计、架构都应该尽可能简洁。

  • 重用已有的产品、库、代码来简化设计。

  • 设计应该灵活,可以应付未来的变更。

  • 环保——不会占用太多的硬件资源。


如果一个程序员能做到这些,那么他肯定就不是只个程序员,他一定是一个软件艺术家。


或许有人会发出这样的疑问:怎样才能知道自己是否达到艺术家的标准了呢?比如“怎样才算尽可能简洁”?有些人可能会想,如果一个方法的代码行数超出了一个屏幕的范围,那它就是一个需要进行重构的“长方法”。又或者他们会建议一个对象的生命周期当中应该有多少种状态,在写代码时注意不要超出这个范围。


但其实,成为软件艺术家的意义不在于如何量化这些东西,而在于持续改进。在设计一个项目时,应该问自己:这个项目可以设计得更好吗?在代码通过测试之后,也可以问自己:代码的结构看起来够优雅吗?敢不敢拿它与你见过的最好看的艺术品做一番比较?


程序员在完成设计或写完代码之后一般不会想着怎么去改进,但艺术家会。这是程序员和软件艺术家之间最大的区别。程序员不一定都很糟糕,他们也能写出很好的代码、做出很好的设计,但一旦停下了追求的脚步,他们就无法成为艺术家。



优秀人才不缺工作机会,只缺适合自己的好机会。但是他们往往没有精力从海量机会中找到最适合的那个。

100offer 会对平台上的人才和企业进行严格筛选,让「最好的人才」和「最好的公司」相遇。

扫描下方二维码,注册 100offer,谈谈你对下一份工作的期待。一周内,收到 5-10 个满足你要求的好机会!

 
程序员之家 更多文章 明年苹果还要涨价!大屏iPhone X现身… 程序员如何做到年薪超过60万? 职业生涯指南——附神级跳槽攻略图! 腾讯的前端工程师,是如何精进技术的? 千万别跟快递小哥说“放在门口”,他们有一万种藏法……
猜您喜欢 Comfortably Numb 全民直播时代,直播离红海还有多远? Docker容器是否可以改变世界? Go 性能优化技巧 2\/10 JMeter:如何生成多维度的HTML报告