引言
碰巧的是,最近两年来我一直在基辅一所IT学校里教授编程。 我这样做只是为了好玩。 一旦我保留了有关编程的博客,然后就放弃了。 但是,将有用的东西告诉感兴趣的人的愿望并没有消失。
我的主要语言是Java。 我在上面写了手机游戏,无线电通信软件和各种Web服务。 我专门教授Java。
在这里,我想讲述我上一组的训练故事。 他们如何从学习变成编写有效的Web服务。 查找营养补品的有用的Web服务。 免费,无需广告,注册和短信。
该服务本身在此处-E-Dobavki.com 。

该项目是教育性的,不包含任何广告。 从本出版物中可以了解到,您可以提供这些项目的链接。
在描述项目本身之前,请先介绍一下小组教学的过程,否则,图片将是不完整的。
9个月的学习
在我任教的学校中,Java课程分为两个部分。 总的来说,该课程大约需要9个月的时间,所有课程都会中断(新年假期,编写中间项目的时间)。
第一部分向学生介绍YP的基本概念。 变量,方法,OOP的基础知识以及所有这些东西。
本课程的第二部分规定,学生已经或多或少地了解了如何用Java进行编写,并且可以为他提供“成人”技术堆栈。 一切都始于SQL,然后是JDBC,Hibernate。 然后是HTTP,servlet。 进一步的春天,关于git和maven的一些知识。 然后学生编写最终项目。
所有培训均分为模块。 我每周两次上课。 一堂课的时间为两个小时。
我的学习方法
我释放了5组。 好像两年了,但是我几乎总是并行领导两个小组。
我尝试了不同的方法。
第一种选择是一对在理论演示中脱颖而出。 第二对纯练习。 这种方法以某种方式有效,但是就我而言,效率不是很好。
我已经提出并正在研究的第二种选择是不花一整对理论。 相反,我将理论的简短部分混合了5-10分钟,并立即用实际示例进行修正。 这种方法效果更好。
如果有足够的时间,我叫学生到我的地方,坐在我的笔记本电脑旁,他们自己做一些实际的例子。 它很酷,但不幸的是要花很多时间。
并非所有人都走到尽头
对我来说,发现的事实是并非整个小组都达到了终点。
根据我的观察,只有一半的学生写了最终草案。 在课程的第一部分中,大多数人被淘汰。 而那些达到第二部分的人通常不会掉下来。
出于各种原因请假。
首先是复杂性。 无论他们说什么,Java都不是最简单的语言。 要编写最简单的程序,您需要了解类,方法的概念。 并且要了解为什么需要编写公共静态void main(字符串[] arg),还需要了解其他一些概念。
将此与Turbo Pascal(始于包括我在内的许多人)进行比较:
begin writeln(" "); end.
为了解决这个问题,据我所知,学校将推出额外的测试。 现在,并不是每个人都可以学习Java。 虽然这是在概念阶段,但显然是正确的步骤。
第二个原因如下图所示:

人们通常认为编程是在打印大量文本并从中获得大量收益的时候。 作为撰稿人,只有更多的钱。
现实有些不同。 许多常规代码,非显而易见的错误,持续的学习过程。 这很有趣,但并不适合所有人。
这样的统计。 起初它让我不高兴,我以为我做错了什么。 现在,我了解到大多数课程的统计数据都差不多。 现在,我对此并不担心,但是我正在教那些感兴趣的人。
服务理念
当学生完成整个课程时,就该编写最终项目了。 有不同的想法。 提供的待办事项清单,项目管理项目等。
我想使事情简单但有用。 我的标准很简单-我和我的朋友可以使用它吗? 在这些要求下,出现了用于寻找食品添加剂的网络服务。
这个想法很简单。 在商店购买产品时,您会看到某种E-shnuyu补品。 根据法规,尚不清楚这有多危险(许多国家禁止使用危险添加剂)。
您打开站点,使用补充名称(数字,替代名称之一)进行驱动,并获得补充的摘要:

有类似的项目。 您也可以只是将添加剂驱入Google,尽管它并不总是正确显示信息。
但是由于该项目具有教育意义,因此上述困难并没有阻止我们:)
实作
每个人都用Java 编写代码,这是Github中项目的源代码 。
我们有7个人,包括我在内。 每个人都提出了请求请求,而我或小组中的另一个人接受了该请求请求。
该项目的实施大约花了一个月的时间-从表达想法到现在所见的状态。
解析添加剂
除了围绕数据库(实体,存储库等)的绑定的基本创建之外,一名学生所做的第一件事就是从现有信息站点中解析添加剂。
这是测试其余点所必需的。 不需要其他代码即可填充数据库。 通过快速添加几种添加剂,可以进一步测试UI,排序和过滤。
Spring Boot允许您创建多个配置文件。 配置文件是设置文件。
对于开发环境,我们使用了具有本地H2 DBMS和默认HTTP端口(8080)的配置文件。 因此,每次启动应用程序时,都会清除数据库。 在这种情况下,解析器就是拯救我们的东西。
搜索和过滤
重要的是搜索和过滤。 商店中的人员应迅速拨出补充代码或某些名称,然后得到结果。
因此,加法实体具有多个字段。 这是一个附加代码,替代名称,描述。 搜索会一次对所有字段进行“赞”。 如果输入[123]或[amaranth],将得到相同的结果。
我们根据规范进行了所有这些操作。 这是Spring的一部分,它允许您描述基本搜索条件(例如,按某个字段),然后组合这些条件(或或与)。
通过编写许多规格,您可以提出一些复杂的查询,例如“描述中带有[红色]字样的所有危险染料添加剂”。
在使用Spring数据库方面,在我看来非常方便。 在处理复杂查询时尤其如此。 我知道这会增加开销,并且手动编写和优化的SQL查询会更快。
但是我也认为没有必要事先优化所有内容。 第一个版本应启动,运行并允许更换单个零件。 如果负载增加了,这些是需要重写的独立部分。
安全性
一切都很简单。 有具有ADMIN角色的用户-他们可以编辑添加,删除,添加新的。
并且还有其他用户(已注册或未注册)。 他们只能查看补品列表并搜索正确的补品。
为了分隔权限,使用了Spring Security。 用户数据存储在数据库中。
用户可以注册。 现在它什么也没有。 如果学生继续开发该服务,并引入一些个性化功能,那么注册将很方便。
适应性和自举
下一点是适应性。 就我们的服务而言(至少如我们所见),大多数用户将使用手机。 从移动设备上,您需要快速查看补充内容。
为了不遭受CSS的困扰,我们采用了Bootstrap。 便宜,开朗,体面。
我称这个界面不完美。 主页甚至更少,而有关添加剂的详细说明页面也很狭窄,在手机上,您需要将其扩大。
我只能说我试图将工作降到最低。 这仍然是一个学生项目。 当然,这些家伙以后将能够纠正此类情况。
分钟SEO优化
由于两年多来我一直忙于网站和与SEO相关的所有事情,因此至少没有基本的SEO优化就无法启动项目。
实际上,我为每个补充制作了模板生成标题和描述。 该URL几乎是CNC,尽管可以将其缩短。
我还添加了考勤柜台。 在Yandex网站管理员和Google Search Console中添加了一个网站,以跟踪来自搜索引擎的警报。
这还不够。 您还需要添加robots.txt和sitemap.xml才能进行完全索引。 但这又是一个学生项目。 我将告诉他们需要做什么,如果他们愿意,他们会。
您需要附加一个SSL证书。 免费的“让我们加密”也可以做到。 我为Spring Boot做的。 这并不困难,并且PS的信任正在增加。
该项目的下一步
实际上,进一步的选择取决于这些人。 该项目的最初想法还包括带有添加剂的产品数据库。
输入“ snickers”,然后查看其中包含的营养补充剂。
即使在项目开始时,我也知道我们不会有产品:)因此,我们仅从添加剂开始。
现在您可以固定产品,并进行其他介绍。 头。 如果它是一个广泛的数据库,则会找到用户。
部署方式
该项目已部署在VPS,Aruba Cloud上。 这是我们能找到的最便宜的VPS。 在我的项目中,我已经使用该提供程序一年多了,它使我感到愉快。
VPS规格:1 GB RAM,1 CPU(我不知道频率),20 GB SSD。 对于我们的项目来说,头就足够了。
该项目将转到通常的mvn clean软件包。 事实证明fat jar是具有所有依赖项的可执行文件。
为了使所有这些自动化,我编写了一些bash脚本。
第一个脚本删除旧的jar文件,并收集一个新的jar文件。
第二个脚本运行组装好的jar,并向其传递所需的配置文件名称。 此概要文件包含数据库连接信息。
DB-同一VPS上的MySQL。
项目的总重启包括:
- 通过SSH登录到VPS
- 下载最新的git编辑
- 运行local-jar.sh
- 杀死正在运行的应用程序
- 运行launch-production.sh
此过程需要三分钟。 在我看来,对于这么小的项目,这是一个合理的选择。
难点
创建项目的主要困难是组织性质的。
有一群人似乎可以编程,但实际上不是。 他们知道一些东西,但仍然无法真正应用。 现在他们需要在一个月内完成该项目。
我着重指出了该小组中的条件小组负责人。 他领导了一个带有任务列表的Google文档,分发了任务,控制了任务的采用。 他还接受了拉取请求。
我还要求学生每天晚上写一份简短的报告,说明在该项目上所做的工作。 什么也没做-好,所以写下“什么也没做”。 这是一个很棒的练习,使您有些紧张。 不幸的是,并不是每个人都遵循这一规则。
所有这些运动的目标都很简单。 组建一个团队,尽管时间很短,但是会一起工作。
我希望这些家伙对他们工作的重要性有所了解。 了解他们不是在真空中编写球形代码。 他们将如何一起使用人们将使用的项目。
前一两个星期是积累。 实体缓慢,少量提交。 我一点一点地搅动了他们,使工作变得更加有趣。 聊天变得生动起来,学生们提供了补充。
我相信目标已经实现。 项目完成后,这些家伙在团队中获得了一些经验。 有一个可见的实际结果,可以显示给您的朋友,您可以进一步发展。
结论
学习很有趣。
每对夫妇过后,我情绪激动。 我尝试使每一对都独一无二,并传达最大的知识。
我训练的小组进入决赛很高兴。 伙计们写下“我找到了一份工作,所有的规则,谢谢”,尤其酷。 让它成为初级,即使起初不是最大的一笔钱。 但最重要的是-他们朝着自己的愿望迈出了一步,他们成功了。
尽管文章篇幅很大,但是,当然不可能揭示所有要点。 因此,在评论中写下您的问题。