码农这个行业在外行看来是一个很有技术含量的行业,因为他们的工作环境动不动就是各种外观看起来高大上的IDE,然后噼里啪啦在屏幕上滚动各种数据,再加上某些不良程序员一张嘴特别能吹,总体套路就是满嘴各种英文缩写,什么Thrift,NoSQL,Scrapy.....其实真正厉害的程序员确实是有的,那些精通算法,数学的同学还是很有两把刷子的。但是如果天天还是拿用什么语言来吹牛逼,感觉基本上也就是水牛了。其实,各种编程语言,C,C++,Python等等,之所以称之为,语言,因为本质上就是在说话,只不过是对着计算机说,让计算机知道你的想法。
上面我已经说过了,编程就是在说话,说话也就意味着你其实并不需要一上来就搞懂整门语言的学问,就像你学英语一样,即使语法都不会的小孩,也一样可以一上来就"Hello! How are you?" 地说上两句。更何况,软件开发本身就是一个迭代的过程,凭什么程序员对某门语言的认识不可以也是一个迭代的过程?当然,在学英语之前,小孩子已经具备一定的中文语言能力是必要的,不然你都不知道自己要说什么。。不会说你好,又怎么能说Hello 呢?
今天这篇博文,大致是揭露公司里的程序员是如何在短时间内上手开始写一个之前没写过的语言的程序的,毕竟公司里不会给你学习时间,你只能快速学习,本质其实就是不学习。。。不学习又怎么上手呢?这篇文章就大致讲讲。
其实说白了,弄来弄去,现在比较主流的编程语言,感觉可以粗略分个类,额,那就这样吧,虽然可能也不是很合理,1).C,C++,2).Java,3).各种脚本语言,像什么Python,Ruby,Shell,PHP,这些的,其实前两类我瞎分的,第三类我是真的觉得他们超级像。。。
当然快速上手一门语言之前肯定要对所有语言的体系有个常识性的了解:
1).C++,C,变量需要声明类型,向变量赋值需要严格遵循赋值的那套规则,不能胡来,否则编译都不能通过,当然也别指望有什么太奢侈的高级特性了,感觉C++11之后的特性,都是在把简单问题搞复杂。传值,传引用(C++才有),传指针,这些概念至少得在百度上详细查清楚。。。
2).JAVA,有字符串;函数调用,基本类型是传值,复杂类型,像是类对象,传的是引用。至于父类,子类之间的继承,重写方法,这些规则,自行百度。。。现用现查。。。
3).脚本语言,诸如Python,Shell,Ruby,PHP,看起来语法差异很大,但是设计上,感觉都好像。说下几个特性吧:3.1)变量不用事先声明,随用随创建;3.2)函数调用的时候,复杂类型传引用;3.3)遍历时候各种for in, for each ,具体用法查手册就行了(感觉开发的思维都是,我知道有那么回事的一个功能,我要用,我不知道怎么用,好吧,查~~)
好吧,现在说这么多,感觉已经有个大概的认识了,说白了,用一门语言就是靠查文档。。。。
举个例子,额,用Ruby写一个小得不能再小的demo,来演示一下这种工作方式,出个题目,写一个Ruby类对象,实现一个功能:生成若干个随机数作为类成员,并且把各个随机数打印出来,而且注明是奇数还是偶数。
好,下面开始:
第一步:查一下,Ruby源文件的后缀,我们请教无所不知的百度知道。。。
好了,知道了,后缀名为.rb,嗯,我们创建一个ruby源文件,example.rb。
第二步:脚本语言嘛,你总得让大家知道你是哪个解释器执行得吧,但是咋知道解释器在哪呢。。。声明解释器位置的方法算跟Shell,Python不都一样嘛。。格式:#!解释器路径 好了,如果在linux环境下,一条语句就可以搞定了,但是要确保命令行在源文件相同目录下。。都懒得自己打进去。echo "#!"`which ruby` > example.rb ,进去一看有了,#!/usr/bin/ruby
第三步:试一下呗,能不能执行,再问一问百度,ruby怎么打印啊。。
#!/usr/bin/ruby
puts "Hello","World!"
嗷嗷嗷嗷,原来puts是打印语句啊,而且查了一下,puts默认换行。而且是逗号分隔的元素输出也要换行。
告诉你个好东西哦~~你甚至都可以不在本地配置环境,自行百度,Ruby在线解释器~~~嘿嘿嘿
第四步:Ruby怎么声明数组,这种问题实在不是问题,因为任何语言都离不开数组,自行搜索,Ruby创建数组的方法,放心!一搜肯定有一大堆的方法。。。Runoob上。。。
额,很容易可以猜出来,Ruby的数组可以在末尾追加元素,数组长度可变,不像C语言那样定长。为什么呢?尼玛,谁会无聊声明个空数组?Array.new.....所以,我们可以继续追究一下,怎么往一个数组末尾追加元素......再百度。
瞎几把猜了一下,这个方法名字可能是push,当然,也有可能是insert....当然我蒙对了。。。那么,声明一个数组,并且往里面增加元素的方法就很明了了,先new一个,然后不停push....
arrCom=Array.new()
i=0
while i<w
arrCom.push(rand(h))
i+=1
end
第五步:Ruby里面怎么声明类呀。。。说好的数组在类中的呢。。。继续问度娘。。。。
哪怕没学过计算机组成原理,数据结构,文字叙述总能读懂吧?。。。。class声明,end结尾XXXXXX等等,方法也是哦。咦?成员怎么声明?麻吉的,我们可以眼尖地注意到,initialize这个初始化函数里面有两个@开头的变量吧。。。这么奇葩的书写方式不是为了声明类成员,为何要放在初始化函数呢?那肯定是声明类成员的方法了。。。恭喜,又猜对了。。。
class Exam
def initialize(w,h)
@arrCom=Array.new()
i=0
while i<w
@arrCom.push(rand(h))
i+=1
end
end
end
第六步:随机数。。。我想我都不用说了。。初始化函数的时候,有两个参数在上面已经写了,w和h,w很容易看出来啊。放在循环里,明显是为了告诉解释器,数组里要放几个元素。至于h呢,放在一个名字为rand的函数里。rand?额。。听名字就知道和随机有关系。h啥意思,查一下,继续问度娘。
结果发现圣诞老人抢答了。。。很简单吧。。。也就是说h=1000时候,生成的是0~999的随机数。。。以此类推
第七步:要循环输出数组里所有元素吧。。。写个方法完成这个功能,但是,这种高级语言,不用点高级特性,怎么好意思遍历?还真要用for(int i=0;i<b;i++) 这么土的方式?再查。。。
哎,你甚至都不用搞懂迭代器是什么玩意。。。看实例代码。不难猜,'.each do' 这部分,是官腔,照搬就行了。。。|i| 里面的i 用来取出遍历出来的各个元素。。。至于这个puts i 明显是输出啊。。。至此,大功告成。。。小目标已经可以实现了,源代码如下:
#!/usr/bin/ruby
#-*- coding:UTF-8 -*-
class Exam
def initialize(w,h)
@arrCom=Array.new()
i=0
while i<w
@arrCom.push(rand(h))
i+=1
end
end
def show()
@arrCom.each do |ele|
if ele & 1 == 0
print("偶数",ele,"\n")
else
print("奇数",ele,"\n")
end
end
end
end
examObj=Exam.new(20,10000)
examObj.show
第九步:也许毫无计算机基础的人会很奇怪,为什么用 ele & 1 ==0 作为判断。。。这个,额,留给当一个作业吧,自行百度。。。附图,这是在线解释器的执行截图。。。也许你会问我,你怎么知道这个在线解释器的,我怎么就不知道?。。我告诉你,我百度的。。。关键词:ruby,在线,解释器.....百度的首页,不止是广告~~~:p
其实我写这篇博文,纯属为了告诉你,在互联网公司上班,保证不被淹死最重要的一点是快速学习,快速学习的本质也就是不学习。。。当然,这种方式,其实更多只能治标,没法治本,很多原理,算法,架构性质的知识,还是要有整块的时间学习理解的。但是单纯技术,软件迭代开发的过程,其实也是个人技术的迭代更新的过程。。。程序员嘛,就是混口饭吃的职业罢了,没什么高大上的。尤其真的神烦那些天天一口一个英文单词的人,明明这些英文单词命名的技术都是为了降低开发门槛而存在的,而你?却拿来吹牛逼?不太合适吧?。。。。