【体験談】ゼロから始めるプログラミング生活!僕が独学で学んできたイバラの道

【体験談】ゼロから始めるプログラミング生活!僕が独学で学んできたイバラの道

「プログラミングを独学で学びたいけど実際どうなの?できるの?」という疑問を持ってこのページに訪問してくださったあなた。僕からの答えは「できるよ。でもまぁまぁシンドイから覚悟してね。」です。

プログラミングは試行錯誤を繰り返しながら継続することができれば、ほとんどの人が一定のレベルまではできるようになると思います。一定のレベルというのは、仕事にできるレベルです。ただ、初めてプログラミングを学ぶという方は具体的なイメージがつかないかもしれません。この記事では僕が実際に独学でプログラミングを覚えた時にどのようなことを考え、どのようなことをやってきたのかを紹介します。

決して効率的ではない部分も含まれていますが、あなたの学習の反面教師にでもなれれば幸いです。

 

 

【体験談】ゼロから始めるプログラミング生活!

では、早速僕が独学でプログラミングを学んでいった過程を辿っていきましょう。イメージしやすいようにまずは、当時の僕のスペックから紹介します。

 

プログラミングを始めた当時のスペック

年齢は31歳でした。「プログラマー35歳限界説」という科学的根拠のない主張に対して、焦りみたいなのを覚えてた気がします。「やべー、俺あと4年しかねぇ」って。40超えた今も元気にプログラミングやってますし、いまだに学ぶことだらけなのでぶっちゃけ限界とかはないです。自分が降りた時が限界。

当時のスキルはというと、HTMLとCSSとちょっとのJavascriptがさわれるというレベルでした。ホームページ制作・運用とSEOをする会社に属していたのですが、入社前に独学で身に着けたHTMLとCSSでなんとか頑張ってる状況でした。まだスマホが普及してなかったので、レスポンシブ対応とか存在しない時代です。

 

プログラミングを始めたきっかけ

僕はSEOを担当する部署にいたので、仕事としてはテクニカルなSEO対策とコンテンツの充実を図るみたいなことが中心でした。とはいえ、営業力が鬼のように強い会社だったので、全国の中小零細企業や個人事業主を中心にアクティブな案件数が3000件を超えていました。

全ての案件のドメイン・サーバー管理まで面倒を見ていた訳ではなく、お客様自身が管理されてるケースにおいて「知らない間にドメイン有効期限切れてた」とか「サーバー会社への料金払い忘れで表示が消えてた」なんてことがチラホラありました。そこで、定期的にサイトの死活チェックみたいなのをやっていたんですが、件数が件数だけになかなかシンドイ。

作業としては、URL叩いて表示されてればOK、表示されなかったらNG。NGの原因を調べて正常に戻るようなんとかする。それだけのことなんですが、人の目でチェックすることに不毛さを感じ、チェック作業を自動化したいと強く思いました。この「大量のサイト死活チェックを自動化したい」というのがプログラミングを始めたきっかけです。

 

初めに学んだこと

僕の選択がベストだったと言い切る自信はないですが、僕の場合はPerl(パール)というプログラミング言語から入り、ちょっと後にPHPを学びました。

 

Perl(パール)言語から始めた理由

Perl(パール)言語から始めた理由 【体験談】ゼロから始めるプログラミング生活!

僕が初めてのプログラミング言語に選んだのはPerlでした。当時の会社でメインで使っていたCMSがMovableType(ムーバブルタイプ)で、そのMovableTypeがPerl製だったというのがPerlを選んだ理由です。ホームページに設置するメールフォームもPerl/CGI製のものが多かったですし。

どのプログラミング言語を学んでも共通して身に着ける基礎的な部分はほとんどPerlで身に着けました。基礎的な部分というのは具体的にいうと、変数への代入、配列やハッシュ、ifを使った条件分岐、whileやforなどのループ処理の理解です。これらは、多少の方言の違いこそあれ、どのプログラミング言語を学んでも必ず扱うことになります。

Perlはモジュール開発をしている日本のプログラマーが非常に多く、身近に感じれる言語でした。また、「WEB系ならPerlでしょ」という時代だったので始めやすかったです。2020年現在でいうところのPythonのような勢いがありました。しかしこの後、訳あってPHPを学び始めます。

 

 

PHPを学んだ理由

PHPを学んだ理由 【体験談】ゼロから始めるプログラミング生活!僕が独学で学んできたイバラの道

Perlでプログラミングのいろはを学んだんですが、その後PHPを学び始めました。一番の理由はPHPだと環境構築が簡単にできたからです。PerlでもPHPでも同じことを実現することができるんですが、いざレンタルサーバーに公開して動かそうという段階になるとPerlは一気に難易度が上がる印象がありました。(今思えば大したことではないんですが、当時の僕にとっては苦痛でした)PHPは本番環境へのアップが断然ラクチンだったんです。

僕は何から手を付ければいいかわからないプログラミング初心者には、PHPから始めることを薦めています。その理由については詳細をまとめているのでそちらを読んでみてください。

 

独学でプログラミングを始める人におすすめの言語

