<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>プログラマの自分にできること</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/limy/" />
    <link rel="self" type="application/atom+xml" href="https://el.jibun.atmarkit.co.jp/limy/atom.xml" />
    <id>tag:el.jibun.atmarkit.co.jp,2019-03-18:/limy//143</id>
    <updated>2016-04-28T00:47:04Z</updated>
    <subtitle>プログラマとして自分に何ができるか、考えていきます。</subtitle>

<entry>
    <title>技術力よりコミュニケーション力？</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/limy/2010/02/post-7cdc.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2010:/limy//143.4973</id>

    <published>2010-02-16T10:30:00Z</published>
    <updated>2016-04-28T00:47:04Z</updated>

    <summary>　よく、こんなことを言う人がいます。 　「いくら技術力があっても、仕事ではコミュ...</summary>
    <author>
        <name>Naoki Iwami</name>
        
    </author>
    
        <category term="スキル" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/limy/">
        <![CDATA[<p>　よく、こんなことを言う人がいます。</p>

<p>　「いくら技術力があっても、仕事ではコミュニケーション能力がないとダメだ」</p>

<p>　もちろんこの意見は、別に間違ってはいません。ですが、僕が言いたいのはその逆のことなのです。</p>

<p>　「いくらコミュニケーション能力があったって、プログラマに最終的に必要となるのは技術力」</p>

<p>　ということです。</p>

<p>　僕が関わってきた現場でたまたまそうだっただけかもしれませんが、多くの場合プロジェクトがうまくいかない原因はコミュニケーションよりも技術力が不足していることの方が多いのです。</p>

<p><span style="font-size: 1.2em;"><strong>■ プログラミング経験の重要性</strong></span><br />
</p>

<p>　これはなぜでしょうか。</p>

<p>　僕が思うに、彼らはプログラミングの経験が圧倒的に足りないのです。プログラミングは一朝一夕では身に付きません。</p>

<p>　文法とかは本でも読めばすぐにわかりますが多くの人がつまづくのはそういった汎用的な箇所ではなく、もう少しシステムに特化した部分です。</p>

<p>　特に、フレームワークや共通ライブラリによって多くの機能が提供されている場合、プログラマは考えることをしなくてもロジックを達成できてしまいます。</p>

<p>　コンポーネント（部品）をつなぎ合わせるだけで、簡単な処理は実現できるからです。</p>

<p><span style="font-size: 1.2em;"><strong>■ フレームワークだけではシステムは完成しない</strong></span></p>

<p>　しかし、実際にはこれだけでは足りないのです。</p>

<p>　どんなにシンプルに見えるシステムでも、必ずどこか特異な処理というのが必要になってきます。</p>

<p>　よく「簡単なシステムを作るだけならフレームワークだけで充分だよね」</p>

<p>　なんて人がいますが、そういう人はきっと実際にシステムを作ったことがないんです。</p>

<p>　もう一度言います。</p>

<p>　どんなに簡単なシステムでも、必ず汎用的な処理だけでは足りない部分が出てきます。</p>

<p>　逆に言えば、そういう特殊な事をしたいからシステムを手作りするのです。</p>

<p>　フレームワークだけで達成できるほど、業務というのは汎用的ではありません。</p>

<p>　システムを使うのは人間ですから、どうしたって画一的ではない部分が出てきてしまうのです。</p>

<p>　そういう時、（本当の意味での）プログラミングをした事がない人達はそこで止まってしまいます。</p>

<p>　自分で1からものを作ることができないのです。</p>

<p>　「アルゴリズムを考える」という経験を、したことがないからです。</p>

<p><span style="font-size: 1.2em;"><strong>■ 1からものを作るということ</strong></span></p>

<p>　この状況を打破するには、とにかく物を作って経験を積むしか方法はありません。</p>

<p>　もちろん今の時代は、フレームワークを覚えることも必要です。</p>

<p>　しかし、それだけでは足りません。フレームワークは2日で覚えられるかもしれませんが、独自の処理を<br />
自分の思うがままに作り出すためには相当の経験が必要になるのです。</p>

<p>　コミュニケーションにこだわる人の多くは、こういった事を軽視します。</p>

<p>　もしくは、こういったことができないから、コミュニケーションという楽な道に逃げようとします。</p>

<p>　「技術力なんて2～3年経験を積めば大体身に付くでしょ」なんて思っていませんか？</p>

<p>　そんなことはありません。</p>

<p>　10年選手でも、自分で1からものを作れない人が、この業界には山ほどいます。</p>

<p>　そういった人達は何人集まっても、あるライン以上のものは作れません。</p>

<p>　しかし、ユーザはそんな事は知りませんからその技術力以上のシステムを要求してきます。さぁどうしましょう（笑）。</p>

<p><span style="font-size: 1.2em;"><strong>■ 力押しではなく、スマートに</strong></span><br />
</p>

<p>　大抵の場合、力押しでも何とかユーザの望むシステムを完成させることはできます。</p>

<p>　技術力がなくても、「それっぽい」動きをさせることは可能なのです。</p>

<p>　しかしそのために多くの時間を使った上に、システムはギリギリの線で動いていることを見過ごしてはいけません。</p>

<p>　良いシステムを作りたかったら、もう一歩進んだ技術力を持っていないといけません。それこそがプログラマの個性であり、他者より優位に立てる点です。</p>

<p>　プログラマなら、まずは「コーディング力」を磨きましょう。</p>

<p>　それは業界一般で言われている付け焼刃程度のコーディング力ではなく</p>

<p>　どこへ行っても通用する位に研ぎ澄まされたものであるべきです。</p>

<p><strong>■ コミュニケーションも必要</strong><br />
</p>

<p>　もちろん、コミュニケーション力が必要がないと言っているわけではありません。<br />
</p>

<p>　しかし実際、コミュニケーション力は大抵の人が持っています。<br />
</p>

<p>　人間的に普通の感性があれば、コミュニケーションで困るなんてことはないと思います。</p>

<p>　大体、世間一般に言われている「コミュニケーション力のないプログラマ」というのは、社会人としての最低ラインにすら到達していない人のことを指すのです。</p>

<p>　よっぽど人員(の数)に困ってる現場でもない限り、そんな人は必要ありません。</p>

<p>　システムの良し悪しは、実際にシステムを使うユーザが判断します。</p>

<p>　そのシステムを直接作っているのは、他でもないプログラマです。</p>

<p>　ですから、プログラマは実はユーザの一番近い場所にいるのです。</p>

<p>　システムの良し悪しを決定するもの、それは最終的にはプログラマの技術力に他なりません。</p>

<p>　残念ながら今の日本の状況では、いくら優れたコンサルタントがいても、いくら優秀なSEが作った優れた設計書があっても、それを形にできるプログラマというのが圧倒的に不足しています。</p>

<p>　# もし足りているという人がいたら、あなたの現場はとても幸せです。</p>

<p><span style="font-size: 1.2em;"><strong>■ 最後に</strong></span></p>

<p>　プログラマの皆様。</p>

<p>　いちど初心に戻って自分のコーディング力を見直してみましょう。</p>

<p>　もし自信を持って「コーディング力は足りている」と言えないのならば、それを磨くことをした方がいいかもしれませんよ。</p>]]>
        
    </content>
</entry>

<entry>
    <title>生産性向上の本当の理由</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/limy/2010/01/post-67b2.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2010:/limy//143.4972</id>

    <published>2010-01-29T10:45:00Z</published>
    <updated>2016-04-28T00:47:04Z</updated>

    <summary>　生産性向上の本当の理由 　なんか最近、生産性向上について盛り上がっているようで...</summary>
    <author>
        <name>Naoki Iwami</name>
        
    </author>
    
        <category term="ワークスタイル" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/limy/">
        <![CDATA[<p>　生産性向上の本当の理由</p>

<p>　なんか最近、生産性向上について盛り上がっているようです。今月のお題というやつなのでしょうか。というわけで自分も乗っかって書いてみました。</p>

<p>　僕も「生産性向上」というキーワードは仕事を始めた頃からずっと考えてきて、実際に現場でもそれが大事だと言い続けてきました。</p>

<p>　しかし、ビジネスモデルとして考えるとそれが果たして良いことなのか、など様々な議論になり、結局正しい答えは出てきません。その辺の議論は別の人達に任せるとして、自分は少し違う視点で書くことにします。</p>

<p><span style="font-size: 1.2em;"><strong>■ 過程と結果</strong></span></p>

<p>　まず最初に、「生産性向上」について改めて考えてみました。なぜ自分は生産性を向上させたいのか？</p>

<p>…(考え中)…</p>

<p>　はい、結論が出ました。</p>

<p>　僕は別に『生産性を向上させたいわけじゃない』んです。よくよく考えてみたら。</p>

<p>　生産性を向上させたいのではなく、やってきた結果として生産性が向上したというだけだったんです。しかし仕事場に出ると、自分と他の人との生産性があまりにも違うことに気付くのでつい言ってしまうのです。「生産性向上させようよ」とか。</p>

<p>　「プログラマとしての本質は何か」というのがこのコラムの主旨ですから（ホントか？）、もっと根本から考えてみましょう。</p>

<p><span style="font-size: 1.2em;"><strong>■ 理由</strong></span></p>

<p>　では、なぜ僕は生産性が向上したのか。</p>

<p>　長いことプログラミングしてればそれは当然だって気もしますが、他の理由もあります。</p>

<p>　それは『早く物を作りたい』という僕の性格によるものです。</p>

<p>　プログラマはクリエイターだと思っています。物を作ることに生きがいを感じる人。だから、自分が考えたことを早く物（プログラム）にしたいわけです。</p>

<p>　「こんな物を作りたい」という欲求と、「こんな物が完成した」という達成感。この間隔はできるだけ短い方がいい。</p>

<p>　時間が掛かると情熱も冷めてしまうし、ほとんどの人の場合は頭で考えるスピードとプログラムを書くスピードでは後者の方が圧倒的に遅いので、少しでも速くプログラムを書けることが望ましいです。</p>

<p>　そして何より「遅いことにイライラする」んです。プログラマっていうのは。</p>

<p>　gcc の Make が4時間も掛かることに対して</p>

<p>　「まぁコンパイラのMakeだからこれ位かかってもしょうがないよな～」</p>

<p>　ってあきらめの感情を持つか、</p>

<p>　「遅いものは遅い。俺が何とかしてやる」</p>

<p>　と改善する心を持つか（実際に改善できるかはまた別の問題）。</p>

<p>　後者の気持ちを持つ人っていうのは、自然と生産性が向上します。</p>

<p>　常に速さを求めるのです。</p>

<p>　思ったものを即座に形にしたいから。遅いことでイライラしたくないから。</p>

<p><span style="font-size: 1.2em;"><strong>■ 趣味と仕事</strong></span></p>

<p>　これは性格の問題ですから、そう思わない人がいたとしてもそれはしょうがないことなんだと思います。</p>

<p>　もちろん「プロなんだから向上心持って仕事してほしい」とも少しは思うのですがすべての人が生産性向上を望んでいるかといえば、それは違うと思います。</p>

<p>　「そんな急いでどうすんの」って言われてしまうかもしれません。</p>

<p>　おそらくですが、仕事からプログラミングを始めたという人は生産性向上をあまり意識しない人が多いです。</p>

<p>　趣味でプログラミングを始めた人は、おそらくプログラムが好きなはずです（よね？）。そういう人は、自然と生産性が向上します。</p>

<p>　そして仕事でプログラミングをするようになっても、その生産性は向上し続けます。</p>

<p><span style="font-size: 1.2em;"><strong>■ 結論</strong></span></p>

<p>　そう。だから。</p>

<p>　生産性を向上させたかったら、プログラミングを好きになるしか道はないのです。</p>

<p>　利益効率どうのこうの言ったって、人はそんな簡単に変われません。でも、物を作る喜びを一度知ってしまえば、その魅力に取りつかれてあっという間に生産性は向上します。</p>

<p>　「好きこそモノの上手なれ」。昔の人はうまく言ったものです。</p>

<p>　皆さん、もっとプログラミングを楽しみましょうよ。<span style="font-size: 1.4em;"><strong><br /></strong></span></p>

<p><span style="font-size: 1.4em;"><strong>　I love programming.</strong></span></p>]]>
        
    </content>
</entry>

<entry>
    <title>32歳プログラマから「はじめまして」</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/limy/2010/01/post-9527.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2010:/limy//143.4971</id>

    <published>2010-01-16T08:45:00Z</published>
    <updated>2016-04-28T00:47:04Z</updated>

    <summary>　はじめまして。岩見直樹と申します。某開発会社に勤める32歳のプログラマです。 ...</summary>
    <author>
        <name>Naoki Iwami</name>
        
    </author>
    
        <category term="キャリア" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/limy/">
        <![CDATA[<p>　はじめまして。岩見直樹と申します。某開発会社に勤める32歳のプログラマです。</p>

<p>　このコラムでは、日々思うことから専門的な内容まで、気ままに書いていこうと思いますので、よろしくお願いします。</p>

<p><strong>■ 自己紹介</strong><br />
</p>

<p>　今回は最初ということで、自分がPCに出会ってから、これまでやってきた仕事などについて簡単に紹介させていただこうと思います。</p>

<p>　え？ 生い立ちなんてどうでもいいって？</p>

<p>　……なんか空耳が聞こえましたが、とりあえず聞こえないフリで先に進みましょう（笑）。</p>

<p><strong>● 1台目</strong></p>

<p>　まず、僕が最初にパソコンというものに出会った頃の話です。詳しくは覚えていないのですが、おそらく小学校1年か幼稚園ぐらいだったと思います。</p>

<p>　相当古いですね。25年位昔のことです。うちの父親が機械好きだったこともあり、大して裕福でもない我が家にパソコンがやってきました。</p>

<p>　ちなみに、機種は「MZ-1200」というシャープのマシンでした。</p>

<p>　グリーン一色のコンソール画面、記憶媒体はカセットテープという今となっては化石級の代物です。『記憶媒体がカセットテープ』といっても、今の若者には通じないかもしれませんね。</p>

<p>　今では当然のようにハードディスクですが、その前はフロッピーディスク、さらにその前はテープ、その前は紙（！）だったんですよ。知ってました？</p>

<p>　で、その頃パソコンで何をやっていたのかというと……あまり覚えていません。ただ、当時から僕がパソコンに興味を持っていたのは確かです。</p>

<p><strong>● 2台目</strong></p>

<p>　小学生1～2年の頃、我が家に2台目のパソコンがやってきました。富士通の FM-7 という機種です。</p>

<p>　グリーン一色だった前機とは違い、今度のは何と8色も出るんですよ！（笑）</p>

<p>　そして文字だけのコンソール画面から、VRAMを搭載したグラフィック画面に進化しました。ちなみに解像度は 640×200 でした。CMのイメージキャラクターはあのタモリさんです。</p>

<p>　このパソコンには標準で F-BASIC というOS兼プログラミング言語が内蔵されていました。おそらくこれが、僕が最初に覚えたプログラミング言語です。お絵描きプログラムなんかを作っていた記憶があります。</p>

<p>　BASICでは処理速度が遅いので、機械語を学びました。搭載CPUは、モトローラの6809。8ビットPCです。アセンブラ言語を買う金はなかったので、自作の簡易アセンブラを作ったりもしていました。</p>

<p>　そして、このパソコンの特徴は様々な周辺機器がオプションで付けられることでした。以下、我が家に導入されたオプション機器たちの紹介です。</p>

<ul><li>FM音源<br />これを付ければ、シンセサイザーのような多重演奏が可能に！ 付けないと、BEEP音しか出ません……</li>

<li>漢字ROMカード<br />これを付ければ、何と漢字が表示可能に！ 付けないと、半角文字しか表示できません……</li>

<li>フロッピーディスク<br />これを付ければ、大容量（320KB）フロッピーディスクへの記録が可能に！ 付けないと、テープです……</li></ul>





<p>　どうです。すごいでしょう（笑）。でも当時は、どれも画期的なことだったんですよ。</p>

<p><strong>● 3台目</strong></p>

<p>　高校に入学するとき、初めて自分用のパソコンを買ってもらいました。機種は NEC の PC9801 FA。当時としては結構高性能の機種です。</p>

<p>　搭載CPUは一気にパワーアップして Intel の i486。OS は言わずとしれた（最近はそうでもない？）MS-DOSです。画面解像度は 640×400。色は4096色中16色だったかな？ ←ちょっと自信ないです。</p>

<p>　パソコン本体の次に真っ先に買ったのは、Borland の Turbo C++ でした。C言語には、前から興味を持っていました。BASICよりずっと優れていて、綺麗なコードが書ける！</p>

<p>　C++ になってクラスやポリモーフィズムが追加され、より進化したこの言語をやりたくて仕方ありませんでした。</p>

<p>　300ページ以上もある分厚いマニュアルを何度も何度も読み返しひたすら勉強しながらコードを書きました。この頃には、完全にプログラミングが趣味になっていました。</p>

<p><strong>● 4台目</strong></p>

<p>　大学に入って、Windows マシン（いわゆるDOS/V機）を買いました。機種は忘れてしまったのですが、自作PCだったかな？</p>

<p>　そして Visual C++ を買いました。MDやテープに溜め込んだ楽曲を整理するのに、今まではノートを付けてやっていたのですが、専用のアプリケーションを作って管理などをしていた記憶があります。あとは、DirectXを使ってシューティングゲームなども作りました。</p>

<p>　この頃、自分のホームページも開設しました。当初は好きな音楽についてのページや日記などを書いていました。</p>

<p><strong>● 5台目</strong></p>

<p>　自宅サーバのために、コンパクトなベアボーンPCを買いました。Redhat Linux を入れ、Apache で HTTPサーバ、qmail でメールサーバを立ち上げました。</p>

<p>　最初のうちは HTML と Perl CGI でサイトを構成していました。しばらくして、ある言語に出会いました。Ruby です。</p>

<p>　「何て素敵な言語なんだろう」</p>

<p>　この言語を使ってみてそう思いました。eRuby というライブラリを使い、Perl の代わりに Ruby で CGI を書くようになりました。</p>

<p>　Java を勉強して Tomcat サーバも導入しました。</p>

<p>　Servlet を使って最初に作ったシステムが、自分用の日記サイトでした。それまで日記はテキストに手書きしていたのですが、現在のブログのようにログインして、Webブラウザから直接日記を更新できるようにしました。</p>

<p>　一般公開もして、ブログサービスも始めました。今でも、一応やってます。ほぼ誰も利用者いなくなりましたが(笑)。</p>

<p><strong>■ 就職</strong></p>

<p>　さて、プライベートの話はこれ位にして。ここからは仕事の話です。</p>

<p>　2001年に大学を中退し、プログラマとして派遣会社に就職しました。</p>

<p>　最初の現場は、Unix C でした。入ってすぐ気付きました。とんでもなく汚いコードが平気で書かれています。そして月間労働が300時間を超えるような人達が山ほどいて、顔はやつれていました。</p>

<p>　それまで15年以上プログラミングし続けてきた僕には、この開発現場がどれだけ非効率かわかりました。</p>

<p>　でも、下っ端でしかも業務実績のない僕が、彼らを指導することはできませんでした。</p>

<p>　それからは数ヶ月に1回のペースで、現場を転々としました。どこへ行っても、状況はあまり変わりません。紙くず程度の価値にしかならない分厚い設計書を必死で書いている人、プログラミングもロクにできないまま設計を担当している人、テストでたくさんバグが出ないとシステムが信頼できないと思ってる人、いろんな人がいました。</p>

<p>　そんな人達に共通して言えることは、</p>

<p>　「どうやったら優れたシステムを作れるのかを知らない」</p>

<p>　ということです。</p>

<p>　しかし、知らないのも無理はありません。彼らは優れたシステムを見たことがないし、ましてや作ったことなどないのですから。</p>

<p>　僕だったら、彼らに「どうやったら優れたシステムを作ることができるのか」を教えることができると思っています。</p>

<p>　しかし、派遣というパッチワーク的な役割の人間がそれを説いたところで、現場は変わらないということに気付きました。</p>

<p><strong>● 正社員</strong><br />
</p>

<p>　随分時間が経ってしまいました。</p>

<p>　派遣の仕事に限界を感じていた僕は、2年半ほど前に今の会社に正社員として中途入社しました。</p>

<p>　入った当初、僕が配属したチームはリーダーのワンマン体制でした。</p>

<p>　チームメンバーは、そんなリーダーを恐れてただ言われた通りに仕事をしていました。人の言うことをハイハイ聞いてるだけなんてことが嫌いな僕はそんな中で浮いた存在でした。</p>

<p>　僕の力がある程度チームでも認められてきた頃、（関連があるかどうかはわかりませんが）そのリーダーが会社を去りました。そしてしばらくして、そのリーダー色に完全に染まってしまった人達もいなくなりました。</p>

<p>　僕はチームのサブリーダーとなり、ある程度自分のやりたいように仕事ができるようになってきました。</p>

<p>　しかし今度は、別の問題が出てきました。</p>

<p>　不況です。</p>

<p>　今の現場で仕事を続けられるかどうか、先行きが見えなくなりました。でも、こんな時だからこそ自分の力が役に立つかもしれないと前向きに考え、コラムを書こうと決意しました。</p>

<p><strong>■ 最後に</strong></p>

<p>　今回は、最初ということで自己紹介をさせていただきました。</p>

<p>　今後は、コラム毎にテーマを決めて、それについて掘り下げて話をしていきたいと思っています。テーマによっては毒舌度が高くなることもあるかもしれません(笑)が、皆さんのお役に立てれば幸いです。</p>

<p>　それでは、長文お付き合いいただき、ありがとうございました。</p>]]>
        
    </content>
</entry>

</feed>
