对软件的看法

月的时间内便做完了我的第一个项目。

毕业后,我找到了程序开发的工作,是云计算后端存储相关的职位。在此期间,经过半年的学习,让我对程序在工程上的开发认识大为提升。接触了很多程序开发的工程开发思想:敏捷开发、精益思想、领域驱动开发等。这个阶段,是进步最快的时候,期间也学习了大量的云计算和编程语言的知识。当时的兴趣全部在应用层,对于底层的东西,涉猎不多。那时也在常常思想软件工作者,应该把什么当做立身之本,到底应该学习上层还是底层的知识?

随着工作经验的累积,慢慢的对于程序有了自己的理解,对工程师职位也有了理解。我们应该尽可能多的了解底层和设计的知识,学好这两类知识,两个相互配合才能称得上是一个优秀的程序员。底层知识,是纯粹的理论,我们看不到触手可及的设计和抽象实例,只专注于此,会降低自己对于抽象的理解能力,缺少架构的能力。但是如果一味的专注于架构,而对底层的知识不够了解,可以做架构师,但是做不到一个技术专家。我们的理想人物设定,是一个底层知识丰富的架构师。

最不该追的便是热点,热点背后的技术其实无非是底层知识的封装,万变不离其宗。我们可以选择领域内几个优秀的开源项目深度学习,而不是去追求热点,浪费了精力,最后一切都流于表面,没有一样东西是学透了的。所谓全栈,并不是要你学会了所有前后端的工具,这是低级的目标。很多软件工作者,总是摸不清自己应该学习什么,拿着一个东西就学习起来,看起来学习了很多,但是有什么用呢?工具的熟练使用,并不是吹嘘的资本。

软件的底层知识包括哪些?无非就是语言的底层机制,汇编,基本算法,编译原理,linux系统知识。枯燥的知识,也是最有价值的东西。虽然很枯燥,但我们可以选择学习的顺序,优先挑选与我们当前本职工作相关度最高的底层知识学习。学习了这些最本质的东西,是自我保值的最好手段。无论在公司内部还是去面试其他公司,都是不错的资本。

软件的上层知识有哪些是值得学习的?应该是解决复杂工程问题的软件思想。架构设计、设计模式、领域驱动设计等,这是拉开普通程序员和高级程序员差距的法宝。千万记住,上层知识的重点绝不是工具的使用!

每个程序员都应该静下心来苦练这两门技术,无它了。