2015年09月26日

プログラミングで大事なこと

プログラミングで大事なこと夜にふと"プログラミングで大事なこと"を思いつくことがあるのでメモ今日思いついたのは2つ(追加2つ)①思考する力当たり前かもしれませんね。でも僕はずっとプログラミングで大事なのは数学だと思ってました。で...

Posted by 部谷 修平 on 2015年9月25日


上の投稿について、もう少し具体的に書きたいと思います。単純にプログラミング初心者の方が一歩進めるようになればと思います。

@思考する力
思考を整理する力がプログラミングに大事ということですが。どういうことか?
例えば、Milkcocoaの仕組みを考えてみます。まずMilkcocoaを作る前に、次のように思考します。

1.どういう人やシステムがこのMilkcocoaに関わってくるか?Milkcocoaを使ってサービスを作る開発者(開発者)?認証の仕組みでFacebookやTwitterも関わってくる?MQTTに対応したい、MQTTクライアント?

2.それらの人々やシステムはどのようにMilkcocoaを使うか?

・開発者はMilkcocoaにログインする
・開発者はダッシュボードでアプリを作る。
・開発者はダッシュボードでアプリをアップグレードできる。
・開発者はアプリのapp_idを使って、Milkcocoaに接続できる。

「開発者」「ダッシュボード」「アプリ」「アップグレード」「app_id」
頭の中に名刺が浮かびます。これを整理します。永続化すべきものはどれか?Webであれば画面に関するものはどれか?「アプリ」は「app_id」を持っている?「アプリ」は「app_id」をどのくらいの頻度で使う?
ログインした後にできることはどれか?アプリに対してできることがどれか?

 というようにいろんな視点で「整理」をします。要するに似ているものをまとめたり、片方が片方を「持っている」場合には、どのぐらい「強く」持つべきかを考えます。「整理」の方法としてオブジェクト図を書いてクラス図を書くという方法があったり、クラス図の部分要素として汎化、特化、集約みたいな思考の表現方法があります。思考の整理方法として、こういうものを捉えると良いと思います。

 継続的にどのくらいきれいに整理できるか?でプログラムの保守性などなどが、かなり決まります。多くのフレームワークが、整理の方法の一部を提供しています。そもそも自分で整理ができると、それらの方法を一段上から眺めることができます。

A人間を信じすぎないこと

これもかなり重要で、例えば、突然プログラムが動かなくなったとします。直前にプログラムの編集をしていればそれを疑うのですが、なにもしてなかったとします。そういうときコンピュータを悪者にしてはいけません。
例えば時間に依存するプログラムを書いてないか?実行回数に依存するプログラムを書いてないか?変に状態を周りに残していないか?(Webであればcookie、DB)などです。OSに近いレイヤーだと、メモリに変な情報が残っていないか?ファイルディスクリプタをちゃんと閉じたか?、などもあります。こういうところを疑えるかは非常に重要です。

ということで続きはこちらで!

Technical Rockstars 採用

お待ちしております!
posted by Syuhei Hiya at 07:47| Comment(0) | TrackBack(0) | 日記

2015年07月23日

MicroServiceの記事を読んで

MilkcocoaもMicroService的に(あんまりそのつもりは無かった)やっていて、数十リポジトリあるんですが。
実際アプリケーションを担保する部分だけをNodeJSからErlangに変えたときも、他の部分はほとんど変更することはありませんでした。システムが複雑になれば、それぞれの部分に必要な性能や要件が異なってくるので、必然的にこういう設計が必要になってきますね。
この記事の例は、分け方やインターフェースを間違うと大変きついってことですね。Erlangのホットデプロイが難しいって話と似てる気がします。一枚岩にして変更した方が、ある種の安心感はあるんですよね。
http://www.slideshare.net/AkiraMiki/20160722-microservice
自前でサービスを分けるだけでなく、他のいろんなサービスと組み合わせて作ることは当たり前になるでしょうね。
こんな感じに→ RoRとMilkcocoaの連携方法について
http://blog.mlkcca.com/backend/milkcocoa-for-ror/
posted by Syuhei Hiya at 18:00| Comment(0) | TrackBack(0) | 日記

2014年04月22日

プログラミングができるようになるまで

寝れないから、私がプログラミングができるようになるまでの話を書こう。

大学に入るまで


私は大学に入るまではPCではゲームをするくらいだった、高校は全寮制だったのでPCどころか携帯も持ち込み禁止。Google検索ですら、やり方がよくわからなかった。

