How I became a full-stack developer - I didn't know how to learn to code

devaslife
29 Mar 202109:15

Summary

TLDRこのビデオスクリプトでは、日本のフルスタック開発者であるTakuyaが、プログラミングを学ぶ過程で犯した無数の誤りを通じて得た深い洞察を共有しています。彼は、プログラミング言語間の共通性やパラダイムを理解することの重要性を強調し、言語やフレームワークの深い理解を通じて新しい技術を迅速に習得する能力を持つことの価値について語ります。また、最適な言語やライブラリを選ぶ際には問題解決に応じて、単なる「最高」なものに依存するのではなく、独自の知識ベースを築くためには、積極的に技術を試して自分自身で選ぶべきだと提唱しています。そして、間違いを恐れることなく、その過程を通じて真の理解を得ることが学びの鍵であると示しています。

Takeaways

  • 📚 プログラミング学習の「聖書」として日本語版のWin32APIヘルプファイルを利用した経験がある。
  • 🛠️ 間違いを犯すことは学習プロセスで重要なステップであり、避ける必要はない。
  • 💡 深く一つの言語やフレームワークを理解することは、他の言語や技術を学ぶ際の鍵である。
  • 🔍 プログラミング言語間のパラダイムは基本的に同じで、オブジェクト指向プログラミング、データ構造、マルチスレッドなどが共通している。
  • 🔄 特定の言語を理解すれば、他の言語の学習もその知識を再利用して容易になる。
  • 🌐 開発コミュニティはお互いに影響を与えており、多くのアイデアは既存のアイデアの混合物である。
  • 🛠️ 言語やフレームワークを使い分ける能力は重要ではなく、それらを深く理解し困難な問題に取り組む経験が大切だ。
  • 🚀 「最良の」プログラミング言語やライブラリ・フレームワークは存在せず、問題解決に最適なものを選ぶべきだ。
  • 🔧 技術を選ぶ際は、他人の意見に盲従するのではなく、自分が直面している問題に応じて選ぶべきだ。
  • 📈 技術スタックを選んだらそれに忠実であり、再利用可能な知識ベースを築くことが重要だ。
  • 🤔 間違いを繰り返すことで学びを深め、記憶に定着させることができる。
  • 💪 苦痛であっても、頭を使って手を動かすことが、最終的には報われる。

Q & A

  • タクヤさんはどのような職業をしていますか?

    -タクヤさんはフルスタックデベロッパーであり、日本からの開発者です。

  • タクヤさんが使用したプログラミング言語には何がありますか?

    -タクヤさんはJavaScript, Java, Kotlin, Objective-C, Swift, C++, Python, Luaなど、様々な言語を使いました。

  • フルスタックデベロッパーとはどのような意味ですか?

    -フルスタックデベロッパーとは、すべての技術的な側面に精通し、新しい技術を素早く習得できる能力を持つデベロッパーのことです。

  • タクヤさんはなぜプログラミング言語間の差異が大きくないと主張していますか?

    -タクヤさんは、プログラミング言語間のパラダイムが基本的に同じであると主張しており、例えばオブジェクト指向プログラミング、データ構造、マルチスレッドなどがあります。

  • タクヤさんがReact Nativeアプリを開発する際に使用した言語は何ですか?

    -タクヤさんはReact Nativeアプリの開発にJavaScript, Java, Kotlin, Objective-C, Swift, C++を使いました。

  • タクヤさんはどのようにして新しいフレームワークを学ぶことができますか?

    -タクヤさんはReactを学んだ後、その知識をRustのYewのような似たフレームワークへの学習に再利用することができます。

  • タクヤさんはどのようにしてプログラミングを学び始めましたか?

    -タクヤさんは13歳でプログラミングを始め、インターネットに接続されていなかったため、Win32APIの日本語版ヘルプファイルを参照して学習しました。

  • タクヤさんはどのようにしてプログラミングを学ぶ効率を高めていますか?

    -タクヤさんは、エラーを作り、それを理解することで学ぶ効率を高めています。彼は、エラーを避けるよりも、エラーを通じて学ぶことが重要だと考えています。

  • タクヤさんがプログラミングを学ぶ際に最も大切にしていることは何ですか?

    -タクヤさんは、特定の言語やフレームワークを深く理解し、それらを困難な問題に対処する経験を積むことが重要だと考えています。

  • タクヤさんはなぜ「最適な」プログラミング言語やライブラリ、フレームワークが存在しないと主張していますか?

    -タクヤさんは、問題解決に最適な言語やライブラリ、フレームワークがあると主張しており、それらは状況によって異なるため、「最適な」ものなんて存在しないと言っています。

  • タクヤさんはどのようにしてデザインパターンを学びましたか?

    -タクヤさんは、オブジェクト指向プログラミングのデザインパターンを学ぶために、コードを作りながら、クラスの設計方法を理解し、自然とデザインパターンを学びました。

  • タクヤさんはどのようにして新しいAPIを理解していますか?

    -タクヤさんは、Win32APIのヘルプファイルを読んで、APIを試行錯誤しながら理解を深め、APIシグネチャのパターンを学びました。

