浅谈编程职业的乐趣和苦恼

2023-11-17

乐趣:

        编程为什么有趣?作为回报,它的从业者期望得到什么样的快乐?

        首先,这种快乐是一种创建事物的纯粹快乐。如同小孩在玩泥巴时感到快乐一样,成年人喜欢创建事物,特别是自己进行设计。我想这种快乐是上帝创造世界的折射,一种呈现在每片独特的、崭新的树叶和雪花上的喜悦。

        其次,这种快乐来自于开发对他人有用的东西。内心深处,我们期望我们的劳动成果能够被他人使用,并能对他们有所帮助。从这一角度而言,这同小孩用黏土为“爸爸的办公室”捏制铅笔盒没有任何本质的区别。

        第三,快乐来自于整个过程体现出的一股强大的魅力——将相互啮合的零部件组装在一起,看到它们以精妙的方式运行着,并收到了预期的效果。比起弹球游戏机或自动电唱机所具有的迷人魅力,程序化的计算机毫不逊色。

        第四,这种快乐是持续学习的快乐,它来自于这项工作的非重复特性。人们所面临的问题总有这样那样的不同,因而解决问题的人可以从中学习新的事物,有时是实践上的,有时是理论上的,或者兼而有之。

        最后,这种快乐来自于易于驾驭的介质上工作。程序员,就像诗人一样,几乎仅仅在单纯的思考中工作。程序员凭空运用自己的想象,来建造自己的“城堡”。很少有创造介质如此灵活,如此易于精炼和重建,如此容易实现概念上的设想(不过我们将会看到,容易驾驭的特性也有它自己的问题)。

        然而程序毕竟同诗歌不同,它是实实在在的东西;它可以移动和运行,能独立产生可见的输出;它能打印结果,绘制图形,发出声音,移动支架。神话和传说中的魔术在我们的时代已变成现实。在键盘上输入正确的咒语,屏幕会活动、变幻,显示出前所未有的也不可能存在的事物。

        编程的快乐在于它不仅满足了我们内心深处进行创造的渴望,而且还唤醒了每个人内心的情感。

苦恼:

        然而这个过程并不全都是快乐的。我们只有事先了解一些编程固有的苦恼,这样,当它们真的出现时,才能更加坦然地面对。

        首先,苦恼来自追求完美。因为计算机是以这样的方式来变戏法的:如果咒语中的一个字符、一个停顿,没有与正确的形式一致,魔术就不会出现(现实中,很少有人类活动会要求如此完美,所以人类对它本来就不习惯)。实际上,我认为,学习编程最困难的部分,是将做事的方式向追求完美的方向调整。

        其次,苦恼来自由他人设定目标、供给资源和提供信息。编程人员很少能控制工作环境和工作目标。用管理的术语来说,个人的权威和他所承担的责任是不相匹配的。不过,似乎在所有领域中,对要完成的工作,很少能提供与责任相一致的正式权威。而现实情况中,实际(相对于形式)的权威来自于每次任务的完成。

        对于系统编程人员而言,对其他人的依赖是一件非常痛苦的事情。他依靠其他人的程序,而这些程序往往设计得并不合理、实现拙劣、发布不完整(没有源代码或测试用例)或者文档记录得很糟。所以,系统编程人员不得不花费时间去研究和修改,而它们在理想情况下本应该是可靠的、完整的。

        下一个苦恼——概念性设计是有趣的,但寻找琐碎的bug却是一项重复性活动。伴随着创造性的活动。伴随着创造性活动的,往往是枯燥沉闷的时间和艰苦的劳动。程序编制工作也不例外。

        另外,人们发现调试和查错往往是线性收敛的,或者更糟的是,具有二次方的复杂度。结果,测试一拖再拖,寻找最后一个错误比第一个错误将花费更多的时间。

        最后一个苦恼,有时也是一种无奈——当投入了大量辛苦的劳动,产品在即将完成或者终于完成的时候,却已显得陈旧过时。可能是同事和竞争对手已在追逐新的、更好的构思;也许替代方案不仅仅是在构思,而且已经在安排了。

        现实情况比上面所说的通常要好一些。当产品开发完成时,更优秀的新产品通常还不能投入使用,而仅仅是为大家谈论而已。另外,它同样需要数月的开发时间。事实上,只有实际需要时,才会用到最新的设想,因为所实现的系统已经能满足要求,并体现了回报。

        
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅谈编程职业的乐趣和苦恼 的相关文章

  • C++对象模型之内存区的使用

    对象模型是面向对象程序设计语言的一个重要方面 它会直接影响面向对象语言编写程序的运行机制及对内在的使用机制 因此了解对象模型是进行程序优化 的基础 分析一般意义上程序中的数据在内存中的分布 以及程序使用的不同种类的内存等基本的概念 了解对象
  • Window XP驱动开发(十四) 驱动应用程序端代码实现(针对USB2.0 芯片CY7C68013A,基于CyAPI.lib与Bulkloop固件)

    转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家提出意见 一起讨论 需要源码的可以与我联系 在我的一篇文章 Window XP驱动开发 十二 驱动应用程序端 原理分析 中讲到了驱动应用程序端的
  • 小程序开发工具全新上线

    导语 为了让开发者更高效地开发和发布小程序 微信开发者工具全新改版上线 并新增测试系统 腾讯云工具 运维性能监控 小程序分阶段发布 WXS脚本语言等 01 微信开发者工具 为提升小程序开发体验 帮助开发者更高效地开发小程序代码 微信开发者工
  • 程序员不擅长沟通???

    版权声明 原创作品 允许转载 转载时请务必以超链接形式标明文章原始出版 作者信息和本声明 否则将追究法律责任 本文地址 http blog csdn net jobchanceleo archive 2007 01 18 1487073 a
  • 【Jlink烧录自动化】一台电脑连接 多个Jlink 用 J-flash批处理程序烧写多个单片机(生产批量烧录)

    项目描述 最近一些设备需要进行预生产 小批量生产 虽然是小批量但是数量也是很多 单靠人力烧录设备比较耗费时间 因此需要做一个烧录治具批量烧录 软件与物料准备 软件 由于设备的MCU是arm cortex M4内核 使用的是Jlink烧录因此
  • 屏幕截图的实现和源代码

    最近打算写一些入门相关的小应用程序开发实例 个人感觉学习程序开发 其关键的一步就是阅读源代码 RTFSC 呵呵 然后尝试自己动手编写 这里所谓的自己动手编写并不是让你照着源代码一句话一句的敲 也不是复制粘贴 而是阅读了源代码以后 学习其中的
  • 应用程序访问底层硬件

    2 1驱动程序开发原理 在无操作系统的裸机中 或者类似如DOS这样操作系统中 应用程序和硬件的交互是非常简单的 如同牛郎织女 本来就睡在同一张床上 想怎么说悄悄话都行 可是现在情况有变 他们被天河分开了 要想见面聊几句 也要麻烦喜鹊来搭桥
  • hive的分组和组内排序

    背景 hive的分组和组内排序 语法 语法 row number over partition by 字段a order by 计算项b desc rank rank是排序的别名 partition by 用于给结果集分组 如果没有指定那么
  • Vlc.DotNet播放本地文件时的路径编码

    在播放本地媒体文件时 VLC会对文件路径进行编码 将中文字符编码为utf 8 在程序中也需要如此 否则不能正常播放 C 中可以用 System Web HttpUtility UrlEncode string System Text Enc
  • windows驱动程序开发初探

    最近 由于需求推动 自己得开始学一下在windows下如何开发驱动程序 虽然 后来由于其他的原因使得学习没继续下去 但是我还是把一些粗略的学习经历与体会写在这里 方便自己日后卷土重来 也方便其他的对windows开发一窍不通的有志之士参考一
  • Stephen Wolfram

    斯蒂芬 沃尔夫勒姆 Stephen Wolfram 1959年 物理学家 数学家 电脑工程师和商人 作为程序开发员 他是数学软件Mathematica的发明者之一 作为商人 他是Wolfram Research公司的创立者和首席执行官 在学
  • “自顶向下,逐步求精”的方法

    1 什么叫做 自顶向下 逐步求精 目前软件开发方法使用最广泛的 当属结构化的方法和面向对象的方法 而其中 结构化程序设计支持 自顶向下 逐步求精 的程序设计方法 自顶向下 的具体内涵是将复杂 大的问题划分为小问题 找出问题的关键 重点所在
  • Qt6教程之三(3) QtWedget自定义控件

    在之前的博客中 我们使用的控件都是Qt官方提供的 对于控件的特性也只能被动地接受 为了打破这种束缚 可以按照自己的想法来定义控件 不过自定义控件必须遵守Qt官方的一套自定义控件规则 在规则之下我们就可以定义属于我们自己的控件啦 QWidge
  • 最新VLC命令行参数大全(一)

    用法 vlc 选项 流 您可以在命令行中指定多个流 它们将被加入播放列表队列 指定的首个项目将被首先播放 选项风格 选项 用于设置程序执行期间的全局选项 选项 单字母版本的全局 选项 选项 仅对此选项之前的单条流生效 且优先级高于先前的设置
  • 浅谈编程职业的乐趣和苦恼

    乐趣 编程为什么有趣 作为回报 它的从业者期望得到什么样的快乐 首先 这种快乐是一种创建事物的纯粹快乐 如同小孩在玩泥巴时感到快乐一样 成年人喜欢创建事物 特别是自己进行设计 我想这种快乐是上帝创造世界的折射 一种呈现在每片独特的 崭新的树
  • 安卓Android和Java语言的异同、关系和区别

    安卓Android和Java语言的异同 关系和区别 安卓Android是一种以Linux为基础的开放源码操作系统 主要使用于便携设备 2011年第一季度 安卓在全球的市场份额首次超过塞班系统 跃居全球第一 2012年2月数据 安卓占据全球智
  • 访谈:小学学历的程序员自主研发出框架级产品

    提到许松森 也许你并不知道他是谁 在Google中敲入这个名字 能找到的结果也寥寥无几 那么做为我们这一期采访的主角 他究竟是用什么在吸引着我们呢 打开许松森的blog 开篇就是 我的悲惨人生 读在字里行间 对他在逆境中的自我成长很是敬佩
  • Python Turtle绘图基础(三)——Turtle色彩和画笔设置

    今天继续给大家介绍Python相关知识 本文主要内容是Python Turtle绘图基础 三 包括Turtle色彩和Turtle画笔设置 一 Turtle色彩设置 想要用Turtle绘制出更加复杂 更加美丽的图形 就必须学习Turtle的色
  • 在Java中产生随机数的两个方法

    一 利用random方法来生成随机数 在Java语言中生成随 机数相对来说比较简单 因为有一个现成的方法可以使用 在Math类中 Java语言提供了一个叫做random的方法 通过这个方法可以让系统产生随机 数 不过默认情况下 其产生的随机
  • 数据库设计范式的理解

    文章来自 http www ccvita com 418 html 前言 为什么要写这篇文章呢 从去年年底开始 就和很多做技术的朋友交流过 从数据库设计到数据库架构各个方面的内容 有一些朋友执着于ORM 执着于所谓的数据库设计 却忘记了一切

