BETA

企業に所属する前に、大学で学んで良かったこと、もっと学んでおけば良かったこと

投稿日:2019-12-08
最終更新:2019-12-28

TL; DR

必要になって、自ずと勉強できれば、それで大丈夫です。
気軽に生きていきましょう。

でも、読書だけはガチでやっておきましょう。
大学で読みたい本は、全て読み切ることをオススメします。

社会人枠です

本記事は、宮崎大学アドベントカレンダー2019における8日目のエントリー記事です。

ペーペーですが、これでも社会人として生活しています。
ちょっと前まで学生だったので、学生時代に得たものを整理したいなと思いました。

学生さんは、ご参考までに、今後の学生時代を謳歌してください。
そうでない方は、自分もこんな時代があったと、ノスタルジーに浸ってください。

学んで良かったこと

以降、大学で学んで良かったことを記述します。
自慢話みたいなものです、温かく眺めてください。

対人コミュニケーション

学生時代にお酒を飲むようにしていたのは、社会人はお酒を飲めたほうがいいのかな、と漠然と考えていたからですが、大当たりでした。
私の所属しているプロジェクトチームは、学生時代の研究室以上に飲み会が多く、2次会も何度かありました。
2次会を楽しめる人間でよかったなと、2次会に参加するたびに思っています(だいたい奢ってくれます)。

あまり口数は多くないですが、Slackなどのコミュニケーションツールでは喋るようにしています。
自身のtimesチャンネルがあるため、独り言を言いやすい環境でもありますが、ネット弁慶時代の性格をうまく活用し、ネット上では話しやすい雰囲気を務めています。
お蔭で、プロジェクトチーム外の人からも話しかけられることが多く、自身からも質問しやすく、社内の雰囲気は良好です(個人の感想です)。

仕事は人対人のコミュニケーションで成立しているため、コミュニケーションを避けては通れません。
しかし、話せれば良いわけではなく、しっかり会話が成立し、人間関係を良好にすることが肝心です。
人間関係が良くなれば信頼してもらえますし、そうなれば新人であっても、けっこう話を聞いてもらえます。
これを活用し、自身からの提案が通ったりすると、仕事も楽しくなりますよ。

コミュニケーションが苦手?――なら「なたもだ」で解決すればいいじゃない
https://www.atmarkit.co.jp/ait/spv/1912/11/news005.html

自動化への意識

現在の所属プロジェクトには、CI/CD環境が一部整っていますが、すべてが自動化されているわけではなく、非常にまどろっこしく感じる時があります。
しかし、中には機械的に淡々と同じ作業をしている人もいるため、メンバー全員が自動化を考えているわけではないのだな、と意外に思いました。

とあるシステムに、バイナリファイルを手動で設定しなければならないディレクトリがありました。
そのバイナリファイルを更新するためには、手動でコンパイルしたバイナリファイルを、手動で上書きし、手動でプルリクをしなければなりませんでした。
私は嫌だったので、自動化したいと提案し、そして実装しました。

人手による作業はヒヤリハットの温床になるため、できるだけ潰しておきたいです。
その考え方が、私の自動化への意識を生み出してくれました。

開発環境におけるこだわりと柔軟性

現在の所属プロジェクトの開発環境ですが、IDEとしてほぼ全員がVS Codeを使用しています。
しかし、僕だけなぜかVimをメインで使用しています。
開発環境に対して強制が無かったというのもありますが、PythonならVimでいいかなという気持ちで独自路線を進んだのが、正直な理由です。

ですがその際に、チームの開発環境に合わせる必要があります。
VS Codeで利用しているプラグインやLintツールがあれば、それをVimに組込まなければなりません。
私はVimの設定を多少いじれたので、VS CodeじゃなくてもPythonを編集できることを証明しつづけています。

一方で、妥協したものもあります。
既存システムにRustを使っていたものがあったのですが、代替品としてPythonを使っていたシステムがあり、そちらに移行すべきか否か、という話が持ち上がりました。

個人的には、Rustを勉強していたこともあり、Rustを推したい欲がありました。
しかし、他のメンバーはPythonの方が読みやすいです(当時は私しかRustを読めていませんでした)。
属人化が怖かったため、私からPythonのシステムに変えてほしいと頼みました。
結果として、多くのメリットが生まれました。
今でも若干後悔していますが、これで良かったとも思っています。

こだわりは大事、妥協も大事です。
折合いを付けることが重要なことですね。

ソフトウェア工学

オブジェクト指向という概念を理解できていない人は、意外と今でもいます。
TDD文化がないプロジェクトはたくさんありますし、UMLを正しく読み書きできない人もたくさんいます。
テスト手法とかカバレッジ測定とか、名前は知ってても開発で使える道具にできる人は、あまり多くいません。

ソフトウェア工学は、システム開発全般で使える、かなり汎用的な知識を学べる学問だと思います。
学生時代にCI/CD環境を整えたのは、想像以上に役に立っています。

様々なプログラミング言語/ツールの概念や利用方法

事前に学習して良かったと思ったプログラミング言語/ツールは、以下の通りです。
これらを学生時代に学んでいたことで、会社のチーム配属直後からスムーズに開発を担当できました。

  • Perl
  • Git/GitHub
  • CI/CD
  • Slack
  • C++
  • Raspbian/Raspberry Pi

私はPerlを勉強していましたが、それによりRubyやPythonなんて比較的簡単に使えるだろうと自己判断していましたし、実際にチームで開発やレビューを行う立場となっています。
Gitを使っていたことで、GitHubでのプルリクという文化や、コンフリクトとの格闘について、長く苦しめられることもありませんでした。
なにより、CI/CD環境の構築を経験していたおかげで、どのようにシステムをアップデートするのかの概要理解は非常に役立ちました。
ラズパイに至っては、知らなければ使い方すらわからない気がしますが、スムーズにRaspbianをmicroSDカードに焼いて ssh [email protected] できました(簡単なことですが、意外と凄いことだと思いますよ)。

これらに関しては、運の要素が結構絡みます。
もし配属先のプロジェクトが、SVNでバージョン管理しているCOBOLシステムサーバーの保守運用(コミュニケーションツールはEメール)みたいな場合、全く役に立たなかった可能性もあります。
気負わずに、勉強したいことをすればいいと思います。

もっと学んでおけば良かったこと

以降、大学でもっと学んでおけば良かったことを記述します。
反面教師として、ご活用ください。

Javascript

現在のJavascriptについては、殆ど理解できていません。
流行っているものは勉強したくない、という私の天邪鬼な性格が災いしました。
それは、以下に示す、私の学生時代に使っていた言語からも、お察しできると思います(1つだけ例外あり)。

  • Perl
  • Java
  • C++
  • Rust

流行というものは、使われているから発生するものです。
現に、私の所属しているチームでもJavascriptを扱っていますし、もしかしたら私も今後触ることがあるかもしれません。
しかし、基本的な文法ならともかく、JavascriptはPerlやC++と同じくらい闇が深いと考えているため、モチベーションも相まってなかなか触りたいと思えません。

すごく勿体ないことですし、自身の性格を直すためにも触ってみようかなと思ったり、逡巡したりを繰返す日々を過ごしています。

Webサイト開発

Javascriptの節とも関係していますが、基本的な HTML + CSS + Javascript + Webサーバー という構成Webサイトについては、1度しっかりと勉強したほうが良かったかもしれません。

学生時代にふるーいCGIサーバーを触っていたせいで、HTMLはWebサーバーで丸ごと動的生成するものだと思っていました。
HTMLとCSSで体裁を整えて、中の要素だけをWebサーバーで動的生成するほうが、シンプルで疎結合だと気付いたのは、業務で取扱うようになってからです。
HTMLとCSSとJavascriptとWebサーバーの役割を、もっとちゃんと学習すべきだったなぁと反省しています。

Docker

とある業務でDockerを触る機会がありました。
そこで、次のようなDockerfileを作ってしまい、動かないなーというミスを2日ほど経験しました。

# 前略  

CMD ["bash", "./setup.sh"]  
CMD ["bash," "./run,sh"]  

初歩的過ぎるミスなのか、調べてもどこにも「CMDコマンドでは2つのコマンドを実行できない」という文言を見つけきれませんでした(公式サイトにもちょこっと書いてあるだけでした)。
今ではDocker無しの生活は考えられませんが、学生時代にちょっとでも触っておけばよかったです。

サーバー運用

とにかくネットワーク系は苦手でした。
大学でもネットワークの授業はありましたが、基本的なコマンドさえ頭から消えていました(arpnetstatiptables などなど)。
しかし、ネットワーク系を触るとなると、インフラを整備するような環境でもない限り、あまり機会が無いと思います。

また、基本的なサーバー運用時のイロハも学んでおけばよかったです。
プロセスの整理、インタフェースの把握、デーモンの理解、ネットワーク設定などなど、サーバー運用で学習できる内容は数知れません。

学生時代にこれらを学ぶ機会はあまり無いかもしれませんが、せっかく研究室にサーバーがあったのに、使いこなせなかったのは勿体なかったです。

ライセンス関係

学生時代、ツールは実質タダ、OSS使い放題の環境でした。
しかし、社会人になるとそう簡単ではありません。

学生であればフリーソフトでも、商用になった途端に有料というツールは珍しくなくなってきました。
もし商用利用不可/商用利用有料のツールでしか開発できない人間になってしまうと、非常に苦労すると思います。
私も、GitKrakenが使えなかったり、CLionが使えなかったりと、ライセンスの壁を認識して過ごしています。

またOSSについても、ライセンスが問題になる場合があります。
いわゆるGPL汚染と呼ばれるものですが、実際にお金を取得するプロジェクトでは、かなり気をつけなければなりません。
この辺りは、ソフトウェア工学としてフォローできそうな気がします。
ぜひ、どなたか研究してみてはいかがでしょうか?

読書

本を読む時間が減ります。
読む気力が残っていない日々ばかりです。

大学というのは、タダで高額な書籍の読み放題機関であると心得るべきでした。
時間もたっぷりあったはずなので、悔やんでも悔やみきれません。

料理

正直、こんなにコンビニ弁当の日々が続くとは思っていませんでした。
朝はパン、昼は外食、夜はコンビニ弁当のルーティンができてしまい、気付けば5キロ太っていました。
食費も結構かかります。

しかし、想像以上に料理ができません。
都会の部屋の狭さもあり、効率的な動きを余儀なくされます。
基本がなっていない人間に効率的な動きを求められても、なかなかうまく行きません。

それでも最近は少しずつ自炊をしています。
カレーを作ると2時間、麻婆豆腐を作ると1時間かかりますが......

振返って一言

いろいろありましたが、学生時代は楽しかったです。
もちろん、今の生活も楽しいです。

なんだかんだ言って、その場その時を生きていける力が最も大切なことかもしれませんね。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

いろいろ落ちている

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう