编程本身其实并不难,学会一门编程语言,了解数据类型、条件控制语句、循环控制语句、函数、逻辑运算、数学运算基本上就学会了编程语言了,如果面向对象语言比如C++、Rust、Java、C#等,关于类、继承等一些概念学起来复杂一些,其实如果只是为了完成特定的小任务,并不是很难。任何事情想做大,都不是单纯的某一个技术能解决的问题,编程也一样,因为涉及的东西比较多。
一、业务表达
如何用计算的语言把业务问题表达出来,然后让计算机去完成特定的任务,这就涉及到数据结构、算法问题。再往大了说,一个信息化系统,就需要有数据存储、业务逻辑、用户界面等一系列的业务问题要解决,甚至美观程度、用户体验,如何很好地用计算解决业务问题其最难的一点。所以,产品经理就诞生了,软件产品需求的分析与设计本身就是一门学问。
二、抽象
软件,之所以称其是“软”的,就是因为它太难以拿捏,看得见却摸不着,又变化万千,一千个人做同一个软件,以做出一万种结果。原因就是软件太抽象,在前期纯靠想象,即使用文档描述出来,说的跟听的可能根本不是一个东西,需要不断地核对。所以“敏捷软件”应运而生就是要解决软件变化快的问题,一方面是因为业务变化快,另一方面是在开发过程中每进行一步与原来的想象都不一样,要及时调整,拥抱变化。
三、技术多,变化快
每一个需求的实现方式都有很多种,比如操作系统就有Windows、Linux、Unix、MacOS、Android、Harmoney等,在做软件之前要先选择基于什么平台,虽然有很多东西是跨平台的,但体验上还是有很大差异。
然后,你的GUI是打算用原生应用的C/S架构,还是想用基于浏览器的B/S架构?开发语言想用C/C++、Rust、C#、Java、Python、Node.js、PHP等,接下来数据的存储打算SQL的还是NoSQL的,SQL的是打算用MySQL、Oracle、SQL Server、PostgreSQL?这还是大类的,小的各种技术框架更是层出不穷日新月异,刚学会了Perl,Python又出来了,看到还有Ruby也不错,还没用两年,发现没人用了;Hadoop刚火一阵儿,还没学明白,又出来个TiDB;听说jQuery很火,学会了感觉真棒,React又来了,刚学会又有人说React这缺陷那问题,又听说还有Vue、Angular?
编程是非常考验一个人的学习能力的。
四、系统性强
编程不光是写代码本身,代码工具、操作系统、数据库、网络、软件库等各种各样的相关环境,一旦出了问题如果不是对所有细节都很了解,解决起来非常困难,甚至说根本解决不了。比如装软件多了发现环境变量互相有冲突;用的软件库多了,发现软件库版本有冲突(如A引用了B 1.0版本, C引用了B 2.1版本,这是我们引用了A和C,这时头可就大了去了);再加上嵌入式相关的,有时问题不知道出在硬件还是软件,尤其是稳定性的问题,没有对整个系统的深入理解,光靠网上搜各种解决方案基本不太可能。
所以编程要做好不光要有深度,还要有相当的宽度,而且在每个维度上都很深才能真正地把软件做好。