随机推荐

  • 用java计算输入工资计算税收_标准作业

    课后作业 第一章 理论 1 java环境搭建的步骤 2 java语言的简介 3 手写代码实现个人信息的输出 姓名 性别 年龄 家庭地址 爱好 座右铭 上机 分别使用记事本和myeclipse编写java程序实现求学经历的输出并写好每行代码的
  • 医学图像的CT值与像素值总结及转换代码

    目录 一 CT图像的调窗 1 Window width 2 Window level center 二 DICOM文件中窗宽窗位对应字段 三 CT值与像素值转换 线性映射 1 itk snap软件和sitk代码示例 2 Mango软件和ni
  • 协议定制 + Json序列化反序列化

    文章目录 协议定制 Json序列化反序列化 1 再谈 协议 1 1 结构化数据 1 2 序列化和反序列化 2 网络版计算器 2 1 服务端 2 2 协议定制 1 网络发送和读取的正确理解 2 协议定制的问题 2 3 客户端 2 4 代码 3
  • Spring Boot + Vue的网上商城之基于用户的协同过滤的商品推荐实现

    Spring Boot Vue的网上商城之基于协同过滤的商品推荐实现 协同过滤算法设计思路 构建用户 商品评分矩阵 将用户的购买行为和评价记录转化为一个用户 商品评分矩阵 矩阵中的每个元素表示用户对商品的评分 计算用户之间的相似度 通过计算
  • 在Visual Studio上开启自己的C++学习之旅

    目录 0 引言 1 本教程使用到的相关软件或产品 2 下载及安装Visual Studio 2 1 创建符号链接 2 2 安装Visual Studio 2 2 1 补充 3 创建并运行自己的第一个C 程序 0 引言 在学习一门编程语言之前
  • [940]TensorFlow练习4: CNN, Convolutional Neural Networks

    Convolutional Neural Networks翻译为卷积神经网络 常用在图像识别和语音分析等领域 CNN详细介绍参看 https en wikipedia org wiki Convolutional neural networ
  • 太原理工大学c语言期末试卷及答案,太原理工大学人工智能复习题 试题 答案概要...

    任务有何不同 6 5 基于规则的专家系统是如何工作的 其结构为何 6 6 基于框架的专家系统与面向目标编程有何关系 其结构有何特点 其设计任务是什 么 6 7 为什么要提出基于模型的专家系统 试述神经网络专家系统的一般结构 6 8 新型专家
  • 在区块链的世界里,美国CFTC希望成为一个节点

    在华盛顿参与一场区块链峰会时 CFTC 美国商品期货交易委员会 主席J Christopher Giancarlo发表了题为 数字三要素 技术 监管和市场 的演讲 Giancarlo在演讲中提到了区块链技术的应用可能 认为如果2008年经济
  • Component name “Nearby“ should always be multi-word. 的原因

    很好奇在ESlint规范中为啥要求component的name不能是单个单词 除了App外 呢 查阅官方文档得知 This rule require component names to be always multi word excep
  • spring控制反转与依赖注入

    1 什么是控制反转 传统的编程思路是 当我需要某个对象时 我便自己去实例化调用它 而控制反转则是 当我需要某个对象时 自然有人帮我们实例化它 简单的来说 这是一种衣来张口 饭来伸手式的控制模式 这也符合spring最根本的使命 简化java
  • 基于Java开发一套完整的区块链系统

    一 区块链技术理论基础 1 基本概念 1 区块链 从技术层面来看 区块链是由包含交易信息的区块按照时间顺序从后向前有序链接起来的数据结构 从应用层面来说 区块链是一个分布式的共享账本和数据库 具有去中心化 不可篡改 全程留痕 集体维护 公开
  • 删除计算机用户时拒绝访问权限,c盘为什么拒绝访问 删除c盘文件需要管理员权限怎么办...

    c盘是电脑中的关键位置 存储着很多系统重要文件 如果电脑出问题一般就是c盘中的文件异常 近日有小伙伴出现这样一个问题 打不开c盘显示拒绝访问 作为计算机的主人被无法访问 这种问题该怎么解决呢 其实很简单 只要找准方向就可以迎刃而解 下面小编
  • 8月热门论文丨AI Agent会是大模型的未来发展方向吗?

    过去的8月 如果让我用一个词来总结 那就是 Agent 大模型的下半场已经拉开序幕 大厂们都纷纷表态入局 Agent OpenAI创始成员Andrej Karpathy表示相比大模型 OpenAI内部目前已经关注Agent领域 亚马逊也宣布
  • 13:js逆向-登录加密(aes加密)

    post请求 请求头信息被加密 response返回数据被加密 1 首先搞请求头data加密 还是直接搜索 搞定加密的参数 f body loginMethod 1 name 17756236589 password 132456789 h
  • wpf解决方案

    Wpf部分 1wpf textbox 显示和隐藏 personq Visibility Visibility Visible 这样显示 personq Visibility Visibility Hidden 这样隐藏 2 wpfradio
  • Linux笔记之安装配置nginx的两种方式——yum安装和源码安装

    安装配置nginx的两种方式 yum安装和源码安装 访问nginx的官方网站 http www nginx org Nginx版本类型 Mainline version 主线版 即开发版 Stable version 最新稳定版 生产环境上
  • Cannot run program “D:\jdk8\bin\java.exe“ (in directory “C:\Users\Administrator\AppData\Local\JetBra

    bug笔记 项目场景 运行main方法 Cannot run program D jdk8 bin java exe in directory C Users Administrator AppData Local JetBrains In
  • 蓝桥杯真题 杨辉三角形 python

    专栏 蓝桥杯题目 目录 问题描述 输入格式 输出格式 样例输入 样例输出 评测用例规模与约定 省流版本 题目解析 综上所述 写成代码如下所示 问题描述 下面的图形是著名的杨辉三角形 如果我们按从上到下 从左到右的顺序把所有数排成一列 可以得
  • Unity入门教程

    Unity入门 Unity脚本基础 Unity脚本基本规则 Unity脚本生命周期函数 Inspector窗口可编辑的变量 Mono中的重要内容 Unity重要组件和API 最小的单位GameObject 时间相关Time 1 时间缩放比例
  • 浅谈编程职业的乐趣和苦恼

    乐趣 编程为什么有趣 作为回报 它的从业者期望得到什么样的快乐 首先 这种快乐是一种创建事物的纯粹快乐 如同小孩在玩泥巴时感到快乐一样 成年人喜欢创建事物 特别是自己进行设计 我想这种快乐是上帝创造世界的折射 一种呈现在每片独特的 崭新的树