WatoBlo

新卒エンジニア

Cording Bat というプログラミングのトレーニングサイトが良い感じな件

あ、明けましておめでとうございます、watomonです。

 

コードを書いていたら年が明けていました。来年もそうであれば良いなと思っております。

で、色々ネットサーフィンをしていた僕ですが、面白そうなサイトを見つけたので紹介したいと思います。

 

Cording Bat 

http://codingbat.com/java

 

全て英語なので、英語が苦手な人は少し学習しづらいかもしれません。僕も英語が苦手なのですが、別に読めないとか聞いたことが無い単語は今のところ出てこないし、グラマーも易しめなので読めないことはないと思います。

 

 対応言語は JavaPython です。文法をある程度読んでからのほうが良いかもしれません。なので最初の方の問題は、初心者というよりは初級者向けかと思います。段々難しくなるだろうとは思っていますが、何せ僕もさっき知ったばっかりなのでなんとも。

 

解答・解説・アドバイスが丁寧

例えば最初の一番簡単な問題。下の画像を見てもらえるとわかりますが、コメントアウトで「*こうすればいいよ」とかも書いてくれてます。

 

*返り値をtrue falseのまんまではなく、aSmile,bSmileの引数でやっちゃえ的なこと書いてあります。確かにそのほうが綺麗だわ....

 

Warmup-1 monkeyTrouble

f:id:watomon:20180102134243p:plain

 

 僕自身競技プログラミングとかやったことがないので、これで練習しようかなぁと思っております。年明けに良いミニチャレンジにいかがでしょうか!

他人とプログラムを開発する経験を通して僕自身が気がついたこと

 こんにちはwatomonです。いやぁ〜時の流れは速いもので、もう12月終盤ですよほんと。2017も終わりですよ、まぁ季節意識せず生きてるもんだから特にこれといったことはないんですけどね。

 

 というわけで、後期の授業が一度終わりました。その中でもプロジェクト演習という6人でチームを組み、コンテンツ・プログラマ・マネージャーと役職を決めてJavaフレームワークを用いてゲームを製作するというグループワーク型の授業もひと段落しました。個人的にこの授業にかなり熱中というか、今までに類を見ないくらい真剣になり、色々と僕自身が気づかされることが多かったので、ブログで書き留めることにしました。

 

他人と開発するということ

 それまでの自分は、個人でプログラムを書くことしかしませんでした。コメントも必要最低限に留めていて、他人が読むのは少しかったるいと思います。ですが、複数人で開発する上では、同一のコードに変更を加えることだってあります。よって、プログラムの解読に費やす時間を減らし、作業の効率化を図る必要がありました。

 ”他人のプログラムを読むほどストレスのあるものはない”

というのは的を得ているなぁと思いました。なので、自分が担当する機能の実装は、こまめにコメントで情報を記載し、他人が自分のコードを読むときの負担を減らすようにする必要があったのです。

 

フレームワークの機能を理解するしんどさ

 実際、フレームワークを使う上でも、記述されたクラスとメソッドを理解し、何が継承されているかを覗いてやる必要があります。ぶっちゃけこれが一番しんどかった。今回は、うちの大学の研究室が自作した、3Dを扱うRadishというフレームワークを用いました。いくつかテンプレートのゲームが用意されており、他のチームはそれを参考に少しいじってオリジナリティを加える様子でした。

 

 ですが、これは僕のしょうもないプライドのせいか、”書き換えただけのプログラムは嫌だ”という気持ちがありました。どうせなら、いくつかのテンプレを利用して、全く新しいコードを書きたかったのです。実際、僕たちのチームはタワーディフェンスゲームを作ることになりました。テンプレートにもそういうゲームがなかったので、作ろうという気持ちが湧いてきたのです。

 

”わからない”を乗り越えるために

 ただやはり、僕自身も含めて設計や要件定義の経験もありませんでした。僕はプログラム担当だったため、設計に携わることになります。マネージャーはプログラミングは得意でないものの、ゲームをかなりこなす人で、「もしかしたらこれ使えるんじゃね」といったアドバイスをくれました。実際僕は、彼の的確なアドバイスに救われることになります。

 設計はできても、やはりどう実装するかがいまいちピンとこない。僕はまず、フレームワークのコード全てを目を通すことにしました。クラスの親子関係はどうなっているか・使えそうなクラスやメソッドが無いかを徹底的に分析しました。僕はこれがかなり大事だと自負していて、というのも、フレームワークを使うなら誰でもできると思っていたからです。だって、ほとんど書き換えなくても動くんだし。だが、何かしら問題が発生したとき、中身をある程度理解していたら、もしかしたら対処できるかもしれない。僕はこれを確信していましたし、現に大いに役に立ちました。

 わからないものは徹底的に調べ上げる。どうしてもわからない時だけ、教員に聞く。基本的にこのサイクルを回していたように感じています。ですが、この意識を他人と共有することは実は難易度的に別問題だったりします。

 

