使用 Spring Boot 开发系统之前言

一个偶然的机会使得朋友需要我帮忙编写一个企业应用。这个工作是免费的,因此进度方面并不紧张,于是我也就有了借编写这个应用实践一下企业开发方面新技术的机会,且写且学。

因为这是一个小应用,而且所有工作都是我一人来做,所有必须选择简单、易用、快速的技术,好在如今这样的技术可选择的非常多。最终我选择了 Spring Boot、AngularJS 和 Bootstrap 这三个技术。

写在正题之前

先扯一些和标题关系不大的东西。在写如何用这些技术开发一个企业应用之前,我想谈谈我在软件工程师技术学习和发展方面的心得。刚参加工作的时候,我如同很多工作在外包行业的码农小朋友们一样,学习的中心是在 Struts、Spring 和 Hibernate 这三个框架之上的,而编写代码和 Java 的基本功则是半瓶水(甚至还不到)。其实这样很正常,因为 SSH 这三个框架是在日常工作中天天要用到的,所以学习这些框架的时候对于我有即时的意义。但是经过几年工作之后,我逐渐感受到对于一个程序员来说,其实内功才是最重要的。之前因为经验浅,感受不到这一点,甚至以为能熟练使用 SSH 就是一个不错的程序员了。那对于程序员来说,内功都有哪些呢?这里就只说技术方面的了,交流、时间管理方面的就不在本文范围了。

内功都包括哪些

这个话题很大,说一下我能想到的:

  1. 你主要使用的编程语言原理
    现在编程语言帮你做了很多底层的事情,但这不代表你不需要了解这些底层的、原理性的知识。对于我主要使用的 Java 而言,Java 虚拟机、垃圾回收、内存模型都是你需要了解的知识。有时甚至需要精通,比如你需要对垃圾回收进行设置的时候。

  2. 代码重构和设计模式的知识

  3. 精通某种编程语言不代表你能写出好程序。精通某种语言可能只意味着你能写出对机器最为友好的语言,但其可读性如何就另当别论了。代码的可读性和可维护性与开发维护成本是息息相关的。需求是不断变化的,所以好的代码也是需要不断变化,所以不懂得代码重构的知识和技巧,你就不可能在不断变化的需求的影响下写出漂亮的代码。

  4. 设计模式对于好代码的重要性不言而喻,但是切记不要为了设计而设计。简洁的代码往往就是美丽的代码,过度设计会与此背道而驰。

  5. 常用数据结构及其实现方式
    不为别的,就为了面试的时候能顺利过关也要做到这一点。对于用 Java 的朋友,JDK 中 java.util 包中的数据结构应当耳熟能详。什么 ArrayList、HashMap 中主要操作的源代码应当都看一遍,调用流程在大脑中应当有个完整的印象。对于常用操作的边界条件也应当了解。

  6. 阅读你所常用类库框架的源代码
    比如像 JDK 的源代码、Spring 的源代码等等(当然也包括其它语言的,如果你经常使用它们)你都应当有意识地了解它们主要部分的源代码。要想写出好代码,首先要知道什么时候好代码。

  7. 多线程技术
    做服务器端开发的同学,并发编程是必须掌握的一个重要的知识点。即便是像 Java 这样,在并发方面提供了非常多工具的语言,你也是要深入掌握并发方面的知识。

  8. 算法技术
    并不是让大家背算法,而是要让大家培养解决问题的思维习惯,而算法就是最好的锻炼方式之一

  9. 面向对象的思想

  10. 架构模式
    设计模式只是关于方法一级和类一级的设计的范式,经验的总结。而要设计一个应用程序,仅仅是方法和类级别的好的设计是不够的,你还需要更高级别的设计思想来武装你的应用设计,例如状态机、事件驱动、DDD 等等的。当然我这方面的只是也十分有限,也还需要继续学习。

  11. 协议
    TCP、HTTP 协议几乎是每个做服务器端开发的朋友必须掌握的。TCP 并不需要精通,但是你知道的越多,你往往就能更深入的认识和解决工作中的遇到的问题。对于做电信方面的同学来说,SIP 等协议必须要了解,甚至精通的了。

新技术的学习

软件生产力的不断提高,得益于新技术的不断涌现。作为软件开发人员,不断的学习新技术是自身能力提高的重要途径。虽然你最终所能达到的高度往往是由你的内功的水平决定的,但是这并不意味你不用学习新技术。就好比是一个士兵,不论你的身体素质、射击技术、格斗技术、作战经验这些内功多么好,如果你不能熟练操作现代化的武器,你还是不能成为一名好士兵。

如今软件开发领域新技术层出不穷,前端技术、大数据、NoSQL、云计算、新的编程语言和已有语言的更新、新的开发框架、移动开发,这其中任何一个领域都有大量的新技术,让人目不暇接。学习所有这些显然是不可能的,也没有必要。对于选择哪些新技术进行学习,一个原则就是根据你现有的工作内容和今后的发展方向来进行选择。

你首先要对你所做的项目有批判性的思考,绝对不能有这样的思想:“以前是这样做的,所以我这么做也是对的”。你要时不时的思考现有的设计和使用的技术是否存在问题,这些问题对当前项目的影响的程度如何。如果有新技术能改善现有的设计、提高生产力,那这个新技术便是值得学习的。即便是你现有的项目不能轻易地应用新的对生产力有明显提高的技术,通常是一些大型的、大量采用旧技术的项目,采用新技术有时会牵一发而动全身。领导往往会出于风险的考虑,不会轻易采用新的技术。但在这个时候,作为开发人员的你,还是有必要去学习一些会对项目有明显帮助的新技术。因为只有当证据确凿时,领导才有可能决定在项目中使用这些新技术。

选择技术通常是根据这样的路径:这个技术是什么 -> 它有什么优点 -> 它的优点会给我的工作带来什么帮助 -> 它有什么缺点 -> 要使用这个技术的项目是否能接受这些缺点。

开发这个系统的原因

就像我之前说的,当新的技术能明显提高现有项目的开发效率,但短时间内这些新技术并不能应用在项目之中时,你仍然应该去学习这些。一方面,当你掌握了这些新技术的时候,当你目前工作的项目决定应用这些新技术的时候,你在工作中便有了更多的发言权,你的地位自然也会有提升。或者你的能力可以应用在未来的项目中。

对技术的掌握,最好的方式就是在一个实际的项目中使用这些技术。实践出真知。这便是我帮朋友免费开发一个系统的原因。

除了之前提到的技术外,Gradle、Spock 也都会尝试使用。这个项目像是一个试验场,让我有机会通过一个实际的项目学习这些新技术。

对于一个喜欢编程的人来说,使用新技术总是会让人激动的。但是,在快乐地学习新技术的同时,你也要时不时地想想,自己的内功还是有很多欠缺的。

你可能感兴趣的:(使用 Spring Boot 开发系统之前言)