程序员的本质

程序员视角看:深度剖析工作的本质,我们是否本末倒置? 在程序员的世界里,代码是语言,项目是战场,解决问题是日常的使命。然而,当我们在键盘敲击间追逐功能实现和需求交付时,是否曾想过,工作的本质究竟是什么?星际联邦议员麦克阿瑟的观点——“工作的本质不在于解决问题,而是用解决问题为理由画饼托起就业”——虽然看似极端,却像一面镜子,反射出我们可能未曾察觉的现实。从程序员的视角出发,结合当下社会现象和技术趋势,我们可以从多个维度重新审视工作的本质。 阅读详情

2011-05-19 09:31 | 3412次阅读 | 来源:伯乐在线 【已有11条评论】发表评论

关键词:程序员 | 作者:魏哲 | 收藏这篇资讯

导读:本文来自softwarecreation上一篇《What do programmers really do?》,译文由伯乐在线整理编译《程序员的本质》。文中阐述了程序员的本质,以及一名优秀程序员所具备的能力。一个优秀的解决方案需要计算机世界与人类世界的双重技能。只有连接起两个世界,才能成为一个真正的优秀程序员。

内容如下:

很多人(包括我岳母)认为计算机变得如此智能,所以在不久的未来将不再需要程序员。另外一些人认为程序员是天才,他们在电脑前能不断地解决复杂的数学难题。甚至不少程序员对他们是做什么的都没有清晰的概念。

Computers are useless. They can only give you answers. – Picasso

计算机没有什么作用。他们只能告诉你答案。——毕加索

在这篇文章中,我想给不知情的人解释一下程序员到底是做什么的:

程序员是将人类想法翻译成计算机语言的译者。

他们是两种世界之间的纽带。你认为维护这个纽带很容易吗?

人类世界的背景

The problem with people is that they’re only human. - Bill Watterson

人类的问题是,他们只是人而已。——比尔·沃特森

人类是生物进化的产物,并且拥有独特而宝贵的器官——大脑,它能为程序员提供想法。大脑有组合复杂的新大脑皮层(对人类而言是独特的),还有从哺乳动物和爬行动物继承的旧结构。旧的大脑结构主要负责生殖(性)和生存(寻找食物或者躲避危险)。新大脑皮层进化成能够更好地支持这些功能,但是,它开始产生奇怪的副作用——意识、思考和好奇心。幸亏这些副作用的影响,人类产生了文明并在数千年后发明了计算机。

一些人相信经过数千年的发展,人类应该变成完全沉闷的、理性的、可预测的生物,但是这并没有发生。人类旧的大脑结构、复杂的心理和社会行为往往使人们不理性,不可预测并带有欺骗性。并且,人类有糟糕的记忆力、强烈的情感和个人兴趣。但是,程序员没法选择与更理性的物种工作,他们不得不与人类共事并且把人类的想法翻译成计算机语言。

计算机世界背景

Part of the inhumanity of the computer is that, once it is competently programmed and working smoothly, it is completely honest. – Isaac Asimov

计算机非人性的一部分表现是,一旦完成编译并且顺利运行,它将忠实地完成工作。——艾萨克·阿西莫夫

计算机是人类文明的最佳发明。它由CPU、主板、内存、硬盘驱动器、显示器和其他部分构成。计算机将我们的文明推入一个新的水平,使我们的生活更有意义并充满乐趣,还弥补了我们大脑的缺陷。很可能计算机比人类更聪明。(不过,我有点关心如果这成为现实后,计算机还需要人类程序员吗?)

现代计算机具有完全逻辑性、直接性和顺从性。如果你知道它应该做什么并且知道如何命令它,那么和计算机一起工作是快乐的。唯一的问题是,计算机只会做你告诉它去做的。因此,你应该有清晰的思路并且在见你的上司或客户时保证计算机不出岔子。

在人类和计算机之间的翻译

翻译中会遇到三个主要的挑战:

1.语言歧义。人类语言是模糊、复杂并且双关的,例如:“这个程序不能提供良好的用户体验”。文化、背景和上下文语境都会对沟通和含义造成影响。与之相反,所有计算机语言都是准确、直接的,与上下文无关。

