geek-branch

書き置きです。

社会人学生1年目を3/4終えたので振り返り

本エントリは社会人学生 Advent Calendar 2020の18日目です。

今年から帝京大学理工学部情報科学科に在籍しています。帝京大学理工学部情報科学科は通信制で、働きながら通うことが可能です。授業はⅠ期〜Ⅳ期に分かれていて、まだⅣ期のテストは受けていないのですが(レポートに追われています)、1年の振り返りとして書くことにしました。


自己紹介をさせていただくと、現在25歳でC++をよく書く仕事をしています。
今の仕事に就いたのは3年と少し前からで、それまでは工場作業員をしたり、産業用機械の修理をしたり、金属の溶接や加工をする仕事をしていました。溶接や加工は楽しい仕事だったので、この間ギャルの方の溶接に関する記事がバズっていて胸が熱くなりました。溶接、いいですよね。

magazine.cainz.com

なぜ大学に行くことにしたか

私は工業高校の電子機械科という学科を卒業した後、進学せず工場作業員や設備管理や修理、金属溶接の仕事をした後にプログラムを書く仕事に就きました。

プログラムを書くことはとても楽しいのですが、様々な知識の足りなさに気づかされる場面がとても多いです。というか徐々に「いいプログラムを書くためには、プログラムだけを書き続けるだけではいけないのでは?」のような気持ちになってきます。
僕の中で特に必要だと感じたものは

です。
知識が足りなくて困るたびに独学で知識を補い、問題をギリギリ解決するものの、その辺りに強い方と話をするとその引き出しの多さ、基礎体力の違いのようなものに悔しくなったりしました。言葉にすることが難しいのですが、表面だけをなぞって真似しているような気になるのです。あとプログラムを書くのはとても楽しいので、せっかく楽しい仕事と出会えているのだからちゃんとプロになりたいなーという気持ちもありました。

体系的に学ぶ必要があること、気持ちがそれに沿っていることと友人からの勧めもあり、働きながら学べる大学を探すことにしました。
実は、働きながら通うことのできる大学を探し始めたのは一昨年のことです。本当は去年に入学する気でいたのですが、入学時に必要な書類のかき集めに間に合わず、今年の入学となりました。
そのため、去年1年間は数学と英語を学習することにしました。僕は高校で数ⅠAまでしか学習していません。高校卒業後に趣味として高校数学の範囲はなんとなく学んでいたものの、大学の学習についていけなくなることを避けるため、数ⅠA〜Ⅲまでを学ぶことにしました。今思えばできれば物理も加えておくべきでした。英語は本当に苦手だったのですが(真面目に取り組んだこともなかった)、英語読めないとダメだな…と思うことも増えていたのでちゃんと勉強しました。ここでTOEICを300点近く上げることができ、大学で6単位認定で取得できたのでラッキーと思いました。この1年間の間に、本当に入学するべきかよく考えましたが、これだけ悩んでいるのだから入らないと後悔するだろうなーと考え、やっぱり入学を決めました。
働きながらコンピュータサイエンスと数学が学べそうな大学の選択肢はそう多くはありません。夜間大学と通信制大学のどちらかで考えていたのですが、費用面と時間の都合について考えた結果、帝京大学理工学部情報科学科を選択する運びとなりました。東京で一人暮らしをしていると学費は結構刺さりました。帝京大学理工学部情報科学科は1年あたり20万円かからない程度で学習できるので本当にありがたいです。

授業について

授業にはテキスト科目、メディア科目、スクーリング科目の3つの形式があり、

  • テキスト

配布されるサブテキストと指定の教科書をもとに学習を進める。レポートを2つ提出後、科目習得試験を受け、単位取得。

  • メディア

LMS(学習サイト)上のビデオ教材やサブテキスト、指定の教科書をもとに学習を進める、小テストなどに合格後、科目習得試験を受け、単位取得。

  • スクーリング

キャンパスでの講義(2〜3日程度)を受講し、科目習得試験を受け、単位取得。


のような感じです。

今年は新型コロナウイルスの影響でスクーリング科目はすべてメディア科目や課題提出などに置き換えられてしまいました。結構通学を楽しみにしていたのでちょっとショックです。在学中に行けるといいなと思います。テストも今はオンラインです。
スクーリング以外は基本的に自習なので、レポートのフィードバックを毎回楽しみにしています。学習内容に関しての質問はメールかLMS上の掲示板を使用して行うことができます。
どれくらい時間をかけているか、という話をすると、平日は昼休憩と仕事終わりで2〜4時間、休日も3〜4時間、レポートを仕上げるときは土日のどちらかを半日〜1日使ってレポート作成、という感じです。僕の場合、4年で卒業するには、124単位を全て取得しないといけないため、1年あたり32単位を目標に学習しています。残業が多くなると進まなくなってしまうな、という心配をよくしています。

科目ごとの話もしたいと思ったのですが、科目ごとにかかる時間がかなり違うため簡単に書くと、僕の場合は数学系の科目にかなり時間がかかります。数学のような積み重ねていく学問について、バックグラウンドが貧弱であるため、高校数学を学び直しながら学習を進めることが多くなるためです。入学を考えている方がいらっしゃったら、高校数学の復習はやっておいた方が良いと思います。基礎数学という必修科目では、高校数学のかなり広い範囲(数Ⅲまで)が含まれます。

僕が高校数学を学び直すことに用いている教材は、坂田アキラ先生の「数学が面白いほどわかるシリーズ」や、青チャート、数学ガールN予備校というオンラインでの授業動画やYouTubeなどでなんとかしています。今は本当に書籍もインターネット上の教材も充実していてありがたいです。

あと大学数学については大学の教材とは別に、マセマの問題集を解くなどして知識と計算能力の増強を謀りました。それがなくとも、証明などを考えたり問題を解いていると本当に時間が溶けていきます。数学を楽しく勉強するコツは難しさを面白がることな気がします。難しくてわかんなくてウケるね、と思いながら毎日考えていると、ある日突然理解できたりします。

一応1単位あたり45時間が目安だそうなので平均をとればそれは少し下回っているかな?とは思います。数学に関しては超えているような気もします。

よかったこと

総合して考えると入学してよかったです。やはり体系的に学べることはいいことだと感じました。こういったものがありますよ、と提示されるのは学習する上で助かります。大学で初めて知ったことも多く、コンピュータについて広くどういったものかを知る場所なのかな、と考えたりしました。

僕の場合、学びたかったコンピュータや数学に関係のない一般教養科目もいくつか受ける必要があるのですが、案外楽しめています。

社会人になってから大学に通っている、ということに関して「人がすでに手に入れているものを今更追いかけている」ような感覚になることがあったのですが、他人を気にせず自分の目指す方へなんとか持っていこうと考えています。

困っていること

時間の余裕はなくなりました。趣味だった映画観賞も最近は避けてしまっています。2時間あるなら勉強したい、みたいな感じです。NetFlix契約どうしようかな…
あと、前述した内容なのですが、いまだにこの道が正しいかどうかを考えてしまうことがあります。現在、転職先を探しているのですが、応募条件に言語やフレームワークが並べられているのを見ると少し心細くなります。しかし、やりたい方はこっちなので多分正しいです。ちゃんと基礎体力をつけて、長くこの世界で楽しく戦えるようになろうと思います。
それくらいです。勉強楽しいです。

 

 

"高校数学でわかる線形代数"を読んだ

"高校数学でわかる線形代数"を読み終えた。この本を買ったのは半年程度前だったのだが、なかなか読む時間が取れず今までいた。

大学の科目で線形代数を現在学習しているため、補助教材として使用した。

内容的にはかなりわかりやすく、かなり理解の助けになった。教科書のような感じではなく、行列や行列式の歴史も含め書かれている。その辺を僕は楽しめる人間なので楽しく読めた。

あと線形代数の学習については問題集として"スバラシク実力がつくと評判の線形代数キャンパス・ゼミ"を使用し学習している。

 

PythonのimportがVSCodeでunresolved importされる現象の対処

起こったことをそのまま書いたらルー語のようなタイトルになった。

Pythonの計算ライブラリを用いて線形代数の学習をしていたのだが、importで波線が引かれ続けるのがすごく気になった。カーソルを当てるとunresolved importと表示される。

importはできているらしく動作に問題はないのだが、コード補完も効かないためストレスを感じ、対処した。

