プログラムに向いてるのはどんなひと?
いや、違うこんなに堅い感じでやりたいわけじゃないんだ!!
どうしてこんなことに、、 企業向けの研修資料を作る片手間でブログを書き出してしまったからだ、きっとそうだ。 もう少し無理のない言葉使いでやっていきますわ。
プログラマーに向いている人はどんなに人?
一つ前の投稿で書いた通り向いてる人は極論「習得できるまでやめない人」ってことになりますが、
その習得できる時間が短い人、長くかかっちゃう人の結構違います。
逆に2,3ヶ月勉強して向いてないからやめようって人は先輩エンジニアからしたらもったいないな〜と思いますが、
やる気がなくなったってことなら第三者がなにを言ってもしょうがないねとしか言えないですね。
※経験上、丸1年以上やらないで向いてないと思うのは単純に努力不足、勉強不足が多いデス。
習得できる時間が長い、短いの差はどこからでるのか、、
プログラムを好きな人?
まずぱっと向いてる人で思いつくのはプログラムを好きな人ですね。 「好きこそものの上手なれ」です。
ただプログラムを楽しめるくらい書ける人な気もするので向いてる結果でもあるかなと。 ただ圧倒的に習得する時間というより期間は短いですね。
だって好きだからずっとやれるから。
向いてる向いてないでもおそらく初心者では2倍も最初の効率で差は出ないと思います。
でも時間の使い方で2倍使うということはありますね。
多少の学校などでやったことがある経験者が逆に油断して研修では研修時間だけやって土日自分で大してやってこないってことがありますが、未経験者が家でも復習しまくって経験者を進捗で抜くってことはよくあります。
好きじゃなくてもモチベーションを保てて時間かけれれば追いつけるってことですね。
数学が得意な人?
これはよく他業種の人から受ける質問。
これもある程度のところや分野によってはそうだけど初心者時点では最低限の算数の知識くらいで対応できるくらい。
僕は都内のプログラムスクールの説明会や無料体験会にいくのが趣味で本当によければ受けもするんですが、
あるスクールで未経験者だと勘違いされて1対1でスクールの説明を受けたことがあります。
説明員は明らかにそこのスクール上がりで多分実務でプログラムはやってないだろうなという方 (横澤夏子を10歳若くしたみたいなやつ)
Rubyの良いところをいっぱい挙げたあと、
説「ということでRubyは最初のプログラム言語としてはベストなんですよー」
僕「(最初のプログラムじゃないんだけどな、、まあいいか)なるほど、僕としてはPythonをやってみたいと思ってたんですよね、Pythonはできないですか?」
説「Pythonはダメですよ、微分積分とかそれ以上の数学の難しい知識がないと覚えられないですよ、おすすめしませんねー」
僕「(はぁあああ、嘘こけ)え?そうなんですか?言語仕様がそうなんですか?」
説「そうなんですよー」
僕も初心者だと言いそびれたし文句言えないが、もし初心者にあの説明をし続けているのだとしたら恐ろしい。
(余談だがRuby on Railsのこともデザインテンプレートと紹介していた。なめくさっている)
ということで本当に言語仕様として微分積分の知識がないと無理ならプログラマーも数学が得意じゃないと無理だろう。
ただそんなわけない。
Pythonという言語は集計や今はやりの機械学習なんかでよく使われる言語だ。
微分積分を使うシステムを作るなら微分積分は出てくるだろうけど、それはどの言語でも変わらないし、例えばブログのシステムを作ろうだったり、ショッピングサイトを作ろうとなった時に微分積分を登場させる設計は僕には思いつかない。
数学が得意じゃないと作れないものを作るなら数学が得意じゃないとだめなだけだ。
英語が得意な人?
これはあるかもしれない。
プログラム言語は英単語が元になっている。
「よいプログラムは英語のように読める」というのは通説でもある。
あとはプログラムのドキュメントも少し専門的になってくると英語のドキュメントしかなかったりする。
ドキュメントを読むのに時間がかかりながら最初から英語ができる人が羨ましいと思うことが何度もあった。
ということで有利だし、変にアレルギーがなくスムーズに知識吸収できるだろう。
ただプログラム勉強のために英語を勉強してからといういうのも遠回り過ぎだし。
英語が苦手だろうがプログラムを覚えたいならプログラムから勉強したほうがいいとも思う。
出てくる単語はそこまで難しくないものも多く中学校英語で十分だし、結局IT業界用の単語の使われ方をしていることがほとんど。 それに最近のGoogleの翻訳は頼もしい。
英語もプログラムも勉強したいという人はなるべく英語でドキュメントを読んだりしていけば効率がいいかもしれない。
素直で機転が利く人ははまらない
個人的に思うのは素直で機転が利く人は習得が早いというか変なところではまらない。
初心者がプログラムを学習する上で一番最初にやってくるハードルは「どこがエラーなのかわからないがエラーで動かない」だろう。
昔僕が初心者だったころ、あるファイルに書かれた文字をプログラムが読み取ってその文字を使ってなにかする、みたいな演習をやっていたとき、プログラムでファイルを読みにいけず半日以上悩んだことがあった。
結局、問題は「ファイルの名前を間違えていた」だった。こんなんで何時間も潰すなんてのはざらにある。
その時思ったのがなんでファイルの名前は合っていると思い込んでいたのか、ファイルがないよってエラーが表示されているのに。
だった。
固定概念を捨てて全てを疑って一個ずつ確認していけばよかったと反省し、しばらく部屋の壁に「すべてを疑え」と書いた紙を張っていた。久しぶりに遊びにきた友達に変に心配された。
「機転が利く」というのはどこが間違っているのか確認する方法をすぐに考えついたり、段階的にどこまであっているかを調べようとしたりという機転だ。あとは基礎というかルールを元に、じゃあこれは同じルールだとすればこうなんじゃないかと想像できる人でもある。
プログラムの知識というのは膨大で暗記しようと思ってできるものではない、それを暗記せずに書いてある場所を覚えようとか、パターンを覚えようと思う人は伸びが早い。例えるならなんかの試験で先に過去問やってなんとなく掴める人。
あと「素直」というのは教えられている時に特にでるが、
「言われた通りのやり方をまずはやってみる」、だったり
プログラム言語のルールだったり規約にいちいち「なんで?」と思わず「へぇー」となって変に考えすぎない
だったり。
「なんで?」派は突き詰めればすごいとこまで行きそうだけどただ頭堅いだけの人のほうが多いイメージ。
ということで
色々書きましたが、結局は時間かけないといけないので時間を書けるモチベーションを持ってるかどうかが結局大事ですね。
環境とか一緒に勉強する人とかご褒美とか色々工夫してやるしかないし、これってプログラムの勉強にかぎらないですね。
ことプログラムの勉強でいうと資格とかに限らずその技術をそのまま仕事にできるとかの違いくらいかと思います。
※資格勉強から始めるべきかという話はまた別にしたいですね。