カテゴリ:

こんにちは。

台風で外出できないので、ブログを更新。

結構な長文なのですが
簡潔にまとめると、
・プログラミング楽しすぎワロタ
・ビジネスにめっちゃ通じるとことあるじゃん


ということなのでが、下記つらつらと書いてみます。
なお、超スーパー素人の意見なので、体系的でも網羅的でもないのでご容赦を。

最近はエンジニアの方と一緒に仕事をすることが多くなってきました。一言でエンジニアといっても様々なお仕事があると思いますが、僕が日々接するのは、大学時代にコンピューターサイエンスを体系的に学んだような専門的なバックグラウンドを持つエンジニアの方々です。彼らと接する中で僕が学ぶことは本当に多く、その一部を知人と定期的にシェアをしていました。ふとその知人が「そんなに面白い発見があったなら、もっとみんなでシェアしようよ!」と勧めて下さったこともあり、このエントリーを書くことにしました。僕自身は当該分野に関しては完全に門外漢で、一つ一つのレベルが低いということは自覚しているのですが、そんな僕だからこそ持てる何らかの視点があるかもな、と思い、いろいろ感じたことを書こうと思います。(言葉の厳密な定義や専門的な観点からの考察はお詳しい人に譲ります。。。)


こんな人に読んでもらえると良いかもしれません
・プログラミング経験が無い自分に多少なりともコンプレックスを抱えている人
・プログラマーがやっていることを何となくでも知りたい人
・元エンジニアが企画職でも活躍できるのは何故か?を知りたい人



全体を通じて言いたかったこと
・プログラミングは(少しかじるだけなら)思ったほど敷居も高くないし、楽しい。コンプレックスをもっていては勿体ない。
・ただし、残念ながら素人レベルでやれる事は限定的である。やりたいことを随意に実現するためには広範な知識/経験と深い知恵が必要。
・プログラミングとビジネスって意外なほどたくさんの共通点がある。だからこそビジネス領域でも活躍できる人が多いのかもしれない。



なんで今更プログラミングをやろうと思ったか
一頃で言うと、エンジニアの頭の中を知りたいな、と思ったのです。

・エンジニア学生から学ぶことがとても多かったから
私事ですが、昨年の秋頃から某企業で新卒採用を担っておりまして。この採用って仕事が面白いなと感じています。これまで営業を通じて得た学びと、企画を通じて得た学び。その双方を混ざり合わせて実践していく領域が採用なんじゃないかな、と感じられるからです。じゃあなぜエンジニアなの?という点について。僕の会う学生さんはエンジニア志望の方が多く、彼らと話すたびに新たな学びのヒントを頂いているのです。純粋で強い知的好奇心が根底にあって、問題を解決するのが大好き。そのせいか「物事を面白がる力」「遊ぶ力」が高く、「創造力」に溢れているように感じます。彼らがビジネス分野でもっともっと活躍できる環境を作り、一緒に楽しく働きたいな、と素直に感じられます。(採用担当者としては幸せなことですね)

・尊敬するビジネスパーソンが元エンジニアだったから
また、これは採用とは関係ありませんが、「この人は仕事がデキるな」と感じたビジネスパーソンにバックグラウンドを聞きまくっていた時期があったんです。そうすると、元エンジニアだという人が多かった。論理的に物事を考えることができ、大量の業務を効率よく分解してチームメンバーと一緒に片付けていける。自分にはない強みをもった人がいて、その人たちには何らかの共通のバックグラウンドがありそうだ。もしかしたらエンジニアという仕事(※趣味、志向なども含む)の中にヒントがあるのかもしれない、と思うようになりました。

そんなエンジニアの皆さんの頭の中を少しでも知りたいと思い、一念発起してプログラミングをかじってみることにしました。大学の授業で " hello world " を出力するのに四苦八苦した経験しかありませんが(汗)、「何かを学ぶということに遅すぎるということはない。」という格言に勇気をもらいました。本論とは関係ありませんが、格言って大事だな、と常々感じます。個人の弱い意志を、後ろから力強く支えてくれるような気がします。


