编程语言是什么?
我理解编程语言就是一种让计算机工作一种工具。在C中有些语法是写给程序员看的,而不是对于机器来讲并没有什么区别。怎么来证明这个观点?把C代码转换为汇编语言。
比如:static关键字。使用static修饰过的函数,其实和没有修饰过的两样,仅仅是是表示当前源文件可见。汇编语言没有具体显示static函数与默认函数的区别。还有指针。指针也仅仅是C语言层面的东西而不是汇编语言有任何的表示。指针变量的类型int,float和char,汇编语言中紧紧表示长度。
所以编程语言更多是的程序员让计算机运行的工具。编程语言包括两个方面,一个是人可以读懂有利于人的编写,然后就是表达最基本的计算机运行逻辑。
对Objective-C的希望
我在一开始学习它的时候,就抱着规避项目经验的心态。我当时对比过C++和Java,发现都是太需要项目经验了。我看过C++编程思想上的一段话,阐述C++设计的理念。书中说到,当有一个项目需要交给你做的时候,你是使用C语言好好写完,还是使用一门语言快速完工即便是有些性能损失。C++对于项目来讲更多的是完成大于完美。包括Java在内,我会对这些语言产生一个疑问。Java中的类究竟是什么东西,能不能真正理解到这个概念还是仅仅为了编程而编程。
在Objective-C我感受到了真的,不需要项目经验。对于Objective-C掌握的程度和项目经验没有关系,其中的语言特性,都是对C封装而来。还有更改一下编译器设置。在Objective-C有代理,代理本质是什么。在《effective Objective-C》书中解释非常清晰。所以,并不需要经过项目经验体会到什么是代理,什么是block。我曾经还看到过解释block使用C++,多么搞笑的事情。使用一件不能理解事情去解释另外一个不能解释的事情。怎么不用C++解释Java,解释python,解释PHP。
Objective是怎么发送消息的,是怎么进行内存管理的。本来就是摆在那里的,不需要经过项目经验也是可以懂得。但是需要强烈懂C,因为如果不懂C函数指针不能正确理解,甚至于指针不能正确理解,那就凉凉了。如果不懂函数,C中为什么会有函数这个概念,为了炫酷吗?当然不是。当把C转化为汇编之后,就可以看清楚函数调用的原貌。main函数和另外定义函数都是在一个区域在栈中,而不是main函数另开辟一块内存区域。如果使用能控制进程在内存中的大小,因为函数能够公用这个作用域的代码。如果不明白还是不明白使用函数和不使用函数的区别,可以百度——C语言函数调用本质。而且在Java可能会学到内存管理吗?所以我感觉如果从一开始学习Java即便学习的很好,学习到也不是完整的计算机知识。
对iOS开发的现状的理解
iOS 开发其实就是从2011年开始,并没有C++和Windows古老。现在开发iOS开发也是异常的简单,各种开源的框架有很多。组织起来一个APP,就是把这些开源框架组织起来就好了。然而,现在有一些声音培训机构,培训高级iOS开发工程师。培训的内容主要包括iOS音视频开发、runtime和iOS安全。iOS音视频开发更多不再是调用API如何工作了,而是使用GPU运算。现在更需要iOS异构运算的APP,大量处理图片音视频。更像是英伟达的CUDA,只不过更偏向于UI。runtime在是开发中在组织大型的软件架构很有用处。以及定制化开源框架。比如:能够解析YYModel,SDWebImage,用来能够达到更加精致的业务要求。
也就是说原来iOS APP开发技术,其实已经老了,烂了大街了。现在正式处于一种新老技术迭代中。
对于跨平台开发的理解
比如:Android开发使用C++可以在iOS上面运行了。我一直很不理解,为什么华为开发一个编译器,让Objective-C运行在Android上面?为什么去傻乎乎优化ART,也不去开发一个Objective-C的runtime?可见,软件开发功力还是不到家。Objective-C动态语言,有一点很厉害的。比如说iOS新增了一个特性,也就是新增了一个软件包。当APP在使用这个软件包的时候,这个软件包并没有加载到内存中。是CPU运行到那里的时候再加载。这个还不是最厉害的。用户在屏幕上点击一个按钮,这个按钮在没有点击的时候。内存中没有存在那个软件包。如果使用C++或者Java情况,就是在编译的时候,已经把各个软件包绑定到一起了。
所以,随着iOS版本更新,app启动速度不会降低。而Android和Windows在低硬件配置下表现极差,升级系统根本就不可能。
我不喜欢项目经验,Java中有一个文件流,C++也有IO流。现在我才懂比如遇到一个直播APP,因为直播需要一直链接网络,必须使用文件流。这就是我一直想摆脱项目经验。
网友评论