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

2014.5.15

math

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

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

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

(続きを読む…)

皆がよく引っかかる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.1

「PHPとかRubyとかあるけど、実際プログラミング言語って何が違うの?」

と聞かれた時、何が違うのかなーとちょっと真面目に考えてみた。

時代の変遷と結びついている

色んな言語があるけど、究極的にはここに帰結するんじゃないかなあと若輩者ながらに思う。

今日、RubyがどうしてPHPに比べてこれだけ流行っているかと言えば、Rubyやその周辺のツールが IT産業が発達した今の時代と親和性が高いからだよねという話。

例えば IT産業が発達して 新しい技術やサービスが目まぐるしく登場している今、如何に速いスピードで質の高いサービスをユーザに提供するかが課題になった状況下において、継続的インテグレーションアジャイル開発といった、その時代におけるニーズと親和性の高い概念の影響を強く受けたRubyまわりのツールは、Rubyを世の中に知らしめる上で大きな役割を担ったと考えられる( 例えばRailsで言うと、マイグレーションやscaffoldなんてその最たるものだし、ユニットテストを全面的にサポートしている )。

ツールに限った話ではなくて、Ruby自体が直感的に書きやすい言語を目指していて PHPと比べて比較的書きやすいと言われているのも流行っている理由の一つだと思う。ただ、Ruby自体が1993年から存在している言語であるということを考えると、Railsとの出会いを踏まえて上記のように時代が必要とする概念や哲学と親和性を高めていったのがやはり大きな理由なのではないかなと感じた。

 

古い言語はなぜ取って変わられるのか

大企業がその古い体質を変えるのに苦戦するように、言語パラダイムやフレームワークもそうそう簡単に方針を変更できないし、変更に際して苦戦を強いられる( PHPが3系から4系にシフトした時のように )からだと思う。

ただ、時代のニーズ云々とはいえど、人工知能を扱うようなLISPとかLinuxとかその他のシステムの元にもなっているCとかそういった血統を引く言語やツールが多いような言語は、一回の変遷が起こるサイクルも長いから、一般的なプロダクトのライフサイクルを考えると  こうした言語は 例え時代の変遷スピードが高速であるにせよ、今後もしばらく残り続けるだろうなあと思う( だって、もしそういうシフトが起こるとしたら そのOSやミドルウェアが「全て」影響を受けることになるのだから。もし無理に「スピード」で置き換えようと思うと、従来のシステムを使用している自動車から交通インフラ、政府機関、日常生活、何から何までに渡ってカオスをもたらす結果になるだろうと思う )

 

今後どんな言語が出てくるだろう

小型のハードウェア、様々なウェアラブルデバイスが登場する今、そのうちハードウェア関連の処理と親和性の高い言語が登場してくるんだろうなあと思う。

今で言うと CやC++、Pythonなんかが使われたりしているけれど、そのうち ハードウェアの時代のニーズを如実に反映した概念に基づくプログラミング言語がオープンソースで登場してくるのはそこまで想像が難しくない。

社会人プログラマ1年目で学んだこと20個(プログラミング言語・ツール・概念など)

2014.3.31

今日で社会人一年目が終了するので、振り返りも兼ねて一年目で学んできたことを記事にしようと思う。

そのついでに今まで勉強してきた技術書(一部勉強中の本・これから勉強する本含む)も参考文献として載せておく( 飽くまで自分のチョイスなので「いやーこの本はやめといた方いいよー」みたいなのも中には混ざっている可能性があります。購入を検討する際はWeb上でのレビューも確認の上で )。

また、「これらを全部やればレベルが上がる」類のものではないので注意してください。特に 一部時代が非常に古く、実用でほぼ使うことが無いものも含まれています

おしながき

  • JavaScript
  • Canvas
  • CSS3
  • SCSS, Compass, Grunt
  • OOCSS
  • W3C標準
  • CentOS
  • VPS
  • Ruby / Ruby on Rails
  • REST
  • Zend
  • C#
  • C
  • アセンブラ
  • ソースコード管理
  • パフォーマンスへの意識
  • 大規模サイトのインフラ構成
  • 品質への意識
  • ツールや言語におけるバージョンの違いに対する意識
  • 外に出ていくこと

「あれ?何か途中で時代逆行してない…?」とか言わないで下さい(´・ω・`)

(続きを読む…)