リーダブルコードを読みました

こんにちは、yukiです。当方、大学の学部4年なのですが、遂に卒論が終わりました!!!対話システムが経験談を発話することによる(自己開示を行うことによる)パーソナリティ認知とユーザーの対話継続欲求の向上という、自然言語処理と心理学を混ぜたことをやってました。院生ではなく社会人になるのは自分で選んだことですが、研究がなかなか面白かったので少し未練がありますね。

 

今後は次世代のデファクトスタンダードを作っていくソフトウェアエンジニアになれるよう頑張って行きたいと思います。

 

 

やっぱり社外での取り組みとして一番最初に取り組むべきなのはQiitaやブログでのアウトプットですよね。

 

なのでアウトプットになれるために手始めに読んだ書籍の重要なところをまとめて行きたいと思います。今後は特定分野での雑誌記事執筆とかやりたいなぁ

 

 

リーダブルコード 

リーダブルコードってどこで調べても出て来るし、名書と聞いていました。実際に読んでみて、やっぱり名書だなと思いました。

プログラミングに触れる人全員に読んで欲しい本ですね。

 

 

主に以下の点で素晴らしいと感じました

  • 初心者でも見やすいようにイラストが十分に使われており、簡潔にまとめられているため、電車内とかでも読める
  • 簡潔にまとまっていてサラリと読めるが後で効いて来る内容の深さ
  • GoogleMicrosoftで実際に使われていた、実践的なコードを読める

1年に一回読むと毎回感じることが違いそうですね。(実は僕も過去に一回読んだことがあって、最近読み返しました)

 

 

この本のテーマとして、「良いコードとは?」「そのコードを書くために何に気を付けなければいけないのか」というものがあります

 

これを自分で噛み砕いて説明すると、良いコードとは

理解しやすいコードである

ことです。

そして、理解しやすいコードであるために、

コードは処理について自分が考えていることを説明するためのものである

ことが重要であると感じました。

ただ動けばいいのではなく、相手に自分がどのように考えているのかを伝える文章がコードであるべきです。

 

 

この本の各章は以下のようになっています

  1. 理解しやすいコードである
  2. 名前に情報を詰め込む
  3. 誤解されない名前
  4. 美しさ
  5. コメントすべきことを知る
  6. コメントは正確で簡潔に
  7. 制御フローを読みやすくする
  8. 巨大な式を分割する
  9. 変数と読みやすさ
  10. 無関係の会問題を抽出する
  11. 一度に一つのことを
  12. コードに思いを込める
  13. 短いコードを書く
  14. テストと読みやすさ
  15. 分/時間カウンタを設計・実装する

 

どの章も有益なのですが、章の番号がそのまま重要度順になっているように思いますね。後ろの方の章はより詳細に書いてあると言った形です。

後でもう一度読んで各章でいいなと思ったのは追記しよう。

 

 

 Winny開発者の金子さんもこんなこと言ってます↓

私にとっては「こんなことを考えたよ」という表現であり、そのための手法です。プログラミング以外の方法でしゃべるすべを知らないのです。

金子勇

 

 

 

 

 

文系未経験が開発サークルの代表になったらサービスクローズすることになった話

こんにちは、yu-kiです。

2回目の投稿です。

 

自分の中ではかなり苦い経験である、サークル運営、サービス運営の失敗を書き残しておきたいと思います。

 

結論としては、

 

  1. サークルの運営問題:大学のサークルで継続してサービス運営するのは難しい
  2. 後継者育成問題:未経験の教育はメタくそ難しい

 

これらの問題を解決できなかった結果、サークルを存続できず、解散となりました。

 

当時どのように思って動いたのか、後悔していること、そしてどうすればよかったのか、まとめてみます。

 

私は、大学ではアプリケーション開発サークルに所属しており、早稲田大学向けの授業レビューアプリの開発を行っていました。

そこではPHP(Laravel)でのWebアプリに加え、SwiftでのiOSアプリの提供を行なっていました。自分はSwiftでの開発を手伝わせていただく形でサークルに入りました。(この時大学2年の春でした)

しかし、プログラミングの経験がなかった為、半年かけて出した成果は"初回起動時のチュートリアル画像表示"程度のものでした。(ここで挫折)

 

