プログラマ行進曲第二章

主にソフトウェア関連の技術をネタにした記事を執筆するためのブログ

iOSプログラミングの勉強をしているのですが、こっそりと…

今やっている勉強メモとか貼り付けておきます。

上記リンク先はQiitaの限定共有です。勉強しているネタ元は以下の書籍。

iOS Programming: The Big Nerd Ranch Guide (4th Edition) (Big Nerd Ranch Guides)

iOS Programming: The Big Nerd Ranch Guide (4th Edition) (Big Nerd Ranch Guides)

なんで限定共有でやっているかというと…

  • 勉強途中で書き途中だから
  • それ以上に本の中身の記述をそのまま書いている箇所が多いため、公開で投稿してるとアウトだと思っているから

じゃあ何で今回記事にしているかというと、今はこういうこと勉強してます!というアピールしたいから。

なので、ある程度時間が経過したらリンクをサクッと削除すると思います。

こうやってブログ更新しておかないと勉強しているのに何もやってないように外からは見えるだろうからです。

無職は辛い!!仕事したい!!

Xcodeにプラグインを導入してみた

最近iOSプログラミングもちょびちょびと勉強しているわけですが、iOSプログラミングする際に使うXcodeにそろそろプラグイン導入して楽したいなと思い始めてみたので、軽く調べてみました。

ここら辺を見ると「何をすればプラグインを導入できるか」「どういう風に役立つプラグインがあるか」といったことが一望できるので、まずはここら辺から始めてみるといいかと思いました。

プラグイン入れすぎるとXcodeが重くなるのかどうかは知りません。

最初に何を入れればいいか分からないという人は、Xcode5に対応したパッケージマネージャのAlcatrazとコード補完を強化するプラグインFuzzyAutocompletePluginを入れてみるといいと思います。

前者を入れてしまえば後はメニューからプラグインを管理できるだけでなく、どんなプラグインがあるのか概観できるし、後者はコード補完がデフォルトより融通が利くようになるので導入直後から便利さを感じ取れると思うのでお勧めです。

幾度となくiOSプログラミングに挑戦してその度に挫折して思うこと

アプリ作ってリリースするまでの道のり遠すぎだろ

もうこの一言ですむんですが、それだけだとブログ書いている意味がないので日付が変わる前にザラっと書くのに挑戦してみます。

去年の年末近くの記事にも書きましたが、下に載せる本を使ってまたiOSプログラミングを再開したんですね。

もう何度目の挑戦になるのかよく分からないんですが、挑戦した数は多分5回くらいは超えていると思います。

で、毎回その度に挫折するわけです。

そもそも目標を持って新しいことを始めた後、その目標を達成すること自体が難しいと言えば難しいし稀なことなのかもしれませんが、それにしたって躓きすぎだろうと前から思っていたわけですよ。

今回は上の書籍に書いてあるコードを写経してビルドして動かす、という手順で勉強しているんですが、iOSプログラミング(というかスマホ関連のプログラミング)の躓きがどういった原因で発生するのか、何となく考えたことがあるのでアウトプットして頭の中を整理したくなりました。

考えた原因を列挙

日付が変わる前に更新しよう、そういう制限かけたので尻切れトンボにならないように、思いついた原因だけザッと列挙してみます。

  • Objective-Cが分かっただけではアプリの形にならない
    • 多分最大の原因
    • 初心者はObjective-Cにだけ躓くのではなくて「Xcodeの使い方」「イベント駆動の概念」「iOSプログラミングする際のお作法」といった複数の箇所で躓く
    • で、初心者は初心者だからこれらの躓きの違いが区別できず、頭の中で整理がつかないことが多い(少なくとも私は)
  • 「実現したいこと」と「自分に可能なこと」のバランスを取って実装するのが難しい
    • サンプルコードは理解できて自分で書けても、自分がやりたいことを実現するにはどうしたらいいか分からなかったり、あるいは実現したいことが壮大すぎて自分の実装力では実現できない事態に陥る
    • 別にiOSとかスマートフォン関係のプログラミングに限らない事だと思うが、参入者多いから挙げておく
  • プログラミング != アプリリリース
    • 中途半端にプログラミングを知っている人の場合(私とか)、内部のプログラミングに凝り出して、アプリを完成させることよりもコードを書く方に目がいってしまう
    • …と書いたが、別にこれ、スマホの話しに限らないですね。
  • もはや世の中には便利なアプリがたくさん既に存在する
    • いざ自分で作ろうと思ったら、だいたい自分の欲しいものは既にアプリが出てたりしたり。
    • よりニッチなものとかシンプルなものを作れば需要がある場合もあるが、その場合「不必要なものを捨てる・省く力」が必要なので、初心者が実践するには厳しい場合が多い

…別にiOSとかスマートフォン特有の原因じゃなくてどこでも出てくる話ばっかりになってしまいましたが、とりあえず罠が多いということですよ!

残り1分切ったのでココまでにします!

"iPhone Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)"でプログラミング再開!

全てはタイトルに書いたとおりです。この本を使ってプログラミングを久しぶりに行っています。

iPhone Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)

iPhone Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)

