野良開発のススメ

~ 独学Webサービス開発 ~

2021年07月31日

お金をかけずに独学でプログラミングを覚えてWebサービス開発できるようになるまでの手順

お金をかけずに独学でプログラミングを覚えてWebサービス開発できるようになるまでの手順のサムネイル画像

個人開発をなりわいにするためWebサービス開発を独学でできるようになったあきふみです。

このサイトはいずれ自分の好きなWebサービスを作ってみたいからプログラミングを独学で始めたいけど何から手をつけていいのかわからない」と悩んでいる人へ向けて自分の数年間の独学における実践経験に基づいて0から制作してみたサイトです。

結論からいえば独学だけで好きなWebサービスを開発できるようになれます。
とうぜん学習費用だって低く抑えられます。

現に運営者自身が独学でつくったWebサービスを作るだけでなく拡張性とメンテナンス性を意識しながら開発ができるようになりました。

正確にはその入り口に立てたくらいで技術を使いこなせているわけではないためまだ道なかばです。

しかし、今のレベル感だからこそ伝えられる初学者へのヒントがあると思い自分が実践した方法論を言語化してまとめてみました。

プログラミングの世界では、実装方法や学習コンテンツに関しては樹海の森のようにあたり一面に生い茂っていますがそれらを自身に合った形で編集して上手に活かすことに関しては情報が不足していると感じます。

「野良開発のススメ」では学習の方針の決め方をメインにまとまった情報との上手な付き合い方を一独学者という立場として解説してみました。

「野良開発のススメ」の記事を一通り読むことでネットに溢れている情報の中から自身にあった手法を選んで低コストで効果的な独習をしていけるようになることを目指しています。

2、3年前の自分に教えてあげたい内容をイメージしました。

さて、ちまたに溢れている情報はかなり交錯していて、独学でもプログラミングができるよという声もあれば、独学のプログラミングの挫折率は9割以上だからコーチングをつけてもらった方が良い。

とかあっちこっちの情報だらけで困ってしまっても仕方がない状況だなと感じています。

一世代前から残っているベテランエンジニアさんなどは教育をまともに受けさせてもらえず子ライオンが崖から突き落とされるかのように、いきなり現場にぶち込まれて技術を身につけてきたような生き残りタイプな方も多いと聞きます。

それゆえに教育に関するある程度のフレームワークめいたものが業界の中でも共有されておらず新人が入ってきても完全放置されるような悲しい話が割と多いのかなと。

その上お互いのコードをレビューして批判する文化があること、コードを通じたコミュニケーションという一般的ではない意思疎通を多くしていることも相まってか現実の言葉においてトゲのある発信も多くなってしまっている気がします。

(ちなみに、初学者がコードを書く前からエンジニアの性格や世界観、エンジニアに向いている人の特性などの知見が得られる Coders(コーダーズ)凄腕ソフトウェア開発者が新しい世界をビルドする の書籍がエンジニアの歴史も振り返っていてとても良かったのでおすすめの書籍です。)

ところで個人でWebサービス開発をしている自分は特段、もの覚えがいいとかプログラミングの才能があるわけではありません。

むしろエンジニアを目指す層はインテリな方や理系に強いタイプも多く、そうした方と比べたら効率の良いインプットができませんでした。

おそらくアルゴリズム力や読解力、吸収スピードなどは相対的に悪いと思います。

技術記事のプラットフォーム(QiitaやZenn)をみていてもまっさらな状態からプログラミングを初めて1年で自分より技術力の高そうな人もよく見かけます。

ただし"自身に必要なものから逆算して"必要な情報を取捨選択するということに関してだけはメディアやECサイトを運営して何かしらのリサーチを何年も続けていたこともあり人並み以上には経験値がありました。

そのおかげで独学でサービス開発までできるようになったのかなと考えています。

「でも私にはそんな経験はないよ」

と思うかもしれませんがプログラミング独学に必要な"自身に必要なものから逆算して"情報を取捨選択する方法というものはある程度は文章化することができますし再現性のあることですので読者にとって問題ではありません。

そこで情報が溢れているプログラミング初学者向けの情報に関しても自分なりの強みでもってして手順をまとめてみました。

