快速掌握一个语言最常用的50%

2023-05-16

现在的开发工作要求我们能够快速掌握一门语言。一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查Google边学习;其二是花很多时间完整地把整个语言学习一遍,做到胸有成竹,然后再开始做实际工作。然而这两种方法都有弊病。第二种方法的问题当然很明显,不仅浪费了时间,偏离了目标,而且学习效率不高。因为没有实际问题驱动的语言学习通常是不牢固不深入的。有的人学着学着成了语言专家,反而忘了自己原本是要解决问题来的。第一种路子也有问题,在对于这种语言的脾气秉性还没有了解的情况下大刀阔斧地拼凑代码,写出来的东西肯定不入流。说穿新鞋走老路,新瓶装旧酒,那都是小问题,真正严重的是这样的程序员可以在短时间内堆积大量充满缺陷的垃圾代码。由于通常开发阶段的测试完备程度有限,这些垃圾代码往往能通过这个阶段,从而潜伏下来,在后期成为整个项目的毒瘤,反反复复让后来的维护者陷入西西弗斯困境。

实际上语言学习有一定规律可循,对于已经掌握一门语言的开发者来说,对于一般的语言,完全可以以最快的速度,在几天至一周之内掌握其最常用的50%,而且保证路子基本正宗,没有出偏的弊病。其实真正写程序不怕完全不会,最怕一知半解的去攒解决方案。因为你完全不会,就自然会去认真查书学习,如果学习能力好的话,写出来的代码质量不会差。而一知半解,自己动手土法炼钢,那搞出来的基本上都是废铜烂铁。比如错误处理和序列化,很多人不去了解“正路子”,而是凭借自己的一知半解去攒野路子,这是最危险的。因此,即使时间再紧张,这些内容也是必须首先完整了解一遍的。掌握这些内容之后进入实际开发,即使有问题,也基本不会伤及项目大体。而开发者本人则可以安步当车,慢慢在实践中提高自己。

以下列出一个学习提纲,主要针对的是有经验的人,初学者不合适。这个提纲只能用于一般的庸俗编程语言学习,目前在流行编程语言排行榜上排前20的基本上都是庸俗语言。如果你要学的是LISP之类非庸俗语言,或是某个软件中的二次开发语言,这里的建议未必合适。还是那句话,仅供参考。

 

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. 有必要的话,在工作的闲暇时间,可以着重考察两个问题,第一,这个语言有哪些惯用法和模式,第二,这个语言的编译/解释执行机制。

至此语言的基本部分就可以说掌握了,之后是做数据库、网络还是做图形,可以根据具体需求去搞,找相应的成熟框架或库,边做边学,加深理解。对于一个庸俗语言,我自己把上面的内容走一遍大概要花2-3周时间,不能算很快,但也耽误不了太多事情,毕竟不是每个月都学新语言。掌握了以上的内容,就给练武术打好了基本功,虽然不见得有多优秀,但是肯定是根正苗红,将来不必绕大弯子。就算是临时使用的语言,把上面这个提纲精简一下,只看蓝色重体字的部分,大致能在几天到一周内搞定,不算是太耗时,而且写出来的代码不会太不靠谱。

以上提纲未设及内存模型。对于C/C++,这个问题很重要,要放在显著位置来考虑,但对于其他语言,这个问题被透明化了,除非你要做hardcore项目,否则不必太关注。

孟岩:快速掌握一个语言最常用的50% (csdn.net)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速掌握一个语言最常用的50% 的相关文章

