プログラミングにおける趣味と仕事の違い。

同じプログラミングなんだよね。ベンチャーのIT企業でも、上場IT企業でも、JAVAだったらJAVAだし、C言語だったC言語なので、同じプログラミングをしているわけだ。そして個人の趣味でやってるプログラミングも同じなわけ。

じゃあ、趣味と仕事の違いってなんなんだろう?って考えると次の3点かなって思う。

1.バグがないことの保証

2.セキュリティ

3.チーム開発

バグがないことの保証

仕事で組むシステムはバグがあったらいけない。会社というのは信用がとても大事なので、個人の趣味とは全然違うわけだ。お金がかかっているのでね。そして会社が作るシステムというのは重要性が高い。例えば医療システム、金融システム、不動産システムとか。金融システムにバグが多いと、社会に影響があるから、金融庁から注意警告を受けるらしいよ。だからバグをなくさないといけないの。

バグをなくすためには、設計をしっかりする。基本設計書、詳細設計書、DB設計書などを書く。そして、たくさんテストをする。単体テスト、結合テスト、負荷テスト?などなど。

まぁ、設計書を書くのはSEの仕事なので、開発者としては、テストの仕方をしっかり勉強しておこう。PHPだとPHPUnitとかある。SeleniumとかHeadless Chromeとかでテスト自動化とか。まぁ、これらを取り入れている企業はまだ少ないけど。

セキュリティ

セキュリティも大事。簡単に言うと、「ユーザーが入力してサーバに送った情報は全て疑え」ってこと。バリデーションってやつだね。数値しか来ないところにちゃんと数値が来ているかと、文字列が来た場合にはそれ以降の処理はせずに、エラーを返す。

Laravelを含めてフレームワークは元々バリデーションとか、危険なテキストをエスケープするような仕組みが入ってたりするから、これらの仕組みとか使い方をちゃんと理解しておくこと。

まぁ、セキュリティに関する分厚い本があるので、これをちゃんと読めばいいよ。「体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践」て本ね。

チーム開発

会社でやるプログラミングはほぼ必ず複数人でやるよ。僕が経験したプロジェクトだと、C言語の車載システムなんかは、100人レベルの規模間だったと思う。小さくても、プログラマーは5人はいたかな。

そこで大事なのは「読みやすさ」ね。このコードは何をしているのかを適切にコメントを書くとか、変数や関数名はスネークケース(snake_case)とキャメルケース(camelCase)をどっちにするかちゃんと決めて一貫性を保つとかね。

本で言うと「リーダブルコード」とか「コードコンプリート」とか「クリーンコード」とかを読めばいいよ。

あと、同じ開発者同士のコミュニケーションを大切に。例えば、お昼ご飯を一緒に食べたり、たまに世間話したり。一言で開発者と言ってもデータベースに詳しい人もいれば、フロントエンドに詳しい人もいれば、サーバサイド、サーバインフラに詳しい人もいるので。

自分が頑張って作った関数を実は他の人がすでに共通関数化してたりするからね。

以上、参考にされたし。

2ヵ月間のシステム常駐案件が決まったっぽい

ちょっと先だけど8月からLaravel&VueJSの常駐案件が決まったっぽい。あとはエージェントの会社にハンコ押しにいくだけかな。

面談行ったけど、とにかく行くまでが暑くてたまらなかった。「スーツ着用」とのことだったけど、夏にスーツ着て、ネクタイも締めるって狂気だよね。

まだ詳細は聞いていないけど、いざスタートの場合は服装は自由なのかなぁ。面談のときにエンジニアっぽい人が私服を着ていたので、自由でいけるっぽいけどね。

単価は月50万円、税別なので、税込みだと54万円になる。12ヵ月としたらまぁ年収600万円くらいだけど、まぁ12ヵ月フルでやる気はない。途中で空く場合も考えられる。

初めてのLaravel&VueJS案件ということでオライリー本の「Vue.js: Up and Running」と「Laravel: Up and Running」を7月中に一通り読んでおこうと思う。ORMとか使ってないと気まずそうだな。まぁ今やってる案件がまさにLaravel&VueJSなので、今後Laravel&VueJS案件は増えてくると思うので、いったん在宅案件に切り替えるという考えは間違っていなかったかな。

そして10月&11月はまた在宅にして、12月からは長期狙いで常駐案件を頑張ろうと思う。

1年のうちの半分を家で、残り半分を常駐案件で、と考えているよ。年収にしたら、400万くらいかな?

ダメだね・・。