初学者がお金をかけずに独学でプログラミングを覚えてWebサービス開発できるようになるまで

「野良開発のススメ」は大枠では下の手順に沿って記事を用意しています。手順についてなんども書き連ねるのが面倒なので「逆算式開発」と呼ぶことにします。

「逆算式開発」をやっていくことで"つくりたいものをつくれる開発者としての基本的な力"も身についてくるはずです。

①プログラミングに関する目標を設定する
(例:○○なSNSを好奇心で作りたい、仕事で使うxxのアプリを実装したいといったことなど。それらに限らず就職するためにWebサービスを作りたい、趣味でプログラミングを始めたい、仕事で解決したい問題がピンポイントにある、なども当てはめることができる)

②目標に必要な技術や成果物を調べる

③目標に必要な技術や成果物を分解して一つひとつで何か作る

④分解した一つひとつで何かを作るという小さな目標のそれぞれで②と③を繰り返す(目標が大きなほど必要な繰り返しの回数は増えるかと)

⑤目標に必要な技術を習得して成果物を完成させる

次のページから順を追って解説。

「逆算式開発」では目標から逆算して学習すべきものと作るべきものも細分化していく手法になります。ただ学習を目的としおて小さな開発をたくさん行うことを上の手順の中で暗に含んでいます。

手順として、なぜ目標の設定を①番に持ってきているのかというと、情報の取捨選択において目標があることで必要な情報を一気に絞りやすくするためです。

例えば同じ「Webサービスをつくる」であっても就職するためのWebサービスと個人開発としてのWebサービスでは力を入れるべき実装ポイントが異なります。

繰り返しになりますが「逆算式開発」、目標から逆算式にやるべきことと覚えるべきことを分析して開発していく手法になります。

くどいですが、最初に必要な目標を最初のうちからある程度は見定めていきましょう。そこから学習すべき候補の枝をどんどん生やしていきましょう。

枝を生やす中で覚えるべきものがたくさん出てくるので枝分かれさせたそれぞれのトピックでインプットと実装をやっていきましょう。

というのが手法の要約となります。

また、自分が実際にWebサービスを開発するまでにやったアプローチでもあります。

この手法のメリットはただやみくもにプログラミングを学習していても自分が本当は必要だったことに対して優先順位の低い学習を続けてしまうことを避けれる点と自分に乗り越えられるハードル設定で実装していけるようになるところにあります。

SESなどの派遣型エンジニアはその都度、新しい技術を要件に応じて必要なだけ実装するということを行なっているように、基本的にエンジニアリングでは必要に応じて必要な分だけ学習します。

自分もここ2年ほどは特に集中してプログラミングを触っていますが実装に使った必要なもの以外は頭に残りませんでした。

正確には実装に使った必要なものすら記憶としては抜け落ちてしまうため技術記事などにして残していました。

こういった常に新しい技術を取り入れる中で人間の脳のキャパシティ問題にぶち当たりやすい業界でもあるので優先順位をつけて学習していくというスタイルは開発における現実的なやり方であると考えています。

ですので学校の勉強のように数I、数Ⅱ、数Ⅲのように順を追ってステップアップするというより、数Ⅲの微積分だけ使いたいから、そのために数Ⅱの一部とそこでも力が足りなければ数Iへと逆行させていくイメージです。

(ちなみにですが、いますぐ手を動かして目標を設定したい!という人は続きの文章も長いためさっそく次ページへどうぞ。)

仮に「就職するためのポートフォリオを作りたい」。

という人がいてWebサービスをつくるのであれば人事の見たい技術力、例えばCRUDやしっかりしたバリデーション、題材に適した精度のコードとなっているか、ただ言われて作られたような成果物でないかなど。

これらを示したものを中心に小さな開発を積み上げながら大きな成果物(目標)をつくって技術を習得すれば手当たり次第に基礎から学習するよりはかなりスムーズに進めるんじゃないかなと。

運営者が独学でWebサービス開発した手順

「じゃあ偉そうにそんなことを言うお前はどうしたの?」といったところですが「野良開発のススメ」を作る以前に実際に自分がつくった栄養サイト( 100g )を例に上げます。