その後、2年の終わりにプログラミング教室でインターンの研修を受けることで自身のプログラミング学習が加速し、3年の夏頃にはIoTハッカソンで優勝するくらいになりました。(ほぼ一緒のチームだった方のおかげですが)

 

 

 

 

そこからアプリケーション開発サークルの方でも頑張りたいと思い、

"最近保守くらいしかしてないけど人を集めて開発しよう!!新規サービスも作ろう!!自分が未経験だったから未経験からでもエンジニアになれるサークルにしよう!"と考え、行動しました。

 

主にやったことは

  1. 開発者を集めて新規サービスの開発をすること(企画から開発までを通して楽しんでもらう)
  2. 未経験者を集めて勉強会を開催すること(自分でカリキュラム作って不定期に開催)
  3. 未経験者のための勉強教材を用意すること(Progateなどにお願いして家でもきちんと信頼できる教材をやってもらう)
  4. 未経験者のための勉強環境を用意すること(インターンの紹介など)

です。自分の中では "未経験が活動を通して楽しみながらエンジニアになれる"サークルを目指していたので、かなり教育に力を入れていました。メンバーの中には、「未経験を教育するつもりはないよ」と言われたりもしましたが、自分の気持ちが強かったため、全部自分でやりました。

 

そのメンバーとそこまで仲良くなかったこともあり、教育に自分の時間を割きたくない気持ちも理解できたので、自分だけで行動していましたが、この時点で既に間違ってた気もします。

 

この時は、開発インターン、プログラミング教室インターン、就活のためのインターン、ゼミ、サークルと、とにかく忙しかったですが、頑張りました。

8月9月は一切休みがなく、平均して1日8時間以上は動いていました。

 

 

 

 

 

自分の中では精一杯やっていたものの、”未経験がサークルを通してエンジニアになる”というのはやはり難しく、定着率が非常に低かったです。

お願いして利用させて頂いたProgateの学生チームプランはメンバーの進捗管理などが可能なサービスで、不定期開催の勉強会と、Progateの両方を使うことで教育を行おうと思っていたのですが、勉強会に来てもProgateはやらないメンバーが続出しました。

 

プログラミングにおいて、独学は絶対に避けられません。僕の協力付きで新規サービスを開発するまでに最低でも100~200時間は見積もって学習を進めていましたが、どうしても独学をするという部分を乗り越えられませんでした。

 

 

 

理由としてはいくつかあると思っています。

  1. そもそもそんな熱意がない
  2. 達成感がないのでモチベが続かない

などですね。ありきたりですが難しい問題で、1に関しては解決がどうにも難しい問題です。

2に関しては、プログラミングの特徴で、最初は文法の習熟などに時間がかかるため、苦行に感じる人は多いです。

そのため、何かしらの達成感を定期的に与える必要があったのだと思います。

僕は、お金稼げたり、タスクが終わったらご褒美をもらえれば良いだろうと考え、インターンの紹介や、ご褒美(Progate一周達成で焼肉奢り)などで解決できると思ったのですが、うまく行きませんでした。

 

もう少し、勉強会などに工夫を加え、文法を教えるだけでなく、TwitterAPIを使ってみるとか、楽しくなるような工夫がもっとできたと今は思います。

 

 

 

 

最終的な結果としては、10人以上未経験を教えましたが、サービス開発できるエンジニアになったと思えるのは1人だけでした。エンジニアは楽しいし、もっとたくさんの人にできるようになって欲しかったので、凄く悔しいです。

ちなみに最後の1人のその子は新規サービスを開発してくれて、公開することが出来ました。これは本当に嬉しかったです。

 

とはいえその子は未経験だっただけで僕と同期なので、来年には繋がりません。今僕は4年なので、来年サークルを継いでくれる人は遂に現れませんでした。

悲しい結果ですし、サークルを作ってくれた先輩には本当に申し訳ないです。僕にしては頑張ったから許して欲しい。。。

 

 

 

 

 

 もし、自分がもう一度同じ状況になったとしたら、今までのことに加え、

  1. めっちゃコミュ力高い人に広報をしてもらってもっと大々的に人を集める
  2. エンジニアになったらこんなにいいことがある と思ってもらえるようにエンジニアとのMeet upなどを企画する
  3. 勉強会を週2くらいで頻繁に行う(ための人材集めも含め)
  4. マネタイズを考える

 

