Сначала изучите C перед обучением Objective-C

Будучи устремленным разработчиком Apple, я хочу получить мнение сообщества, если лучше сначала изучить C, прежде чем перейти в Objective-C и в конечном итоге Cocoa Framework?

Моя кишка говорит, что учится C, что даст мне хорошую основу.

Ответ 1

Сначала я научился C. Я изучил C (и много сделал на C), прежде чем переехать в Obj-C. У меня есть много коллег, которые никогда не были настоящими программистами на C, они начали с Obj-C и изучали только столько C, сколько необходимо.

Время от времени я вижу, как они полностью решают проблему в Obj-C, иногда приводя к очень неуклюжим решениям. Обычно я заменяю некоторый код Obj-C чистым C-кодом (ведь вы можете смешивать их столько, сколько хотите, содержимое Obj-C-метода может быть полностью, чистым C-кодом). Без намерения оскорблять любого программиста Obj-C есть решения, которые очень элегантны в Obj-C, это решения, которые просто работают (и выглядят) намного лучше благодаря объектам (программирование ООП может сделать сложные программы намного более прекрасными, чем функциональное программирование, например, полиморфизм) - и мне очень нравится Obj-C (гораздо больше, чем С++! Я ненавижу синтаксис С++, а некоторые особенности языка - это излишний перебор и приводят к неправильным шаблонам развития IMHO); однако, когда я иногда переписываю код Obj-C моих коллег (и я действительно это делаю, если я думаю, что это абсолютно необходимо), полученный код обычно на 50% меньше, ему требуется только 25% используемой памяти до и примерно на 400% быстрее во время выполнения.

То, что я пытаюсь сказать здесь: у каждого языка есть свои плюсы и минусы. C имеет свои плюсы и минусы, а также Obj-C. Тем не менее, действительно замечательная особенность Obj-C (то, почему мне даже нравится больше, чем Java), заключается в том, что вы можете перейти на обычный C по желанию и обратно. Почему это такая замечательная особенность? Так как Obj-C фиксирует многие недостатки чистого C, чистый C может исправить некоторые из недостатков Obj-C. Если вы их смешиваете, вы получите очень сильную команду.

Если вы изучаете Obj-C и не имеете представления о C или знаете только его основы и никогда не пробовали, как изящно он может решить некоторые общие проблемы, вы на самом деле узнали только половину Obj-C. C является фундаментальной частью Obj-C. Способность использовать C в любое время и во всем мире является фундаментальной особенностью этого.

Типичным примером был некоторый код, который мы использовали, который должен был кодировать данные в base64, но мы не могли использовать для этого внешнюю библиотеку (без OpenSSL lib). Мы использовали кодировщик base64, полностью написанный с использованием классов Cocoa. Это работало нормально, но когда мы делали это кодирование 200 МБ двоичных данных, это заняло целую вечность, а накладные расходы памяти были неприемлемы. Я заменил его крошечным, ультракомпактным кодировщиком base64, написанным полностью как одна функция C (я скопировал тело функции в тело метода, метод взял NSData как входной сигнал и вернул NSString в качестве вывода, однако внутри функции все было C). Кодер C был гораздо более компактным, он бил чистым кодировщиком Cocoa по частоте 8 по скорости, а издержки памяти также были намного меньше. Данные кодирования/декодирования, играющие с битами и аналогичными задачами низкого уровня, - это только сильные точки C.

Другим примером был некоторый код пользовательского интерфейса, который рисовал много графиков. Для хранения данных, необходимых для рисования графиков, мы использовали NSArray's. На самом деле NSMutableArray's, так как график был анимирован. Результат: очень медленная анимация графика. Мы заменили все NSArray на обычные C-массивы, объекты с structs (после того, как вся информация о координатах графа ничего не должна иметь в объектах), доступ перечислителя с простыми для циклов и начал перемещать данные между массивами с memcopy вместо того, чтобы брать данные из одного массива в другой - индекс индекса. Результат: ускорение по коэффициенту 4. График анимирован плавно, даже на старых системах PPC.