雰囲気が伝われば良いので知らない用語は無視で!

①プログラミングに関する目標を設定する
→栄養サイトのWebサービスを作りたい!

②目標に必要な技術や成果物を調べる
(自分にできるできないは完全に無視して作りたいものに必要な機能や必要な言語を書き出してみる)

機能:機能としては「ログイン機能」「食材フィルター機能」「プロフィール入力機能」などが必要だな。

言語:言語は得意なJavaScriptをメインに使おう。

・メディアに近いサービスサイトになるしSEOも意識してGatsbyJSと呼ばれるJavaScript(React)のフレームワークを選んでみよう。
拡張性やメンテナンス性をより良くするTypeScriptも取り入れてみるか。

・データベースまで手が回らないからサーバレスで実装できるFirebaseを使おう。

・コード量が多くなりそうだからコード自動修正するためのライブラリも取り入れてと。

デザイン:デザインはデザインツールとしてXDを使ってみたいからこれでデザインしてみるか。


③目標に必要な技術や成果物を分解して一つひとつで何か作る
「ログイン機能」「食材フィルター機能」は初めて実装するからそれぞれ別にダミーアプリを作ってみよう

→それ以前にGatsbyJS、TypeScript、Firebaseが殆ど初めましてだから個別に簡単なアプリを作って動かし方のイメージをつけるぞ。
動かし方を覚えたらダミーアプリをこれらで作ってみよう。

ダミーアプリを作り終えたら複数の技術を組み合わせたダミーアプリを作ってみよう。

新しい技術ばかり触ってると途中で覚えたものを忘れてしまう。そうだな、技術記事を書いて理解力を深めつつ忘れないようにしておこう。

④分解した一つひとつで何かを作るという小さな目標のそれぞれで②と③を繰り返す
→まずはGatsbyJSの動かし方を覚えるぞ。
・チュートリアルを模写
・Udemyで簡単なアプリ作成
・ブログ作成

の順でやってみよう。あれ、ブログ作成途中でReactの一部の機能(hooks)についてわからなくなってきたぞ。一部の機能だけに絞ってダミーページを作って動かし方を覚えてみよう。

(TypeScript、Frirebase、デザインなども同様に行う)

⑤目標に必要な技術を習得して成果物を完成させる
→栄養サイトを完成させる

さらっと本日の献立はこちら、のようなノリで書いていますが"言うは易し行うは難し"ではあります。

「逆算式開発」を独学で実行していくためには都度、適切な学習ツールを見つけてはこなしていくことを継続していく必要があります。

さらに問題として開発期間の長さに比例して強いモチベーションも必要となってきます。

人によりけりですが開発に1ヶ月以上かかるとモチベーションは下がってくるかなと思います。自分が見てきた個人開発者でもそのくらいが目安期間となっている印象です。

何事も最初の数週間がもっともヒートアップしてその後は冷めていき日常生活で他に気になることが出てきたらどんどん触らなくなっていくものです。

期間が長くなればなるほどそうなる可能性が高まりやすいということ。

したがってそれを乗り越える強い気持ちで長期間もの間に一つのサービスを作りきれる人は一握りだと思います。

ですので、モチベーションに自信がない人は開発期間を短くて済むような成果物を選ばないと挫折しやすくなります。

一方で「いやいや、初心者ほど最初の開発はめちゃめちゃ時間かかっちゃうよ?」と突っ込まれればその通りです。

実際のところ、自分が先に紹介した栄養サイトも完成(まだベータ版)までに1年かかってしまいました。

「じゃあ逆算式開発ってあまりよくない手段じゃないの?」って言ったらそうでもありません。

「逆算式開発」では目標に必要な技術や成果物を分解していく過程で、
"学習を目的とした小さなアプリ開発"を続けていくため一つのトピックにつき1ヶ月以内で終わることを想定しています。

(自分のできるレベルまで成果物のレベルを落とし込めば自ずと完成までの期間も短くなります)

必要な技術や成果物を小さく分解すれば数日で終わるくらいのレベル感にまで分解することができます。

こうした目標のための目的となる開発を短期間開発と呼んでみましょう。一方で目標のための開発を長期間開発と呼びます。

