30 Dec 2013, 13:12

WindowsとLinux Mintのデュアルブート環境をVAIOに構築した手順メモ

Linux Mintをインストールしてみました。

SonyのVAIOに Windowsと Linuxのデュアルブート環境を構築した手順メモです。

背景

プログラマならば当然Linuxを使いこなさなければという危機感があったので、普段利用しているパソコン環境をLinuxにしたいと常々思ってました。年末年始のお休みを利用して、トライしてみました。

仮想化環境ならばいままで何度か挑戦してきたのだけれども、動作が重いので普段利用するには使えないと思った。

ディストリピューション選び

2013年でもっとも人気のあるディストリビューションを調べてみました。このサイトの右下に世界ランキングがある。

これによると、”Mint”というきいたことがないディストリビューションが、ぶっちぎりで上位を占めていることが分かる。というわけで、Mintをインストールしようと決意しました。

mint4winというツールを利用すると、Windows内部にMintをインストールすることが可能らしいが、Mint 16ではサポートされないとのこと。mint4winの先行きも不安なため、この方法はつかわずにデュアルブートに。

環境

  • Windows 7 64bit
  • Linux Mint 16 64bit cinnamon

Windowsでの作業

ここからは、Linux Mint Japanのユーザーズガイドの手順にそってインストールしてみます。

また、以下のサイトも参考にしました。

空き容量の確保

インストールに必要な容量は、7.7Gほど。現在の自分のの総容量は100GB、空き容量は10GB…今回は色々と頑張って30GBほど空き容量を増やした。過去記事も参考。

Mintインストールようにパーティション作成

Mintをインストールするために、Windows側でパーティションを区切ります。

コントロールパネル→管理ツール→コンピュータの管理→記憶域→ディスクの管理を機動。

Cドライブを選択してボリュームの縮小を実行するが・・・・ほとんど縮小できなかった。なので、フリーソフトを利用して強引に圧縮した。

このソフトを利用した。

MiniTool Partition Wizard – 窓の杜ライブラリ

結果、こうなった。

なんとか、25GBを削り取ることができました。ここにLinuxをインストールします。

Mintディストリビューションを取得

世界中にミラーサイトがありますが、日本のミラーサイトからダウンロードするのが早いため、JAISTからMintディストリビューションをダウンロードします。

ディストリビューションにはいろいろと種類があります。

  • 32bit/64bit
  • cinammon/ mate … cinnamonは高性能/Mateは省エネ
  • codecs/noncodecs … メディア関係のアプリを含むか否か。

日本では著作権の関係でNonCodecsを利用したほうがよいみたいです。ということで、自分は 64bit,cinnamon,nocodecsを選択。

以下からダウンロード。

インストール用にUSBメモリ作成

ディストリビューションは、CD/DVDに焼いてインストールするか、USBメモリに焼いてインストールする方法があります。Mintのアップデートがクリーンインストールを推奨されているので、これからも何度かOS入れ直しが必要になるだろうと思い、USB経由でインストールずることにしました。

フリーソフトのLinuxLive USB Createrを利用して、USBにディストリビューションをいれました。

ここまでがWindowsでの作業。ここからが、いよいよLinuxでの作業。

Linuxでの作業

ここからは、なかなかうまくいかずいろんな方法を試した結果、これでとりあえずうまく言ったということを書きます。なので、手順が正しいかどうかは保証できません。。。

USBメモリから起動(BIOS中にF2を押して、External Deviceから起動するようにする)。しばらくして、デスクトップ画面が起動する。

GPartedでパーティション設定 & フォーマット

MenuからGPartedというアプリを起動。すでにWindowsのパーティションが3つある。

  • isw_bfahbhfbaf_Volume0p1 … VAIOリカバリ領域
  • isw_bfahbhfbaf_Volume0p2 … Windowsのシステム領域
  • isw_bfahbhfbaf_Volume0p3…. Cドライブ

余っている領域をクリックして新規拡張パーティションを作成。(isw_bfahbhfbaf_Volume0p4)

  • 512MB ext4 … BOOT用 isw_bfahbhfbaf_Volume0p5
  • 10GB ext4 … Root用 isw_bfahbhfbaf_Volume0p6
  • 4GB linux-swap … swap域用 isw_bfahbhfbaf_Volume0p7
  • 10GB ext4 … Home用 isw_bfahbhfbaf_Volume0p8

