一度はやっとけアセンブリ言語

公園のベンチ

アセンブ言語(Assembly Language)を使っていた時期があります。私はずっとアセンブがプログラム言語のことだと思ってました。正しくはアセンブは機械語に変換するプログラムのことでした。そのハードウェア(CPU)のアセンブ言語仕様を実装したものがアセンブなので、なんとなく話のつじつまが合っていた。つまりアセンブをアセンブでアセンブする(なんて語感がいいんでしょう)という関係。そして機械語を再びアセンブリに変換するのが逆アセンブルです。こんなハードよりのプログラム言語の話に付き合ってくれる若者はいないでしょうが、リーバースエンジニアリングとか、高級言語の何が高級なのかとかが話題になったときネタにはなります。

アセンブリ言語はハードウェアに近いプログラミング言語です。マシン語はCPUレベルの命令です。ここまでやると、コンピューターの世界が全て0と1だということを実感できます。何を学習しようか迷ったら基礎の基礎をやってみてちゃいかが?

アルゴリズムはExcelでも学べる

鉢植え

コンピュータで扱うアルゴリズの解説本で扱うプログラミング言語はC言語です。新しい本だとJAVAで解説してる本もある。しかし、この本で使っているのはVBAです。タイトルや表紙にもそんなことは書いてないので、自分で実際に手に取るまでわからなかった。オフィスのパソコンならWindowsとMS-Officeは標準装備。客先だと、自席のパソコンにvisualstudioやgccをインストールできないし、サーバにも接続できない。そんな職場でもアルゴリズムの実装ができる点がユニーク。しかし、フローチャートとExcelのスクリーンショットなどのソースコードの説明がメインでアルゴリズム自体の解説が少なめ。VBAの環境や使い方も説明はない。EXCELを実行できるのは面白いアプローチだと思う。学校の授業とかね。

夏休みシーズンの前にやっておくこと

エアコン
  • 契約は夏休みシーズンに入る前に成約させる

会社間で業務契約を締結させるには、いろんな人に話を通した入り書類を交わしたりして結構な手順を踏まないいけません。こちらに打診があってから実際に現場に入るまで一ヶ月くらいかかるのが普通ですが、ただでさえ夏場は契約的に動きが少ないのに、社内で権限の高い人ほどまとめて夏休みを取るので取りつく島もありません。

  • 季節的な進捗阻害要因を織り込む

取引先のチームの担当者も交代で夏休みを取ってます。資料の催促をメールでしたら自動返信で「夏期休暇中につきX月X日まで出社しません」てな文面が返ってきたことあります。他にも図書館やコワーキングスペースの休みとかビルの点検などなど。そういこともあるんだと想定しておかないと進捗に致命的な遅れがでて、休暇先でも仕事しなきゃならない羽目になります。別に避暑地で仕事するのも嫌いじゃないですけど。

  • いつにも増して健康管理は大事

とにかく睡眠時間は確保します。経験から言うと寝酒は逆効果です。夜型の人でも朝早く起きてしまえば、その夜は眠れるようになります。慣れるまでは四六時中眠いですが、2〜3週間もすればそのサイクルが習慣化します。テレビが見られないくらいは我慢しましょう。

仕事場の暑さ対策に氷嚢を使ってます。人前では恥ずかしいですが目覚まし効果は抜群。ダイソーのやつは周りから水が垂れるのでこっちに変えました。

最近、どんな言語でプログラムを書いてますか

フィギュア

私はSwiftやってます。そうやって新しいプログラミング言語を学習を進める一方でC言語でcodeiqの出題にも挑戦してます。vimとgistだけでプログラムを書きます。その後でxcodeを使うと、この開発環境がどれだけモダンで開発効率のいいものかを強く実感できます。

他の皆は何を使っているの

こんなの見つけました。TIOBE 2015年前半プログラミング言語ランキング

スクリーンショット 2015-07-15 20.30.23

私の実感とはかなり開きがあります。どう考えてもC言語が2位だというのは納得がいかない。C#でもC++でもない、ただの”C言語”が2位です。これから取引する相手との会話でよく「XXは出来ますか?」と尋ねられるます。XXはプログラミング言語とかプロダクト名のことですが、そういうシュチュエーションで”C言語”というフレーズを聞かれることなんてまずない。いや、全くないです。自分が最後にC言語に関わったのは15年前。それもシステム開発ではなくてプログラミング実習の講師でした。翌年から研修で使うプログラミング言語はC言語からJAVAに変わったので、それ仕事としてC言語を使った最後です(遠い目)。