ことが必要かなと思います。多くのプログラミングサークルが無くなっているように、拘束力のない大学のサークルで、プログラミングをさせるというのは難しいですね。

続いているコミュニティは本当に凄いと思います。

 

 

今回の経験は、人を動かせなかった経験として当分僕の中に残ると思います。普段の人間関係でも感じる自分の力不足が、節々に現れていて、凄く辛い気分になりました。

コミュ力とか影響力って本当に大事ですよね。最近たくさんコミュニケーション能力の本とか読んでて、色々気づかされることは多いですが、まだまだコミュ力上がった気はしないです。

 

絶対起業なんかしないようにしようと思った。 

 

 心に残った一言

他人を変えようと思ったならば、まず自分を変えることである。

 

 

 

 

 

 

 

文系学生が3年からプログラミングを始めてエンジニア就活をした感想

こんにちは,yu-kiです。

就活が終わり、何かしらのアウトプットをしたいと思ってブログを始めてみました。

 

今回の内容は、文系で大学3年からプログラミングを始めてエンジニア就活をした感想」になります。

文系だけどエンジニアになってみたい人とか就活で迷っている人に役に立つ様な記事を書ければと思っています。

質問歓迎です。

 

 

 

自己紹介

就活では経歴も重要となってしまうので、軽く自己紹介をします。

高校時代:

  • M大学付属で適当に過ごす。
  • 格闘ゲーム、ADVゲームにハマる
  • K大学の推薦を逃したのを機にコンプ発症
  • 理系受験だったものの、引っかかったW大学文系学部に進学

大学時代:

  • 1年の間は学生気分をエンジョイ
  • プログラミングに対しての憧れがあり、2年始めからアプリケーション開発サークルに入るも、挫折
  • 3年になる直前に某プログラミング教室でインターンさせてもらえることになり、プログラミングを本格的に始める。その後Webエンジニアのインターン、研究室で対話システムの勉強をする

資格:

 

以上です。見ればわかる様に、本当に大したことはない、優秀な方からすれば道端の石ころの様な人間です。大学2年までは特にやりたいことも見つからなかったのでただ遊んでいました。

 

プログラミング始めてみたい人向け

就活の話は長くなると思うので、プログラミングを始めてみたいという人たち向けに少し話を。

 

プログラミングとは

プログラミングは、webサービス開発、ソフトウェア開発、ゲーム開発、競技プログラミングコンテスト出場、データ分析コンペティション出場など、非常に汎用性が高く、かつ面白い技術です。

ロジカルに考えることが重要で、1文字間違えるだけで動かなくなります。

そのため理系向けの雰囲気があります。


しかし、将来エンジニアになりたい、プログラミングに憧れがある人はまず始めてみるべきです。学生でもお金が稼げるし、面白く、スキルになって就活に使えると、良い事づくしです。

(とはいえ、できる様になるまで時間がかかります。それまでは苦行に感じる人も多く、忙しい人にはあまりお勧めできません)

 

プログラミング始めるといっても何やれば良いの?

これに関しては非常に難しい問いになります。やりたいことがあるならそれをやるべきですが、多くの人は「とりあえず憧れがある」という程度だと思います。僕もそうでした。

 

そういう人たちに僕がお勧めするのは、

"まずはWeb技術を学び、インターンシップに申し込んでお金が稼げる様になったらその時に考える" です。

正直なところ、プログラミング言語に慣れさえすれば、どの分野を選ぶことも可能です。プログラミング言語に慣れるのが最初の関門になっているだけで、それを乗り越えれば世界が広がります。

 

僕はプログラミング教室で勉強した後、サマーインターンで◯ygamesに行ってゲーム開発して見たり、機械学習を学んでデータ分析コンペに挑戦してみたりしました。最終的にはソフトウェア開発の道を選びましたが、それを決めるのは後でいいし、後から変更も可能です。

 

プログラミングに挫折した人

次に、挫折した人、うまく学習できない人向けに話をします。

 

