zoukankan      html  css  js  c++  java
  • 如何掌握一门编程语言的运用

    引子

    在知乎上看到有一个提问:“如何才能精通一门编程语言?”

    我个人在多年开发生涯里,项目中使用过 Java,Groovy ,JavaScript,Python,PHP ,学习过 C,Scala, Go, Clisp ,Shell, 也看过一些语言特性的争论。最近在学习 Go,想想正好可以梳理下,如何去掌握一门新语言的运用,作为学习新编程语言的指导方法论。

    “谦虚”的程序员从来不敢用“精通”一词,因为精通意味着你能够理解关于这个事物的几乎一切原理实现细节,从地核到天空,从指令集到编译实现,乃至语言设计的各种权衡取舍,使用它所面对的各种问题。

    精通编程语言并不是特别值得追求(除非对编程语言非常有兴趣或者想设计一门编程语言),掌握原理和设计才是真正值得追求的。

    就像学会用一门语言不是最重要的,重要的是能用语言表达什么以及如何表达。

    学习语言设计思想

    学习语言,要注重语言背后的设计思想而不是形式(语法糖)。比如:

    • 变量声明,究竟是把类型放在变量名前面好,还是变量名放在类型前面好?为什么?

    • 强(弱)类型系统与静态(动态)类型系统各有什么优缺点?

    • 类型推导是怎么回事?有什么益处和弊端?

    • 作用域怎么回事?如何有效避免名字冲突?

    • 传值引用与指针引用的区别?各应用在什么场合?有什么注意事项?

    • 在语言使用层面完全屏蔽指针是合理的还是不合理的?为什么?

    • (对象指针)是显式声明好还是隐式声明好?

    • 为什么说组合优于多重继承?多态(继承与实现)究竟应该针对行为还是针对属性?

    • 如何实现类型检查安全的泛型机制?

    • 匿名类与闭包、lambda 是怎么回事?为什么要有这些特性?

    • 函数即是对象怎么理解?代码即是数据怎么理解?

    • 结构化/面向对象/函数式/元编程是什么?各有什么益处和弊端?

    • 并发、垃圾回收、工程管理特性、代码规范内置在编程语言里,好还是不好?利弊如何?

    • 网上的语言特性的争论,分歧点在哪里?为什么有人说这个语言特性设计得好(或不好)?

    弄清楚这些语言背后的设计思想,或许能更快地熟悉一门新编程语言。而要真正掌握一门编程语言,最好的途径莫过于自己去设计和实现一门稍微简单的编程语言或 DSL 了。


    如何判断自己是否足够掌握一门语言的运用

    1. 学会使用语言的良好子集来构建程序,而不是贪多求全;
    2. 深刻理解作用域;
    3. 深刻理解变量的初始化顺序和过程;
    4. 学会使用函数来构建模块化程序;
    5. 学会识别指针和引用,用对指针传值和引用传值;
    6. 学会根据问题域构建对应的结构体或对象;
    7. 学会接口、类与对象的用法;
    8. 学会此语言的习惯地道用法;
    9. 学会和掌握此语言的代码规范;
    10. 学会将中小规模的程序划分为多个逻辑单元;
    11. 能够运用编程语言实现基本的数据结构,比链表、哈希、二叉查找树;
    12. 能够用编程语言实现一个背包问题求解(动态规划);
    13. 能够运用编程语言实现一个迷宫(回溯算法);
    14. 做一个单词解析程序;
    15. 做一个简单的管理系统;
    16. 做一个简单的爬虫程序;
    17. 学习如何写出Bug 少的程序;
    18. 学习如何写清晰的可维护性良好的程序;
    19. 学习并发编程(高阶内容);
    20. 学习网络编程(高阶内容);
    21. 学习反射和泛型(高阶内容);
    22. 学习如何对该语言项目进行编译、打包、部署和运行(高阶内容);
    23. 学会语言的编译实现,比如 汇编、字节码、 虚拟机、CPU 指令集(高阶内容);
    24. 从入门到放弃……
  • 相关阅读:
    WEB浏览器与服务器通讯过程
    lua及luci学习
    让apache2不开机启动,管理Ubuntu的开机启动项
    在linux中如何调试C语言程序
    如何去除configure的默认选择-g O2
    C语言使用SQLite3数据库
    Linux下的C程序如何调用系统命令,并获取系统的输出信息到C程序中
    Opencv step by step
    Opencv step by step
    Opencv step by step
  • 原文地址:https://www.cnblogs.com/lovesqcc/p/15345849.html
Copyright © 2011-2022 走看看