プログラミング上達のためのテクニック!擬似プログラミング!
「のりちゃんのプログラム教室知らない部屋に巻き込んだポッドキャストタイトルと違うものが見えたミスった?ミスった?プログラミング教室ですね今日ですねコードコンプリートという本を読んでいてとても気になるテクニックを見つけたのでかいちくんには」
「会社の後輩にプログラミングを教える時の手立てとしてはいじゅんぺい君は自分がプログラム書いていく時のテクニックとしてはい一個知っておいてほしいなというテクニックがあったのでこれを紹介しようと思いますお願いしますもう気になりますね疑似プログラミングというものなんですけど」
「記事プログラミング聞いたこともないです俺もなかったってことですねつい最近まで全く知りませんでしたただこれねなかなか破壊的な内容だったんでね破壊的ですねこれ結構パラダイムぶっ壊れました僕の中のなのでねちょっとやり方を伝授していきます何がいいんですか」
「えーとちょっと待ちな待ちますまず何なのかから説明させていただきますまず疑似プログラミングとはえーとね普通プログラミングするときって何かしらの言語で書いていくじゃないですかはいはいそれをもうコード上に自然言語で書いていくんですよ」
「自然言語ややプログラミングよりにするんだけど例えばこのファイルに何か書き込みしたいなっていう時に手順が3つありますまずは書き込みたいファイルを取得というかゲットしますとそのファイルに書き込みますと最後ファイル書き込み終わったら閉じますとファイルはこの3つではファイルの書き込みってできると思うんですけど」
「これを最初から言語でやるんじゃなくて日本語で書いちゃうんですよコメントでまずはファイルを取得するみたいなファイルを取得するファイルを書き込む終わったらファイル閉じるみたいな感じの順番で書いていって最終的にそのコメントを元このコメント自体を擬似プログラミングって言うんですけどそれを元に実装を書いていくというそういう手法でございますまず」
「やったことある?正直あります何の本だっけ何かに書いてていいかなテスト駆動とかかなありそうだわで書いてて普段そうやってやってますコメントアウトでこのメソッドでやることというかなんとなくこういう関数があってこういう関数があってそれを書いてそれを元にちなみにコードコンプリートの中では」
「似たような手法の中にテストファースト開発があるよって書いてましたじゃあまさしくそれかもしれん順平くんが書いてないですけど多分わからない単語がいっぱい出てきて何の話ってなってます先生どこがわかんないんだよえ?はいその俺今そのメソッド名とかをファイルを閉じますっていうメソッド名にしてるんかと思ったんですけどそういうことじゃないってことですかもうね」

「本当に文字で書いていくだけ日本語でだからコードとしては全く動かないものが出来上がるんだけどメリットちょっといいですか先にまず日本語で書くってことは絶対コードとしては動かないじゃないですかでもプログラミング言語ってさ別に何の言語で書いてもさ」
「実装は最終的に出来上がるじゃんその時の手順ってどの言語で書いても大体同じじゃんなので言語に依存しない状態で書けるんですよまず処理の流れがなるほどそうすると早めに実装完了するじゃないですか実装というかステップの流れが早めに分かるじゃないですか一連の流れが先に見えるってことですかそうそうそう」
「そうするとじゃあ今回の作るコードの中に穴がないかみたいなところを実装前に気づけるんで無駄なステップが減るんですよなるほどコード書きながらさどんどんこここの処理必要だなって追加していくといらない処理書いちゃったりとか不要な部分できたりとかなんかあとなんだろうね」
「この設計じゃダメじゃんって気づく時とかあるんですけどそれに気づく前にもっと実際にコーディングするよりももっと前にそれに気づけるとなるほど非常に設計へのフィードバックが早くなって開発の質が上がりますよねっていうやつなんですよコメントアウトとかでコメントアウトじゃなくてもいいんですかコメントアウトですよねコメントアウトで」
「これをこうやってこうやってこうやってこうやって全部日本語でバーって書いてそうそうそうそうなるほどif文とかもifこれだったらこうするelseこうするみたいなそういうのもちゃんと書くってことですねそうそうそうそうなるほどはいはいはいっていうので処理を先に自然言語で作っちゃいますよという」
「やつなんですよなるほど本に書いてあった部分のメリットとしてはそもそもそこで書いたコメントがそのまま処理のコメントに使えるみたいな」
「なるほどなるほど多分そのコードコンプリート本によってはコメントはコードで分かるようにしろみたいなのも言ってるやつとかあるんですけど多分コードコンプリートの立場からするとコメント推奨派だっぽいんだよね最終的にその処理のまとまったやつとかをドックコメントに書けばそういうこともできるしこの処理のコメント後にできますよと」
「実装面でも確かにこれはすごい無駄なくていいなと思ったんですけど個人的にはこれプログラミング教育に使えるのが良かったってめっちゃ思ったんですよね教育に言ってみれば分かりますプログラミング言語覚えなくていいってことですよねそうそうそうそうまずプログラミング言語やるにあたっていちいち公文覚えてさそれを使いこなしてさ」

