スポンサーリンク

FaceSearch: 人工知能で30万人以上の中から、あなたのそっくりさんを検索


2018年12月10日

最初に学ぶべきプログラミング言語とは?(2)

 前回からの続きで、プログラミングの初心者が最初に学び始めるのはどの言語がいいかという永遠のテーマについて勉三の考えを述べていきたいと思います。

そもそも言語って1つじゃなく、いくつも覚えることになる

 よく勘違いしてる人がいますが、プログラミング言語って到底1つじゃ足りないんですよね。環境や用途によってデファクトスタンダードの言語って違ってきますし、時代によっても変化する。勉三自身の遍歴を振り返ると、昔懐かしのN88 BASICから始まって、C,C++, Java, C#, VBA, R, Python, MATLAB などなど色々やってきましたよ。

 別にこれらは私が好きで選択してきたものばかりではありません。目的を実現するためには色々な言語を使わざるをえなかったのです。例えば、会社のPCだと余計なソフトがインストールできなかったりするので、(MSOfficeが入っていれば)何の追加ソフトも必要なくプログラミングができる VBA は非常に重宝しました。

 また、機械学習や人工知能の研究をしていると、論文で誰かが報告したばかりの最先端のアルゴリズムを使うわけですが、そんな時は論文著者がウェブ上で公開しているソースコードを使うしかなかったりします。それも書かれている言語はバラバラ。出来合いのソフトやライブラリーのようにすぐ使えることも少なく、大抵はコードにバグがあるので、自分で中身を解読して修正しなければいけません。

 そうでなくとも、プログラムの心臓部(ビジネスロジック)はポータビリティや高速化のためにC/C++などで実装し、ユーザインターフェイスはJavaやC#、Webサイト構築ではPHPやRubyのフレームワーク、それにJavaScriptなどを組み合わせて作ることは日常茶飯事でしょう。

 言語は1つを極めるのではなく、適材適所で使い分けざるをえないのです。

最初にCから入ると他の言語への以降がスムーズ

 勉三が前回「最初にCからやれ」と言ったのは、まさにこのためです。Cを最初にやっておくと、大抵の言語は怖くありません。まあ、オブジェクト指向やジェネリクス(テンプレート)指向といった部分に関しては、Cは弱いので、流石にCをやった後にC++かJavaあたりも勉強すべきだと思いますが、手続き型の世界で必要とされることは、ほぼCでカバーされてますからね。

「C++なんて使いこなせる人はいないから、使わないほうがいい?」

 で、またこういうと「C++の全機能なんて使いこなせる人はいないから、使うべきではない」とか主張しだすアホな人が必ずいます。

 同じような主張は、Word とか Excel とかソフトについても目にするんですが、そもそも全機能を使いこなす必要はないですよね。自分が必要な機能だけ使えていれば、立派にそのソフトを使っていることになるのです。

 特に、C++は、ある意味で世界観をユーザに押し付けがちな他のいくつかの言語と違って、「便利なものは色々用意したから好きなものだけ使ってね」という思想のもとで作られた言語です。実際、C++の生みの親であるビャーネ・ストラウストラップ氏もそういってます。興味ある方は「プログラミング言語C++」でも読んでみてください。この本はプログラミング言語の歴史を語る上では必読で結構面白いですよ。

 ですので、あくまで自分の必要なものだけを使うという姿勢で問題ないのです。何も色んな機能があるから、それを全部使いこなしてC++っぽく書かないといけない、といった言語ではありません。

とにかく迷ったら最初はC、その次にC++かJavaかC#か

 というわけで、勉三のおすすめは迷ったらC、でその次にC++/Java/C#などの非軽量なオブジェクト指向言語をやる。これで、後はどんな言語もほぼ怖いものなしになるでしょう。

 逆に、最初にとっつきやすい言語から入って、あくまで入門の時期だけならともかく、そればっかりになると辛いですよ。

 もちろん、何か明確にやりたいことが決まってる人は、その限りではありません。「俺はSNSチックなウェブサービスを作りたいんだー」って人に、いきなりCから勧めることは流石に勉三もしません。あくまで前提は、プログラミングの「勉強」がしたい人向けのおすすめです。

スポンサーリンク

FaceSearch: 人工知能で30万人以上の中から、あなたのそっくりさんを検索 FaceSearch: 人工知能で30万人以上の中から、あなたのそっくりさんを検索


posted by 勉三 at 23:58 | Comment(0) | TrackBack(0) | IT
2018年12月09日

最初に学ぶべきプログラミング言語とは?(1)

 ども勉三です。プログラミングの初心者が最初に学び始めるのはどの言語がいいか、というのはよく議論になり、だいたいそれぞれが自分の経験や好みに基づいて主張しだすので、収拾がついた試しはありません(笑)今回は勉三の持論を書かせて頂きます。

そもそも「どの言語をやればいいですか?」と聞く人は向いてない

 まず、そもそもなのですが、「プログラミングに興味があるのですが、どの言語をやるのがいいですか?」といった質問をする人は、プログラミングに向いていません。

 プログラミングに向いている人は、そんな質問をせず自分で適当な言語の本を買って勉強して、数日後には簡単な自作プログラムを作ってるような人です。質問している間に言語1つぐらいざっと習得できますからね。

 これが「私はこういうアプリを作りたいのですが、どの言語を勉強するのがいいですか?」という質問であれば構わないのです。目的があれば、そのためのOS、プラットフォームなどは絞られますし、そのOSやプラットフォームで開発をするために向いた言語というのも絞られますから、経験者も「この言語がいいんじゃない?」と言えるわけです。

 ですが、何の目的もなしにプログラミングが勉強したい、というのだけだと、答えが出るわけがありません。別にどのプログラミング言語でもいいし、極端にいえばその人が習得できようができまいがどちらでも変わりはありません。どうせ、そういう人はプログラミングを覚えたところで何かを作るということもないでしょうから。そういう人は単にプログラミングの「勉強」がしたいだけで、何かを作るためにプログラミングをしたいわけではないのです。

プログラミングの勉強がしたいならC言語が一番いい

 ここまでの議論を踏まえて勉三の持論を書きますが、プログラミングの「勉強」がしたいのであればC言語が一番いいと思います。

 まず、手続き型言語としてはその後の殆ど全ての言語に影響を与え、デファクトスタンダードの位置にあり、Cさえしっておけば他の言語にも応用がきくこと。また、どのOSでも無料で使える開発環境があるでしょうし、入門書の類も豊富です。

 たまに「C言語は難しいから初心者に向いていない」「もっと簡単に作れるものをすすめるべき」という人が言いますが、そもそもプログラミングの「勉強」がしたい人にとっては、簡単なことよりも、バランスよく勉強できることの方が大事でしょう。

 型やポインタ、メモリの概念を隠ぺいした言語であっても、あくまで隠蔽しているだけで、必ずそういった概念の理解はゆくゆくは必要になってきます。コンピュータでプログラミングをする以上、これらの概念は避けては通れないのです。であれば、プログラミングを勉強したいといってるのに、そういったことを教えないのは、数学を勉強したい人に難しいからといって三角関数や微分は教えないようなものでしょう。もちろん、内容を簡単にすれば理解できる確率は上がりますし、達成感はありますが、それは単に教えるべき内容を削っているだけに過ぎません。ゆとり教育みたいなものです。

 また、Cをやったことがなく C# やら Python やらから入ったとして、「Cではポインタという非常に難しいものがある」とか「Cではメモリ管理をきちんとやらないといけない。最近の言語はその辺気にしなくても書けるからバカでもできる」とか、そういう主張を目にすることは遅かれ早かれあると思います。

 その時、Cを知らないとそういった意見を信じてしまうしかなく、何か自分の知らない難しい概念があるぐらいにしか考えることができません。Cを勉強しない限り一生その影はついてきます。もし知っていれば「ポインタなんて難しくないでしょ。バカじゃない?」「メモリ管理は今やC++でさえスマートポインタが導入され、解放を極力自動化できるようにしている。それがベストプラクティスと認識されているのだから、GCに頼ることは何も悪いことではない」といった反論ができるようになります。勉三はこれもCをやっておくことの大きな利点だと思います。

 ちなみに私はC#やPythonも大好きな言語ですので、これらの言語を否定しているわけではありませんので、そこは誤解されないようにして頂ければと思います。

