如何学习Mac编程?

chronos 发布于 2015年02月06日
tinyfool machinemxy 等2人欣赏。

@tinyfool 看了您在quora上回答的『为什么说程序员是最好的职业』,加上本来就想学编程(但是一直以来因为各种借口...到现在都还没开始学。。)。现在决心要行动了...买了台RMBP回来。

希望您给点建议...开始该如何学习...看到quora上您说,从阅读像Linux内核这样的大型开源软件代码开始学习编程是最不好的。怕自己随便开始学习很容易进入误区...所以很想得到您的建议。

希望看到这个帖子的大家都能给点建议^_^

共37条回复
ibuick 回复于 2015年02月06日

@tinyfool brought me here, I will give you some advices about programming on OS X.

In my opinion, programming on OS X is more easier than it is on iOS, because you have more choices on it.

OS X has five native APIs for you to write and build native apps, they are Carbon, Cocoa, Java, POSIX and X11.

1: First of all, OS X Kernel Programming mainly uses C, C++ (Embedded C++ for IOKit) and assembly language. In China, it is barely to see an OS X's kernel programmer because the Kernel programming has the most steep learning curve. Although OS X's kernel is open source, the lack of documents will be the biggest barrel on you way to be a kernel programmer. OS X has a special part called IOKit, this is a framework for hardware drivers. It is uses Embedded C++.

2: Carbon and Cocoa use C, C++, ObjC and Swift as the main programming languages. Most even all of the Apps you see on the Mac App Store and iOS App Store are based on them. I think you'd better start here. ObjC is good start for Object-Oriented Programming, as well as the Swift is the one of best language for you to learn Functional Programing. No matter which one you will choose, you can learn and get the most advanced programming experience with them.

3: POSIX, it is the abbreviations for Portable Operating System Interfaces. It is the de-facto standard for those Unix, Unix-like and Linux systems. It bases on C language APIs. If you want your program can be easily ported to those Pan-Unix OS, the POSIX is the best choice.

4: Java, oh fuck Java , Java sucked. As a more than ten years Java programmer, I beg you not to learn Java language. For native application, Java App has poor performance and ugly user interfaces. For web application, those apps based on Python and Ruby will kick your ass. For that famous Ad of Java "Write once, Run anywhere" is a piece of shit, actually we call it "Write once, fuck up anywhere". So, do not to be stupid, do not fuck around.

5: X11, it has something to do with X Windows, which is de-facto standard of GUI apps in the Pan-Unix OS. If you want your GUI app can be easily ported and running on Unix and Linux, you will use this.

6: Well, OS X is Unix, Unix is invincible, you can do what you wanna do on an Unix system, so you also can learn all kinds of programming languages on OS X.

7: Comments and Advice, star your leaning from ObjC or Swift, good luck.

@Tinyfool 点我来,我来说说我个人的看法,

首先,默认你的问题是如何学习 OS X 编程

OS X 编程我个人感觉比 iOS 要容易上手,特别是对于新手来说,更加自由,选择也更为多样。

OS X 自己就有五大编程框架,Carbon, Cocoa,Java,POSIX 和 X11,其中:

1: 一般来说,OS X 内核级别编程,使用三种语言,C C++ (Embedded C++ IOKIt) 和 汇编,这个跟以上编程框架中的 POSIX 有一定关系。这一块国内基本没有人做,国外不少,这部分的 OS X 是开源的,想学习这部分编程,那么就要从 C / C++ 开始,慢慢的看内核代码。这部分的缺点是文档少,资料少,优点是有源代码,你不会用一个 API 没关系,看 OS X 内核源代码总能找到。另外,这里还有一套特殊的东西,就是 IOKit,这个框架是 Embedded C++ 接口,用于编写驱动程序,如果你想要给 OS X 编写驱动,那么你要学这里。如果不想搞这块 (当然,这块学着苦,也没什么可预见的前途,除非你向我一样写书,没办法只能逼着自己看),你接着往下看。

2: Carbon,Cocoa 这两个可以使用,C, C++,Obj-C (AppleScript-ObjC) 和 Swift 四种语言,这些相信够你学一大阵的了。那么搞 Cocoa 学着写应用层的软件要好很多,这里主要就是 ObjC 和 Swift,当然你要用 C 我不拦着。你看到的 Mac App Store,iOS App Store 上的,都是这类,相对容易上手,也可以自己去卖钱,容易出成绩,也容易有成就感。这块儿的资料什么的太多了,一堆堆的。不过呢,Carbon 少用,一定要搞 Cocoa,Carbon 这东西不知道什么时候就被咔嚓了,但是有些时候你绕不开它。

3: POSIX,OS X 是一个标准的 UNIX 系统这个你知道吧,UNIX 系统的一个特点是都支持 POSIX API,这也是 OS X ,Linux 和 Unix 都能互相移植代码的原因所在。POSIX 就是一套 API 的集合,C 语言接口。OS X 上以 libSystem 库 也就是其他平台的 libc 为基础。实际上这套东西也是 Cocoa 的底层基础。如果你想要做跨平台的开发,那么学习 POSIX 再好不过,问题在于你要用 POSIX,你就要学 C,学 C ,你就要学指针,学了指针就等于进了坑,学好了还则罢了,学不好就完蛋了。C 这种东西,原子弹类型的语言,啥都能干,干啥都行,就是不好控制,跟 ObjC,Swift 这样的比,看着很土。学好了用处很大,你学完它基本上高级语言你看什么也都无所谓了,当然 C++ 除外,那是另一个噩梦,我至今也看不懂。

4: Java,怎么说呢,我虽然学 Java 出身,Tiny 好像也是,但是这东西我没啥好感,本地性能不行,做服务器端现在也能被 Python Ruby 等虐出翔。我实在不知道这个东西现在还有啥好。不要相信一次编译,到处运行这种鬼话,那都是骗鬼听的,真正形容 Java 的是,一次编译,处处不行。当然,这个东西也是有好处的,很多企业还就喜欢他,你要是找工作,这倒是个好选择,不过你记着,一板儿砖砸死10个程序员,9个半会写 Java。

5: X11,我也不太懂这里了,这个是跟 Unix,Linux 界的 X Window 环境有关,使用 X Window 的应用程序,Port 到 OS X 上,或者在 OS X 上开发基于 X Window 的程序,要用到它。比如你在 OS X 上给其他 Unix 和 Linux 开发 GUI 程序,就要用这个东西,不然你就要搞 QT,QT 是啥,别问我,问我我也疯。

6: 要知道 OS X 就是 Unix,Unix 是万能的,没有啥不能干的,除了以上的东西以外,Python,PHP,Ruby,JavaScript,C# (如果你想的话,这属于自虐一族) 什么都能行,什么都能写就看你喜欢了。

我个人给你的建议,学 ObjC,或 Swift,开始上手,理解编程,然后在 OS X 上慢慢开始写程序,慢慢练手。

chronos 回复于 2015年02月06日

1楼 @ibuick 非常感谢!

dark 回复于 2015年02月06日

1楼 @ibuick 对照了一下中文和英文,还是中文信息多啊!

ibuick 回复于 2015年02月06日

3楼 @dark 先用中文写的,英文就没心气儿了,,,以后直接先用英文写完,,中文就可以不写了。

chronos 回复于 2015年02月06日

4楼 @ibuick Wow...大别还用英文写了一遍!特别写Java那段,英文写出来的看起来比中文写的还好玩儿~

大别能不能给个SSLEdge的邀请码?(O_O)

Lucius_Chen 回复于 2015年02月06日

Java 找工作好找,但后续发展怎么样?我现在就在学 Java,本身是希望能够做 Web 前端开发。

tinyfool 回复于 2015年02月06日

1楼 @ibuick 赞,多答问题少扯淡,世界会更美妙

lionlee 回复于 2015年02月06日

楼长中文太差。。。

alexxxxxxx 回复于 2015年02月06日

@ibuick 非常感谢,受益匪浅

favoorr 回复于 2015年02月06日

6楼 @Lucius_Chen 后续你会发现自己慢慢变成了Full stack工程师,加油 :)

Lucius_Chen 回复于 2015年02月06日

10楼 @favoorr 谢谢,学 Java 的同时带着学点前端的。

nycoder 回复于 2015年02月06日

Java, oh fuck Java , Java sucked. 😂😂😂

lveyo 回复于 2015年02月06日

特地登录上来,来赞写JAVA那段英文!

otis 回复于 2015年02月06日

我也来回一下,因为我刚刚是去年6月开始学Mac开发,然后今年1月7号上架了一款Mac软件,并且也有一款自用的小软件和目前正在开发另一款。如果你是从objc开始,可以参考我下边的大概过程。

首先我觉得Mac开发入门不难,因为我才高中学历,然后因为是农村类的学校,英文很渣!我这样都可以学会,而且是半年就学会并上架了一款软件,所以说Mac开发入门并不难。当然也有可能是我有用过PHP和C#做过几年网站的原因,但是对于没有编程经验的人,我的渣英文和学历可以和编程经验相抵消。

然后说说我的学习过程。

一开始就是了解官方文档了,官方文档一定是最好的学习的地方,这点不用再说了。我是参考了tiny的苹果Xcode帮助文档阅读指南,看完这篇后,你应该就知道怎么用官方文档了。当然时不时看看会有特别的收获。

再就是看一些中文书。因为我英文不大好,所以要看中文书。我开始看的是: Objective-C 程序设计,大概看完并做一小些练习之后,就看 苹果开发之Cocoa编程 和 Objective-C高级编程-iOS与OS X多线程和内存管理 再加上 Effective Objective-C 2.0 - 编写高质量iOS和OS X代码的52个有效方法。 主要是看 苹果开发之Cocoa编程 这本,另外两本做参考一并理解,看完,做完练习后,算是小小入门了。如果还有不了解的地方,可能是我比较笨,一定要看视频才会有一些概念,所以我那时又看了iTunes里的 Developing iOS 7 Apps for iPhone and iPad 的个课程。因为我找不到Mac编程的视频课程,所以就看这过个了。当然也看了WWDC的一些自己有兴趣的视频。 觉得自己可以了之后,就可以规划一个自己想做的软件了。

我是规划好功能之后,然后分析所有技术难点,然后就用google, github找找看这些技术难点如何突破,同时也对所有技术难点,找出官方文档里的所有相关的文档,慢慢啃。大概是一边学,一边试。等你难点解决了,你的软件的功能也弄好了。有个软件是Dash,非常好用,比如说你要用到NSTableView,直接打进去,马上可以找到一些 Companion guides 和 Related sample code,算是神器了!

然后是软件上架(假如你要做小软件出来买的话)我现在有个经验就是要出免费+内购的,这样比较好积累用户。然后如果收费的,开始定价不要太高,比如说心理价格是RMB68,建议开始先定18,然后功能完善再定为68,这样的话,首先你的老用户会比较高兴,然后你的新用户也会比较满足。我的第一个软件因为直接定目标价格68,现在买的人好少,然后也不好降价了,因为这样的话买了的用户会不高兴了。

不知不觉得写了这么多,汗。。

Johnny_Z 回复于 2015年02月06日

感谢,正在寻找Mac编程入门资料~

tinyfool 回复于 2015年02月06日

14楼 @otis

lionlee 回复于 2015年02月06日
  1. @ibuick 大别写的很实在,懂就是懂,不懂就是不懂,赞一个态度!
  2. 说实话,在自学了 OC (早期朋友带入门大概两个月,到现在三年), Python (一年),Swift(发布后到现在) 后,然后顺带着看了些 Java 的东西,慢慢觉得大部分 language 其实差别没有我之前想象的那么大,当然我在这是和我们说的语言比,很多时候我会发现很多点都是通的,一门掌握好了,入门其他也很快,所以除了 PHP 这种很讨厌外,其他的我现在基本没有门第之间,不会就去查文档,然后慢慢写,搞清楚中间联系,触类旁通,用好 Dash ,感觉学习的进度快了很多!
  3. 如果现在有可能的话,尽量多写点 Swift ,最多两年后大部分第三方库跟上来了 OC 的一些 legacy 就没有那么重要了,当然还是有很多时候可以交叉。
  4. 认识到差别其实没那么大后,我觉得我不可战胜。。。反正需要什么就去学,现在正在每天花一个小时敲一些 Go 的东西,觉得很不错,之前看过一个朋友用 Excel 的函数写了一个游戏。。。
  5. 多背单词,多敲,多类比,要相信量变导致质变,渐进很重要,卡住了就停下来休息两天,多查,多怀疑,其实很多开源库都写得很烂,大部分情况下不要相信别人的 case 能解决你的问题,碰到自己解决不了的问题也可以多些邮件给你喜欢的开发者多 reach out ,bug 很常见,但你解决的方法和速度更重要,记得你不是一个人在战斗,不要陷入一个死循环跟自己死磕,写不出来就出去走走。
  6. 谢谢@tinyfool 老师这一年多以来的教诲,我学会了很多,尤其是方法论,写程序前我现在都用 Mindnote 写一个结构出来,拆解,估计出大概时间,一段时间后比自己预计的时间完成的速度和质量都好,真是赞。
  7. 最后,给那些刚入门的同学:不管是 Xcode 还是其他 IDE ,先把里面每一个按钮都多按几遍吧,常用的快捷键也记熟了,这上面的功夫千万不能偷懒,我见过一个朋友用了两年 Xcode ,突然问他一个调用,竟然不知道该按哪个 button !虽然有些平时用不到,但有时间就去试试,尤其是测试版下,有些东西会变,但你必须要以不变应万变,反正多试试那些 button 又不会死,对吧?
tinyfool 回复于 2015年02月06日

17楼 @lionlee

chronos 回复于 2015年02月06日

7楼 @tinyfool

感谢!把大神大别都找来了!

chronos 回复于 2015年02月06日

8楼 @lionlee 嗯嗯…在努力提高了:-D

chronos 回复于 2015年02月06日

14楼 @otis 感谢!都记下了^_^

chronos 回复于 2015年02月06日

17楼 @lionlee 感谢!谨遵教诲^_^

lionlee 回复于 2015年02月06日

22楼 @chronos 咱这就是分享交流,谈不上「教诲」😉,一起加油!

chronos 回复于 2015年02月06日

23楼 @lionlee 加油~加油(^_^)

yangjie6020 回复于 2015年02月06日

从学习Ruby开始

Ryannnnnnn 回复于 2015年02月07日

4楼 @ibuick Write once, fuck up anywhere 点赞~

hrong 回复于 2015年02月08日

谢谢。非常好的中肯的意见。mac 上我啥都不会,也得努力啦 哈哈

o麦圈o 回复于 2015年02月08日

正在看Cocoa Programming for Mac OS X第四版,快看完了,所有例子和练习都做了一遍。10.10的API还有新的Xcode改了不少地方,这样看到有问题的地方查文档,查Stackoverflow,遇到不明白的地方或者想知道更多的就读文档,(虽然这本书讲的还是非常明白的,但也不能涵盖所有相关内容)感觉还是不错的。这本书第五版快出了,如果是用swift写的到时候就快速过一遍。

chronos 回复于 2015年02月08日

28楼 @o麦圈o 感谢^_^

susoft2008 回复于 2015年02月09日

要不要这么经典,哈哈

"Write once, fuck up anywhere"

英文居然看懂了,2015年只做一件事:Englist

surrender 回复于 2015年02月09日

30楼 @susoft2008 Englist 我也是醉了。。。

lfzyx 回复于 2015年02月09日

4: Java, oh fuck Java , Java sucked. 这个没有中文?

zen1983 回复于 2015年02月10日

我也正在学Mac & Swift 编程!

此ID想了很久 回复于 2015年03月17日

嗯,学习了!

流星雨 回复于 2015年03月18日

虽然自己也写程序好多年,但看几位的话,仍受益。

lovecows 回复于 2015年03月25日

学习学习,受益匪浅

kidd1990 回复于 2015年03月27日

1楼 @ibuick 卧槽....大别叔的神回复啊...涨姿势了..

本帖有37个回复,因为您没有注册或者登录本站,所以,只能看到本帖的10条回复。如果想看到全部回复,请注册或者登录本站。

登录 或者 注册
相关帖子

[顶 楼]
|
|
[底 楼]
|
|
[首 页]