简单谈谈编程语言(三)

?????? 本文续上一篇简单谈谈编程语言(二),最后再谈谈编程语言。这篇很有可能是最后一篇了,也是时候整理一下我之前的一些文档了,这篇谈谈对编程语言专精的必要性,或者选择一精多涉猎的战术,谈谈一些学习心路,而,共性,就是我这篇文章表达的核心。第一篇文章谈历史,第二篇文章谈历程,都是第三篇的基础,之后就靠大家自己去实际学习中感受文章中所表达的了。

?????? 经过前两篇对编程语言不同层面的描述,其实大概对编程语言学习的畏惧心理可能已经没有那么大了,也可能也因为编程经验相对少感受不深,也可能因为编程经验丰富而觉得我的文章稚嫩,也可能会出现飘飘然觉得学好一门编程语言没有那么难,等等。当然,我的立场可能更多地代表着我现阶段的看法,并且以相对容易理解的方式去讲述,至于适不适合比较高层次的编程者去看,需要时间去说明问题,毕竟我现在水平有限。

?????? 也许,看完前两章,就开始跃跃欲试去尝试接触一门新的语言,然后还是碰了一脸灰,即使有了前两篇文章的理解,还是没能够很快地去适应、学习一门新语言。当然,这很正常,毕竟每个人的学习能力(这个需要去磨练)、现有水平不同,学习和适应的时间会不一样。前两篇文章所表达的思维,是需要你一点点在实践中去感受,才会真正懂得的,文章的目的是在你学习的路上有这么一个心眼,去关注编程语言的共性,而不单纯去学。

?????? 寻找共性,我个人觉得是,快速转型从事其他方面工作的最快捷方式。寻找共性,技术迁移,思维迁移,思维适应,接着融入新的环境。其实,我们也不难发现,当我们去接触新的东西的时候,发现了自己熟悉的,会倍感亲切。就好像背井离乡到外面工作,一开始的恐惧,突然碰到老乡一样,然后有了老乡的帮助,适应新的环境,接触新的人,也就相对容易了。当我们经常出差到外地,习以为常的时候,我们就慢慢有了一种适应环境的能力,这便是经验值。这时候的我们就不需要有老乡带入门了,我们自己能找到路,知道怎么找地方住、吃、玩。

?????? 编程语言也一样,我们一开始从自己相对熟悉的语言,去学习新的语言也是这样。但是,我们总能遇到“老乡”,比如if…else…,for,while,switch等等,这些会让我们倍感亲切,它们能帮助我们写出一些简单的程序,让我们相对容易适应新的语言。然后,当我们渐渐熟悉的时候,慢慢地发现共性越来越多,即使是面向过程和面向对象这两大常见阵型,再深层次一点就是抽象,再抽象,只是解决问题的思路不一样。接着,会发现新的语言有一些很好用的API/库函数,用着很舒服。当我们再接触第三、第四种……语言的时候,我们就开始一上来就看看属于哪种类型的语言,之前有没有接触过类似的,看看变量声明、数据结构、常见的条件循环语句,然后打印个hello world什么的,然后做点简单的小应用,比如常见的计算器之类的,接着开始根据需求去做应用开发,边做边学,开发周期明显之前短了。原因就是,我们已经知道了共性,然后形成了自己的学习思路,也就是有较强的适应能力/较高的经验值,即使我们在开发中没有很好地利用好当前语言的API/思路,写的不是最优代码,但却能做开发了。这个时候,我们可以很骄傲地举出很多语言的共性,甚至包括通用的数据结构、编程思想、应用开发思路等等,更高层次的共性。

?????? 富有成就感之余,却开始发现自己写了不少东西,却没能拿出很优秀的作品出来,因为自己对一门语言的了解过于浅层。除此之外,当接触大项目的时候,就发现自己的代码出现了各种奇奇怪怪的问题,想不明白,自己对底层了解不清楚,同样的功能,别人的代码却性能很好,而自己的一塌糊涂,对内存分配、一些好用的API、一些数据结构的巧妙用法等等,还停留在浅层。回头想想,自己花了过多的时候,不停地跟潮流、跟项目、跟着内心的成就感,却忽视最基本的基础知识。然后自己便开始选择一门适合自己、用着舒服的编程语言,去深入学习,学习高级应用,深入去了解编程思想,理解底层内存分配,任务调度,操作系统等等,开始从应用层到底层,目的是开发出优秀的应用,而不是可用的应用。这时候,对代码的优化,有了自己的洁癖,有自己的代码风格,开始谦虚,心态开始平稳。渐渐地,自己能构建出优秀的代码架构,能和团队做出稳定的第三方库,开发框架。这时候的自己,对编程语言已经没有很明显的忧虑,开始理解编程语言只是工具。面对一个新的项目,开始有自己的判断,选择哪一门编程语言更合适、开发周期更短,哪个框架更好,不再人云亦云,不再跟着潮流,跟风学习某某流行语言、框架。因为这时候的自己,有了扎实的基础知识,看破了编程语言、框架的本质,甚至能自己和团队一起开发出新的编程语言和框架,学习编程语言已经轻车熟路,迅速上手还能写出不错的代码。

