黒輔処理場

ゆっくり更新中

できないのは本当に「プログラミング」なのか

どうも、黒輔です。

 

f:id:kurosuke303:20190109103801j:image

はてなブログのトップってよくSEの記事が載ってますよね。

大半は読んでもよく分からんのでスルーしちゃうんですけど、たまたま目に留まった記事がありました。

勝手に引っ張って良いのかよく分かりませんが、まあ弱小ブログだし目には留まらんだろう

 

本当に諦めて刺身にタンポポ乗せたほうがよいのか(その1 プログラミングの勉強の順序の話) - Lambdaカクテル

お前は絶望的にプログラミングに向いてないから諦めて刺身にタンポポ乗せる仕事でもやってろ|古都こと|note

 

 

 できないのは広義での「勉強」では?

下ははてなではなくnoteの記事で、上がトップになってた、noteへのレスポンス記事です。

noteを要約すると、たぶん大体以下のようなことを仰っています。

僕はプログラミングについての知識は全く無いので、専門的な部分はよくわからないし、間違った解釈をしてるかもしれませんが、一応下記の通りだと思います

 

・大学で4年(+院で2年)勉強してるのに、できるようにならない

・そもそも勉強法が分かっていない、向き合い方が間違っている

・読解力が致命的に欠落している

・自分なりの咀嚼ができていない

・質問できないor仕方が悪いorどこが分からないかもわからない

 

上辺だけなぞってみると、失礼ですが、プログラミングができない人っていうより勉強ができない人の特徴という感じがあります。

なんで中高で勉強してるのに英語できないのとか、中学生の半分が教科書の日本語を読めないらしいとか、そういった次元の話ではないかと。

 

www.kurosuke404.com


 

www.nikkei.com

 

「6年プログラミングを勉強しても、ミットを被ってるバッターみたいな奴がいる」

 

これを一般的な学校の勉強に変換すると、高校の宿題でアルファベットの書き取りが出るとか、大学の英語の講義でbe動詞の解説がされるとか、数学であれば謎の式変形をして0=6みたいな結果になるとか(記号の意味わかっとらんのか)。

「え、0=6って・・・何?」「・・・・・・・・・分かんないです」みたいな。

 

とにかく基礎からガタガタな人が沢山いて、恐ろしいのはそういう人たちが社会でSEを名乗って仕事している。

(Be動詞が分からん翻訳家は多分いないと信じたい)

SEは人手不足だとよく言われていますが、多分見た目以上の、まともにお仕事が出来るSEの不足が深刻なんじゃないかなー。

 

なぜエラーメッセージが読めないのか

一番興味深いのはエラーメッセージが読めない、といった所でしょうか。

この問題は4つに細分化できると思います。

 

1. 英語が読めない

2. 和訳できてもその意味が分からない

3. 意味がわかってもやることが分からない

4. やることが分かっても具体的な方法が分からない

 

Variable ‘a’ is undefined. というのは文構造的にはThat dog is big.と同じごく単純なSVC構文なんですが、これがどうしてか、知らない単語が出てくるからか、読めないんだそうですね。

(variableもundefinedもその道を勉強した人なら知ってるんじゃないの?って単語ですけど)

単語分からなかったら思考停止せずとにかく辞書引くべきですね。

考えても分かるものではないのだし・・・

 

さて、「エラー:変数aが未定義です。」と和訳できました。

(わざわざ和訳するほどの英文なのかってのは置いといて)

 

次に、「この日本語文の意味を理解する」という関門があるんですが、言うまでもなく変数が何か(一般的な意味と、自分が書いているコードにおいて問題になっている変数はどこか)と、未定義とは何かということを理解していれば良いのですが、ここで止まってしまう人は察するに、自分が何をやっているのかを理解しておらず、ただ漫然と?教科書丸暗記したとおりに?やってしまってるのかな・・・といった感じです

(分かりませんけど)

 

エラー文の意味が分かったら、やることは簡単で、変数aを定義すれば良いんですが、ここで止まってしまうのはどういうことなんだろう。

場合によっては、「起きてる問題は分かったけど対処法がわかんねー」ってことも有り得るんですがこの場合は明白かなと思います。

ここは自分の中で煮詰め切れませんでした。

 

さて対処法が分かっても、具体的な手の動かし方が分かるとは限りません。

木材が長すぎる、という問題があるからノコギリで斬ることで対処しよう、でもノコギリの効率的な使い方がわからんぞ、ということが有り得るわけです。

 

