如何选择第一门编程语言
TIOBE编程语言排行
C/C++、Java和Python
- 都是从C发展出来的
- C的绝大部分内容Java可覆盖,两者可交换
- 除了可计算的指针、union等
- Java可引入容器、泛型、多线程、GUI、网络、数据库等内容
- python用于写程序而不是写软件
任何语言都适合零基础开始学
Java生逢其时
- 计算模式在演变
- 主机->单机(PC)->C/S->B/S->移动与云
- 计算在远端->计算在桌面->桌面计算远端存储->桌面交互远端计算和存储(B/S架构的程序不需要装软件)->前端交互远端计算和存储
- Java一直不太擅长桌面,但是桌面不那么重要了,浏览器、word、qq等是桌面软件。
- 语言上升是因为有库,有人写库是因为它流行
前端/后端模式
- CGI->MVC->服务化
- 从前:一次点击做一次提交换一个新页面下来
- 现在:一点动作做一次提交得到新数据做部分刷新
- 网站不再是提供网页的站,而是服务提供者
- 前端:HTML、CSS、JavaScript
- 后端:Java、PHP、.net、Python以及JavaScript
JavaScript
- 使得前后端能采用相同的语言来编程:全栈开发,全栈开发语言只是基础,还需要框架和库等等很多东西才能做全栈开发
- C->Java->JavaScript:语言离硬件越来越远,云也是虚拟化硬件
- JS Everywhere:桌面、B/S、移动设备、嵌入式设备
为什么Java受到挑战
- 一门语言独领风骚20年了,总有人想要挑战的
- Java还是带有明显的20年前的语言的特点:编译执行
- Java源码->字节码->虚拟机执行
- 新的语言普遍采用解释执行
- Java起步的时候也是做网页中运行的程序,但是Java太重了
为什么Java还是第一
- Java仍然是大多数情况下首先想到的
- 程序是人写的,用惯的工具不会一下子就扔了的
- Java适合于很多场合,不仅仅是服务器后端
- 语言的生命周期是很长的
- Java还在不断发展:IoC、泛型、Lamba和流计算
- 新语言的问题
- 普遍在应对多人协同开发上存在弱点
Python
- Python是跨平台动态编程语言,支持命令式编程和函数式编程,支持面向对象程序设计,拥有大量功能强大的内置对象、标准库、涉及各行业领域的扩展库以及众多狂热的支持者
- 使得各领域的工程师、科研人员、策划人员甚至管理人员能够快速实现和验证自己的思路、创意或者推测。
- 在有些编程语言中需要编写大量代码才能实现的功能,在Python中直接调用内置函数或者标准库方法即可实现,大幅度减少了代码量的编写和维护。Python用户只需要把主要精力放在业务逻辑的设计与实现上,在开发速度和运行效率之间达到了完美。
Python是粘合剂性质的语言,人生苦短何不Python,Python很好用
建议
- 对计算机本身(体系结构、操作系统、编译)感兴趣->C
- 想编程解决手头的问题(统计、AI、桌面小程序)->Python
- 有明确的需求(求职)->人家要什么学什么(Java、PHP、JavaScript、C++)
- 还没想好->Java
知识是学会的,不是教会的,要投入才会有收获
编程难在哪里
- 从问题到程序->思维问题
- 编程是一种创造性的活动
- 很多其他学科的实验是验证性或体验性的
- 数学也是在学习了解题思路后模仿做题
学习编程的4个阶段
- 能看懂和调试别人的代码
- 能在别人的代码基础上进行适当改写
- 能把多段已有的代码拼凑起来实现自己需要的功能
- 自己动手编程写代码实现特定功能需求
学编程的技巧
- 多读。读书破万卷下笔如有神。
- 多练。太极拳论曰“有招熟而渐悟懂劲,由懂劲而阶及神明,然而用力之久,不能豁然贯通焉”。
- 多想。学而不思则罔,思而不学则殆。
- 多交流。独学而无友,则孤陋而寡闻。
多读
- 读别人写的代码。
- 读那些你常用库、编程框架的源码
- 读那些你景仰的大牛的源代码,
- 读代码里的测试(测试本身就是一种有效的文档)
如何阅读
- 纵观全局
- 目录结构,函数调用关系,类派生和使用/依赖关系->工具软件
- 做记录
- 直接在代码中加入自己的阅读理解
- 执行->修改代码->执行
- 通过改变来深入理解
差距在哪里
- Warning有什么关系,能跑就行了!(×)
- Warning是隐藏的隐患,要解决所有的Warning
- 代码能编译不就行了,还要管那么多?(×)
- if else要大括号
- 缩进要几个空格还是一个TAB
- 不管怎么写,能跑的代码就是好代码!(×)
- 可维护性
- 可扩展性
代码的工程化的核心体现
- 工人做的产品是要用的
- 为将来写代码
- 为别人写代码
一些好的习惯
- 命令行的意识和能力
- 编写脚本来完成工作
- 以git为代表的代码版本管理的意识和能力
- 使用第一手资料的意识和能力,如去官网下载程序等。
结论
- 对计算机本身(体系结构、操作系统、编译)感兴趣->C
- 想学编程解决手头的问题(统计、AI、桌面小程序)->Python
- 有明确的需求(求职)->人家要什么学什么
- 还没想好->Java,Java开发工程师企业需求很多。