何のためにやるのか
ということで、下記のことにチャレンジをすることにしました。
・とにかく自力で一つのプログラムを書き切ってみる
・それを通じて、プログラミングやエンジニアに関する理解を深める
・同時に、エンジニアとビジネスの共通点と相違点を自分なりに仮説立てる



どんなテーマを設定したか
テーマを決めるにあたって考慮したのは下記の4条件です。
結果的に、processingを用いた面積図の自動生成プログラムを組むことにしました。その題材として、全国47都道府県における年齢×性別の構成比率を可視化することにしました。


・テーマ設定のポイント
1.自分が使いたいと思うものを作る
2.何らかのアルゴリズムを含んだものを作る
3.初心者が頑張って到達できる技術的な範囲を大きく逸脱しない
4.その代わり、ビジネスインパクトのあるものを作る

簡単ですが、下記にそれぞれの条件について記載しました。個人的な志向も多分に含まれていますので、万人にお勧めの方法という感じでもないかも知れません。

1.自分が使いたいと思うものを作る
自分がやりたいことじゃないと長続きしない。というのは人の常です。なので、せっかくチャレンジするならば自分が使いたい、つまり役に立つものを作ろうと考えました。私が大学時代に学んだプログラミングは" Hello world "のみでした。大学の授業でよくわからない呪文をコピーして、よくわからない謎の画面にペーストし、これまたよくわかならい謎のボタンをクリックすると、" Hello world "という文字列が出力される。この体験を非常に楽しんだ友人もいましたが、ビジネス領域に関心の強かった当時の僕には、残念ながらそれは無味乾燥な経験として頭に残りました。

2.何らかのアルゴリズムを含んだものを作る
昨年の秋から学生さんと話をする中で「HTMLやCSSはプログラミングじゃありません」という主張をよく耳にしました。「え、なんで?」と聞くと、概ね「計算を含んでいないから」という意味の答えが返ってきました。この主張について詳しいところは専門家に譲りますが、こんなやりとりもあって、せっかくだから何らかの計算(アルゴリズムという人もいた)を含んだテーマを選ぼう、と決めました。

3.初心者が頑張って到達できる技術的な範囲を大きく逸脱しない
素人は素人なりに出来る範囲で学んでいけばいいと、というのが僕の信念です。素人がプロ野球に出てもホームランは打てませんからね。そんな考えもあり、例えばオブジェクト指向については、練習こそしたものの(テキストを読んで基本的な構文を理解と実装をする程度)、使いこなすには結構な慣れが必要そうな気配をムンムンに感じたため、最終的なプログラムには組み込みませんでした。

4.その代わり、ビジネスインパクトのあるものを作る
これは1.とも関係します。私はビジネスの世界に身を置いてきた人間なので、有り難いことに解決したいビジネス課題を山ほど抱えていました。その中で特に関心が強かった「情報伝達」に関係するテーマを選ぼうと考えました。具体的には、ドキュメンテーションの武器の一つである「面積図」を作ろうと決めました。なぜなら、面積図の情報伝達力は極めて大きいにも関わらず、手元の既成ソフト( officeとか)ではサポートされておらず、作成に時間がかかっていたからです。※ビジネスにおける面積図の威力はコチラが詳しい。


やったこと
1.プログラムを書くための準備(1週間ぐらい)
 1-1.開発環境構築(Java,processing)
  − Java SE Development Kit (JDK) のインストールと設定※ここを見ながら
  − Processingのインストールと設定※ここを見ながら

 1-2.予備知識の取得(データ型、四則演算、if文、for文、配列、入出力、コンパイル)
  −「スッキリわかるJava入門」という本を通読し、RPG的を作る気分で基礎を勉強
  −「Built with Processing」という本を通読し、描画の基礎を勉強

 1-3.使用データの取得と整形
  − これと言った面白いデータを持っていなかったので総務省HPから人口統計をダウンロード
   オープンデータの文化は素晴らしいっすね。
  − 自分が処理できる形式(csv)に整えて、無理矢理inputできるようにした