Laravel入門その1「開発環境を整える(XAMMP編)」

さぁLaravelを始めよう。

まずは、開発環境構築なわけだが、一番簡単なのは、なんだかんだで、XAMPPなのかなって思う。結局これが最速で開発環境を整えられる方法かと。

www.youtube.com

環境構築の流れ

1.XAMPPをインストール

2.composerのインストール

3.Laravelのインストール

では、1から順番に説明する。

OSはWindows10(64bit)っていう前提で説明する。

1.XAMPPをインストール

XAMPPのサイトにアクセス

・「Windows向けXAMPP 7.2.5」(PHP7.2.5)(←2018年5月13日現在)というボタンをクリックしてインストーラーをダウンロードする。

・ダウンロードされた「xampp-win32-7.2.5-0-VC15-installer.exe」というインストーラーをクリック(もしくはダブルクリック)。

・「はい」とか「OK」とか「Next」とか「Finish」を押す。アメリカの国旗を選択し「Save」を押す。

・XAMPPコントロールパネルのApacheのStartボタンを押す。緑色になればOK。

・ブラウザに「http://localhost」と入力してEnterボタンを押す。何かXAMPPの画面が出たらOK。

2.composerのインストール

composerのサイトにアクセス。「Download」をクリック。

・「Download and run Composer-Setup.exe - it will install the latest composer version whenever it is executed.」の「Composer-Setup.exe」リンクをクリック。

・ダウンロードした「Composer-Setup.exe」をクリック(もしくはダブルクリック)する。「はい」とか「Next」を押し続けてインストールを完了させる。

・コマンドプロンプトを起動する。画面左下のテキスト入力に「cmd」と入力すると候補が出るので、それをクリックしたりして起動する。

・「composer -v」と入力してEnterボタンを押す。composerのバージョン情報が出たらOK。

3.Laravelのインストール

・「C:\xampp\htdocs」配下のフォルダ&ファイルを全削除する。

・コマンドプロンプトで「cd C:\xampp\htdocs」実行。

・「composer create-project --prefer-dist laravel/laravel test」コマンド実行。(testの部分はなんでもよい)。すると「test」というフォルダが作成され、その中にLaravel一式がインストールされる。

・「C:\xampp\apache\conf」フォルダ内の「httpd.conf」ファイルを編集する。「DocumentRoot」で検索して、249行目の「DocumentRoot "C:/xampp/htdocs"」を「DocumentRoot "C:/xampp/htdocs/test/public"」に変更して上書き保存して、XAMPPコントロールパネルからApacheを再起動する。(Stop & Start)

・ブラウザに「localhost」と入力しEnterを押して、「Laravel」と大きく書かれたちょっぴりお洒落なトップページが表示されることを確認。

 

「働き方完全無双」に見るひろゆき氏の地主思想

ひろゆき氏の著作って結構少なくて、最初はたしかホリエモンとの共著だと思うんだけど、ひろゆき氏単独の書籍って多分2冊しかないよね。ということで、多産で内容が薄くなってきている堀江本よりも、ひろゆき本の方が今は熱いのかなって。

先日紹介した堀江&落合の「10年後の仕事図鑑」と比較しても、ひろゆき本の方が相当ちゃんとした妥当な内容の本かと思う。

堀江さんは譲歩しないのね、例えば学校については「不要だから、ガラガラポンするしかない。」というのがホリエモンの考えで、「けど、学校は現在あるし、いきなり無くせないよね」という世論に対して一歩も譲歩しないのね。

一方、ひろゆき氏は現実的な落としどころを探って僕たちに提示してくれている気がする。ひろゆき氏は、意外と保守的な考えを持っている。例えば「貯金」は良いこととしており、自由になるための手段としている(仕事が辞めやすい、など)。むやみにお金を使わない節約思想もあり、日本人に馴染みやすい。

そして何より思ったのは、ひろゆき氏ってすごく「地主」的思考をしていること。経営者というよりも、投資家・資産家つまりは地主っぽい発想をしているなと。ビルマネジメントとかビルメンテナンスみたいな。

実はホリエモンと落合氏って労働者体質なのかなって。

ホリエモンってすごく努力家で、すごく仕事する人なんだよね。ホリエモンチャンネルとか、動画を毎日配信してるし、有料メルマガも毎週配信してて、ものすごい数の質問に回答してるわけ。めちゃくちゃ大変だよ。それのみならずホリエモン大学校も運営している。

落合氏もそう。頭も賢ければ労働時間もすごく長いし、スキマ時間に仕事する、すごい努力家なの。

一方、ひろゆき氏ってできるだけ仕事しないでどうやって収入を得て生きていくかっていう地主っぽい考えを持ってる。ここがすごく違うとこだね。

だから、これから沈みゆく日本をどうしたらいいかっていう提案もすごく地主っぽいのね。つまり、そのまま経済を停滞させて、観光地にして、海外からリッチな観光客に来てもらって、たくさんお金落としてもらおうよっていう考え。

ひろゆき氏って今何してるのかというと、

「未来検索ブラジル」という会社の業務と、「4chan」という匿名掲示板サイトの管理人業務をしている

 

そうな。具体的には、

動画の生放送などで大きなトラブルがあったときに技術的なアドバイスをしたり、FBIや裁判所から書類のサインを求められたときの法的な対応などを主にしている

 

そうな。また、

決算のときに資料を作って税理士の人に送ったりする

 

そうな。

ルーティンワークは他の人に投げて、そのルーティンワークがうまく回っている限り、僕はやることがない

 

んだそうな。この地味な感じ。彼自身、ウェブ上の地主・管理人なのだ。

多くの日本人労働者が持っていない地主思想をのぞき見るのに、本書は最適ではなかろうかと。

システム常駐案件(PHP)で学んだこと

去年12月から4月末までの5ヵ月間システムの常駐案件で働いていた。

一人でやる時と違うことが多々あり、今後も常駐案件をする可能性が100%くらいあるので今後に生かすためにも、過去の案件で学んだこと、気付いたことなどをつらつらと書いていく。

■ウォーターフロー開発

常駐案件の開発フローって高い確率でこのウォーターフロー開発手法だと思うのね。具体的に言うと、要件定義があって、基本設計があって、詳細設計があって、製造(コーディング)があって、単体テストがあって、内部テストがあって、結合テストがあって、運用テストがあって・・、その先は知らないし、知らなくてもいいかもね。

この一連の流れと、その内容を理解しておくべきだろうね。

■関心の分離

画面設計においては、設計者とお客さんとのやりとりとか、予算の都合で1画面に5画面くらいの機能が凝縮されてしまう場合があって、高い確率で炎上するのね。ていうかしたのね。

こういう画面のコーディングを任された時に、どう対応するかっていうのは大事かも。クラスを分けて、機能単位にファイルを分割するとか、バリデーション専用のクラスを作って別ファイルにするとか、共通関数を作るとか。

■自分の進捗を把握し、常に報告できるネタを用意しておくこと

特に進捗が悪い場合や、期日が迫っている場合には、しっかりと自分の担当している画面のコーディング状況を把握しておく必要がある。

これが結構難しい。というのは、進捗を把握するのにも時間がかかって、コーディングが遅くなってしまうから。けど、これはやらないとダメなんだろうね。

急がば回れ」ってやつかな。

■進捗が悪い場合は、できればこまめに、自分から進捗報告を行うべし

口頭でもメールでもよいが、上長に進捗報告をするようにすべき。順調でない時ほど、自分から、こまめに、いわゆる「ホウ(報告)・レン(連絡)・ソウ(相談)」をすべきだった。これは正直どう訓練したらいいかが分からない。

■画面確認も含めて実装完了とせよ

コーディング完了が決められた期日に間に合わないとしても、画面を確認しないままコードだけを書いて、「コーディング完了しました~」って言うのは、かなり良くないことらしい。(当たり前?)。きちんと画面確認を行って、きちんと動くことを確認できて、はじめてコーディング完了、実装完了と進捗報告してよいわけである。

Oracleをあまり知らなければ、Oracle案件は避けるべきかも

SQL文とかほぼほぼMySQLと同じなんだけど、意外と面倒なので、知らないならやめといたほうがいいかも。

MySQLについての理解を深めるべし

オライリー本を買うとかドキュメントを読むなどしてMySQLの理解をさらに深めた方が良さそう。例えばCASE WHENとかの構文とか今いち理解できていないので、複雑なSQLとかを理解した方がよさそう。トランザクションロールバックとかね。

■POST値は必ず検証する

例えばPOST値に1~5の数字しか入ってこない場合は以下のようにチェックするべし。

if( !in_array($_POST['id']), [1,2,3,4] ){

    // エラー画面へ遷移させるなど

}

■if ~ elseif ~ else

場合によるが、if elseifだけの場合はelseも必要かどうかを確認する。まぁ、よく分かっていないけど長いことC言語やってた人がここ指摘してた。

■==と===

例えば

$value = 0;

として、

