weiyu504的个人博客分享 http://blog.sciencenet.cn/u/weiyu504

博文

Coder Monkey丨人人都应该有程序员思维

已有 2468 次阅读 2016-6-17 13:03 |系统分类:观点评述| 思维, 博士, 程序员

嘉宾绍】


Coder Monkey,帝都某“普通”码农。是的,他就是正宗的程序(Coder)猿(Monkey)。在上期《数说“草原天路收费”:舆情观点分析》中友情出场提供技术支持,本期特邀Monkey童鞋作为嘉宾分享程序员思维。

程序员?你是说我们应该屌丝一点吗?不不,是程序员思维!在这个互联网+时代,作为新时代的“民工”,他们的思维方式或许能激发你另外一种Aha moment。当然,如果你在追求爱慕已久的程序猿或者程序媛,此篇也是必读宝典哦,咳咳~

好啦,话筒交给本期嘉宾Coder Monkey 。

每一个人都应该或多或少的具备一点程序员思维。

程序员思维具体是什么样的呢?在这篇短文中,我将以一个程序员的虚拟任务阐释一些我认为比较重要,并且能与非计算机领域朋友们产生共鸣的内容。


工具思维


一个程序员遇到一个问题会做的第一件事是什么呢?电影或者电视里的黑客当然是拿出一台没有图形界面只有黑乎乎终端的电脑,手在键盘上不停的敲打,然后屏幕上飞过数不清的绿色信息流,然后问题就被奇迹般的解决了。

图片来源:百度图片


然而现实中的程序员往往没有这么神通广大,我们一般解决问题的三大工具套件是:谷歌,github,stackoverflow。程序员开始工作的第一步总是从谷歌获取问题的基本描述,基本逻辑和大概解决方案。

然后是github,github是一个网站,网站的logo是只章鱼猫。这只章鱼猫代表着什么呢?代表着这是一个如哪吒一般,长得很萌,却又有三头(并没有)八臂,神通广大的平台。

       

图片来源:百度图片


github是一个拥有143万开发者(过时数据,现在也许更多),其中包括如Linux发明者Torvalds这样顶级黑客的社区,目前已托管431万git项目。不了解程序员生存环境的你也许还没有理解这意味着什么。通俗的说,这意味着这个星球上最聪明、最出色的开发者都聚集于此,开发各种各样功能各异的软件程序,而且这些程序全部可以被你免!费!使!用!俗话说的好,太阳底下无新事,虽然这句话已经不再百分百的适合这个急速发展的时代了,但是我可以保证,有50%的可能,你可以直接找到你需要的软件并直接开始使用;有60%的可能,你可以找到功能相似,稍加改动就能投入使用的程序;有100%的可能,你会从接受任务之初一个茫然四顾的菜鸟变为一个信心满满,准备大刀阔斧干一场的老鸟。

事情总不会那么一帆风顺,就如世界上不会有两片完全相同的树叶一般,在实际工作中我们也极少遇到两个一模一样的任务,大部分的情况下,我们还是需要撸起袖子,自己动手去更改一些模块或者代码,使手上的程序更加适合自己。不过可能很快我们就会遇到一些莫名其妙的问题,没改动什么了不起的地方但是程序却跑不起来了,这时候我们的第三把利刃就派上了用场。stackoverflow这个网站是一个程序员的问答网站,在github里活跃的开发者们几乎也都活跃在这里,这里没有现成的工具程序,有的是各种关于程序的头疼脑热的解决方案。于是在这里,我们解决了通往目标的最后一个地堡,踏上了升职加薪,当上总经理,出任CEO,迎娶白富美,走上人生巅峰的第一步:完成了一个任务!


权衡思维


虽然俗话说得好,太阳底下无新事(尽管这句俗话刚刚也说过……),但是在这个高速发展的时代,这句话已经不是颠仆不破的真理。虽然已经有了github,但是有很大的可能,你还是需要自己动手,从头开始一砖一瓦的构建专属你自己的系统。走到这一步的理由有很多,可能是现有的系统不能满足需求;或者性能表现太差,达不到要求。然而对一个程序员来说,理由并不重要,结果才重要。