The ratings are based on the number of skilled engineers world-wide

複数の検索エンジンでキーワードで調査した結果らしいです。なんて言おうが私の置かれている状況ではTIOBEのレポートと現実は乖離してます。国内と世界では状況が違うのか、私が知らないだけで国内でもバリバリ使っている分野もあるってことなのかもしれないです。あっ、別にC言語の開発がしたいわけではないです。便利な開発環境があるなら知りたいだけです。

最近読んだ本

少しネタバレになるかもしれません。タイトルの”鈴木さん”とは日本人に多い苗字に当て込んだわけではなく具体的に特定の個人を指してます。当人は著名な方ですが本文の冒頭に実名で書いてます。こんなことして怒られないのでしょうか。そんな大胆な口調なわりに、凡人には思いつかないような鋭い視点でインターネットの未来を捉えてます。過去と現在を結ぶ延長にあるのが未来。ドッグイヤーの時間の流れに放浪されそうな時は、インターネットの黎明期を振り返ってみるのもいいもんですね。

C言語でシーザー暗号(復号)

ドリンクカップ

どこのニュースでも熱中症に注意しろと繰り返してます。がぶがぶ水分を摂ってます。

codeiqから判定とフォードバックをもらいました。わざわざ丁寧に解説までしてくれるところが素晴らしい。挑戦するたびに何かしら学ぶところがある。いや、どちらかというと目から鱗が落ちるというか、脱帽するようなことのほうが多いかな。今回(基本的な暗号を解いてみよう[増井技術士事務所])の模範回答(Ruby)はとてもいいアルゴリズム(ROT13)だったので、復習がてら自分のソースコード(C言語)にもマージ。ソースコードを載せときますが、C言語だと型違いなど関係なく演算できてしてしまうあたりがワイルドです。

コンパイルと実行

cc -o codeiq codeiq_masui.c
./codeiq < indata

indataファイル

tbireazrag bs gur crbcyr, ol gur crbcyr, sbe gur crbcyr,
funyy abg crevfu sebz gur rnegu

複合結果

government of the people, by the people, for the people,
shall not perish from the earth

ずらす数を定数Xで宣言してます。26で一回りするので、13で2回ずらすとか、1ずらしたあとにさらに25ずらすとかすると元の文字列に戻ります。

民間企業にテレワークは普及するのか

ノラ猫

今日、テレビのニュースで総務省のテレワークの様子を紹介してました。そもそもテレワークとはなんぞや。

ウキペディア「テレワーク」より引用

テレワーク (Telework) あるいはテレコミューティング (Telecommuting) とは、勤労形態の一種で、情報通信機器等を活用し時間や場所の制約を受けずに、柔軟に働くことができる形態をいう。また、テレワークで働く人をテレワーカーと呼ぶ。

通勤通勤がゼロになって家族との時間が増えることをメリットにあげてましたが、自分はテレワーク賛成派なので、早く民間企業にも広まってほしいです。

番組では自宅から部下のパソコンのデスクトップを共有してたみたいですが、あれはテレビ的な演出で実務ではありえんでしょう。そんな単純なもんじゃないです。肝はいかに情報共有するかです。

ちなみ私が使っている情報共有ツール

Skype 打ち合わせ用です。番組で使っていたのもこのSkypeだと思います。
Dropbox ファイル共有。大きめのデータで世代管理も不要なときはこっちで共有してます。
Github/bitbucket ソースコードやウェブサイトのデータなど世代管理。githubは有料オプションの契約もしました。もうSubversionには戻れない。
Slack 今年のはじめにGoogle+ ハングアウトから移行しました。
Vagrant 開発環境の環境差異に事象の再現に悩まされることにのにうんざりして導入。仮想サーバを丸ごと送ったり受け取ったりしてます。
Googleカレンダ 簡易なスケジュールの共有に使用。

どのプロジェクトチームでも共通的な使っているのはこれくらい。タスク管理ツールが入ってないが、未だにEXCELのガンチャートで管理してます。丁度良いツールに出会えてないです。

