[初心者向け]プログラミングは難しい[対策を紹介]


プログラミングは難しいと感じている初心者に、困難の乗り越え方を記そうと思います。
タイトルの通り、僕もプログラミングが難しいと思っています。

ちなみに、僕のプログラミングの能力は、先日初めてLancersでプログラムを納品してお金をもらうことができた、くらいのレベルです。
ばりばりお金を稼いでいるプログラマではなく、最近プログラミングの勉強を始めた方、プログラミングは難しいと苦しんでいる方向けに書きます。


さて、デバッグ(うまく動かないプログラムの修正)がうまくいくと気持ちがいいですが、たいてい、すんなりとはいきません。

わけわからん英語のエラー文をコピペしてググったり、リファレンスやドキュメント(プログラム関係の説明書みたいなもの)を読んだり、stackoverflowteratail,Qiitaなどを参照したりしますが、なかなか欲しい情報にたどり着けないことが多いです。
(日本語の個人ブログを漁るよりも、まずは英語であろうと恐れずに、公式のドキュメントを読んでみるのがいいと、わかってきました。)

ひとつの機能の実装に、僕は8時間程度かかったり、します。
つらかったりイライラしたりすることもあります。

プログラミングの最中に生じたイライラの発散方法としては、ディスプレイに中指を突き立てるうめく、近くのものに相談する(アヒルのおもちゃなど)、「にゃーん」と なるべくかわいく言う、などがあります。


偉大な先生



デバッグの大変さ、プログラミングの難しさに
僕が打ち勝てる理由を3つ書きます。

・必ず解法があると信じている
・仲間がいる
・自分の実力へのちょっぴりの自信

補足します。

僕は、現在、Python、HTMLとCSS、をそれぞれ2週程度しました。
(いずれもプログラミング言語の名前)
その他、本を読んだり、エンジニアの先輩から教えてもらったり、ググりまくったり、Lancersの案件を見て受注できそうなものを試しに書いたり、うめいたり
しながら、勉強しています。

今は、Localを使って、WordPressのサイトを作り、サイトを自分の思うがままに作るための練習をしています。

HTMLやCSSを、ある程度勉強したけど、作りたいものがないプログラミング初心者の方は、かっこいいな、と思ったサイトを真似してみるといいと思います。

ブラウザがChromeなら右クリック+検証でページのHTMLやCSSが読めるはずなので、これを参考にマネするのですが、詳しくは別の記事で書こうと思います。

他の言語でも、自分でなにか作ってみるのは、とても勉強になります。

Progateなどで、初歩的なことは抑えたつもりでも、いざ作りたいものを作ろうとすると、しょっちゅう僕は行き詰まります。

「知っているつもり」と「使える」には隔たりがあるからです。
学んだはずのことを忘れていることも多いです。

先日、Lancersで、ライティングの案件を受注しました。
複数の電子書籍サイトで、指定された作品を取り扱っているかなどをサイト内で検索して、与えられたWordPressアカウントで記事にまとめて、納品する仕事です。

この検索をいちいち手入力で行うのがめんどくさかったので、自動化するプログラムを作ろうと思いました。

「作品名」をプログラムに渡すと、僕があらかじめ指定している電子書籍サイトのすべてに自動でアクセスして、作品名で検索してくれるプログラムを作りたいと思ったのです。

でも、なかなか思うようにいきません。

Windows10+Chromeなら、「Ctrl +t」で新しいタブを開けます。覚えてしまえば便利な、いわゆるショートカットキーです。
(Ctrl+C,Ctrl+Vなどはコピペに便利で、エラー文をコピペするときに楽になるので、ショートカットキーを知らない方は最低、この2つは覚えましょう。)
ショートカットキー「Ctrl +t」 を使えば、僕は新しいタブを簡単に開けます。
Macなら「comand + t」ですね。

でも、僕はこれをPythonのプログラムに実行させることがなかなかできませんでした。ただ新しいタブを開くだけなのに。

ググって、リファレンスを見て、リファレンス通りにやったはずなのに、意図したとおりに動きません。Qiitaを見てもうまくいきませんでした。

それでも、あきらめずにコードを書き続けられたのは
ー 調べたり、エラー文をよく読んだり、自分のコードを少しずつ変えてみたり、自分のプログラム内にprint(“you are smart”)と打ち込んで、このprint文の位置をちょっとずつ変えて どこまでは正しく動くのかを確かめたりし続けることができたのは
ー 正解があると確信していたからです。

マウスやキーボードがあれば簡単にできる、「新しいタブを開く」という動作が、僕にできてPythonにできないわけがない。

言ってみれば、Pythonへのリスペクトですね。
賢い先人が慎重に作り上げたプログラミング言語には、途方もない重みがある。
マウスやキーボードで簡単にパソコンに指示できる動作を、Pythonにできないはずはない。そう考えたのです。
答えがある問題で、その答えには自分にとって価値がある(勉強になる、プログラムを作れたら便利、解いていて楽しいなど)なら僕は頑張れます。

しかし、Pythonがコンピュータに命令できるのと、僕が自分の目的とするPythonのコードを書けるかは別の話です。
書けるようになるためにどうしたか。

めちゃめちゃ調べました。
幸い、僕の周りには、プログラミングを勉強中の方が複数いますし、中には僕よりもはるかにプログラミングが得意で、質問すれば大体の悩みを解決できるような方もいます。