自己紹介に書いてある様に、僕はプログラミング挫折経験者です。割と時間をかけて勉強したものの全く理解できませんでした。

今振り返ると、あの時理解できなかった理由は「プログラミングを舐めていたから」になると思います。書籍を買ってもサラッと一周するだけで次に行っていたのが失敗でした。

「少し理解できないところがあったとしても一周する方が大事」と考えていましたが、気づいたら全く理解してないまま進んでしまっていたので、もし学習を始める際にはきちんと理解できていないところ、理解できているところを整理し、理解できるまで何周もしましょう。

この時、一番簡単そうで一番薄そうな本を選ぶことをお勧めします。分厚い本を選ぶ時に怖いのは、どこが基礎でどこが応用なのかわからなくなることです。

 

大学受験の数学に例えると一番最初に赤チャートを買う様なものです。英語では単語王を買う様なものですね。確かにテストに出てくる重要なものは全て載っていますが、あまり重要でないものも載っており、使用しているとどれが重要かわからなくなってきます。辞書的に使うのは良いですが、どうせやりきれないし、全て理解するのは難しいので薄い簡単な本から始めましょう。

 

また、プログラミング教室に通うのは非常に有効だと思います。

質問できる環境というのは非常に素晴らしく、学習効率が何倍にもなります。

自分の力で取り組むのは重要ですが、「現状の自分では解決不可能なエラー」「知ってるか知らないかだけのしょうもないエラー」などにぶち当たり、挫折します。

また、重要知識の整理なども質問することでできるでしょう。

 

プログラミング教室は色々ありますので、検討してみてください。

 

 

 

就活所感

 

自分の就活の流れとしては、以下になります。

3年 夏: ITコンサル・Sierインターン(1day,3days) ゲーム開発インターン(1day,5days) 逆求人イベント参加 

3年 冬: 大手メーカーインターン(2weeks) 逆求人イベントに複数回参加

3年 2月~3月: web系大手の面接3社ほど

4年 4月: 内内定が出たのでとりあえずひと安心

4年 6月: 就活終了

 

 個人的にはインターンの経験などを非常に好意的に捉えて頂いたと思っています。色々と頑張ってよかったなぁと思いました。

行ったインターンを見ていただければ伝わると思いますが、業界はギリギリまで悩んでいました。色々考えた結果、一番楽しいと感じたIT業界(エンジニア)になりました

面接・インターン含めYahoo DeNA Mixi pana NTT 楽天など、大手も色々受けました。やっぱり大手は大手なだけ、優秀な人が多いなぁと感じました。給料とかもネットの情報はあてにならない・・・結局働いてる人に聞かないとわからない

ベンチャーの方が成長できる!優秀な人が多い!という意見を見かけることがあり、少し偏見が入ってしまっていましたが、そんなことはなかったですね。大手もやっぱり受けた方がいいと思います。

ベンチャーベンチャーで夢はありますが、一つのことに集中できなかったり、残業が多かったりするので、インターンなどに参加して社員の話を聞いて自分で許容できるか出来ないかを判断するのが良いと思います。

後、インターンは正義。インターン行くだけで超優遇してくれるところはしょっちゅう見かけます。

 

個人的に気をつけていたのは、「自分にとって夢の様な企業を探すのを諦めない」ことです。「給料が多い」「成長できる」「転職できる」「残業が少ない」「周りが技術好き」などですね。結果的に120%満足できる企業を見つけることができました。

 

自分の力だけではなく、様々な方の力を借りた就職活動でした。周りの方や運に恵まれたなぁとしみじみ感じています。

 

 

文系でも、学部3年から始めても、やっぱり頑張った経験は評価されます。エンジニアになるか迷っている人はとりあえずやってみましょう。最終的にエンジニアの道に進まなかったとしても、きっとやって良かったって思えると思います。

 just do it!

 

もちろん内定取ることがゴールではないので、これからも頑張らないとおいていかれるし、きっと幸せにはなれないので、周りの人を頼りながら、頑張っていきたいです

今後は技術記事、悩みなどを書いて行こうと思います。

 

 

 身にしみた一言

人間、自分を磨き続けなければアホになってしまいます

中村修二 (青色発光ダイオードの発明に貢献。ノーベル物理学賞を受賞)