中年プログラマーが生き残るためにしてること

パソコン

本日は久しぶりに晴れたので野菜の収穫に勤しんでました。同じようにファミリー農園には先輩達がやって来ます。口々に漏らすのは年金生活を不安がる話ばかり。やはり例の新幹線の事件の影響でしょうか。そんな中で大きな声でドヤ顔で収穫した野菜を自慢してる人たちもいます。なんなんでしょう、あの底抜けの明るさ。何か秘密があるなら知りたいです。

iMAC

もし、自分が「あなたのお仕事はなんですか?」と聞かれたなんと答えるか。出来るだけ一般的に通じる答え方として「プログラマーです」と答えておくと次の会話がスムーズです。しかし、そして自分でそう言ってしまったあとに訂正したい気分になります。何をしたらプログラマーと名乗ってもいいのか。言葉の定義すればプログラムを書いてその報酬で生計を立てている人がプログラマーです。いつもそこに疑問があるんのです。最近常駐した仕事だとbashスクリプト、teratemマクロ、VBAマクロでツールを作りました。こういう小さくて簡単な仕事ばかりしていると、もう自分はプログラマーとしては死んだも同然で、今さら復活は出来ないじゃなかと不安な気持ちになるんです。

生き残りの道をリモートワーカーに見た

地方で50歳を超えると客先オフィスに常駐する働き方は厳しいです。なんでも、聞くところによると、ぱったりとお声がかからなくなるとか。実のところ地方から都心まで満員電車で長距離通勤するのはキツイですし、近場の地方企業にオンサイトで常駐するような案件なんてまずないです。そういう事情を考えると、物理的な場所をとらわれない働き方をしていかないと生残れません。地方で働く、または自宅で仕事をする。かつてテレワークとかSOHOと言われた働き方、または今どきの前進的なIT企業が採用しているリモートワークのことです。単調な内職仕事のようなものからシステムの受託開発までいろいろな形態がありますが、以後、呼び方をひとまとめにリモートワークとし、リモートワークで働く人をリモートワーカーとします。リモートワーカーとして働けようになれば自分の年齢や住んでる場所、その他の私的事情すら問題にならなくなる。エンジニア不足が叫ばれている今のうちにリモートワークで契約してくれそうな企業さんとパイプ作っておきたいです。

エンジニア力の老化を遅らせる

少しづつでいいのでプログラミングを続けてます。我が身を振り返ると衰えが始まったのは、SIerに派遣されるようになった30歳代の頃でした。仕事をしながらプライベートな時間にも新しいプログラミング言語や開発アーキテクトの学習にあてるのはキツイです。しかし、すでに身につけた技術を維持するだけならどうですか。すでに自分が知っていることをちょっと反復するだけ。それなら簡単でしょ。いざ新しいプログラミング言語の勉強を始めるようとなったときに、プログラミング言語同士はどこかしら共通点があります。他言語の知識が新言語の理解の助けになります。

アルゴリズムやっとけ

そして数学的な考え方やアルゴリズムはプログラミング言語に関係なく使い回しができる知識です。既存アルゴリズムを使うか使わないかで生産効率が一桁くらいは平気で違ってきます。コンピューターが発明される何世紀も前からあるアルゴリズムが今のコンピューターなかでも使われています。プログラミングの仕事でない部分でも役に立つ。農作業やキャンプでも使います。学んでおいて損はないです。どこから学んでいいのか迷っているならすぐに実務で役に立つ検索やソートのアルゴリズムから始めるのをお勧めです。

学んだ知見は共有する

オープンプロダクトを公開するとか、オープンソースコミュニティーに参加する手もあります。私はプログラマとしてその域には程遠いですが、勉強会やカンファレンスでアウトプットすることも良さそうです。あと自分の経験から言うと、本を読んでいるだけじゃなくて、実際に手は動かさないと記憶に定着しません。本当に悲しいことですが、若かりし頃と違って、忘れるのはすぐなのに覚えるのは時間がかかってしまう。揮発性メモリのリフレッシュのごとく消えないように頑張ってます。

簡単な練習問題をじっくり解く

