写点什么

程序员是如何解决问题的

用户头像
ES_her0
关注
发布于: 2021 年 03 月 07 日

最近有些朋友跟我说,我之前也是做程序员的,但后来发现自己实在写不了代码,就转行了。其实这个事普通存在于大多数地方,干不下去的理由就是实在搞不懂,甚至“上天不赏饭吃”,说人话就是没天分。我认为 99%的情况是在为懒找借口。这世界上你几乎可以胜任 90%的工作,剩下 9%属于像美国总统之类的跨越太多阶级,八杆子打不着的事。还有 1%是梅西,爱因斯坦这样的天才型选手,只能称赞他们天赋异禀。同时,你在胜任这些事的时候,最难的部分永远不是事情本身,而是与人打交道那部分。有些事情就是与人打交道,有些事比如写代码,可能与人交流这部分占比已经相当之少了,还不简单吗?

谁比谁难

类似的事情其实很多,与机器打交道,与自然打交道的工作太多了。这些事情有些人统称为科技,有着浩如烟海的资料文档供你学习参考,甚至每一步操作都有详细的步骤。有些朋友可能因为比较懒,懒的去查阅这些资料,懒的学习,最终跟别人说自己天生吃不了这行饭。可能至少与人打交道更符合直觉,不用动脑子?其实不然,任何一件事不动脑子,永远只能在最底层混吃等死,反而与人共事这部分需要查阅更多的人文名著,而且在一个圈子里摸爬滚打很多年,而且必须说话做事足够睿智,才能有所成就,相比科技这一套东西难太多了。

思维模式

说了半天,程序员到底是如何解决问题的呢?如果一个问题给一个完全没有基础的人去解决,他该怎么解决?回想一下,作为程序员的我,写的每一行代码都建立在前人的基础上。我可以很轻松的命名一个变量并且给它赋值,我写的这一行代码完全不用管机器是如何接受这行文字并且是如何运行的。给一个零基础的人,直接跟他说命名一个变量,他可能不知所措,但你告诉他就这么一行文字:

String str = "string";
复制代码

第一个词代表类型,第二个词代表名称,第三个符号代表赋值操作,第四个词代表具体的值。任何一个智商正常的人都能懂。进而是类型系统,关键词,擦作符之类的进阶内容。这里用到的方法就是问题分解。


然后,当我们在写这一行代码的时候,我们根本不会考虑机器要怎么运行,我们经验丰富,我们知道这一行在干嘛,以及怎么跟其他代码配合。这里用到的就是记忆和经验。每天都写,形成肌肉记忆,闭着眼都能写出来。得益于人脑和肌肉的完美配合,这件事变得如此简单。


有人要说了,这么简单的例子当然简单了,复杂的怎么不说。确实,代码是复杂的,复杂的原因并不是因为有多难,而是遍地的抽象和包装。为了让一些组件看起来优雅,用起来简单,软件开发者们做了非常多抽象和封装的操作,甚至创造一些虚拟的概念来说明自己的系统。再回想一下,你的代码生涯遇到的难以解决的问题,有多少是需要一个复杂精妙的算法?大多数时候是一个配置,一行代码。你难以解决是因为你没有这方面的经验,不知道原来这个配置是做这个事的。如果你还是难以理解这个配置,可以尝试着分解这个问题,看自己跟这个问题还差几层经验。

自信心

这个点也十分重要,但说起来却很简单。很多时候不是问题多艰难,而是你在劝自己放弃,因为主观上你觉得它太难了,自己搞不定。自信心的建立不是别人告诉你,你要自信你就可以的。这能这样的话,心理医生都该下岗了。这个虽然很重要,但确实太主观,太看个人了。其实生活中也没那么多懦夫,也没那么多勇士,大多数人还是介于两者之间,是个没那么勇敢也不是胆怯的人。但信心的增强肯定是越多越好,拿我个人的经历举例子。


我曾经自觉是个小开发,感觉组内的同事都是精英,第一次提交 CR 的时候,甚至都十分紧张。后来今年领导给了我一个业务方向,让我负责开发协调的所有工作。从一个开会都不说话的人,到现在无论是产品经理还是移动端的同事都来找我商量解决方案。之前不说话确实是因为不够自信,怕说错出丑,现在即使出丑我也要说。这样的一个转变过程,首先需要踏出第一步,比如在会上对一个问题表达看法;然后多思考事情与事情之间的关联,把自己的事与关联的事的逻辑想清楚,尝试着对于一个问题给出自己的解决方案。慢慢就不一样了,人类心理转变的过程就是这样,不能一蹴而就,需要不断地给自己心理暗示,完成转变需要一个过程。


所以你要做程序员吗?程序员解决问题的思路跟别的行业没什么大区别,可能最终决定能不能走上这个行业还是看自己的喜好吧,而不是很多人纠结的能力问题。如果你恰好也没什么特别的喜好,也不排斥代码,为什么不来试试,反正相比别的行业工资也还挺高的。

用户头像

ES_her0

关注

还未添加个人签名 2018.03.21 加入

还未添加个人简介

评论

发布
暂无评论
程序员是如何解决问题的