前置き
もう4月も終わりに差し掛かり、情報系の学生は必修のプログラミングを学び始めて、新卒でプログラミング未経験のエンジニアとして入社された方はこれからプログラミングを学ぶのではないかと思います。
そこで今回は自分が学んできたプログラミングについてどうやって学んで今に至るかをアウトプットしてみようと思います。(本当は毎日投稿のネタに困っている)
自己紹介
ニックネームHN:ムラサキ
出身の専門分野 :情報工学(工学修士)、データ分析(機械学習・因果推論)で修論を書いた
初めて触った言語:十進BASIC
初めて触った時期:高校1年
触った事ある言語:十進BASIC、VB、VBA、C、C++、Java、アセンブリ、JavaScript、PHP、C#、R、Python3(ちゃんと勉強しているのはPythonだけ)
保有資格
- ITパスポート(2011年(高2))
- Python3エンジニア認定データ分析(2020年)
- ビジネス統計スペシャリスト エクセル分析スペシャリスト(2022年)
- 統計検定2級(2022年)
初めて作ったプログラム:二次方程式の解答
プログラミングの実力 :Paizaで現在Aランク(まぐれで取れた)
現 在 の 仕 事 :個人事業主でデータ分析や研究の技術的支援や教材販売
結論から言えば
プログラミング言語一つ一冊勉強しよう
私の記事を見ている人は分かる通り全て記事はPythonで書いていますが、自己紹介で分かる通り実際には他の言語も触ったことがあり特にC言語は前職で褒められたレベルです。
その上で申し上げますと一つの言語をきちんと学べば案外他の言語にもすぐ対応できます。
私が初めてやった言語は十進BASICやVB他Cなどをどれも中途半端に勉強しましたが後に学んだ特にC++は確かに難しい言語ではありますが、C++は自力でできる限り実装する上で非常に多くの機能が備わっているため、まずC言語やC++を覚える事をお勧めしますがもちろん他の言語でも大丈夫です。
肝心なのは自分の開発したいあるいはこれから開発する分野にしっかりすぐ対応できるように学ぶには最初の言語で大体の物を作れる必要があると自分は考えます。
何か一つ一冊やりきると他の言語にもすぐ対応でき、それで今ではC++からPythonユーザになっています。
勉強方法
本に書いてあるプログラムを一通りVisualStudioに写経して実行して演習問題を自力で解くという当たり前な事。
コモディティ化を避けるために
注意してほしいことはプログラミング言語だけでなく、データ構造とアルゴリズム・集合と命題論理・オブジェクト指向・離散数学・統計学・線形代数・コンピュータサイエンス・データベース(自分はRDBで十分だと思っている)なども含めて学ばないといけない事です。
何故そう考えるかというと、まっさらな状態で学ぶプログラミングは恐らく四則演算・変数・配列・条件分岐・繰り返し・関数・構造体くらいなもので、それで確かに多くの物は作れますが、必ずどこかで限界が来ますし、昨今ありますプログラミングスクールや専門学校でも先述したプログラミング言語一つを一冊やるくらい普通にやると思います。そうなったときに自分の価値は明らかに他者と同じになり安売り競争の始まりになります。
そこで前述したデータ構造とアルゴリズムからデータベースまでが非常に役に立つのです。
例えばWebサービスを考えてみましょう。Webサービスはプログラミングのその一冊にある基礎だけでできるでしょうか?恐らくできないと思います。データの蓄積がある以上はデータベースの知識は必須ですし、大量にアクセスが来る場合はデータ構造とアルゴリズムや、不正アクセス対策をするならインジェクション対策は必須です。(特に組み込みなんか数学めっちゃ使います)
なので言語をただやっているだけではサービスを作るときに必ずどこかで不具合が起きて最終的には信頼のないプログラムになってしまいます。
エピソードトーク
今思えばの後悔(高校)
私は最初興味本位でBASICという言語を学び、後に高校2年の時にちゃんとアルゴリズムやデータベース他セキュリティやアドレスなども分からずに部活(パソコン部)の新入生の体験入部で来た人の情報を管理するGUIアプリを作りましたが、今思うとあれは動いていたというだけでどこかの組織で導入できるようなものではないと思いました。
何故ならあのプログラムはパスワードをハッシュ化していないし、データベースも正規化していないし、データベースを扱うときにプレースホルダを使っていない。
ただ何となくオブジェクト指向でGUIを使ったインプット・アウトプットとif文for文ができればそれっぽいものが作れたというものでしかありませんでした。
その他には高校1年の時にHPを作成などしましたが、アドレスの概念も分かっておらず画像を使うときに情報の先生が本番環境に直すとき相当苦労を掛けたんじゃないかと思います。
ちなみにですが、情報の授業でC言語を学びましたがその当時は四則演算や集合論ができれば問題なかったため自分はプログラミングができると勘違いしていました。
今同じものを作ったら
当時作った物は、名前を入力してデータベースに蓄積されるといったものでした。しかしパスワードがRDBに平文で載っている事やSQLインジェクション対策などを全くしていなかった事など今思うと頭抱えるものでしたが、もっと早くかつ安全なサービスを作れるのではないかと考えます。また、データベースの正規化を行って必要な機能をもっと作れたでしょう。
また、それに加えてデータベースを基に入部予想の学習アルゴリズムを作る事もできたと思います。
終わりに
プログラミングを学ぶのが難しいか簡単かは人それぞれです。ただそのプログラミングを覚えたいならその言語の専門書一冊写経して演習問題を自力でやれば事足りるでしょう。
しかしそれだけではみんな同じことをしています。
だからこそ
- セキュリティ
- データベース
- アルゴリズム
- データ構造
- 離散数学
- web技術
- 統計学
- 線形代数
- コンピュータサイエンス
- オブジェクト指向
- 集合と命題論理
これらを学んで他の技術者と差別化してあなたのキャリアやあなた自身の価値を向上させましょう。(なお私は一部しか覚えていないのであしからず)