見出し画像

プログラミングするということis

!!注意!!
個人のお気持ちと意見がふんだんに盛り込まれています。
う〜んというのがあるかもしれませんが、よろしくおねがいします。

こんちは
めろたんです。

最近プログラミングを〜というのを多く見るようになりましたよね。(最近は下火かな?

まあ個人的に「ん?」と思っていることがあるのでそのあたりとかも含めてそもそもプログラミングについてモニョモニョ書いていこうと思います。

そもそもプログラミング is なに

プログラミング言語をつかってなにかつくることって感じですよね。
ソフトとかアプリとかをつくるみたいな。

で、そのソフトやアプリがなにか問題を解決するために、作られているというかんじですよね。(もちろんその限りではないですが)

なのでプログラマーとかエンジニアになるには、それを作るためのプログラミング言語を覚えないといけない!とにかくそれを覚える!みたいな感じになられている方も多いかなと思います。

各プログラミング言語にはそれごとに特別な機能であったり考え方等があるので、その言語を使いこないこなすには覚えるのも大事だと思います。

ですが、それ以上に僕は大事なものがあるのかなと思っています。

そもそもプログラミング言語って?

言語です。
言語とは何でしょうか?
みなさんが普段喋っている言葉は「日本語」だったり「英語」だったり「中国語」だったり「中国語」のなかでも「北京語」や「広東語」があったり(詳しくないのでこういう表現でいいのかわからない)というのがありますよね。
これらも「言語」ですよね。
「自然言語」って呼んでいるものです。

そしてプログラミング言語は「形式言語」「人工言語」とか呼ばれるものになります。

会話等するための自然言語とは違うのですが、プログラミング言語も言語には違いはないと僕は考えています。

プログラミングすることとは

ではその「言語」をつかって、ソフトやアプリをつくるというのはどういうことか?

僕は文章を書いていくイメージで作っていくのがいいかなと思っています。なのでプログラミングするには、まず文章を書く能力が大事かなと思っています。

以下に例を示します。

田中くんが鈴木くんと話しをした
田中くん.話す(鈴木くん)
tanaka.talk(suzuki)

みたいな感じに書いていくとなんとなくプログラミング言語で書かれていても何をしたいのかパッと読むことができると思います。

「だれそれがなにをした」「なにをしたい」とかを書いていくと読みやすいし書きやすいものになるかと思います。
主語があって述語があれば、ざっくりなにをしたいのかわかるはずです。

ではこんな調子で勤怠システムを作ってみましょうか。
勤怠システムとはなにをやることなのか、やりたいこととかを人に説明していく感じで、「勤怠管理」を抽象的に人に説明していく感じ

// 勤怠管理をする
attendance_management.start()

// 田中くんが出勤
tanaka.attend()

// 鈴木くんが2020年4月1日に有休
suzuki.paid_vacation_request("2021", "4", "1")

ざっくりこんな感じになるかと思います。(適当に書いてるので年月日のところはDate型のほうがいいとかあると思いますが一旦スルーで)
もちろんこれでは動かないですね。
startとか書いてるけどそれが何するかとかは書いていないですからね。
ではそれらは実際になにするのかもうちょっと詳しく説明してみましょうか

// startしたけどそのなかみは?

start () {
  // 全社員の勤怠を確認する
  all_employee_attendance_check()
  // 各種申請の状況の確認をする
  all_employee_request_check()
}

// attendはなんだろうか
attend () {
  // すでに出勤していないか確認する
  // すでに出勤していたらエラーにする
  if (already_attended?) { error }
  // 今の時刻で出勤した情報を保存する
  attendance_info.save(current_time)
}

// paid_vacation_requestはなんだろうか
paid_vacation_request (year, month, day) {
   // なんでしょうか?
}

こういう感じとかかな。もちろんこれが正解ではないです。
勤怠のあれこれは法律的な話もあるのでこれではだめだ等あるでしょう。
あとこんなんじゃ動かないというのがあります。

こんな感じで詳しく説明するのを繰り返していきます。そうすると動くものが出来上がると思います。

プログラミングするために

では実際にプログラミングしよう!というときに皆さんはどうしますか?
プログラミングの前に、その『やりたいこと』を『プログラミング言語ではない言語』で説明したりなにかに書いたりすると思います。

日本語とか英語といった自然言語を使って、メンバーやユーザと話して「こうしたほうがいい」「ああしたほうがいい」等考えるはずです。
もちろん一人で考えるときも、自分が使いやすい「言語」で考えたり書いたりしてると思います。
先の例では実際にコメントで何をやりたいかを書いてましたよね。

そしてその考えたものが『仕様』とかになると思います。

その『仕様』を作るにはなにが大事なのかというと、「自然言語で説明できること」「論理立てて説明する力」というものが大事かと思います。

そしてできた『仕様』をプログラミング言語に翻訳していくと、自然にプログラミングできるかと思います。

まとめ

まあ色々グダグダ書きましたが、個人的には「自然言語で説明できること」「論理立てて説明する力」が大事かなと思っています。

プログラミング言語はこう書くんだよ・Railsはこう使うんだよ・HTMLはこう書くんだよとかはまあいいんですよ。
後からでも取り返せますし、なんならそういうものは日進月歩というか下手すると日々変わるものですので、書き方・使い方だけ学んでも仕方ないんです。
なんなら使い方・書き方だけ学んでも微妙なこともあります。(完全な個人のキレ案件で申し訳ないのですが、HTMLとかは特に顕著です。とりあえず書ければいい・見えればいいってものではないです。)

そんなことより丁寧に論理立てて説明できる力が第一だと思います。

一人で作るならまだいいんですが、チームでやっていくにはみんなと協力して作っていく必要があるので、人に説明できることが大事だろうなというとこです。

もちろん、コンピュータサイエンスの知識や数学的な知識等があるのはとても大事です。
そういった知識がないといわゆる効率の良い?はやいプログラムみたいなものや機械学習といったものは難しいかと思います。

ですが、それ以上にそういったことが大前提として大事なのでは?という風に思っているという話でした。

--- 以下蛇足 ---

以下のツイートにもつながるんですが、

自分のやっている仕事を整理して他人に説明できる「仕様」にできないのであれば厳しいだろうなと思います。

その仕事をやってきていてそれについて詳しいはずなのに説明できないのであれば、他人が使うなにかの仕様を説明できるのか?ということになるのは難しくないと思います。

なので「自然言語で説明できること」「論理立てて説明する力」をつけてほしいし下手でもいいので何をしたいのか考えて組み立ててみるというのをがんばってほしいなと思うという話でした。

まあ僕が完璧にできるってわけじゃないのでアレなんですがね!

この記事が気に入ったらサポートをしてみませんか?