Я, наверное, как и многие программисты, редко пишу программы, используя API/фреймворки, в которых разбираюсь. Я ничего не знал про MSHTML (визуальный редактор) и совершенно не разбирался в API блог-движков, когда писал BlogJet. Mémoires я изначально писал, чтобы разобраться с Core Data. Никогда до этого я не делал календарь. Я никогда не общался с YouTube API и никогда не работал с QTKit до написания Cathodique. Я никогда заранее не знаю, в каком формате сохранять результат, не знаю какой будет интерфейс. Есть только идея и примерное представление, как все должно работать, но никогда нет четкого плана, потому что его невозможно сделать, не зная деталей. А детали узнать можно только погрузившись в код. Каждый раз я — новичок, и каждый раз я учусь новым вещам программируя.

Сейчас-то я бы спокойно мог написать еще один блог-клиент, еще одну программу для ведения дневника и т.п., и мой код был бы красивым и правильным. Но второй раз случается редко.

К чему я? К тому, что есть языки программирования, которые хорошо подходят для первого раза, и есть такие, с которыми в первый раз сложно. Последних приходится постоянно обманывать (не добавлю пока этот метод в interface; обойдусь без отдельного класса; не буду создавать отдельный тип, обойдусь пока строками; …), потому что они создают преграды на пути ковыряния. Они — языки-бюрократы. Хорошие и неленивые программисты, работая с такими языками, после ковыряния удалят все, что написали, и перепишут заново: красиво и правильно. Я же программист ленивый — я в школе сочинения писал сразу на чистовик — поэтому как только код работает, я его не трогаю. Некогда переписывать, мне надо срочно приниматься за другую задачу, пока есть энтузиазм писать именно эту программу.

Поэтому я люблю языки для первого раза. Python, например. Или Ruby. Или любой другой язык, в котором не нужно долго запрягать, чтобы ехать.

И поэтому я больше не люблю тебя, Objective-C.

Продолжение следует. А пока я его пишу, изучите exploratory programming.