编程语言学习
首先要思考学习编程语言的目的,目的是为了让计算机知道自己要干什么。只要能实现目的就行,当然花的时间成本越少越好。
机器语言太难,汇编有点难(不同的芯片还不一样),所以选择高级语言。
学第一门编程语言时,跟着老师或者教材认真学,例子都要敲一遍,语法也要仔细看一遍,常见的错误也要注意,最后最好能刷一遍该语言的面试编程题然后做一个项目。
当掌握几门编程语言后,学其他的编程语言时,不要从头到尾的看书听课。浏览一遍基本的类型,语法后看该语言实现业务的经典框架,如果是纯学习,弄清原理,思想和流程就够了,因为再细如果不用的话也是马上忘记。如果是项目工作中要使用,那么,用该语言写一下经典的编程题,做一下笔试题,然后把用到的框架的基本功能复现一遍基本上就够了。工作使用中遇到问题再查,更深的框架应用用到再学。
那么如何量化代表学习了该编程语言呢?
1 数据类型(int/integer float double char string dict list... )
2 程序结构(if for while break continue...)
3 IO及文件操作(print,read,write)
4 类和对象(class)
5 数据库操作(连接,执行sql,查询结果保存)
掌握上面的五项,就代表对该语言入门了。掌握一门编程语言的本质是用它解决相应的问题,不同的语言因为一些原因,其应用往往被局限在某一个领域,因此,只要能够使用该语言解决其应用领域的问题就可以了。这也是学习框架的原因,因为通过框架可以了解语言应用的领域,领域内业务的流程和配套的其他的一些技术。所以说在上面的基础上能够用现有框架解决问题就代表你掌握了这么语言了。
针对不同的语言总结了一下各种语言的特性以及学习路线
C(嵌入式)
1 数据类型(int float... )
2 程序结构(if for while break continue...)
3 IO及文件操作(printf,read,write)
4 指针修改内存
C++(PC软件)
1 数据类型(int float double)
2 程序结构(if for while break continue...)
3 IO及文件操作(cin,cout,read,write)
4 指针
5 类
6 模板及STL
7 Qt
C#(网站,unity3d)
1 数据类型($)
2 程序结构(if for while break continue...)
3 IO及文件操作
4 .net
java(网站和android)
1 数据类型(int float double...)
2 程序结构(if for while break continue...)
3 IO及文件操作(println,read,write)
4 类与反射
5 SSH
6 android
python(数据分析,深度学习,爬虫)
1 数据类型(list,dict...)
2 程序结构(if for while break continue...)
3 IO及文件操作(input,print,read,write)
4 django,flask,scapy,mysql,mongodb,redis/memcache
5 numpy,skilearn,pandas,matplotlib,
6 tensorflow,pytorch,keras
go(网站,区块链)
1 数据类型(int,string...)
2 程序结构(if for while break continue...)
3 IO及文件操作(input,print,read,write)
4 beego docker
5 BTC ETC EOS
php(网站)
1 数据类型($)
2 程序结构(if for while break continue...)
3 IO及文件操作(echo)
4 lamp
5 thinkphp
其中,C语言最早,由于软件危机,出现面向对象编程,然后出现包含面向对象的C++,然后出现全部都对象化的面向对象的java,然后在互联网兴起的时候被用在了做网站上,后来随着android的兴起,进一步得到发展,其半编译半解释的特性具有跨平台,灵活和效率的特点。为了针对java,微软开发了C#,C#的设计者之前设计了Delphi,所以C#的语法与delphi有许多相似的地方。php则是一个快速做网站的语言,一度被认为是最好的编程语言。python是纯解释性的语言,语言非常灵活,使用简单功能强大,开发效率很高,运行效率很低,ubuntu自带python2.7,适合用来做算法实现,有时可以当作乞丐版的matlab。随着机器学习和深度学习等重要算法的发展而发展起来。go可以看作C语言在互联网时代的2.0版本,大牛背书,多线程高并发的特性,兼具效率和灵活性,随着区块链的发展崛起。另外,js在前端的发展也很迅速,也被用作unity3d的脚本同时和深度学习的convnetjs,lua则作为游戏脚本语言随着游戏的发展而发展。其他没有讨论到的还有matlab,ruby,object-C,delphi,pearl,swift,R,VB,pascal,Fortran使用范围较为受限且暂时没有进入前三的可能。
编程语言就像人话一样,本身的优劣之分并没有想象的那么大,决定其优劣的根本原因是使用的人数的多少,一个新的领域的出现往往会推动一门编程语言的发展或者造就一门新的编程语言。但是,对于程序员来说,只需要知道编译原理,只需要知道只不过都是转化为01罢了,只需要知道水平低的时候选择哪门言能够最快最好的解决业务上的问题,水平高的时候随便那个都能用来做好用的框架给别人用就够了。所以说要选择的话,用python做实现,C/C++做工程应该是最好的,可惜的是,要达到能靠这两门语言快速解决所有问题,对一个程序员来说,有很长的一段路要走,但是如果要问有没有必要,就像问全世界的人是否应该说一种语言一样,可能只是一种不可能的必要性,因为世界上大多数人不是程序员。
最后列举一下一些编程题和项目,这些项目包含了一门语言中的很多语法,可以很好的帮助快速熟悉一门编程语言
1 数据结构与算法的实现。链表队列栈树查找排序基本上是笔试必须的。
2 根据输入,读取指定文件中的内容,查找出其中包含的某个关键词后面的数值,做为程序流程的控制值,控制程序的执行,最后将执行结果显示出来,然后保存到指定文件中。包含了文件读写,判断循环,输入输出,强化版的配置文件读取。
3 多线程生产消费模型的实现以及出现异常的异常捕获。(异常,多线程)
4 图书馆的业务的类的实现(继承)
5 小的图书馆网站的实现(mysql/mongodb/redis,html/Css,tomcat/apache/nginx)
6 dll的调用以及生产exe还有混合编程的内嵌语法