如何选择第一门编程语言

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011741311/article/details/78971169

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

知识是学会的,不是教会的,要投入才会有收获

编程难在哪里

  1. 从问题到程序->思维问题
  2. 编程是一种创造性的活动
    • 很多其他学科的实验是验证性或体验性的
    • 数学也是在学习了解题思路后模仿做题

学习编程的4个阶段

  1. 能看懂和调试别人的代码
  2. 能在别人的代码基础上进行适当改写
  3. 能把多段已有的代码拼凑起来实现自己需要的功能
  4. 自己动手编程写代码实现特定功能需求

学编程的技巧

  • 多读。读书破万卷下笔如有神。
  • 多练。太极拳论曰“有招熟而渐悟懂劲,由懂劲而阶及神明,然而用力之久,不能豁然贯通焉”。
  • 多想。学而不思则罔,思而不学则殆。
  • 多交流。独学而无友,则孤陋而寡闻。

多读

  • 读别人写的代码。
    • 读那些你常用库、编程框架的源码
    • 读那些你景仰的大牛的源代码,
    • 读代码里的测试(测试本身就是一种有效的文档)

如何阅读

  • 纵观全局
    • 目录结构,函数调用关系,类派生和使用/依赖关系->工具软件
  • 做记录
    • 直接在代码中加入自己的阅读理解
  • 执行->修改代码->执行
    • 通过改变来深入理解

差距在哪里

  • Warning有什么关系,能跑就行了!(×)
    • Warning是隐藏的隐患,要解决所有的Warning
  • 代码能编译不就行了,还要管那么多?(×)
    • if else要大括号
    • 缩进要几个空格还是一个TAB
  • 不管怎么写,能跑的代码就是好代码!(×)
    • 可维护性
    • 可扩展性

代码的工程化的核心体现

  • 工人做的产品是要用的
  • 为将来写代码
  • 为别人写代码

一些好的习惯

  • 命令行的意识和能力
    • 编写脚本来完成工作
  • 以git为代表的代码版本管理的意识和能力
  • 使用第一手资料的意识和能力,如去官网下载程序等。

结论

  • 对计算机本身(体系结构、操作系统、编译)感兴趣->C
  • 想学编程解决手头的问题(统计、AI、桌面小程序)->Python
  • 有明确的需求(求职)->人家要什么学什么
  • 还没想好->Java,Java开发工程师企业需求很多。

猜你喜欢

转载自blog.csdn.net/u011741311/article/details/78971169