「逆算式開発」では短期間開発と長期間開発を並走させる形をとることにより開発期間の長さによるモチベーションダウンをある程度は避けることができます。

個人開発者の方の発信でアプリは短期間で作れるものを作ろう。なぜなら、長期になるとモチベーションを保てなくなるから。と言われている実践者はよく見かけます。

しかし、先に述べたように初学者は昨年までの自分を踏まえてみても初めて0から1の工程を踏んである程度のまとまった機能を持ったサービスサイトを作ろうと思うととても1ヶ月や2ヶ月では作りきれません。

一部の特別センスのある人が簡単にやってのけて実装しました。なんて声などはよく目立ちますが、地方の中小企業でエクセルで計算式を書いたシートを作成しただけですごいと言われるような世界の方が一般的です。

ですのでそうしたレベル感の人たちがメジャーであり、そうした人たちが0から1の成果物を作ることを想像すればやはり最初は長期間の時間が必要なことは想像しやすいかなと。

そのため、長期間の取り組みが避けられないのであれば、短期間開発と長期間開発を並行できるような「逆算式開発」は有効であるはずです。

とはいっても自分が実践者として最終目標のサービス開発自体に時間がかかってしまうことには変わりはしませんのでしんどい時期がなかったかといえば嘘になります。

途中で何を作っているんだろう。と何度も思いました。

ですが、別にもともと自分が欲しかったものを作っているので最悪、自分一人が使えればそれで"顧客の要望を満たすこと"ができたので問題ありません。

むしろ最初に作ったコードは大抵、数ヶ月後、1年後などに見るとなかなか酷いコードだなとビックリします。
あれだけエラーに悩まされてトライ&エラーを続けて書いたはずのコードなのに全然しょぼいなと思ったりします。

このように当時は完成きたと思っていても成長してから見るとしょぼかったということがわかるし、これが成長した証拠にもなるので出来上がったものが誰にも使われなかったとしても次へとつながる布石にはなり得ます。

繰り返しになりますが初学者の場合は特に最初のサービスやまとまった機能を公開するまで時間がかかってしまうと思います。
あせらず最終目標の成果物をコツコツとつくっていくと良いかなと。

そして、「逆算式開発」を使った①から⑤への開発フローですが、実際の生々しい流れでいうと順番にこなしていけたわけではありませんでした。

実際のところはいきなり①から⑤を始めてみてデザインだけはできたけどその後は手が全く動かなかった

→やっぱり②と③、④の繰り返しだ。そして一旦また⑤へ行ってやっぱりダメだから...といった流れで応用と基本に何度を往復するかのような形で何度もいききしました。

Twitterにいるエンジニアなどはさらっと複数の技術を組み合わせて実装して「こんなのできました〜」と軽々しくやってのけていますがそれを実現させるための下積みの量が多いおかげで学習時間を大幅に省略しながら実装できています。

ただし、センスのある人はそんな一つひとつでしっかりアプリを作ったりせずともいきなりさまざまな技術を組み合わせてもさらっと実装できてしまったりします。

こればっかりはどうしようもないことです。少なくともレアポケモンであり特別ですので変に比べて落ち込むのはやめておきましょう。

運営者もそのようなセンスを持ち合わせていないパンピーであったため時間はかかりましたが一つひとつの技術ごとに開発を行い技術を覚えていきました。

もっと技術を減らして簡単に作れた部分は大いにあるのですがある程度の品質を保ったコードで開発できるようになりたかったため、あえて新しい技術を取り入れながら開発しました。

次ページからこれらを順番に設定していく方法を解説しています。

自分のロールモデルとなる人がいるなら近い人のいる環境へ足を運ぶ

「野良開発のススメ」の内容はどのプログラミング初学者にとってもヒントになることを書いたつもりです。

しかし基本的に「野良開発のススメ」で想定している人は初学者から独学でWebサービスを開発できるようになりたい人です。主に過去の自分を想定して書いています。

そのためもしロールモデルとなる人がいるのであれば、そうした人のいる環境へ足を運んでみることをオススメします。

例えば自分の入社したい会社が開催している勉強会やカリキュラムに触れたり、自分に足りないものを現地の人たちに聞いてみることが最短ルートでしょう。