お互いにコミュニケーションを促す

 作成する上で、今回はGitHubを利用しました。自分はGitHubは個人で使っていましたが、他人と一緒に管理するのは初めてだったのです。当然、ブランチに関しては無知でした。その結果、私のチームを含めるほとんどのチームで何が起こったか、

 

コンフリクトの嵐でした。

 

 いつプッシュするか、今プルしていいか、いつマージを承認するか。これを口頭で言わずに行うことで、情報共有が乱れることになりました。当然masterが荒れているので作業ができずに無駄な時間を過ごしてしまうことが初回で何度かありました。当然納期は迫ってきます。我々のチームではこのようなことを今後再発させないために、ルールを決めました。

  • 何かしら、Gitのアクションを行う際は、マネージャーに報告する。
  • マネージャーは全員に確認を取り、アクションをして良いかの意思決定をする。
  • 悩んだら必ず二人以上に相談する。

たった、これだけのことを守るだけで、リモートの競合を防ぐことができたのです。些細なことですが、重要なことです。

 

 

まだまだ書き足りないことばかりですが、また次の記事で書こうと思います。

流石に徹夜2連続は死ぬ....

 

ではでは。

 

今日知った知識のメモ

・ ファインチューニング :

学習済みのネットワークの値を初期値として、自前のデータを進める手法。少ないデータセットでも、そこそこ良い結果が得られる。画像認識で良く使う。識別そうの前に5層の壁で前処理をしている。

・ReaNet152

152層のニューラルネットワーク

jEdit

テキストエディタ(知らんかった...)

 

 

Atomを起動したとき、前回開いていたSessionを残したいとき

Atom使いということがバレてしまったわけですが、まぁエディタに関しては派閥や何やらで人を判断しようとも思わないし、よくTwitterでやってるエディタ戦争は、「俺こんな会話できるんだぜ」アピールだと思っているので、エディタの好き嫌いはどうでもよかったりする僕です。

 

というわけで、とりあえず

 

SettingからSearch packagesに「remember-session」と入力し、検索

 

設定を変えてみるが、変化なし

 

コア設定を確認してみると、

起動時に前回のタブを復元する が no に...

とりあえずalwaysに変更してみると、無事治療完了。

 

本当にこれだけでした。お騒がせしました。。

他にも僕が入れてるプラグインを紹介しておきます。

・japanese-menu 

日本語化してくれるプラグイン。割とおすすめ

・project-manager

プロジェクトの切り替えを結構いい感じにしてくれる良いやつです。

 

 

GitHubリア垢用作りました

タイトルの通りです。

 

僕もそろそろPythonでイキリたくなるお年頃、

 

というわけで、文法すらあまり知らないPythonをお勉強をします。

 

その過程でやはり、「何かに進捗を記す・残す」をしとかないとモチベーション続かないだろうなぁというわけで、時間があるときにGitHubにうpしていこうと思っています。

 

ただのお知らせでした。GitHubのURL貼っときます。 

 

github.com

 

ちなみに今日は11/11日、

ポッキーの日ではありませんよ、うまい棒の日だってそれ一番言われてるから

MacにPython3とNumpyとか色々インストールする

イキってHomebrewでPythonをインストールしたはいいものの、Python3をインストールしたはずなのに、ターミナルでpython --version と打つとなぜかPython2.7.xが表示されて頭にきているそこの君。

 

というわけで、ディープラーニングだとかパーセプトロンの実装だとか数値計算だとかちょっとかじってみたい僕みたいな人には、最初の環境構築にはAnacondaというディストリビューションでしてみてはいかがだろうか。

 

このAnacondaディストリビューションには、データ分析に必要なライブラリが一括してインストールされてるのでまぁ、環境構築は楽なんでないかと。(僕はHomebrewでやったけどな!(イキリ))

 

ダウンロードのリンク先を貼っておくぞい

Downloads | Anaconda

 

自分のOSを確認してからパッケージを選択して、お好きなとこへインストール、これで終わり。ちなみにインストーラーは2種類あって、

CUI(コマンドラインでコマンド叩いてインスコするやつ)

と、

GUI(画面に指示やら手順やら描いてくれて、ボタン押してインスコするやつ)

のどちらか好きな方をダウンロードするといいぞい。

 

環境構築に時間をかけても仕方がないと思うので、さっさとインストールしてお勉強しましょう!