ソフトウェア開発の勉強について色々
2024/7/2
mgn901.iconは学部4年生になり、研究室に新3年生が入ってきて色々聞かれることが多くなってきました。
「その質問はmgn901.iconより他の先輩の方が上手く答えられるよ!」というものもありますが、mgn901.iconに聞いてくれている以上はmgn901.iconの答えに期待してくれていると信じて、答えるようにしています。
ここに答えたこと、考えたことを一種の備忘録のようなものとして残しておこうと思います。
学部2年生の時に2回、一人で参加しましたが、十分な開発時間をとれず、賞を取るまでには至りませんでした。
一方で、知らない人とチームで開発する経験も積んでおきたいと考えて、学部3年生になってから2回、即席チーム(参加登録をした後に、その回の参加者からランダムに組まれる4人程度のチーム)で出場しました。チームメンバーに恵まれて、2回中2回、賞をいただくことができました。
一人とか学校の仲間で参加する分には、いつから参加し始めてもいいのではないかな、と思います。
即席チームで参加できるようなハッカソンに即席チームで出るなら、自分の得意領域(そんなに尖っている必要はないよ!)を一つ作っておくと、意外と貢献できると思います。
どんな風に知っている技術を増やしてきたか?
プログラミング関係の勉強は、元々「すごいWebページはどうやって作るのか?」というところからスタートしたので、HTML、CSS、ブラウザ上で動作するJavaScriptについての勉強からスタートしました。 JSONから学園祭のパンフレットの版下データを生成するためのツールとか。 さらに、スバラシの開発にあたってアプリケーションサーバの書き方やサーバの運用技術を習得する必要があったので、そこでサーバのことを勉強したり、 何から学ぶのが良いのか?
学ぶ方法。
自分の知識(学習の成果物)を更新することだけでなく、学ぶ方法についても学んで更新していく必要があると思います。
プログラムを書いてソフトウェアを開発するという行為についての学習は、その基盤技術が進化し続けるからという意味でも、プログラムという表現・言葉を洗練していく必要があるからという意味でも、ある一定で終わるものではなく、開発を続ける限り続いていくものです。
学ぶ方法を洗練することで、一つのことを学ぶのに要する時間も短くなるだろうし、学習の成果もよくなると思います。
整理しながら学ぶ。
ある知識を得るのには、別の知識が必要です。どこからどこまでがその概念を構成する知識であるのか、を整理しながら学んでいくと効果的だと思います。
知識を増やすことに対するためらいを無くす。
技術書や技術記事で言及されていることは、そこで言及されているのにピッタリのものを作るには非常に役に立ちますが、自分の作りたいもの、これから作ろうとするものには合わないことがあると思います。そのような、読んだ技術書・技術記事に書かれていなかったことを別の書籍やWebサイト、公式ドキュメンテーションでパッと探せるようになると、どんどん知識の繋がりが充実していきます。 自分がどこまで知っているのかを認識して、自分にとっての次にやりたいことを設定して、それに向けて調査する、手を動かす。(現在地、目的地、経路) 計画力と言われているものに近いと思いますが……完璧な学習計画を立てるという意味ではありません。新しいものを作るための、新しいことや複雑なことの学びである以上、一発で完璧な計画ができることはないので。 「これはわかるけれど、あれはわからない」を区別して、わからない「あれ」を調べる、ということの繰り返しです。その営みの全体像が見えていることで、学習全体が、計画っぽさを帯びたものになるのだと思います。
それ以外については、自分の興味や必要に応じて学ぶと良いと思います。
技術を学ぶときのポイントは?
概念、概念同士の関係、概念の目的、使い所を知ること。
概念同士の関係
例: WebブラウザとWebサーバの間でHTTPリクエストやHTTPレスポンスを送り合っている。
概念の目的
例: WebブラウザはWebサーバにHTTPリクエストを送る。HTTPリクエストでは、閲覧したい文書に対応するURLを指定する。……。
ライブラリやフレームワーク、プログラム言語を理解するには、それらの特有の概念をまず知っていると、ドキュメンテーションをスムーズに読めるようになると思います。 TCP/IPとか、HTTPとか、普遍的に使われているものを知ることは、それを応用する技術について学ぶときにも必要なので、焦らずに普遍的で変わらないところも学ぶこと。
ライブラリやフレームワークは良くも悪くも仕様がすぐに変わってしまうので。
技術を学ぶとき以外にも言えることだと思います。
コンピュータは道具(あるいはアラン・ケイのダイナブック)です。「誰か偉い人がそう言っていたから」という使い方は、コンピュータあるいは偉い人に従っているだけであり、コンピュータを自分の道具として使いこなしていることにはなりません。 情報セキュリティなどのために従うべき事柄はあります(「言われた通りにさえすれば大丈夫」という意味ではありません)。
プログラム言語やライブラリ、フレームワークの場合は手を動かす。デバッガを使って動作を確認する。 間違えても地球が爆発したりすることはないので。
私は情報系を専攻する学生である以上、将来はエンジニアとして働くことになると思っている。就活でのアピールになるように、ものづくりを通して技術の勉強もしたいが、つくりたいものが思いつかない。 Web上に作品やプレゼンテーションが公開されていることがあります。着想の得方とか、いわゆる「役に立つもの」の作り方を学ぶ際の材料になると思います。
考えを書き留めるためだけじゃなくて、年単位のスパンで洗練していくためのネタ帳です。
最初こそ秀逸なものは思いつかないでしょうけれど、諦めたりやめたり消したりしない方がいいです。見返した時に、もっと洗練された考えを思いついたり、もっと具体的な考えを思いついたり、昔は思いつかなかった良い方法で実現できそうであることがわかったりするからです。