パーティションは以下のサイトを参考にしました。

  • Guide To Install Linux Mint 16 In Dual Boot With Windows
  • Root域は10GBあればいということで10GB
  • Swap域は、搭載メモリと同程度 or 2倍とのことなので、4GB
  • Boot域はいらないかもしれないが、作成しないとうまくいかなかった。このへんがよくわからない。

そして、ここで重要なのはGPartedを利用してフォーマットをすること。参照したサイトだと、インストールの途中でext4フォーマットしているが、自分の環境だと、謎のエラー(???と表示される)がでて先にすすまなかった。

Install Linux Mint起動

デスクトップ上にあしる Install Linux Mintを起動する。

  • 言語を設定
  • インストールのタイプで その他を選択する。

空き領域があれば自動でインストーラがパーティションを切ってくれるとガイダンスには書いてあったが、ここで謎のエラー(???)がでて先に進めなくなる。自分でパーティションをきると先に進めた。先ほどGPartedで切ったパーティションが現れるので、 Changeを選択して、以下を純に割り当てていく。

  • /boot isw_bfahbhfbaf_Volume0p5
  • / isw_bfahbhfbaf_Volume0p6
  • swap isw_bfahbhfbaf_Volume0p7
  • /home isw_bfahbhfbaf_Volume0p8

ブートローダをインストールする場所は、デフォルトのままで(ここでは/dev/sda)

ここを越えたら、あとは順にインストーラにしたがう。

インストールの最後で Fatal Errorが発生する。 このコマンドの実行が失敗したようだ。

./grub-install /dev/sda

この問題の解決方法は以下の記事で解決できる。

しかし、自分はもっとかんたんな方法を見つけた。Boot Repairという Ubuntuのソフトを利用して、問題点を自動的に解決する。手順にしたがうだけなので、楽。

BootRepairは基本的には手順にしたがっていけばよいがブートローダをどこにインストールするか質問されるところで少し困った。先ほどのエントリを参考に以下をしていした。

isw_bfahbhfbaf_Volume0p

BootRepairが完了したら、再起動。これでWindowsとMintのデュアルブートができるはず。

ここまでくるのにいろいろと試行錯誤して、結局10時間くらいかかったけど、なんとかできた。繰り返すけれども、この方法は偶然うまくいったのかもしれないので、手順が正しいかどうかは保証できません。。。

30 Dec 2013, 08:06

[ReText]Linux環境でMarkdownやRestructuredTextをかくためのエディタはこれで決まり

LinuxでMarkdownを書くためのよいエディタを探していたところ、ReTextというツールを見つけたので紹介。

ReTextとは、MarkdownやRestructuredTextをかくためのエディタ。特徴は以下。

  • MarkdownやRestructuredTextでかかれたファイルをリアルタイムプレビューできる。
  • HTML シンタックスハイライト
  • PDF, ODT, HTML, Google Docs へのエクスポート
  • HTML生成

今まではWindows環境で MarkdownPadを利用してブログ記事を作成していた。

畜生、ブログエディタ変更だ!Windows上のMarkDownPadで編集してWordPressに投稿する | Futurismo

Linux環境でも同等の機能を持つものを探してたので、このReTextが利用できそうだ。

Mint Linuxでのインストール方法は以下。

sudo add-apt-repository ppa:mitya57
sudo apt-get update
sudo apt-get install -y retext

Error

以下のエラーが表示されてプレビューを見ることができきない。

ファイルの内容を解析できません。必要なモジュール がインストールされているか確認してください。

コンソールから起動してみるも、こんなメッセージが表示される。

READMEをよくよく読んでみると、Python3.2以上で動作するとのこと。

また、Markdownを利用するには、追加のパッケージが必要とのこと。

システムのPythonのバージョンを調べてみると、Python 2.7.

$ python --version
Python 2.7.5+

Linuxには、現在 Pythonが2種類デフォルトでインストールされているようだ。

$ python3 --version
Python 3.3.2+
$ python --version
Python 2.7.5+

つまり、Python3には markdownがインストールされていなかった。Python3にパッケージをインストールするには、pipではなくてpip3を利用する。

sudo pip3 install markdown
sudo apt-get install python3-pip

これでエラーせずに表示されるようになった。

