コミュニティに戻る

Pythonでスタートを切ろう!

ときどき、いきなりプログラミング学習の深みに飛び込む人がいます! カールは、ネット上では「Meatball」として知られ、ExercismのPythonトラックを使ってコードの書き方を学び始めました。なかなかの偉業ですが、挑戦を嫌う人はいませんよね!

Youtubeで見る
長さ 34分

Jonathan: こんにちは、Exercismのポッドキャストへようこそ。ジョナサンです。こうしてまた皆さんと人生や物語を共有できるのは光栄です。今どこにいらっしゃる方も。さて、今日のゲストはカールさんです。さっそくですが、カールさんに少し自己紹介をしていただきましょう。カールさん、どちらの出身ですか? 今は何をされていますか? そして、Exercismとはどうやって出会ったのでしょうか?

Carl: ええと、私はスウェーデンのヨーテボリという都市に住んでいて、今は学生です。ITとプログラミングの世界に入ったとき、Exercismを使いました。最初はPythonトラックから始めて、Pythonトラックはほとんどの初心者にとって最高のトラックだと思います。Pythonの文法はとても分かりやすくて、私の感覚ではとても人間らしいんです。それに、プログラミング言語の型という点でも、Pythonはとても優しいです。型、データ型はそれほど多くありません。…はい。それで、コンセプト演習を始めて、シラバスに沿って進めました。それを、週末に1つか2つ、隔週くらいのペースで続けていました。しばらくして…最初の頃はたくさん間違いをしました。今振り返ると分かります。今はもっと長くプログラミングをしてきたので、そういう間違いが分かるようになりました。だから、最初からコードが完璧である必要はありません。よかったのは、Pythonトラックで多くの演習を終えたあと、Rubyトラックに移ったことです。Pythonから移るのにRubyが良いのは、共通点が多いからです。ええと、Rubyの文法もかなり似ていますが、いくつか違いもあります。たとえば、RubyはずっとOOP、オブジェクト指向寄りです。なので初心者にとっては、Pythonから始めてRubyに移るのは、けっこう楽しい旅になると思います。では、また次回。

Jonathan: Pythonから始めたんですね。Exercismに来る人の多くは、すでに開発の経験が少しあります。開発やコーディングの予備知識や経験がある人がExercismをよく使う理由は、特定の言語のスキルを上げるためです。でも、カールさんはコーディングもプログラミングもまったくの未経験でExercismを始めた、という理解で合っていますか?

Carl: Scratchのようなビジュアルプログラミングは少しやったことがありましたが、実際にコードを書いたことはありませんでした。ゼロから始めるのは大変です。それはすべてのプログラマーに共通することだと思います。始まりは丘のように起伏があって、その丘を登りきってしまえば、あとは楽になっていきます。そんな感じです。

Jonathan: その丘を登ったら、そのあと丘がどんどん大きくなっていって、また少し登って、そしてどんどん大きくなり続ける、と言うのかと思いましたよ。そう感じたことはありますか? 何かが腑に落ちた瞬間はありましたか? 「ああ、分かった」と思った瞬間はありましたか?

Carl: そうですね、何かを完全に理解するには実際とても時間がかかります。それに、初心者の多くが最初にやりがちなのは、whileループをたくさん使うことです。whileループはforループよりもずっと細かく制御できるからです。forループは、始める前にループを何回繰り返すか教えてあげなければいけません。それで、forループを適切に使う方法をちゃんと学んで、whileループを使いすぎなくなったとき、プログラミングが分かった、という感覚になりました。ループの仕組みがずっとよく分かるようになったんです。

Jonathan: なるほど、それは「この概念は自分にとって意味が通る」と感じた瞬間ですね。そして、ループの理解がほかの概念にも広がって、少しずつ分かるようになっていったのですか? 私の経験から話すと、私はGoトラックでGoを学んでいます。ループは、たぶん3日ほどかけて演習とドキュメントを読み込んで、一つずつ分解して組み立てるまで、まったく分かりませんでした。ループに向き合って理解しようとした経験は、コード全般の理解や、関数などがどう動くかの理解に、本当に大きな影響を与えました。カールさんにとっても同じような感じでしたか?