2.実際のプログラム作成(1日ぐらい)
 2-1.外部データを配列に格納
  − Processingファイルで配列を作成し.csvを読み込む
  − .csvファイルは4×47個の数値データ+項目名で構成した
  − グラフタイトルの描画を自動化したかったので、配列の型はstringにした

 2-2.描画に必要なタテヨコのサイズを算出する
  − 格納した値をfloat型に変換し、行、列、行列合計をforループを用いて算出
  − 描画に必要な各行、および各要素の面積を決定するため下記を実施
   − 行合計を行列合計で除し、各行の存在割合を算出(=各都道府県の太さ)
   − 行内の要素を行合計で除し、各要素の存在割合を算出(=各要素の太さ)

 2-3.描画
  − チャートタイトル、横軸、縦軸の描画(描画エリアの全体を規定)
  − forループを用いた各要素(四角形+数値)の描画


できたもの
・input file:こいつを視覚化しました。都道府県別かつ年齢帯別かつ性別の人口がまとめられています。
26 PM

・processing file:このエントリーの最下部に貼付けました

・output file:こんな感じで視覚化できました。チャートタイトルとメインメッセージ以外は全て自動で作れるようになっているので、行数や列数が増えても、中の数値が変わってもサイズが自動で調整されるようになっています。今回はデータ項目数が多すぎて、かえってシンプルさを失ってしまった感があります。この点はプログラムの反省というよりはデータ選択やグルーピングが稚拙だったという点が改善ポイントになりそうです。
44 PM


大変だったこと
・開発環境の構築手順が全然わかんなかった → Google先生に感謝
 − Javaって何?PATHって何?
 − エディタの使い方がわからないから結局miという標準エディタで乗り切った
 − Eclipseの使い方がわからなさすぎて、結局ターミナルから全てコンパイル&実行
 ※初心者の壁は、実際の開発よりも、そのための準備(上記1.1や1.2)かもしれない。
  特に開発環境は慣れてる人に手伝ってもらった方が絶対に良い

・一連の作業をMacで実行したのだが、Windowsに慣れきった自分には辛かった
 − ファイルの保存や名前の変更の仕方がわからん
 − エクセルが使えないので、仕方なくOpenOfficeとかいう神ソフトを使用

・嫌というほど自分のミスに向け合わなければならない
 − プログラムは基本的に動かないものだと感じた
 − タイポ、型間違い、配列要素数超過の嵐で全く前に進まない
 − しかも全て自分が原因なので、気づいたら自分を責めがちになっている
 ※なので、仕事に直接使えるプログラムを作るんだ!というモチベーションは大事
 ※「というか、これをスラスラっと書けるエンジニアってすごくね?」と思った

得られたもの
結構大変なことばかり書きましたが、それ以上に貴重なものを得ることができました。
それは、自分で作ったプログラミングが動く瞬間を目にする快感です。
ひとたびプログラムが動く瞬間を体験してしまったら最後。
もはや全てのバグ取りは、完成という大きな道に落ちている石コロにしか思えなくなります。(時には大岩のようなものもありますが。笑)



今後やりたいこと
・GUIを駆使した直感的なプログラムに昇華させたい
・外部サイトからデータを取得してリアルタイムに反映できるようにしたい
・そのためにデータベース設計とかもトライしてみたい
・大きなプログラムを作るためにチーム開発もしてみたい
・計算量の工夫を要する面白い問題にトライしたい


おまけ(プログラミングと自分がやっている仕事の共通点)
・明確な目的(解決したい課題)を持つ。さもなければ作業が目的化する。
10年近くビジネスの世界に身を置いて痛感することですが、人は目の前のことに没頭するあまり、当初の目的を忘れてしまいがちです。目の前の作業は、もっと大きな何かのための手段であるはず。その大きな目的を達成するために必要とあらば、手段は常に見直さなければならないのです。プログラミングにおいてもそれは同じで、より上位の目的のためには、当初計画していた作業を見直して随時修正をすることが必要かもしれません。手段を修正するのは、体力的にも精神的にも結構しんどいプロセスなのですが、当初の計画に固執して突っ走ることが必ずしも良い結果にならないことを、経験豊富な開発者はご存知ではないでしょうか。