计算机的大学教育中,第一门专业课大多都是《数据结构》,自己动手撸一个系统的第一件事正是确定整个系统的数据结构。为什么是数据结构呢?因为计算机提供给程序员的资源无非就是两种:计算能力,与存储能力。而数据结构可以看做是我们的系统使用资源的蓝本,即数据结构决定了我们的系统如何使用,使用何种规模的资源。《数据结构》课本中阐述了各种数据结构,但是各种数据结构其实都是权衡计算机系统内部计算能力与存储能力使用的结构。然而在实际工作中,我们要考虑的往往不只是这些问题,设计数据结构影响到的还包括开发速度,后续可维护性,公司的计算设备,存储设备的能力。这其实是我国的一个古老问题,如何才能做到中庸。在现有的各种条件下权衡各种资源的使用,以达到最优的使用效果。

图片来源:百度图片



模块化思维


在确定了基本的数据结构后,一个程序员应该脱离草稿纸,走向键盘,正式开始编码工作了。这个阶段才是大家印象中的程序员:顶着油腻的头发,穿着看不出几天没洗的T恤短裤,整个人都呆滞不动,只有随着目光跳跃有节奏的敲打键盘的手指。

然而想做一个合格的程序员,并不是不洗头不洗衣服拼命敲键盘就能做到的,从某种角度来说,模块化才是一个合格程序员的唯一准则。

那么什么是模块化的程序,如何写出模块化的程序,而又为什么需要模块化呢?我先回答后面一个问题。模块化的原因就是……懒。对,一个合格的程序员应该是一个懒惰的程序员,他生产出的程序文件应该是一次生产,处处可用,产生”老将出马,一个顶好几个“的效果。从这个答案来反推第一个问题,什么是模块化的程序呢?当一个能覆盖尽量多的任务需求代码块应该可以称为一个好的模块化程序了。现在来到了第二个问题,如何写出模块化的程序呢?当然是充分理解问题,然后在当前领域充分抽象目标问题。

所以说一个好的程序员一定不能仅仅是一个勤奋的程序员,不能仅仅是一个日夜不停敲代码的程序员,而是一个勤于动脑,善于抽象,能够用少量工作解决大量问题的程序员。

现今,在编程领域已经产生了非常多的工具以及方法论来帮助我们做好模块化这一听起来很简单的工作。各种程序语言都内置了函数和类的功能,还有各种设计模式,架构等多种理论,都是在各种不同情境、不同规模的任务下提出的模块化方法论。

图片来源:百度图片


总结


程序员的世界很大,从软件到硬件,从算法到工具,其中优秀的思维不胜枚举。然而不管是在计算机还是非计算机领域,优秀的思维总是能够牵引我们走得更远。


【小微曰】

Monkey童鞋的分享深入浅出,尽管没有我们翘首以盼的程序员闷骚解析,但是从思维方面给了我们很大启示:

  • 工具:“ 君子性非异也,善假于物也”,善于学习和利用前人(已经存在)的经验是做学术的基本要领,作为学术菜鸟尤其如此。程序员的工具是谷歌、github和stackoverflow,我们的工具来源于文献、师长、同僚以及日常点滴的科研工作训练。系统的学术训练形成的最终工具就是一把“锤子”,一种“以不变应万变”的分析问题、解决问题的思维方式。

  • 权衡:如果你是一个旅游规划方向的博士,大约对此深有感触,规划即是在权衡各方利益之下的最优方案,因此,没有最好的方案,只有更适合的方案。同时,理论学习往往难以解决实践问题的尴尬,也无不是由于现实情况的复杂及其要素的统筹难度,往往是我们在文献中难以领会的。因此,学会权衡,我们还要更接地气。

  • 模块化:作为社科的博士,一路走来的“不怕苦不怕累”精神,让我们难以接受“懒惰”,也难以接触到模块化思维的优势。如果说,科学研究是发现事物之间的联系,那么模块化思维是帮助我们发现、总结和建构基本学术单元之间的抽象关系,进而形成理论体系的最佳方式。

好啦,感谢本期嘉宾Coder Monkey的程序员思维分享。小微的确有了Aha moment:程序员的油头满满,没准儿是他们高速运转的程序员思维的智慧之光呢(额……)





版权声明:作者Coder Monkey,首发“微雨微言”微信公共平台,转载请联系本微信号。




https://blog.sciencenet.cn/blog-3149941-985182.html


下一篇:测量烟雾的方法
收藏 IP: 218.249.50.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-10-20 01:44

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部