Carl: Pythonでは、いろいろな問題を解くとき、よく何かを繰り返し処理します。Pythonでやることは、ほぼそれだけと言ってもいいくらいです。Pythonでは、問題を解くために何かを繰り返し処理します。つまり、ループを完全に理解することがとても重要なんです。Pythonのループを完全に理解すれば、たくさんのことができるようになります。すべてがオブジェクトの繰り返し処理を土台にしているからです。

Jonathan: いいですね。それで、今は勉強中だと、この録音の前に少し話してくれましたね。数学や物理など。今はどんなトピック、どんな科目を勉強しているのですか?

Carl: プログラミングと数学と物理を勉強しています。

Jonathan: なるほど、それらはどうですか?

Carl: 実は、それらのプログラミングの授業の準備としてExercismをやっていたんです。そして、今ではその授業で扱う内容よりもずっと多くのことを知っていると気づきました。

Jonathan: それはすごいですね。

Carl: その授業からはあまり学べていないんです。代わりにマルクス主義について学んでいます。

Jonathan: つまりカールさんは、大学の学位よりもExercismをやるべきだと言っているのですか?

Carl: ええと、コンピューターサイエンスを専攻しないなら、コンピューターがどう動くか、ビットなどについてもう少し学べると思います。一方でExercismは、プログラミングと問題解決、そしてその中のロジックの部分だけを教えてくれます。大学に行く意味はやはりあると思います。

Jonathan: 少し冗談で言ったんですよ。というのも、大学の学位を持っている人に「何も知らない」なんて言ったら、多くの人を怒らせてしまうでしょうから。そこはそっとしておきましょう。さてカールさん、成長期のことについて、もう少し質問させてください。うまく言おうとしているのですが。子どものころ、問題を解くのは好きでしたか? レゴなどに興味はありましたか? こう聞くのは、プログラミングをする人には、問題を解くこと自体を自然に楽しむ傾向があるからです。成長する中で、技術寄りの趣味や好きなことはたくさんありましたか? 少し教えてください。

Carl: レゴは好きでした。あとは…子どものころは数学が得意でした。数学の問題を解くのは、問題解決ですね。私をプログラミングに引き込んだのは、たぶん…技術全般への興味です。コンピューターが本当に好きなんです。それに、誰かがコンピューターで困るたびに、「ねえ、手伝ってくれる?」と言われるのが、時には少しうんざりすることもありますが、実際はとても楽しいんです。そうしてコンピューターに強い興味を持つようになって、それが面白いプログラミングへとつながりました。

Jonathan: なるほど。カールさんの話では、今までExercismで4~5のトラックをやった、いや、Exercismを使って4~5の言語を学んだ、ということで合っていますか?

Carl: そうですね。私は6つのトラックを始めました。でも、ちゃんと身についていると言えるのはそのうちのいくつかだけです。

Jonathan: なるほど、その中で、どれですか? Python、Ruby…

Carl: Python、Ruby、JavaScript、TypeScriptです。あと、Elixirもまあまあできます。

Jonathan: では、それらの言語の中で、学ぶという意味で一番楽しかったのはどれですか?

Carl: Elixirが本当に大好きです。あの言語でコードを書くのがとても好きです。すごく楽しい言語だと思います。でも、ほかの言語で慣れているものとはかなり違います。ある意味、また一から始めるような感じです。はい。でも、本当に強力な言語を学びたいなら、JavaScriptがあります。私の意見では、知っておける中で最も強力な言語のひとつです。

Jonathan: JavaScriptは、私が間違っていたら訂正してほしいのですが、よりインタプリター寄りの言語ですよね。そう言ってよいですか? そしてElixirはたぶんもっと関数的です。そうですか?

