「プログラミングは絶対できるようになった方がいいよ」みたいな記事は過去に何度も書いてますが、このときに必ず想像していた具体的なペルソナがあったんですよね。僕の会社の同期なんですけども。
もとは機構屋さんで、3D CADもかなり上達していたみたいなんだけど社内での事業シフトみたいな事情もあり明らかにかわいそうな方向に進んでいるのが見て取れました。あ、ちなみに女性です。
一緒に仕事をしていたこともあったので何度か立ち回り方のフォローをしてあげたりしたことはあったものの、コロナで出社しなくなったのも手伝って最近は全然状況を知りませんでした。
で、今日突然連絡が来ました。
「ソフトやることになったから勉強しようと思ってるんだけど、うちの会社って何の言語使ってるの?」(原文ママ) |
「プログラミング」ではなく「ソフト」という表現をしている感じがいかにもメーカーに所属している人な感があってリアルです。
実際、彼女はプログラミングどころか IT 関係についても疎いタイプで、あまりの予想外の質問に僕はなんと返答したものか数分考え込んでしまいました。
これをきっかけに
ほんっっっとうのプログラミング初心者に「今日から教えてください!」って言われたら何をどう説明していくのがいいのか
というのを考えた、という話です。
無論なんの役にも立たないただのポエム記事です。お暇な方はぜひどうぞ。
相手による
意見を述べるときに最も言ってはいけないことだとは思うんだけど、まあ何が最適かっていうのは「相手による」と思うんですよね。
彼女から問い合わせを受けたときは僕は普通に仕事をしていたのでそこで付きっきりの回答をしてあげることはできず、結局「大きくは "作って動かす" という楽しむ系タイプと "理論から入って勉強していく" というコツコツ系タイプがあるんじゃない?」みたいな微妙な回答をすることになりました。
つい数日前に書いた の記事では圧倒的に前者の "作って動かして楽しめ!" を推してました。
これができればいいんだけど、不可抗力でプログラミングをやらざるを得なくなった人にとっては下手したらこれの方が苦痛であるという可能性を否定できませんでした。中には本を読みながら勉強していくのが好きな人だっているよね、と。
実際はどうか知らないけど彼女はあまりソフトウェア分野に良い印象を持ってなさそうだったし、それまでの状況を考えても乗り気になれるのかどうか、心配でした。
「転職は考えないの?」みたいな話は一旦置かせてください。それは別の事情が色々あるので除外します。
そんなこんなでこの日は「とりあえずPythonの環境を用意して動かしてみよう!」みたいな動画講座でも探して見てみれば、という感じで終わりました。
が、僕はどう回答すべきだったのかいまだに釈然としておらず、もっと言うと「どんなベテランエンジニアでも "仕事としてプログラミングを望んでいない人に最短ルートで効率よく教える方法" っていうのは回答が定まらないんじゃないか…?」と気になり、今記事を書いているという状況です。
僕もまだペーペーなので、もし似たような事例を経験されたことがある方が万一この記事を読んでいらしたら知見をお貸しください。。
実力派ゴリゴリ養成コース
この件の数時間後に、わりと最近に読んだ「プログラミング初学者はこれやっとけ的な記事」のことを思い出しました。
いつからかは分かりませんが元記事が削除されていたようなので魚拓に貼り替えました。
これ。
初めて目にしたときもだいぶ賛成!と首を縦に振りながら読んでたのでもう一回落ち着いて読んでみました。
せっかくなのでこれをベースにしつつ今回の事例も取り入れて自分の考えを整理していこう。
以下、その記事の筆者さんの文章を引用しつつ進めます。
全体論
僕がこれを読んで感じた感想は2つ。
- たぶん筆者さんは地頭がものすごく良い
- 必要じゃないものを徹底的に削ぎ落として実益的なものを作り出す能力が高い
表現が上から目線みたいになっちゃってるのは許してください。どう考えても僕より上の方だと強く自覚した上です。
恐ろしいほどなまでに詳しい説明が省かれていて、こんなのを例の僕の同期が読んだらリアルに頭の上に「???」が出現するんじゃないかと思う。が、それでも書いてあることを最後まで実行できれば確実に力になるということを確信できているのが伝わってくるので絶対的な安心感がある。
この記事にも初心者から見ると「なにその言葉。初耳」っていうのがあると思うけど、全部重要なキーワードなのでググって咀嚼して血肉としてほしい。ググればすぐ出てくる。
それは冒頭にあるこの一文からとてもよく伝わってきます。
「意味が分からない言葉が出てくるのは当然、でもそれは都度そのとき一瞬でも理解して先へ進むということを繰り返していくのが結局最短ルートである」
という超現実主義的な考え方です。
そしてカリキュラムのチョイスからも「全体と個のバランス」を絶妙に理解している感がものすごく伝わってきて、「いや相当なスペシャリストなんだろうな…」と。わりと感動した。
ただし設定されている日付のスケジュール速度はかなり速めだと思うので、ここはそんなに参考にしなくてもいいかなと。
わりとハードスケジュールなので、キツい人は期間を2倍、3倍にしてもいいと思う
その旨は末尾にも書いてあり、ご本人も思っておられる様子。
ただ致命的な問題があって、いくら「IT分野全体の理解を深める最短ルート」だったとしても最初に学ぶのがWeb系しかないので「それが本当に良いルートなのか信じてもらえない可能性が高い」んですよね。
例えばうちはメーカーの色が強いので、即戦力的なスキルが求められるなら
- 組み込みでC/C++
- 汎用機器でOSがAndroidだとしてJava(Kotlin)
みたいなケースが多いです。
「言語の違い」しかり「組み込みとWeb屋じゃ全然ちゃうやろ」しかり、「長い目で見たときにどうありたいか」を最初の時点から考えさせるのは酷だなと思うわけです。
まあ彼女の部署の業務内容を聞いた結果ととっつきやすさとかを含めて僕は今日「Python」って言っちゃったんですが…。
まあそれはともかく。次から例の記事の中身について追ってみます。
1.まずLinuxを触れ
そう来たか。
とりあえずLinuxを自分のパソコンにインストールする。Linuxを触れるようになればいい。
まずこの時点で「即席のプログラミングだけをできるようになっても意味がない」ということまで見通したカリキュラムになっているのをすぐに感じました。
最初にプログラミングから入らないのがポイントだと思っていて、
- 基本的なPC操作の中で得られる普遍的な知識やスキルに触れられる
- コンピューターアーキテクチャやソフトウェア工学に後から触れたときに理解度がバツグンに良い
という絶大なメリットがあるように思います。
なんでLinuxとかいうよくわからんものを使うのかっていうと、ネットの世界はLinuxが大半だから。みんな知ってて共通認識だから。嘘じゃないよ。
この言葉からも「最後までやりきれる力があるなら間違いなくこのルートが一番良いはず」という自信が感じられます。ただ「最後までいけたら」というやや再帰的な条件が吉と出るか凶と出るか難しいところではあるけども…。
なんかよく分からんけどLinuxというものが世にたくさん存在していて、それに慣れておくとあとがとても楽らしいということを最初期から理解できていたら素晴らしいもんです。僕はこの点全然ダメでした。
2.嫌でもVimを使って慣れろ
何?
初学者にVim…!?
Vimの使い方を覚える。これは2時間ぐらいあれば慣れるはず。ネットで「Vim 使い方」でググればおk。
いや、たしかにそうなのか…?
もともとプログラミングが何かも分からないんだったらVimの特殊性にハードルを感じることもなく慣れておけると、そういうことなのか…?
Vimが嫌でもやる。IDEとかいうのでやるのはまだ早い。Vim使ってりゃLinuxのコマンドも同時に覚えるのでオススメだし、Vim系は一生つきまとうので今のうちに消化すべし
うむ。そういうもんなんですね(?)
僕はVimがからっきしなのでイマイチ有用性や重要性に共感できないのが悲しいところなんですけど(毎回操作方法ググってるレベル)、これはそうなんだと思います。
まさか手順2で入門者に「Vimに慣れろ」が来るとは思っていなかったので僕は衝撃でした。これも「先のことを考えているから」に他ならないですよね。
あと全然関係ないけど
Vim関係で一番好きなQiitaの記事。
3.最初に選ぶ言語はPython
お、奇しくも言語の選択は同じでした。
途中で意味がわからなくて詰まっても、わからないところはメモしてとにかく進むべし。終わらせることを優先。Pythonは書きやすいので比較的簡単
かなり同意見です。
そして、
「たったこれだけの間違いなのに動かないのか……」を死ぬほど体験して「コンピュータとはそういうもの」という思考になるべし
これこれ、こういうやつ。
プログラミングに触れたことがないということは「IT的な文化や考え方も未知な状態である」という線が強いので、「コンピューターってこういうものなんだ」という理解を早い段階で得られるのはとても貴重です。
こういう抽象的な分野をどうやって伝えるべきか四苦八苦していたし今回も思ったのだけど、やっぱりとにかく体験してもらうしかないんだなあ。
そしてトドメが
挫折する必要はない。初めてチャリ乗ったときと同じでコケまくってるだけなので必要以上にメンタルを気にしないこと。挫折するな
めちゃめちゃ良い例え…!
僕も新しいことを始めるときは「なんで自分はこんなにセンスがないんだろう…」といつも自虐しちゃうタイプなんですけど、なるほど初めての自転車でコケているだけか…。
自分のメンタルコントロールも自分で、ってことなんですかね!
4.HTML/CSS/JavaScriptをやる
ここに来ていつものお決まり3セットを始めるようです。
MDNっていうところで、HTML/CSS/JavaScriptのガイドを一通りやる。わからない用語はバカスカ出てくるけどググればわかるようになる。
「ハードルは低くてもいいからとにかく成功体験の数を増やさせることが大事だ」という旨のことは以前から僕も色んな記事に書いていて、その観点でいくとHTMLから入るのは良い選択肢だと思っていました。
ただこの方に言わせればLinuxやVim、PythonでIT全体の世界観をパワープレイでぶち込んでいったあとの話、なんですよねきっと。まあ当の受講者本人が耐えきれるのならいいんじゃね(雑)
ドキュメントの参照先としてMDNを勧めているところもかなり賛同したいポイント。
信じられなくらい丁寧で面倒見が良いサイトなので、あれは全人類にとって有益なものかと。日本語も流暢で人間味があります。
なお、
これもつらくてもVimで書くべし。
だそうです。笑
5.ブラウザで動くアプリをつくる
ここで「最小単位としての成功体験」である作って完成させる!を勧めているみたい。
作るのはなんでもいいけど自分を過大評価してすごそうなものを作ろうとすると一生終わらない。
この辺は僕も再三言っている部分なので完全に同意です。同期の女の子にもこのことだけは口酸っぱくいっておきました。「コピペやめろ」「自分の手を動かせ」とか。
極め付きはこれ。
ゴミみたいなものでいいから、とにかく動くものをつくるべし。ある程度バグっててもいい。ある程度動かせるものをつくってしっかり終わらせる、これが大事。一生これなので。
同意 of 同意ィ!!!!!
もうここは説明不要ですよね。たぶん今エンジニアやっている人なら少なからずこれにはみんな賛同してくれるんじゃないかと。
ちょっと関係ない話ですけど、最近会社にこればっかり言っているおじさんがいたので親近感を持って近くで生息していたらやっぱり仕事しやすい環境にいつの間にか変化していたという経験がありました。
正しいこと(自分にとってでも)をしている人の近くにいるとやっぱり恩恵ありますね。
なお、この辺から
だいたい雰囲気はわかってきたと思うのでテキストエディタはVimじゃなくてもいい。好きなのを使ってください
だそうです。ついにVimの魔の手から解き放たれるようです。
6.ITパスポート系の本でITの基礎知識を身につける
冒頭で僕が「回答の方針として大きく2つで迷った」うちの1つです。
まあそりゃそうか。まっさらな状態で情報理論とかソフトウェア開発プロセスとか勉強して身になるはずがないですもんね…。
もし本当にこの鬼カリキュラムについてこれている初学者がいるのだとしたら、このタイミングで読むITパスポートや基本情報技術者の教本はハンターハンターより面白いんじゃないだろうか。
「あぁ、このことかー!!!」の連続でしょもう。こんなん楽しいに決まってるやん。
僕はわりと「IT?なにそれ?」な状態で基本情報を取ったけどまあ暗記は好きなので楽しかったです。なお午後問題
彼女にも、ここまでのゴリゴリ講座じゃないにしろ時間が経って雰囲気を掴んできたように思えたら余ってるITパスポートの教本でも貸してあげようかな。
7.DB→Webフレームワーク→強い型付け言語
最後の段階として、MySQL→Django→JavaやTypeScriptというシメのようです。
HTTPの基本がわかってればWebフレームワークなんて雰囲気でわかる。ガンガンやっていきましょう
とか
C++とかはたぶん難しいだろうからそういうのにいきなり挑戦しなくてもいいと思う。Javaぐらい書けてみせろ
とかだいぶスパルタなことをおっしゃっているようにも思えるけど、ここまで辿り着いている受講者なら実際可能なんでしょう。なんか生存バイアスな気もするけど。
また、個人的には「正規表現」を早い段階で理解しておくのがおすすめだと思ってます。この記事で言うならPythonとかのもっと前の段階でもいい気がしました。
「プログラミングよく分からなくても正規表現は絶対やっとけ」っていうのはわりと同意を得られるのでは、と思うんですけどどうでしょう。
この段階まで来ると「プログラミング始めたいから教えて!」の段階はとうに過ぎ去っているので正直なんでもいいと思います。
どんな会社のどんなプロジェクトであれとりあえず実務に付けば絶対仕事はこなせるはずだし、スキルアップの方針を決めるにもそれがベストでしょう。
実際、
最初の会社は踏み台でしかないので、さっさと踏んで次の会社に行って年収上げるのがオススメ。
と書いてありました。
僕はそういう「ガシガシコードを書いてとにかくプロジェクト進める!」みたいな会社で仕事をしたことがないので正直この感覚は肌では実感できていないですけど、たぶん言いたいことは同じなはずです。
そういう意味では大手系やメーカーとか違うジャンルが混ざっている会社よりも、中小の開発ベンダー的な会社に入った方がプログラミングのスキルアップ的にはスピードは速いのかもしれないですね。もちろん例外は多分にあると思いますけど。
そしてこの記事の最後では、
マジ初心者は、なんでこれをやらないといけないのかチンプンカンプンだと思うけど、重要な点だけ削り出して言ってるので、1ヶ月後に点がすべて繋がって血と肉になるはず。疑うな。疑いたい人は信用できる人に聞いてポリッシュアップしたカリキュラムでやればいいと思う。別にこのルートだけがすべてではない🐹
と締めくくっています。
これだけ本当にやりきれたらマジで血肉になっているんでしょう。
「疑うな」からは強い自信を感じます。さぞ経験のある方なんでしょう。
大事なのは「続くこと」
…っていう、とある人が考えた「プログラミング始めるならこの方法がいいよ(最強コース)」を軸に色々考えを練ってみた、という話でした。
大事な点を1つだけ挙げるとしたら何かな?と思ったんですけど、たぶん「続けられること」じゃないかなと。
分からない・納得できないの状態でも鉄の意志でコーチを信じて前に進める強靭な人は間違いなくこの講座を進めればいいと思うんですが、誰しもそうはいかないので。
そんなとき、その人にとって一番モチベーションが続く方法でなんらかの体験や勉強や続くことが一番大切なんじゃないかなと思いました。
その観点でいくと例の彼女は「何が響くか分からない状態」ではあるけれども、「プログラミングで最も楽しい部分である "作って動かす!" をとにかく体験してもらうしかないのかなー」という結論です。
これで「何が楽しいの?」ってなっちゃった場合は
- 仕事だと思って我慢して続けてね
- 仕事変えなよ
の二択になっちゃうのかもしれません。もちろんやっていくうちに楽しくなることもあると思うけどね!
おわりに
そんなこんなで、何が言いたい記事なのか結論がないので気持ち悪い記事になってしまいましたがお読みいただきありがとうございました。
何かご意見あればぜひコメントにVimエディタを使ってご送信ください。では。
この記事へのコメント
とても面白くて大学に入ったらすぐ始めようと思いました。が、
参照されていたはてラボの記事が削除されたようで悲しんでいます。
わーほんとだ…。
消えることあるんですね。。この記事もう意味不明になってしまう。。笑
…ってことで魚拓のリンクを貼り直しましたよ~!
ぜひ読んでみてください。