キモい言い方をするのですが同じ空気を吸うのは大事かなと。

肥満の人と一緒にいると3倍肥満になりやすくなる。という説があります。過ごす時間が長いほど無意識レベルで行動が似てくるからだそうです。

そのように人は同じ環境にいる人同士で相互に影響を与えあっているため自分のロールモデルとなる人と同じ時間を過ごすことで多少なりとも近づけたり必要なスタンスが見えてくるはずです。

(とはいっても0から懇切丁寧に教えてくれる人はいないので結局は自分で計画を立てて学習していくしかありません。あと運営者のロールモデルとなる人が存在しないので自力でやらざるを得ませんでした。)

フロントエンドでモダンな技術を使っているエンジニアを目指しているのであれば、モダンな技術を専門にした受託会社にいるようなフロントエンジニアのいそうな場所にいくと良いことになります。

目標を設定できなくてもあせる必要はない

(自分もまだまだな技術力ですがあえて少し偉そうなことを言わせてもらいます)

先にあせってしまう人が出る前に言うのですが、おそらくこの記事を一通り読んで手を動かしてみても一定数は目標を設定して自分に必要な成果物を分析していくことができないんじゃないかなと思います。

しかしそのことであせる必要はありません。

特に若い世代の人たちは1年もあれば考えがアップデートされて全く別のことをやっているのはザラではありません。そのくらい興味がうつろいゆきやすいのでやりたいことが交錯しがちです。

それゆえに言葉にすることが苦手な人もいるはずです。
なので出なくても普通というか、そんなにマイナスなことではないかと。

途中で考え方が変わるのは当たり前ですので思考スタンスを「近い将来変わるかもしれないけどとりあえず暫定的に決定して手を動かしてみる」に変えてみることで少しは楽になるかもしれません。

またそうした思考が移ろいやすい人のために相談できるメンターなどのサービスなどが選択肢として出てくるかと思います。

ただし、スクールなどの最初から長時間で取り組む教材に手を出すのではなくまずは小さく相談していきある程度の方向性を暫定的に決めていくと良いかと思います。

スクールなどで高い出費をしたあとに心の奥底では「間違った選択をしていた」と感じていても損失回避の気持ちも働いて無理くりやろうとしてしまうかもしれませんが現実としてはただの時間とお金ロスです

そこで例えば MENTA などを通じて現場で働いているエンジニアの人から1時間や2時間程度で相談にのってもらう程度であればそんなに負担にならず。

(検索トップに出てくるような人気の人たちはマーケティング寄りな人が多いのと一人に使える時間が限られているのであまり人気のないエンジニアさんを選ぶと良いのかなと自分的には思っています。)

余談:ITエンジニア業界は「逆職人の世界」

「逆職人の世界」とは親方からビシバシ指導や教えてもらったりする学習方法とITエンジニア業界の学習方法とでは真逆になっているという意味で言いました。

おそらく真面目に肉体労働で働いたり、わからないことはなんでも聞くことを是とする環境でこれまで過ごしてきた人たちからすると違和感しか覚えないかもしれませんがITエンジニアの世界でそれは嫌われる行為です。

しかし、言語化している方が少ないと思ったのでここで解説したいかと。

なぜITエンジニア業界の人はわからないことをなんでも聞かれることを嫌うのかというと、ITエンジニアの世界は学習に終わりがないため先輩エンジニアの人たちも常に新しいことを"自分で調べていって実装すること"を慣習としています。

これは技術力の有無とは関係なく人間が覚えられないくらいの技術量をこなさないといけないため都度、 "自分で調べる力"が大いに求められるからです。

自分も覚えたことは"頭では"忘れてしまうため思い出すため都度、リサーチしてまた実装。ということを繰り返しているし今後もそうなんだろうなあと。

親方現場では教わることというのは限られていていかにそれらを洗練させていくのかにかかっていますから一つ一つを何度も丁寧に教わることに意義はあります。

しかしITエンジニアの世界は一つのことを洗練させているうちに新しいトレンドに追いつけなくなるので都度、新しいことを覚えながらそのうち「どんな言語でもすぐに覚えられる」という状態に気がついたらなっているという世界です。

