Enjoy Architecting

Twitter: @taisho6339

「エンジニアとしての生き方」を読んで、働くことについて考える

最近、一週間ごとに一冊本を読むことを習慣にしてます。(´・ω・`)
今週は、中島聡さんの「エンジニアとしての生き方」という本を読んでみました。

Amazon.co.jp: エンジニアとしての生き方 IT技術者たちよ、世界へ出よう! (インプレス選書): 中島 聡: 本



NTT研究所、マイクロソフトを経て世界で活躍されている方だけあって、ものすごく率直で過激な意見の内容が印象的な本でした。日本は全然ダメ、国内に留まらず海外へ出て活躍していこう!みたいなことをとても推してましたね、、、
海外か、、、、、お外こわぃ、、、、、、、

それはさておき、ここでこの本の個人的に印象に残った部分を挙げて一度自分の中にある「働く」ことに対する考え方を整理しておこうと思います。


一番大切なのは「好きだから頑張れる」
(出典:中島聡(2011) 『エンジニアとしての生き方』 インプレスジャパン

 社会的地位だとか、学歴を活かしてとか給料とかそういうものでやりたくない仕事、楽しめない仕事をやるのはもったいない。自分のしたいことが会社の利益につながる、という意味でベクトルがマッチしていることが大事で、例えば残業させられる、ではなくそれが苦にならないような仕事につくべし。みたいな内容でした。

これ、今まで悩んでたことに大して直球な内容・・・・・・・・
自分は今、やりたいことに挑戦できる仕事か、安定してお給料もそこそこなお仕事かで結構迷ってました。
今自分が飛び込もうとしてるお仕事って、常に勉強したり努力重ねていかなければならないし、変化の大きい世界なので、のほほんと暮らしてたら間違いなく置いてかれるわけでして、、、、
今後その中で頑張っていくとしてモチベーション保ち続けられるのか、結果出せるのかっていうのが100%自信がない、、、、
あとせっかく良い大学入ったんだからもっと給与が高くて安定した仕事があるんじゃないかとか、、、(夢物語かも)


とまあこんなことを考えて色々悩んでたんだけど、なんだか迷いが晴れてきたのかなと思います。
この本読んで。というか元々心決まってたのかも、、、思えば最初から自分が何をしたいのか?っていうのを常に考えて就活してきてましたし、、、、
元々自分は「生きることを目的にして生きていたくない、それくらいなら死にたい」を常に心の中に掲げているので、たとえお金たくさんもらっても、安定してても、この先の人生で長く関わらなければならない仕事っていうものをつまらないと思って過ごしたくないと思ってて。
だから、単に大手の内定を目的にした就活の風潮とか、内定貰った企業の知名度とか規模とか、社会的地位とかで比較されるのもめっちゃ違和感覚えてました。
だからES何社も出して選考受けまくる、とかしないで実際に働いてる人の声とかを個人的に聞きに行ったりして、一つ一つの企業の仕事内容について理解深めた上で、働きたい企業を絞ったりしてきました。(働いてみないとわからないことのほうが多いと思うけど)
つまり結局は最初から自分の心は決まってたんですね。。。。。


結論!

自分のやりたいと思った仕事で、達成したいとおもった目標のためにがんばる!
で、だめだったらその時は思い切って死のう!笑


\( 'ω')/ウオアアア

【アルゴリズム+Ruby】Rubyで単体テスト 【test-unit】

備忘録。
イナリサーチRubyで実装しつつ単体テストを行ってみました。
使用したテストフレームワークはとりあえずtest-unitで。。。

テストケースは、

・通常の探索でヒットする場合
・通常の探索でヒットしない場合
・数字じゃないオブジェクトを与えた場合(例外テスト)

です。
とりあえずてきとーです。

require 'test/unit'

class Searcher

    def self.binary_search( x , left , right , array )

        while left <= right do
            mid = (left + right) / 2

            if array[mid] == x then
                return mid
            end

            if array[mid] < x then
                left = mid + 1
            else
                right = mid - 1
            end
        end

        return nil

    end

end

class SearchTest < Test::Unit::TestCase

    @@array = [1,2,3,4,5,6,6,8,9,10]
    
    def testHitSearch
        ans = Searcher.binary_search( 9 , 0 , @@array.length-1 , @@array)
        assert_equal(8,ans)
    end

    def testMissSearch
        ans = Searcher.binary_search( 34 , 0 ,@@array.length-1 , @@array)
        assert_equal(nil,ans)
    end

    def testillegalArgument
        begin
            Searcher.binary_search( "String" , 0 ,@@array.length-1 , @@array)
            flunk('Failed')
        rescue 
        end
    end
end

実行結果

Run options: 

# Running tests:

Finished tests in 0.004678s, 641.2997 tests/s, 427.5331 assertions/s.
3 tests, 2 assertions, 0 failures, 0 errors, 0 skips

ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]


おー、、、、
、、、、、はい。
ちゃんとすべてのテストが通りました。

今回はクラス変数、クラスメソッド、Javaでいうtry-catchにあたるbegin構文なんかもついでにおぼえました(。・・。)
明日もがんばります。

【アルゴリズム+Ruby】とりあえずバブルソートの実装【一日目】

備忘録。
アルゴリズムとデータ構造を復習がてらついでにRubyを習得しようと思って、今日は試しにバブルソート書いてみました。
初めてのRuby、、、まだ思うように使えないから少しの間こっちがメインになりそう、、、

  1 =begin
  2     バブルソートプログラム
  3 =end
  4 
  5 def bubble_sort(array)
  6     size = array.length
  7     for i in 0...size
  8         for j in 0...(size-(1+i))
  9             if array[j] > array[j + 1] then
 10                 tmp = array[j+1]
 11                 array[j+1] = array[j]
 12                 array[j] = tmp
 13             end
 14         end
 15     end
 16 end
 17 
 18 def print_array(array)
 19     for i in 0...array.length
 20         printf("%d ",array[i])
 21     end
 22     print("\n")
 23 end
 24 
 25 array = [23,45,1,2,455,667,875,5,0,34]
 26 print_array(array)
 27 bubble_sort(array)
 28 print_array(array)


実行結果

23 45 1 2 455 667 875 5 0 34 
0 1 2 5 23 34 45 455 667 875 

個人的に

0...size

この範囲オブジェクトとかいうのがすごく新鮮でした。
これ

0..size

こうするとsizeを含むようになるとか、、、、
早く慣れたい、、、、

【Androidアプリ開発】Google Maps Android API v2を使う

こんにちは。

バイトの方で地図関連の案件に携わっているので今日は予習も兼ねて、Google Maps Android API v2の導入をやってみたいと思います。

ここを参考にしました。

Google Maps Android API v2 — Google Developers

導入手順

  1. GooglePlayServicesの導入(本記事では割愛します)
  2. GoogleAPIキーの取得
  3. Manifestファイル記述
  4. 実際に使用してみる

APIキーの取得

まず、

https://cloud.google.com/console/project

にてプロジェクトを作成。(自分はすでに作成済みだったのでここはスルー)

作成したらそのプロジェクトのページへ。

左側のメニュー「APIs&auth」の中の「APIs」に飛んで、ここで「Google Maps Android API v2」をONにする。

「APIs&auth」の中の「Credentials」に飛んで「CREATE NEW KEY」ボタンを押してAndroidを選択。

入力するのは、

{SHA1 fingerprint};{パッケージネーム}

っていう形式になります。

SHA1 fingerprintの確認方法は、

Eclipseの環境設定の、Android→ビルドで確認できます。


f:id:taisho6339:20140111205333p:plain

こんな感じ。

これ入力してCreateすればOK!


Manifestファイルの記述

Manifestに追加するのは、4点になります。

1.OpenGL ESの依存明示

 <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />


なんかGoogleMapは内部でOpenGL ESを使用してるっぽいので書いておくらしい。
ちなみにこのタグがなんなのか調べたところ、端末と機能の依存を明示するタグで、この機能が端末にない場合インストールを防ぐことができるみたい。例えばカメラ持ってない端末へカメラアプリいれても使えないので、そういった場合フィルタリングかけられるみたいです。 なるほど・・・。

2.パーミッションの記述

 <uses-permission android:name="android.permission.INTERNET"/>
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>


これらは上から順に、

 インターネットアクセス:マップのダウンロードに使う
 ネットワーク状態チェック:これも上に同じ
 外部ストレージへの書き込み:マップのキャッシュを保存しておくのに使う
 GoogleAPIへのアクセス:省略
 
残り2つは、ネットワーク経由での位置情報取得、GPS経由での位置情報取得。Mapを表示するだけならなくても平気だけどまあ絶対つかうだろう、、、ってことで、、、

3.GooglePlayServicesのバージョン情報

  <meta-data
          android:name="com.google.android.gms.version"
          android:value="@integer/google_play_services_version" />

4.APIキーの記述

  <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="自分のAPIキー"/>

これをすべて記述してマニフェストは完了になります。

実際に使用してみる

ここまで来たらあとは使うだけ!
ってことで試しに以下のコードを書いてみました。


activity_main.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <FrameLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </FrameLayout>

</LinearLayout>

MainActivity.java


package com.taishonet.mapsample;

import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.app.Activity;

import com.google.android.gms.maps.MapFragment;


public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		FragmentManager manager = getFragmentManager();
		FragmentTransaction transaction = manager.beginTransaction();
		MapFragment map = new MapFragment();
		transaction.add(R.id.content, map);
		transaction.commit();

	}

}
 

実行結果

f:id:taisho6339:20140111231305p:plain


おー出た出た。

なにも表示されないって場合はAPIキーが間違っているとかかもです。
今日はここまで。

【就職活動】就職活動現況【IT志望】

あかんお正月ずっと家で死んでたせいで全然ブログ書いてなかった・・・

ひとまずここで自分の就活に関して考えていることをアウトプットしておこうと思います。

 

現在の状況

昨日2社目の内定をいただきました。

学生に企業紹介を行っている方の紹介で選考を受けたので、正直なんだかよくわからないうちに決まってしまった、というのが率直な感想です。

現時点で2社も自分を採用したい、と言ってくださってるのは非常にありがたいことなのだけど、まだ進みたい道をはっきりと選択できたわけじゃないからどうしたものかなーと。

 

悩んでいる選択

IT業界で働くっていうのは完全に決めているのだけど、その中でもおおまかに2つの道に絞ってます。

 

ひとつ目は、クリエイター

 

できれば手を動かして開発し続けたい

言われたとおりにコードかけるだけじゃダメ

ずっと現場でやるなら自分でユーザのニーズを分析して、そこに対して適切な企画、売り込み、開発ができるエンジニアがよかと?

クリエイター

 

っていう流れで思い至りました。

クリエイターとしてのスキルのばしたい!っていうのだと、企業選択はだいたいベンチャーになるのかなーって考えてます。

現在内定をいただいたところもエンジニアはこのタイプですね

 

具体的にどういう企業かっていうと、一人ひとりの裁量権が大きくて、エンジニアもマーケティング、企画に首突っ込める環境。。。

 

ただ最初に自分がどの程度開発以外の部分に関わりたいのかが不明瞭で、、、、

(開発できない人が企画なんて果たしてできるか?っていう疑問もありますが。。。。)

 

割と巨大なサービスの中に組み込まれてその中の一機能を提案する、とか一からサービス作るとかでも全然違ってくるだろうし・・・

 

おそらくこの部分が事業内容と合わせて企業をさらに絞るポイントになってくると思うのだけど・・・

 

ふたつ目は、人と関わってまとめていく仕事 

これも幅広いけど将来的にはマネジメントとかアーキテクトとか・・・・

とはいってもこれも開発経験を下積みとしなくちゃ務まらないよね、、、

この選択だと大手SIerとかになるのかな・・・

 

経緯となったの以下3点

 

・プレゼンとか人前で話す、説明するのが好きで、いろんな企業の方に聞いてもらう機会があり、そのたび評価されている

 

・エンジニアとして開発していく自信があまりない

 本当に自分が手を動かして現場で開発していきたいのか確信が持てない

 

・部長経験とか、インターンとかでもチームを引っ張っていく役割が多い

 

 この3つで、技術もわかっていて人をまとめられる人になれたらいいなーって漠然と思ってたり。

 

どの部分で揺れているのか

じゃあどの部分で悩んでいるのか、っていうと

 

技術を学ぶ姿勢が他のできる人たちと比べて違う、実行力が低い、ずっと開発の仕事してて自分は楽しいと思えるか自信がない。

でもまったく開発に触れなくなるのもどうなんだろう・・・

 

こんな感じです。。。

まとめ

人をまとめる仕事については調査不足なとこが多いから、具体的にどういうビジョンか決めて、それに対して選択軸を導出していくのが今後の方針・・・

まだ自分が知らないような良い職種も他にもたくさんあるんだろうなー・・・ 

 

 

 

 

 

 

 

 

 

【ソーシャルランチ】サムライズムさんに訪問してきました【OB訪問】

概要

一昨日ですがサムライズムさんにお邪魔してきました!

 

株式会社サムライズム

http://samuraism.com/

  

この会社、山本さんという方が最近起業して設立された会社さんなんですね。

 

今回の趣旨としては、私が就活中の身ですので様々なキャリアでエンジニアとして活躍されていらっしゃる山本さんのお話を伺いたいと思ってアポイントをとってみました。

 

山本さんってだれだ?って人もいると思うので・・・・

 

こんな人です

 

http://engineer.typemag.jp/article/knowledgelog-yusuke
http://news.mynavi.jp/articles/2013/03/22/tc1/index.html
http://gihyo.jp/lifestyle/serial/01/shukatsu_joshi/0003

 

そうですTwitter4Jの開発者さんです!! 

ちなみに自分が知ったきっかけもTwitter4Jです !!

 

面白いなと思ったのは、これだけ活躍されている中でバリバリコード書く仕事、というよりは、テクニカルサポートやデベロッパーアドボケイトと言われる職についてきた、という点です。

 

私について

はじめての記事なので軽く自分について自己紹介します。

現在大学3年生でプログラミングは大学二年の4月頃から本格的にはじめました。

それから小さな企業でモバイルアプリの開発のアルバイトをしてます><

最近はクラウドワークスさんで個人で受託の開発なんかもしてます。

 

メインはAndroidアプリ開発で、PHP使ってWebアプリや、Node.jsでオンライン対戦ゲームとか簡単なSNSみたいなものも作ってきました。

今は低レイヤに興味があってUNIXのOSについて勉強中・・・

 

将来どうしたいかについては結構悩んでいるのだけど最初はやっぱり現場で実際に物を作る側に立ちたいです、、、、

 

経緯

といった感じなのでちょっと エンジニアとして、特殊?なキャリアを歩んでいると思われる山本さんにあえて話を聞いてみることにしました!!

ちなみに、

 

ソーシャルランチ

https://www.social-lunch.jp/s2/student/home

 

っていう社会人の方とランチしてお話するためのサービスを利用しました。

オススメ。

 

ご本人の印象

結構厳格な方をイメージしてたんですけどすごく気さくで話しやすい方でした!あと高校と大学のOBでびっくりしました。。。。

 

印象に残ったお話を2点

 

・サービス作ったりアプリ作ったりって最悪趣味でもできる

 (だからコンサルタントとか仕事でしかできないことに取り組んできた)

 

・恥をしのんでどんどん自分を発信していったほうが良い!

 →アドバイスとかもらえることもあるし、つながりもそこから増えていくから 

  表に出てこないすごい人もいるけどもったいない

 

自分全然発信とかしてこなかったので猛省・・・

 

オフィス見学

なにあの快適空間・・・

エンジニアってすごい・・・

 

っていうのが率直な感想・・・

 

あと椅子も本格的で格好良いし、ホームシアターみたいなでっかいスクリーンあるし、WiiUあるし、プレステあるし、、、、、

 

オフィス・・・・?

 

写真まったく撮ってなかったしまたお邪魔しにいく予定です・・・・!

 

今回のアポから

やっぱり「どんどん自分から情報を発信していけ」といった内容のことを強く推されたので、大恥書きながらもブログとかgithubとかで自分の活動とか試行錯誤とかを公開していこうと思います、、、

できれば毎週一つは何かテーマ見つけて考察とかできたらいいな。。。