プログラミングがわからないとき

更新: 2021/07/02, 作成: 2021/07/02

みなさんこんにちは、かじりです。今回はプログラミングでわからない時の対処法です。読者としては転職しようとした初心者プログラマを想定しています。自分は工場勤務から転職してエンジニアになったので、最初の頃はほんとにわかりませんでした。そう言う時の対処法を書きたいと思います。いろんなわからないがあると思うので全パターンは書けないと思います。このパターンどうすればいいんだ??って時は自分のtwitterで聞いてもらえればお答えできるかもしれません。

何度やってもエラーが発生してプログラミングがわからないとき

自分も1ヶ月くらいエラーが発生して動かなかったことがあります。特に環境構築や新しいフレームワークを使う時です。このようなときに、ずっと同じエラーで詰まっていることがよくありました。この時の対処法を思いつく限り書いたので参考にしてください。下にいくほど経験や、かんが必要になるので上からみていくと良いです。

コピペをちゃんとしたか確認する

「コピペをちゃんとしたか確認する」ですが、色々試しているうちに変更の必要がないところを変更した可能性があります。その場合、目視や差分確認ツールで確認することがいいと思います。特に写経とかしているとちょっとタイピングミスしていた、なんてことがあります。なので動かない時はコピペ元を確かめてみてもいいと思います。

知っている人に教えてもらう

あなたが誰かに教えてもらった経験があればご存知かもしれません。知っている人に聞くと問題は一瞬で解決する可能性が高いです。なので,「MENTA」とか色々あると思うので使ってみましょう。知っている人なら本当に一瞬で解決してくれると思います。自分は心理的ハードルが高かったのと存在をあまり知らなかったので使いませんでしたがお勧めします。ある程度プログラマ経験があるひとならその言語を知らなくても、話してるうちに解決してくれると思います。書いてて思いましたが、自分も新しいものを学ぶときは頼った方が早いかなって思えてきました。心理的ハードルが高い方は自分にtwitterでDMいただいてもokです。質問して貰えば私の経験値にもなるんでむしろお願いします。

一つの解決方法にこだわら無い

別の手法を探してみることも大事です。もしかしたらサイトの内容が古くなっているか、書いた人の記載漏れの可能性もあります。なので1時間くらい調べたら、別の方法も検討しましょう。ただ、最初のうちは途中で諦めるという判断をするのが難しいです。なので目安として1時間試したら別のページも検討しましょう。自分の場合ですが、1つのサイトを参考に1日ずっと悩んでいました。これはやめましょう。ググっているなら1番目の結果だけでなく、2番目3番目、5番目くらいまでみてみましょう。

エラーメッセージをよくみる

「エラーメッセージをよくみる」ですが、エラーメッセージにはよくERRORとかWARNINGが先頭についています。ERRORは赤色、WARNINGは黄色で表示されていることが多く、ERRORの方が重要に見えます。しかし、WARNINGもみてみましょう。実はWARNINGに本当の原因が書いてあることもあります。自分も環境構築などで原因がわからない時にWARNINGをみたら解決したことがあります。

発生したエラーでググる

「発生したエラーでググる」ですが、例えばCATというフレームワーク(例です)が動かないときに「CAT エラー」とか「CAT 動かない」でググっても答えは出てきません。黒い画面(コンソールとかターミナルとかいうやつ)に出てくる長いエラーメッセージでそのまま検索しましょう。
例えば自分の経験としてはtigというツールを使っていてこんなエラーが出ました

tig: No revisions match the given arguments. (unknown revision or path not in the working tree.) 

これをこのまま検索しましょう。それで大体は解決します。

時々何も見つからないのですが、その時はエラーメッセージから不要な部分を除去します。ファイル名が不要なことが多いです。例えば以下のエラーがあったとします。

Unknown file name "/Users/kajiri/ghq/github.com/kajiri/github/vscode-plugins-2021.js"

この場合、"/Users/kajiri/ghq/github.com/kajiri/github/vscode-plugins-2021.js" が不要なことが多いです。理由として、

ことが理由にあります。ファイル名の部分は削除して、double quote(")も削除しましょう。これでいい結果が出てくる時があります。

google検索でわからないことがあれば、こちらの記事が参考になると思います

元に戻してみる

同じエラーが発生し続けて、しかもググってもわからないという場合、このままやっていても結果が変わらず、なかなかプログラミングが終わらないかもしれません。もし、もともと発生していなかったエラーだとすれば、エラーの発生していないところまで戻してもう一度書き直してみましょう。何か不要なコードを追加してしまった可能性があります。

一旦諦めて次に進んでみる

あなたがもしここまでの方法を試して解決しない場合、この問題の解決を一旦諦めて次に進むのはありです。ここでずっと悩んでいても解決する可能性は少なく、もしかしたらいつかわかる時がくるかもしれません。なので、会社じゃなければとりあえず諦めて次に進むこともありです。会社だと、これが必要なんだ!っていう場合があり、そう言う場合は避けられません、そこでググり力というか検索力が上がります。会社じゃなければ、まあいつかその問題にぶつかるので、その時にがんばりましょう!今はできるだけやったんです!

それでも諦められられないので粘る

上記で書いたように会社だと避けられない課題の可能性が高いです。そういう状況を想定して粘ってみるのもありです。しかし、なかなか根気がいリますし、進まなくて辛い、イライラしてくるかもしれません。それに、一人でずっと粘っても解決する可能性は低いです。どこかで諦めるのもありだと思います。

いったん寝たり休憩をはさむ

あなたは一つの問題に長時間対処してきました。もしかしたら会社の仕事が終わった後かもしれません。そういう時は頭が疲れていて、うまく考えがまとまらず、わからないところがわからないという状態になってしまっているかもしれません。よく寝て、翌日の朝ちょっとみてみたら、あれ?なんでわからなかったんだということは自分も経験があります。なので頭を休ませることも大事です。

本当の原因を探る

これは経験や、かんが必要になり少々難しいですが、今あなたはここが原因だ!と思っている箇所があると思います。そこを一旦全部削除してみましょう。そして動かしましょう。これで同じエラーが出る場合、あなたがここが原因だ!と思っている箇所ではなく、別の場所に原因がある可能性が高いです。

もし原因と思われる箇所を削除して、別のエラーが発生した場合は、原因になりそうな部分を半分消して動かして、半分消して動かしてを繰り返してみてもいいと思います。これでエラーメッセージが変わればそこらへんに原因があるかもしれません。

ソースコードを見る

これはちょっと難しく、限定的にしか使えないのですが、外部からimportしたプログラムが動かないとかいう時に、「ソースコードを見る」ことで解決できる可能性もあります。自分もこの方法を最初試した時は挫折しました。無理でした!。1行進むごとに知らない構文が出てきて、さっきどこまで読んだっけ?みたいになるからです。ブックマークしておいて時々読むとか、MENTAとかでわかる人に聞きましょう。

一応ソースコードをみる方法はいくつかあります。

プログラムが読めるようになってくればソースコード上から判断することも可能です。

初めてみるプログラミングでわからないとき

色々な方法でググってみる

例えばこれを初めてみた時は意味がわかりませんでした。この点々なに?って言う。

...[]

上記は自分がjavascriptを使っている時に対応した問題です。これをみると...が見えます。なのでググり方としては以下になります

javascript てんてんてん javascript dot dot dot

こんな感じです。こんなので出てくるのかっていう感じですが、出てきます。とにかく色んな言葉でググってみましょう

これでダメな時はググり方が悪い可能性もあります。検索する言葉を変えましょう。日本語使ったり英語使ったり、検索ワードの順番を変えたり、検索する期間を変更したり、double quoteで完全一致検索しましょう。大体は見つかります。

検索の方法はこちらの記事が参考になると思います

あと最初の頃は見逃していたのですが、Googleで検索した結果に出てくるStackOverflowの検索結果は、一つの下に5個くらい類似の記事が紐づいています。これらは割と正解なので、開いてみましょう。

ただ、これでもわからないことがあります。その時は スタイルガイドを参照してみましょう

スタイルガイドをみてみる

スタイルガイドは、こんな時どう書けばいいのか?を表してくれています。レアなケースも色々書いてあり、大体の構文は記載されてあるはずです。そのページを全文検索しましょう。chromeなら「command + f」 または 「ctrl + f」ですね。これで検索して見つからない構文は、まぁないはずです。

スタイルガイドをググって探すなら探し方は以下のようになります。

golang style guide, ruby style guide, javascript style guide, typescript style guide, laravel style guide みたいな感じです。1 2

みたことあるけど難しいプログラミングでわからないとき

例えば難しいものは、配列、オブジェクト、関数、メソッド、Class、this、instance、callback、非同期です。
こういうものをみているとわからないことだらけだなっていう気持ちになってきます。 こういうものはPlay Groundでたくさん動かしてみましょう

Play Groundっていうのはあの黒い画面(ターミナルとかコンソールとかいうやつ)をオンラインで実行できる便利なサービスです。

「自分の使ってる言語 playground」 でググれば出てくるはずです。

golang playground, ruby playground, javascript playground, typescript plyaground, laravel playground みたいな感じです。3

で、とにかく思いつく限りいろんなパターンを実行します。

JavaScriptなら「console.log()」、laravelなら「echo」とか「var_dump」とかを使用します。

もしJavaScriptで配列とか連想配列、オブジェクトがわからない時はこんな感じです。

// 配列
const a = [1, 2, 3];

console.log(a[0]);
console.log(a[1]);

// 連想配列
const b = [[0, 1], 2]

console.log(b[0][0]);
console.log(b[1]);

// オブジェクト
const c = {a: 1, b: 2, '2': 3}
console.log(c['a'], c['b'], c.a, c.b, c['2'])

laravel

$a = array('a' => 1, 2, 1 => 3);

echo $a['a'];
echo $a[1];

async, awaitの理解だけだと限界を感じてPromiseを勉強した時のコードが以下です。githubはこちら

import { rejects } from 'assert'
import {promisify} from 'util'

const promise1 = (b:boolean) =>{
  return new Promise((resolve,reject)=>{
    setTimeout(()=>{
      if (b) {
        resolve('ok')
      } else {
        reject('ng')
      }
    }, 2000)
  })
}

// https://ja.javascript.info/promise-chaining#ref-220
// thenハンドラは通常、返り値を直ちに次のハンドラにわたします
// しかし、promiseを受け取った場合にはpromiseの処理を待ちます

promise1(true).then(out => {
  console.log(out)
  console.log('then')
  // プロミスを返しているわけではないので次の処理に飛ぶ
  setTimeout(()=>{
    // 四秒後にconsoleが表示される
    console.log(2)
  }, 4000)
}).catch(err => {
  // rejectされないのでcatchに入らない
  console.log(err)
}).then(()=> {
  // プロミスなので2秒後に結果が返る
  return promise1(false)
}).then(ou=>{
  // rejectされるのでthenに入らない
  console.log(ou)
}).catch(err=> {
  // rejectされたのでコンソール
  console.log(err)
})

こんな感じで「何がわからないかわかっていれば」とにかく動かして納得できるまでやってみましょう。
途中で詰まったら、とりあえずネットから動くものをコピペしてきてそれを元に色々変更して動かしましょう。これできっと大丈夫!


最後に

最初は本当にプログラミングが辛いと思います。twitterとかみるとみんなすぐにできているように見えてプログラミングの自信がない。そんな風に考えてきてしまうかもしれません。しかし、やっているうちに、調べればなんとかなるようになってきます。そうなれば本当になんでもできるようになって楽しいです!その助けになればいいなぁ

こちらの記事も参考になるかもしれません

プログラミングのググり方

脚注

  1. JavaScriptのスタイルガイドだとこんなのがありました。 https://github.com/airbnb/javascript

  2. laravelのスタイルガイドだとこんなのがありました。 https://github.com/spatie/guidelines.spatie.be/blob/master/content/code-style/laravel-php.md

  3. JavaScriptのplaygroundだとこんなのが見つかりました。https://codesandbox.io/s/js-playground-ll8bj