ハチワレヨンブログ

プログラムの初心者へ、プログラムを教えるのが初心者へ、

プログラムに向いてるのはどんなひと?

いや、違うこんなに堅い感じでやりたいわけじゃないんだ!!

どうしてこんなことに、、 企業向けの研修資料を作る片手間でブログを書き出してしまったからだ、きっとそうだ。 もう少し無理のない言葉使いでやっていきますわ。

プログラマーに向いている人はどんなに人?

一つ前の投稿で書いた通り向いてる人は極論「習得できるまでやめない人」ってことになりますが、 その習得できる時間が短い人、長くかかっちゃう人の結構違います。
逆に2,3ヶ月勉強して向いてないからやめようって人は先輩エンジニアからしたらもったいないな〜と思いますが、 やる気がなくなったってことなら第三者がなにを言ってもしょうがないねとしか言えないですね。

※経験上、丸1年以上やらないで向いてないと思うのは単純に努力不足、勉強不足が多いデス。

習得できる時間が長い、短いの差はどこからでるのか、、

プログラムを好きな人?

まずぱっと向いてる人で思いつくのはプログラムを好きな人ですね。 「好きこそものの上手なれ」です。

ただプログラムを楽しめるくらい書ける人な気もするので向いてる結果でもあるかなと。 ただ圧倒的に習得する時間というより期間は短いですね。

だって好きだからずっとやれるから。

向いてる向いてないでもおそらく初心者では2倍も最初の効率で差は出ないと思います。
でも時間の使い方で2倍使うということはありますね。

多少の学校などでやったことがある経験者が逆に油断して研修では研修時間だけやって土日自分で大してやってこないってことがありますが、未経験者が家でも復習しまくって経験者を進捗で抜くってことはよくあります。

好きじゃなくてもモチベーションを保てて時間かけれれば追いつけるってことですね。

数学が得意な人?

これはよく他業種の人から受ける質問。
これもある程度のところや分野によってはそうだけど初心者時点では最低限の算数の知識くらいで対応できるくらい。

僕は都内のプログラムスクールの説明会や無料体験会にいくのが趣味で本当によければ受けもするんですが、
あるスクールで未経験者だと勘違いされて1対1でスクールの説明を受けたことがあります。

説明員は明らかにそこのスクール上がりで多分実務でプログラムはやってないだろうなという方 (横澤夏子を10歳若くしたみたいなやつ)