Carl: はい。

Jonathan: なるほど、けっこう違いがあるんですね。カールさんがその2つの言語の両極端を楽しんでいるのが面白いです。Elixirのどこが楽しい、あるいは面白いのですか? そこをはっきり言葉にできますか?

Carl: そうですね、関数型プログラミングです。こういう関数があって、それらを全部組み合わせていくんです。それらの関数を使って問題を解くんです。つまり、少なくとも私にとっては、Elixirのドキュメントがとても重要で…実際に何かをするために。それに、Elixirのドキュメントは素晴らしいと思います。正しいメソッドを探して見つける、という感じで、それがとても楽しいんです。

Jonathan: つまり、パズルを組み立てるようなものですね。すべてを組み合わせて、問題が見えるようにする。そういうことですか?

Carl: すべてを組み合わせて、パズルを一緒に見ていく感じです。それに、さっきも言ったように、あの言語で書くのが本当に好きなんです。なので、とても素敵なパズルです。

Jonathan: いいですね。そのトラックではどのあたりまで進みましたか? プラクティス演習は終わりましたか? それともまだコンセプト演習ですか?

Carl: あの言語にはコンセプト演習がたくさんあります。たぶん20か、それ以上あると思います。私はコンセプト演習を…たぶん90%くらい終えたので、もうすぐ終わります。

Jonathan: すごいですね。本当に素晴らしい。さてカールさん、コーディングや開発だけでなく、生活についてももう少し聞きたいです。趣味や自由時間に楽しんでいることは何ですか? コーディング以外で、もしすべての時間を費やせるなら、何をしたいですか?

Carl: そうですね、プログラミングと答えてはいけないなら、自由時間にはゲームをするのが好きです。あとは自転車に乗るのも好きです。それも楽しいです。

Jonathan: マウンテンバイクですか、ロードバイクですか?

Carl: ロードバイクです。

Jonathan: 自転車で走るんですね。少し教えてください。スウェーデンに住んでいるんですよね? はい。住んでいる場所は平地ですか? 丘が多いですか? 美しい海はありますか? スウェーデンの印象というと、海があるというものですから。

Carl: はい、私が住んでいる場所はかなり平坦です。でも北へ行くと、もっと丘が多くなります。

Jonathan: 今スウェーデンは雪が降っていますか? そろそろ寒くなってきそうですよね。

Carl: 先週は雪が降っていたと思います。でも今はあまり雪はありません。

Jonathan: なるほど、雪の中でも自転車に乗るのですか?

Carl: はい。

Jonathan: そうなんですね。もう一人、ブライアンを知っているかもしれません。ブライアンはElixirのメンターの一人です。ブライアン・アンダーウッドさんで、彼もスウェーデン、たぶんストックホルムに住んでいて、真冬の真ん中で、スウェーデンの暗い夜を走り回っています。それで、けっこうすごいなと思ったんです。カールさんはよく自転車に乗りますか? 週に1回、2回ですか? それとも定期的に乗る感じですか? それとも…

Carl: 私は、移動するときは、バス停まで自転車で行って、それからバスに乗ります。

Jonathan: なるほど、それでいい場所を見つけて…つまりバスで移動するんですね。

Carl: バス停までは自転車で行って、それからバスで移動します。

Jonathan: 了解です。いいですね。カールさん、大学は住んでいる場所からどのくらい遠いのですか? 今は実家に住んでいますか? それとも借りていますか? どんな暮らしなんですか?

Carl: 実家に住んでいます。30キロ離れています。だいたい…よく分かりませんが、ええと、30キロ、たぶんそれくらいですね。40分か、そのくらいです。

Jonathan: なるほど、それならそんなに悪くないですね。でも、それでもなかなかの距離です。それでは、いわゆる社会に出るまで、あと何年勉強が残っていますか? あと4年ですね。今は1年目ですか?

Carl: はい。