すなわち"新しい技術をいかに手際良く調べてものにできるのか"を暗黙知として体得している生き物がITエンジニアです。(と思っています。)

したがって、仕事内容として「常に自分で調べること」がスキルとして暗に含まれています

ですので「ろくに調べていないのに質問ばかりしてくる」=「職務を怠慢している」という図式がなりたってしまい、親方仕事では仕事を頑張っている行為がサボっている行為に変わってしまう可能性があります。

こういったことから親方現場なところで働いた人や工事現場の世界を知っている人たちからすると真逆のアプローチであり「逆職人の世界」だなあと。

(自分もかつては全身油まみれになる現場で働いていましたので"いかに先輩から教えてもらえるのか"と"自分で勝手に調べて覚えるのか"の違いがわかります)

現役エンジニアさんでスクールなどに違和感を覚えているのもこの辺が理由の一つとしてあるんじゃないのかなあと思います。

スクールから連想することは手取り足取り教えてもらう「職人の世界」です。

しかし先に述べたように「自分で調べていくスキル」というものが必要でプログラミングとは別に身につけないといけません。

人に安易に教えてもらえる環境で「自分で調べていくスキル」が身につくのかどうか、特に初学者向けの内容は調べやすさでいえばかなり易しい部類です。

したがって、そんな世界ですから個人的に"目標がある程度決まっている人"でかつ "技術の習得面に限って"いえば、初学者が誰かから教わるというスタイルであるスクールやメンターを通じて学習することにメリットはあまりなく、独学で学習することも大差ないと考えています。

(たまにメンターとなる人から学習すべきものや方向性が合っているのか、他に習得した方が良い技術は何かなどをたまにまとまった時間をとってもらって聞くのであれば非常に有意義だと思います)

ちまたに溢れている教材で十分学習できるし、結局のところ初学者レベルで習得できる技術は自身で調べられるようにならないと技術力は身についてもエンジニアの人たちが必要だと口を揃えていう"自走力"は鍛えることができないからです。

ここでプログラミングをする過半数が独習(つまり自走してきている人が業界に多い)していることを示している引用をします。(Codersという書籍からの引用)

独習可能な技術職はめったにない。ジェット機ドリームライナーの翼を趣味で作って技術を身につけた人をボーイング社が採用することはありえない。医学部に行かず、知り合いで練習したという人に目の手術をしてもらうなど、想像しただけでぞっとする。ソフトウェアは例外で、大学や、それこそブートキャンプのようなところでさえ勉強したことのない人が作った製品がごろごろ転がっている。いろいろいじっているうちに習得する人が少なくないのだ。プログラマーからよく言われるのだが、コーディングは、技術職としては大変珍しいことに、プロと同じツールをアマチュアも使うことができる。これが携帯電話なら、マイクロチップの工場も必要なら精密なはんだ付けを行う装置、さらには、おそらくケース試作用の3Dプリンターなどもなければ設計することもかなわないが、ソフトウェアならノートパソコンが1台あれば事足りてしまう。コードを書くときにはコードエディターを使うが、その多くは無償で提供されている。このように参入障壁が低いことも、「ある程度、独習した」コーダーが69%、情報科学の学位のないコーダーが56%、「完全に」独習だったコーダーが13%(スタックオーバーフロー調べ)となっている理由のひとつだろう。いずれも、好待遇の技術職としては、信じられない数字だ。

クライブ・トンプソン. Coders(コーダーズ)凄腕ソフトウェア開発者が新しい世界をビルドする (Japanese Edition) (Kindle の位置No.6300-6311). Kindle 版. 


スクールやメンターの存在意義

「スクールだと自走力が身につかないってこと?いやいや、自走力がないからこそ自走力が身につくまでやる気や継続力をサポートしてくれるのがスクールやメンターのメリットでしょ。」

という人もいますがそれも違うと思ってて誰かから鼓舞されてやる気や継続をしてもその人らがいなくなったらやる気も湧かなくなり継続もできなくなります。

プログラミングの学習は永遠に続くものですので自身の内側からモチベーションを生じさせないといつか手が止まってしまいます。

