「数学を学べば頭が良くなる」という話について思うこと

2014.5.15

math

最近コンピュータサイエンスの独習に身を入れるようになって感じたのが、巷で溢れている「数学を学べば頭が良くなる」っていう論は、抽象を扱えるようになる・抽象を組み合わせて更なる抽象をつくり複雑系に立ち向かえるようになる上で、数学という学問が最適だからなんじゃないかなあということ。
( 「仮説を立てる力」とか他にもいろいろな要素があるけれど、今回は「抽象」という話題にフォーカスして考えたい )

「抽象」を理解する上で数学が最適だと思う理由

「抽象化されたモデルを扱うこと」や「抽象化されたモデルを組み合わせて新たな抽象をつくること」を学ぶ上で、特定のドメイン固有の問題によるノイズを極力減らし、問題の本質と向き合うことができるからだと思う。
例えば「オブジェクト指向」という概念について考えたい。僕たちはオブジェクト指向の概念に基づいて 抽象やその組み合わせによる抽象を構築する。ただし、「オブジェクト指向」で抽象を考える際、同時にプログラミング言語による実装のことも考慮しなければいけない。
すなわち、「プログラミング言語」という特定のドメインが持つ複雑さと同時に立ち向かわなければいけない。これは純粋に「抽象化」を学ぶという目的の上では効率的ではない。
数学は他のものに比べてこうしたノイズが少ないため、抽象を扱う上での本質的な問題に集中できるので、抽象を学ぶ上では効率的なんじゃないかなと個人的には考えている。

(続きを読む…)

【初めての電子工作】自分の家でハンダ付けするための環境を整える

2014.5.5

handa

「兼ねてから自分で電子工作してみたいなあと思いつつ、自分のような全くの初心者は一体どこから始めればいいんだろう…」

以前Raspberry Pi も買ったけど、自分で好きなものを自由に作ろうと思ったら回路図とか各パーツのはたらきとかちゃんと理解していないと駄目っぽい(実際 Raspberry Pi とか買ったはいいものの結局どう扱えば良いのかわからず持て余している人も少なからずいると思います。僕とか僕とか僕とか )。

ということで、周囲の人にも相談の上、まずは元々キットとして世の中に存在しているものをつくっていく中で ちょっとずつ全体観を掴んでいくのが一番よいかなと思いました。僕自身シンプルな物事を複雑に考えるのが大好きな人間なので、正直回路とか制御工学とか理論的な事いっぱい勉強したい人だけど、まず現物をいじってみない事にはイメージがつかずピンとこない(=効率が悪い)ので。

そんなわけで、とりあえず実際にプログラムを書いてあれこれ…という話は抜きにして、今回はまず 既に完成しているものを使って自宅でハンダ付けして工作できる環境を整備するという形で話を進めたいと思います。

予算

  • 電子工作に最低限必要なアイテム一式: ( ¥4000 )
  • 初心者向けの単純な工作キット と 単三電池: ( ¥500 )
  • Webで買う場合の送料( ¥500 )
  • 簡単なデジタル時計など、上記よりちょっと難しめの工作キット( ¥1500〜 )

括弧内の金額は大体の値段です。5000円くらいあれば今日からでも自宅で電子工作が楽しめる算段です。SICP一冊分くらいのお値段ですね:)

因みに、ちょっと難しめの工作キットの場合、アダプタ部分別売( こちらも大体600円〜 くらいで売られている )などのものがあるため、買う時は必ず説明書を見て 付属のパーツ以外に何が必要なのかチェックする必要があります( キット自体は安くても )。

(続きを読む…)

皆がよく引っかかるPCまわりでの危険な出来事とその対策22選

2014.5.2

結構 情報リテラシーに関わる問題が軽視されがちなので書いてみた。
「知らない人についていったらダメ」って子どもの頃に教わったと思いますが、情報リテラシーってそれぐらい非常に大切なものです。
「別にそんなに気にしなくても大丈夫っしょ」という人のために、まずは想定されうる具体的な実害を紹介したい。

具体的にどういう実害が出るの?

resize

・パソコンがウィルスにかかって遅くなる
・パソコンがウィルスにかかって修理/買い替えする羽目になる
・気づかないうちにソーシャル上で勝手にスパムをシェアしまくってて友達が減る
・あなたを始め、あなたの勤務先の社会的信用を落とす結果になる
(例: あなたのアドレスから会社の取引先等に機密情報やスパムがばら撒かれる )
(例2: ソーシャルで不適切な発言・写真のタグ付けが炎上する )
・あなただけではなくあなたの家族に危害が及ぶ可能性が出てくる

というわけで、非ITの人がよく引っかかっている問題の対策をまとめてみた。
因みに重要度の分類は以下のような感じです(完全に主観的なものですので数値的な裏づけはありません)

重要度★★★: 意識しておかないとマズい。実害に結びつくケースがある
重要度★★☆: 気をつけておくと安全性が高まる
重要度★☆☆: よほど変な使い方してない限りそこまで意識しなくても良いケース

(続きを読む…)

そろそろ「この数年~10年でプログラマの仕事は機械に取って代わられる」系の記事に一言言いたい

2014.4.22

ここ1年、こういう内容の記事をよく見るようになった。
言っていることはもっともで、「ああ確かにそうだなあ」と共感する部分も多い。
今後技術が発達していく上で間違いなく単純作業は減っていくのは確実だろうし。

