TamaCona Engineering

ETロボコン、ソフトウェアエンジニアリングの話題など。

文系ITエンジニアの皆さんへ

今年のETロボコンもシーズンインしてしばらく経ちましたが、中には文系出身のエンジニアの方もおられるのではないでしょうか?

ETロボコンでよい成績を収めるためには、どうしても数学的な知識が必要となってきます。

  • スムーズにライントレースを行うための「PID制御」
  • 走行体の現在位置を推定するための「デッドレコニング」
  • センサのノイズ除去 など。

PID制御なら微分積分、デッドレコニングなら三角関数など、高校数学レベルの知識が必要となってきます。理系出身の方や現役高校生の方なら特に苦にならないかもしれませんが、文系出身の方とか、高校卒業して何年も勉強してない方にとっては結構大変なんじゃないかと思います。

いや、選手時代の私自身がそうでしたから。
文系出身な上に、高校卒業してウン十年も経っていますから、最初はチンプンカンプンでした。
チーム発足当時はチーム内にも数学ができる方が誰もいない状況でした。
でも、どーしても負けたくなかったので、もう自分でやるしかない!と心に決めて勉強することにしました。それで購入したのが次の本です。

これだけはおさえたい 文系プログラマーの数学知識 基礎の基礎 (プロフェッショナル「確実」養成講座)

これだけはおさえたい 文系プログラマーの数学知識 基礎の基礎 (プロフェッショナル「確実」養成講座)

タイトルのとおり、プログラマ向けの本です。  
身近な生活のなかで数学がどのように役立っているのかをわかりやすく説明してくれていて、とても読みやすいです。
基数変換、三角関数微分積分、行列など、プログラミングに必要な要素の解説も一通りあります。
ETロボコン参加者でなくても、新人エンジニアや基本情報処理技術者試験を受ける予定の方にも役立つ本だと思います。
(この本、残念ながらいまは絶版のようです)

数IA・IIB・IIICがこの1冊でいっきにわかる もう一度 高校数学

数IA・IIB・IIICがこの1冊でいっきにわかる もう一度 高校数学

こっちはかなり内容が濃くて、高校3年分の内容がビッシリ凝縮されているので全部やり遂げるのはかなり時間がかかります。でも、きちんと理解したいならこちらも読んだ方がためになると思います。

今年の新入社員の方にも文系出身の方、大勢いらっしゃると思います。
いま新人研修を受けている方もいらっしゃると思いますが、理系の方のレベル差にショックを受けている方も多いのではないでしょうか?
「自分はこの先やっていけるんだろうか?」と。
いや、自分がそうでしたから、気持ちはよくわかります。当時は本当によくわからなくて同期の中でも下から数えた方が早いぐらいでした。テストの成績が悪くて居残りすることもしょっちゅうでした。

でも、そうした経験値の差が出るのって、本当に入社直後だけだったりするんですよ。そりゃ本当に理系トップクラスの方には追いつけないかもしれませんが、「理系で普通の努力しかしていない人」よりも「文系ですごく努力した人」の方が上になると思います。
ある一定レベルの知識が付いてくると、文書作成能力とかコミュニケーション能力などが逆にプラスになってきます。

実際、文系で未経験だったにもかかわらず、今はトップクラスのエンジニアになっている人はいっぱいいますから。

なので、いまは苦しいかもしれませんが、絶対大丈夫ですので頑張って欲しいと思います。

オブジェクト指向の本

今年のETロボコン中四国地区は本当に学生さんの動きが活発で、とても楽しみな状況になっています。


他の地区でも行われている地域連合も結成されたようで、今週末に第一回目の「中四国連合」勉強会が開催されるようです。
開催案内はこちら→ http://kokucheese.com/event/index/97756/
TwitterFacebookを見てると、今も各チームで色々活動を行っているようです。

でも、時々「デザインパターンわからねー」というツイートもありますね(笑)

せっかくですので、ここで「オブジェクト指向」のことを改めて勉強してみてはどうでしょうか?
過去に私が読んだ本で良かったものを2冊ほど紹介します。


オブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講座

オブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講座


牛尾剛さんの本です。最近は「ITエンジニアの ゼロから始める英語勉強法」という本で有名な方ですね。
「社長、起立!」という面白い切り口でオブジェクト指向をわかりやすく解説しています。
オブジェクト指向の本というと学術的で難解なものが多いのですが、企業出身の方が書かれたせいか、とても実践的でわかりやすかったです。
この本を読んだら、あなたも「オブ脳」になれるかも?

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門


数学ガール」などで有名な結城浩さんの本です。優しげな語り口が大変心地よいです。
GoFデザインパターンをわかりやすくJavaで書き直して説明してくれています。
Java言語で書かれていますが、そんなに難しい文法は使っていませんので、他の言語を使う人でも読み進められると思います。

個人的には、オブジェクト指向は「隠し絵」みたいなものだと思っています。
「わからないうちはさっぱりわからないけど、あるとき突然わかるようになって、その後はそのようにしか見えなくなる」
私の周りでオブジェクト指向を理解してる人も「ある日突然わかるようになった」と言ってる人が多いです。
なので、最初はわからなくてもずーっと根気よく勉強していくことが肝心だと思います。

オブジェクト指向自体はかなり古くからある考え方ですが、企業の現場には未だになかなか浸透していません。
組込み開発など、オブジェクト指向と相性がいいと思うし、うまく活用すればコスト削減にも繋がると思うのですが・・・
理由は色々あるでしょうが、一つは「オブジェクト指向がわかる技術者がまだまだ少ないこと」だと思います。

これからオブジェクト指向を勉強する若い人が増えてきて、技術者が増えてくればこの状況も変わってくると思うので、みなさん頑張って欲しいなーと思います。

※:有名な隠し絵はこちら。みなさんも一度は見たことがあると思います。

C言語の配列とポインタの違いのお話など

今回はちょっと技術的な話を。

私も顔を出している西脇.rb/東灘.rb のメンバーの方からC言語の質問を受けました。
Rubyの勉強会なのにC言語の話題も出てくる、というところがこのコミュニティのよいところです。懐の深さやメンバーの方の強い向上心を感じますね。

その方、Rubyはバリバリですが、C言語は最近使い始めたそうで、

#include <stdio.h>
main()
{
    char  str[] = "hogehoge";   …(1)
    char *str = "hogehoge";     …(2)
    *str = 'f';
    printf("%s\n", str);
}

こういうコードを書いたとき、文字列の設定先を配列にするかポインタにするかで動きが変わるのはなぜか?不思議だったそうです。

char  str[] = "hogehoge";   …(1)

のときは、先頭1文字がfに置き換えられて、狙い通り

fogehoge

と出力されるのに、

char *str = "hogehoge";     …(2)

のときは、

Bus error: 10

とエラーになってしまうのはどうして?という疑問でした。
mac osの場合はBus error、Linuxの場合はSegmentation faultになるなど、OSによって現象は異なります。

たしかに、「C言語ではポインタと配列を区別せず、同じように扱える」と言われていますから、なぜ動きが変わってしまうのか不思議に思えますね。

この問題はわりと有名みたいで、他のブログなどでもよく話題になっているようですが、私なりの説明をしてみたいと思います。

まず、

char  str[] = "hogehoge";   …(1)

は、C言語で配列を初期化するときのシンタックスシュガーで、

char str[9] = {'h', 'o', 'g', 'e', 'h', 'o', 'g', 'e', '\0'};

と同義です。

str[]はローカル変数なので、関数が呼び出されたときにstrという配列用の領域が獲得され、ここに"hogehoge"という文字列が設定されることになります。

この配列は、スタック領域(stack)という読み書き可能な領域に存在します。

一方、

char *str = "hogehoge";     …(2)

のときは、コンパイルされた時点で、"hogehoge"という文字列リテラルが実行ファイル内に設定されています。そして、関数が呼び出されたときに、ポインタ変数strが文字列リテラルの先頭アドレスで初期化されます。