でも、すぐに質問するよりも、いろいろ自分なりに試してからの方が、質問の質が上がります。

(例1)

Aさん:「Pythonが分からないんですけどどうすればいいですか?」

→Aさん改:「Python3をwindows10で使っています。seleniumを使って新しいタブを開きたいのですが、どうすればよいですか?さっきseleniumのこのリファレンスを参考に[ctrl+t]を押そうとしたのですが、うまくいきませんでした。自分の作成中のプログラムもお見せします。」
(/例1終わり)


調べている内に 自分でも、どこまでわかっていて、どこからが分かっていないのか整理され、質問の質が上がります。

そもそも調べ方がわからないという方もいると思います。僕もそうなることがよくあります。

その場合でも、自分が何をしたいのかは、できるだけ、質問する相手にきっちり説明できるようにしましょう。
「windows10でPythonとSeleniumを使ってChromeの新しいタブを開きたい」
みたいな感じです。

さて、(例1)の話ですが、前者の質問、

「Pythonが分からないんですけどどうすればいいですか?」

では、問題は解決しづらいし、やや極端に言えば、「勉強してください」とし答えられません。
やさしい方なら勉強方法のアドバイスはくれるかもしれません。
Progateがおすすめです」とか。

後者の質問ならどうか。

「Python3をWindows10で使っています。Seleniumを使って新しいタブを開きたいのですが、どうすればよいですか?さっきseleniumのこのリファレンスを参考に[ctrl+t]を押そうとしたのですが、うまくいきませんでした。
自分の作成中のプログラムもお見せします。 」

プログラミングが得意な方、Seleniumやpythonを知っている方に聞くなら、問題を解決できる可能性が 前者に比べてぐっと上がります。
結果的に、相手の時間も、自分の時間も短縮できます。

僕は結局、自分で調べまくった結果、誰にも質問することなく、当初作ろうと思っていたプログラムよりも、よいプログラムを作ることができました。
あの日の僕が 誰かに、神はいるかと問われたならば、stackoverflowで見た、と答えたでしょう。

プログラミングを勉強している人や、プログラミングが得意な人が身近にいると心強いです。
自分が知らないことでも、勉強仲間はよく知っている、ということがあります。
教え合ったり、作ったものをたたえあったり、助言しあったりできるといいですね。自信になります。

疲れているときや、デバッグ(プログラムの修正)が全然うまくいかない時でも、質問したり、相談したりできます。

え?
そんな人が周りにいない人はどうしたらいいのかって?

俺がいるだろ(イケボ)
こんなの作れました!みたいな報告など、気軽にtwitterのDMで言いに来てください。
ほめたたえます。

僕なんかではなく、指導がうまい人に教えて欲しいということであれば、UdemyCodeCampがあります。 下の記事も参考になると思います。

[初心者向け]プログラミングの勉強法[おすすめ]

stackoverflowteratail,Qiita では質問もできます。
twitterで#progateと調べれば、progateで勉強している仲間がたくさんいます。なんならProgateを作った人もtwitterにいます。

ココナラskillhacks、TechAcademyなど、プログラミングの指導をしてくれるサービスはたくさんあります。

自分に自信を持つのも大切だと思います。
「どうせ自分は初心者だからわからない」と思いながら調べるよりも、「自分の調べ方はまだあまりよくないかもしれないけれど、答えは絶対にあるはずだ。」と思いながら探している方が、情報を得やすいです。





唐突ですが、身の回りにある赤いものを探してください。



見つけましたか?



では次は、青いものを探してください。



僕から、質問です。
赤いものを探している間、青いものの存在を意識していましたか?
見つけられましたか?

欲しい情報はどうせ見つからないと思って調べていると、どうでもいいものばかり目に入るし、きっと見つかると意識して探すと、いいものを見た時に、それが自分にとって必要な情報であると認識しやすくなります。

つまり、何を知りたいのか、自分自身ではっきり認識してからGoogleなどで調べ始めましょう。
きっと欲しい情報は得られるはずだと、期待や自信を持ちましょう。
わからなかったら、知っていそうな人に聞けばいいんです。
いったん放置して別の勉強をしているうちに、こうすればいいのでは?と解決方法を思いつくこともあります。あまり深刻にならずに、勉強を楽しみましょう。

僕は、Lancersでアフィリエイトの為にサイトをスクレイピングしたいという方の依頼をこなし、お金を得ることができました。
この時の、苦労してコードを書いた経験が、いま、自信になっています。
プログラミングを共に勉強していたり、助言したり、質問に真摯に答えてくれる仲間の、優しさや何気ない誉め言葉が、僕の糧となっています。
ありがとうございます。

初心者の内は、つらいことが多いですが、やり切ると、達成感があります。
ひとつ、ひとつ、一歩一歩、こなしていきましょう。
さぼったっていい。また気が向いたらやり始めればよいのです。

自分が知らなかったことを知る快感や、意味不明な文字の羅列にしか見えなかったエラー文からエラーの原因を特定できた喜び、こういう小さな感動の積み重ねが、僕らをエンジニアにするのでしょう。


twitterでも、プログラミングのことをツイートしたりするので、よかったらフォローしてください。質問や相談、作ったものの自慢も歓迎します。