How I became a full-stack developer - I didn't know how to learn to code
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
😀 プログラミングの基礎と言語間の類似性
この段落では、日本のフルスタックデベロッパーであるTakuyaが、プログラミング言語間の共通性とパラダイムについて話しています。彼は、様々な言語を用いてアプリ開発に携わり、プログラミング言語間の大きな違いはなく、オブジェクト指向プログラミングやデータ構造、マルチスレッドなど、基本的なパラダイムが同じであると説明しています。また、特定の言語を深く理解することで、他の言語を学ぶことが容易になるというアプローチを紹介しています。
😅 失敗を通じて学ぶことの重要性
この段落では、失敗を恐れずに直面することの重要性が強調されています。Takuyaは、インターネットに接続されておらず、本も多く買えなかった彼の少年時代を振り返り、Win32APIのヘルプファイルを「聖書」と位置付けています。彼は、APIを何度も試行錯誤しながら学び、その過程でAPIのシグネチャパターンを理解し、基本的なデザインパターンを学びました。彼は、失敗を避けるために他人の答えを借りるのではなく、自分の手で問題を解決することで深い理解を得ることが肝要だと述べています。
Mindmap
Keywords
💡Win32API
💡フルスタック開発者(full-stack developer)
💡プログラミング言語のパラダイム(programming paradigms)
💡オブジェクト指向プログラミング(Object-Oriented Programming, OOP)
💡フレームワーク(framework)
💡エラーと学習(mistakes and learning)
💡デザインパターン(design patterns)
💡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
Japanese version of Win32API help file was my bible.
You broke your computer by mistake? That's great.
why doesn't it work, why doesn't it work..
learning to program is hard it takes a long time.
People seem to be trying hard to find a shortcut to learn it as fast as possible in a smart way.
That makes sense because you don't want to waste your time. But, that would be a pitfall.
You don't have to be so "clever" to master coding efficiently. Let me tell you what that means.
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.
For example, I've written JavaScript, Java, Kotlin, Objective-C, Swift, and C++ for building my React Native app.
I've also written Python and Lua to create a video art using DeepLearning.
There is no strict definition of "full-stack" but, in my opinion, being a full-stack developer doesn't mean you know everything.
Being a full-stack developer means that you can quickly adopt new technologies
as much as you need, as if you know everything.
Why is it possible? That's simple. Because there are no significant differences between programming languages.
The paradigms of coding are basically same, such as Object-Oriented Programing, data structure, multi-threading, etc.
For example, function signatures are similar regardless of languages.
Say, you got to find the index of the element in a certain array.
In JavaScript, the signature of indexOf method looks something like this:
The first argument is the element to locate in the array.
And the second argument is the index to start the search at. You can call it like so:
It returns the index if found, otherwise it returns `-1`.
In Python, the signature looks like this:
And you can call it like this:
Very similar, right?
In PHP, it looks like this:
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?
So, as you understand a particular language deeply, learning another language can be easy by reusing your knowledge and experience.
This technique can be applied to frameworks as well.
Once you learned React, you can reuse the knowledge for learning another similar framework like Yew of Rust.
You can write a component something like this in Yew:
So, if you are already used to writing React, you should be able to understand Yew framework quickly.
You will notice that there are a lot of common designs and paradigms between languages like that.
That's because the developer communities are influencing each other.
My favorite one is that the idea of JavaScript's async/await has come from C#.
It's interesting, isn't it? So, most ideas are the mixture of the existing ideas.
The point is that you should be deeply into a particular language and framework.
In fast, how many languages and frameworks you can use doens't matter.
But how deeply you understand the language and framework is important.
Because you should have tackled to solve difficult problems with them.
Those experience are the true gem that can be reused for other skills.
A lot of people are obsessed to talk about the "best" programming language and the "best" library and framework, etc.
That doesn't make sense. Because they actually never exist. Instead, there are the optimal language and library for solving your problem.
So, don't blindly choose what they told you.
Choose technologies based on the problem you are trying to solve,and stick with them.
So, try every technology that looks promising for you and decide which to use by yourself.
So, there are a lot of common principles in programming.
And once you chose a dev stack, stick with it so that you can cultivate your own reusable knowledge-base.
But how to get those knowledge efficiently? that is to make mistakes as many as possible.
I made countless mistakes while learning to code.
People usually try to avoid making mistakes by reading books and articles on the internet.
Of course, knowing the best practices is useful.
Asking people questions is helpful. Yeah, I agree. Those are quick ways to find the answers.
But, you will never understand 'how' they found the answers. You will never know 'why' they do in that way.
You are just borrowing their time and effort by asking questions.
On the other hand, making a mistake is the opportunity to understand them.
Besides, making mistakes can be etched in your memory longer than just remembering the answers.
That is something like muscle training.
When I started programming at age 13, I didn't have much money to buy so many books.
My home was not connected to the internet yet.
So, the Japanese version of Win32API help file was my bible.
I've read it and try the Windows APIs again and again without knowing how to call them.
Some APIs were not translated and I couldn't understand the English descriptions,
so I tried to specify possible parameters as many as I can come up until it works.
My app and my computer crashed many many times. I was so happy when I finally got it to work.
And I've learned the API signature patterns little by little.
That helped me understand new APIs, and also helped me design interfaces of my functions and methods.
That's how I learned basic design patterns.
Making a mistake is definitely not embarrassing unlike studying at school.
That's the necessary step to learn to code. I mean, you need to make mistakes.
Don't be afraid. That's why I said you don't have to be so "clever" to master coding efficiently.
Cleverly avoiding mistakes is ultimately an inefficient way to learn.
You broke your computer by mistake? That's great. I did it many times, too.
You wiped out data from the database by mistake?
That's awesome. I did it many times, too. So, you are doing great. Keep it up!
I don't mean that you shouldn't read books or search answers on Stackoverflow.
I mean that you should think with your head and use your hands.
Ah, yes, it's hard. It's even painful sometimes. It might be not so fun when you scratch your head and mumble like,
why doesn't it work, why doesn't it work.. But, trust me, your effort will pay off.
I was struggling to find good design patterns of Object-Oriented programming.
My code was messed up with weird classes.
But one day, I suddenly realized how to design classes well.
This knowledge doesn't depend on any OOP languages. And that will make you a full-stack developer.
So, that's how I learned to code. If you were struggling to learn programming, I hope this video is helpful.
Thanks for watching. I'll catch you guys in the next one.
peace
Browse More Related Video
Supercommunicators with journalist Charles Duhigg | A Bit of Optimism Podcast
Lispの勉強をしたら『葬送のフリーレン』と同じカタルシスが待っていた。【Lisp2】#119
【タロサックが解決】英語継続マスタープラン/症状別モチベーションを保つ方法/外敵を制する方法【ENGLISH SKILL SET】
「目標は数字で語るな」人を動かす言語化力の極意をGO三浦さんに聞きました。
Mary Evelyn Tucker 0102 - Integrating Scientific Knowledge Within A Larger Whole Through Story
【最新】ChatGPT-4oも登場!生成AIに振り回されないプログラミング学習方法とは!?【切り抜き】
5.0 / 5 (0 votes)