-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #505 from BlazingRockStorm/2024-06-11-0064-why-i-u…
…se-ruby-to-teach-programming 自分の経験からRubyでプログラミングを教えた
- Loading branch information
Showing
1 changed file
with
257 additions
and
0 deletions.
There are no files selected for viewing
257 changes: 257 additions & 0 deletions
257
articles/0064/_posts/2024-06-11-0064-ChoosingRubyToTeachProgramming.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,257 @@ | ||
--- | ||
layout: post | ||
title: Rubyでプログラミングを教えた経験談 | ||
short_title: My Experience on Teaching Programming with Ruby | ||
tags: 0064 | ||
post_author: ホアンクアン | ||
created_on: 2024 年 6 月 11 日 | ||
--- | ||
|
||
{% include base.html %} | ||
|
||
# 日本語バージョン: | ||
|
||
## はじめに | ||
|
||
IT業界全般、特にプログラミングは、人材育成は大事なことです。ですが、新しいメンバーをトレーニングするとき、メンターとしてエンジニアは、様々なチャレンジに会います。この投稿は、私の経験や、なぜRubyを選んでプログラミングを教えているかの理由です。よろしくお願いします。 | ||
|
||
## 自己紹介 | ||
|
||
初めまして。 | ||
|
||
ベトナムのハノイ出身のホアン・クアンです。4年間日本で働いています。今はリードエンジニアとして東京のITスタートアップで働いています。Agile/Scrum、AWSとRubyが好きです。 | ||
|
||
社会人になって最初の1年半、Rubyプログラマーでした。その後、システムエンジニアとして仕事しています。仕事ではあまりRubyを使っていませんが、自分でRubyを勉強し続けています。 | ||
|
||
よろしくお願いします。 | ||
|
||
## 状況 | ||
|
||
会社設立当初、CEOが知り合いをインターンやバイトとして雇いたいということで、リードエンジニアである私は彼らの育成も任されました。CEOの知り合いは、6人の若いベトナム人留学生でした。彼らは、卒業後、IT関連の仕事に就きたいと望んでいました。そのため私は自分のスキルと経験を彼らに伝えたいと思いました。しかし、... | ||
|
||
### チャレンジ#1 | ||
|
||
私のケースは、これらの問題に合いました: | ||
1. 留学生たちは日本語学校やIT専門学校に通っていましたがプログラミングはほとんど勉強していませんでした。 | ||
1. IT関連の仕事をやりたいですが、彼らは具体的に何をするが分からなかったです。 | ||
1. 最近、私のベトナムコミュニティーに、「プログラミングしなくてもITの仕事に就ける」というコースもあります。というのは、ベトナムのアウトソース会社は、3ヶ月から6ヵ月ぐらい、ITを知らない人にブリッジSEになるためことを教えるコースがあります。そうしたコースで教えるのはビジネスアナリストの知識だけですから、プログラミングは全然やりません。すなわち、留学生たちにとっては、「簡単な道」です。 | ||
1. 英語が分からなくて、日本語能力もまだ強くなかったです。 | ||
1. 問題があったら、資料や本を読まずに、ネットで検索せずに、すぐに聞きます。 | ||
1. 育成期間は3ヶ月だけでした。 | ||
1. プログラミング言語が多いです。 | ||
1. シラバスがまだなかったです。 | ||
|
||
上記のことから、解決ために、適切なプログラミング言語を選択し、それを使用して週ごとにシラバスを作成し、他のソリューションと組み合わせる必要がありました。 | ||
|
||
### チャレンジ#1の解決 | ||
私の対策方法は: | ||
- 1、6、7の問題は、シンタックスが理解しやすく、早く勉強できるプログラミング言語を選びました。 | ||
- 2の問題は、彼たちへオリエンテーションを企画しました。 | ||
- 3の問題は、選んだプログラミング言語とオリエンテーションでした。プログラミング言語ソリューションに関しては、他の短期コースと競合するのに十分な速さで学習できる言語を選択する必要がありました。 | ||
- 4、5の問題は、彼たちに[「Read - Search - Ask」](https://www.freecodecamp.org/news/read-search-dont-be-afraid-to-ask-743a23c411b4/)を教え、参考資料をちゃんと準備しました。 | ||
- 8の問題は、週ごとにシラバスを作成するしかありませんでした。 | ||
|
||
この投稿に限り、**「シンタックスが理解しやすく、早く勉強できるプログラミング言語を選ぶ」**方法をもっと続けたいです。Ruby、PythonやTypescriptは、学習が簡単ですぐに習得できるというこの要件を満たしています。 | ||
|
||
このとき、Pythonを選びました。理由は: | ||
- Rubyのシンタックスに似ています。 | ||
- AWSに働くとき、Lambda、Glue ETLのようなサービスに、Pythonを使うことがたくさんです。ですから、私も経験もあります。 | ||
- CEOの意見でしたから🙁 | ||
|
||
### チャレンジ#2:なぜPythonからRubyに変わりましたか? | ||
|
||
プログラミング言語を選らびましたが、新しい問題が発生しました: | ||
- 留学生たちのコードは、Pythonのインデントに関するバグが多かったです。 | ||
- オブジェクト指向(OOP)に、Pythonのアクセス修飾子はわかりにくかったです。 | ||
|
||
Pythonのアクセス修飾子 | ||
```python | ||
class Example: | ||
# public場合は、アンダースコアがないです | ||
def public_method: | ||
pass | ||
|
||
# protected場合は、アンダースコアが1つあります | ||
def _protected_method: | ||
pass | ||
|
||
# protected場合は、アンダースコアが2つあります | ||
def __private_method: | ||
pass | ||
``` | ||
留学生たちに「このアンダースコアの意味はなんですか」を聞いたら、全然分からなかったです。 | ||
|
||
このとき、本当のOOP言語を選びました。OOPといえば、多分Javaですが、すぐに習得できないです。彼たちは日本語学校や専門学校の学生で、ITを勉強している大学3年生ではなかったです。ですから、Rubyを選びました。 | ||
|
||
Rubyのアクセス修飾子 | ||
```ruby | ||
class Example | ||
# public場合は、指定されていないかpublicキーワードです。 | ||
def public_method | ||
end | ||
|
||
public | ||
def public_method2 | ||
end | ||
|
||
# protected場合は、protectedキーワードです。 | ||
protected | ||
|
||
def protected_method | ||
end | ||
|
||
# private場合は、privateキーワードです。 | ||
private | ||
|
||
def private_method | ||
end | ||
end | ||
``` | ||
### 結果 | ||
|
||
PythonからRubyに変えたあと、留学生たちは: | ||
- 1日後、すぐにRubyのコードを書けました。 | ||
- コードの書き方が厳格になり、より慎重になっていました。 | ||
- 学生たちはOOPの基本概念をよく理解していました。 | ||
- 論理的思考が向上しました。なぜならOOPはプログラミングをする時の考え方によい方向性をしています。 | ||
|
||
その後、Rubyのコアを分かったら、Ruby on Railsを勉強して、興味のあるプロジェクトを作りました。でも、結局、3人はプログラミングなしでIT仕事をしたかったため、大きなベトナムアウトソース会社に入りました。1人は、日本語学校に戻って勉強を続けました。2人だけプログラミング続けています。 | ||
|
||
ちょっと寂しかったです。 | ||
|
||
## おわりに | ||
|
||
私にとって、Rubyは教育するのにいいプログラミング言語です。Rubyプログラマーコミュニティをもっとサポートできたらいいのにと思います。 | ||
|
||
自己理由なので、Rubyを教えることを中止ました。Slideshareに教えるためのスライドをアップロードしました。英語バージョンの最後にリンクを貼っていただきます。 | ||
|
||
最後までお読みいただき、ありがとうございます。 | ||
|
||
------ | ||
|
||
# English version: | ||
|
||
## Intro | ||
|
||
In the IT industry in general and programming particularly, training new members is very important. However, when training them, there are a lot of challenges that the mentor engineer has to solve. The article is my experience and the reason why I choose Ruby as the way to teach programming and the results. | ||
|
||
## Self Introduction | ||
|
||
Hello, my name is Hoang Quan. I'm from Hanoi, Vietnam. I'm working in Japan for 4 years. At the moment, I'm the Lead Engineer of a start up in Tokyo. I love Agile/Scrum, AWS and Ruby. | ||
|
||
At the first 1,5 years of my career, I worked as a Ruby developer. Then, after becoming a system engineer, although I rarely use Ruby in work, I continue to learn Ruby myself. | ||
|
||
## Situation | ||
|
||
At the beginning of the company, the CEO want to hire some of his acquaintances as the company interns and part-time, so as the lead engineer, I am also tasked with training them. They were 6 young Vietnamese overseas students with a lot of energy and eager to find IT related jobs. I was really excited and hoped that I can teach them all my skills and experiences. But then... | ||
|
||
### Challenges | ||
|
||
In my case, these are my problems: | ||
|
||
- They didn't learn much about IT and programming from the IT vocational schools and the Japanese-language schools they are attending. | ||
- They don't know in particular who they will become when "having an IT job". | ||
- Recently, our Vietnamese has the "You can have an IT job without programming". The outsourcing companies have the programs that produce a BrSE for 3-6 months. Those programs are just Business Analyst courses, so no programming. With the students of the IT vocational schools and the Japanese-language schools, these are "the easy way". | ||
- Their English and Japanese are not so good. | ||
- My time for the training is only 3 months. | ||
- There are many programming languages as the options. | ||
- There is no syllabus at that time. | ||
|
||
With the above, I have to choose the appropriate programming language, build a syllabus with it weeks by weeks, combine with other solutions. | ||
|
||
### Solution to Challenge #1 | ||
|
||
My solutions are: | ||
- For issues 1, 6, and 7, choose a programming language that is easy to understand the syntax and can be learned quickly. | ||
- For issue 2, I organized an orientation for them. | ||
- For issue 3, it's the programming language I chose and the orientation. For the programming language solution, I need to choose a language that can be learned fast enough to compete with other short courses. | ||
- For issues 4 and 5, I teach them to ["Read - Search - Ask"](https://www.freecodecamp.org/news/read-search-dont-be-afraid-to-ask-743a23c411b4/) and prepare reference materials properly. | ||
- For issue 8, I have no choice but to create a syllabus for each week. | ||
|
||
Within the limits of the article, I would like to continue with the solution of **"Choose a programming language that is easy to understand the syntax and can be learned quickly"**. Ruby, Python, and Typescript meet this requirement of being easy to learn and quick to master. | ||
|
||
At that time, I chose Python. Reasons are: | ||
- Similar to Ruby syntax. | ||
- When I work with AWS, I use Python a lot for services like Lambda and Glue ETL. So I am also familiar with Python. | ||
- Because it was the CEO's opinion 🙁 | ||
|
||
### Challenge #2: Why did I change from Python to Ruby? | ||
|
||
After choosing a programming language, new problems arose: | ||
- The students' code had many bugs related to Python indentation. | ||
- In object-oriented (OOP), Python's access modifiers are difficult to understand. | ||
|
||
Python access modifiers | ||
```python | ||
class Example: | ||
# For public case, there is no underscore | ||
def public_method: | ||
pass | ||
|
||
# For protected case, there is one underscore | ||
def _protected_method: | ||
pass | ||
|
||
# For private case, there are two underscores | ||
def __private_method: | ||
pass | ||
``` | ||
When I asked the students, "What does this underscore mean?", they had no idea. | ||
|
||
At this point, I chose a real OOP language. Speaking of OOP, it's probably Java, but it's difficult to learn it right away. They were students at Japanese language schools and vocational schools, not third-year university students studying IT. That's why they chose Ruby. | ||
|
||
Access modifiers in Ruby | ||
```ruby | ||
class Example | ||
# For public case, there is no keyword or it's public keyword. | ||
def public_method | ||
end | ||
|
||
public | ||
def public_method2 | ||
end | ||
|
||
# For protected case, it's protected keyword. | ||
protected | ||
|
||
def protected_method | ||
end | ||
|
||
# For private case, it's private keyword. | ||
private | ||
|
||
def private_method | ||
end | ||
end | ||
``` | ||
### Results | ||
|
||
After switching from Python to Ruby, the students: | ||
- After one day, they were able to write Ruby code immediately. | ||
- Writing code became more rigorous, so they were more careful. | ||
- They understood the four basic concepts of OOP well. | ||
- Their logical thinking improved, because OOP is a good direction for thinking when programming. | ||
|
||
After that, after understanding the core of Ruby, they studied Ruby on Rails and created interesting projects. But in the end, three of them wanted to get an IT job without programming, so they joined a large Vietnamese outsourcing company. One went back to Japanese language school and continued studying. Only two continued programming. | ||
|
||
It was a little sad. | ||
|
||
## Conclusion | ||
|
||
For me, Ruby is a good programming language for education. I wish I could support the Ruby programmer community more. | ||
|
||
For personal reasons, I don't teach Ruby For now. I have uploaded the slides I used for teaching into Slideshare. The links to the slides are at the end of the English version. | ||
|
||
Thank you for reading to the end. | ||
|
||
### スライド/Slides | ||
|
||
- First slide: [https://www.slideshare.net/slideshow/01-ruby-introduction-ruby-core-teaching/270326042](https://www.slideshare.net/slideshow/01-ruby-introduction-ruby-core-teaching/270326042) | ||
- Second slide: [https://www.slideshare.net/slideshow/02-ruby-basic-slides-ruby-core-teaching/270326038](https://www.slideshare.net/slideshow/02-ruby-basic-slides-ruby-core-teaching/270326038) | ||
- Third slide: [https://www.slideshare.net/slideshow/03-ruby-variables-regex-ruby-core-teaching/270326039](https://www.slideshare.net/slideshow/03-ruby-variables-regex-ruby-core-teaching/270326039) | ||
- 4th slide: [https://www.slideshare.net/slideshow/04-ruby-operators-slides-ruby-core-teaching/270326035](https://www.slideshare.net/slideshow/04-ruby-operators-slides-ruby-core-teaching/270326035) | ||
- 5th slide: [https://www.slideshare.net/slideshow/05-ruby-control-structures-ruby-core-teaching/270326036](https://www.slideshare.net/slideshow/05-ruby-control-structures-ruby-core-teaching/270326036) | ||
- 6th slide: [https://www.slideshare.net/slideshow/06-ruby-array-hash-ruby-core-teaching/270326037](https://www.slideshare.net/slideshow/06-ruby-array-hash-ruby-core-teaching/270326037) | ||
- 7th slide: [https://www.slideshare.net/slideshow/07-ruby-string-slides-ruby-core-teaching/270326040](https://www.slideshare.net/slideshow/07-ruby-string-slides-ruby-core-teaching/270326040) | ||
- 8th slide: [https://www.slideshare.net/slideshow/08-ruby-enumerable-ruby-core-teaching/270326032](https://www.slideshare.net/slideshow/08-ruby-enumerable-ruby-core-teaching/270326032) | ||
- 9th slide: [https://www.slideshare.net/slideshow/09-ruby-object-oriented-programming-ruby-core-teaching/270326041](https://www.slideshare.net/slideshow/09-ruby-object-oriented-programming-ruby-core-teaching/270326041) |