何でプログラミングを再開したかというと、やったのはちょっと前になるんですが、使っているパソコンのOSをSnow Leopardにアップグレードして開発環境を整えられるようになったから「よし、それじゃやってみるかな?」という気が向いてきたためです。環境は重要なんですよ。環境は重要なんです。大切なので二度言いました。

技術書であることと教育プログラムから発した本であることが要因なのか、英語であっても平易に読めるのがいいですね。しかもわかりやすい! やり始めと言うことも手伝い、モチベーションが上がっております。

で、最終的な目標はAppStoreにアプリを出す!というところなのですが、まだまだ道は遠そうです。

え?何のアプリを出すのかって? それは秘密!…にすることもないのですが、モチベーション維持のため言わないでおいておきます(←誰もそんなことは聞いていない、というツッコミ希望!)

ヒント:このブログ

『iPhone SDKの教科書』学習日記 その2

今日も今日とて、大して書く事がないな〜なんて思いつつ、更新を致します。

本日は『iPhone SDKの教科書』を使ったiPhoneプログラミングの学習の第2回目です。

iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩

iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩

今回は前回と違い、ほとんど学習が進まず、p211からp226間でしか進みませんでした。しかもコンパイルエラーが出て、しかも原因が分からず立ち往生!

何がミスしているのか自分でもよくわかっていなく未だに原因不明なので、ここにソースコードでもコピペしてみて、明日冷静な頭になってから見直す事にしようと思います。

SmashViewController.h

#import <UIKit/UIKit.h>

@interface SmashViewController : UIViewController {
	IBOutlet UIButton *target; // 目標(UFO)
}

- (IBAction)smash; // UFOがタッチされた時
- (void)move:(NSTimer *)timer; // タイマーから呼び出される

@end

SmashViewController.m

#import "SmashViewController.h"

@implementation SmashViewController



/*
// The designated initializer. Override to perform setup that is required before the view is loaded.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        // Custom initialization
    }
    return self;
}
*/

/*
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
}
*/



// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
// ビューの読み込みが完了したときに呼び出されるメソッド
- (void)viewDidLoad {
    [super viewDidLoad];
	
	// 乱数の初期化
	srand(time(NULL));
	
	// タイマーの作成(動作開始)
	[NSTimer scheduledTimerWithTimeInterval:0.5 // 時間間隔(秒)
				         target:self // 呼び出すオブジェクト
				       selector:@selector(move:) // 呼び出すメソッド
                                       userInfo:nil // ユーザ利用の情報オブジェクト
                                        repeats:YES]; // 繰り返し
}

- (void)move:(NSTimer *)timer {
	// タイマー動作時の処理
	
	// UFOを移動
	int x = rand() % 320;
	int y = rand() % 480;
	target.center = CGPointMake(x, y);
}

/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
    // Release anything that's not essential, such as cached data
}


- (void)dealloc {
    [super dealloc];
}

@end

SmashViewController.mファイル内の

	[NSTimer scheduledTimerWithTimeInterval:0.5 // 時間間隔(秒)
				         target:self // 呼び出すオブジェクト
				       selector:@selector(move:) // 呼び出すメソッド
                                       userInfo:nil // ユーザ利用の情報オブジェクト
                                        repeats:YES]; // 繰り返し

のところ、より具体的には"@selector(move:)"のところでエラーが出ているんですよね。

まあ、クールダウンしたらエラー原因を解いてみて、進んでみようという感じです。

『iPhone SDKの教科書』学習日記 その1

今日はアルバイトの書類提出やら色々と社会生活復帰に向けて動いていた関係で(何もないときと比べて)あまり自由な時間がない中、以前軽く紹介した『iPhone SDKの教科書』を使ってiPhoneアプリ開発の学習をしました。

iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩

iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩

この本を読んだのは2日くらい前からで、今日でp211(※全p375)まで読み終わり、その範囲で課題になっているアプリケーションを自分で実装しました。と言っても最初の方は流し読みですので、それほど大変ではなかったかなというのが正直な印象です。

今日学習してきた事の中で何となく気づいた事でもメモしておきます。

【本日の学習成果】

  • アプリを開発するときは「小さくても良いから完結したアプリを作ること」を優先する方が良い。少なくとも、経験の浅い個人レベルではそうした方が良いというのが私の考え。
  • アプリ開発には「アプリ開発に関する技術力」ももちろん大切だが、それと同じくらいに「どんなアプリを作るかという青写真がどれだけはっきりとしているか?」という点もかなり重要である。

iPhoneアプリ、作ってやるぜ!(と息巻く)

いつもの如く散歩して、本屋に立ち寄り、こんな本を買って、「さあ、またプログラミングをしてやるぜ!」と息巻いています。この状態もいつまで続くでしょうか? 本人も謎です。

iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩

iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩

何となく今まで出版されていたiPhoneプログラミングの書籍と違い、「iPhoneプログラミングの仕方を教える」というよりも「イメージしているiPhoneアプリをどうやって形にするか?」というところを重視しているような気がして、今の自分が求めているものに近いかな〜って思って衝動買いしてしまいましたよ。

飽きるまで、ちょっとアプリ開発に挑戦してみようと思います。