この文字列リテラルは、リードオンリーデータ領域(.rodata)という、読み取りのみ可能な領域に存在します。

つまり、

char  str[] = "hogehoge";   …(1)

は、読み書き可能なスタック領域に文字列が存在するので、文字列を書き換えできる。

char *str = "hogehoge";     …(2)

は、リードオンリーな領域を指し示しているので、書き換えようとするとBus errorとなる。

ということです。

これは、C言語の規約上「文字列リテラルは定数として使用すべきものであり、書き換えた場合の動作は不定である」とされていることに起因しています。そのため書き換えできないようにしている処理系が多いようです(中には書き換えできてしまう処理系もあるようですが…)

C言語は昔よく使ってましたが、最近はややご無沙汰してました。わかっていたつもりでも説明しようとすると難しかったです。
たまには以前習得した技術を棚卸しし、アウトプットしてみるのもいいものですね。

これからのリーダーシップのカタチ

GW前半は中四国と関西のETロボコン勉強会に参加しましたが、色々なチームのリーダーの方とお話ししました。
f:id:tamagawaconan:20130508235242j:plain

過去にリーダー経験のある方、今回はじめてリーダーを務める方さまざまでしたが、皆さん色々なことで悩まれていてとても興味深かったです。いくつか紹介させてもらいます。

  • 「先輩たちがCS大会に出たりモデルで賞をもらっているので、自分にとってはプレッシャーです・・・」
  • 「自分自身の手際が悪くて、メンバーをイライラさせてしまってるんです・・・」
  • 「自分自身は組込み開発の経験が浅く、メンバーの方が実力、実績ともに優れています。なのでどうしても引け目を感じてしまい、リーダーとして自信を持った指示ができないんです・・・」

ふむふむ、確かに気持ちわかります。
先代が優秀すぎたらプレッシャーかかりますし、メンバーのほうが優秀だったりしたらやりづらいですよね。うまく指示を出せないってこともよくありますよね。自分自身も似たような経験あります。

でも・・・リーダーって「すべてにおいて他の方より優れている」必要ってあるんでしょうか?そんな凄い人って、そうはいませんよね?

現実には「リーダーとしての能力や実績」のありなしにかかわらず、リーダーをやらないといけなくなることも多々あります。
「一番年上だからリーダー」「他に適任者がいないから」ということだってあるかもしれません。
昔にくらべると価値観や技術トレンドもめまぐるしく変化していってますから、能力やカリスマ性だけでチームを引っ張っていくのはなかなか難しい時代になってきています。


これからのリーダーのカタチとして参考になるのは、プロジェクト事例紹介でもプレゼンしてくれた、R-GRAY BLACKのリーダー大熊さんのケースだと思います。

リーダーはプログラミングやモデル作成は行わず、事務方に徹するというやり方です。
(あ、大熊さんは能力的にも優れている方です。モデルにおけるアイコンブームを引き起こした方ですからね)
力でグイグイ引っ張っていくやり方ではなく「メンバーが活躍できる場をつくりだし、それをサポートする」という役回りですね。
当然チームとしての目標をはっきりさせ、方向付けをしっかり行うこともされていると思います。

このように、


「道筋を示し、メンバーが力を発揮しやすい場をつくる」


これが一つのヒントになるかもしれませんね。

いわゆる「カリスマ性のない普通の人」でもある程度のリーダーシップを発揮できる。
野球でいうと「豪速球で三振の山を築く」のではなく「打たせてとる」ピッチャーみたいな感じです。


そう、「打たせて取るリーダー」が、これからのリーダーのひとつのあり方ではないかと思っています。


「打たせて取る」ためには、個人の資質(野球でいえば身体能力)ではなく、しっかりした方法論(野球でいえば投球術)が必要となってくると思いますし、色々な勉強や経験も必要でしょう。でも、プロジェクトマネジメントの分野では、普通の人でもマネジメントできるような色々な方法論が展開されていますが、プロジェクトリーダーに関してはこうした方法論は比較的少ないような気がしています。このあたり、今後情報提供できればいいな〜と思っています。

関西地区独自勉強会ZEROに行ってきました。

4月28日に京都情報大学院大学 百万遍キャンパスで行われたETロボコン2013関西地区独自勉強会ZEROに遊びに行ってきました(関西地区公式のレポートはこちらです)

f:id:tamagawaconan:20130504234702j:plain
前日は中四国地区の勉強会だったのですが、都合によりGW前半は神戸に居なければならず、それならということで実行委員の松尾さんに相談したところ快諾いただきました。ありがとうございます。

勉強会は複数セッションが並行で行われてましたが、私はプロジェクトセッションを見学させていただきました。

印象に残った内容はツイートしています。貼っておきますので参考にしてくださいね。








中四国でもプロジェクトマネジメントをテーマにしたコンテンツを行いましたが、さすが関西地区は伝統があるだけあって、内容も掘り下げてあってハイレベルでしたね。チーム間でグループ討議するスタイルも面白かったですし、講師の平野さんと水野さんの説明もわかりやすかったです。うちも今後よいところは取り入れていきたいと思います。

ウラ懇親会ではアイデア炸裂!

懇親会は会場内で行われたのですが、このときはお菓子とジュースのみ。
でも「まだ話し足りない!」「やっぱりお酒が飲みたい!」という方のために、会場近くのお店でウラ懇親会が行われました。
f:id:tamagawaconan:20130504234704j:plain
ウラ懇親会の話題の中心は、今年追加されたアーキテクト部門!
いや〜、無責任なアイデアが出るわ出るわ、「こんなんやったら面白いんちゃう?」「それならここはこうしたらもっと盛り上がるでー」と言う感じのノリでした。やっぱりアイデアって、

  • 大勢でざっくばらんに会話しているとき。
  • リラックスしているとき。

に出やすいもんですね。リラックスすることで柔軟な発想が出やすくなり、大勢で話すことでそれらが反応しあって更に膨らんでいく、ということではないでしょうか。一人で考え込んだり職場の会議室で煮詰まったりするぐらいなら「みんなでメシでも食いにいこか?」の方がいいと思います。

色々なアイデアが出ましたが、個人的には「あ、これは実際やったら面白いかも!」というものもいくつかありました。出席したチームの方がどう消化してくるか楽しみです。

中四国、関西と2日連続で勉強会に出席させていただきましたが、それぞれ地区のカラーがあって面白いですね。
でも、共通しているのは皆さん「アツくて濃い」ということ。これだけ熱心な人たちが揃っていれば、今年の大会もきっと面白いものになるのは間違いないと思いました。

最後に関西地区の参加チームならびに実行委員の皆さん、部外者にもかかわらす温かく出迎えていただき大変ありがとうございました。
お隣の地区ですし、今後も交流も深め、刺激し合ってお互いレベルアップしていければいいな、と思います。

ETロボコン2013 中四国地区独自勉強会0

4月27日、福山大学宮地茂記念館にて、ETロボコン2013 中四国地区独自勉強会0を開催しました。参加者の方にとってはシーズン最初の勉強会となります。
今回はなんと50名を超える方が参加!もちろん中四国地区発足以来最多です。中には11名の大所帯でバスをチャーターして参加したチームも!
多くの方に参加していただき、うれしい限りです。
f:id:tamagawaconan:20130429191514j:plain
中四国地区の拠点、福山大学宮地茂記念館。福山駅前の大変便利な場所に立地しています。

目標設定とプロジェクト計画の重要性

シーズン最初の講義は、目標設定と計画の重要性について解説する講義です。
ETロボコンは約半年間に及ぶプロジェクト。目標をはっきりさせて、メンバー間でそれを共有していないとうまくいきません。
目標を設定する事の大切さと、計画を立てるためのコツについてレクチャーを行いました。

後半には、目標を達成するための戦略を考える演習も行いました。演習の流れは次のような感じです。

  1. まず、自分たちの目標(ゴール)を考える。
  2. 自分たちの現状を知る。今回はSWOT分析で強み/弱み/機会/脅威を抽出しました。
  3. 1,2を元に「目標を達成するために、今なにをやらなければいけないか」を考えてもらう。

1〜3の内容を、各チームA3用紙に書き出してもらい、最後に、2チームの方に発表してもらいました。短時間でしたので今回は十分な検討ができなかったかもしれませんが、今回の演習を参考に今後チーム内で色々話し合ってもらえればと思います。

プログラミング実習

初心者向けの開発環境構築、プログラミング実習を今年も行いました。
今回は希望者が多く、サポートしきれるか心配でしたが、4名のボランティアの方にも参加いただいたことで、スムーズに進めることができました。
f:id:tamagawaconan:20130429191513j:plain
プログラミング実習の様子。開発環境の構築からサポートします。

ランチミーティング

昨年好評だったランチミーディングを今年も開催しました。
初対面の方も多かったと思いますが、結構話もはずんでいたようで、皆さん親交を深めているようでした。
今年は各チームのリーダーの方に集まってもらい、意見交換をしてもらいました。
ETロボコンはリーダー経験もできる貴重なチャンス。中にはリーダーとしてどうあるべきか悩んでいる人もいたようですが、今回をキッカケになにかヒントを見つけてもらえればと思います。

f:id:tamagawaconan:20130429191510j:plain
ランチミーディングの様子。今年も各地のお菓子が並んでいます。

華麗なるUML入門

f:id:tamagawaconan:20130429191511j:plain
関西地区実行委員長の江見先生をゲストにお迎えし、UMLオブジェクト指向の基本について解説していただきました。
この講義は関西地区でも非常に人気の高い講義として知られており、カレーライスを題材にオブジェクト指向の仕組みを解説していることから、別名「カレーなるUML入門」とも呼ばれています。
ETロボコンのモデルを作成するには欠かせないUMLオブジェクト指向の知識。理解を深めるキッカケにして欲しいと思います。

江見先生が講義中に紹介されていた本はこちらになります。
私もこの本は読んだことありますが「社長、起立!」のお話など、オブジェクト指向を非常にわかりやすく解説しており、「この本を読んでオブジェクト指向が理解できた!」という人もよく聞きます。とても面白い本なので、ぜひ読んでみることをオススメします。

オブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講座

オブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講座

Redmineではじめるタスクの交通整理

f:id:tamagawaconan:20130429191509j:plain
今年もファーエンドテクノロジー株式会社(島根県)の前田剛さんをお迎えし、プロジェクト管理ソフトウェアRedmineについての講義をしていただきました。今回は昨年より一歩踏み込んだ内容となり、Redmineの「バージョン機能」などの使い方についてもレクチャしていただきました。

ファーエンドテクノロジー株式会社のURL:
http://www.farend.co.jp/
同社のホスティングサービス My Redmine のURL:
http://hosting.redmine.jp/

なお、前田さんはRedmineに関する書籍も執筆されています。興味のある方は読んでみてはいかがでしょうか。

入門Redmine 第3版

入門Redmine 第3版

プロジェクト事例紹介 〜 R-GRAY BLACKの場合 〜

ここまで順調に進んでいた勉強会ですが、ここに来てちょっとしたハプニングが。
今回の勉強会、聴講コースと実習コースのマルチトラックだったのですが、実習コースの終了が遅れてしまい、聴講コースの方に30分ほどの空き時間ができてしまったのです。
この時間をどうなって埋めようか・・・と思案していたところ、関西地区からボランティアで来てくださっていたR-GRAYの方が昨年大会の事例発表をやりますと言ってくれたのです。もともと翌日の関西地区勉強会のために資料を作っていたので、その内容で発表してくださるとのことです。
R-GRAYといえば、昨年のチャンピオンシップ大会で総合3位に入賞した全国屈指の強豪です(チーム名はR-GRAY BLACK)。これはケガの功名というか、思わぬプレゼントでした!
強豪チームの経験談は、何者にも替えがたい貴重な情報です。参加者の方にとっては大変役立つ内容だったのではないでしょうか。

とくに大会までの準備の進め方やリーダーの方の立ち振る舞いなどは、とても参考になったのではないかと思います。

f:id:tamagawaconan:20130429191507j:plain

ボウリング大会

中四国ではおなじみとなったボウリング大会の開催です。
今回は事前のプログラム作成もOKとしたことで、色々工夫を凝らしているチームも多く見られました。
昨年CS出場のteamTAMAとUNCTインスツルメンツは、ここでも上位に食い込んでいました、両チームともメンバーは大幅に入れ替わっているようですが、きちんと結果を出すところはさすがです。今年も活躍を期待できますね。
あと、ゲスト参加のR-GRAYもキッチリ結果を出し、貫禄を見せつけていました。

f:id:tamagawaconan:20130429192051j:plain
ピンを目指して走る走行体。ピンは500mlのペットボトルですが、超音波センサーでの検知が可能なよう、紙を巻いています。

福山白熱教室

今回も有志による懇親会を行いました。
この懇親会、別名「福山白熱教室」と呼ばれるぐらいアツい会話が行われることで有名で、ETロボコンの行事がある日は福山市周辺の平均気温が2〜3度上がるという都市伝説もあるぐらいです(嘘)
この地区はイキのいい学生さんが多く、おじさん連中もついつい色々なことを教えてあげたくなってしまうんですよね。本当に将来が楽しみです。

そんなこんなで、シーズン最初の勉強会は大盛況のうちに幕を閉じることができました。
これもゲスト講師の皆さん、実習を手伝っていただいたボランティアの皆さん、事例紹介を行ってくださったR-GRAYの皆さんなど、多くの方の協力のおかげです。
色々な方に支えていただいて運営できていることを実感した一日でした。本当に感謝です。ありがとうございました。

また、貴重な休日を割いて参加してくださった各チームの皆さんにも感謝です。今後、初参加の方は特に大変なこともあるかと思いますが、力を合わせて頑張って欲しいと思います。
実行委員会も全力でサポートしますので、何か困ったことがあれば相談してください。

それでは、今シーズンも皆さんよろしくお願いします!

ETロボコン中四国独自勉強会0のボランティアを募集します。

募集は締め切りました。4名の方からご応募がありました。
大変ありがとうございました。

今年も4月27日(土)に福山大学宮地茂記念館で、ETロボコン2013 中四国地区独自勉強会0を開催することになりました。(昨年の内容はこちら)

f:id:tamagawaconan:20120428131741j:plain

…が、少し困った問題が。

初心者向けプログラミング実習の希望者が予想以上に多く、地区の実行委員だけではサポートしきれなくなりそうなんです。
(なんと11人の大所帯で参加するチームも!嬉しすぎる悲鳴です!)

中四国地区の実行委員は全国最少で、これまで苦労しながらもやってきたのですが、今回はさすがにピンチです。


そこで!


プログラミング実習をサポートしてくださるボランティアの方を募集します!


応募資格は特にありません。LEGO MINDSTORMS NXT走行体を取り扱いますので、ETロボコンへの参加経験がある方のほうがやりやすいかもしれませんが。

初心者向けの内容ですので、特に高度な知識は必要ありません。
メイン講師は地区実行委員が務めますので、ボランティアの皆さまには受講生の様子を見ていただいて、うまくいってない人がいればサポートしていただく形になります。

やってみたい!という方は、私の Twitter までメッセージを送っていただくか、このサイトのMessageLeaf(右下にある緑のニョキニョキっと出てくるやつです)からご連絡ください。

勉強会の詳しい内容はこちらになります。
http://kokucheese.com/event/index/85582/

今回はボランティアにさせていただくので、残念ながら交通費のお支払いなどはできないのですが、人に何かを教えることは、自分にとっても勉強になると思います。また、自分のチームに新人が入った方にとっては指導方法が参考になるかもしれません。
いずれにしても、貴重な経験ができるチャンスですので、興味のある方はふるってご参加ください。

ちょうどGW期間中ですので、ついでに中四国観光も楽しめるかと思います。鞆の浦や尾道、因島も近いですよ。

それでは、よろしくお願いします。