Jonathan: なるほど。1年目を終えて、4年制の学位なんですね。それで、将来の夢や、どんな仕事をしたいか、何か考えはありますか?

Carl: そうですね、ずっと宇宙に関わる仕事がしたかったんです。かっこいいと思うので。天体物理学のようなことではなく、宇宙に関係することをプログラミングする、といった感じです。欧州宇宙機関もありますし、そういうのもあるでしょうけど…そうでなければ、まあ…よく分かりませんが、普通のバックエンドの仕事もいいなと思います。

Jonathan: 普通のバックエンド、という言い方がいいですね。それだととても簡単そうに聞こえます。スウェーデン以外のどこかに引っ越したいと思いますか? それともスウェーデンが好きですか? そのあたりはどうですか? というのも、まだ選択を迫られるまでに数年ありますから、もしかしたら考えたこともないかもしれません。でも宇宙というのは本当に魅力的ですね。どうやってそこに進むのですか? どうやって始めるのですか?

Carl: 実はまったく分かりません。どうやって、というのは本当に考えたことがありません。でも…まあ、そのうち分かるでしょう。計画というよりは夢に近いですね。でも、さっきの質問に答えると、カナダに住むことも考えたことはあります。たぶん、これからも世界の北のほうに住むと思います。

Jonathan: なるほど、寒くて氷と雪のところですね。それでいいですか? はい。カールさん、兄弟や姉妹はいますか?

Carl: 弟がいます。

Jonathan: なるほど、二人兄弟ですね。弟さんはプログラミングを楽しんでいますか? 学んだことや知っていることを教えていますか?

Carl: ああ、彼は実はプログラミングが好きじゃないんです。よく分かりませんけど。

Jonathan: そうなんですか? では共通点はないのですね。でも、一緒にゲームはしますか?

Carl: ときどき一緒にゲームをします。はい。

Jonathan: 弟さんはかなり年下ですか? 今は学校に通っているのでしょうね?

Carl: 5歳くらい年下です。

Jonathan: なるほど、けっこう年齢が離れていますね。いいですね。それではExercismとカールさんの関わりに戻ります。今はPythonトラックのメンテナーをしているのですよね? はい、それともコントリビューターですか? コントリビューター、なるほど。いつかメンテナーになるとして。それはどうですか? その経験を通して学んだことは何ですか?

Carl: そうですね、Pythonトラックの人たちは本当に素晴らしくて、一緒に働くのがとても楽しいです。今はたくさんドキュメントを書いていて、ドキュメントの書き方を実際に学べますし、たくさん調べる必要もあります。だから、ドキュメントをたくさん書いて、ほかの人のドキュメントをたくさん読むことで、たくさん学べます。概念をとても深く掘り下げることになります。

Jonathan: それは、コントリビュートの一環として、特に楽しいですか?

Carl: はい、それに、そういったドキュメントを読み通すと、たくさん学べます。

Jonathan: いいですね。今Pythonにコントリビュートしているという点で、ElixirやRubyにもコントリビュートを始めたいと考えていますか? どう考えていますか?

Carl: そうですね、Rubyトラックへのコントリビュートは自分にできそうだと思います。でもElixirは、たぶんないですね。TypeScriptトラックにコントリビュートするという長期的な計画がありますが、どうなるかは分かりません。実際、これから6か月くらいはPythonトラックにいると思います。

Jonathan: いいですね。それでは、TypeScriptについて少し説明してもらえますか? どんなものなのか、ざっくり教えてください。聞いたことはあるのですが、JavaScriptを…固める、という話を聞きました。これもまた、完全に間違っていたら教えてください。JavaScriptを少し安全にチェックしてくれるようなものだと。でも間違っているかもしれません。TypeScriptとは何ですか?

