前端人员已经尝试从经验不足的[Ruby on Rails]开发后端的学习方法和多语言习得的建议


TL; DR

  • 做您自己的笔记并外包您的知识!

  • 学习多种语言!

简介

我是负责Livesense降临日历第19天的平野洋一郎。我们从今年10月开始加入,并且正在与职业转变会议团队一起发展。

最初我是在前端进行开发工作,但是在过去的两个半月中,我一直在进行后端开发。我能够在短时间内学到很多东西,因为我正在使用从未接触过的技术赶上从未经历过的领域的发展。

这次,我想谈谈我所实践的技术的学习方法以及"在专业领域之外获得多种语言知识的有用性"。

作者以前的技能

  • 经历了大约3年的前端开发经验
  • 使用Google Firebase进行最少的无服务器配置已经有大约一年的后端开发经验。

    • 没有关系数据库或SQL操作经验
  • 语言经验几乎是JavaScript,仅TypeScript

完成的工作(输出)和学习的知识

使用Rails

创建网页

已创建一个新页面来显示工作清单列表。尽管我有使用标记和前端JS的经验,但我还是在这里第一次使用Ruby on Rails实现了Web系统,以及诸如Ruby,Ruby on Rails 1,RSpec和MVC框架之类的技术。我学会了如何练习工作。

API创建

我创建了一个REST API端点,该端点从现有数据库中获取数据。在这里,当使用Ruby on Rails时,我学习了使用Active Record进行数据库链接。

表创建,SQL调整

通过尝试存储服务器为数据库中每个请求计算的不必要的实时数据而创建了一个新表。
从SQL知识0的状态开始,我们已经实现了一系列表操作,从创建新的DB表到指定索引和外键以及更新数据。
同时,我还具有修改联接10个以上表的SQL的经验,并进行反复试验以提高其性能。我遇到了未知的问题,例如N 1问题,分度,驱动表和内部表,这是最困难的实际价值(该区域对于团队成员的合作非常有帮助)。

每日批量创建

添加了由Argo Workflow执行的批处理,该批处理每天更新上表。
这项工作本身很容易,因为我仅将描述添加到已经在运行的Kubernetes的各种配置文件中。我完全不知道的Kubernetes是什么?我重新了解了Docker,对此我含糊其词。

学习(输入)方法

ruby

我阅读了Ruby on Rails教程,并动手完成 2。不仅包括Ruby和Rails,还包括MVC框架和测试驱动的开发,如果您具有Web开发的经验,似乎可以选择并适当阅读,但是初学者会感到消化不良。顺便说一句,似乎有一个解释性视频,但是我个人觉得文档库足够了。

另外,在学习的第一阶段,在意识到已经知道与JavaScript的对应关系的同时,以填写"如果是Ruby,请用JS编写"的形式制作"自制的Ruby备忘录"。 "。去了。就我个人而言,我认为这种方法学习起来相当快,如果您已经掌握了一种特定的语言,则可以尝试一下。但是,我不了解JS所没有的语法,因此在某种程度上输入之后,我通过参考面向对象的脚本语言的教程和Ruby参考手册来补充了我的知识。

Rails,活动记录

加载了Ruby on Rails指南。在Ruby on Rails教程中提到了Rails,但是由于它是一个教程,所以获得系统知识很有帮助。我认为暂时阅读此内容(例如Active Record和路由)是可以的。由于有一些实际代码的示例,因此我自己进行了调查和补偿。另外,内容量太大,无法阅读所有内容。

SQL,MySQL

关于

SQL,我重读了参加基础信息技术工程师考试时阅读的北见式插图IT学校基础信息工程师(链接为Reiwa 3年级)。仅解释了非常基本的操作,因此我从那里赶上了Internet上的文章。
有很多关于MySQL的日语官方文档,我在参考它们时学到的。

Docker,Kubernetes

该区域只是完成必要任务所需的最少知识输入,还有许多尚待理解的事情。
什么是Docker和Kubernetes?我通过阅读Docker和Kubernetes Software Design plus中学到了知识,可以在插图中看到它们。还对容器技术进行了仔细的说明(略有冗余)。最初,仅通过阅读博客文章,容器技术就处于"似乎被理解但未被很好理解"的级别,因此,这对于理解概念级别最有帮助。推荐您,因为您可以顺利阅读它。
另外,我将列出我所提到的文章。

  • Docker入门
  • 旨在了解Docker映像的教程
  • Kubernetes文档

获得的知识和我想要传达的

做您自己的笔记并外包您的知识!

我简要介绍了学习方法,但是当我学习新技术或新知识时,我只是留个便条。我认为这种"自制备忘录制作"是最强大的技术学习方法。毫不夸张地说,由于这个原因,我们能够在短时间内掌握我们的知识并有效地开展工作。我认为有很多人在每种方法上都做类似的事情,但是这次我想介绍一下我的方法,希望那些没有这样做的人可以尝试一下。

称为备忘录的"记忆"的实现与开发效率

直接相关

制作自己的备忘录最有力的原因是

①通过做笔记(语言化和输出)加深您的理解
②备忘录用作"第二脑" 3

来自

。我特别认为②将极大地提高工程师的工作效率。

新获取的知识在可以搜索的记事本应用程序中被逐一写下,并且当知识被累积时,该备忘录就用作参考"存储器"。它成为一种(可搜索的)"记忆",它比您自己的大脑记忆准确得多,并且易于记忆。
然后,当您稍后收到"您怎么写?"或"之前我有这样的错误"时,请首先参考您自己的备忘录。如果备忘录中包含过去的实现或绊脚石,则只需搜索您想知道的单词,然后重现当时的确切记忆和经验。