2.细节层次。人类的沟通是笼统而不带有过多细节的,例如:“我想让这该死的程序运行起来”。这样可以节省时间与精力,但由于缺少详细信息,会产生两个比较大的问题——误解和不确定性。而计算机需要所有细节——每件事都要说清楚。

3.思维模式。人类习惯于思考需求、结果与解决方案之间的关系,例如:“这份报告应该在2秒内运行,而不是2个小时”。然而,计算机需要算法——按照步骤去达到想要得到的结果。

为了写出优秀的软件,程序员们必须克服这些困难,理解人们的想法并将之转换成计算机语言。

一名优秀程序员所具备的能力

我们可以看到,一名优秀程序员应该具备应付两个不同世界的两套技能。

理解人类的需求并提出解决方案:

1.沟通——与人建立联系的能力,能够同他人亲密的交谈,并有勇气去尝试分享自己的观点。

2.意图——从谈话中提取有用的信息,理解并使之有意义。

3.逻辑——为不懂让步的计算机整理、剔除那些人类思想中含糊而有争议的内容。

4.创造力——挖掘、转变人类的想法,从而创建优秀的解决方案。

5.构思——利用人类友好的接口和便捷的互动性来包装编程思想。

6.大局观——清楚解决方案是如何适应全世界的用户、企业以及其他,从而使你的程序更有用。

告诉计算机该做什么,并建立解决方案:

1.逻辑(再次强调)——把程序员的想法组织整理成有凝聚力的软件思想和计算机指令

2.技术——发现并理解科技黑箱(对于99%的人来说是黑箱)。

3.编程语言——学习美观的、富有逻辑的、清晰明了的语言,从而把程序员的想法提供给电脑。

4.算法——精通让计算机完成任务最高效的方法。

5.建模——在软件代码中建立抽象和模型,从而掌握并操控想法。

6.实践(比如代码重构、单元测试、持续集成)——周期性活动,以保持系统可靠、健康与可改变。

面向人类和面向硬件对象/系统的程序员有很大不同。不与人沟通的程序员不是好程序员。一个优秀的解决方案需要计算机世界与人类世界的双重技能。只有连接起两个世界,才能成为一个真正的优秀程序员。

原文出自:softwarecreation

译文出自:伯乐在线

《程序员》:基于需求的测试是软件测试的本质 《程序员》:基于需求的测试是软件测试的本质.pdf 立即下载

相关推荐

Python的WNTR库---基于供水网络

WNTR使用小结(一) 本人最近主要再做设施网络的内容,主要聚焦供水管网(water distribution network,WDN),在做实验中主要用的包为WNTR,下载连接: 链接: WNTR.最好安装最新版本 如果有做这方面研究的小伙伴们需要测试数据可以直接从WNTR实例数据中下载,其中提供了四种规模大小的管网,格式为.inp,可以搭配Epanet使用。如果需要更多示例数据可私信我! 以下内容全部为本人自己探索的小心得,希望能给你带来一点点帮助,如果不够详尽可以自行参阅官方文档:链接: 官方文档.

pushhy的博客 4934

程序员是做什么的?怎么成为程序员?

我是一个程序员,我知道程序员是做什么的,但是我身边有很多亲朋好友并不知道。 他们经常认为程序员就是对电脑很懂得人,包括电脑的软硬件问题,包括电脑装系统。 实际上,可能不只是我的这些亲朋好友,绝大多数不做程序员的人可能都不知道程序员究竟是做什么的,也不太清楚何谓程序、何谓软件。程序员到底是做什么的,这可能是很多想要进入软件行业的人都很想知道的一个问题,那么我就根据我目前的理解说说我的看法,如果有理解有误之处,欢迎指正。 软件和硬件的区分及关系 首先,现在电脑和手机都应用非常普遍,大家都知道手机和电脑上都有很多

程序员涂小哥的技术博客 7万+

随机森林的可解释性分析(含python代码)

随机森林的“黑箱”特性逐渐凸显,这使得我们难以理解和解释模型内部的工作机制。对于许多应用场景而言,仅仅获得高准确率的预测结果是不够的;了解预测背后的逻辑同样重要,特别是在医疗诊断、金融风险评估等领域。因此,对随机森林进行可解释性分析变得尤为重要。

m0_59257547的博客 3848

程序员是做什么的(非常详细),零基础入门到精通,看这一篇就够了

程序员是做什么的(非常详细),零基础入门到精通,看这一篇就够了

2302_76672693的博客 2363

【迁移学习综述】

迁移学习的目标是将某个领域或任务上学习到的知识应用到不同的但相关的领域或问题中。迁移学习的研究来源于一个观测:人类可以将以前的学到的知识应用于解决新的问题,更快的解决问题或取得更好的效果。迁移学习被赋予这样一个任务:从以前的任务当中去学习知识(knowledge)或经验,并应用于新的任务当中。换句话说,迁移学习目的是从一个或多个源任务(source tasks)中抽取知识、经验,然后应用于一个目标领域(target domain)当中去。

afadgas的博客 4321

保姆级教程:用Protege 5.5.0从零构建你的第一个知识图谱(附实战案例文件)

本文提供了一份详细的Protege 5.5.0使用指南,从零开始构建知识图谱。涵盖环境配置、本体结构设计、实例填充到可视化展示的全流程,特别适合初学者快速掌握知识建模技术。通过实战案例演示,帮助读者理解如何定义类、属性及建立实例关系,是学习知识图谱构建的实用教程。

weixin_42548816的博客 555

程序员是干什么的

 程序员是干什么的这是我上次回家是跟村里的一个大爷的对话:大爷: 小子,在外边干啥工作呢?我: 我啊,我是个程序员。大爷: 什么是程序员啊?我: 程序员就是编程序的人?大爷: 啥是程序啊,不懂。我: 程序啊,就是计算机里面的东西。大爷: 哦,我听说你是打电脑的,怎么是计算机啊?那你帮我看看我的计算机吧,不知道为啥现在不显字儿了。我一愣: 啊, 大爷, 我还不知道你有

Rainman的专栏 1609

中兴交换机配置SSH登录

SSH是在传统的Telnet协议基础上发展起来的一种安全的远程登录协议。发送和接收数据时, SSH会自动对数据进行加密及解密。相比于Telnet,SSH能防止“中间人”攻击、DNS欺骗、IP 欺骗等,无论是在认证方式或者数据传输的安全性上都有很大的提高。SSH用户认证方式有3种,分别为本地(Local)认证、RADIUS认证和TACACS+认证。以表规划数据为例,说明配置SSH登录的步骤。

才怪的博客 7932

如何理解程序员职业的本质

如何理解程序员职业的本质 程序员这个职业,和其他职业非常不一样。这大概是由软件的本质决定的。 自动化 其他行业的工作,都需要由人来完成;今天做的事情,明天可能还要同样的做一遍。但这是人类工作的方式,不是机器工作的方式。 软件,仔细想想,它不就是一系列可以重复执行的命令么? 为了让机器去做重复的工作,我们才需要编码,通过各种编程语言告诉机器如何去完成一项特定的工作,而在这之后,这项工作就由机器完成了...

qq_35313772的博客 583

基于MATLAB的数字滤波器之低通滤波器

本文首先介绍了数字低通滤波器的概念和原理,其次论述了低通滤波器的技术指标和设计步骤,最后给出了数字低通滤波器应用于信号去噪的MATLAB代码。

总结论文中的算法并给出论文的复现代码 3万+

搜索神器Perplexity的详细使用方法(持续更新)

本文主要介绍了ChatGPT的互补工具Perplexity的详细使用方法,希望对新手有所帮助。需要说明的是,Perplexity不需要上网工具,很方便新手和小白上手使用。Perplexity的官网链接为:https://www.perplexity.ai/ 。 文章目录 1. 为什么要讲Perplexity? 2. 详细使用方法 2.1 使用要点一 2.2 使用要点二 2.3 使用要点三

herosunly的博客 8万+

程序的本质是什么?程序员的工作性质是什么?