独学でプログラミングを始める人におすすめの言語

 

 

プログラミングを学んで作ったもの

プログラミングを学んで作ったもの

基本的なことを学んだ後は、作りたいものを実現していきました。欲しいものを作るといっても、ぶっちゃけ何から取り掛かればいいかわからない状態でしたが、右往左往しながら作っていきました。これまでにどんなものを作ったのかと、そこで学んだことを紹介しますね。

 

サイトの生存チェックツール

これは、僕がプログラミングを始めようというきっかけになったツールです。Perlで作りました。仕組みとしては、

(1)チェックしたいURLを全て載せたテキストファイルを用意する(1行に1URL)
(2)URLのテキストを読み込んで1行ずつ処理を行う。
(3)行う処理は、URLにHTTPリクエストを送りレスポンスコードを受け取る
(4)受け取ったレスポンスコードとURLをテキストファイルに結果として書き出す

というシンプルなものです。

 

学んだこと

モジュールの使い方(LWP::SimpleとEncodeというモジュールを使いました)
ファイルの読み書き(日本語の文字化け対策に苦労しました)
HTTP通信とレスポンスコードについて(正常なら200、エラーの場合は404、500などが返ってくること)

 

 

Perl/CGIで作られたシステムの修正

これはお客さんからの依頼で対応しました。Perl/CGIで作られたアンケート形式で回答によって次の表示を変えていくシステムです。「不具合が起きているけど作った担当者が退社してしまし困っている」ということで、ソースコードを丸ごともらって解析し不具合を解消しました。

 

学んだこと

他人が作ったソースコードを読んで処理の流れを理解する(書く人によって、こんなに変わるもんなんだなぁと感じました)

 

 

楽天アフィリサイトの自動生成ツール(スパム)

楽天が提供してくれている商品APIと、自分が用意したタイトルと文章を組み合わせて大量のHTMLファイルを生成し、内部をリンクでつなぎサイトに仕上げるというツールを作りました。スパムです。これも初めはPerlで作りました。

Google検索エンジンが格段に賢くなった現在は全く通用しない手法ですが、作った当初は効果絶大で月に50万近く稼いでくれることもありました。今はほとんど稼げませんし、そもそもスパムなのでドメインの信用が失墜します。全くおすすめしません。古き良き時代のブラック手法という感じです。

スパムサイトの量産は徐々に効果が薄れてきたのと、「これってどうなんだろう?」という良識が働き始めたので半年もしないうちに辞めました。とはいえ、楽天APIを利用してサイト構築支援をするという部分は面白かったので、Perl以外の言語でも同じことができるものを作ったりしました。

 

学んだこと

外部のAPIで呼んだデータを受け取って、それを元にサイトを構築する流れ
関数を分割することで処理の見通しがよくなるように工夫できるようになった
Perlで作ったスクリプトをPython、Ruby、PHP、C#で同等のツールにしてみた
C#ではWindowsのEXE形式にコンパイルしてGUIで操作できるソフトに仕上げた

 

 

中古買い取り店の顧客管理システム

PHPとMySQLを使って顧客管理システムを作りました。非常にシンプルな作りで会員データの登録、中古買い取り情報の登録、電話番号や名前での検索が可能、といった機能を持たせています。今でもレンタルサーバーでサクサク動いています。

 

学んだこと

PHPとMySQLによるCRUD処理(読み書き、更新、削除)
IDとパスワードによるユーザー認証(パスワードはハッシュ化して保存)

 

 

WEBアプリケーション(予約システム)

ここで一気にハードルが上がったんですが、依頼を受けて美容サロンの予約管理システムを作りました。既に導入していた商用の予約管理システムの動きを見て、同等のものを作り、さらに欲しい機能を追加する、という流れで進めました。プログラミング言語選定からデータベース構造の設計、フレームワーク選びなどなど、僕のプログラミング人生で最も試行錯誤したプロジェクトでした。今も保守と機能追加を行いながら元気に稼働しています。

 

学んだこと

CakePHP3による開発(公式ドキュメントに書いてあることを組み合わせてやりたいことを実装できるようになった)
データベース設計
MySQLの最適化(アプリケーション側でループさせずSQLで集計することでパフォーマンス爆速化)
VPSにLAMP環境を構築・運用するためのノウハウ

 

 

実践に勝る学びは無い

これまで僕がプログラミングを学びつつ作ってきたものを紹介してきました。紹介したもの以外でも細かいツールなどをいくつも作ってきました。プログラミングでもなんでもそうだと思いますが、「実践に勝る学びは無い」ということが言えます。

「すべてのこと完全に理解するまで仕事として受けられない」という完璧主義な考え方では、いつまでたってもお勉強で終わってしまいます。6割くらいやることが理解出来たら、積極的に「やります!」と手を上げてトライする姿勢が大事だと思います。わからない部分は必死のパッチで調べまくってなんとかしましょう。