私は主にcodeiqpaizaのプログラミング問題で鍛錬してます。どの出題に挑戦するか決めたら、今の自分のベストのコーディングになるように何度でもやり直してます。

お金で解決する部分もあります

たらればな話をすればキリがないです。また、1からやり直せばいいのです。まだ新しいのに故障してるんじゃないと思うほど遅いDELLのパソコンたちは机から降ろして、iMacを買いました。27インチのディスプレは自分の目が良くなったと錯覚してしまうほどです。これは素晴らしい。またコーディングができるようになりました。

健康的にプログラムを書いて現役続行

スマホ画面

今日も雨です。でも梅雨が明ける夏。どこもうんざりするほど暑くなります。それに比べたら雨くらい平気です。

ところでプログラマーって何歳まで働けるんでしょうか。今までいろんなプロジェクトで仕事してきましたがIT企業で50歳過ぎの正社員は見かけません。かつて「プログラマー35歳定年説」なるものがまことしやかに語られてた事がありました。私見ですが、プログラミングは40代、50代でもできるはずです。そりゃ新しい技術は苦手ですが、それなりの仕事はできますよ。すごいお偉い方は別にして、先輩方はどこに行ってしまうんでしょう。
実は私は生涯現役でやっていくことを目指してます。しかし、どのプロジェクトチームでも50代のエンジニアを見かけません。オンサイトで働くことを現場に受け入れてもらう年齢に限界があるのでしょう。私はせめてサラリーマンと同じくらの歳でまではプログラミングを仕事にしていきたいと思ってます。別な課題としてオンサイト業務ではビジネスアワーはがっちり拘束されため、親の介護や、家族の看病などの私的事情との両立が難しい。今は徐々に働き方をオンサイトから自社持ち帰りに切り替えようとしてます。オンサイトではダメでも自社で働くなら割といい歳まで仕事ができるのでないかと目論んでるわけです。

SOHOの半分は自分の仕事場でやってます。実際にSOHOをやってみて痛切に感じたのは自己管理の重要性でした。特にリモートワークでは健康管理が重要でした。場所が離れていても同じひとつのチームなのですから、フィジカルにもメンタルにも働ける状態を保っておく必要があります。SOHOでは生活が乱れで仕事に集中できない状態になってしまったり、働きすぎれてバーンアウト状態になってしまうこともあります。ギリギリまで頑張ってしまう人だと通院が必要なこともあります。はじめは頑張っていても仕事が完成する前に倒れてしまっては全て台無しです。きちんと安定した結果を出しつづけて顧客からの信用を得るには、線表ばかりみてないで、仕事以外の私生活も充実させていくことも大切でした。

アマゾンでこのオライリー本が人気です。日本語版も予約受け付けしてます。

本の読者のヘルシー生活をトラッキングしてくれるiPhoneアプリまであります。タイトルからして冗談かと思ってましたがけっこう真面目です。
iPhoneアプリ – iTunes App Store [The Healthy Programmer]

Xcode 7 + Swift 2環境をインストールした

コーヒーマシン

天気の悪い日が続いてます。ジメジメです。コーヒーメーカー(ネスカフェのバリスタ)の中でコーヒー豆が固まってました。このコーヒーメーカーは工具無しで分解できる構造になってます。ピラ一枚だけの説明書通りに洗って乾かしたら復活しました。構造的に素人が組み立てしても部品の向きも間違えないように設計されてます。良くできた商品だと感心しました。機械は故障しないにこしたことはないですが、もしトラブっても誰でも復旧作業がきる。ここが素晴らしいです。我が身に置きかえてみると、システム開発もオープンで柔軟にできないものでしょうか。レゴで遊ぶみたいにコーヒーメーカーを組み立てながら思いました。

本日、メインの開発機にXcode 7 + Swift 2の環境を作りました。ダウンロードはここからで、Xcode 7 beta 2 Release Notesにあるリリースノートに目を通してます。

お約束のwatchOS 2.0のSDKが入っていました。WatchKit Appのプロジェクトも作れます。しかし、まだ腕時計に何をさせればいいのか全く思いつきません。それとiOS9のシュミレーターを含んでませんでした。新しいxcodeならiOS9用のSample Codeを実行できるものと期待してたので、ちょっと残念です。

