怎么学习编程呢?
新手学编程的入门步骤:第一阶段,选择语言;第二阶段,学习编程“思想”;第三阶段,动手实践:第四阶段,了解业务逻辑。作为一个零基础的初学者,如果能走过这4个阶段,基本就算是入行了。
第一阶段,选择语言:
你需要用百度谷歌提前上网了解,像C、C++、Java、JavaScript,包括时下比较新潮的Python、Go,都是我们所说的编程语言。这些语言都没有绝对的优势,而是各有千秋,侧重于不同的需求。
例如新兴的Python在数据分析和机器学习等方面有较好的应用,而传统的JavaScript、Java则是用于web前后端的开发,更符合市面上的岗位需求。
在选择时,你要先给自己想进的公司,想做的职位有一个初步的画像。我个人建议,如果是想要从事相关工作,还是要选择一个应用范围和前景都更广阔的语言作为入职的敲门砖。等到真正工作以后再学习其他语言。
第二阶段,学习编程“思想”:
这时候你可能会纠结于是报个培训班还是自学?这要根据你自己的个人情况,现在网上编程的课程体系很丰富,像是B站上有很多教Java的视频,不懂的地方也可以向百度和谷歌求教。至于培训班,在内容上其实和自学都没有多大出入,但可以帮你强制性的固定一个学习时间,花钱给自己买点儿压力,要是在时间和财力允许的状况下可以选择。
而在学习的过程中,切忌无脑的照着别人的代码敲,甚至我都不建议你记笔记。因为最重要的是能够学习别人的编程的思路,你要时刻思考这个功能是怎么实现,为什么要这么实现。最好能每次看完书或者视频,用自己的思路把这些东西整理出来,在和视频中对比,找出问题,这样才能把人家精髓的东西消化到自己的思维中。
第三阶段,动手实践:
学习时,你要给自己一个心理暗示,把自己当做一名真正的开发者。因为编程是一项必须放在实践中检验的工作。记熟语法和API只是基础,能用他们解决实际问题才叫编程。在你摸到一些编程思路之后,可以尝试着脱离课本完全自己实现功能。自己实现一些小项目来练手,看别人项目代码,与别人讨论,提升代码能力。最终的入职报告上,你所做的项目才是能证明你个人价值的经验。
如何学好一门编程语言?
学好一门编程语言是十分不容易的,但是如果学会了,它的实用性是很强的,下面我为大家整理了学好一门编程语言的办法,大家可以参考借鉴。
如何学好一门编程语言?
一、多总结
多总结才能加深理解、增强记忆。举例,Go中有slice、map、channal类型,它们都可以用make生成实例,但slice和map还可以用以下形式初始化,也是编程规范中建议的初始化方式:
colors:=map[string]string{}
slice:=[]int{}
但注意了,channal则没有这样的语法:msg:=chanstring{}
上面两句是生成实例,表示空集合,但下面两句则表示实例不存在,值为nil
varcolorsmap[string]string
varslice[]int
另外,结构体指针slice还可以象下面这样初始化,结构体实例不用明确地指定类型(使用了类型推导)、不用明确地取地址运算(&)。
typeProductstruct{
namestring
pricefloat64
products:=[]*Product{{"Spanner",3.99},{"Wrench",2.49},{"Screwdriver",1.99}}
看到没有,如果不经常总结,这一圈学下来会把你整的稀里糊涂的。
二、多比较
学一门新语言一定要与你之前已经熟悉的语言经常作比较,找出它们的相同与不同,这样才能加深记忆和理解,否则学完之后脑子里会一片混乱,搞不清谁是谁非了。
就拿数组来说吧,在Java、Scala、Go中定义、实例化、赋值是不一样的。
//Java
int[]arr;//定义数组,不可以指定数组长度
arr=newint[5];//创建数组对象(实例化),指定数组长度
arr[1]=8;//赋值
//Scala
valarr=newArray[Int](5)//数组在Scala里用的是泛型类,构造函数参数指定数组大小
arr(1)=8//赋值,注意用的是括弧
arr:=[5]int{}//创建数组,初始化5个元素都为0,注意如果不指定数组长度,则是另外一种类型Slice
arr[1]=8//赋值
再比如Map在Scala与Go语言里定义、初始化、访问也是不同的,作了以下比较后印象会非常深刻,把它们记下来,这样以后使用就不会搞混了。
//Scala
valcapital=Map("France"->"Paris","Japan"->"Tokyo")
println(capital.get("France"))
capital:=map[string]string{"France":"Paris","Japan":"Tokyo"}
fmt.Println(capital["France"])
Go同时给多个变量赋值在Scala里可以用模式匹配做到,如下:
//Scala(使用样本类的模式匹配)
caseclassTao(name:String,age:Int);
valTao(myName,myAge)=Tao("taozs",18);
println(myName)
println(myAge)
myName,myAge:="taozs",18
fmt.Println(myName)
fmt.Println(myAge)
//Scala(使用元组的模式匹配)
val(myNumber,myString)=(123,"abe")
println(myNumber)
println(myString)
myNumber,myString:=123,"abe"
fmt.Println(myNumber)
fmt.Println(myString)
以下是Scala和Go定义和实现函数的区别:
//Scala
valincrease:Int=>Int=(x:Int)=>x+1
println(increase(8))
varincreasefunc(int)int=func(xint)int{returnx+1}
fmt.Println(increase(8))
除了在Scala和Go里都可以类型推导外,在Scala里还可以这样定义函数:
//Scala
valincrease=(_:Int)+1
为方便自己将来随时查阅,可以建立下面这样的对比表格,描述不一定要求规范,自己能看懂就行。
三、转变思维方式,
学会用这门语言去思考
学会用语言去思考是关键。如果你以前是学C的,转学Java,你一定要改变以前面向过程的思维,学会用面向对象的思维去分析问题;以前学Java的,转学Scala则要学会用函数式的编程思维解决问题。
举一个函数式编程的例子,以下是Java语言常用的for循环,循环变量从1到10执行10次循环体:
//命令式编程
for(inti=1;i<10;i++){
//此处是循环体做10次
这被称为命令式编程(ImperativeProgramming),但学了Scala的函数式编程(FunctionalProgramming)后,解决同样的问题,我们可以换一种思维:构建1到10的列表序列,针对列表中的`每个元素分别执行函数,如下:
//函数式编程
valautoList=(1to10).map(i=>/*此处是函数体,针对1到10的每一个分别调用1次*/)
已经习惯了Java编程的,对Scala的函数式编程、样本类、模式匹配、不可变对象、隐式转换等需要一个逐步适应的过程,要渐渐学会用它们思考和解决问题。
再举个Scala与Go思维方式不同的例子,要实现对一个字符串里的每个字符加1的操作,Scala里可以这样:
"abc".map(cc=>cc+1)
"abc"是一个字符串对象,调用它的方法map,这是纯面向对象的思维,但在Go里就要转变为面向过程的思维:
name:="abc"
second:=strings.Map(func(xrune)rune{
returnx+1
},name)
注意,这里的strings是包(package),调用它的公共函数Map,被人操作的对象name字符串作为函数参数传入。Go提供的函数len、cap、append、等其实都是面向过程的,虽然Go也提供有面向对象的支持,已经习惯了面向对象编程的,刚开始学Go语言需要特别留意这一点。
四、多看开源代码
学一门语言就是学一种思维方式,如今GitHub上可下载的开源代码海量级,通过看别人的代码,学习别人是如何解决问题的,养成用该语言思考的习惯,另外还能学习到一些非常有用的技巧,比如我在看一个Go语言性能测试框架代码时看到有以下写法:
funcmain(){
deferprofile.Start().Stop()
这个意思是指刚进入程序时执行Start()函数,程序退出前调用Stop()函数,非常好的技巧啊!可以用于需要在程序执行前和程序完成后分别执行一段逻辑的场景。再看Start()函数是怎么实现的:
funcStart(options...func(*Profile))interface{
Stop()
return&prof
该函数返回了一个实现了含有Stop()函数接口的对象,如此才能在调用Start调用后连调Stop。
五、优先学会使用代码分析工具
代码分析的工具包括静态检查、测试、测试覆盖率分析、性能分析(内存、CPU)、调试工具等,工具的价值在于它可以有效帮我们发现代码问题,这在我们刚开始学一门编程语言时意义尤其重大。
例如,以下这句Java赋值语句估计没有哪本教科书会告诉你有性能问题:
Stringsb=newString(“HelloWorld”);
以下这段Java代码你也不一定能意识到有多线程问题:
synchronizedpublicvoidsend(authuserPacketpkt,Threadt,StringflowNo)throwsIOException
logger.info("start");
//连接不可用,直接抛出异常,等待接收线程连接服务器成功
if(!this.avaliable)
//如果连接不可用,则等待2S,然后重新检测
Thread.sleep(2000);
......
如果我们及时用FindBugs工具检查就会发现上面这些问题,进而你会去分析研究为什么,如此,你对这门语言的了解也会越来越多。
另外,Go语言自带的vet/test/cover/pprof/trace都是非常有用的工具,一边学一边使用这些工具分析代码,能加深对语言的理解。
六、多练习、多实践
就象学自然语言一样,如果只知道语法不去练是没有任何效果的,只有反复地练习,慢慢才能变成自己的一项技能。书本上的例子代码最好能从头到尾亲自敲一遍,多运行、多尝试,另外再找一些题目来练习,如能有机会参与项目开发则更好啦,勤动手、勤实践是最好的学习方法。
其它的方法还有:
做好笔记,把学习中遇到的关键点和自己的思考记下来,便于后面复习和对比;
复习,学习一定要重复、重复、再重复;
学习贵在坚持,每天学一点(比如坚持每天学1小时),日积月累。
怎样学好编程语言
看代码,写代码,研究代码,要不厌其烦得去学习才行
如何学好编程语言?
初级:看书,照着书上写代码,不懂就问,问人,问书,问论坛,反正做到,以后要是写一个这样功能的,不看书都能写出来就最好
中级:知道为啥要这么写,就是不仅仅会写代码,给你说个功能,你能用自己的方式写出来,然后还要明白,写成这样的好处,比如安全,数据不容易被修改,效率最高
高级:这个阶段,你已经是高处不胜寒了,剑招对你基本没用,你在这个阶段所想的是,怎么去创造一个绝世剑招出来
看书,照书做,然后再根据书上写的,对比代码,一句一句明白其意思,然后就是两个方向的发展,一要广度,大量的API需要你去记忆,不求记住,至少要看其名字知道能干啥,尤其是常用的;深度,编程有很多,编软件?做WEB?等等,选定一个持之以恒的发展下去
网站的话:CSDN,酷壳等,百度上一搜一大片,对于初学者还是有不少用处,没事就去下载别人写的源代码,看看别人怎么学的,怎么写的,然后自己理解并能吸收。