使用的各种语言总结

计算机语言学习和使用

语言本身就是一种工具,一些语言提供了其他语言所没有提出的功能
选择有价值的语言,了解它们之间的区别,分别适合什么任务,以及它们的弱点是什么,能做什么?适合什么任务?是否可用?掌握程度? 
为你给定的任务选择最佳的语言
<1>工具相对而言是基础,使用工具的技能才是创造精美物品的关键
工具不是替我们做我们该做的工作,而是使我们有能力做我们的工作
 <2>明白不同的情况需要不同的解决方案,并将正确的工具用到正确的工作上
用实际的眼光来看待软件工具。切合实际的向工具投入时间和金钱,磨练你的工具。
<3>时刻准备试用新的工具,确保你所使用的工具是你所获得最适合的。
<4>了解工具嫩做什么,适合什么任务以及学习如何驾驭它
<5>拥有工具的源代码是非常有用的

计算机语言学习

编程语言的架构有三个特点,
一是基本的元素,
二是构成复杂内容的组合方式,
三是抽象能力以及一些机制。
关键字的掌握和区分以及联系,可以为在不同语言中切换带来一个很好的切入口。
除了关键字还有一些方法和重要的类型。在这里也作为关键字学习了。

基本的元素:      语言的类型系统
            语言的一致性

组合的手段:      JAVA组合 和继承      
抽象的机制:
    汇编      是对底层机器的轻微抽象
    命令式语言<C>   基于计算机的结构,对汇编的抽象,通过以函数为单元
    面向对象<JAVA>  基于对象
    函数式<Scala>   基于函数和模块

一些处理问题机制
    错误处理方式
    垃圾回收机制+异常处理机制
    状况机制
语言特性:

C语言

C语言是接触的第一门面向过程的语言,也可以称之为命令式编程语言。
关键字分为:
    数据类型: void char int float double short long  signed unsigned
               struct union enum typedef sizeof const 
    控制结构: if  else switch case default
              break  continue return goto
              for do while
            其他:auto  static  registor extern const volatile

JAVA语言

JAVA是面向对象的编程语言,面向对象中还是借鉴了C语言的一些特性
              数据结构:基本型和构造型,基本型是 byte boolean void  char int float double short long
            enum  const false true null
               控制结构: if else  switch case  default
                  break  continue  return  goto
                for  do while
                面向对象特征:  abstract  extends  class interface implements new
                    final static this super   instance of    private protected public
                    try catch throw finally throws
                    import package assert
            其他: synchronized  transient

Python语言

Python 是多范式编程,中间还有面向对象特性,函数式编程范式等
                数据:False True 
                控制结构: if  else  elif
                break continue return
                for while yield
        面向对象: class  def
                try except  raise  global assert
        函数式:  lambda is  as  and  with  in  form  or  not  
        其他 :  pass

Scala语言

Scala也是面向对象和面向函数式编程的多范式语言,使用了模式匹配case
数据: var  val  lazy true false null Unit
        控制结构: if  else
                  return match yield
                 for do while
        面向对象: abstract extends class trait  def object
                   final this super private protected
                  try catch throw
                   import package assert        
            函数式: with forSome  type case override sealed implicit
                    其他:

R语言

R语言也是一门很好的工具
                数据结构:numeric logical character complex matrix dataframe factor list table array NA Null NaNTRUE FALSE   function
                控制结构: if else  ifelse  
                break return case 
                repeat for in
                R语言循环特性不是很好,多习惯用向量化编程。apply之类的才是循环的王道。
         面向对象:S3类隐式定义类以及S4类。tryCatch  泛型
          其他:

SQL

SQL是工具性语言了
    数据类型:integer smallint decimal numberic float double 增加了tinyint ,mediunint ,bigint,BIT类型Mysql支持
           database  table index view
        一些命令
        DDL:create  drop  alter
        DML:select  insert delete update
        DCL: grant revoke

Shell 脚本

               数据类型:
       控制结构 if else
                  for

Excel工具