この場合、分からないなりに自己流でやるのは危険ですし、運よくうまくいっても何かをロスしている可能性がありますね。

手っ取り早く且つ確実なのはその道の人に聞くことです。

それができなければググる。あなたの目の前にあるモノ(もしくは手でスイスイ操作してるモノ)はせっかくあるなら有効活用すべきです。万全を期すならググった上で複数人に聞いてみるとか。

 

もちろん同じことを何度も聞くのはそれはそれでアカンので、その場しのぎではなく、しっかりメモ取るなりして自分のモノにすべきです。

 

 自分がどこで引っかかってるのか理解しない限り、「エラーメッセージが読める」ようにはなりません。

読解力の問題に関してはより的確に指摘されている増田さんがいらっしゃるので貼っておきます。読んで下さい。

anond.hatelabo.jp

「自分で考える」と「分からない事は聞く・調べる」は両立させて良い

変数に名前をつけろ。関数に名前をつけろ。クラスに名前をつけろ。全てに名前をつけろ。

C言語の古い教科書だと「a」とか「b」とか「i」とかで書いてるけど、そんなの人間が読めるわけねえだろ。冷静に考えろ。「input」「output」「index」とかにしとけ。

教科書そのままソックリにやるんじゃなくて自分で分かりやすいように咀嚼・アレンジしなさいってことで良いんでしょうかね。

こういうのって性格はそれなりにまじめだけどイマイチ成績が良くない人にありがちな感じがしますね・・・

教科書を読んで・覚えて分かったつもりになるけど、自分の言葉で簡潔に説明できる?って聞くと、口ごもっちゃうみたいな。

実のところ、それができなければ対象を理解しているとは言い難いですね(うわぁ、自分で自分の喉にナイフ突き立ててるぞコイツ)。

だから、自分の中で咀嚼できるようになるまで、実感として分かるまで、考えたり実際にやってみたりせねばならないんですよね。

 

その上で実践してるときに壁にぶつかったら、大抵の場合は聞くなり調べるほうが早いです。

プラモデルの場合、「ここの改造はどうすりゃいいんだ?」って疑問に思ったら、ググるなり雑誌作例漁れば1件ぐらいは解決法が出てきます。

もしくは、知り合いのモデラーに聞けば「自分ならこうするかな」といった回答を得られるでしょう。

このとき重要なのは、「自分が何が分からないのか」をしっかり考えて認識することです。

それが出来ないと質問された側が回答に困ってしまう。

結局のところ、何をするにしても「考えながらやる」というのが大事なのかなと思います。

 

おわりに

「学校の勉強なんて役に立たない」とか「大学で学んだことは仕事に関係ない」という方はよくいらっしゃいます。

確かに、知識を直接活かせる場というのは限られるかもしれません。

実際就活して社会人に会ってみると、経済学部や法学部出身の方でも大学での専攻を活かしてる方というのは実はそこまで多くないし、逆に大手SIerだとプログラミング未経験者でも広く採用してます。

 

「勉強なんて・・・」という言説に対して、頭のいい人やその道の人が「いや、その知識はこういう所に役に立ってますよ」というのはある意味真っ当な反論ですが、恐らく、勉強に悩む中学生や勉強が苦手だった大人には「どうせそんな仕事には就かない」「俺は使ってない」と暴論を投げ返されて終わってしまうでしょう。

 

それよりは、勉強する過程そのものに意味があると僕は考えます。

就活の自己PRではよく、「成果・実績・経験そのものより過程とそこで得たもの」を強調しろと言われます(もちろん、何かしらの経験があることが前提です)が、それに似ているかもしれません。

少なくとも学校の勉強では、論理的思考力、計画遂行力、向上心、粘り強さ、数字の上下に一喜一憂しない、など、の力が得られるはず。

ただ、ここでも考えてやるってのは大事で、いくら実績が出ていても親のいいなりで中学受験して周りに流されるまま大学受験して〜って感じだとちょっと黄色信号かもしれません。

 

何が言いたいかというと勉強することはそれなりに意味があるし、考えてやること(なんとなくやらないこと)は大事だし、読解力はつけたいな、という事でした。

 

これ以上語ると取り止めがなさすぎるのでここら辺で締めにします。

 

読んでいただきありがとうございました。

まとめるのに3日ぐらい掛かったし専門外のことに口出すもんじゃねえなあ・・・