学习任何一门编程语言,都可以分成三个步骤。
第一步,通过书和视频课掌握基本语法。掌握编程语言基本语法的途径比较多,如书、视频课、线下课等,可以结合自己的实际 情况进行选择。笔者总结了学习编程语言必须掌握的10 个要点。
1)学习编程语言的基础知识。编程语言的基础知识包括基本数据类型、基本语法和流程控制(判断、分支、循环 等)、主要数学运算符、打印输出函数的使用。
2)掌握数组和其他集合类的使用。数组和其他集合类的使用包括了解数据的类型和特性,能否为空,集合是否线程安全, 主健是否重复。
3)简单字符串处理。所谓简单,就是Regex 和Parser 的内容,查找替换、截取字符串等,另外要注意字符 编码问题。
4)掌握基本面向对象或函数式编程的特征。对继承、多态、Lambda 函数等,概念要吃透,掌握用法。
5)掌握代码调试的技能。代码调试的技能包括异常、错误处理,断言、日志和调试等。
6)了解程序代码和可执行代码。了解程序代码和可执行代码,包括组织机制、运行时模块加载、符号查找机制。例如, Java 的JVM 原理和调优,结合编译原理理解Java 和PHP 等编译、运行的异同。
7)掌握基本输入输出和文件处理、输入输出流类等。例如,Java 编程中文件读写的常用类和方法,如何防止读取量太多“撑爆”内存,以及读 写的效率问题等。
8)掌握编程语言如何进行callback 方法调用,如何支持事件驱动编程模型。在现代编程环境下,这个问题是涉及开发思想的核心问题,几乎每种语言在这里都会下 足功夫,如.NET 的delegate、Java 的anonymous inner class、Java 7的closure 和C++ OX 的 tr1::function/bind 等,要深入掌握其设计模式的运用。
9)序列化和反序列化
10)掌握一些编程语言特性。掌握动态编程、反射和元数据编程、数据和程序之间的相互转化机制、运行时编译和执 行的机制。以上就是学习编程语言需要掌握的基础知识,在啃书本、掌握原理的基础上,要动手做 一些Demo,掌握基本语法。
第二步,通过调试简单项目掌握开发框架的用法。
这个方法是根据笔者的个人经验总结出来的,笔者在刚参加工作的时候,虽然已经看了 不少编程书籍,也跟着书中的案例写了一些代码,但在实际工作中总感觉力不从心,现 在回想起来就是因为缺乏项目经验。恰好当时的主管要求搭建一个内网门户,内网门户 里要有BBS、Wiki、聊天室、会员中心、下载中心等十多个子系统,笔者当时的思路就 是去网上下载多套系统进行整合。经过两个多月,十多个系统的整合、搭建、数据打通,不懂的地方问Google、问同事, 笔者的项目经验得到了快速的积累,常见的系统架构方式都能说出个所以然,笔者至今 仍非常庆幸,那段工作经历大大拓宽了我的技术视野。对于刚开始学习编程的同学来说,从0 开始搭建一个系统是比较困难的,一个快速提高 编程能力的方法就是从GitHub 上下载一些简单的项目,在本地计算机上“跑”起来,这些 项目一般都会有“step by step”的说明,教你如何搭建开发运行环境,让Demo 能够运 行在自己的计算机上,然后试着在这个项目中改变布局、增加字段、调试,把代码通读 一遍,不明白的地方可以问Google或有经验的同学。通过调试几个项目可以掌握开发框架的基本用法,对语法、开始框架、中间件、数据库 的使用方法有基本的认识。
第三步,从0 开始做一个项目,提高编程综合能力。
工程师的本质是什么呢?用工程的方法解决实际问题,所以我们非常强调动手能力。曾 经读过一个故事,一位华人理工科教授Li 去他的朋友Dived 家做客,Dived 是硅谷的技 术高管,为了照顾Li 的口味,Dived 准备了中餐,当饭菜准备好,大家围着桌子坐下 后,发现少了一副筷子,由于不常吃中餐,Dived家里没备那么多筷子。这时,Dived 站了起来说:“稍等一会。”大约过了10分钟,Dived 带回一副崭新的筷子,原来他用家 里的木头材料动手制作了一副筷子。Li 非常惊讶和感慨,虽然Dived 身为技术高管,较 少做一线的技术工作,但是血液里流淌着的是工程师精神。这个故事告诉我们,作为工程师,动手解决问题的精神是我们的“底层操作系统”,好的 工程师必须具备工匠精神。编程的技巧全在细节,不从0 开始做一个项目,就无法体会每一个技术点的运用。从0 开始做一个项目,便于形成自己的工具箱。从开发效率来说,优秀程序员和普通程序员 的差别就在于工具箱使用得熟练与否,当然还有算法、设计模式、代码结构等。
以Java 开发为例,需要整合Spring Boot、Dubbo、MyBatis、ZooKeeper、Redis 等,还需要熟悉数据库、缓存的用法、Linux 系统的安装和使用、数据库的安装和使 用、数据库表的设计、数据模型的设计等。经过以上三个步骤,就可以成为一名工业级编程水平的初级开发工程师了。如果想要进 一步提高,就需要下苦功夫,深入掌握编译原理、架构背后的设计理念、算法、优秀项 目的源码等。