爱分享

程序之美 存乎于心

来源:segmentfault.com 2019-01-01 19:41:55850

  我是盛安德科技天津分公司的普通WEB开发人员,本人并没有什么特长,开发语言仅限于PHP和Javascript,同时也不是科班出身,在本次“我的编程之路”活动中现身主要是希望自己的经验能够让刚刚走上程序之路的朋友们多一点借鉴。

 程序员——大有可为的职业

  程序员的人力缺口非常大,盛安德科技作为一个专门承接外包的公司对此更是感触良多。虽然有时候我们也抱怨好项目太少,但是更多的时候是好项目来了却发现根本没有人去做。招聘广告常年打,面试者寥寥无几,能通过面试的更是沧海一粟。

  那好吧,我替大家问一声,我们不是不想去应聘,而是面试了几家都不成功,是不是你们根本不想招人,就是在炒作啊?就算侥幸成功了,进去工作的时候被骂的像死狗、工作累的像死狗、炒鱿鱼就像扔死狗,为什么?

  其实很简单,因为各个公司都是在招聘程序员,而会写代码 != 程序员。
  你会换保险丝,但是你不是电工,对吗?
  你会唱歌,但是你不是歌手,对吗?
  你会做饭,但是你不是厨师,对吗?
  那凭什么你会写代码就一定是程序员了呢?
  好吧,我承认你说的对,那么达到一个什么样的标准才是程序员呢?
  我无法给出什么答案,只能分享一些过往,期望能带来领悟。

 程序员之路

  我在小学的时候就接触到程序了,在苹果机上按照课本的例子画画几何图形,弄个打飞机的小游戏,初中的时候也是这样,不过就是苹果机换成了中华学习机而已。也许是这个时候埋下了某颗种子?不知道。

  从UCDOS, WPS到win31,win95,应用方式从打字变成玩儿游戏,此外由于系统不稳定被迫学会了怎么装系统,除了“电脑很有趣”外,我对它没有更多的印象了。

  也许兴趣确实是最好的老师,游戏玩儿多了(可能更重要的是体验过游戏修改器之后)就会有写游戏的愿望,也就顺便看了一些编程的书,反正只要不带走在书店里面随便看。结果我发现,对于我这种没上过正式高中的人来说,编程根本就是一件无法理解的事情,无论是汇编还是C,狗咬刺猬啊。

  后来的事情可能年龄大一点的人就都经历过了,聊天室、看网页、OICQ,只是意外的,我从广告上看到一个“网页制作培训班”的招生启事。

 我说要有光

  一花一世界,一叶一菩提;代码自在方寸。我惊喜的发现,我能看懂HTML,对于用过WPS的我来说,一眼就看懂了HTML的奥秘。

  也许这辈子我也学不会C语言了,也许靠HTML永远写不出游戏,但是,看到亲手录入的代码在浏览器中呈现出了原本仅在我脑海中的画面,我忽然觉得,这样也不错,这是我期望的光。

  我想此时的我已经开始了自己的开发之路,虽然我还算不上是一个程序员,但是至少我有了目标,并且也愿意为此而努力。

 并非天生我材必有用

  一个又有一个页面制作出来,然后一个又一个的丢掉,直到有一天受命制作了一个内网的休闲网站。很简单的网站,列出很多小说的超链接,可以在线观看(txt格式)和下载(zip),90%的时间花费在寻找资源上,最终的页面很丑,顶部一个标题,然后就是一堆url。但是,这些丑陋的页面没有被丢掉。原来并非天生我材必有用,而是没用的早已被湮没。

  我要去做有用的东西,虽然我还不是一个程序员。

 让我站得更高一点

  薄薄的一本HTML教程轻松翻完,可能只用了一天不到,但是留给我太多的问题。为什么Yahoo的网页这么好看,为什么别人能做出一些很炫的效果(比如雪花),为什么有那么多为什么?答案轻而易举的得到了,四个字:查看源码。

  HTML -> CSS -> Javascript -> Photoshop -> Flash –> PHP -> MySQL

  这个时候我觉得自己应该算得上是一个程序员了,或者说我已经不在意自己是不是一个程序员了,不断地学习,不断地练习,不断地进步,不断地超越自己,这就是我想做的、正在做的、并会继续去做的事情。

 这是一个起点

  编码、吃饭、睡觉,这种单调的生活持续了大约20天,我的第一个PHP项目完成了。开发工具就是Editplus,功能则是依附于业务数据库构建一个辅助查询系统。
在开发的工程中我学到了新的知识,对某些问题的处理有了新的思路,所以我相信我的下一个项目会做的更好。
所以,这只能是一个起点。

 程序&程序员

  用文字描述客观真理被称为哲学,用数字与符号描述客观真理被称为数学,用0和1描述客观真理,是程序,是过程的有序组合。

  程序员在不违背客观真理的前提下,对过程进行有序的组合,使事物按照我们的意愿发展从而得到必然的结果。

 程序之美

  有道是字如其人,代码亦然。它是开发者思想的结晶,在我看来欣赏代码与欣赏艺术品之类的东西大同小异。

 何为美

  错落有致,别具匠心;辗转灵动而又典雅大方;增一分则肥,减一分则瘦;不施粉黛却浑然天成...

  观众怒曰:说人话!囧

  代码应该格式良好,虽然每个人喜好不一,但是其代码中的缩进、空格的使用必然是有规律的,而不是随手为之。

  结构充满弹性,耦合适当。

  没有冗余的代码,但是也不会放弃必要的检查。

  读起来很流畅。

 何为美

  物尽其用方为美。

  在官方文档中经常可以见到简短的示例代码,但是有没有人尝试过自己去写一个示例代码呢?如果你觉得这有什么了不起,好的,试试看。

  1. 示例代码是当前话题的典型应用,就是最常见的用法;

  2. 如果有可能的话,该代码应该是可运行的;

  3. 不能喧宾夺主,示例代码不会让读者的注意力离开当前话题;

  4. 恰到好处的注释,预测读者此时可能想到问题并针对性的解释;

  5. 要短。

 何为美

  指点江山,激昂文字,波澜壮阔之美。

  初级程序员是站在开发者的高度编写代码,中级程序员是站在使用者的高度编写代码,高级程序员是站在项目价值的高度编写代码,顶级程序员是用上帝视角考虑取舍,不写代码。低头看,万马奔腾;略昂首,高山仰止;再侧目,节比鳞次,各逞机锋。

 再问何为美

  子非鱼焉知鱼之乐。

  心之所向,身之所往。

  不滞于物,不殆于心,思而惘顾,行而桀黠。

 尾声

  谨以此文分享我历年来的感悟,希望有更多志同道合者加入程序员的队伍。在我看来,即便是在职的开发人员也不乏大量的码农,在规模较小的公司里面更是一个程序员带着一群码农在为混口饭吃努力。想要发展首先就要有交流,但是没有同伴你又能和谁交流?

  何为码农?在个人能力上不思进取,在工资收入上费尽心思的就是码农。所以,还是做程序员吧,等你。


 附言

  哗啦啦写了不少,结果发现征文要求之中的很多内容却都没写,就在末尾补注一下吧,避免被编辑说不符合要求而退稿。

 我喜欢的软件

  常用的虽然很多,但是一定要说喜欢的还真没有。

 我喜欢的硬件

  键盘和鼠标,品牌无所谓,主要是质感。不会太轻,那就飘了;不能太重,会累;不能太灵敏,触而不发代表我还在犹豫;不能太迟钝,灵感如白驹过隙。反面典型就是手写笔。

 工作、学习、生活中用到的神器

  我想神器未必是真的神器,我的神器是鱼竿,哈哈。只要看到鱼竿就会立刻从当前的状态中解脱出来,重归平静。

 有没有写过一些黑科技(狂拽酷炫屌炸天)型程序

  很久以前(好像是07年吧,还没有jQuery之类的东西)基于XMLHttpRequest做了一个内网站点,包括打卡,留言,技术分享,新闻几个小功能。整体的布局和外观模仿的windowsXP,是的,首页上各个应用的图标,打开后开启一个浮动窗口,也可以最大化、最小化和关闭,当然也包括拖动。

  但是这也是一个完全失败的作品,除了很炫(在当时来看)以外没有任何的实用价值。因为追求效果,很多用户操作被复杂化了,同时很炫的功能导致试用者的注意力被转移了,没人注意到技术分享功能本身,而是被各种个性化设置带偏了,很多人尝试了各种个性化设置,然后完全没有心情去写什么技术资料了。

 推荐书籍

  对于中级及以下的开发人员,像C, C++, Java都有很多经典的书,前几章都非常值得一看。你也许问我既然这么好为什么不看后面,好吧,因为后面我都看不懂。

  前面几章事实上是对语言的整体介绍,是对语言缔造者观念的剖析,我们可以由此去聆听大师们是如何理解对象的,怎么看待和分析对象间的联系等等。

  我觉得很有用,而且每隔一段时间再看都会有不同的领悟。

  此外关于语言本身就没什么书籍可推荐了,很贵而且不如文档全面,如果有兴趣的话不如看看UI设计思想、敏捷软件开发之类的东西。

  我一直坚信程序无所不能,而对于程序员来说技术问题总是能够解决的,但是就怕你想不到,或者不敢想。

 编程的大杀器

  没有。要是说对程序员的大杀器我倒是可以推荐一个,ctrl-c + ctrl-v,绝对是对程序员的大杀器。

  1. 用这个手段开发的人很难进步

  2. 用这个方式开发的项目不好维护

 好习惯与坑

  好习惯就是注重细节和强烈的责任感,与之对应的就是坑。从大处说可能变身猪队友坑了项目组;从小处说,变量名写错一个字符这种bug是最难发现和解决的,而且解决之后还收获不到任何喜悦。你只会沮丧的想,浪费了4个小时原来只是把i写成了l。

 展望未来

  根据前面的调子,这里也不会有什么出彩的答案。

  其实我挺反感曾出不穷的新技术名词的,嗯,是的,只是反感新技术使用的名词,不是技术本身,比如Saas,比如大数据。

  我个人并没有觉得真的有什么新技术出现了,通常这只是宣传的需要而已。就像win31, 95, Me, 98直到现在的win10,这是技术发展的必然结果。

  用大数据来做例子,这是新的课题吗?肯定不是,搜索引擎早就面临并一直在解决这个问题,那么怎么突然在最近流行起来这个话题了呢?

  我认为所谓的新技术通常是对前人在特定领域留下的宝贵经验的一次总结,是为后来者提供一个用来踩踏的基石,并不是什么神秘或者高端的东西。(例如现在烂大街的Ajax,最早是用隐藏的iframe,后来才有了XMLHttpRequest,然后才被称为Ajax然后被广泛使用,而在HTML5以前,所谓的ajax文件上传也仍然还是通过iframe模拟的。)

  我在回答某个问题的时候也说过类似的话:程序是建立在逻辑的基础上的,开发功能的时候可以不用别人造好的轮子,但是不等于你可以抹杀那个轮子所代表的逻辑。在我看来,新技术就是轮子的名字而已,贡献吗?绝对!创新吗?呵呵。

  所以,对于看好什么技术这种问题,我的回答只有四个字,适者生存。

文章推荐