随机推荐

  • 2021-10-15Ubuntu开机进入tty1,无法进入图形界面

    1 tty1界面输入账号密码 2 输入指令 xff1a sudo apt install ubuntu desktop 3 重启 xff1a reboot
  • 进程互斥、同步--多生产者多消费者问题

    1 问题描述 xff1a 有一个缓冲区 xff0c 生产者1和生产者2分别生产产品1和产品2 xff0c 消费者1和消费者2分别消费产品1和产品2 只有当缓冲区空时 xff0c 生产者才可以向缓冲区生产产品 当缓冲区不空时消费者1或者2才可
  • 剑指 Offer 03. 数组中重复的数字

    https leetcode cn com problems shu zu zhong zhong fu de shu zi lcof span class token keyword class span span class token
  • VScode连接服务器+SFTP同步文件

    VScode连接服务器 43 SFTP同步文件 1 VScode远程连接服务器2 Vscode本地与远程文件同步 1 VScode远程连接服务器 应用商店安装remote development 此时会自动安装其他的 xff08 Remot
  • MyBatis和MyBatisPlus关系

    MyBatis和MyBatis Plus都是用来操作数据库的框架 MyBatis是一个持久层框架 xff0c 它的核心功能是将Java程序中的对象映射到数据库表中 MyBatis Plus是在MyBatis的基础上进行了封装和增强 xff0
  • 最全GPU架构知识介绍

    1 GPU的起源 GPU缩写为Graphics Processing Unit的 xff0c 一般称为视觉处理单元 GPU被广泛用于嵌入式系统 移动电话 个人电脑 工作站和电子游戏解决方案当中 现代的GPU对图像和图形处理是十分高效率的 x
  • ClassNotFoundException: org.slf4j.Logger报错问题

    ClassNotFoundException org slf4j Logger报错解决 1 jar包没有导入2 检查idea编译器 1 jar包没有导入 检查一下jar包是否添加到依赖 xff08 这一部分是检查pom xml这个文件 xf
  • zabbix报警

    zabbix 告警有三种方式 xff1a 1 邮件 2 短信 3 微信 最常用的就是邮件报警 使用第三方SendEmail邮件报警 1 将sendEmail v1 56 tar gz报警小程序上传至服务端 root 64 localhost
  • kaili下载教程

    kaili下载 不经意在社区看了一下好像没有最新的kaili下载教程 xff0c 所以就想着做一个 kaili下载 xff1a https docs kali org 1 进入官网首页 xff0c 最下面的两个箭头可以直接跳过第2步 xff
  • 2018.9.14-Asp.net实现动态主题(皮肤)更改

    Asp net实现动态主题 xff08 皮肤 xff09 更改 使用 xff1a Microsoft Visual Studio 2010 系统 xff1a win10 项目结构图 xff1a 第三个按钮 xff1a 更改项目目录显示方式
  • LVM——linux缩小逻辑卷(xfs)

    在这里 xff0c 我们将向您展示如何在Linux中收缩LVM卷或分区 xff0c 方法是首先调整文件系统的大小 xff0c 然后调整逻辑卷的大小 如果您尝试执行相反操作请看 xff1a LVM linux增加LVM分区 注意 xff1a
  • Linux——重启服务器后磁盘名称错乱

    背景 某台服务器有如下文件系统 xff0c fwork1 挂载在 dev sda1 xff0c fwork2挂载在 dev sdb1 某次添加新硬盘重启后 xff0c 变成了fowrk1挂载在 dev sdb1 xff0c fwork2挂载
  • linux卡住freeze解决办法

    状况 踢出用户后启动服务器 xff0c 在机房点击键盘没有反应 xff0c 等待一个小时服务器一直卡在下面界面 一些底层软件的 bug 也可能导致一些奇怪的死机问题 Linux 运行过程中 xff08 为了提高性能 xff09 会把大量的数
  • 鸟哥私房菜-Linux文件格式化处理 grep|egrep|awk|sed|diff|cut|sort|uniq|wc|xargs

    grep grep基础用法 文件中搜索特定字符串 grep 39 query 39 file 或者 cat file grep 39 query 39 查询包含特定字符串的文件 sudo grep r 字符串 目录 同时 xff0c fin
  • Linux——磁盘分区与挂载

    Step 1查看当前磁盘的分割表类型 sudo parted dev sda print Error dev sda unrecognised disk label Model LENOVO ST2400MM0129 scsi nbsp n
  • 鸟哥私房菜—Vim编辑器的常用快捷键

    一 移动游标的方法 页面级别 Ctrl 43 b Ctrl 43 PgUp 向上移动一页 Ctrl 43 f Ctrl 43 PgDn 向下移动一页 Ctrl 43 u 向上移动半页 Ctrl 43 d 向下移动半页 行级别 G 移动到这个
  • Linux—yum/apt-get软件安装

    yum用法 yum的查询 yum option 查询工作目录 相关参数 option xff1a y 当yum要等待使用者输入时 xff0c y自动提供yes的回应 installroot 61 some path 将该软件安装在指定目录
  • SCM和NVM是什么鬼,与NVMe是什么关系?

    SSD存储介质和接口技术一直处于不断向前发展和演进的过程 SSD分为几个阶段 xff0c 第一个阶段是SATA SSD或者SATA SAS SSD为主导 xff0c 这个阶段介质以SLC和eMLC为主 第二个阶段是PCIe SSD xff0
  • Java笔记之Maven,import找不到jar包(Cannot resolve symbol ‘fastjson‘)

    Spring Boot默认是没有阿里巴巴的jar包的 xff08 如果这里有fastjsonjar包 xff0c 应该多一行Maven com alibaba fastjsonjar 1 2 38 xff09 此时在类文件中使用下面的语句该
  • 快速掌握一个语言最常用的50%

    现在的开发工作要求我们能够快速掌握一门语言 一般来说应对这种挑战有两种态度 xff1a 其一 xff0c 粗粗看看语法 xff0c 就撸起袖子开干 xff0c 边查Google边学习 xff1b 其二是花很多时间完整地把整个语言学习一遍 x