Carl: 何かというと…そうですね、かなりいい説明だと思います。私はフロントエンドの授業を受けていて、先生はJavaScriptを使い、HTMLの中で基本的なJavaScriptを書いていました。そのコードをTypeScriptにコピー&ペーストしたら、TypeScriptが「いや、これはすべきじゃない。安全じゃない」と言ってきました。そういうところが多くて、コードを安全にする、という感じです。クラッシュを防いだりとか。型を導入するので、型の衝突が起きません。そして一般的に、安全なことをするように、危険なコードを書かないように教えてくれます。はい、別の言語ですが、JavaScriptととてもよく似ています。TypeScriptは、JavaScriptに鎧を着せたもの、とよく考えられます。守られている感じです。

Jonathan: なるほど、つまりそれ自体が独立した言語なんですね。私は、JavaScriptのプラグインのようなものだという印象を持っていましたが、実際は完全に独立した言語だと言っているのですね。

Carl: そうだと思います。とてもよく似ているので、同じでプラグインのようなものかもしれないけれど、私は独立した言語だと考えるのが好きです。いくつか重要な違いがあるからです。

Jonathan: JavaScriptのプラグインだなんて言ったら、世のTypeScriptファンを怒らせてしまったかもしれません。きっと面白い意見が飛び交うでしょうね。でもカールさんにとっては、TypeScriptの安全性の部分が、もっと探求する価値のある特徴なのですね。そうですか?

Carl: そうですね。実際に私がTypeScriptに惹かれたのは、使っていたReactのライブラリが普通のJavaScriptをサポートしておらず、TypeScriptしかサポートしていなかったからです。それでTypeScriptに慣れて、とてもいいと思うようになりました。型を使うとコードもより明確になります。たとえば、これは数値を受け取って文字列を出力するんだな、と実際に見て分かります。読みやすくなります。

Jonathan: なるほど、React Nativeの話が出ましたね。フロントエンドの開発とバックエンド、どちらが好みですか? 話を聞く限りバックエンドが好みのようですが。フロントエンドも少しかじったりしますか?

Carl: フロントエンドは少しやったことがありますが、CSSがとても苦手です。なので、たいていは良いUIライブラリを探してそれを使います。

Jonathan: CSSが苦手というのは、どういう意味ですか? 単に理解できないのか、混乱するのか、選択肢が多すぎるのか…どこが難しいのですか?

Carl: 難しいところは…オブジェクトに割り当てられるものがたくさんあって…たとえば、CSSやHTMLでリンクを作ると、テキストの下に線が入ります。それを消すには、text-decorationを追加して、noneと書かないといけません。そうすると線が消えます。そういう覚えないといけないことが本当にたくさんあります。CSSで一番面倒なのは、コードやCSSを一つ変えると、ほかの何かがよく壊れることです。だから、「よし、この問題は解決した」と思ったら、次はこの問題が出てきて、それも解決しないといけなくて、また…という繰り返しです。

Jonathan: では、問題を先送りにしているだけみたいなものですね。それはとてももどかしいでしょう。私のCSSの経験は、Reactを学ぼうとしたときのものだけです。変数、つまり選択肢がたくさんあります。広げるのか、制約するのか。そうすると、このボタンが変わる。気をつけないと、あっという間にすべてのコンポーネントが別々の動きをしてしまいます。ExercismのジェレミーはCSSが本当に得意ですが、彼はそのあらゆる側面を本当にたくさん知っているのだと思います。カールさんにとっては、フロントエンドはバックエンドほど楽しいものではないのですね。

Carl: フロントエンドのプログラミングの部分は問題ありません。でも、実際の見た目はあまり好きではありません。バックエンドは、少なくとも私にとっては、動いているなら壊すな、という感じです。

Jonathan: そう、触らないでそのままにしておく。人はどちらか一方を好む傾向があるのが面白いですね。バックエンドのどこが良いのですか? 動くだけでいい、というところが好きだと言いましたね。バックエンドの論理的な思考や処理が、一番楽しいところですか?

Carl: はい、好きなのは、ほとんどがロジックと、いろいろなデータベース構造の設計だからです。それだけと言ってもいいくらいです。データベースは得意ではないですけど。

