かんがえる、かがんでいる人

考えたことをまとめます。

?

より良いプログラムの学び方

WEBでプログラムを学べるサービスがあります。

環境構築せずとも実行環境が与えられ、少しずつステップアップして文法を覚えられる便利なサービスです。

 

そちらのサービスを提供している会社の社長さんが、先日ブログを書いていました。

内容は、「うちのサービスでプログラムを勉強した後は、実際にモノを作ってみましょう」というものです。

利用者の方は、手段が目的化してるのかな?というのが私の感想です。

 

過去にこんな記事を書きました。 

ton96o.hatenablog.com

DAppsエンジニアになりたいです!という方に、「RDBでモノを作ったことがなければ、まずはそちらを頑張ってみては?」というお話です。
それは今でも変わっておらず、RDBで何かの製品なりサービスをつくった後で十分かなぁと思うのです。

 

プログラムは何かを便利にするための手段です。

具体的には「比較的単純で正確に四六時中処理を行う必要がある業務」がプログラムに置き換わるととても便利です。

その時その時で、ベストな手段を選択する必要があるわけで、実際、一つのプログラム言語やシステム全体としての仕組みを覚えても、時代の流れとともにベストなものは移ろいます。常に、今は何が最適か?を考えなくてはならないのです。

業務的には、予算や開発にかかる人員の都合もあるでしょう。

意外に思うかもしれませんが、現実と折り合いをつけるのが仕事だったりするのです。

だから一つのプログラミング言語を覚えることは必要条件にはなり得ても十分条件にはなりません。プログラムを作るのに必要ですが、それで一生安泰とはならないのです。

 

一方で、プログラムは自分の考えを明確にするart(ここでは人工物の意味、技術であり美術であるとご理解ください)であったりもします。
プログラムはフローチャートを人間にわかる形式で書くことであり、それはその人の技術や知識、今後こういう機能拡張がされるだろうから、そこも考慮しておいて、機能追加しやすいように作っておくか、なんて配慮も読み取ることができます。
どこまで行っても、もっと良い書き方がありそうですし、もっと良いプログラミング言語を選択できたのかも、とも思うのです。

 

プログラム言語は文字通り言語に例えられるかもしれません。

言語はそれ自体、コミュニケーションの手段ですが、一方で、紡いだ言葉それ自体が美術・文学として成り立ちます。

 

言語の学習というと、私は英語を思い起こします。

中学から始め大学学部卒業まで、3+3+4=10年間。それで話せるようになる人はどれだけいるでしょうか?

「数学なんて実社会で必要ない」 という人は、そういう職業にしかつけないのと同様、「英語なんて実社会で必要ない」という人は、そういう仕事しかできません。

 

いま、プログラミング言語学習において起こっているのが「まずはプログラムを勉強しよう」という事であれば、それは英語で起きていることと同じことが起こるような気がしています。

押し付けられた勉強になり、道具としてではなく研究対象となってしまうという事です。

 

先述の通り、それはそれで意味はあるように思います。

プログラムを上手に書けるようになるのは、それはそれでいい事なのです。

しかし、それだけではよろしくないと私は思います。

 

なので、プログラムを学ぶのは大変結構なのですが、何をしようとして、何を作ろうとしているのかをまずは明らかにするのが現状の課題かと思います。 

それはメタな能力として他でも役立つように思うのです。

それは幹であり土台です。解決策はプログラムだけではありません。話し合いだって立派な解決策の一案です。

 

ここで個人的に重要だと考えているのが、「何をしようとして」「何を作ろうとしているのか」という分割をしている点です。

ゴールを明らかにしてくれれば、知見ある方が「こういうものがあるといいかも」と、自分にはない発想をくれるかもしれません。目的に合った、低コストな「モノ」を発想する力も必要です。

漬物をつけるのにチタン合金は必要ないのです。車で近くの河原にでも行って、大きな石を拾ってくればそれでいい。

 

英語を勉強するときに、英語で世界の人と話をしたいと考えている人と、勉強だからやる、という人では吸収力が全く違うように思います。その原因は焦燥感であったりモチベーションであったりゴールが明らかになっている事だったりするように思います。

プログラムも同様です。

何をしたいのか、それをプログラムで解決すべきか、という事が定まっていれば、吸収力が違うようになると思います。

現状、WEBサービスではレベル等でモチベーション維持を工夫しておられます。

利用者はそれに甘えることなく、自分でモチベーションを保つ方がいいように思いますし、それは、上記の「何をしたいのか」を明確にすることで可能になると思います。

 

後、WEBサービスであればいいなと思う事を羅列します。

・バグ修復

 実務上、バグを直すことが多いのです。いかがでしょう?

スパゲッティコードから仕様を読み解く

 様々な人の手が入って、ブラックボックスになった機能をクリアにすることもあります。いかがでしょう?

・お題の提案

 「何をしたいのか」を投票させるなりSNSで募集するなりし、問題発見能力を養います。前述の「何をしようとしているのか」を募集します。何を作るのかはそれの採択者次第。いかがでしょう?

・お題に沿ったプログラムの募集

 純粋に機能開発のスピードやプログラムの出来を競うだけでなく「なぜそのお題を選んだのか」、と「そう判断した理由」を問います。

 Twitterの閲覧数やいいねの数、リツイートの数で多数決を取る人もいるでしょう。

 純粋にお題リストの中から自分の感覚で世間様の役に立ちそうなものを選択する人もいるでしょう。

 お題が被ればどのような成果物を上げたのか、同じような内容であれば処理も似通るはずなので、どのように実装したのかを競えるかなぁと思います。

 

肉の焼き加減や、人の顔を「しょうゆ」「ソース」「塩」の分類で分けるというのも非常に面白いのです。これを例えば、焼き鳥に応用するだとか、婚活サイト・美容室に応用するとか、プログラムから離れた部分を考えると売れるのかな?なんて思います。

 

これだけだと多分伝わらないので補足します。

本格的な焼き鳥は炭で焼きます。
鶏肉は個体差があり、職人はそれぞれに合った切り方をします(筋の入り方とかが違うそうです)。焼き鳥のそれぞれは個性を持っているんですね。なので、焼き方もどれ一つとして同じ焼き方にはならないそうです。切り方が違うから火の入れ方も違う。なので炭火はあえてムラを作っているのだそうです。
そして、焼き方は職人さんの腕次第で、塩梅よく調整されています、と。
この職人技をAIで上手く改善しました。焼き具合はAIでしっかり監視していますからおいしい焼き具合をチェックしています、と。
いかがです?チェーン店的ではありますし、職人技を放棄しているようではありますが職人技はその習得にコストがかかりすぎます。

人の顔は特に恋愛や結婚において重要です。なので、婚活サイトなどでは好きな異性の写真などを複数用意して「こんな感じの顔」が好きだと学習させましょう。そして自分の顔も登録して、分析しておきます。顔を要素分解して、お互いに「こういうタイプが好き」という候補を探しやすくします。ちょっと冷たい感じもしますが、より良いフィルターになるでしょう。

美容雑誌で、髪型とか乗ってますね?丸顔にはこれ、ベース顔にはこれ。
皆さん自分の顔が何型かわかりますか?私はよくわからないんです。友人に見てもらってもバラバラです。美容室にお勤めの方は、何人もの顔をそういう目線で見ているのでわかると思うんですが、自分で客観的に判断することは難しい、と。
であれば、自分の顔や頭の形を客観的に分析して、似合う髪型を選ぶより良いフィルターにしてもらえばよさそうです。

?