? ? ? ?随着经验的提升,对底层的理解越来越清晰,渐渐开始不做功能的实现,更关注整个代码的架构,可以严谨考虑整个应用的运行周期,前期的代码编写,中期的功能测试、代码,后期的应用维护。慢慢地,自己也能比较清晰地判断每个人的能力和潜力,将他们分配到合适的位置,放心地将一线的代码架构、编写、测试、维护工作,交给他们,自己更多地做可行性的判断、规划等等,正式退出第一线代码工作,离开了自己喜欢的代码编写工作,步入管理层。这时候的自己,已经可以对很多知识做出更成熟理论的描述,开始偏理论层面的工作的。

??????

后记:

?????? 已经超过两千字,上面描述的内容,只代表着我目前的一些见解和看法,如果有错欢迎指出。以上都是基于我目前的水平和见解,以自己的看法编写的,接下来,写一篇《简单谈谈编程语言(外篇)》,记录一下自己的学习心路。

?????? 不定时更新文章,尽可能坚持下去。

原文地址:https://www.cnblogs.com/ai2050/p/10733288.html

时间: 2024-10-14 07:21:32

简单谈谈编程语言(三)的相关文章

简单谈谈为什么国内不能登录Facebook/youtube等国外网站以及解决方法

简单谈谈为什么国内不能登录Facebook/youtube等国外网站以及解决方法让我们来简单地回顾一下近几年的互联网,自从Google对微软步步紧逼之后,国外互联网风起云涌,先后出现了Twitter.Facebook.Youtube等超级巨无霸,这些巨大无朋的互联网公司几乎是一夜之间出现在我们眼前.基本上这几家公司都是在2004年左右创办的, 2004年2月,Facebook由哈佛大学的学生Mark Zuckerberg创办,时隔一年,Youtube于2005年2年由Paypal的三个前员工Ch

简单谈谈JVM中的GC(下)

在系列的最后,简单谈谈一些会有坑的JVM参数配置,以避免大家再多次踩坑 -XX:+DisableExplicitGC 很多的JVM标准配置中都有该选项,那么它究竟是干嘛的? 它会让System.gc()变成一次空调用,并不会真的发生一次Full Gc.除此以外,它还能避免第三方库定时引发的Full Gc(没错,说的就是RMI机制),看来很美好,对不对? 但有一种情况:应用本身GC正常,很久都不会Full Gc,但堆外内存增长很快,并且JVM启用了-XX:+DisableExplicitGC.你就

iOS开发UI篇—Quartz2D简单使用(三)

iOS开发UI篇-Quartz2D简单使用(三) 一.通过slider控制圆的缩放 1.实现过程 新建一个项目,新建一个继承自UIview的类,并和storyboard中自定义的view进行关联. 界面搭建,如图: 代码示例: YYViewController.m文件 1 // 2 // YYViewController.m 3 // 04-对圆进行缩放 4 // 5 // Created by apple on 14-6-11. 6 // Copyright (c) 2014年 itcase.

简单谈谈Resource,Drawable和Bitmap之间的转换

一直接触这些东西,还是归个类整理一下比较好. Resource -> Drawable Drawable draw1 = this.getResources().getDrawable(R.drawable.icon); Drawable -> Bitmap 1. static Bitmap drawableToBitmap(Drawable drawable) // drawable 转换成bitmap { int width = drawable.getIntrinsicWidth();/

Quartz2D简单使用(三)

Quartz2D简单使用(三) 一.通过slider控制圆的缩放 1.实现过程 新建一个项目,新建一个继承自UIview的类,并和storyboard中自定义的view进行关联. 界面搭建,如图: 代码示例: YYViewController.m文件 8 9 #import "YYViewController.h" 10 #import "YYview.h" 11 12 @interface YYViewController () 13 @property (wea

简单谈谈Erlang的几种运算符

Erlang 有好几种运算符,比较运算符.数学运算符.布尔运算符,文章针对这几种运算符做讨论,参考erlang文档,以例子说明. Erlang的比较运算符 写法如下: Expr1 op Expr2 1> 1 == 1. true op Description == 等于 /= 不等于 =< 小于或等于 < 小于 >= 大于或等于 > 大于 =:= 恒等于 =/= 恒不等于 以=:=和==为例,说明恒等于和等于的区别: 2> 1 == 1.0. true 3> 1

html css的简单学习(三)

html css的简单学习(三) 前端开发工具:Dreamweaver.Hbuilder.WebStorm.Sublime.PhpStorm...==========================================================head头的本质:优化页面,利于搜索:设置字符集,防止乱码:引入外部样式方便:规定呈现样式.===========================================================<meta name="

大钟的ios开发之旅(4)————简单谈谈ios程序界面实现的三种方式(代码创建,xib和storyboard)

/******************************************************************************************** * author:[email protected]大钟 * E-mail:[email protected] *site:http://www.idealpwr.com/ *深圳市动力思维科技发展有限公司 * http://blog.csdn.net/conowen * 注:本文为原创,仅作为学习交流使用,转

Java反射机制剖析(三)-简单谈谈动态代理

通过Java反射机制剖析(一)和Java反射机制剖析(二)的学习,已经对反射有了一定的了解,这一篇通过动态代理的例子来进一步学习反射机制. 1.     代理模式 代理模式就是为其他对象提供一种代理来控制对这个对象的访问.其实代理模式是在访问的对象时引入一定程度的间接性,这种间接性可以附加多种用途. 它 的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会 存在关联关系,一个代理类的对象与一个委托类的对象