最悪うまくいかなかったら、報酬を1円ももらわず、代わりのプログラマーを探すお手伝いなどすればいいわけですから。でも安心してください。自分では絶対にできないような仕事は請けようという気になりませんし、そもそもそんな仕事は自分に回ってきません。怖気づくことなく、果敢にチャレンジしていきましょう!

 

 

僕がプログラミングを独学してて感じたこと

僕がプログラミングを独学してて感じたこと

ここまで僕がどのように独学をしてきたかを紹介してきました。こうやって文章にまとめてみると、スマートにやりたいことを実現してきたように見えるかもしれません。でも実際は壁にぶつかっては立ち止まり、壁を乗り越えては迷子になり、時には休憩をして・・・といったことを繰り返してきています。ぶっちゃけ僕にプログラマーとしての才能はありません。ただ継続してきただけです。

そんな僕ですが、プログラミングを学び続けてきて感じたことの中で役立ちそうなことがいくつかあるので紹介します。

 

とりあえず写経でも意味はある

学び始めは、ほんとに全く意味がわからないことだらけです。プログラミングの本を使って学びはじめたとき、自分のタイプミスや本の誤植、使っているツールやミドルウェアのバージョン違いなどなど、「思った通りに動かない落とし穴」がいくらでもあります。

本などに書かれているプログラミングのソースコードをそのまま写して動かしてみることを写経と言ったりします。一見無意味に見える写経ですが、とても意味があると僕は考えています。実際に入力して動かしてみることで、目で読むだけでは得られない情報をめちゃくちゃ多くキャッチできます。「本の通り打ち込んだけど、なんかエラー出とるやんけー」状態から正常に動くように修正する時に、めっちゃ経験値溜まってます!

本やサイトなどで出てきたサンプルコードを目にしたら、とりあえず打ち込んで実行してみましょう。その習慣を身に着けるだけでも、プログラミングへの理解のスピードが段違いに変わってきます。

 

関係ない技術だとしても興味があったら手を出してみる

プログラミングの学習方法のサイトなどを見ると「自分の作りたいものを明確にして、その作りたいものを実現するために必要な言語を使おう」みたいなことが書いてあったりします。これって正論なんですが、初心者がそんなことできる訳ないと思います。

というか実際にプログラミングで飯を食っている人たちですら、「○○を実現するために使えるミドルウェアはAとBがある。どっちが適しているか判断が難しいからモックを作って動かしてみてテスト結果の良い方を選ぼう。」みたいなことをやってるわけです。

なんとなく最適解みたいなものを選ぶセンスは大事ですが、それってある程度回り道をしてきたから身に着くことだったりします。一見関係ないと思える技術でも興味があったらとりあえず手を出してみましょう。「詳しくなってみたものの実際に使う機会がなかった」なんてケースが少なくないですが、知見を広げておくことは長い目で見るとメリットになります。

 

中途半端になることを恐れない(途中で投げ出しちゃったって平気)

プログラミングって突き詰め始めると無限にあるんじゃないかって錯覚してしまうくらい学ぶことが多いです。途中で挫折してしまうということもあると思います。でも大丈夫です。一度学んで挫折したとしても、半年後にまた取り組んだら前よりも理解できるようになってるなんてことがザラにあります。

思い通りに進まなかったとしても気にすることなく、昨日の自分を超えていければよし、くらいの軽い気持ちで継続していきましょう。

 

英語を読めるとかなり有利

プログラミングを学ぼうとすると避けて通れないのが英語です。エラーメッセージも英語で出てきますし、不具合を調べるときにも英語が読めると拾える情報の量が一気に増えます。

問題にもよりますが、僕の経験上、英語のプログラミング系のQ&Aサイトで解決策が見つかることが多いです。フレームワークやライブラリのドキュメントも英語で書かれているものが読めれば最新の情報をキャッチアップできます。Google翻訳などを駆使して、雰囲気だけでもつかめるようにしておくと幸せになれます。

 

実践に勝る学びは無い

先ほどもお伝えしましたが、実践することが一番の近道です。短期間で成長したいと思ったら「お金をもらって仕事として請けて、わからないことも必死のパッチで乗り切る」という経験をするのが一番だと思います。待ってくれてるお客さんがいて、お金ももらってたら言い訳なんてする時間ないですからね。無理のない範囲でチャレンジしてみてください。

 

 

まとめ

僕が独学でプログラミングを学んできた経緯などを紹介しました。「無駄なことをせずに最短ルートで学びたい」という気持ちもわからなくもないですが、無駄な回り道にも学ぶべきことが多く含まれていたりします。「昨日できなかったことができるようになった!」といった小さな成長を噛みしめつつ、楽しみながらプログラミングを学んでください。

最後に、僕が初心者にプログラミングを教えるならこの本をオススメするというのを別記事にまとめました。学習の参考にしてみてください。

 

独学でプログラミングを身に着けた僕がおすすめするPHP入門書5選~PHPを本で学ぶならこの順番で

独学でプログラミングを身に着けた僕がおすすめするPHP入門書5選~PHPを本で学ぶならこの順番で

 

この記事で書いたことについて、質問などあったらコメント欄に記入してください。答えられる範囲で回答いたします!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください