您的位置:首页 > 其它

专家答疑汇编

2015-09-25 09:51 369 查看
整理来自业界专家的回复(社区/微博/MOOC等)

我的疑惑

Swift在未来有可能会取代Objective-C吗?

当然。但是没人知道会用多长时间,但是我认为应该是在5年之内。我们很容易就忘记计算机语言的生命有多长(现在C语言已经40岁了)。Objective-C不会彻底消失,但是我能预见在未来的某一个时刻,它在语言世界中的份额将变得非常小。(Boisy G. Pitre)

对于已经掌握一两门编程语言的程序员来说,你认为他们怎样才能快速有效地学习一门新语言?

这取决于已有的一两种语言是什么。如果这两种语言是Objective-C和Swift,或者C和C++,或者其中任何组合,为了挑战思维,我会推荐你学习一种完全不同的语言。像C, C++, Objective-C,以及Swift这样的命令式语言都遵循着相同的模型,所以要学习同类语言很简单。你一定要让自己多接触不同的语言泛型,所以我会推荐你学一种函数式语言,比如Scheme。虽然你不会用这种语言来写应用,但是它会全面打开你对计算机语言的理解。(Boisy G. Pitre)

在学习编程语言的过程中,你认为什么时候接触大量的库和API比较合适?对于某个平台的开发者来说,他有必要掌握所有可能用到的API吗?

我经常会用木匠的工具腰带做类比。他的腰带中会装有所有想象得到的工具吗?不……只有那些经常使用的工具。当他需要特殊工具的时候,他会走到他的卡车前,打开放在里面的大工具箱,然后使用某种工具一次到两次,然后把它放起来。

对于编程语言和API来说也是如此。你无法完整地了解所有API,但是你知道得越多,你就越能更好地解决问题。我会建议你先比较完整地学习一门语言,然后再继续研究这种语言的细微之处,也就是开始接触这门语言中可以用来创建有用应用的框架和API。然后你可以每周一次,选择一个新的API,投入3-5个小时来学习它的功能。你可能并不会经常使用这个API,但是你知道它就在那,当遇到适当的时机时,你就会准备好用它来完成特定的任务了。(Boisy G. Pitre)

之前的Java是面向对象的,现在全面支持函数式编程。作为开发者,我们需要做出哪些转变才能发挥函数式编程的力量?

我认为这个转变需要几步来完成。

第一步,学习更多关于Java 8的知识。读书、读tutorial,然后尝试几个简单的函数式代码的例子。掌握了基础之后,就可以进行第二步了。

第二步,在工作项目上使用Java 8。我觉得在一个低风险的小项目上练一练手确实不错,但是在真实商业世界的背景下解决问题效果则更好。一旦你在真实世界的设置下熟悉了Java 8,就可以移步到第三步了。

第三步,把所有代码部署到Java 8上,并在不使用任何Java 8特性的前提下对其进行全面测试。这样做是因为虽然Java SE维护了很强大的二进制兼容性,但是某些第三方库可能会崩溃,那时你就必须得升级这些库。如果你已经使用了最新的库,那么这一步对你来说就不成问题。一旦万事俱备,就可以开始第四步了。

第四步,在你整个主代码库上使用Java 8,并且乐在其中。之前的Java是面向对象的,现在全面支持函数式编程。作为开发者,我们需要做出哪些转变才能发挥函数式编程的力量?(Richard Warburton)

在你使用Java进行函数式编程的过程中,是否有哪些最佳实践值得推荐?一路上是否遇到过哪些坑?

我从来都不太喜欢“最佳实践”这个词,这些东西都是随着时间变化的,而且依赖于不同背景。但是我们可以来说一说那些用起来得心应手的好东西。

数据流(Stream)和采集器(Collector)。如果你编写的代码需要采集API,那么这些特性就是你最好的朋友。

不可变数据。一般来说,返回新的对象比改变已有的对象更简单,也更不容易出错。

函数式思考方式。与其想“我怎么才能升级这个Blob的状态?”不如问自己:“我怎么才能把这个输入转为输出呢?”(Richard Warburton)

目前Java生态对Java 8函数式编程的支持情况如何?作为新特性,您预测Java 8函数式编程进入全面使用大概还需要多长时间?