Jonathan: いいですね。素晴らしい。それではカールさん、もういくつか質問があります。カールさんの出身や、何を楽しんでいるかについて知れて、とても楽しかったです。これからコーディングを学び始める人に勧めたい、いくつかのポイントを挙げてもらえますか? 理系のバックグラウンドがある人向けのヒントでもいいですし、そういうのを楽しむタイプの人向けでもいいです。でも、まったく別の立場から来るなら、継続してやるといいことは何だと思いますか?

Carl: 継続して、ですか。そうですね…まずは簡単な言語から始めるべきだと思います。RustやC++、Cから始めないほうがいいです。それから実際に…さっきも少し似たことを言っていましたが…問題を見たら、問題を読み通して、一度休憩して、どう解くか考えてから、戻って実際に解くのがいいです。脳に、どうやって問題を解くかを処理させる時間を与えるのは良いことです。もう一つは…あまり急がないことです。今少しやって、あとで少しやる。たくさんのコンセプト演習をいっぺんにやるより、その情報をじっくり染み込ませたほうがいいです。同じ日にすべてのコンセプトをやると、その時点では混乱するだけでしょう。

Jonathan: そしてそれがどう当てはまるか。なるほど。では、ゆっくり進めることですね。考える余地を自分に与える。ゆっくり進んで物事を深く定着させるほうが、速く表面をなぞるより良い、ということですね? そう言っているように聞こえます。

Carl: 言語によっては、文法と基本的なところだけ学んで、それから実際のシナリオに移って、そこで深く掘り下げていく、ということもあります。JavaScriptで言うと、私は基礎を学んでから、Reactのプロジェクトをやって、そこで少し新しいことを学び、言語をより深く理解しました。

Jonathan: いいですね。ではカールさん、今週もう一つ質問があります。今週のコミュニティへのおすすめは何ですか? 特別なおすすめです。何でもかまいません。雪の中を自転車で走りに行く、でもいいですし、凍えるほど冷たい湖に飛び込む、スウェーデンならサウナに行く、でもいいです。コミュニティへのおすすめは何ですか?

Carl: そうですね、雪の中を自転車で走るのは…とても大変だと思うので、それはおすすめしません。

Jonathan: はい。

Carl: でも、さっき言ったことを言いますね。行き詰まった問題があるなら、休憩してください。何時間も座り続けて無理に解こうとしないことです。少し休んでから、また問題に戻るほうがいいです。

Jonathan: いいですね。今週のおすすめは、何かを学ぶ必要があるなら、ゆっくりして、休憩して、コーヒーを飲む、ということですね。コーヒーは飲みますか?

Carl: まだです。

Jonathan: まだ。なるほど、では一生飲まない?

Carl: 私は水を飲むだけなんです。たぶんそれが私の特別なところでしょう。

Jonathan: いいですね。それはこれからの人生でお金をたくさん節約できますよ。素晴らしい。カールさん、今日はお話しできて本当に光栄でした。時間をありがとう、そしてさまざまなトラックへのコントリビュート、Exercismへの参加、本当にありがとうございます。ここ数か月、特に一緒に運営していたDiscordサーバーを通じて、カールさんのことを知れて本当に楽しかったです。ElixirのDiscordにいましたか?

Carl: コホートか、エキスパートですね。

Jonathan: はい、けっこうよく見かけた気がします。よかったですね。それに、コントリビュートしてくれてありがとう。素晴らしかったです。また近いうちに話せるのを楽しみにしています。時間を本当にありがとうございました。このまま通話に残っていてください、ここから締めます。皆さん、聞いてくれてありがとうございました。お話ししていたのは私ジョナサンと、そしてカールさんです。また近いうちにお会いしましょう。バイバイ。

Carl: バイバイ。

コミュニティのその他のストーリー

コミュニティのメンバーの話を聞いて、学び、刺激を受けましょう。