对编程语言的态度
- 语言只是个工具,往一个具体领域学习研究才是王道:(当然,具体项目选择语言还是很重要的:该语言开发效率,性能,可读性,现有可用库是否满足项目等等语言生态环境,就看如何trade-off选择了),所以我不太喜欢用Python工程师,golang工程师来给工程师打标签,而ios/前端/web后端/分布式系统 这样带有领域方向的标签才合适。
- 不要抵触学习新语言心理,按需学习:无论开源项目,还是项目开发选中的语言,毕竟都有它的优势,需要就学习,毕竟学习一门语言也不会太耗时间(因为我想学语言最耗时间的在于学习库,无论语言,语言特性,语言背后的原理,都能很快就学习掌握的,尤其学习c++后,毕竟主流语言基本都是面向对象,而精髓是万变不离其宗,重要的还是抽象 即 理解掌握‘设计模式’的核心思想),也能加深对语言的理解,发现自己真正欣赏动心的语言。
现在开发语言都在相互借鉴学习,个人觉得发展趋势:追求简洁性,开发效率,兼顾性能,更加注重业务逻辑,而非语言本生带来的心智负担(eg:语法层面引用代替指针或者如golang语言弱化指针,垃圾回收机制)。
个人觉得深刻学习语言最好的方式就是: 看用该语言写的开源项目源码,当然这涉及到动力问题,所以去研究自己感兴趣的领域,开源项目就很重要的,无论是工作需要,还是自己兴趣,以我为例,大学刚开始工作时候,研究linux内核开发,glusterfs分布式系统,也就学习C/C++,shell脚本了,学习初步研究openstack时候就学习python,研究docker也就学习了golang语言。
如何写出质量高的代码
最基本:理解语言底层原理,而不是简单的使用
看用该语言写的开源项目源码
看逻辑流程时适合小中断,多注意源码组织布局,多注意该 类/模块 其他函数(封装/抽象),猜测该类模块基本功能,这样我想对于项目组织理解会更深刻,能潜移默化的提高你代码的质量。
高质量代码看多了,对代码品味高了,自己的写的代码质量当然也差不了多少,此外还能。so,我相信经常看开源项目的人写出来的代码质量都不会差的。
- 能学到使用该语言的技巧,间接学习丰富该语言的库等等,肯定都有很多让自己眼睛一亮,学习借鉴的地方,这样写自己代码就有底气自信多了。
就如不懂github就不是一个合格的工程师一样, 某种意义讲,没有看过开源源码的也不算是个合格的工程师。
理解掌握 设计模式的核心思想:
- 封装变化(抽象)
- 多用组合,少用继承
- 针对接口编程,而不针对实现编程。
- 对于go语言,看开源项目,多关注代码组织结构时,也多注意包中的*_test.go,在没没文档情况下,相对容易理解该包作用。
语言对比理解
c/c++: 偏向底层基础软件,编译性语言,高性能,嵌入式等方向,指针,无垃圾回收机制,开发效率相对低,有一定的心智负担,可以理解为高级语言中的汇编语言
python:追求开发效率,解释性语言,性能相对低,The Zen of Python,可用于脚本开发
java: 成熟稳定,生态环境比较好,编译性语言,语法冗长,可用于企业级应用开发,性能高的基础软件,大数据生态。。很多大公司稳妥的选择。
golang:(个人)设计优雅,interface接口的设计很好的面向对象的思想,工程性开发语言(语言层面有一定的强制性风格要求),编译型基于goroutine和channel的通信(语言层面支持)简洁高效的支持多并发,可用于高性能高并发系统开发
scala: 函数式编程,追求速度,跑在JVM上,Java互操作性, 不可变,无副作用,函数是一等公民等函数式编程思维方式跟面向对象思想有一定的区别,对于开发人能力相对比较有要求。个人觉得对于函数式编程思想,对于数据的处理更贴近。。用于大数据领域(python ,java,scala对比:Scala 是一门怎样的语言,具有哪些优缺点?紫杉的回答)
资源推荐
golang
- 学习推荐书籍(golang ,web ,机器学习) golang 部分
java
- 《java编程思想》(Think in java)
有深度精炼的书,不适合新手比,但提升必看的书(较有深度的书),层面设计也多跟C++做对比,比较深度的分析讲解面向对象的编程理念(即更多解释WHY 这么设计,而非只是语法层面)。 - 《java核心技术 卷一》
适合新手看,中规中矩,语法层面更细些。
scala
- Scala课堂&&Effective Scala
- 《scala编程(Programming in Scala)》&&《快学scala》
- 可以参考 https://github.com/jacksu/utils4s 中 scala语法学习 资源部分
- Scala 是一门怎样的语言,具有哪些优缺点?&为什么选择Scala,它在大数据处理方面有何优势?