我一直认为编程属于文科。为什么呢,你看做一个项目是不是要考虑各种东西,是不是要和各种人打交道,是不是需要不停的想还缺了哪些东西,写code是不是和写文章一样,得考虑结构,得考虑段落,得考虑名字怎么样起的更好,得考虑怎么样别人才能看的更爽,而不是别人看了以后在心里暗骂垃圾code/垃圾文章。
那么我们上学的时候做的文科题目是怎么给分的呢,按回答到的要点给分。答中一个点给一个相应的分数,没答到点不给分。那么我们做项目是不是也得考虑各个功能点,你如果少考虑了某个业务点或者考虑的不充分,是不是出来的东西就有问题,是不是就得不到分。
逻辑,逻辑当然是有的,写code需要非常好的逻辑。但是你写小说写文章就不需要逻辑吗?看看那些编剧编出来的电影电视剧,不需要逻辑吗?逻辑不好,写的东西编的东西也没人看啊,更不要说那些什么侦探悬疑了。
所以并不是有逻辑的就是理科,很多人认为理科有逻辑文科没逻辑,这是不对的。不能用有没有逻辑或者需要的逻辑的多少来判断是文科还是理科。逻辑哪里都需要的。甚至有些文科需要的逻辑还比一般理科要多,比如哲学,虽然我也不懂哲学。
那么我这里给理科下一个我认为比较准确的定义了,理科就是用数学表达逻辑较多的学科,而文科就是用文字表达逻辑较多的学科。那么如果用这个定义编程妥妥的文科无疑。
编程是混沌的,它的点都是分散的,并没有一根很强的主线,所以它特别需要发散性思维,这就是文科的特征。
很多人以为编程就是数学,数学好的可以编程。我觉得这个观点可能三五十年前是正确的,如果是三五十年前,那时候计算机就是用来做数学运算的,但现在底层已经非常成熟了,所以大多数人现在招进来编程的绝大多数都是做的业务逻辑开发,鲜有算法,数学,更多的是发散思维,从总到分再到总的思维能力,系统设计的能力,这些和数学基本没关系。
即便是做底层,就像我之前给同学们share的我做底层的经历一样,也都是follow已经非常成熟的spec,使用现有的库,也没有什么数学的东西需要你去证明发现了。
所以除非去做研究,编程这个活动其实更需要的是文科的能力。
那么这就造成了相当一部分同学的期待和现实的落差。我们同学们满怀期待的能搞一些有主线的非常有逻辑步骤的外延很小的和数学沾边的东西,然后进来以后发现是写各种业务逻辑,而且这种业务逻辑的边界和变化的范围十分的宽广。那么可能就会和他们期望的不符,就有可能会不适应了。我认为最为不适应的还是编程需要的发散思维程度很高,而理科就像是捋线,线可能很长,但没那么多的发散。
我们很多同学都是数学做的很溜然后选择了理科,然后进入了这个行业。但是反过来想,同学们为什么要预设编程这个东西就是非常有条理非常有顺序的一个东西呢?而且为什么一定要预设自己就是要做这样有条理的东西呢。
抽象的东西都是人类发明出来的,都是前人已经帮你组织好的,现实世界其实并没有很多有条理的东西。我反而认为一种固定的技术最终会沉淀到底层,底层的东西其实没有多少变化的空间了,会死板机械,而只有直接与人接触的最上层的东西,才会有源源不断的新的东西和新的变化出来,才会有更大的价值。
刷题做题只不过是把已经学到的pattern应用到题目上而已,但业务层面的东西需要的逻辑时刻在变化,时刻在冒出新的东西,这些东西没有现成的pattern可用的,你解决的每一个东西都是全新的东西,实实在在的可以看到别人怎么用的,可以看到impact,所以我觉得价值其实更大。相对而言会做很难的题目,对人类又有什么价值呢。关键在于创造,而不是重复,即便这个重复很难。
另外,编程这个活动是需要很多人一起弄的,里面沟通占了大于50%,但某些理科比如数学是可以一个人默默的干的,那么有些人以为进入编程这个行业,就可以摆脱与人打交道,那么这又是一个不好的理解。所以在码农行业太沉默的性格的话是没有好处的。
我觉得最后每个人都要找到自己的定位和自己想做的事,如果一开始理解错了然后发现不适合这个行业,那么早点退出也是个比较好的选择吧。