zoukankan      html  css  js  c++  java
  • 人月神话——编程的乐趣与烦恼

    看完《人月神话》焦油坑中写的关于编程职业的乐趣与烦恼,更加坚定了我要加入编程行列的决心。在人生的每一个阶段,能够找到一个自己喜爱的东西,是幸运的。因为有了喜爱的东西,你才不至于无聊,不至于一天到晚浑浑噩噩的过日子;因为有了喜爱的东西,你的心才会有所归属,才能感觉到自己并不是一个一无用处的人。

    编程为什么会有趣呢?

    首先是特别酷。只凭借着一台电脑,按上几个字母,就能出现你想要的结果。所有的一切问题,都在一台电脑上就可以解决。尤其是当你看到电影中的一幕,黑漆漆的电脑屏幕,无数个字母往下滚动,那种感觉应该是特别酷的。有时候,你看到别人手指就那么轻轻的按了几个字母,就出现了特别神奇的一幕,你心里就会嘀咕,这家伙到了干了些什么啊,你就会非常好奇,惊讶,It's amazing。

    其次是一种创建事物的纯粹快乐。当你有了一个想法,在实现过程中,通过解决一个个问题,最后得到你要的东西。看到自己双手创造的成果特别开心。

    第三是学习的乐趣。来自于这项工作的非重复特性。人们所面临的问题,在某个或其它方面总有些不同。因而解决问题的人可以从中学习新的事物:有时是实践上的,有时是理论上的,或者兼而有之。

    第四是乐趣还来自于工作在如此易于驾驭的介质上。程序员,就像诗人一样,几乎仅仅工作在单纯的思考中。程序员凭空地运用自己的想象,来建造自己的“城堡”。很少有这样的介质——创造的方式如此得灵活,如此得易于精炼和重建,如此得容易实现概念上的设想。(不过我们将会看到,容易驾驭的特性也有它自己的问题)然而程序毕竟同诗歌不同,它是实实在在的东西;可以移动和运行,能独立产生可见的输出;能打印结果,绘制图形,发出声音,移动支架。神话和传说中的魔术在我们的时代已变成了现实。在键盘上键入正确的咒语,屏幕会活动、变幻,显示出前所未有的或是已经存在的事物。编程非常有趣,在于它不仅满足了我们内心深处进行创造的渴望,而且还愉悦了每个人内在的情感。

    最后一个,也是最重要的一个原因。快乐来自于开发对其他人有用的东西。内心深处,我们期望其他人使用我们的劳动成果,并能对他们有所帮助。一件事情如果只是单纯的有趣,那并不能维持你多久的热情(自娱自乐的快乐是短暂的,只有和别人一起分享才能得到更多持久的快乐)。只有对他人和社会有实际价值,能够带来帮助。当别人因为你的付出,而感觉得到了帮助,那么你就会感觉到自己有用,这种成就感就是你继续下去的动力,让你创造出更多有趣的东西。都说喜欢一个人,始于颜值,陷于才华,忠于人品。同样喜欢一样事物,刚开始可能是被他酷酷的外表所吸引,但是要长久的喜欢一样东西,必须有更深层次的东西来支撑它。

    编程的苦恼

    正所谓爱之深,恨之切。喜欢的东西同样也会给你带来苦恼。我们只有事先了解一些编程固有的烦恼,这样,当它们真的出现时,才能更加坦然地面对。

    首先,必须追求完美。因为计算机也是以这样的方式来变戏法:如果咒语中的一个字符、一个停顿,没有与正确的形式一致,魔术就不会出现。

    其次,是由他人来设定目标,供给资源,提供信息。编程人员很少能控制工作环境和工作目标。(现在自己还没有进入这个行业,还没有感受到这个烦恼)对于系统编程人员而言,对其他人的依赖是一件非常痛苦的事情。他依靠其他人的程序,而往往这些程序设计得并不合理,实现拙劣,发布不完整(没有源代码或测试用例),或者文档记录得很糟。所以,系统编程人员不得不花费时间去研究和修改,而它们在理想情况下本应该是可靠完整的。

    第三个烦恼——概念性设计是有趣的,但寻找琐碎的 bug 却只是一项重复性的活动。伴随着创造性活动的,往往是枯燥沉闷的时间和艰苦的劳动。程序编制工作也不例外。另外,人们发现调试和查错往往是线性收敛的,或者更糟糕的是,具有二次方的复杂度。结果,测试一拖再拖,寻找最后一个错误比第一个错误将花费更多的时间。

    最后一个苦恼,有时也是一种无奈——当投入了大量辛苦的劳动,产品在即将完成或者终于完成的时候,却已显得陈旧过时。因此,我们所面临的挑战和任务是在现有的时间和有效的资源范围内,寻找解决实际问题的切实可行方案。

    这,就是编程。一个许多人痛苦挣扎的焦油坑以及一种乐趣和苦恼共存的创造性活动。对于许多人而言,其中的乐趣远大于苦恼。的确如此,每一个有趣的东西背后总是会附带着一些让你烦恼的琐事,但是它们又是不可避免的。因此,提前认识到有哪些烦恼会阻碍你前行,就显得特别重要,当你真的碰到问题了,你也就能够笑着坦然去面对了,再想想那些让你激动不已的时刻,你会感觉眼前的困难都不足为惧。

  • 相关阅读:
    精通正则表达式(JavaScript)
    Go知识点记录
    多线程揭秘
    Python test
    ELinq+T4模版引擎制作多文件实体代码生成器
    浏览器内核
    MongoDb的增删改查
    LINQ执行表达式
    ASP.NET MVC3 读书笔记四(数据注解和验证)
    C#默认以管理员身份运行程序
  • 原文地址:https://www.cnblogs.com/YeChing/p/6276679.html
Copyright © 2011-2022 走看看