if($value == false){

    // 条件に入る

}

if($value === false){

    // 条件に入らない

}

if($value == null){

    // 条件に入る

}

if($value === null){

    // 条件に入らない

}

==は緩めの一致で、===は厳格にデータ型まで一致していないとtrueにならない。場合によっては==でもいい場合もあるし、場合によっては===じゃないと危険な場合もある。基本的には===を使った方が安全な気がする。

■関数実行時は戻り値を変数で受けてfalseなどの場合はエラー処理

関数は多くの場合戻り値を返す。その戻り値を変数でうけるべし。

$str = getSomeString( $val );

if( $str === false ){

    // エラー処理

}

// 以下は文字列が返って来る前提の処理なので、falseが返るとあまりよろしくない。

$string = '結果は' . $str . 'でした!';

■テストについての理解

例えば、テスト駆動開発の概要とか、PHPUnitの使い方とか、テストに関する理解をある程度持った方がいいのかなって思った。案件で実際にPHPUnitを使わないとしても、どういう風にテストを行うものなのかっていうのは分かっておいた方がよさそう。

おっすオラ、筋力をつける

自分は自信がない。なぜ自信がないかというと、自分の能力が高いと思わないからだ。たまに自分は天才だと思うこともあるが、比較的失敗したら落ち込みやすい。典型的な自分に自信が持てないタイプの人間である。

なんの根拠もないのに自信を持っている人もいるが、自分はどうも根拠がないのに、自信を持つことができない。

成功は自信につながるし、自信は成功につながる。成功するためには、自信が必要である。

仕事をするにも、スポーツをするにも、恋愛をするにも、バイナリーオプションをするにも、自信とか精神的強さが必要だ。

精神的強さとか、自信とかってどうやって鍛えたらいいかがいまいちよく分からない。目に見えないからよく分からない。

だから、「肉体と精神はつながっている」という説に立って、「肉体的強さが精神的強さに繋がる」って考えて、つまり自分の精神力を強め、自信をつけるために、ひたすら筋トレして筋力を高めようと思うの。

だから、ジムにまた通おうと思う。ひたすら筋肉を増やしていくよ。ここは思いっきり投資していこうと思う。自分の筋力投資によって自己の価値を高めるわ。

僕のやりたいこと

自分が好きなことや趣味、が大きな成功につながるらしいので、僕の好きなことピックアップしてみる。

・音楽系

幼いころ僕はあまり外で遊ばずおもちゃのレコード再生機でレコードをずっと聞いていたらしい。中学校は野球部だったが、友達の影響でギターを始めて、中3で親にエレキギターを買ってもらった。高校時代はラグビー部だったが、家でずっとギターを弾いていた。大学でも友達は音楽の趣味の合う人と仲良くなることが多かった。大学時代に家庭教師の生徒がライブ活動をしていて、ベースでサポートで参加して、かなりライブで演奏した。100回超えるくらいは演奏したと思う。

・プログラミング

大学4年生くらいからプログラミングを始める。Javaの授業は取ったことあるけど、よくわからなかった。10冊くらい本読んでみたけど、結局身につかなかったな・・。そのかわりPHPはいけた。あと当時はやっていたFlashのActionScriptを大学時代は一番頑張ったかな。

・バイナリーオプション

2年前くらいからバイナリーオプションを始めた。ハイローオーストラリアというサイトがよくできていたので。でも結局は200万円くらい損した。つい最近も1日で18万円損した。昔に比べると成長した。損が少なくなっている笑

・教えること

小学校時代の夢は「学校の先生」だった。大学時代も家庭教師のバイトをずっとやっていた。そして教職免許を取るべく、教職の授業にも出ていた。最後の教育実習で生徒の前でうまくしゃべれないことが判明し、挫折した。また、制度が変わって、結局免許を取ることができなかった。だけど、教育にはどうも興味関心があり、プログラミング教育のなんちゃってyoutubeチャンネルを開設した。バイナリーオプションを教えるチャンネルも開設した。ギターを教えるチャンネルも開設しよっかなーと思っている。

・youtubeを見ること

これもみんなそうだよね。うちの子供もそうだよ。ビジネス系とか自己啓発系の動画が好きなので、そういうのをこのブログに紹介するくらいかな。

・ホリエモンの動画を見たり、本を読むこと

大学時代からホリエモンが好きで、「稼ぐが勝ち」からの本を読んでいる。最近はキャッチアップしていない本もあるけどね。というのも内容がほとんど同じだから。

以上を参考にビジネスを考えていこうと思う。

以上