前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >当我们谈论程序员时在谈论什么?

当我们谈论程序员时在谈论什么?

作者头像
BestSDK
发布2018-02-26 18:13:51
6520
发布2018-02-26 18:13:51
举报
文章被收录于专栏:BestSDKBestSDKBestSDK

我们每个人都知道程序员的工作是写代码,那究竟什么是写代码?

如果非要对给程序员的工作做一个比喻的话,在社会上最接近程序员工作的是翻译,只是平日的翻译是针对人和人,而程序员针对的是人和机器。浓缩成一句话形容程序员的工作的话,那就是:把人类的需求告知机器。

当我们用电脑用手机在玩游戏或者上网时,做的其实都是对计算机程序的交互。一个例子能讲清楚很多事情。我们定义此时此刻正在阅读这行字的人—你,为『加法』,意思是我们强迫你大脑放空,除了加法不要(也不能)去思考任何其他的内容,你的工作只有在遇到两个数字的时候,给我们一个运算结果。也就是说,当你看到1和2在你身边出现的时候,你的工作就是说出来等于3,那么此时此刻恭喜你,你成为了表达式(expression)世界中的一员。

为了方便去描述上面的事情,我们约定成俗把你写作『+』,也就是上面的过程简单的表达为:1 + 2 。

但这个过程过于缺乏娱乐性,我们再找到三个小伙伴一起玩一个游戏。游戏的规则是,某个旁观者给你一个数字,当遇到数字5的时候就有人站出来喊『是的(true)』,其他所有的数字都喊『错误(false)』。

现在我们要重新安排任务了,显然在这个模型内并不需要做加法。值得注意的是,在任务设计的时候,尽可能减少每个人所做的工作,一是为了减轻压力,减少出错的可能性,二是为了下次游戏的时候每个人依然可以使用自己的身份。其中我们称你为『判断者』,代号是『==』(两个等于号),另外三个小伙伴分别为『正确者』称为『true』;『错误者』称为『false』;『提醒者』要出现两次,一次为『if』,一次为『else』。

下面游戏开始,第一次我给出的数字是1。首先『判断者』判断这个数字不是5,所以走到『提醒者』的身边告诉他得到的数字不是5,之后『提醒者』回忆规则里面说道,如果不是5的话就要喊『错误(false)』,于是他走到了『错误者』的身边戳了一下,『错误者』只能怨念的喊出『false』。

这个过程如果简化的话,可以写成下面的样子:

if( 1 == 5) true; else false;

我们用括号确定优先级关系,和数学里学到的一样。而分号作为了一个分隔符,只是为了区分前后关系。

一个计算机语言,就是找了成千上万个小伙伴,把他们抽象成了某种特殊的功能,去做上面的游戏。而程序员,就是要设计这个游戏,让其满足人类的某种特殊目的。

世界上有多少种计算机语言?为什么有这么多种?

没有人清楚世界上有多少种语言,因为创建一门计算机语言其实并不太复杂,有的计算机语言可能只是沉睡在某个实验室的硬盘里,有些计算机语言可能只是写在书里。但可以讲一个故事解释为什么有这么多种。

假设我们出生在一个剑与魔法的世界,而你是命中注定拯救世界的英雄。我们先设定你的职业为一个魔法师。当你18岁那年,你的老师告诉你这个世界即将遁入黑暗,唯有你能拯救一切,然后让你选择一个以后发展的方向。因为年少时你就喜欢玩火,所以决定做一个火系魔法师。在苦练数载完成学习后你踏出人生旅程,你在『码农去死村庄』门口遇到了一只树妖,打了一个响指就直接烧死了它,再往前走了几部发现村子门口蹲着一只『水箭龟』,卒。

显然火系的魔法师在水的面前完全没有施展空间。就像树妖见到火系法师一样怂。

计算机语言也是如此。不同语言各司其职。

像PHP用来写网页,Objective-C用来做iOS app,Perl做文本处理,C语言做底层开发,Haskell用来装逼,Prolog为了检测智商。但事情并不绝对,因为库和框架的存在使得很多语言能做的事情要宽广的多,我们之后要介绍的Javascript就是如此。那库和框架是什么?你可以理解为是一门语言的装备,就像火法师拿了霜之哀伤一样是强者。

但不要失落,觉得一辈子也就学一门语言。编程语言的共通性比想象中强的多,当你真的把一门语言入门以后,就能感觉其实像不同地方的汉语方言一般,并没有太难懂。哪怕不会说,但或多或少也能听懂或者看懂,再学一门语言的难度远远小于用了20年汉语后去学克林贡语。

我们笼统的也会因为使用习惯问题,把一些语言去做分类,经常见到的一个名称是『面对对象编程(Object-oriented programming,缩写:OOP)』,也是现在程序设计领域的主导思想之一。

要理解面对对象很容易,我们先声明一个类(Class)叫做『人』,并且将其记住。每个人具体包含的有:『身高』,『体重』,『长相』,『收入』。我们之后每次形容一个人的时候,都可以套用这个类。

例如,我们形容程序员,这里我们把程序员称为『对象(Object)』,在这个系统下,每个『对象』都是『类』的实例。程序员被定义为:『身高』=『矮』,『体重』=『胖』,『长相』=『丑』,『收入』=『低』。农民工可以被定义为:『身高』=『高』,『体重』=『正好』,『长相』=『丑』,『收入』=『高』。之后每次我们提到程序员或者农民工,脑海中就会自然而然的浮现上面那些内容。

这种方法相比较其他的编程哲学来说好处非常明显,主要提升了程序的复用性和可扩展性,并且更容易维护。像在上面对程序员和农民工的定义里,不用每次都重复考虑一个人需要包含什么,同样当你要对人的描述增加时,只用在定义『人』这个类的地方修改就可以。

编程难在什么地方?面对众多的路口,我们该如何抉择

编程是一个考验人生观和价值观的事情。作为一个程序员有几点非常重要的品格:

自学能力。程序员要面临的是一个更新换代远远快于其他行业的学科,甚至快到如果在学校内学习计算机毕业之后可能发现学校里的东西已经落伍。所以要抱着一颗开放的心态去随时接受各种新鲜事物。

激情。程序员的工作和这个社会绝大部分工作一样枯燥,但当你真的喜欢了一个创造事物的过程以后,这种看似乏味的工作也能演化出一些欲罢不能的激情。

实用主义。程序员是工程师。要面对的事情是把东西做完做好,而不是给出一个模棱两可的答案,这就要保证每个写程序的人必须头脑清晰的认知到自己所做的事情和将要发生的事情究竟是什么。如何做好,才是真的重要的。

当你真的满足这些条件的时候就能觉得渐渐已经上道,但你距离一个优秀的程序员差距还有很大,例如脑子是不是够清晰,例如是不是真的耐得住寂寞,例如英语是不是够好,例如颈椎是不是受得了。

曾经虎扑上讨论过关于天赋和努力的问题,结果是很残酷的,多数人都认为在球员的世界里天赋决定上限,勤奋决定下限。程序员的世界也是如此,当真的往顶级程序员努力的时候,可能『脑子笨』就是天花板。但幸运的是对于正常程序员的工作范围来说,一辈子都碰不到那天。

最后引用《疯狂的程序员》里的一句话:程序员是值得尊敬的。 程序员的双手是魔术师的双手。 他们把枯燥无味的代码变成了丰富多彩的软件。

文字:王亚晖 插图:郦橙

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BestSDK 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档