程序的本质是什么?程序员的工作性质到底是什么?容易被取代么? 程序的本质是把人的思想变成计算机可执行的机器代码。 程序员的工作性质的本质是翻译。 你思路和需求清晰后,可以用任何高级语言来表达思想的,最后会被翻译成机器语言,驱动计算机去执行。 软件行业有两个著名的公式 : 1、软件=数据结构+算法。 这是瑞士计算机大师Niklaus Wirth 说的,他发明过Euler、Algol-W、Pascal、Modula 和 Oberon很多种编程语言。 2、算法=控制+逻辑。 这是英

BeyondCodeX的博客 1274

【AI Agent】Hermes Agent解析

Hermes Agent:一个具备持久化学习能力的开源AI Agent框架 核心特点: 突破传统Agent的"无状态困境",通过记忆系统(SQLite+FTS5全文检索)实现跨会话经验积累 支持200+模型自由切换,11种模型家族和15+平台接入 五层架构设计(入口层、编排层、推理层、工具执行层、存储层)实现平台无关性 47+内置工具和动态技能沉淀机制,支持从任务执行中自动提炼可复用Skill 独特的四层记忆体系(会话/每日/长期/向量索引)和辩证式用户建模 与传统Agent对比: 具备自我进化能力,通过A

sysu_lluozh 960

雷军谈程序员成长与编程本质

编程作为计算机科学的核心技能,其本质是逻辑思维与创造力的结合。从底层原理看,编程语言通过特定语法规则将人类思维转化为机器可执行的指令,这种转换过程既需要严谨的技术实现,也蕴含艺术创作的灵活性。在工程实践中,优秀的代码往往兼具功能性与优雅性,这正是编程作为'技术活'与'艺术创作'双重属性的体现。雷军作为资深开发者,通过自身经历揭示了程序员职业发展的关键:持续的技术精进需要与对编程本质的热爱相结合。在现代软件开发场景中,这种平衡思维尤为重要,无论是参与大型系统架构还是独立产品开发,都能帮助开发者突破职业瓶颈。雷

weixin_35754962的博客 258

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

程序员和黑客的十大本质区别

最近小编的大学室友老是给小编抱怨一些工作的事情,想让我帮他黑一个上司的电脑,把他的电脑数据缓存清除一下,满足一下他的报复心,我只能呵呵一笑,无奈的摊摊手。其实这也不是第一次身边的人请自己帮忙黑别人电脑了,可能在他们眼里程序员都是那种只要电脑在手,就可以控制住一切的电子产品。今天小编就来给大家科普一下,程序员和黑客的十大本质区别。 01、 黑客是程序员的子集。 02、 程序员在解决那些原先已经被解...

taya_a的博客 2931

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

十年码海沉浮:在AI洪流中重塑程序员的本质

当AI能够像熟练的工匠一样自动生成CRUD代码时,我们价值战场已经悄然前移到需求分析阶段,我甚至感觉AI的到来,对于产品经理来说是一项利器,他们完全可以靠自己做出自己设想中的产品。能否把模糊的“用户需要更流畅体验”这样的需求,转化为具体的QPS指标和熔断策略,就如同在迷雾中找到明确的灯塔,成为了新的分水岭。只有准确地定义问题,才能为后续的工作指明正确的方向。

callmedaphy的专栏 949

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

程序员青春饭问题的本质及如何应对

目录 青春饭是一切职业的特点 程序员的青春饭有何特点 问题的本质在哪里 应对方法 青春饭是一切职业的特点 首先我们应对明白,青春饭不是程序员职业所独有的,几乎所有的职业都是青春饭。如果你看到其他行业的老师傅很吃香,那你怎么没看到从程序员成长起来的技术大佬们同样吃香?每个行业,技术足够专精之后都有其价值存在,但每个行业的工作主力都是价格低的年轻人,这是供大于求的经济状态决定的,也是...

xiaorang的专栏 1115

技术的本质是工具,程序员未来的谋生方向是什么呢?

技术到底是什么,你我所处的技术行业为什么会存在,未来的机会在哪里。 因此,我结合自己的工作经历,希望和大家一起聊聊,技术的本质与未来的方向,到底在哪里。

fancy125的博客 1005
上一篇: VC/MFC之ListCtrl控件使用经验总结
下一篇: 程序员应掌握的英语
CButtonST
博客等级 码龄16年 42粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值