- 大话编程
- 一个故事讲完 https
- C 老头和 Java 小子的硬盘夜话
- 我是一个函数
- 操作系统是个大骗子?
- 90 后 老头儿 和 00 后 Go 小子的硬盘夜话
- 爱炫耀的数据库老头儿
- 浏览器:一个家族的奋斗
- 浏览器家族的安全反击战
- 黑客三兄弟
- 从读写分离到 CQRS,张大胖是如何解决性能问题的?
- 两个程序的爱情故事
- 两个程序的爱情故事(续)
- 烂代码传奇
- 机房夜话
- 干掉状态:从 session 到 token
- 张大胖的 docker 之路
- 从 SOA 到微服务
- XML 的传奇人生
- 从密码到 token, 一个授权的故事
- 编程世界的那把锁
- 加锁还是不加锁,这是一个问题
- 这个动物园, 两年也逛不完
- 张大胖和 CAP 定理
- 一个翻译家族的发家史
- 张大胖和单元测试
- Java 帝国
- 一个著名的日志系统是怎么设计出来的?
- Java 帝国之泛型
- Java 帝国之动态代理
- 从兄弟到父子:动态代理在民间是怎么玩的?
- Java 注解是怎么成功上位的?
- Java EE 要死掉了?
- Java 帝国之宫廷内斗
- Java 帝国之宫廷内斗(2)
- 当世界上只剩下一个 Java 程序员
- 持久化:Java 帝国反击战
- 什么是框架?
- 学习 Java 虚拟机没用? 听听当事人是怎么说的!
- 聊聊 Java 平台上的非 Java 语言
- Java 帝国之消息队列
- Java 帝国之 JMS 的诞生
- Java 帝国之单例设计模式
- 对 Java Inputstream 的一次采访
- ASM: 一个低调成功者的自述
- 序列化: 一个老家伙的咸鱼翻身
- Java IO 的自述
- JDK 先生最近有点烦
- 什么是框架(续)?
- 说 空话,做实事: 谈谈多态
- Kotlin 初体验
- 小白科普
- 小白科普:分布式和集群
- 什么是 Zookeeper?
- 小白科普:悲观锁和乐观锁
- 小白科普:LDAP 有什么用?
- 小白科普:服务那点事儿
- 小白科普:Netty 有什么用?
- 老司机经验
- 后端程序员都做些什么?
- 为什么要学习 HashMap 的底层原理?
- 小心,别被今日头条给困住了!
- 对自己狠一点,开始写作吧
- 开源代码啃不动,不如先定个小目标
- Python 这么简单还用学吗?
- 作为一个有追求的程序员,你应该掌握的七种武器
- 给设计模式说句公道话
- 时间是这么被浪费掉的
- 你真正付出了全部努力了吗?
- 写给初学者:编程的本质
- 在大学期间更应该学习什么?
- 看看 悲催 的码农得学多少东西?
- 学习编程的四兄弟
- 那些年,我后悔没做好的事情
- 我为什么对后端编程情有独钟?
- 当我们在学习编程语言时,我们在学习什么?
- 编程需要多少数学知识?
- 想成为编程高手,一定要学汇编吗?
- 你必须理解的计算机核心概念
- 你的需求是怎么描述的?
- 白话敏捷软件开发
- 人在职场
- 凡事必先骑上虎背,给性格内向的程序员聊几句
- 为什么能力优秀的人当了主管以后反而不行了呢?
- 不想做技术了,还有一条路
- 纪念我最有效率的一次加班
- 书写「简历」时,需要规避的错误。
- 上天还是入地?
- 工作 6 年,半路出家到 CTO
- 只是 Work 还不够,更重要的是 Think
- 我所尊敬的三位女程序员
- 我们向印度人学习什么?
- 你去下家面试,怎么评价你在这家公司做的工作?
当我们在学习编程语言时,我们在学习什么?
有人兴冲冲地跑来告诉你出现了一门新的编程语言, 语法优美, 功能强大而灵活, 由 某某大牛设计,某大厂在后面背书, 某某知名软件就是用这个语言写的, 将来地前(钱) 途大大地光明, 你被打动了, 决定马上去学一下。
对于一门编程语言, 我们到底学习什么东西呢?
1
基本语法
首先肯定是语法, 像数据类型、标识符、关键字、运算符、注释、 流程控制语句等等。
如果你之前学过一门编程语言,再去学新的语言,会发现在基本的语法层面, 这些语言都差不太多。
因为都是 命令式编程语言 , 程序员要精确的告诉计算机用何种指令做事情, 是对计算机硬件的抽象,命令式程序本质上就是一个冯诺依曼机的指令序列。如果你学的是函数式编程, 那就大不相同了。
对于命令式编程, 最基本的控制语句就这么三种: 顺序、分支、循环。
当然不同的语言, 对于这基本的流程控制会有一些变体, 例如 do ... while, switch .. foreach 等等, 但本质都是一样的。
对于基本的语法, 我相信很多人都能迅速掌握。
2
基本的数据结构
想象一下, 假设 Java 中没有集合框架, 什么东西都需要自己来做, 那写起程序来该有多累!
现在的语言除了基本的语法之外 ,都会有内置的强大的数据结构, 方便程序员来编程 。
这些数据结构中最常见的是这几个:
1. 字符串
实际代码中会有大量对字符串的操作,现在的语言都有良好的支持, 需要学习下相关的 API。
2. 可以动态增长的数组
这也是一个非常常见、非常有用的数据结构, 在 Java 中就是 ArrayList, Python 就是列表, Ruby 中称为数组。 由于其应用的广泛性, 一定要好好学习下它的用法。
特别值得一提得是, 很多动态语言对数组提供了很多强悍的操作, 很轻松的可以把它当作栈、队列来使用。
3. 用来存储 key - value 这样值对的集合
Java 中的 Map , Python 中的字典, ruby 的 hash 表均属此类
绝大部分程序,经常使用的也就是上面三个数据结构, 其他的还有无重复元素的集合(Set) 等等。
3
面向对象
看完语法和数据结构, 接下来可以看看面向对象在这个语言中是怎么实现的,对于命令式编程, 面向对象简直就是标配, 没有面向对象的支持, 简直就不好意思和别人打招呼。
有人说面向对象已死, 实际情况呢? 绝大部分软件还是以面向对象为基础构建起来的, 所以不要听风就是雨, 老老实实地去学封装、继承、多态吧。
如果你已经掌握了面向对象的设计和编程的思维, 那对于学习新语言的 OO 来说, 那真是太简单了, 基本上就是一点点语法的区别。
例如继承, Java 用 extends , Ruby 用“<” , Python 用 括号来表示, 大同小异, 只不过有些语言只支持单继承, 有些支持多继承, 更加复杂一些。
对于封装, 各个语言也是差不多,一般都有 private , proteted , public 这三个保护的级别,也是表现形式不一样。
对于多态, 这是很多静态语言的专利, 动态语言用的是 Duck Typing , 比多态更加灵活, 需要仔细揣摩下和多态的区别, 优势和劣势。
4
突破内存
学到这里, 你应该可以用这门语言来写程序了, 但是你很快就会发现,程序只能在内存中折腾,最多能输出到毫无趣味的控制台上, 还无法访问硬盘和网络, 这也是编程语言必须提供的重要特性。
不同的语言对硬盘和网络的抽象大相径庭, 例如 Java 试图把所有的东西都称为 IO, 抽象出了一套优雅但是不太好用的 API。 相比而言像 Ruby 和 Python 对硬盘文件的操作就简单的多。
对 XML 和 JSON 的操作是必须要掌握的技能, 因为他们的用途实在是太广泛了。
对于网络编程, 至少要理解 Socket 和 HTTP, 一个是传输层,一个是应用层, 各大语言对 Socket 和 Http 编程都有很好的支持。
5
让多任务并发执行
线程的概念对于初学者,或者说没有计算机基础的同学们学起来有点难度, 因为要理解什么是进程, 什么是线程 ,为什么要有进程和线程, 有点偏向计算机的底层了。
并发编程会涉及到线程之间的同步和通信, 如何加锁,防止死锁, 线程池等很多烦人的知识点, 虽然说在实际工作中都封装好了, 业务编程中用的少, 但是要理解概念。
对于各个语言来说, 良好的线程支持也是标配, 要了解相应的 API, 至少能用他们写出小程序来。
6
语言特性
各个语言都有自己的特性, 例如 Java 的反射/范型/注解, Ruby 的 block, 元编程, javascript 的原型/闭包/函数等等。 这些特性对于写出优雅漂亮的程序有极大帮助, 一定要掌握。
7
GUI
GUI 一般指的桌面编程和手机端编程的图形用户界面, 各大语言都有支持, 但是除了 Android(Java), iOS(Objective-C) 和微软系的语言(C#,VB.NET...) 外, 别的语言直接写 GUI 的相对不多。
Java 的 Swing 和 AWT 应用领域狭窄, 我知道的只有在金融领域, ERP, IDE 有所使用,所以不用下大功夫去学。
如果你是做桌面编程和手机端编程,需要关注如下几点:
1. 界面是如何描述的?
界面的控件有哪些? 如何进行页面的布局?
2. 数据如何获取?
现在的程序基本上都是联网的, 很多数据都来自服务器, 这又涉及到了前面提到了网络编程。
3. 界面和数据如何绑定?
因为数据一般是外部来的,是变化的, 需要在 GUI 上展示, 绑定数据到界面必不可少。
4. 用户在 GUI 的操作该如何处理?
现在基本上都是事件驱动,例如用户点击了一个按钮,就会调用 onClick 函数。
总的来说, GUI 中用 MVC 相对比较多, 需要掌握学习。
8
Web
终于到达 Web 编程了, 这是个非常大的主题, 其实 已经超越了一门语言的范畴 ,涉及到 HTTP, XML, Javascript , JSON, Servlet, JSP 等基础知识。 当然更重要的是框架。
9
学会了吗?
学到这里, 大部分人还是很困惑,觉得自己已经看了语法,OO, 线程、IO, Web, 但还是心里没底,不知道自己到底学会了没有, 这个时候,务必要寻求项目来做了。 做项目才能把知识给串起使用, 帮你查漏补缺, 不断前进。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论