2015年10月18日

学校英語とプログラミングは学習方法が似ている

「学校で習う英語」の成績がよかった人ってプログラマーには向いてるだろうなーと思うのです。

@文法をおぼえて

A単語を覚えて

B文章の意味をくみ上げたり文章を書く

ってで、個人差で限度はあれど学校英語は普通に成績を上げられます。
プログラム言語も「学校の英語」と同様、

@文法をおぼえて

A基礎的な命令文やできあいのごにょごにょを覚えて

B他人の書いたプログラムの意図を読みとったり自分でプログラムを書く

という全く似た基礎学習があります。
ここで重要なのは「習ったことに疑問を覚えずにそのまま為す」ってこと。
プログラム言語を習う人にありがちなのは「どうしてこの文法ははこうなの?」という疑問を覚えてつまづく人がいるのですが、そうなるように作った人がいるからそうなるだけ、としかいえない。
あたりまえですが言葉だって人が作ったもので、人がそうルールを決めてそのルールに従って長年使ってきたんだからそういうもんだとしかいえない。
考えなくていいところで立ち止まって時間を無駄にするくらいなら「さっさと何か作れや」ってな話で。
「ここがよくないとかいうのは人前に出せるもん作ってからにしろや、ひよっこめ」とも言いたくなります(笑)
(C言語でポインタとかで「イメージがつかめなくて」ひっかかる人がいますが、教科書やサンプルにあるものをルールどおりにやればとりあえず動くんですよ。考える前にやってみよーぜってなわけで)

ルール(文法)を守ってそれを繰り返して繰り返して、できることの幅を増やしていくことがプログラミングのオーソドックスな上達法なわけで、それは学校英語の成績をあげるのと似ていると思います。
そこに余計な詮索やオリジナリティは要りません。
僕は情けないことに英会話はできず、学校英語で学んだことは受験と大学内でしか使う機会がここ最近まではなかったのですが、ただ今になってみるとその学習姿勢の基礎があったから全く無縁だったプログラミング言語を独学で使えるようになったのかなと今では思います。(大学での専攻は乱暴に言えばマクロ生物学です)

ここ最近までは……と書きましたが、今は逆に英語の基礎程度の読み書きができないとプログラマーの仕事はできなくなってくるのかもしれません。
わからない技術、ほしい技術があっても、日本語の文献や検索結果がない技術のほうがまだまだ多いからです、、、、、、っていうか日本語で解説されてるのなんて一部に過ぎません。
日進月歩でどんどん効率的に広範囲に使える技術が増えていく昨今です。
ますますそうなっていくでしょう。
また外国人とやり取りする際は絶対英語です。(どんな仕事でも外国人とやりとりできる手を持たないとこれからは厳しいでしょうけど(^^;))
読み書きだけに特化した教育も無駄ではなかったと痛感する今日この頃、37歳の秋です。

posted by B.cos at 22:18| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2015年10月04日

【cocos2d-x】なぜか「assets」ディレクトリが消えた件

メモとして。

cocos2d-x 3.7。

Eclipseでプロジェクトをクリーンしたときは「assets」はちゃんとあった。

実機でテストをしたら画像を読み込む段階で

「assets is nullptr」

と出て実行時エラーで強制終了。

よくみるとプロジェクト内にあった「assets」ディレクトリがない。

あれ?

クリーンをするとまた「assets」は生成される、が、実機テストすると消える。

????

Eclipse再起動してからまたクリーン、実機テストしたら今度は消えなかった。

なんだったんだろ?

posted by B.cos at 14:23| Comment(0) | TrackBack(0) | cocos2d-x | このブログの読者になる | 更新情報をチェックする

【cocos2d-x】runActionに渡すActionインスタンスをシーンクラスのメンバーにしたらアプリが落ちた件(Android)

cocos2d-x 3.7において。

たとえば画面外に置いたSpriteのインスタンスを画面内に引き出して、しばらくしてまた引っ込めるというのをやるときは、よくあるサンプルプログラムではActionのサブクラスを使ってこんな感じで組むと思います。


〜GameScene.cpp〜
bool GameScene::init()
{
〜略〜


}
bool GameScene::onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event)
{
auto _move1 = EaseOut::create(MoveBy::create(2.0f, Vec2(64.0f, 0.0f)),4);
auto _move2 = DelayTime::create(2.0f);//MoveBy::create(2, Vec2(0.0f, 0.0f));
auto _move3 = EaseIn::create(MoveBy::create(2.0f, Vec2(-64.0f/2, 0.0f)),4);
auto m_moveSequence = Sequence::create(_move1, _move2, _move3, nullptr);
_obj->runAction(m_moveSequence);//_objは初期化済みのSprite等
return true;
}


これでうまくいきます。

ただ僕はここでSequenceのインスタンスをシーン内で共有して使えないかと、GameSceneクラスのメンバ変数にしてみました。


〜GameScene.h〜
public:
Sequence *m_moveSequence;

〜GameScene.cpp〜
bool GameScene::init()
{
〜略〜
auto _move1 = EaseOut::create(MoveBy::create(2.0f, Vec2(64.0f, 0.0f)),4);
auto _move2 = DelayTime::create(2.0f);//MoveBy::create(2, Vec2(0.0f, 0.0f));
auto _move3 = EaseIn::create(MoveBy::create(2.0f, Vec2(-64.0f/2, 0.0f)),4);
m_moveSequence = Sequence::create(_move1, _move2, _move3, nullptr);
}

bool GameScene::onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event)
{
_obj->runAction(m_moveSequence);//_objは初期化済みのSprite等
return true;
}


これをやったらタッチイベント起こした瞬間に落ちました(笑)

よくわからないけれどcocos2d-xの内部まで追う気力も今のところないので、そういう仕様だと思ってローカルで必要な時にActionを生成して動かすのがあまり時間を食わないで済みそうです。

cocos2d-xは本当にわからないことだらけで、たとえば「自分独自のシーンクラスをつくってそれをスーパークラスにしてぐへへへへへw」とやろうとしてことが過去にありまして。
結果としてよくわからない実行時エラーで落ちて動かず、むしろ「そのまま使った方が楽じゃね?」と悩まされた時期もありました。
人の作ったプラットフォームで便利なのはあるのですが、独学のなんちゃってプログラマーとはいえそろそろ20年選手、もっとうまく(頭を)使えないかなあーとか考える今日この頃でした。
posted by B.cos at 14:13| Comment(0) | TrackBack(0) | cocos2d-x | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。