如果你想要采用Java 8的话,就需要一步一步慢慢来。首先考虑的是和lambda表达式一起联合使用核心库特征,比如数据流(Stream)和采集器(Collector)。我认为我们现在已经进入了逐步采用的阶段,我已经见到很多人把这些特性用在了真实的代码中。

随着时间推移,我相信我们即将看到Java演进成更具有函数式风格的语言——使用某些函数式设计模式,更多的不可变类。已经有一些库开始采用这样的样式。我编写了一个测试框架(http://richardwarburton.github.io/lambda-behave/)作为例子抛砖引玉,还有很多其他东西可以做。

所以我的结论是最终Java 8的函数式特性会得到全面采用,但是这是一个循序渐进的过程。(Richard Warburton)

项目结构混乱的应急对策

我正在开发一款Android应用,刚开始没有很好的计划。随着软件功能的增多,业务变得越来越复杂。可以说没有使用软件工程的方法,比如软件开发流程、面向对象的开发方法。现在出现如下的问题:

1. 类的功能逐渐变杂、定义越来越不清晰,越来越不知道某各类究竟是做什么的

2. 没有很好的接口定义,很多工具方法出现在普通类中,很多公用的东西混杂在各个类中

3. 实现新功能的难度越来越大,因为项目结构越来越混乱、越来越难调试和发现问题所在

针对我的情况,老师或同学们,您能提供一些建议,让我从目前的情况中脱身? 如何才能让项目继续下去。

个人观点:

如果架构经验不多但有一定的经验,可以参看一些现成的架构,例如知乎的这个问题 http://www.zhihu.com/question/35009721,再例如基于reactive extension的架构https://github.com/tehmou/rx-android-architecture,等等,网上有很多针对Android的架构可以学习,但要注意切忌不假思索的套用,一定要结合自身的业务逻辑和掌控能力进行订制,否则只会使项目更加混乱

可以阅读一些经典著作如《Refactoring: Improving the Design of Existing Code》, 《Working Efficiently with Legacy Code》,学会通过重构来演进的改善代码和架构

难以调试和发现问题所在,通过写单元测试可以很大程度上减少调试的难度,另外单元测试也可以帮助改善代码设计

认真学习本门课程,之后的课上会讲到包括软件的系统设计、开发的最佳实践等等,虽然本课程以python作为教学语言,但一些思想在大多数语言中都是共同的,希望能对你有所帮助 :)(清华大学 计算机学院研究生MOOC助教 )

Android开发入门的疑惑

问:您好,我是刚刚进入Android开发的毕业生,之前在学校学习的都是Java Web方面的知识,进入公司后被分配到刚刚成立的手持设备组,到现在大概四个月了,日常工作就是改控件样式,模仿项目中已存在功能模块写类似模块。在这四个月时间中,感到自己的进步非常小,【现在有些迷惑。不知道该如何学习Android了?】希望您给我一些建议,如果让您带领一个新人入门,您会给他什么建议呢?感谢您在百忙之中看我的留言。祝好!

答:不好意思。对于入门不久来说更多的是多学多看多用,可能听起来比较泛。

多学就是指主动学习,这样才能接触自己没用到但比较好的东西

多看是指多看源码以及优秀项目,学习整体设计和细节处理

多用就是多动手做项目,并且将你学到和看到的运用起来

学习的话可以看看 Java 编程思想,这是 需要基础, Android 没有太好的书籍推荐,多看看 android dev 以及其他人的博客(安居客Android研发工程师)

其他人的有意义提问

对于一位iOS开发专家来说,他的知识框架是什么样的?

一个全面的iOS专家必须掌握这四样东西:

(1) 用来写应用的语言(Swift / Objective-C);

(2) 对创建软件的工具的控制(Xcode);

(3) 关于iOS应用基础框架和API的强大知识储备;

(4) 鉴别好的UI设计的能力。

要经历很多应用和上百小时的编程才能达到这个水平。每个应用都会带来自身的要求和需要的API,所以你写的应用越多,就能越广地接触到各式苹果框架的,而你的UI设计技巧也会越来越好。(Boisy G. Pitre)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: