未熟学生エンジニアブログ

プログラミング・Web開発をする大学院生のブログ

情報系M1の自分は何ができる/やりたいのか?プログラミング技術関連でやってきたことをまとめた

この記事は「まとめ」までを読むには2分くらいで読めます。そこまで読めば自分のスキルの大体はわかります。全部読もうとすると15分くらいかかります。

ポートフォリオサイトもあります https://tetsufe.github.io/my-official-site/

目次

はじめに

現在の自分のスキルについてまとめておきます。この微妙なスキルをつける過程を知りたい人・僕(tetsufe)がどんな人か知りたいという方はこの記事を読んでいただければと思います。

現在のスキルセット

モバイルアプリ

  • iOS(Swift3,4)
    • 開発経験は2年半程度。一通り書けると信じたい。得意。アプリもリリース済み。
  • Android(Java)を一応作れる

サーバーサイド・インフラ

  • Django(Python)
    • 得意。開発経験は2年程度。
  • Rails(Ruby)
    • 趣味で半年程度、アルバイトで3ヶ月ほど
  • AWS(S3をちょっと)
  • CentOS7でHTTPサーバとメールサーバ
  • Docker(docker-composeを使って一通り操作できる)
  • DB(postgres・MySQL・sqlite3)の簡単なCRUD操作

フロントエンド

  • HTML・CSS・JSを調べながら書ける
  • Bootstrap4使えます
  • React/Redux・Nuxt.js(Vue.js)を3ヶ月ほどやっている(2018/10月)

その他

  • Git
    • pull requestベースでレビューを活用した開発
    • 最近、cherry-pickとかrebaseとかも使えるようになった
  • プログラミングサークルの設立/運営
    • プログラミングを教えるのが好きです

まとめ

  • 大学4年間かけて一からプログラミングを覚えた
  • iOSで英単語学習アプリをApp Storeにリリース
  • Djangoでフリマサイト「北大フリマ(仮)」を開発中
  • プログラミングサークルを設立・運営
  • 割と幅広くやっている(Webフロントエンド・バックエンド・ネイティブアプリ・Docker・Git)
  • 今後は、「誰かに勇気や自信、あるいは希望を与える」ために、「 キャラクターや物語を通じて」、「自分の思想やセンスを世間に問う」作品を作っていきたい

SNSアカウント

github.com

qiita.com

twitter.com

自分はどんな人間か

自分はどんな人間か?それは難しい問いだと思います。その中でも他人に見える自分というのは一つの答えです。では、他人にどんな自分を見せられるのか?今自分にできることをまとめようと思いました。

といっても、自分の性格みたいなのをここで語るのもあれなので(こちらの方が自分を表すには重要ですが)、プログラミング関連のみ語ろうと思います。

なぜ語るのか

ここ数年、色々なチャンスに恵まれたこともあり、いろんな価値観や技術、人に触れる機会がありました。そして就職も近づいてきました。

その過程で自分のこれからを考える必要があると感じ、今までやってきたことを整理する必要があると考えたからです。また、自分のこれからの成長に期待し、将来の自分と現時点での自分のできることと比較ができるように記録しておきたいと思っているからでもあります。

1. 自分は何をしてきたのか

ここでは自分のプログラミング歴について話します。

1-1. プログラミングをやろうとした動機(高校・大学1年)

何をしてきたのか、の前に「なぜ」それをしてきたのか、を語ることは大事だと思ったので語ります。この話は高校時代の話になります。

高校時代は一切プログラムを書いたことはありませんでした。正直プロダクトには興味がありましたが、プログラミングをやりたいとかはあんまり思っていませんでした。しかしプロダクトを作りたいというのはありました。といっても企画だけやって自分でつくらないというのは自分で作った感がないので、プログラミングやアニメーションなどができるようになりたいと思っていました。その頃は結構スロットにハマっていたので、スロットを作りたいとか考えていました。(その時代、2011年〜のスロットはただリールとストップボタン、開始レバーがあるだけではなく、大きな液晶画面があってそこでキャラクターが動いたりして大当たりを告知するという感じで、ラオウケンシロウがバトルしたり、萌えキャラが踊ったりして、しかも曲も流れる。ツインエンジェル3の演出・曲は当時結構感動してよくニコ生配信とかを見てました)

高校3年の時、進路選択の時期がやってきました。進路選択というか、大学への願書提出ですね。ここでどの大学、というよりはどの「学部」に願書を提出するかがきまるわけです。そのとき自分は数ⅢCや物理・化学をやらずに国語や日本史・倫理政経をやっていました。つまり文系でした。では、文系学部を受験したいのか?というと、それは自分のやりたいこととはちょっと違うとなったわけです。

そこで一年次の成績で二年次から正式に学部に配属されるシステムの北海道大学に進学しました。文系受験でも理系受験でも、成績次第でどの学部にもいけるという制度だったので、そのまま二年次に情報系学部に進みました。

それほどプログラミングに強烈に興味があったわけではなかった自分にとって、情報系学部に進んだ、ということは割と重要なことでした。その義務感に近いもののおかげで、やっとプログラミングをしようと思えたわけなので。

実は大学に入ってからも、情報系学部に進むことが(事実上)確定するまでは全くプログラミングをしていませんでした。なので、自分がプログラムを初めて書いたのは大学1年(18歳)の2月くらいでした。

ちなみに最初に読んだ本はこれらの本でした。1、3冊目は結構ちゃんと読みました。2冊目は途中で挫折しました。なんか大学に入って勉強が嫌いになったことを再確認させてくれた本でした。C実践プログラミング は結構解説が詳しくてかつ実践のデバッグ方法なども書かれていて、今もその方法を他の言語でも使っているのかもしれないと感じさせるほど、謎の説得力を持った本でした。

Cプログラミング入門以前

Cプログラミング入門以前

C実践プログラミング 第3版

C実践プログラミング 第3版

新・解きながら学ぶC言語

新・解きながら学ぶC言語

1-2. プログラミング初心者時代(大学2年)

触った程度

入門書程度やったこと

  • C言語(c98?89?忘れました)
  • Swift2

さて、そんな感じで2年次に進み、プログラミングをまともにやり始めたわけですが、最初はC言語をやりました。でも、何も面白くなかったです。入門書レベルの文法をやって、ポインタは授業でちょっとやったけど理解してるかは微妙という感じでした。並行してJavaScriptでちょっとゲームを作ったりしました。

振り返ってみると、この年はプログラミングをとりあえずやり始め、挫折し、そして自分が何をつくってみたいか探すような時期でした。この年はとりあえずプログラムがまだ一からは書けないので入門書をやってましたね。

他にも夏休みはCocos2dというライブラリをつかってゲームを作ろうとして挫折したり、秋頃にRuby on Railsでサイトを作ろうとして挫折したり(Rails Tutorialの環境構築で嫌になった)、冬にはSwift2の入門書を読んでiOSアプリを作ったりしていました。この辺はもう情報が古くなっているので参考にした本の情報は載せません。

結局しっくりきたのはiOSアプリでした。このときCやC++を触るのは諦めました。なんとなく苦手意識ができてしまいました。(2年次のC言語プログラミング 講義を落単したのは割とトラウマでしたね。4年次で取り返してからは笑い話ですが)

1-3. 初のプロダクト開発とApp Storeへのリリース(大学3年)

触った程度

  • Git(適当に使ってた)

入門書程度やったこと

継続してちょっとやっていたこと

  • C言語(タイピングゲーム開発&講義)

割としっかりやったもの

  • Swift2, Swift3(オリジナルアプリsの開発)
  • アプリ開発&リリース

インターン

  • WingArc1st社(5日間)

振り返ると、大学3年は結構大事な年でしたね。プログラムが一から書けるようになった年でした。なんでもできるような、何もできないようなそんな気持ちでどんどんコードを書いていきました。

春から夏にかけてSwift2でオリジナルiOSアプリを何個か作りました。

夏〜秋はサーバーサイドがやりたいということで、2年生のとき挫折したRails Tutorial(日本語版)に挑み、なんとか無理やり終わらせました。Unityも本だけ買ったりしましたね笑

railstutorial.jp