・予め機能毎の優先順位をつけておくこと。さもなければ無為に資源(=特に時間)を溶かす。
例えば私の担当している採用業務では、やりたい企画が100個あったとしても、その中で現実的に実行できるのはほんの一握りに留まります。それは人・物・金・時間・情報など組織の保有する資源が限られているからです。だからこそ、本当にどの企画に価値があるのかを見極めるために、事前に徹底的な優先順位付けを行います。優先順位の無い中で闇雲に資源をまき散らしていては、お客様に提供する価値が減少し、競合他社の後塵を拝するからです。今回のプログラミングにおいても、私が実装したい機能や、その機能水準はたくさんありましたが、その多くは断念しました。なぜなら、インプットに多くの時間を費やした結果、実装にかける時間が充分に確保できなかったからです。これは日々の仕事と通じるところがあり、多いに反省の材料になりました。

・優秀な人ほど謙虚(ネタです)
才能を持つ若者(特に競技プログラミング界隈)には「僕は世界一プログラミングができない」という自虐的な発言が散見されます。でも実際にはそう言った人たちはかなりプログラミングのできる人であることが多い。自分よりも更に優秀な人と比べることでそのような認識に至っていると思いますが、言ってみればそれは「無知の知」ともとれる発言であり、ソクラテスの域に達していると言っても過言ではないと思います。仮に彼らがネタとしてそのようなことを言っているのであれば、それは初心者に対するパワハラにもなりかねないので若干の注意が必要かも。


おまけ(プログラミングと自分がやっている仕事の相違点)
・とにかく対峙する相手が圧倒的にロジカル
プログラミングは言わば「鬼のようにロジカルな上司を相手に仕事をする」ようなものだと感じた。人を相手にする職業では、上司のご機嫌が良い時は提案が通りやすい、みたいなラッキーパンチがごくまれに存在する。しかしプログラミングにはそんなことは無い。きちんと設計して、実装したとしても、そこにバグがあったら正しい挙動はしない。そんな環境で成果を出し続けてきたエンジニアはきっと論理的で実践的。ビジネスパーソンとして活躍する人が多いことも納得できる。

・出来る事を広げるには猛烈なインプットが必要
これは仕事も同じじゃないか?と思っていたのですが、やろうとしてみてその違いに気づきました。例えば営業と企画をやっていた人が採用業務をやる場合、全然inputをしないでひたすら実務にあたるだけで、なんとかギリギリ最低限(50点ぐらい)のレベルはクリアできたりします。なぜなら、いずれも人間を相手にするお仕事だから。もちろん、しっかりと仕事をするにはそれ相応の努力が必要なのですが、プログラミングほど痛烈に「歯が立たない」感覚はありませんでした。しかし、僕にとってのプログラミングは、言わば弁護士や医師のような、圧倒的な壁を感じました。例えばサーバー関連やDB関連のお題が目の前に提示されたときに、なんとなくやって50点がとれるような感覚がまるで湧きませんでした。この意味で、やっぱり相手がコンピュータであるということの違いは大きいように感じます。


最後に
つらつらと書いてきましたが、30歳になって初めてプログラミングをしてみた感想は、それ自体がとても楽しく、仕事にも活かせる気付きを得られるチャレンジだった、ということです。今までは「エンジニアってどんな仕事なんだろう?」「なんでこんなに楽しそうにしているんだろう?」って不思議に思うことが多かった。でも、自分の手を実際に動かして、自分の頭でウンウン苦しんで、そして自分の作ったプログラムが動く楽しみを知って。そんなプロセスを踏めたおかげで、ほんの少しだけ、彼らのすごさの片鱗を感じることができたように思います。自分が知らなかったことに、少しだけ踏み込んで体験してみることで、かえって自分の得意なことや、向き合うべきテーマが明確になったような気がします。


男30歳。プログラミング童貞を捨てて良かったなと。
みなさんもどんどん捨てていきましょう。

何かを学ぶということに遅すぎるということはない。



以上。


※下記は参考文献と、僕の書いたコード(こちらは非参考文献。笑)です。

参考文献

・スッキリわかるJava入門



・Built with Processing[Ver. 1.x対応版] -デザイン/アートのためのプログラミング入門


・ビューティフルビジュアライゼーション (THEORY/IN/PRACTICE)



作成したコード
--------------------------------
size(840, 840);
colorMode(HSB, 100);
background(100);

int r = height*8/10;
float y = 0;
float x = 0;

//N setting
int n = 5;

String file[] = loadStrings("file.csv");
String[][] data = new String[file.length][n];

float[] sumRow = new float[file.length];
float[] sumColumn = new float[n];
float sum = 0;

//data input
for (int i=0; i < file.length; i++) {
String tmp[] = split(file[i], ";");
for (int j=0; j < tmp.length; j++) {
data[i][j] = tmp[j];
}
}

//calculate Sum
for (int i=1; i < file.length; i++) {
for (int j=1;j sum += float(data[i][j]);
sumRow[i] += float(data[i][j]) ;
sumColumn[j] += float(data[i][j]) ;
}
}

//Chart Title
textSize(20);
fill(0);
text("Chart Title :: messages",width/20,height/20);

translate(width/20, height/7);

//Draw Area
strokeWeight(1);
fill(99);
rect(0, 0, r, r);

//memori yoko
line(0,-height/36,r,-height/36);
line(0,-height/36+5,0,-height/36-5);
line(r,-height/36+5,r,-height/36-5);
textSize(height/48);
fill(0);
text("X-axis Name (e.g.AGE)",3,-height/36-10);

//memori tate
line(r+width/12,0,r+width/12,r);
line(r+width/12+5,0,r+width/12-5,0);
line(r+width/12+5,r,r+width/12-5,r);
fill(0);
pushMatrix();
translate(r+width/12+3,0);
rotate(radians(90));
text("Y-axis Name (e.g.AREA)",3,-10);
popMatrix();


//Byouga
for (int i=1;i float h = r*sumRow[i]/sum;

for (int j=1;j
//Draw each Rectangle
strokeWeight(0.5);
stroke(50);
fill(100*float(j%((n-1)/2))/float(n),50);
rect(x, y, r*float(data[i][j])/sumRow[i], h);

//Draw figure
textSize(height/96);
textAlign(CENTER);
text(data[i][j],x+(r*float(data[i][j])/sumRow[i])/2,y+h/2);

//Draw Yoko Name
if (i==1) {
textSize(height/80);
textAlign(CENTER);
text(data[0][j], r*(1+2*float(j-1))/(float(n-1)*2), y-height/80);
line(x+r*float(data[i][j])/sumRow[i]/2, h/4, r*(1+2*float(j-1))/(float(n-1)*2), -height/120);
}

//Draw Mid Line (Not Usual)
if (j==(n+1)/2) {
stroke(0, 99, 99);
strokeWeight(3);
line(x, y, x, y+h);
}
x+= r*float(data[i][j])/sumRow[i];
}

//Draw Tate Name
textAlign(LEFT);
textSize(height/80);
text(data[i][0], r+5, y+3+h/2);

//Prepare for Next i
y += h;
x = 0;
}
--------------------------------

いつも大学に通う時には農学部を横切っていく。

その農学部にある巨木のライトアップが素晴らしい。

暗闇に浮かび上がるような存在感。

ふと写真を撮ってしまった。

まだ見てない人はぜひ。

農学部の木

大学四年生の多くは卒業のために
卒業論文を書かなければならない

うちの学科の場合

書いた卒業論文は表紙に教官の印鑑を押してもらって
コース長に提出しなければならない
その印鑑は言わば卒業という大地への通行手形
印鑑をもらえるのか、もらえないのか
そんなちょっとした緊張に
僕ら学生は少なからずドキドキするものなのだ

もらえるに決まっているけれど
もらえなかったらどうしよう

緊張と楽しみが入り混じった瞬間
それを楽しむために卒論を書いてきたといっても
それは大げさではない。
と、いう表現が大げさかもしれないが。


で、今日はその提出日。


朝(というか昼)起きてメールチェックすると
教授からの一通のメールが。

なんだ?と思い見てみると


『 卒論提出大丈夫ですか。
  只今正午を回りましたが、まだ誰も印鑑を
  受け取りに部屋に来ていません。     』


とのこと。


あぁ急いで研究室に行って印刷して
ハンコもらわなきゃなぁ
いよいよそんな日が来たか
それにしても相変わらずうちの研究生はのんびりだなぁ

などと思って小走りで研究室へwent.
研究室に着いて印刷をしていると
既に印刷を終えていた友達が



『 んじゃ、俺らはハンコもらってくるわー 』



って言って研究室を出て行った
その間にもひたすら印刷
環境系の研究室なのに片面印刷で紙の無駄遣い
早く印刷終わってくれー
俺もハンコをもらいに行きたいー



そこへ友達が帰ってきて一言



『 ハンコもらってきたぜー(おんぷ 』



おお、いいなぁ
そうかぁ、お前はもう卒論完成かー
俺も早く印刷してハンコもらいにいかなきゃな
早く押して安心したいなー

みたいなふうにブツブツ言ってる俺に友達が一言




『 え、だから、ハンコをもらってきたんだって 』




と、言うわけで結局は自分でハンコを押して卒論を提出しました。
もう少しドキドキしたかったなぁ、というお話。


とりあえず提出できて良かった。
めでたしめでたし。

いくらなんでも、このペンネームはナイだろ
ザビエル










というわけで、行ってきた、ダヴィンチ展。
ついでに展望台も行けたからオトク感。

やっぱ

東京の景観は、横浜とは比べ物にならないくらい、ゴチャゴチャ。
見れば見るほど、アメーバに見えてくる。
どこまで増え続けるのだろう、この巨大ビル群は。
皇居の緑が不自然なほどに目立っていた。


『不自然なまでに保護されている自然は、自然か、それとも不自然か』


という、言葉遊びが頭に浮かんだ。

ま、とりあえず、この街では

『自然が不自然で、不自然が自然』

ということだろうか。

景観(ドンキの頂上の絶叫マシーンが見えた)
ドンキが見えるよ










肝心のダヴィンチ展は
レスター手稿が暗闇の中でしか見えず、いけてなかった。
凄いことはわかるが、それがあまり伝わってこない。
はっきり言って、げんなり。
だからあんまり書かないでいいや。

それでも頑張って撮った写真
ダビンチ








それから新橋へ向かい、某先輩のサプライズパーティーを実行。
楽しんでもらえたようで何より。

大好きな先輩の新しい門出を

心からの祝福と

ほんの少しの切なさが混じった思いで祝うのでした。


お幸せに☆

さて、研究の発表が終わった。
楽勝だった。

教習の効果測定(テスト)も終わった。
決して自慢できないが、無勉でギリギリ合格点だった。

ネットも復旧した(金を払った)。


残すはレポートのみ。
頑張ろう。

やっと教習が終わった。
後はテストを三つ受ければ運転免許ゲッツ。
夏休みは思いっきり遊べそうだ、と言いたいところだが、もろもろの事情が重なり、思った以上に忙しくなりそうでもある。
くぅ、時間を作る能力を身につけてやる。


そして明日は領域プロジェクトという、卒論の準備みたいな発表の日。
んで、今日はそのリハーサル。
出来はまぁまぁ。
三連休を返上して死ぬほど論理を練ったおかげで筋がすっきりした。
これなら明日も乗り切れそう。


ふぅ、
いよいよ夏が見えてきたって感じだ。

ラストスパート、頑張ろう!

続きを読む

何とかして今日を自由にするために、徹夜で卒論を進めた。
圧倒的なデータ処理。
打ち込み&解析。
めんどい&ねむーい
続きを読む

研究日っていうと、教師の休日のことをイメージしてしまうのは、俺が巣鴨育ちだからだろうか。
続きを読む

研究室内定デターーーーーーーーーー ( ≧ ∀≦) !!

というわけでとりあえず向こう一年間は研究を一生懸命やるような気がしてます。少しぐらいは勉強しなきゃ、大学にきた意味が無いよね。自分の学力は高校一年のときがピークだった。そろそろ二度目のピークを迎えておきたい。できたらいいけど、できるかな。

今からブクロで買い物。三年経って今さら家具を買う予定。本棚とテレビラック。今まで持っていなかったことが奇跡だ。

自分が行きたい研究室の希望者が受け入れ人数を越えてしまったため、レポートで評価するとかいうことになった。そんで、今日は必死こいてそれを考えていましたとさ。続きを読む

↑このページのトップヘ