作为数据分析来说,适合的就是好的。Excel的操作是靠人去完成的。这个也是一个很好用的工具

不同的操作系统

编码
    window 一般是gbk的编码,读取utf-8的文件时,需要声明读取编码就OK了。 source(file,encoding="utf-8")
    linux/win两套环境,编码部分要是区别写的
换行符
    换行符是不一样的,
    MSExcel2007中采用的是 /n  转义字符
    记事本只支持  /r/n

不同语言的路径

路径表示方式
斜杠  /
反斜杠 \
斜杠
 Windows        C:\Program Files\Microsoft Office
C language      C:\User\Dae
C plus plus       C:\User\Dae
Python             C:\User\Dae
MATLAB              C:\User\Dae
反斜杠系统:
    Linux            /home/dmstsai
    Java             D:/Mycoding/Java
    MySQL          D:/My_IR/train_.csv   load data local infile 'D:\\My' 
    R language       C:/Users/Dage/Documents  C:\\Users\\age\\Documents
    HTML
    XML
\转义
网络文件路径
 浏览器    https://www.baidu.com/

编码

C语言
    gcc编译的时候 是当作 ansi格式处理,所以会出现乱码
JAVA
    对于Java由于默认的编码方式是 UNICODE,所以用中文也易出问题,常见的解决是
    String s2 = new String(s1.getBytes(“ISO-8859-1”),”GBK”);
网址路径的编码,
    用的是utf-8编码。查询字符串的编码,用的是操作系统的默认编码
R读取,统一用utf-8的。

不同语言安装类库

Java 扩展模块
    JDK\jre\lib\ext ,这个文件夹专门放置扩展的jar文件的地方
    或者创建Maven工程
Python 安装类库
    <1>第三方安装 pip  或者easy_install
    <2>setup.py install PIL源码 就可以通过源码方式安装了
R语言
CRAN(Comprehensive R    Archive Network)(R综合典藏网)

程序的文件后缀

语言后缀名 
    C language       .c       .obj
     C ++            .c++
    Scala           .scala    .class 
    Java            .java     .class
    Python           .py                                          
    R language      .R      .Rdata 
    MATLAB          .m       .mat 
    Perl             .pl              
    PHP              .php
    HTML             .html
    XML              .xml
    MySQL            .sql

关于Python,py pyw是源文件,pyc pyo是编译的文件 ,
pyd其实是动态链接库本质是windows的dll文件或者unix的so文件    pyw是没有控制台的,也就是默认用pythonw打开的文件
py是默认用python打开的。
pyo是优化的编译文件(虽然目前跟pyc文件基本上没什么区别

程序文件后缀名

安装程序
安装包 软件的所有文件释放到硬盘上,完成修改注册表、修改系统设置、创建快捷方式等工作
可执行程序 卸载程序

打包成双击执行
 命令行执行
 exe
 jar

后缀名 文件类型 
.h     头文件
.lib   静态链接库
EXE    可执行程序文件 
COM    可执行命令文件 
BAT    可执行批处理文件    由DOS或Windows系统内嵌的命令解释器来解释运行。本质,是一堆DOS命令按一定顺序排列而形成的集合。
TXT     文本文件 
DAT     数据文件 
BAK     备份文件 
DLL                 Dynamic Link Library  通过使用 DLL,程序可以实现模块化,由相对独立的组件组成

以.exe为后缀的文件就是可执行文件, 
以.bat为后缀的文件就是可执行批处理文件
动态链接需要发行DLL,但EXE本身比较小,静态链接不需要发行DLL,但本身就比较大了
静态链接产生的执行文件执行是不需要库文件的支持,而动态链接产生的执行文件运行过程中需要库文件支持
静态链接库的使用需要库的开发者提供生成库的.h头文件和.lib文件。要想用就得全要!要不就都别要!:)
linux库文件分为静态库和动态库两种。静态库习惯以.a 结尾,而动态库习惯以.so(shared object)结尾。而且必须以lib开头

不同语言的注释

注释 行注释 块注释
语言             注释符号       注释要求
 C language     /* 注释  */  
 C ++           //               行注释
 Python          #   
 MATLAB          %      
Java            //                                         
 R language      #       
Perl            #                          
XML             <!-- -->
MySQL           -- 注释

PHP支持三种注释符号,分别如下:
1.C++风格的单行注释://
2.C风格的多行注释:/*……*/
3.shell风格的注释:#
 HTML
1、<!--注释内容-->
2、//注释内容     (在css或javascript中插入单行注释)
3、/*注释内容*/   (在css或javascript中插入多行注释)
MySQL注释符有三种:
1、#注释
2、"-- 注释" (注意--后面有一个空格)
3、/* 注释 */
MATLAB
单行注释 %
块注释符号%{ 和 %}

垃圾回收机制+异常处理机制

异常被认为是一种很优雅的处理错误的机制,
使用try/catch(或类似的关键字)进行捕捉,
然后进行处理或者继续向上抛出异常
C 本身的错误处理风格是 error code
异常机制:即Java或者类似风格的exception handling,使用try/catch(或类似的关键字)进行捕捉,然后进行处理或者继续向上抛出异常;
状况机制:主要指的是Common Lisp风格的做法,即除了抛出异常、捕捉异常以外,还有重启(restart)机制,可以向下移动到某一个指定的代码处理点,例如从错误处继续运行等做法。
希望达到的效果本质上就是避免程序未来会进入acces`1s violation的状态。
想做到这一点,方法也是很简单粗暴的——
只要你在函数里面把运行前该对函数做的检查都查一遍就好了。
这个无论你用exception还是用error code,写起来都是一样的。
区别在于调用你的函数的那个人会怎么样

编程风格

理解自己要使用编程风格和开发方式,了解编程风格是
熟悉自己和其他原子的方式,了解开发方式来进行团队作战的方式
怎么理解所谓的编码风格?
提出的解决方案,以及解决方如何分解,使用目标语言构建

1)结构化编程

 一种命令式的编程方法,运用算法分解。以过程为中心,运用自顶向下
的设计技术,考虑完成任务所需的步骤的顺序。
 结构化编程技术特征
 常用的实现语言:C

2)面向对象的编程

另外的一种命令式的的风格,以数据为中心的模型,考虑数据的生命以及
数据的移动方式。
面向对象的编程的技术特征:抽象、封装、继承、多态
常用的实现语言:Java、C++、Smalltalk python

3)函数式编程

一种声明式的编程风格,基于更加数学化的编程模型。
常见的函数式编程语言:Lisp、Scheme <R> Scala Python

4)逻辑编程

另外一种声明式的编程风格,是想执行器提供一组规则和一个目标陈述
 编程语言:Prolog

编程思想

从自己的错误中学习,从别人的错误中学习   产品级的代码  工具型代码

原则:

编程不要相信,用怀疑的眼光审视输入和输出
编码的目标是清晰,在此基础上才可以选择简洁
设置权限,增加预防措施
 编译的报错也要开启,兼听则明,虽然这回花费一些时间
 使用静态工具检查
  使用安全的数据结构
约束
防御性编程有助于程序的安全,防范恶意的滥用和破坏。
进攻性编程
    主动尝试打破代码常规<测试时代>

(1)编排代码的格式和板式

 使用括号<悬挂式allman<java R>    K&R式<C perl >>

(2)代码的命名 和记录

  以下划线 以点  以大小写字母  匈牙利命名法
  <变量通常是名词或者动词化的名词,变量通常小写字母开头>
  <函数在逻辑上是一种行为,多用动词,从使用者的角度命名>
  <命名文件>同一类型不要仅仅是大小写的区别,不同类型的文件尽量不要同名

(3)编写注释和处理错误

自文档话的代码
 记录创建日期
 将旧代码标记为过时
描述每个函数的参数
注释是我们的生命线、记忆钥匙和代码的随篇指导,锦上添花
注释的目标读者是人,而不是机器,注释是主观的东西,编写够用的注释
注释   解释代码的目的、选择实现方式的策略   注释异常、特殊情况 
注释的方式  行尾注释 缩进注释 常位于代码的上方
错误从何而来 用户错误 程序员错误 意外情况
错误报告机制 返回值  错误状态变量 异常 终止模式 恢复模式
检测错误 处理错误  <错误来自何处,为什么会,严重性 如何修正>
处理 尽早。尽可能日志报告传播恢复

(4)编码的风格和配合

理解自己要使用编程风格和开发方式

工具

源代码编辑工具
代码构建工具 编译器 链接器
调试和调查工具
语言支持工具
文档工具

测试类型

单元测试 组件测试 集成测试 回归测试 负载测试  压力测试 疲劳测试 可用性测试

调试

 编译失败  运行时崩溃  非预期行为

优化

避免优化,从开始的时候就考虑性能

构建安全的代码

编程如战争

阅读代码

目的:
(1)将代码作为参考的文献; 
(2)将代码作为范例加以学习; 
(3)维护现有的代码; 
(4)改进现有的代码; 
(5)重用已有的代码; 
(6)对代码进行审查。

学习

1. 首先了解该语言的基本数据类型,基本语法和主要语言构造,主要数学运算符和print函数的使用,
2. 其次掌握数组和其他集合类的使用,有基础的话可以理解一下泛型,如果理解不了也问题不大,后面可以补;
3. 简单字符串处理。所谓简单,就是Regex和Parser以下的内容,什么查找替换,截断去字串之类的。不
4. 基本面向对象或者函数式编程的特征,无非是什么继承、多态、Lambda函数之类的
5. 异常、错误处理、断言、日志和调试支持,对单元测试的支持。你不一定要用TDD,但是在这个时候应该掌握在这个语言里做TDD的基本技能;
6. 程序代码和可执行代码的组织机制,运行时模块加载、符号查找机制,这是初学时的一个难点,因为大部分书都不太注意介绍这个极为重要的内容;
7. 基本输入输出和文件处理,输入输出流类的组织,这通常是比较繁琐的一部分,可以提纲挈领学一下,搞清楚概念,用到的时候查就是了。
8. 该语言如何进行callback方法调用,如何支持事件驱动编程模型。在现代编程环境下,这个问题是涉及开发思想的一个核心问题,几乎每种语言在这里都会用足功夫,.NET的delegate,Java的anonymous inner class,Java 7的closure,C++OX的 tr1::function/bind,五花八门。如果能彻底理解这个问题,不但程序就不至于写得太走样,而且对该语言的设计思路也能有比较好的认识;
9. 如果有必要,可在这时研究regex和XML处理问题,如无必要可跳过;
10. 序列化和反序列化,掌握一下缺省的机制就可以了;
11. 如果必要,可了解一下线程、并发和异步调用机制,主要是为了读懂别人的代码,如果自己要写这类代码,必须专门花时间严肃认真系统地学习,严禁半桶水上阵;
12. 动态编程,反射和元数据编程,数据和程序之间的相互转化机制,运行时编译和执行的机制,有抱负的开发者在这块可以多下些功夫,能够使你对语言的认识高出一个层面;
13. 如果有必要,可研究一下该语言对于泛型的支持,不必花太多时间,只要能使用现成的泛型集合和泛型函数就可以了,可在以后闲暇时抽时间系统学习。需要注意的是,泛型技术跟多线程技术一样,用不好就成为万恶之源,必须系统学习,谨慎使用,否则不如不学不用;
14. 如果还有时间,最好咨询一下有经验的人,看看这个语言较常用的特色features是什么,如果之前没学过,应当补一下。比如Ruby的block interator, Java的dynamic proxy,C# 3的LINQ和extension method。没时间的话,我认为也可以边做边学,没有大问题。
15. 有必要的话,在工作的闲暇时间,可以着重考察两个问题,第一,这个语言有哪些惯用法和模式,第二,这个语言的编译/解释执行机制。

blogroll

social