Rails Tutorialを終わらせてからは、アダルト違法サイトから定期購読できる(リンクの自動取得)APIを作ったり。Webスクレイピング面白いなとか思ったりしてました。

なぜかJavaをやったりもしてました。後にWingArc1st社で5日間東京でインターンもさせていただいたのですが、その時の条件として「Javaのプログラム経験」があったのですが、夏に「すっきりわかるJava入門」をやっていなかったら諦めていたと思うので、最初はPythonのような新しくてとっつきやすい言語をやるべきという意見もあるけど、いろんな基本言語をやっておくと精神的ハードルを下げるという点で役に立つと思います。JavaやCはプログラミングやソフトフェア開発理論書のサンプルコードとしても使われているので、やっておくとかなり良いと思います。逆にPythonデザインパターンとか、多分あんまりないと思う。

スッキリわかるJava入門 第2版 (スッキリシリーズ)

スッキリわかるJava入門 第2版 (スッキリシリーズ)

オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)

オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

iOSアプリの制作

また、並行して、夏から本格的なiOSアプリ「フレーズ英単語1800-センター対策編」を作り始めました。実際には8月くらいから企画・ペーパープロトタイプを書き始め、3月にApp Storeにリリースという感じでした。プログラミング だけでなく、英単語の情報などの打ち込みも全て自分で行ったので、すごくいい経験になりました。良いコードを書くことの重要性・再利用可能性に対する意識の大切さ、そしてプロダクト開発の難しさや妥協点などを知ることができました。

iOSアプリをスクラッチで開発してリリースまでいったということ、Rails Tutorialのような重厚なチュートリアルをこなして、オリジナルAPIを作って実践もしてみるということは割と自分の自信になりました。

オリジナルの何かを作るということは自分の自信になります。そして自信は開発速度をUPさせるということがわかったという点でかなり大事な年になりました。

ちなみに情報蒐集用にTwitterを初めてみたりしました。

twitter.com

フォローした上級エンジニアから刺激と絶望感を受けました。機械学習に割と興味のあった際に見つけた @NardTreeさんには結構影響を受けてアイコンも萌えキャラにして、イラストのリツイートをするスタイルになりました。(ちなみにイラストはリツイート、後から見返したい技術記事はいいねという感じにしてます。それはTwitterの埋め込みタイムラインにはリツイートだけが乗るので、なんとなくタイムラインが彩られてイメージがよくなると思ったからです。当然萌えイラスト嫌いな人には悪印象だと思います笑 ちなみにリアルではあまりアニメゲームの話はしません。リアルとネット上では萌えキャラの与える印象が違うと思っているからです。これはTwitterがバレた時余計キモいというリスクもありますが。どうでもいいことばかり長々書いてすいません。)

1-4. なぜプログラミングをやっているのか再度問い始めた(大学4年)

触った程度

  • js(必要な機能があれば調べて実装)

継続してちょっとやっていたこと

  • Python(研究)
  • Swift2, Swift3(オリジナルアプリsの開発)
  • Git(コミットの粒度とかメッセージ文面を気にしだした)

割としっかりやったもの

その他

  • プログラミングサークルの立ち上げ
  • Qiita記事をいくつか書いた

この年は、なぜプログラミングをやっているのか再度問い始めた年でした。

iOSアプリの改良と葛藤

それまで作っていたiOS向け英単語学習アプリ「フレーズ英単語1800」は、本来はノベルゲーム(≒エロゲ)で英語を覚える形式で作ろうと思っていましたが、妥協して普通の英単語学習アプリになってしまっていました。何を作りたいのかよくわからず、なぜプログラミングをしているのかわからないままにやってるかんじでした。

しかし、実際に作りたかったのはむしろノベルゲームだったはず。しかし就職もあり、エンジニアとして活躍するために技術を身に付けたいという気持ちもあり・・・「内容 aka 理想」か「技術 aka 現実」か、どちらを取るかという葛藤がありました。そして実際には「技術」を選択するわけですが、割と消極的な選択だったと思っています。また、謎に液タブを勝ったりしたので、イラストを書く環境だけは整ったのですが、、、

さて、そんなこんなでiOS向け英単語学習アプリ「フレーズ英単語1800」の改良はしていたのですが、基本的にコンテンツ的な改良(キャラ絵の改善など)ではなく、機能的な改良ばかりになり、11月くらいからは完全に開発が止まりました。あ、これを読んだりはしましたね。

Web開発への興味

その代わりに、この年はWeb技術を身につけようと頑張りました。機械学習と連携させようという狙いで、Python製WebフレームワークDjangoを勉強し始め、Railsは捨ててDjangoで色々Webサービスをつくりました。

そして冬からは「北大フリマ」というフリマWebサービス開発プロジェクトを立ち上げ、今現在(2018年7月)も開発が続いています。(複数人開発のプロジェクトです。)

hufurima.com

主にHTML・CSS・JS・Python・サーバ(HTTP/メール)・Githubチーム開発のスキルがどんどん身についています!初心者にもコミットしてもらえるように、ドキュメントの整備も頑張っています。

また、詳しくは語りませんが、研究のプログラムを書いたりもしました。これは主に「自然言語処理系」のプログラムです。

プログラミングサークルの立ち上げ

そして、時系列変になってしまいますが、4月には「プログラミングサークルの立ち上げ」もやりました。これは最初完全に一人で始まりましたが、仲間が増えてかなりよい試みでした。最初の年は全然人が集まらず畳もうかとも思いましたが、2年目の今年はさらにメンバーが増え、楽しくやらせてもらってます。

  • プログラミング仲間が増えた
  • バイトも紹介してもらえた(AI TOKYO LABで検索)
  • サークル運営を初めてまともにやった
  • チーム開発をやり始めた
  • プログラミング教育を始めた

本当にいい経験させてもらっています。基本的に適当な性格なこともあって、やる気のある後輩たちに引っ張ってもらってます。

twitter.com

なぜプログラミングをするのか

そんな感じで、公開中のiOSアプリの改良、Webフリマサイトの開発、サークルの立ち上げなど色々とやったのですが、「なぜプログラミングをやっているのか?」という問いは残り続けたままでした。(今現在(2018年7月)もそうです)

どうやら、僕は「プロダクトを作って、自分の思想やセンスを世間に問いたい」という欲があるようです。その思想やセンスを自分の力で形にしたいというだけで、プログラミング技術の習得に関しては2番目くらいにやりたいことでした。これは好き嫌いの問題です。

実際には、エンジニア界隈をネットで見ていると自分には到底かなわないような方々がいっぱいいますし、なかなか自分が有名になれそうな気がしないというのもありますが・・・

では、「自分の思想やセンス」とはなんなのか?というと、また難しく、なかなか答えが出せてないです。でも、最近では、「誰かに勇気や自信、あるいは希望を与えたい」ということがあって、その結果「自分の思想やセンスを世間に問いたい」んじゃないかと自己分析しています。

英単語学習アプリは、自信を与えるためにやっていたはず。実際に、別にテストでいい点を取るためにということではなく、自分の理想の進路に近づける大学に挑戦するための学力的な自信をつけてほしいから作っていました。また、キャラクターや物語を通して(未実装ですが)「自分の思想やセンスを世間に問いたい」というところがありました。

フリマWebアプリは、「技術的な勉強・チーム開発経験」と「自分の思想やセンスを世間に問いたい」というところが大きいので、勇気や自信、というのとは少し違うというか、むしろ自分自身に勇気や自信、あるいは希望を与えたいのかもしれません。

2. これから、何がしたいのか

端的にまとめると、先に書いた

「誰かに勇気や自信、あるいは希望を与える」ために、「 キャラクターや物語を通じて」、「自分の思想やセンスを世間に問う」作品を作っていきたいんだと思います。

具体的には、

  • フリマWebサービス「北大フリマ」
  • iOS向け英単語学習用アプリ「フレーズ英単語1800-センター対策編」にノベルゲーム要素の実装
  • 自分のWebサイト https://tetsufe.github.io のデザインブラッシュアップ
  • 後輩に対してのプログラミング教育

をやっていきたいと思います。そのためにエンジニアリング能力も高めていきたいです。

P.S.

家族もしくはリア友の方は、もし見ても僕に感想とかは言わないでください。