Outlines

00:00

😀 プログラミングの基礎と言語間の類似性

この段落では、日本のフルスタックデベロッパーであるTakuyaが、プログラミング言語間の共通性とパラダイムについて話しています。彼は、様々な言語を用いてアプリ開発に携わり、プログラミング言語間の大きな違いはなく、オブジェクト指向プログラミングやデータ構造、マルチスレッドなど、基本的なパラダイムが同じであると説明しています。また、特定の言語を深く理解することで、他の言語を学ぶことが容易になるというアプローチを紹介しています。

05:01

😅 失敗を通じて学ぶことの重要性

この段落では、失敗を恐れずに直面することの重要性が強調されています。Takuyaは、インターネットに接続されておらず、本も多く買えなかった彼の少年時代を振り返り、Win32APIのヘルプファイルを「聖書」と位置付けています。彼は、APIを何度も試行錯誤しながら学び、その過程でAPIのシグネチャパターンを理解し、基本的なデザインパターンを学びました。彼は、失敗を避けるために他人の答えを借りるのではなく、自分の手で問題を解決することで深い理解を得ることが肝要だと述べています。

Mindmap

Keywords

💡Win32API

Win32APIは、Microsoft Windowsのプログラミングインターフェースの集合体であり、Windowsアプリケーションを開発するための基本的な機能を提供します。ビデオでは、Win32APIの日本語版ヘルプファイルが、プログラミングを学ぶ際の重要なリソースとして言及されています。

💡フルスタック開発者(full-stack developer)

フルスタック開発者は、ウェブやアプリケーションの開発において、フロントエンド(ユーザーインターフェース)からバックエンド(データベースやサーバーサイドロジック)まで、様々な技術を理解し、実装できる開発者のことです。ビデオでは、フルスタック開発者が新しい技術を迅速に採用できる能力について語られています。

💡プログラミング言語のパラダイム(programming paradigms)

プログラミング言語のパラダイムとは、特定のスタイルや方法論に基づいてソフトウェアを設計・開発する方法です。オブジェクト指向プログラミングや関数型プログラミングなどがこれに該当します。ビデオでは、プログラミング言語間の共通性と、パラダイムがコードの基本構造に与える影響について説明されています。

💡オブジェクト指向プログラミング(Object-Oriented Programming, OOP)

オブジェクト指向プログラミングは、現実世界の物体や概念をモデル化し、それらの相互作用をプログラムで表現するプログラミングパラダイムです。ビデオでは、OOPのデザインパターンを学ぶ過程や、それがフルスタック開発者として役立つ理由について触れられています。

💡フレームワーク(framework)

フレームワークは、特定のプログラミングタスクやアプリケーションタイプをより簡単に開発できるようにする、一連のライブラリやツールです。ビデオでは、Reactのようなフレームワークを学んだ後、似たようなフレームワークを学ぶことが容易になる例として説明されています。

💡エラーと学習(mistakes and learning)

ビデオでは、エラーを犯すことが学習プロセスに不可欠であると強調されています。エラーを通じて、なぜ特定のアプローチが機能するのか、なぜ機能しないのかを理解することができます。

💡デザインパターン(design patterns)

デザインパターンは、ソフトウェア開発において問題解決のための再利用可能なソリューションの集合体です。ビデオでは、デザインパターンを理解することで、より良いクラス設計が可能になること、そしてそれがフルスタック開発者として重要である理由について語られています。

💡React Native

React Nativeは、JavaScriptとReactを使用してネイティブiOSおよびAndroidアプリケーションを開発できるクロスプラットフォームフレームワークです。ビデオでは、React Nativeを使用してアプリを構築し、多言語での開発能力を示す例として挙げられています。

💡DeepLearning

ディープラーニングは、人工知能の分野で、特に多层のニューラルネットワークを使用して複雑なデータセットを学ぶ技術です。ビデオでは、ディープラーニングを使用してビデオアートを作成する例として触れられています。

💡エクスペリエンス(experience)

ビデオでは、プログラミング言語やフレームワークを深く理解するためには、それらを使用して困難な問題を解決する経験が重要であると述べています。そのような経験は、他のスキルに再利用できる貴重な財産です。

💡最適な言語(optimal language)

ビデオでは、問題解決に最適な言語やライブラリを選択することが重要であると強調されています。最適な言語とは、特定の問題に対して最も適切な言語を選択するプロセスであり、単一の「最高の言語」は存在しないことを意味しています。

Highlights

「ウィンドウズ32APIの日本語版ヘルプファイルは私の聖書だった。」

「コンピュータを手違いで壊した? それは素晴らしいことだ。」

「プログラミングを学ぶのは難しいし、時間がかかる。」

「人々は、プログラミングをスマートな方法でできるだけ早く学ぶ短縮コースを探し続けている。」

「あなたはあまり「賢い」必要はありません、効率的にコーディングをマスターするために。」

「私は日本のフルスタックデベロッパーのTakuyaです。」

「私はReact Nativeアプリを構築するためにJavaScript、Java、Kotlin、Objective-C、Swift、C++を書いた。」

「深層学習を使用してビデオアートを作成するためにPythonとLuaを書いた。」

「フルスタックデベロッパーとは、何でも知っているという厳格な定義はありません。」

「プログラミング言語間の大きな違いはありません。」

「オブジェクト指向プログラミング、データ構造、マルチスレッドなど、コーディングのパラダイムは基本的に同じです。」

「特定の言語に深く理解を深めることにより、他の言語を学ぶことができます。」

「Reactを学んだら、RustのYewのような類似したフレームワークを学ぶために知識を再利用できます。」

「開発者コミュニティはお互いに影響を与えています。」

「JavaScriptのasync/awaitのアイデアはC#から来ています。」

「特定の言語やフレームワークに深く理解を深めることが重要です。」

「最適な言語やライブラリは問題解決に応じて異なるため、存在しないベストなものはありません。」

「技術を選択する際は、あなたが解決しようとしている問題に基づいて、それらを自分で判断してください。」

「プログラミングには多くの共通の原則があります。」

「開発スタックを選んだら、それを貫いて独自の再利用可能な知識ベースを育てましょう。」

「エラーを繰り返し犯すことで知識を効率的に得ることができます。」

「私がプログラミングを学び始めた13歳の頃、インターネットに接続されていなかったため、Win32APIの日本語版ヘルプファイルが私の聖書でした。」

「エラーを犯することは学校で勉強するのとは異なり、恥ずかしいことではありません。」

「あなたは頭を使って考え、手を使って実践することが重要です。」

「私がオブジェクト指向プログラミングの良いデザインパターンを見つけるために苦労していたとき、ある日突然クラスの設計方法を理解しました。」

「この知識は特定のOOP言語に依存せず、あなたをフルスタックデベロッパーにします。」

「もしプログラミングを学ぶのに苦労しているなら、このビデオが役立つことを願っています。」

Transcripts

play00:00

Japanese version of Win32API help file was my bible.

play00:05

You broke your computer by mistake? That's great.

play00:08

why doesn't it work, why doesn't it work..

play00:16

learning to program is hard it takes a long time.

play00:20

People seem to be trying hard to find a shortcut to learn it as fast as possible in a smart way.

play00:27

That makes sense because you don't want to waste your time. But, that would be a pitfall.

play00:33

You don't have to be so "clever" to master coding efficiently. Let me tell you what that means.

play00:41

Hi, I'm Takuya, a full-stack developer from Japan. I build a whole app alone, and I write almost any language as I need.

play00:51

For example, I've written JavaScript, Java, Kotlin, Objective-C, Swift, and C++ for building my React Native app.

play01:02

I've also written Python and Lua to create a video art using DeepLearning. 

play01:08

There is no strict definition of "full-stack" but, in my opinion, being a full-stack developer doesn't mean you know everything.

play01:16

Being a full-stack developer means that you can quickly adopt new technologies

play01:22

as much as you need, as if you know everything.

play01:26

Why is it possible? That's simple. Because there are no significant differences between programming languages.

play01:34

The paradigms of coding are basically same, such as Object-Oriented Programing, data structure, multi-threading, etc.

play01:45

For example, function signatures are similar regardless of languages.

play01:50

Say, you got to find the index of the element in a certain array.

play01:56

In JavaScript, the signature of indexOf method looks something like this:

play02:01

The first argument is the element to locate in the array.

play02:05

And the second argument is the index to start the search at. You can call it like so:

play02:11

It returns the index if found, otherwise it returns `-1`.

play02:16

In Python, the signature looks like this:

play02:20

And you can call it like this:

play02:23

Very similar, right?

play02:26

In PHP, it looks like this:

play02:29

If you already know indexOf method of JavaScript, it is not hard to understand how to call array_search in PHP or list.index method in Python. Right?

play02:42

So, as you understand a particular language deeply, learning another language can be easy by reusing your knowledge and experience.

play02:51

This technique can be applied to frameworks as well.

play02:54

Once you learned React, you can reuse the knowledge for learning another similar framework like Yew of Rust.

play03:01

You can write a component something like this in Yew:

play03:06

So, if you are already used to writing React, you should be able to understand Yew framework quickly.

play03:13

You will notice that there are a lot of common designs and paradigms between languages like that.

play03:19

That's because the developer communities are influencing each other.

play03:23

My favorite one is that the idea of JavaScript's async/await has come from C#.

play03:30

It's interesting, isn't it? So, most ideas are the mixture of the existing ideas.

play03:37

The point is that you should be deeply into a particular language and framework.

play03:43

In fast, how many languages and frameworks you can use doens't matter.

play03:48

But how deeply you understand the language and framework is important.

play03:53

Because you should have tackled to solve difficult problems with them.

play03:58

Those experience are the true gem that can be reused for other skills.

play04:04

A lot of people are obsessed to talk about the "best" programming language and the "best" library and framework, etc.

play04:13

That doesn't make sense. Because they actually never exist. Instead, there are the optimal language and library for solving your problem.

play04:24

So, don't blindly choose what they told you.

play04:28

Choose technologies based on the problem you are trying to solve,and stick with them.

play04:34

So, try every technology that looks promising for you and decide which to use by yourself.

play04:41

So, there are a lot of common principles in programming.

play04:45

And once you chose a dev stack, stick with it so that you can cultivate your own reusable knowledge-base.

play04:53

But how to get those knowledge efficiently? that is to make mistakes as many as possible.

play05:00

I made countless mistakes while learning to code.

play05:04

People usually try to avoid making mistakes by reading books and articles on the internet.

play05:10

Of course, knowing the best practices is useful.

play05:15

Asking people questions is helpful. Yeah, I agree. Those are quick ways to find the answers.

play05:23

But, you will never understand 'how' they found the answers. You will never know 'why' they do in that way.

play05:32

You are just borrowing their time and effort by asking questions.

play05:39

On the other hand, making a mistake is the opportunity to understand them.

play05:43

Besides, making mistakes can be etched in your memory longer than just remembering the answers.

play05:50

That is something like muscle training.

play05:54

When I started programming at age 13, I didn't have much money to buy so many books.

play06:01

My home was not connected to the internet yet.

play06:04

So, the Japanese version of Win32API help file was my bible.

play06:11

I've read it and try the Windows APIs again and again without knowing how to call them.  

play06:18

Some APIs were not translated and I couldn't understand the English descriptions,

play06:27

so I tried to specify possible parameters as many as I can come up until it works.

play06:34

My app and my computer crashed many many times. I was so happy when I finally got it to work.

play06:43

And I've learned the API signature patterns little by little.

play06:48

That helped me understand new APIs, and also helped me design interfaces of my functions and methods.

play06:55

That's how I learned basic design patterns.

play06:59

Making a mistake is definitely not embarrassing unlike studying at school.

play07:04

That's the necessary step to learn to code. I mean, you need to make mistakes.

play07:11

Don't be afraid. That's why I said you don't have to be so "clever" to master coding efficiently.

play07:18

Cleverly avoiding mistakes is ultimately an inefficient way to learn.

play07:23

You broke your computer by mistake? That's great. I did it many times, too.

play07:30

You wiped out data from the database by mistake?

play07:34

That's awesome. I did it many times, too. So, you are doing great. Keep it up!

play07:42

I don't mean that you shouldn't read books or search answers on Stackoverflow.

play07:49

I mean that you should think with your head and use your hands.

play07:56

Ah, yes, it's hard. It's even painful sometimes. It might be not so fun when you scratch your head and mumble like,

play08:08

why doesn't it work, why doesn't it work.. But, trust me, your effort will pay off.

play08:14

I was struggling to find good design patterns of Object-Oriented programming.

play08:20

My code was messed up with weird classes.

play08:25

But one day, I suddenly realized how to design classes well.

play08:29

This knowledge doesn't depend on any OOP languages. And that will make you a full-stack developer.

play08:37

So, that's how I learned to code. If you were struggling to learn programming, I hope this video is helpful.

play08:46

Thanks for watching. I'll catch you guys in the next one.

play08:50

peace

Rate This

5.0 / 5 (0 votes)

Related Tags
プログラミングフルスタック開発者学習エラー経験パラダイムデザインパターン技術選定自己教育
Do you need a summary in English?