背景
Ruby(RubyonRailsのカリキュラムがメインでできればRubyをやりたいと言わせたいらしい。

Rubyの良いところをいっぱい挙げたあと、

説「ということでRubyは最初のプログラム言語としてはベストなんですよー」
僕「(最初のプログラムじゃないんだけどな、、まあいいか)なるほど、僕としてはPythonをやってみたいと思ってたんですよね、Pythonはできないですか?」
説「Pythonはダメですよ、微分積分とかそれ以上の数学の難しい知識がないと覚えられないですよ、おすすめしませんねー」
僕「(はぁあああ、嘘こけ)え?そうなんですか?言語仕様がそうなんですか?」
説「そうなんですよー」

僕も初心者だと言いそびれたし文句言えないが、もし初心者にあの説明をし続けているのだとしたら恐ろしい。
(余談だがRuby on Railsのこともデザインテンプレートと紹介していた。なめくさっている)

ということで本当に言語仕様として微分積分の知識がないと無理ならプログラマーも数学が得意じゃないと無理だろう。
ただそんなわけない。

Pythonという言語は集計や今はやりの機械学習なんかでよく使われる言語だ。
微分積分を使うシステムを作るなら微分積分は出てくるだろうけど、それはどの言語でも変わらないし、例えばブログのシステムを作ろうだったり、ショッピングサイトを作ろうとなった時に微分積分を登場させる設計は僕には思いつかない。

数学が得意じゃないと作れないものを作るなら数学が得意じゃないとだめなだけだ。

英語が得意な人?

これはあるかもしれない。

プログラム言語は英単語が元になっている。
よいプログラムは英語のように読める」というのは通説でもある。

あとはプログラムのドキュメントも少し専門的になってくると英語のドキュメントしかなかったりする。
ドキュメントを読むのに時間がかかりながら最初から英語ができる人が羨ましいと思うことが何度もあった。

ということで有利だし、変にアレルギーがなくスムーズに知識吸収できるだろう。

ただプログラム勉強のために英語を勉強してからといういうのも遠回り過ぎだし。
英語が苦手だろうがプログラムを覚えたいならプログラムから勉強したほうがいいとも思う。

出てくる単語はそこまで難しくないものも多く中学校英語で十分だし、結局IT業界用の単語の使われ方をしていることがほとんど。 それに最近のGoogleの翻訳は頼もしい。

英語もプログラムも勉強したいという人はなるべく英語でドキュメントを読んだりしていけば効率がいいかもしれない。

素直で機転が利く人ははまらない 

個人的に思うのは素直で機転が利く人は習得が早いというか変なところではまらない。

初心者がプログラムを学習する上で一番最初にやってくるハードルは「どこがエラーなのかわからないがエラーで動かない」だろう。

昔僕が初心者だったころ、あるファイルに書かれた文字をプログラムが読み取ってその文字を使ってなにかする、みたいな演習をやっていたとき、プログラムでファイルを読みにいけず半日以上悩んだことがあった。

結局、問題は「ファイルの名前を間違えていた」だった。こんなんで何時間も潰すなんてのはざらにある。
その時思ったのがなんでファイルの名前は合っていると思い込んでいたのか、ファイルがないよってエラーが表示されているのに。
だった。

固定概念を捨てて全てを疑って一個ずつ確認していけばよかったと反省し、しばらく部屋の壁に「すべてを疑え」と書いた紙を張っていた。久しぶりに遊びにきた友達に変に心配された。

「機転が利く」というのはどこが間違っているのか確認する方法をすぐに考えついたり、段階的にどこまであっているかを調べようとしたりという機転だ。あとは基礎というかルールを元に、じゃあこれは同じルールだとすればこうなんじゃないかと想像できる人でもある。

プログラムの知識というのは膨大で暗記しようと思ってできるものではない、それを暗記せずに書いてある場所を覚えようとか、パターンを覚えようと思う人は伸びが早い。例えるならなんかの試験で先に過去問やってなんとなく掴める人。

あと「素直」というのは教えられている時に特にでるが、 「言われた通りのやり方をまずはやってみる」、だったり
プログラム言語のルールだったり規約にいちいち「なんで?」と思わず「へぇー」となって変に考えすぎない だったり。
「なんで?」派は突き詰めればすごいとこまで行きそうだけどただ頭堅いだけの人のほうが多いイメージ。

ということで

色々書きましたが、結局は時間かけないといけないので時間を書けるモチベーションを持ってるかどうかが結局大事ですね。
環境とか一緒に勉強する人とかご褒美とか色々工夫してやるしかないし、これってプログラムの勉強にかぎらないですね。

ことプログラムの勉強でいうと資格とかに限らずその技術をそのまま仕事にできるとかの違いくらいかと思います。

※資格勉強から始めるべきかという話はまた別にしたいですね。

プログラムを書けるようになる人、ならない人

しょっぱなからそもそもな話をしたいんです。
ある意味一番大事なんで。

プログラムを本当に書けるようになりたいのか、です。

極論ですが、プログラムは誰でも書けるようになると思います。

ただし時間が無限にあれば、、

人は有限の時間しかありませんよね、言い換えると自分がプログラムの学習に割ける時間の中でプログラムを習得する必要がありますね。
※習得と一言でいっても、それぞれが目指すプログラムを使用する目的によって習得すべきレベルが変わります。

自身の目的とそれにどのくらいの時間がかかるか、
それは本当に自分が時間を割くというコストに目的が見合っているのか、

これはそもそも論ですね。

ないがしろにできないコスト感

コストというとなんだがビジネス感がでてしまいます。
「俺は根性でやるんだい!!」という熱血漢もありだと思いますが、
このコスト感はないがしろにしちゃいけません。

どうしてもプログラムを書けるようになりたい、仕事としたいと言っていた人が挫折するのを何人に見てきました。
かかる時間を見越してやる気があるか、そこまで考えなくてよいのはよほど器用な人でプログラムの学習がスラスラできちゃう人くらいです。

僕は会社で採用面接も担当するときがあるのですが、
未経験の人には「エンジニアって厳しいですよ?日々勉強だよ?続けれると思いますか?」と質問することがあるのですが、
大体「どの業界も勉強が必要なのは変わりません、前の仕事では〇〇△△ 、、」という返しを受ける時があります。

別にエンジニアすごいという話をするつもりはないのですが、仕事をするための勉強という点ではITエンジニアの勉強は他とは異質な気がします。
他より厳しいというより異質です。

日々の仕事を通して学んでいくというというより日々仕事をするために学ばなければいけないという状況に立たされます。
(もちろんそんな状況じゃない仕事もあるでしょうか、相当周りがフォローしているか、エンジニアとは名ばかりの仕事をしているかでしょうね。)

プログラムの学習と外国語の学習

プログラムの習得は語学の習得に似ているとたまに目にします。
プログラムもプログラム言語というだけあって言語ということもありますが、
覚えても使えなければ意味がないというところも似てますね。

例えば中国語を習得しようと思ってもなんとなく中国語話せたらなあくらいだと多少の挨拶を覚えるくらいで終わってしまうでしょう。
来月の旅行に向けてやってみようなら「旅行で使える日常会話フレーズ編」みたいなのを覚えるで再来月は忘れてしまいますね。

これをプログラム言語に例えると多少の挨拶は文字通り「Hello, World!」と表示する、if文を覚えるくらいでしょうか。
「旅行で使える日常会話フレーズ編」は動かしてみたいプログラムを丸々写してよく意味は理解できないけど動いたでしょう。

プログラムを書けるようになる人はどんな人かのまえに

プログラムを書けるようになる人はどんな人ってまえにその人は何がしたいの?って話でした。
どんな人は次にまとめたいですが極論「(自分の目的に沿ったレベルの)習得するまでプログラムの勉強をやめない人」なんでしょうね。

すこし夢のない話になってしまいました、、、

はじめましてのブログ

ブログを書くのは数年ぶりになります。 10年程前、何日我慢できるかというひどく下世話なブログを書いておりました。

あれから僕も少しは真面目になり今はプログラムの研修を担当するまでになりました。

  もともと専門的に学んだこともなく、 入社後も対した研修もなく無理やりプログラムをしてきたせいで人にプログラムを教えることはひどく苦労しました。

プログラム素人から数十人のプロジェクトを任されるまで、 プログラマ講師として100人以上を教えるまで、

これらの経験を通してプログラムの学習方法、またプログラムの教え方のナレッジが必要な人が多いのではと思いブログを始めました。

もともとプログラムが大好きなんてのは無縁でなるべく勉強したくないと思っていましたから 「プログラム」以上に「プログラムを効率よく使えるようになること」を考えてきました。 プログラムは動かすためのものです。

初学者がプログラムを学ぼうとするときは「プログラム」をもちろん勉強するのですが、 「プログラムの使い方」を身につけるという姿勢が正しいと思っています。

「プログラムの使い方」と「プログラムの使い方の教え方」をわかりやすく解説していくブログにしたいと思っています。

週に2,3程度の更新で頑張っていきます。 よろしくお願いします。