行ったこととしては、

  1. 環境におけるPythonの使用バージョンの設定
  2. プロジェクト内のsetting.json、.env等のファイル追加

の2つだ。

まず、python --versionなどで現在のバージョンを調べたところ、2.7系のバージョンが使用されていた。

Pythonにはpyenvというツールがあり、それを使用することで複数バージョンのPython環境を使用できるらしい。

下記記事を参考にPythonの使用バージョンを変更した。

qiita.com

変更したものの、そのままだと状態を保持してくれないらしくターミナルを閉じると2.7に戻ってしまったため、下記質問を参考に対処した。

teratail.com

それでもunresolved importは解決できなかったため、以下の記事を参考にファイルを追加した。

blog.mrym.tv

これでとりあえずは解決した。学習を進めようと思う。

"痛快!コンピュータ学"を読んだ

痛快!コンピュータ学をつい先日読み終えた。1年くらい前に購入して積読していたものだ。

偶然にも大学の指定教科書となっていて、少しテンションが上がった。内容はコンピュータの歴史に触れながら、ハードウェアやソフトウェア、インターネットについて学べる内容になっている。とても面白い書籍だった。本書はコンピュータに詳しくない人でも(興味があれば)、楽しく読めると思う。

ちょうど、著者や著者の関わっているプロジェクトについてのこんなニュースを読んだ。

news.yahoo.co.jp

TRONというのはOSの名称で、坂村健氏のプロジェクトである。本書で存在は知っていたが、ここまで世界に広がっているとは知らなかった。

もう少しTRONについて深く知ろうと思う。

"Effective Modern C++"を読んでいる

Effective Modern C++を読み直している。

C++11/14で気をつけたいtipsが記載されており、僕の中では一番思い入れが強いC++の書籍である。

というのも、この書籍に出会うまではいまいちモダンなC++の書き方というものを知らなかった。

僕の周りにはベターCのように書く人が多く、ネットなんかでたまにC++11以降の機能を見かけては「なんだこれは」と衝撃を受けていた。

モダンなC++の書き方を知りたい、と1年ほど前に購入したのだが、とても助けられている。

当時は型推論すら知らず、まともに読み進められなかったことを覚えている。そもそもの機能の知識が全くなかったのだ。

C++の書籍は沢山あるが、C++11以降とそれまででは様々なことが大きく違う。

C++11/14について学びたい人にはかなりお勧めできる。

読み終えたら次はC++テンプレートテクニック第2版を読み直そうと考えている。

テンプレート関数で配列を受け取る

テンプレート関数に配列を渡したいなーとたまに考えることがあった。
しかし、T[]で受け取ることはできないし、T*で受け取ってもサイズの情報を引数だけで持たせることはできないしなあ、と考えていたけれど、以下のコードで可能だった。

#include <iostream>

template<typename T, std::size_t N>
std::size_t array_size(T (&)[N]) {
    return N;
}

template <typename T>
void cout_array(T& param) {
    for (std::size_t i = 0; i < array_size(param); ++i) {
        std::cout << param[i] << std::endl;
    }
}

int main() {
    int arr[5] = {5, 4, 3, 2, 1};
    cout_array(arr);
}

参照で受け取り、配列のサイズを返す関数を用意することで問題なく配列を渡した処理ができる。
Effective Modern C++を読み直しているのだけれど、やはり技術書は知識が乏しい段階で読むのと多少知識が備わった段階で読むのとでは理解のレベルが変わってくると思う。
時間を見つけて購入したC++の書籍を全部読み直したい気持ちがある。

"オブジェクト指向でなぜつくるのか"を読んだ

ちょっと自由に使える時間があったため、以前読んだ"オブジェクト指向でなぜつくるのか"を読んだ。

初めて読んだ時は理解できない部分が多々あった気がするのだが、今読むとかなりわかりやすかった。かなりの範囲を網羅しておりとてもいい本だと思う。

どうしてもオブジェクト指向と聞くとポリモーフィズムや継承等のプログラミング技術を想像してしまうが、上流工程に対するオブジェクト指向にも触れている。

新しいものというのは既存のものより便利であり、必要になった経緯というものが存在する。そういった背景を知るとより理解が深まると思う。とてもお勧めできる良書だ。