中学のときは数学が好きだった、他の科目の時間も数学をやっていた。数学だけは成績がちょっと良かった。
高校に入って物理が好きになった、数学よりも現実に近く、なおかつ数学で記述できることがおもしろかった。でもたぶん、あまり勉強する生徒じゃなかった。

大学入学



九州大学に入ってすぐ授業でSchemeをやったが全然分からなかった。
1年生の夏にExcelの使い方を覚えた。
後期になり授業でC言語をやったが#includeの意味がわからなかった。
2年生に進級する春休みにWindows APIを勉強してオセロを作った。これが初めての作品。1週間かけて作ったが、C言語は大文字と小文字の区別があるということも知らず、長々と写経したプログラムを書き直したりしていた。その次の週には、Windows APIで3Dの立方体をソフトウェアレンダリングしていた。数VCが得意だったので、線の表示の仕方さえ分かればなんとかできた。

2年生の夏には、OpenGLを知った。ソフトウェアレンダリングよりハードウェアでやったほうが良いようだ。
でも難しくって、しばらくFlashに逃げゲームを作っていた時期もあった。脱出ゲームが流行っていた時期だった。Javaを勉強して、iアプリとかも作った。
さらにHTMLとPerlが書けるようになり、Webサイトを作った。DBはまだ知らなかった。
お金がなく、ジャンクPCを復活させるという特技を身につけた。2000円でブートパスワードロックのかかったLifebookを買って、プログラミングしていた。あとで同じ型の中古品を見たら1万円の値段がついていた。
あと授業でハフマン符号化とか習ったら、その日のうちに実装していた。楽しくて仕方なかった。
渋滞学とかカオス力学とか遺伝的アルゴリズムとか、本を読むたびにコードに落とし、周りの人に見せていた。周りの人の反応はあまりよくなかった。ちなみに誤解の無いように書いておくと、私は引きこもっていたわけではなく、大学2年生のころは毎日夜中になると街に出かけて遊び歩き、明るくなる頃に帰っていた。

3年生のときには多くのことをやった。
まずOpenGLやSDLでゲームが作れるようになっていた。OpenGLでSimCityもどきとか作っていた。
あとOpenGLでXファイルをインポートして、スキンメッシュアニメーションを作成するためのツールを作った。この頃から開発ツールよりになっていった。作るためのものを作る、ということを知った。
OSについて勉強しまくり、自分でOSを作っていた。確かアセンブリとC言語とC++を組み合わせて作っていた。Linuxやminixのソースを学校で印刷してバスで読んでいた。Linuxのソースでメモリ管理やタスクスケジューリングやC言語のマクロを学び、netBSDのソースでアーキテクチャ依存のコードを読んでいた。
ぷよぷよもどきを作って、ネット対戦できるように自宅サーバを構築した。TCP/IPプログラミングはこの時やった。サーバサイドとクライアントサイドという概念を知った。

4年生の時、研究室に入った。
ドメイン特化言語やモデリング言語について知り、世界が広がった。
すぐに画面遷移図からSWFを生成するデモを作った。初めて褒められた(気のせいかも)。
9月にIPA未踏ユースに提案書を提出した。テーマは「Webベースのモデル駆動開発ツール」、ブラウザ上でUMLを描くとソースコードが生成される。プレゼンでは(JavaScriptをろくにかけないくせに)「HTML5でやれば絶対できますよ!」と言っていた。採択された。
東京であった未踏ユースの最初の集まりは、前日にクラブに繰り出したせいで終止爆睡していた。
しかしプロジェクトは予定より2ヶ月早く完成させ、研究室内で利用してもらった。このプロジェクトの中では、状態遷移図の中に記述するアクション言語の実装も含まれている。つまりこの時すでにプログラミング言語を実装している。
ちなみに大学の卒業研究は、Android携帯の消費電力プロファイリングについてだった。

大学を卒業して大学院入学後



大学院に進学し、このプロジェクトの成果をモデリング言語を作るプラットフォームであるcloocaに進化させ、他の大学にも導入された。
いつのまにかcloocaの言語はPython、Javascript(Node.JS)に移り変わった。
会社を作ったり、FLOWer言語を作ったりもした。
たまに趣味でAndroidアプリやiOSアプリやWebアプリもリリースしている。

まとめ



私がプログラミングができるようになるまでを書いた。
振り返ると、授業のプログラミングってあまり身になってないな。
あとフレームワークとか全然出てこないw

言いたいのは、つまりプログラミングができるようになるのは大変なんだぞってこと。
posted by Syuhei Hiya at 03:13| Comment(0) | TrackBack(0) | 日記
Powered by さくらのブログ