这样,您可以省去担心回忆不明确的回忆的时间,即使您忘记了它并尝试再次查找它,也可以比Google更快地查找它。你有。访问您所学和经历的内容将更快。获得有效信息(创建环境)的速度对于有效编码很重要,因此,此自制备忘录是最好的。

如何制作自己的备忘录

具体来说,我做这样的笔记:

  • 复制和粘贴教程,文档,调查的文章以及调查的错误

    • 基本语法和概念
    • 错误记录
    • 暂时记下您认为"我想再使用一次"的其他内容
  • 将您实际实现为代码段的代码粘贴在一起

    • 当我回头看时,它变成"啊,这是这次",并且记忆的速度提高了
  • 添加笔记和想法以加深您的理解
  • 我会暂时推迟外观并写下来

    • 如果您稍后搜索并自己找到,就可以了
    • 记笔记时不要太费力
  • 写下知识而不试图"记住"它

这次实际制作的备忘录示例如下。我正在使用一个名为Typora的备忘录应用程序。

  • 有关容器的注意事项
    スクリーンショット 2020-12-18 17.37.20.png

  • 关于Rails路由的注意事项
    スクリーンショット 2020-12-18 17.39.13.png

如果每次这样获得新知识时都积累和充实笔记,那么后续的开发效率将大大提高。

学习多种语言!

我要传达的信息是这次最引人注目的也是最重要的信息,"学习多种语言,因为学习成本低,您可以学到很多东西。"

语言学习成本远低于第二语言

学习Ruby之后的最大印象是"学习一种新语言非常容易"。

很自然,这是自然的,但是由于条件分支之类的基本控制结构对于所有语言都是通用的,因此,如果您已经知道一个具体的示例,"啊,就是这样写的,用JavaScript编写。像这样在Ruby中。您可以轻松理解 4。该语言在诸如DRY和YAGNI之类的方式上也很常见。我还意识到,学习包括新范式和概念而不是语言的技术更加困难。在这种情况下,它是ActiveRecord(ORM)和SQL调整。

我觉得学习一门新语言是"相当大的障碍"。我认为这与我初学编程时所花费的精力和时间相同。因此,由于业务需要,我一直坚持使用TypeScript,它已经被学习并且变得越来越流行,并且我避免学习其他语言而不吃 5。另一方面,每当我在学习会议或工作变动草稿上见到可以使用多种语言的人时,我都会害怕说``Koitsu TUEEEE ...''。

当然,在经历了这种语言之后,该语言的工作经验仍然是一种技能,但这是一个重大发现,使我印象深刻的是,能够处理多种语言的障碍并不那么高。 。

加深您对已知语言和外围技术的了解

我也觉得学习多种语言加深了我对我已经知道的编程范例和抽象的理解。

最近阅读的书籍将被出售,但人类智力的发展却是

  • 具体知识的定量扩展
  • 此类知识的抽象(概括和概念化)

它可以在两个方向上表示,

。据此,可以通过从多个具体事件中找到共同的抽象来提高智力。
スクリーンショット 2020-12-15 18.10.50.png
*资料来源:Isao Hosoya的" Concrete?Abstract"培训29个问题,可以极大地提高您的思考能力(Kindle No.388)

这也可以应用于编程语言。
编程具有通用的控制结构(条件分支,迭代操作等)和范例(面向对象,功能编程等),而语言是描述和表达它们的具体方式。有一个控制结构和范式作为一个抽象的概念,在其下面有一种语言作为一种具体的方法。

jsruby.png

例如,如果您了解" JavaScript类语句也在Ruby中,并且以这种方式编写它们",则可以看到JavaScript和Ruby共享类的概念。上面提到的低学习成本还归因于对抽象概念的一定理解以及已经知道的具体示例。

直到那时," JavaScript和Ruby都是面向对象的语言,所以这是不言而喻的",但是当我第一次学习编程语言时,它是一个具体的表达,我认为它最终是对方法的理解。 "似乎有一个类,并且此代码表示它。"至少我是。

通过学习多种语言,诸如``此描述表达了另一种语言也使用的范式''和``此描述是特定于语言的规范''之类的东西是您正在学习的语言的已知语言。能够进一步了解。您将能够看到语言表达上的差异以及范式概念上的差异,并且自然而然地加深了对您认为已经以某种方式理解的概念的理解。我个人认为,只有经过这一流程,我才能真正理解每种语言的特性,我擅长的领域以及如何使用它。我认为这不仅与语言有关,而且与技术有关。

终于

已经有很长的时间了,但是我希望它对那些想要扩展自己作为Web工程师的技能的人以及正在考虑研究Ruby和后端/基础结构技术的人有所帮助。

记下您的知识,学习多种语言,并过着更加舒适和有远见的工程师生活!

  • 最近有这样一篇文章成为热门话题,尽管现在学习Ruby引起争议,但这将是另一个机会,?

  • 这次,我阅读了v5.1中解释的第4版,该版本全部免费发行。 ?

  • 前田雄司的表达源自备忘录的神奇力量,表达了"第二脑"。 ?

  • 在这种情况下,Ruby和JS都有很多共同的范例,这也可能有助于学习变得容易。 ?

  • 当我学习TypeScript时,我以为是AltJS,所以我不认为它是一种新语言。 ?