したがって他者から尻を叩かれる環境より自身で学習そのものが楽しいと思えるようになった方が目標を達成できた後にも役に立ちます。

また"環境が大事だ"というのもわかりますが、本当に良い環境は初学者同士で集まるところではなく自分のロールモデルとなるような人たちの集まる場所が1番の良い環境です。

それが実現できないから仮想的に現場の環境を構築してくれているスクールなどへお金を投じて実装に触れるわけですが、エンジニアは勉強会を積極的に開催するので地方の方だとオンラインを活用しないといけませんが現役の人たちと知り合うのは可能な話です。

"目標や方針"に関してはググっても出てこないので決められないのであれば誰かにヒントをもらって走りながら具体化させていく作業が必要です。

(ちなみに考えや行動に迷いの多い人のところにはマルチ商法の人たちが群がりやすいです。
基本的に相手の方から初学者の人へやさしく声をかけてくるメリットはないので相手の方からやたらと誘ってくる人がいたら警戒しましょう。)

とはいえ8割以上の方はおそらく「目標っていわれてもあんまり思い浮かばないなー」と思います。

そうした人がスクールやメンターなどの外界の人と相談しながら設定するのであれば利用するのはアリかなと思います。

そこでではないですが、目標の設定に関しては、次ページから解説しているのでまずはそちらで試してみてください。

ちなみにそのうち就職もしたいし、Webサービスも開発してみたいし、趣味でアルゴリズム作ってみたいとかもあるし、と色々な気持ちが入り混じっている人の方がリアルだと思いますのですぐに目標が定まらなくても手を動かしながら少しずつ方向を見つければ大丈夫だと思います。

ニワトリが先か卵が先か

自分は"逆算式"の学習をオススメしていますが価値観の違いとして"ステップアップ式"を重視する方も少なくありません。
つまり、成果物よりも先に基礎から積み重ねていく派です。

ですが自分は学生や趣味ではないプログラミング初学者は現実的な時間リソースとして、実際の開発業務との相性の良さとして"逆算式"で学習することを提案しています。

"ステップアップ式"の学習法とはコンピューターサイエンスから学びましょう、トレンドに流されずに歴史の長く需要の高い言語をしっかりと身につけた上で新しい言語にもトライしようとか、算数からやり直しましょうや国家資格(基本情報技術者)をとりあえず取得しましょうなどです。

これらはニワトリが先か卵が先かの問題であり、どちらが正しいなんておごがましいことは言えません。

しかし自分はプログラミングの世界は学べることに尽きのこない"沼"だと思っていて基礎から学ぶにしても一つ一つがとても奥深いです。
そのためやることに優先順位を決められない場合は時間が無限に溶けていきます。

しかも初学者であればそれを手を動かした経験と紐付けながら学習できるわけではなく、座学中心で学ぶこととなるため実装する際に必要な"新しい技術をいかに手際良く調べてものにできるのか"の暗黙知を体得していくことはできないと考えています。

(もちろん基礎は大事ですし自分も今はWebサービス開発を通じて手を動かした中で基礎力やチーム開発力が不足していると思い中級者向けエンジニアのカリキュラムを受講して基礎をやっています。)

ですが"逆算式"で開発すれば必要なものだけ学習できて時間も節約できます。

また、必要な技術や成果物を選びとる情報の取捨選択を通じて"新しい技術をいかに手際良く調べてものにできるのか"を暗黙知も体得していくことができると考えます。

したがって"逆算式"をあくまで運営者はお勧めしているし実際に自分がとったアプローチでもあります。

実践に手を動かしてみよう

ここまで前置きが長くなりましたが次ページから少しずつ手を動かしていくパートになります。

①プログラミングに関する目標を設定する
②目標に必要な技術や成果物を調べる
③目標に必要な技術や成果物を分解して一つひとつで何か作る
④分解した一つひとつで何かを作るという小さな目標のそれぞれで②と③を繰り返す
⑤目標に必要な技術を習得して成果物を完成させる

それぞれの手順を実践してみてください。
といっても項目ごとにポイントを解説しているのでご安心を。次のページは「①プログラミングに関する目標を設定する」です。

次のページ

Copyright © 2021 あきふみ. All rights reserved.