ただ2点自分が願うとしたら、彼らが語る「プログラマ」の定義を明確にして欲しいということと、彼らの論が必ずしも業界全体に当てはまることではないことを明確にして欲しいということです。

彼らが語る「プログラマ」の定義

何かしらのサービスを成功させている、もしくは成長の真っ只中にいる人がこういう事を語る場合、彼らの思い描く「機械に取って代わられるプログラマ」像は、いわゆる「与えられた仕事を淡々とこなすだけ」の人の事を指している場合が多い。
ちょっと考えればその人の語らんとしているプログラマ像はわかるとは思うけど、誤解する人もいると思うので、こうした定義は明確に書かれていたほうが親切だと思う。

余談だけど、そもそも「与えられた仕事しかできない」人間が淘汰されていくのって、そもそもプログラマに限った事じゃなくて、一般論として もっと世の中の広い部分に対して言えることなんじゃないのかなーと思う。

PAK12_10many500-thumb-395.jpgauto-3089

「IT業界」というワードの示す範囲

こういう系統の記事では「IT業界」というワードで論の実質的な適用範囲がうやむやにされるべきではないと思う
特にWeb系の企業の場合は、技術的な変化の影響も受けやすいし スピードが超速い(これは必然。現在のWeb業界において、スピードが遅いことは致命傷になる)から、ついついそのスピード感、物差しでIT業界全体を測ってしまう人が少なからずいるような感じがする。でも、考えてみるとそもそもWeb系とその他の技術の世界ってプロダクトのライフサイクルやスピード自体が違うし、一様に部分的な傾向を即座に全体に当てはめるのもちょっとどうなんだろうなあとは思う。

例えば歴史の長いものの場合、以下の2つの性質を併せ持っているので、一概にWebの世界の感覚で判断されるべきではない。

(続きを読む…)

二郎はラーメンではなく二郎というプログラミング言語である – 二郎語ではじめるプログラミング入門

2014.4.17

jiromens

ここ最近 せっかくプログラミング言語の作り方を勉強している最中だし、どうにか二郎のコール(いわゆる二郎語の一部)をプログラミング言語で再現できないだろうかと頭を悩ませていたが、最近ようやく ある程度形になってきたのでシェアする。

(正直な所、タイトルは「プログラミング言語」になっているものの、「やってる事ただのコンパイルじゃねーか」という感じになっちゃってます。 極めつけに「yaccとlex使ってるだけじゃねーか」って声が聞こえてきそうですが、どうか許してください )

test.jiroファイルの用意

以下は「二郎語」で書かれたファイル「test.jiro」である。「ニンニク入れますか?」を契機に、怒涛のコールが始まる。


「ニンニク入れますか?」「ヤサイニンニクアブラ」「ヌキ」「ヤサイニンニクアブラ」「ニンニク」「ニンニクアブラ」「ヤサイカラメ」「ニンニクアブラ」「ニンニクアブラカラメ」「ヤサイニンニクアブラ」「アブラ」「ニンニクアブラ」「ニンニクアブラ」「ニンニク」「カラメ」「ニンニク」「ニンニク」「アブラ」「カラメ」「ニンニクアブラ」「ヤサイアブラ」「ニンニクアブラ」「アブラカラメ」「ニンニクアブラ」「アブラカラメ」「ニンニクアブラ」「全マシ」「ニンニク」「ヌキ」「ヤサイアブラ」「ヤサイニンニクアブラ」「ニンニクアブラ」「全マシ」「ヤサイニンニクアブラ」「ニンニク」「ニンニクアブラ」「アブラカラメ」「ニンニクアブラ」「アブラ」「ニンニク」「ニンニク」「ニンニク」「ヤサイカラメ」「ヤサイニンニク」「ヤサイニンニクカラメ」

ソースコード(コール)内容:  「ニンニク入れますか?」「ヤサイニンニクアブラ」「ヌキ」「ヤサイニンニクアブラ」「ニンニク」「ニンニクアブラ」「ヤサイカラメ」「ニンニクアブラ」「ニンニクアブラカラメ」「ヤサイニンニクアブラ」「アブラ」「ニンニクアブラ」「ニンニクアブラ」「ニンニク」「カラメ」「ニンニク」「ニンニク」「アブラ」「カラメ」「ニンニクアブラ」「ヤサイアブラ」「ニンニクアブラ」「アブラカラメ」「ニンニクアブラ」「アブラカラメ」「ニンニクアブラ」「全マシ」「ニンニク」「ヌキ」「ヤサイアブラ」「ヤサイニンニクアブラ」「ニンニクアブラ」「全マシ」「ヤサイニンニクアブラ」「ニンニク」「ニンニクアブラ」「アブラカラメ」「ニンニクアブラ」「アブラ」「ニンニク」「ニンニク」「ニンニク」「ヤサイカラメ」「ヤサイニンニク」「ヤサイニンニクカラメ」

コンパイル

前述の二郎語によって記述されたコールをコンパイルするために、linux上で以下のようにコマンドを実行する。


./jiroparse test.jiro

すると、以下のように二郎語で書かれたコード(コール)をベースに「jiro.c」というC言語のファイルが出力される

この中身を見てみると、二郎語によるコールがC言語に正常にコンパイルされてHello world が出力されていることがわかる( int main(void){ …、 return 0; } あたりの処理は割愛しております)。


printf("Hello World");

(続きを読む…)