読者です 読者をやめる 読者になる 読者になる

paiza開発日誌

IT/Webエンジニア向け総合求人・学習サービス「paiza」(https://paiza.jp ギノ株式会社)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

プログラミングの勉強を始めたときに、文系が挫折しやすい7つのポイント

f:id:paiza:20161205213057j:plain
Photo by Moyan Brenn
f:id:paiza:20140916135428p:plainこんにちは。谷口です。

ITエンジニアの転職やプログラミング学習に関する仕事をしている私ですが、学生の頃は文系の学部に所属し、プログラミングには全く触れたことがありませんでした。

新卒の時はそんな状態で、自分に特性があるのかどうかもよく分からないまま、面接をしてくれた人事担当者の「プログラミングは研修を受ければできるようになるから大丈夫」の言葉を信じて、受託開発をしている企業に入社しました。

そして新人研修で生まれて初めてプログラミングに触れ、勉強する中で、一歩進もうとする度につまずき、進んだと思ったら二歩前に覚えたことを忘れ、ということを繰り返しながら、何とか働いてきた時期がありました。

プログラミングのプの字も知らなかった新人の頃にどこでつまずいてきたかを思い出しながら書いてみたいと思います。

■代表的なつまずきポイント

◆1.Hello Worldの段階からつまずく

研修で最初に勉強することになったのはC言語でした。(今思うと恐ろしい)。まずはHello World」を出力してみましょうと言われました。何はなくともHello World。この世はHello Worldから始まる。

#include <stdio.h>
 
int main(void)
{
    printf("Hello, world!");
    return 0;
}


言われた通りにここまで書いた瞬間に思いました。

自分はプログラミングに向いてない気がする。

なんかまず括弧の種類が多い。多分、明確な作法があってどこでどれを使うか決まってるんだろうけど、それを理解して覚えられる気がしない。

なんかインデント下げなきゃいけないらしい。自分で。テキストで。Wordだったら勝手に下げてくれるのに。

そもそも我々はなぜ"Hello World"と出力する必要があるのだろうか。これは誰がどこの世界に向かって語り掛ける"Hello World"なのだろうか。テキストで打ち込んだ"Hello World"と何か違いがあるのだろうか。

ちなみに隣の席の理系の同期は一瞬で出力して喜んでいた。何が嬉しいんだ。何も嬉しくない。テキストで打ち込んだ"Hello World"と何が違うんだ。

◆2.おまじないと言われてつまずく

"Hello World"のために最初に書かねばならない「#include <stdio.h>」とは何なのか

なんかこう、 まあ、printfで出力ができるのは何となく分かる。printだから。(fは何なのかよく分かんないし、何で要るのかよく分かんないけど。研修の講師役の気の毒な先輩に聞いたら「そういうもんだ」と言われたけど。そういうもんだとは何だ。fって何?何のf??future???printf???未来を????映し出す??????)

でも「#include <stdio.h>」って何。スタジオ?スタジオHってどこのスタジオだよ。(stdioがスタジオじゃないと知るまでにかなりの時間を要しました)講師役の先輩は「今はおまじないだと思っておけばいい」とか言う。

おまじないって何だ。

おまじないってあれじゃないですか、消しゴムに好きな人の名前書いて使い切ったら両想いになれるかもしれないっていうやつじゃないですか。私の中でおまじないってそういう認識なんですよ。要は効くかもしれないし効かないかもしれないっていう認識なんですよ。効くかもしれないし効かないかもしれないものならなくてもいいじゃないですか。絶対に必要なものなら、せめておまじないじゃなくて絶対に効く超強力魔法とか何とか言ってほしい。何に効くのか分からんけど。

あとなんかmainも、ここがメインになるというようなことだと思うけど、intとか、(void)とか、よく分からんもんがいろいろついてる。

そう、なんかプログラミングって……何でつけるのかよく分からんもんがいろいろついてる……。(第一印象)

◆3.型でもつまずく

えっ何でこんなに種類があるの?

浮動小数点って??浮くの???

何でも入る型一個作ったらそれでいいのでは?

◆4.セミコロン閉じでもつまずく

描いたコード実行するたびにセミコロンを必ず忘れている箇所があってエラーが出る。

何で要るんだこのセミコロンは。ひと手間増えるじゃないか。行の切れ目が文の切れ目とかいうことでいいじゃないか。

◆5.ループではもちろんつまずく

なんか条件によって処理を繰り返すfor文というものがあるらしい。

#include <stdio.h>

int
main()
{
 int a;

 for (a = 0; a < 11; a++) {
     printf("a\n");
 }
}

もうだめだ。なんか条件のところに3つも書かないといけないし。何だこれは。何を意味してるんだ。

「a = 0;」お前はまず……何でほとんどここで0を設定されるんだ。1じゃ駄目なのか。「a < 11;」お前はなんか……先に出てくる「a = 0;」でaを0にされると、次の「a < 11;」で設定すべき数字と等号不等号はどれが正しいのかよくわかんなくなる。実行してみると大体間違えてるから、1減らしたりする。これ2億回やった。

あとif文の()の中にセミコロンはいらなかったけど、for文はいる。多分()の中に3つもあるから……と思って全部につけたら「a++」はセミコロンいらないって、もうどういうことなん……

while文は繰り返し条件が1つで済むぞ!やったー!while文大好き!!と思ったけど変な条件を設定して無限ループ突入したことが6億回あります。

そもそも、構文もそうだけど、何で繰り返す必要があるのかよくわからない。どういう時に使うのかイメージがわかない。繰り返すことに何の意味があるのだ。同じことを繰り返してばかりでは、人生前に進めないではないか。

◆6.配列でつまずかないわけがない

もう二次元配列ともなると、何をどこにしまったらいいか分からないし、何がどこにしまってあるかも分からない。そもそも配列にしまう必要性も分からない。

◆7.ポインタで自我を見失う

もう既にうまく例示もできません。

アスタリスクはお前……お前さっきまで掛け算の演算子みたいな顔してたくせに何なんだよアドレスって……&もお前……さっきまで論理積みたいな顔してたくせに……。

同じ記号で全然違うものを表現するのはやめてほしい。大体何でアドレスが必要なんだ。何に使うんだ。難しいし、難しい割に何の役に立つのか全然分からん。

■自分なりに考えた、プログラミングでつまずいた理由

ざっくり言うと自分は「プログラミングの勉強自体が目的になってしまっていた」ことがよくなかったと思います。

そもそもの目的が「こういうシステムが作りたい」「アプリが作りたい」とかではなく、「研修でプログラミングを勉強する」ということになっていました。

プログラミングを「利用」して何かを作るということまでを考えていなかったので、一つひとつが何の役に立つのかもよく分からないまま勉強していました。そら上達せんわ。

また、学校の勉強みたいに、基礎→応用で上達できる、基礎固めをすればいつか使えるようになると思っている節もありました。今思うと、「何か作りたいものがある」という動機があって、それに必要な部分を必要に応じて調べて、作ってみる……というやり方が一番効率がよい気がします。

■まとめ

上記は当時、初めてC言語でのプログラミングに触れたときの私の気持ちですので、思慮の浅さにつきましてはご容赦ください。今ではもうちょっとだけプログラミングできます。C言語じゃなくてPHPですけど。ワタシPHPチョットデキル。C言語ハデキナイ。研修以外でC言語で開発した機会はないです、ないけど研修はC言語だったんです。

一般に、文系の人は「何故これをする必要があるのか?目的は何なのか?何を意味しているのか?」といったことを気にしがちだと思います。特に学習を始めたばかりの文系の人は「とりあえずこれはおまじないだから」「そういうもんだからそういうふうに書いておけばいい」といったことでつまずきがちなのではないかと思います。逆に理系の同期には、プログラミングが動く原理に興味があったり、思った通りに動かせることに喜びを感じていた人が多かったように思います。

当時は「何と自分は出来が悪いのだ」と思いながら、いにしえより伝わる社内製の研修用教材だけを使った研修を受けていました。最近では、分かりやすく楽しい無料のプログラミング学習サービスがかなり充実しており、本当にいい時代になったと思います。

paizaには、オンラインでプログラミング学習ができるパイザ・ラーニングという無料コンテンツがございます。動画でPHPを使ったプログラミングが学習できる未経験者向けレッスンを無料で受講することができますので、ぜひごらんください!PHP入門編1:プログラミングを学ぶ

本当にプログラミングを全くやったことがないんだけど、大丈夫なの?」という方でも安心してチャレンジしていただける内容になっております!

PHP入門編1:プログラミングを学ぶ

f:id:paiza:20150225112328p:plain




paizaではITエンジニアとしてのスキルレベル測定(9言語に対応)や、プログラミング問題による学習コンテンツ(paiza Learning)を提供(こちらは21言語に対応)しています。テストの結果によりS,A,B,C,D,Eの6段階でランクが分かります。自分のプログラミングスキルを客観的に知りたいという方は是非チャレンジしてみてください。

http://paiza.jp

プログラミング入門講座|paizaラーニング

PHP入門編Ruby入門編Python入門編Java入門編JavaScript入門編C言語入門編C#入門編アルゴリズム入門編