スポンサーリンク

FaceSearch: 人工知能で30万人以上の中から、あなたのそっくりさんを検索 FaceSearch: 人工知能で30万人以上の中から、あなたのそっくりさんを検索


posted by 勉三 at 15:11 | Comment(0) | TrackBack(0) | IT
2018年12月08日

コンサル必須知識(1):So what?

 ども勉三です。コンサルになって非常によく使う、毎日とまでいかなくとも毎週1回以上は耳にしたり使ったりする言葉に "So what?"(ソーワット)というのがあります。今回はこの言葉の意味を解説していきます。

大量のデータ、大量の分析、…で?

 データを頑張って集めてきて Excel で分析、綺麗なグラフを作って、PowerPoint に貼り付けて、力作資料の完成! でもいざ上司に見せてみたら「で?」と言われたような経験、みなさんにも無いでしょうか?

 "So what?" は、この「で?」に相当する用語だと考えると理解が早いかなと思います。要は「で、何が言いたいの?」「で、結論は?」ということです。

 コンサル業界では分析だけして結論がない資料やスライドに対して、よく So what? という言葉が使われます。使われ方のイメージとしては、

新人「これは業界主要各社の売上高と成長率をプロットしたグラフです。」

マネージャー「"So what?" が抜けてるよ」

こんな感じです。こういったやりとりはコンサルティングファームであれば日常茶飯事です。

So what? が大事な理由

 コンサルでは分析結果だけでなく必ずメッセージを示せということが言われます。例えば、上の例でいえば、業界主要各社の売上高と成長率をプロットしたグラフから、「売上高と成長率の間に相関性が見られる」という示唆が得られたとします。これがメッセージになります。

 この内容を1枚のスライドにまとめるとしたら、スライドの中央にグラフを配置し、その上のメッセージ(タイトル)部分に「XX業界では、売上高と成長率の間に相関性が見られる」と文章で書くといったような具合ですね。

 よくあるのが、スライドのタイトルに「業界主要各社の売上高と成長率の関係性」のような分析の説明を表示し、そこからの結論はスライドに書かれていないようなケース。これは基本的にNGだと思ってください。最も大切なのは図の説明ではなく、そこから得られる結論のはず。もちろん、図の説明も必要ですが、図の上か下にでも書いておけばいいのです。

 ではなぜここまで煩く "So what?" という言葉がコンサル業界では使われるのでしょうか。それは、コンサルは「読む側は、資料はぱっとしか見ない」ことを知っているからです。特にコンサルが相手にする役員クラスなんて特にその傾向が強いです。具体的にどういう分析をしたかなんて殆ど見ません。なので、一目で見て何が言いたいかがすぐに伝わるようにしないといけないのです。

コンサル以外では So what? は必要ない?

 ここまでの話を聞いて「コンサル業界だけでしょ?」と思われた方もいるかもしれません。ですが、So what? はどんな業界・職種であっても通用するものだと思います。とりわけ、仕事でパワポの資料を作って提案するという業務が多い方には当てはまるかと思います。

 勉三も事業会社での経験がありますが、どれだけ頑張って分析して資料をつくっていっても、管理職以上は見ないんですね。分析方法を説明しだすと「そこは Appendix に回しておいてよ」なんて言われるわけです。みなさんも経験ないでしょうか?

 コンサルであろうとなかろうと、資料を読む人は丁寧に読んだりなんてしないということは共通です。であるからこそ、誰が読んでも意味を誤解なく理解するために、So what? を明確に示す必要があるわけです。

スポンサーリンク

FaceSearch: 人工知能で30万人以上の中から、あなたのそっくりさんを検索 FaceSearch: 人工知能で30万人以上の中から、あなたのそっくりさんを検索


posted by 勉三 at 11:21 | Comment(0) | TrackBack(0) | 転職