Слабость C заключается в том, что все более сложная программа становится уродливой в долгосрочной перспективе. Сохранение C-приложений, читаемых, расширяемых и управляемых, требует много дисциплины программиста. Многие проекты терпят неудачу, потому что эта дисциплина отсутствует. Obj-C упрощает структурирование вашего приложения с использованием классов, наследования, протоколов и т.д. Тем не менее, я бы не использовал чистую функциональность C через границы метода, если это не было необходимо. Я предпочитаю хранить весь код в приложении Objective-C в методе объекта; все остальное поражает цель приложения OO. Однако в рамках метода я иногда использую исключительно C.

Ответ 2

Вы можете легко изучить C и Objective-C в то же время - нет необходимости изучать мелодии C (включая арифметику указателей и т.д.), прежде чем начинать с Objective-C дополнений к языку и как начинающий программист, начинающий с Objective-C быстро, может помочь вам быстрее начать "мышление в объектах".

С точки зрения доступных ресурсов документация Apple обычно предполагает знакомство с C, поэтому, начиная с Язык программирования Objective-C 2.0, Это принесет вам большую пользу. Я бы инвестировал в копию программирования в Objective-C Стивена Кочана (в зависимости от того, как быстро вы хотите начать, вы можете подумать о том, чтобы ждать второго издания):

Программирование Objective-C Библиотека разработчиков Программирование Objective-C 2.0 Библиотека разработчиков

Он не предполагает никакого предшествующего опыта и учит вас Objective-C и столько же C, сколько вам нужно.

Если вы чувствуете себя немного амбициозным, вы можете начать с Скотта Стивенсона "Учиться C" , но у него есть некоторые предпосылки ( "Вы уже должны знать хотя бы один сценарий или язык программирования, включая функции, переменные и циклы. Вам также нужно будет вводить команды в терминал Mac OS X" .).

(Только для записи и для контекста: я узнал об этом одновременно в 1991 году - это, похоже, не причинило мне никакого вреда. Однако у меня был опыт работы в BASIC, Pascal, Logo, и LISP.)

Ответ 3

Я много думал об этом, прежде чем писать свою книгу на Objective-C. Во-первых, я действительно считаю, что изучение языка C до обучения Objective-C является неправильным путем. C - это процедурный язык, содержащий множество функций, которые не нужны для программирования в Objective-C, особенно на уровне новичков. Фактически, использование некоторых из этих функций идет вразрез с тем, чтобы придерживаться хорошей методологии объектно-ориентированного программирования. Не рекомендуется также преподавать все детали процедурного языка (и атаковать решение проблемы с помощью функций и методов структурированного программирования) до изучения объектно-ориентированного. Это может привести к тому, что программист выключится в неправильном направлении, что потенциально может привести к неправильной ориентации и мышлению для создания хорошей объектно-ориентированной дисциплины программирования. Просто потому, что Objective-C является расширением языка C, это не значит, что вы должны сначала изучить C!

Я считаю, что преподавание Objective-C и базовый язык C как единый интегрированный язык - правильный подход. Нет никаких оснований для того, чтобы узнать, что выражение "для" относится к языку C, а не к его надмножеству Objective-C. Кроме того, зачем детально изучать такие вещи, как C массивы и строки (и манипулировать ими), прежде чем изучать массив (NSArray) и строковые объекты (NSString), например? Многие тексты C посвящают много времени структурам, указателям на структуры и повторению массивов с помощью указателей. Но вы можете начать писать программы Objective-C, не зная о каких-либо из этих функций языка C. А для начинающего программиста это очень важно. Это не только сокращает кривую обучения, но и уменьшает количество материала, который необходимо изучить (и некоторые из них выборочно отфильтровываются) для написания программ Objective-C.

Я согласен с тем, что вы захотите узнать больше, если не все, о базовых функциях C, но многие могут быть отложены до тех пор, пока не будет твердое определение классов и методов, работа с объектами и выражениями сообщений и понимание понятий наследования и полиморфизма хорошо поняты.

Ответ 4

Я бы погрузился прямо в Objective C - если у вас уже есть несколько языков под вашим поясом, это не синтаксис, который является кривой обучения, а Cocoa.

Ответ 5

Я думаю, что, по большей части, обучение C - хорошая идея независимо от того, на какой арене вы входите, по крайней мере, чтобы разглядеть внутреннюю работу разработки программного обеспечения, прежде чем использовать расфасованные товары, таким образом, если что-то пошло не так, у вас есть больше шансов понять внутреннюю работу. Там много дискуссий об этом на SO, и это довольно субъективный вопрос, но в целом вы по сути используете C в своем коде Objective-C, поэтому я думаю, это действительно зависит от вас. Я как бы человек, но иногда это может мешать, и я знаю нескольких умных людей, которые пробирались сверху вниз, я думаю, что важная часть состоит в том, что вы понимаете внутреннюю работу, как это будет установите свои возможности, кроме тех, кто не так хорошо, как увеличит ваши возможности.

Ответ 6

Хорошая идея изучить C перед изучением Objective-C, который является строгим надмножеством C. Это означает, что Objective-C может поддерживать все нормальные C-коды, поэтому код, общий для программ C, обязательно будет отображаться даже в коде Objective-C.

В дополнение к тому, чтобы смотреть на вещи исключительно с точки зрения языка, вы обнаружите, что Mac OS X является полной операционной системой Unix. Все библиотеки системного уровня написаны на C.

Возможно, возможно изучить оба одновременно, но я думаю, что вы оцените и поймете Objective-C больше, если у вас есть твердое знание C в первую очередь.

Ответ 7

Я бы узнал Objective-C и узнал столько C, сколько вам нужно, когда вы идете вперед.

Области C, от которых вы не будете сильно зависеть:

  • Арифметика указателей и массивы. Я вообще не использовал C-массивы. Строки
  • C. Строки Objective-C делают работу лучше и безопаснее.
  • Ручное управление памятью, если вы используете GC в Obj-C 2.1. Я настоятельно рекомендую этот маршрут для развития скорости и производительности.

Ответ 8

Когда вы изучаете Objective-C и Cocoa, вы не можете избежать изучения битов C. Например, прямоугольники являются общими, представленными CGRect, C struct.

Если у вас есть время, во что бы то ни стало научитесь C. Как говорили другие, книга Кочана (второе и первое издание) превосходна, как книга, в которую можно погрузиться.

Ответ 9

Есть много вещей, которые вы не можете делать чисто в Objective-C, поэтому изучение некоторых базовых навыков C будет довольно критичным. Вам, по крайней мере, нужно будет понять объявления переменных и основные функции библиотеки C, иначе вы будете разочарованы.

Ответ 10

Лучше, я не знаю, еще меньше, поскольку я не знаком с Objective-C.
Но основы C не так усердны, но это не очень сложный язык (с точки зрения синтаксиса, а не с точки зрения овладения!), Поэтому идите на это, это не будет потрачено впустую. Лично я считаю, что всегда полезно учиться C, это дает хорошее представление о том, как работает компьютер. В конце концов, большинство языков и систем все еще написаны на C. Затем двигайтесь дальше!: -)

PS: "Двигайтесь дальше", я не имел в виду "бросить", просто "узнать больше, узнать по-другому". Как только вы знаете C, вы никогда не сможете его отбросить: Java использует JNI для вызова подпрограмм C для низкоуровневых материалов, Python, Lua и т.д. Часто расширяются с помощью C-кода (ссылка Lua даже предполагает, что некоторые знания C для некоторых функций, которые просто тонкая обертка для функции С позади) и т.д.

Ответ 11

Честно говоря, так много языков основано на синтаксисе С, что хорошо знать. Я бы взял неделю или две, чтобы познакомиться с C независимо.

Тем не менее, я просто научил себя Objective C, и я должен быть честным: я не нашел свой опыт C таким же полезным, как я мог бы подумать. Цель C определенно была для меня открыта.

Ответ 12

Вы можете перейти непосредственно в Objective-C со следующими преимуществами:

  • Вы узнаете "некоторые" C на пути.
  • Вы узнаете те части, которые вам важны.

По крайней мере, для меня легче освоить новый язык, когда меня интересует какое-то конкретное приложение или образец, и я терплю неудачу, когда мне нужно узнать другое, что не совсем то, что меня интересует.

Вы можете всегда уточнять свои знания C позже, если вы заинтересованы в программировании более низкого уровня.

Ответ 13

Да, изучение языка C перед любыми другими передовыми языками поможет вам изучить quiklky другие langauges.

Ответ 14

Согласно Wikipedia, Objective-C является строгим супер-множеством C. В этом случае я бы предложил изучить C первый. Затем, когда вы узнаете Objective-C, будет ясно, какие части добавлены как часть Objective-C.

Ответ 15

C дает вам очень мало абстракции от сборки. Некоторые компиляторы C даже позволят вам встроенную сборку. Это может быть очень полезно для размышления о том, как работает компьютер, что важно знать.

Говоря, если вы действительно заинтересованы в Object-C, не позволяйте себе застревать в чем-то на C, потому что это "хорошо для вас". Вам не нужно расстраивать себя, пока вы пытаетесь изучить новый набор навыков. Важно, чтобы вам было весело с тем, что вы делаете.

Ответ 16

Вы хотите стать разработчиком жесткого ядра? Затем изучите c первым.

Книги, которые вам нужно полностью освоить, являются одними из лучших работ в области технологий. Вот что вам нужно:

Язык программирования C

Стандартная библиотека C

Ответ 17

Цель C достаточно отличается от C, чтобы не заслуживать сначала обучение C.

С точки зрения синтаксиса/языка-семьи почти лучше изучать SmallTalk (на котором основана цель C)

С практической точки зрения сосредоточьте свои усилия на изучении одного языка за раз.

Позже, если вы хотите изучить другой язык, С++, Java и Python 1) легко узнать как кучу 2) популярные и, следовательно, товарные 3) мощные.

Ответ 18

У вас должно быть базовое знание C перед запуском Objective_C, но нет необходимости осваивать каждую деталь C.

Я опубликовал свои заметки после прочтения "Программирование в Objective-C", если он помогает кому-то другому.

узнать цель c с помощью программирования -

Ответ 19

В зависимости от многих языков, которые вы уже знаете, может быть лучше всего начать обучение Objective-C. Основа в большинстве языков в основном одинакова, это синтаксис, который отличается. Обучение C сначала не будет иметь особого значения, когда дело доходит до обучения Objective-C.

Ответ 20

Я сразу узнал Objective-C, и он работал нормально около года, мне просто трудно было прочитать код C, когда я загрузил проект, чтобы посмотреть, как они работают, но теперь я действительно чувствую необходимость изучать C. You может попробовать изучить ObjC без C, но рано или поздно вам понадобится C.

Ответ 21

ИМХО следует сначала изучить хотя бы некоторые С и особенно о указателях. Это еще более важно, если человек приходит с языка, который не имеет указателей. Многие люди спрашивают о коде вроде

NSString *string = [[NSString alloc] init];
string = @"something";

поскольку они не знают о различии между указателем и объектом, на который он указывает.

Конечно, не нужно изучать все C, прежде чем начать с Objective-C, но некоторые фундаментальные вещи абсолютно необходимы.

Ответ 22

Нет, переходите к объективному C!

Я перешел с ActionScript 3 на Objective C, и у меня уже есть стажер в компании!

Сделайте то, что хотите.

Ответ 23

Если вы изучите какой-либо другой язык ранее, тогда у вас всегда будет путаница при написании правильного синтаксиса. Я не знаю цели, но Object C использует странный (не общий) синтаксис для вызова методов объекта. Он называет его отправкой сообщений, да, это, соответственно, чистая объектно-ориентированная концепция, однако большинство объектно-ориентированных языков называют это как метод вызова и используют более традиционный синтаксис методов вызова. Сбор мусора также является чем-то очень странным, Object C основан на старом отсчете числа школ. Таким образом, вам будет сложно принять его, если вы переключитесь с другого языка. Я пишу книгу быстрого руководства по быстрой миграции для программистов на C/С++, надеясь помочь людям быстрее подобрать все различия.