28 Dec 2013, 13:28

Coursera Algorithms PartIIを受講しました

Couresera Algorithms PartIIを受講しましたので、感想を書きます。

Announcements | Algorithms, Part II

今回のPartIIは、前回のPartIに引き続きです。Part Iを受けたからには、当然 Part IIを受けないわけにはいかない。

[//www.youtube.com/embed/GO8frjxq25I?rel=0]

内容について

前半はグラフ理論をみっちり。後半は、文字列処理や圧縮について。Part Iを受講していたほうがベターだけれども、受講していなくても問題はない。

week1 Undirected Graphs/ Directed Graphs

グラフについての内容。有向グラフ、無向グラフについて。またグラフを検索するために、幅優先探索、深さ優先探索が紹介される。グラフはアルゴリズムのなかでもとくに重要なので、いきなり濃い内容だ。

week2 Minimum Spanning Trees./Shortest Paths

最短経路問題や、最小スパニング木の検索方法。ダイクストラ法、Kraskal法、Prim法などが紹介される。Assignmentは、SeamCarvingという、画像処理技術の実装。これはとてもおもしろかったので、別記事にまとめた。

week3 Maximum Flow/ Radix Sorts

前半は、ネットワークフロー問題と、フォード・ファルカーソンアルゴリズムの紹介。week3のAssignmentは、ネットワークフローを用いて、野球の試合のペナント脱落チームを求める問題。ここまでがグラフ理論。

後半からは、文字列ソートのアルゴリズム(LSD,MSD, 3-way Radix QuickSort)が紹介される。後半は、week6のAssignmentにも関わってくる。

week4

お休み zzz.

文字列検索に関する内容。Googleの予測検索技術はこういうのをふんだんに利用しているのだろうなとおもった。Assignmentは、Boggleというゲームの答えをTries構造を利用したメモ化再帰で解く。これが一番簡単だった。

weel6 Regular Expressions/Data Compression

正規表現とデータ圧縮について。正規表現は、オートマンを利用して正規表現を検出するという仕組みが面白かった。圧縮では、ランレングス法、ハフマン符号化、LZW圧縮のアルゴリズムが紹介される。

自分の大学での専攻は情報理論だったが、理学部だったので実際に圧縮アルゴリズムをプログラミングするようなことはなかった(情報エントロピーの数学的証明とか)。なので、プログラミングを前提としてはなされる今回の講義はとても聞いていて楽しかった。Assignmentは、bzip2で利用されている圧縮方法、Burrows-Wheelerの実装。最後のAssignmentということで、けっこう頑張ったが、パフォーマンスがなかなかあがらなかった。

week7 Reductions/ Intractability

計算量理論、線形計画法、P-NPによるアルゴリズムの分類などなど、アルゴリズムの理論的な基礎が説明される。ここはわからなかった。。。

感想

別のコースと並列で受講していたので、全くスケジュールどおりには終わらなかった。まあ、Sertificationが発行されないのでいいか。Lectureは配信されてすぐにみてたけど、Assignmentは12月の暮れに一気に片付けた。

学習時間は、PartIとあまり変わらなかった。(つまり、Workload: 6-10 hours/weekの倍は時間がかかったという意味)難易度はPartIIのほうが難しく感じた。

PartI,IIを通して、とにかくAssignmentに時間がかかったが、どれも興味深い内容で、とても楽しかった。Assignmentは、80%くらいは点数が取れるのだけれども、残り20%のパフォーマンスの部分がいつも苦戦した。パフォーマンスやメモリ使用量のチューニングを意識してプログラミングをしたのは初めてかもしれない。

Algorithms PartI,IIを通して体系的なAlgorithmsやデータ構造の知識を学習することができたことは、とても有益だ。しかし、知識の消化不良を感じる。大学の講義ということもあり、理論的な部分やトリッキーなテクニックも多かった。理論的な部分は頭に入れてもすぐに忘れる。

しかし、自分は学者ではなくてプログラマを目指すのだ。実践で必要となるスキルは、

  • オーダやメモリの見積もりかた
  • データ構造やアルゴリズムのライブラリの選択方法
  • 簡単なアルゴリズムの実装

などだと思う。DFSやBFSなどはサラッと書きたいものだ。実際にどう使うかという観点から、重要そうなところだけ再度復習しようと思う。

おまけ

エンディングの音楽がとても気に入った。

[//www.youtube.com/embed/SZyT9bayf8o?rel=0]

14 Dec 2013, 11:16

魔法みたいなリサイズ技術!Seam Carvingについて調べてみた

Coursera Algorithmsの課題として、Seam Carving(シームカービング)というアルゴリズムをJavaで実装をした。

写真の縦横幅をトリミングではなくて、見た目的に違和感なくリサイズする技術。2007年に世に出たという、新しめの技術。詳しくはYoutube動画を参照。

[//www.youtube.com/embed/6NcIJXTlugc?rel=0]

アプリなど

iPhoneやAndroidアプリでこういう変換アプリがあればよさそうと探してみたところ、Androiidアプリはすでにある模様。

また、フリーソフトもある。

iPhone写真を変換

というわけで、Javaで実装したコードでiPhoneで撮影した写真を変換してみたので作品紹介。画像データをDAGなグラフと見立てて、端から端で色のグラデーションが少ない部分を幅優先探索で検索するとできる。

ここでは、512x 384 px 画像を、正方形に変換してる。

変換前

beaf_512_384

変換後

beaf_384_384

変換前

cafe_512_384

変換後

cafe_384_384

変換前

sushi_512_384

変換後

sushi_384_383

魔法みたいで面白い!

07 Dec 2013, 23:30

Windowsで コマンドプロンプトからtelnetする!またはアスキーアートでのスターウォーズがスゴイ件

Windows7 でtelnetを利用する方法のメモ。多分8もこれでいける。

今までは、Cygwinを利用してtelnetをしていたが、Cygwin 64bitは telnetをサポートしていないので、別の方法を調べた。

telnetを有効にする

スタートメニューから

コントロールパネル > プログラムと機能 > Windowsの機能を有効化または無効化

を選択。続いて、 Telnetクライアント、にチェック入れる。

有効にするには、Windowsの再起動が必要。

コマンドプロンプトでつかう

コマンドプロンプトで telnetと入力すると、telnetクライアントの画面に移動する。

Welcome to Microsoft Telnet Client

Escape Character is 'CTRL+]'

Microsoft Telnet>

利用方法は特殊なので、helpを参照。

おまけ: スターウォーズ

このサイトへのtelnetがスゴイ!

towel.blinkenlights.nl 23 

 

なんと、アスキーアートでのスターウォーズが見れる!

SnapCrab_NoName_2013-12-8_8-31-53_No-00

SnapCrab_NoName_2013-12-8_8-32-41_No-00

07 Dec 2013, 13:23

Eclipse ADTでつくるAndroidエミュレータ開発環境構築メモ(Windows)

Courseraを通じて、Android開発を勉強しようと思います。

講義では、Android SDKをEclipse込でまるごとダウンロードしてくる方法が紹介されている。

Disk容量が残り8GBしかない自分には、チョット無理ゲーなので、既存のEclipse環境にAndroid SDKをインストールする方法を調べてみた。

Android SDK開発環境の構築作業で自分がやった手順を作業メモメモφ(..)

[toc]

環境

  • Windows 7 64bit
  • Eclipse 4.3 kepler
  • JDK 7

Android SDKとは

Android SDKとは、Android Software Development Kitの略。

Android開発をするためのAPIライブラリやら、その他開発に必要なものがセットになったもの

Eclipseのインストール

なにはともあり、Eclipse All in One Projectから 日本語EclipseJDK環境をまるごと落としてくれる。自分はすでにインストール済みなので、詳細は省略。

JDK 7のインストール

Java開発環境(JDK)をインストールする。現時点(2013)では、Android SDKは、JDK 6を推奨しているよう。ネットの情報では、JDK7 も動作するよう。

以前、JDK7のインストール方法を記事にしているので、基本的にはここを参照。

Android SDKのインストール

まずは、Android SDKのダウンロードページに行く。

青い大きなボタンを押してしまうと、Eclipse込のダウンロードとなるため、下

のほうにある、DOWNLOAD FOR OTHER PLATFORMSを選択。そして、SDK Tools Onlyのしたにあるzipファイル、

  • android-sdk_r22.3-windows.zip

をダウンロード。インストーラ版installer_r22.3-windows.exeもあるけれども、Eclipseからだと、zip版でよい。

ダウンロードが完了したら、適当な場所へ解凍。ここでは以下へ。

C:\android-sdk\android-sdk-windows

Eclipse ADTのインストール

EclipseでAndroid開発を実施するためには、Eclipse Android開発ツール(ADT)のプラグインをインストールする必要がある。

Eclipseのツールバーから

  • ヘルプ > Eclipse マーケットプレイス

を選択。検索欄から、ADT、と入力。Android開発ツールが現れるので、インストール。

SDKマネージャーの操作

Eclipseを再起動すると、先ほどインストールしたSDKのパスを聞いてくるので、入力する。

続いて、SDKマネージャーの起動を要求してくれる。

SDKマネージャーで、追加のSDKをダウンロードする。デフォルトで、アップデートやインストールが必要なものにはチェックがはいる。ここでは、講義に従って、以下をインストール(すでにインストール済みのものも列挙)

  • Tools

    • Android SDK Tools
    • Android SDK Platform-tools
    • Android SDK Build-tools
  • Android 4.3

    • SDK Platform
    • ARM EABI v7a System Image
    • Intel x86 Atom System Image
  • Android 2.3.3

    • SDK Platform
    • Intel x86 Atom System Image
  • Extra

    • Android Support Library
    • Intel x86 Emulator Accelarator

エミュレータの設定

エミュレータ設定する。ツールバー > ウィンドウ > 仮想デバイスマネージャーを選択。新規を選択。

つづけて、エミュレータのスペックを入力していく。ここでは、以下の画像のように入力。

設定が完了したら、開始をクリック。

待つこと数十秒で、エミュレータ起動((o(´∀`)o))

エミュレータの高速化

Intel CPUを利用しているならば、エミュレータを高速化できる。Intel x86 Emulator Accelaratorを利用する。

事前準備として、Intel 仮想化支援機能 Intel VTが有効になっている必要がある。設定方法は、過去記事参照。

以下の場所にあるIntelHaxm.exeを起動して、インストール。

\android-sdks\extras\intel\Hardware_Accelerated_Execution_Manager\IntelHaxm.exe

07 Dec 2013, 07:45

[Coursera]C++ For C Programmersを受講しました

Cプログラマなので、C++を勉強するために『C++ For C Programmers』を受講しました。

概要

C++の初級的な話題が紹介される。この講義でC++の基礎がマスターできる内容。Cプログラマを対象にしているため、Cとの比較やC++のここがスゴイのだという説明も出てきて、Cしかしらない自分にはこのCについての伏線が嬉しい。

また、なにかにつけてC++11の話題がガッツリ紹介されるので、C++11 For C++98 Programmersというタイトルのほうが実は適切な気がする。

オープニングにJAZZが流れて、ダンディさあふれるのIra Pohl教授が現れる。

[//www.youtube.com/embed/tph2O4qPNMg?rel=0]

話し方がカメみたいにものすごくゆっくりなので、English的な壁は大丈夫だった。スライドにカラーペンで書き込みながら説明されるので、臨場感がある。(しかし字がけっこうきたない)

参考書

参考書は、ネット上にある無料のものと、有料のものがある。

  • C++ by Dissection
  • C++ For C Programmers


が、自分は利用しなかった。どちらかというと、副読本としては、かつて挫折した独習C++を読んでた。

各回の概要

Week1 C++ as a Better C

A言語からC言語までに至る歴史の説明。そして、C++がC言語に比べてなぜ優れているかを解説する。課題は、C言語でかかれたコードをC++に書きなおす。ここでC++独特の表記をならう。

week2 C++: Basics of Generics and Classes Template

templateが出てくる。より汎用的で、再利用可能な書き方について学ぶ。課題はダイクストラ法の実装。どのへんがC Programmerのためなのだ? モンテカルロ法やPriorityQueueを使いこなす必要があり、難しい。

week3 C++: Class Constructors and Destructors

コンストラクタ、デコンストラクタの説明。または、List構造の説明。Assignmentの実装方法に関するフォローの講義も入る。

week4: C++: Minimum Spanning Tree & Standard Template Library

auto,継承、friend関数などなど。ここで、STLの解説とイテレータという概念が出てくる。だんだんC++ぽくなってくる。Assignmentは最小スパニングツリーをプリム法かクラスカル法で実装。

week5: C++ 11 Standard; Containers, Iterators and Algorithms

主にここではSTLの説明。コンテナ、イテレータ、アルゴリズムの三本柱が詳しく解説される。lambdaの使い方も紹介されるが、理解できなかった。

week6: Hex, the game and C++ Inheritance

後半の大きな話題である、Hex gameの説明が入る。また、重要な概念である、もここで解説。

Module 7: Min-Max and C++11 Classes; Alpha-beta and Polish

Copy Constactor や Move Costractorなど。またHex Gameを実装するための方法が解説される。ミニマックス法やアルファ・ベータ法など。ここで、このCourseのサムネイル画像がチェスの理由を理解した。この先生はチェスがとても好きらしい。チェスにおけるAIの実装方法なども出てくる。

後半の課題である、Hex Gameを 3weekにわたって実装する。この課題で、C++のfeatureを全部注ぎ込みなさいと言われて、けっこう頑張った。

Module 8: Monte Carlo Evaluation; the C++11 Standard

例外処理、スレッド処理などなど、今までで解説していないC++のfeatureももれなく紹介。また、C++中級への道として、簡単なデザインパターンが紹介される。

おわりに

For C Programmerな部分は実はweek1だけだった気がした。グラフ理論やゲーム理論が出てきて、『いったいどのへんがFor C Programmerナンダヨ!』と全生徒が唸ったに違いない。

Cしかできない自分にとっては、まさにうってつけの授業だった。

Hex Game

[//www.youtube.com/embed/kNOFq7aEYUE?rel=0]

05 Dec 2013, 13:51

rubyで別ファイルの変数を読み込んで利用するためのメモ

rubyスクリプトで、あるファイルに書いた変数を別ファイルで使いたい場合は、requireとグローバル変数を使うとよさそう。

たとえば、

$ ruby print.rb
Hello World

のようなメッセージを出力したい。メッセージはグローバル変数で宣言する。

$ cat message.rb
$hello="Hello World"

別ファイルの読み込みは、requireを利用する。ファイル名で、./をつけるのと、.rbを省略するのがミソ。

$ cat print.rb
require './message'
print($hello)

20 Nov 2013, 14:47

C++でのSTLアルゴリズムの使い方まとめ(sort)

C++ STLの algorithmで便利そうなものをメモしてきます.

並べ替え・ソート(sort)

  • 並べ替えを実施します。
  • vectorなどのランダムアクセス可能なコンテナで利用可能。
  • ロジックはクイックソートを利用している。

使い方

sortの引数として、並べ替えたい初めと終わりのイテレータを渡す。たいていは begin(),end().

sort(a.begin(), a.end());

デフォルトでは小さい順(less())に並べ替えられる。大きい順に並べ替える時は、以下のようにgreater<>()を引数として渡す。

sort(a.begin(), a.end(), greater<int>());

#include <algorithm>
#include<vector>
#include<iostream>

using namespace std;

int main()
{
  vector<int> a;
  a.push_back(3);
  a.push_back(1);
  a.push_back(2);

  sort(a.begin(), a.end());
  for( auto x : a ) cout << x;
  cout << endl;

  sort(a.begin(), a.end(), greater<int>());
  for( auto x : a ) cout << x;
  cout << endl;
}

実行結果

$ g++ -std=c++11 sort.cpp
$ ./a
123
321

13 Nov 2013, 14:40

エンジニアとプログラマの違いについて定義してみた

エンジニアの病気、うつ病にかかってる。

プログラマとエンジニア、並べて使われることが多いけれども、違いがよくワカラなかった。

アイデンティティ・クライシスを乗り切るために、ググってみた。

技能者としてのプログラマ

wikipedia

まずはじめは、wikipedia。客観的な説明がわかりやすい。

プログラマは、ことばのまんま。

コンピューターのプログラムを作成する人

日本ではプログラマーというが、海外ではプログラムコードライター(Program code writer)、略してコーダー(coder)といい…

エンジニアは、言い換えると技術者。対して、プログラマは技能者と語られる。

技術者(ぎじゅつしゃ、英語: engineer、エンジニア)とは、主に工学(エンジニアリング)分野の専門的な技術を持った実践者のこと

技術者に類似した概念に技能者がある。技能者とは、機械の組み立てや精密加工などの、ものづくりの実作業を担当する者を指す

情報技術の分野では、プログラマー(狭義ではコーダー)は技能者とされ、分析・設計を担当するシステムエンジニア、プロダクトマネージャーなどの職種が技術者であるとされる

Yahoo 知恵袋

つづいて、知恵袋。これはわかりやすい。

簡単に建築に例えて言えば

大工:プログラマー

設計士:システムエンジニア

プログラマーは、SE(監督)の指示(仕様書)に従って

コーデイングします。コーデイングとは、日本語をコンピューター語に置き換える通訳のような仕事だと思ってください。

アンサイクロペディア

一見ふざけているようで、真実を語っているアンサイクロペディアによると・・・

プログラマー(英:programmer)とは、コンピュータをバグらせる犯罪者。主に高級言語という名のスパゲッティを作るための奴隷。

電磁波を全身に浴びつづけ、仕事中にインターネットを巡回するのが日課になったりと、年々体と精神が崩壊していく。鬱病の発生率は100%である

どれだけ独創的で便利なソフトウェアを制作したとしても、顧客に気に入れられなければ無価値であり、また「仕様変更」「仕様差し戻し」という名の人災(陰謀)によって、一夜にしてそれまでの仕事が無駄になる危険をはらんでいる。

と、ここまで調べて、どうも自分が思っているプログラマという言葉とは異なっているように思えてきた。ハッカーという言葉が、自分の思うプログラマという言葉にあっている。というわけで、ハッカーについて調べる。

ハッカーとしてのプログラマ

wikipedia

やはり、こっちだ。

ハッカー (hacker) とは主にコンピュータや電気回路一般について常人より深い技術的知識を持ち、その知識を利用して技術的な課題をクリア(なかったことに)する人々のこと

こうかくと、芸術家っぽい。

この言葉は、大規模な開発プロジェクトを何年にも亘って指揮してきた優秀なソフトウェア技術者に対して使用されるものではない。ハッカーとは極めて個人的な属性に基づいた呼称であり、その人物の間に合わせのアイデアや閃きを重視した言葉である。

How to become a hacker

有名な、サイト How to become a hackerから引用。

ハッカーは問題を解決し、物事を築きます。そして自由と自発的な助け合いを信条としています。ハッカーとして受け入れられるには、こういう姿勢態度を持つようなふるまいが必要です。そしてこの姿勢を持つかのようにふるまうには、本当にその心構えを信じるしかありません。

ハッカーと画家

ハッカーと画家という本を読んだ時の読書メモから引用する。

ハッカーとは、優れたプログラマのこと。プログラマは職人。絵画を描くのとソースコードを書くのは同じこと。

すべてがコンピュータにどんどん置き換わっていく。21世紀のアーティストはプログラマなのだ。

ハッカーの目指すものは、すなわち美しいソフトウェアをデザインすること。全体像から次第に細部を描いていく。全体は細部からなり、細部は全体を形作る。

情熱プログラマ

つづいて、情熱プログラマからの読書メモ

ここでは、開発者という言葉が使われる。職業は人生を輝かせるための一つの手段。

誰もが光る部分をうちに秘めているが、それを発揮するにはやりがいのあることを見つけないといけないと思う。自分の環境や、自分の道具や、自分の専門分野を好きにならなければ、輝かしいことはできない。

ソフトウェア開発は、やりがいがあって、しかも報れる仕事だ。芸術活動のようにクリエイティブでありながら、具体的に数値化できる価値を生み出せる。

まとめ

ある言葉の意味を追求し始めるとそれは答えのないものなだから、自分で納得して自分で定義しなければいけない。定義することはすなわち、思考停止である。よし、ここらで定義して、考えるのをやめよう。

プログラマとは、

コーディングを通じて、新しいコトを創造する芸術家

エンジニアとは、

技術を通じて、顧客の夢を叶えるビジネスマン

プログラマは自分のためにプログラミングをして、エンジニアは顧客のためにプログラミングをする。プログラマは、エンジニアの仕様を満たす低級な存在ではなくて、自分のアイデアをコードで表現する存在。

自分は、エンジニアである。そして、プログラマになりたいと思う。そして、それは仕事を通じては実現できそうにない。せめて、昼間はエンジニアという社畜として働いても、プライベートではプログラマとしてありたい。

 

追記:2016/12/07 もっといい言葉が見つかった。私はソフトウェア開発者だ