「そっからロジック組むじゃんそうじゃなくてでもプログラミングの本質ってさロジック組むところじゃんあーそうですねだからそれを言語知らずに体験できるっていう意味でなんか全くプログラミングやったことない人にやってもらうときにすごくいいんじゃないかなと思ったんですよねあーそれは確かにありそうそもそもその最初の」
「処理の組み立て方すらできてませんでしたかね僕とか最初中級エンジニアというか先輩エンジニアのロジックの組み方と僕の組み方が全然違うというかif文めっちゃネストさせちゃうとかそういうのもなんだろうなんかコードレビュー前に気づけるかもしれないですねそういうことそういうことなるほど」
「っていうので新人教育にもいいし経験の人に教えるっていうか体験してもらうっていうのもいいしあれに近いよね小学生とかプログラミングの授業でスクラッチっていうなんか」
「たぶんコード書かないやつだよねあれ知りません!俺も知りませんけどただNintendoSwitchのプログラミング教室のソフトはそういう感じですねそうそうそうそうパズルみたいな条件分岐だけのパネルみたいなのあったりとか本当にただ四角い箱の中にこれはこの箱ですこれはこの箱ですっていうのがいっぱいあってそれをどんどん矢印でつないでいってはい1個の処理できますみたいなのが」
「ありますけどね本当にそういうイメージですねそうだねそれのもうちょい実践よりだけど言語を知らなくてもできるっていうやつがこのね擬似プログラミングという手法らしいです僕ぐらいのレベルでも全然良さそうですね言語をちょっと書けるようになってるぐらいなんでロジックの組み方とか全然なんでそうなんかね」
「一応これ詳細設計の手法だったらしいんだよねやっぱそうですよねだからそういう設計っていう意味では最初はそれで書いちゃってそこで見直していってコードに落としていくっていう風にやっていくとなんかコメント書いてる分の時間長く感じそうだけど多分実際に実装していくよりも早く終わるんじゃないかなって気がするけど個人的にはそう思います初級だからとかじゃなくて上級もやってると思いますよ人によってはあの」
「ふわっとしてるじゃないですか最初こういうの実装してって言われた時にじゃあ具体的にコードで落とすとどうなるんだろうって多分すぐイメージつかないものもあると思っててそれをイメージつけるために人によっては多分ノートに何か書くとか人によってはこうやってコメントアウトでそれに何か書くとか色々あると思うんですけどその中の一つですよねそうねちなみに俺も実装の時に擬似プログラミングって知らなかったけど自然とやってましたそれ」
「その現場がそういうスタイルでやってたみたいな感じってことですか?いや全然何も関係なく自分でやっていくように整理したいなってなった時に最初コメントで処理の流れ書いてこれ実装していけばいいんだってそれをToDoみたいに使って実装してみたいなのにたどり着いてたなるほどそれの名前こうなんだっていうのを初めて知ってねこれ普通に世の中にあるやつなんだみたいな」

「点と点が繋がったんですね繋がりましたねコネクティングドッツそれドッツそれドッツドッツ点ねドットの複数形ねスティーブ・ジョブスのやつねスタンフォードだっけ」
「やばいそれを知らないです卒業式のスピーチスピーチの中にその一文が一文?コメントの二番手ぐらいですか?あれ?ステイのそれは知ってるんですけどその二番手にコネクティングドッツがあるんですねそんぐらいの印象だけどね僕はそこまで覚えてないですふわっとした話しましょうかというので」
「擬似プログラミングという手法がありますのでぜひ皆さんもこれから難しいコードを書く時とか思考整理したい場合とかね新人教育したい時とかぜひ使ってみてください」
「勉強になりますイテレーティブにしないといけないんでねコードの実装で反復をしてどんどんいいものに変えていくらしいですからねソフトウェア開発ってちょっと補足すると設計やって実装するじゃないですか一方方向じゃなくて設計やった後に実装して実装で設計ちょっとダメだなっていうところが見えてくるんでまた設計に戻って設計し直してっていうのを繰り返してやっていきましょうねみたいな感じでは言われてますね」
「一般世間一般でエンジニア業界本によってはそういうのもあるとリファクタリングもそうやってぐるぐる回るからねチェックして直して直した上で設計とか要件とか見てうーんってやってここやっぱり良くないわっていうのをぐるぐる回すからこの擬似プログラミングはぐるぐる回すのを」
「早いサイクルでできるためのTips的なものなんでイテレーション繰り返しを短くできるようになるTipsは僕は無条件でいいと言ってます良いこれは良いもの以上僕は僕も以上僕も以上です終わりましょうかぜひ皆さんも実践してみてくださいではまた次回バイバイバイバイ」
「イマジンプラグラマーではメールを募集していますトークテーマ悩み要望などなど何でも募集中です宛先はhimapro11atmarkgmail.comhimapro11atmarkgmail.comになりますそれではまた次回」