失敗談:既存のプロジェクトファイルを開くとビルド環境とソースコードのコンバート処理が実行されます。逆向きのコンバーターはないです。ビルドするとエラーも警告もたくさん出るので、軽い気持ちでOKボボタンを押してしまうと大変です。私はとても修正しきれないと思ってtime machineから復元してからは、フォルダを分けました。

日本にフリーランスでやってるリクルーターはいないのか

カレンダー

7月です。今年も後半に入りました。週末の予定は全て雨で中止。外をぼんやり見ながらフリーランスの生き残り戦略に想いを馳せます。

私がやるオンサイトの仕事はほとんどサーバ系の仕事です。大手のSIer事業者のビルに常駐します。ウチみたいなとこが大手と直取引できるわけはないので、実際はSIer事業者のビルに常駐している別会社と契約します。いわゆるSES契約です。Linuxサーバ環境のメンテナンスチームに加わってプログラミング作業を担当するのが私の立ち位置です。

プロジェクトのどの工程で参加したかによりますが、たいていは契約期間が1年〜3年のお仕事です。入金が手堅い点は良いのですが、欠点もあります。契約更新は3ヶ月単位なので、いつ契約終了になるかわからりません。人員削減が始まると一番初めに整理されるのが自分達なのでまったく寝耳に水。どこのプロジェクトでもギリギリまで告知しないので困ります。

大契約終了したあとが大変です。やることは2つ。まずはスキルの棚卸しです。ドッグイヤーといわれるIT業外。進化が早いのはSIer界隈も例外じゃありません。各cloudサービスもDocer対応してきてます。インフラもコードを書くように管理されるようになれば、SIerもクリエイティブな仕事になる。おっと、話が逸れました。未来がどうなるかは私にはわりませんが、大きな変化の予感はあります。現状に甘んじてはいけません、キャッチアップは重要です。

もうひとつは次の受託仕事を探すこと。そんなのは派遣会社に登録すれば解決しそうですが、なかなかどうして難しいのです。自分で仕事を探すときはユーザ企業と直に交渉します。書類審査を通ったら、待遇や労働条件、リスクや将来的計画など回を重ねて話し合います。お互いの直接の利害に影響するのでかなりガチな話し合いです。こっちでは好感触だと思っていても落選することもあります。しかし派遣会社に依頼すれば全て派遣会社の担当者が行います。こっちの業務経歴書とスキルシートを預けて希望にあう募集に引き合わせまで全て丸投げです。しかしエンジニアのスキルは数値化できる類ものではないので、事務職のMOUSEやTOIECで評価するようなやりかたではうまくいかないです。ユーザ企業との面談もありますが時間も短いので突っ込んだ話はしません。現場に入ってから業務内容や労働条件や待遇でミスマッチが起きます。仲介料を払っているのに自分でユーザ企業と交渉しなければならない羽目になります。すごく仕事がやりずらいので勘弁してほしいです。

今日はこの本を読んでました。シリコンバレーでは大手派遣会社の他に、個人やっているリクルーターが活躍しているとこの本に書いてある。会社の看板ではなくて自分の築いた信用の上で人の仲介をします。つまりリクルーター業のスキルで起業した”プロフェッショナルのリクルーター”です。オンサイト期間中に契約交渉を同時進行でやるとはとてもわずわしいです。そういった交渉は全て引き受けてくれる人が欲しい。日本でもヘッドハンティングを生業している人達はいるらしいが、そういうスポット的な仕事では、契約期間中も継続的にフォローしてほしいのだ。もし契約金の2〜3割の手数料で優秀なリクルーターが雇えるなら是非お願いしたい。やっぱり、いない?仕事は自分の気合と熱意で探すしかないのか。

最近やったを書いておきます。
Web関連、問い合わせ対応が数件。
アプリ開発、githubで見つけたiGlyphTrainerのソースコードをビルドすべく解析中。Static LibaryとFrameworkも作製中。Appleのサイトでサンプルコードが新しくなっていたのでダウンロドードしてビルド。iOS9向けのソースコードもアップされている。
ブログ、他人にはあれこれアドバイスしているのに自分のことになるとサッパリできてない
営業活動、新たな求人サイトに登録。優先すべきはポートフォリオだよね。
スキル棚卸し、dotinstallでnode.js入門を視聴中。