浅谈关于程序员的本质
很多人认为计算机变得如此智能,所以在不久的未来将不再需要程序员。另外少量人认为程序员是天才,他们在电脑前能不断地处理复杂的数学难题。甚至不少程序员对他们是做什么的都没有清晰的概念。
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、主板、内存、硬盘驱动器、显示器和其余部分构成。计算机将我们的文明推入一个新的水平,使我们的生活更有意义并充满乐趣,还弥补了我们大脑的缺陷。很可能计算机比人类更聪明。(不过,我有点关心假如这成为现实后,计算机还需要人类程序员吗?)
现代计算机具备完全逻辑性、直接性和顺从性。假如你知道它应该做什么并且知道如何命令它,那么和计算机一起工作是快乐的。唯一的问题是,计算机只会做你告诉它去做的。因而,你应该有清晰的思路并且在见你的上司或者用户时保证计算机不出岔子。
?
小编作为一个资深前台程序员给那些想学前台或者者刚学前台的朋友们说今年年初我花了一个月整理了一份最适合2019年学习的前台学习干货,从最基础的到深入的都有整理。送给每一位想学习的小伙伴。加入学习探讨企鹅群:956766604获取
?
资料获取方式:关注小编并私信回复【教程】
在人类和计算机之间的翻译
翻译中会遇到三个主要的挑战:
1.语言歧义。人类语言是模糊、复杂并且双关的,例如:“这个程序不能提供良好的客户体验”。文化、背景和上下文语境都会对沟通和含义造成影响。与之相反,所有计算机语言都是精确、直接的,与上下文无关。
2.细节层次。人类的沟通是抽象而不带有过多细节的,例如:“我想让这该死的程序运行起来”。这样可以节省时间与精力,但因为缺少详细信息,会产生两个比较大的问题——误会和不确定性。而计算机需要所有细节——每件事都要说清楚。
3.思维模式。人类习惯于思考需求、结果与处理方案之间的关系,例如:“这份报告应该在2秒内运行,而不是2个小时”。然而,计算机需要算法——按照步骤去达到想要得到的结果。
为了写出优秀的软件,程序员们必需克服这些困难,了解人们的想法并将之转换成计算机语言。
?
一名优秀程序员所具有的能力
我们可以看到,一名优秀程序员应该具有应付两个不同世界的两套技能。
了解人类的需求并提出处理方案:
1.沟通——与人建立联络的能力,能够同他人亲密的交谈,并有勇气去尝试分享自己的观点。
2.用意——从谈话中提取有用的信息,了解并使之有意义。
3.逻辑——为不懂退让的计算机整理、剔除那些人类思想中含糊而有争议的内容。
4.创造力——挖掘、转变人类的想法,从而创立优秀的处理方案。
5.构思——利用人类友好的接口和便捷的互动性来包装编程思想。
6.大局观——清楚处理方案是如何适应全世界的客户、企业以及其余,从而使你的程序更有用。
告诉计算机该做什么,并建立处理方案:
1.逻辑(再次强调)——把程序员的想法组织整理成有凝聚力的软件思想和计算机指令
2.技术——发现并了解科技黑箱(对于99%的人来说是黑箱)。
3.编程语言——学习美观的、富有逻辑的、清晰明了的语言,从而把程序员的想法提供给电脑。
4.算法——精通让计算机完成任务最高效的方法。
5.建模——在软件代码中建立笼统和模型,从而掌握并操控想法。
6.实践(比方代码重构、单元测试、持续集成)——周期性活动,以保持系统可靠、健康与可改变。(关于代码重构,可参见伯乐在线博客《明星软件工程师的10种特质》这篇文章中的第3点。)
面向人类和面向硬件对象/系统的程序员有很大不同。
不与人沟通的程序员不是好程序员。一个优秀的处理方案需要计算机世界与人类世界的双重技能。只有连接起两个世界,才能成为一个真正的优秀程序员。
?
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 浅谈关于程序员的本质