第一门编程语言选什么好?

作者 谢恩铭,公众号「程序员联盟」(微信号:coderhub)。
转载请注明出处。
原文:http://www.jianshu.com/p/c2b85495cea6

内容简介


  1. 前言
  2. 建议
  3. 入门推荐
  4. 分析
  5. 总结

1. 前言


现在 IT 行业越来越火爆,许多朋友都愿意入门「挨踢」,噢,不,当程序员。

那么问题来了,对刚接触这个领域的新人来说,选什么语言作为第一门语言呢?这是很关键的问题,因为这很可能决定了这位新人是「从入门到继续」还是「从入门到放弃」。

2. 建议


我推荐:或者从 C 语言入门,或者从 Python 入门。当然,也不排除从 Java 入门。

这里又得分情况来说:

  1. 如果你只是想用编程来完成一些简单的任务,目标不是深入技术,那么选 Python。有很多好处,入门快,成就感来得快,高效好用。

  2. 如果你要深入编程,想成为技术专家,那么选 C 语言。

  3. 如果你还不清楚自己的未来发展方向,那请先弄清自己想要做什么再来学编程。如果实在是前路迷茫,懵懂未知,那么从 C 语言入门。因为你把 C 语言学了,你会发现 Python 入门太简单了;反之不然。

3. 入门推荐


  • 如果你选 Python 作为第一门编程语言,请看我的 最近迫切应学的编程语言 这篇文章,说的就是 Python 的好处和入门建议。

  • 如果你选 C 语言作为第一门入门语言,虽然开始会有些「疼痛」,但是至久必成为你的帮助。请看我的 《C语言探索之旅》 系列教程来入门。也可以看《C Primer Plus》这本书来入门。

4. 分析


总结一下 C 语言作为第一门编程语言的好处:

1. 基础深厚

现在你看到的大部分编程语言都是借鉴了 C 语言或者用 C 语言写成的,比如 Java,C++,C#,Python,Go,JavaScript,Objective-C,Swift,PHP,Perl,等等。

几乎所有的操作系统都用到了 C 语言,比如 Windows,Unix,Linux,macOS,iOS,Android,等等。

可以说,C 语言影响了全球的计算机系统和网络。改编《指环王》的经典台词就是「One language to rule them all」(意思是“一门语言统领其他语言”)(《指环王》原来的诗是「One ring to rule them all」(意思是“一枚戒指统领其他戒指”))。

当然了,C 语言最初是用 B 语言写的,但今天却几乎没有人在用 B 语言了。可见 C 语言的飞跃,其源码设计之精良。

当时的程序员(如 C 语言之父 Dennis Ritchie 丹尼斯.里奇)真的是超级厉害,我这种程度实在连远眺都看不到他们的项背啊。

2. 难度适中

C 语言比 Python,Java 之类难入门,但是比 C++ 简单很多。

我觉得 C++ 不适合作第一门编程语言,太复杂,东西太多,基本就是「从入门到放弃」。要学 C++ 最好等入门编程之后。当然,如果你一定要用 C++ 作为第一门编程语言,我也没资格反对。

相比之下,C 语言的难度适中,也没有那么可怕。最让人害怕的指针、位运算(嵌入式里面比较多左移右移,需要数学功底还可以,不然那些十六进制,二进制会让人头晕的)、自定义数据结构、内存分配什么的,其实也还好,熟能生巧。

3. 嵌入式的主要语言

C 语言在嵌入式领域算是举足轻重了,特别是涉及到比较底层的嵌入式,当然你说 Python 也可以用于树莓派这样的开发板,但是你不会 C 语言的话,一般去应聘嵌入式的工作还是比较困难的。

现在这个时代,随着可穿戴设备和其他设备日益普及,嵌入式的前景肯定不错。

我个人认为:人工智能和嵌入式(物联网)是之后比较火热的领域。

要入门和提高嵌入式,可以参看我的这篇文章:什么是嵌入式编程?如何入门和提高?

4. 理解计算机

作为程序员,如果你想要进阶为高级甚至伟大乃至史诗级别的程序员,一定得对计算机原理,编译原理等等有所了解。

C 语言虽然也算是高层语言,但相对于 Python,Java 等,C 语言更接近底层。

入门了 C 语言,你会对计算机的内存、寄存器等原理有一定了解(推荐之后阅读 《深入理解计算机系统》 这本书,里面的示例代码是用 C 语言写的)。

如果有时间,最好也入门一下汇编语言,可以参看我写的文章:学习汇编对编程有什么帮助?如何学习

我学生时代就是先学了 C 语言,然后跟着清华大学王爽老师的《汇编语言》(那时是第二册,现在已经是第三册了吧)学了汇编,特别浅显易懂,写得很棒。学完之后,发现对内存,位移,寄存器等等操作都有了拨云见雾的认识,会感觉自己慢慢地领悟了编程。

5. 学完 C 语言后学其他语言会很快

这点我深有体会,我自从借 C 语言入门了编程之后,后面再学习 Java,PHP,C++(还是有点疼痛的,谁让 C++ 这么庞杂…),Python,Kotlin,等等就很容易了。

因为经过 C 语言的磨砺,你的编程思维能力已经比较不错,关于数据结构和算法等可以通过做练习和个人项目来进行。

当年我一开始接触 C 语言,感到比较难,就退避了,改去学 Java,结果也不得要领。直到我后来转而去用 C 语言入门编程,学会了 C 语言之后,学 Java 变得顺风顺水。

之后你如果要进阶 C 语言,推荐看看《C专家编程》,C 语言之父写的《C程序设计语言》(不是谭浩强那本《C语言程序设计》,那本不推荐看),《C陷阱和缺陷》,中国人写的《C语言深度解剖》。读完这些,做完里面的练习,你的 C 语言的水平就已经很不错了。

当然了,如果你不是做嵌入式等对 C 语言水平要求比较高的领域,那没必要把 C 语言学那么深。

借助 C 语言入门编程之后可以学学 Java,Python,Kotlin,Go 语言(Go 语言被称为 21 世纪的 C 语言)等比较被看好的语言。

当然,PHP 这样「世界上最好的语言」也是比较简单的。PHP 的语法和 C 语言比较类似,毕竟 PHP 的解释器是用 C 来写的嘛。

5. 总结


有一点需要注意,就是学习编程语言,千万不要贪多而不精。应该先学精一门语言,之后再去涉猎其他的。

毕竟编程语言之间,基本的逻辑,条件语句,循环语句,类或结构体,都是互通的。一般来说,一通则百通。

有些朋友可能一门编程语言还没入门或精通呢,就想要蜻蜓点水般去学新的语言,这样最后什么也不能精通。

祝大家还没入门编程的可以早日入门,已经入门的技术日益精进(需要学学面向对象思维,架构,设计模式,数据结构和算法,等)。

要知道现在 IT 行业可是薪资很不错的,而且未来前景绝对不堪忧,毕竟人工智能还要我们来编写和操控。

好了,我去继续学习了,下次见~

才疏学浅,文章中若有错缪或漏说的,欢迎留言指正补充。我也会更新文章。谢谢!


我是 谢恩铭,公众号「程序员联盟」(微信号:coderhub)运营者,慕课网精英讲师 Oscar 老师,终生学习者。
热爱生活,喜欢游泳,略懂烹饪。
人生格言:「向着标杆直跑」

相关推荐

C++探索之旅 | 第一部分第三课:你的第一个C++程序

作者 谢恩铭,公众号「程序员联盟」(微信号:coderhub)。转载请注明出处。原文:https://www.jianshu.com/p/d44bd24ce6af《C++探索之旅》全系列内容简介前言命令行的奇幻世界创建第一个项目解释第一个项目注释及代码整洁之道总结第一部分第四课预告1. 前言上一课是 C++探索之旅 | 第一部分第二课:C++编程的必要软件 。经过上两课之后,我们已经知道了什么是编程,编程的语言,编程的必要软件,C++ 是什么。我们也安装了适..

程序员联盟 743

Python探索之旅 | 第一部分第四课:变量的奇幻世界

作者 谢恩铭,公众号「程序员联盟」(微信号:coderhub)。转载请注明出处。原文:https://www.jianshu.com/p/d88e11bc7fec《Python探索之旅》全系列内容简介前言什么是变量及变量的作用Python 的数据类型第一次使用函数总结第一部分第五课预告1. 前言在上一课 Python探索之旅 | 第一部分第三课:初识Python的解释器 中,尽管你可能没有注意到,但其实你已经输入了 Python 的第一条命令。从现在开始,我们将逐..

程序员联盟 564

Python探索之旅 | 第一部分第三课:初识Python的解释器

作者 谢恩铭,公众号「程序员联盟」(微信号:coderhub)。转载请注明出处。原文:https://www.jianshu.com/p/a34eaffcc420《Python探索之旅》全系列内容简介前言Python 的解释器Python 解释器的种类做一点数学运算总结第一部分第三课预告1. 前言上一课是 Python探索之旅 | 第一部分第二课:安装Python和Python的常用开发软件 。经过第一课的理论概念和第二课的 Python 开发环境安装之后,我们是..

程序员联盟 595

Python探索之旅 | 第一部分第二课:安装Python和Python的常用开发软件

作者 谢恩铭,公众号「程序员联盟」(微信号:coderhub)。转载请注明出处。原文:https://www.jianshu.com/p/68fcd46254f5《Python探索之旅》全系列内容简介前言安装 Python(Windows、macOS 和 Linux)安装 PyCharm 这个 Python 最强 IDE创建 Python 项目第一部分第三课预告1. 前言上一课 Python探索之旅 | 第一部分第一课:Python是什么? 中,我们初步认识了什么是编..

程序员联盟 4637

Python探索之旅 | 第一部分第一课:Python是什么?

作者 谢恩铭,公众号「程序员联盟」(微信号:coderhub)。转载请注明出处。原文:https://www.jianshu.com/p/2b63eb1c1613《Python探索之旅》全系列内容简介前言什么是编程语言Python 是什么总结第一部分第二课预告1. 前言如果你决定学习这个系列课程,那我替你感到高兴!因为我坚信:学一点 Python,以及围绕 Python 展开的 Web 开发、数据分析和人工智能,等等知识,对于程序员特别是这个时代的程序员来说是非常..

程序员联盟 626

为什么程序员应该写博客?用什么博客系统?

作者 谢恩铭,公众号「程序员联盟」(微信号:coderhub)。转载请注明出处。原文:http://www.jianshu.com/p/f7a970b08362内容简介前言写博客的态度写博客的好处用什么博客系统我的平台1. 前言作为程序员,我们敲代码的时候很轻快,键盘上噼里啪啦,「弹指间,樯橹灰飞烟灭」。但是,不少程序员不喜欢写东西。当然,人都是有惰性的,要跨出这一步不容易。我开始得也有点晚,不过晚总比不开始好。现在我很喜欢写博客,写博客带给我很多好处。比如有一点副业收..

程序员联盟 1959

最近迫切应学的编程语言

作者 谢恩铭,公众号「程序员联盟」(微信号:coderhub)。转载请注明出处。原文:http://www.jianshu.com/p/08ca8573e681编程语言之争从来不曾停止,这篇文章绝对不会去讨论哪个语言是最好的(当然了,除了“PHP 是世界上最好的语言”这句“真理”之外)。插句题外话,不要听一些人说:“编程语言没有好差之分,只有用起来顺不顺手”。这话其实不正确,编程语言就是有好差之分。有些编程语言就是设计得不好,就是不适合一般的应用,就是无人问津。我想谈谈最近几年我的感受:..

程序员联盟 620

中国程序员如何升职加薪,也许我们该学学印度人

作者 谢恩铭,公众号「程序员联盟」(微信号:coderhub)。转载请注明出处。原文:http://www.jianshu.com/p/be5047992c01内容简介前言分析总结1. 前言近几年越来越多的印度人在美国硅谷占据要职,其中比较著名的有谷歌 CEO 桑德.皮查伊,微软 CEO 萨蒂亚.纳德拉,Adobe CEO 山塔努.纳拉延。反观硅谷的华裔,虽然在数量上与印度裔相近,却不像印度人那样大量占据企业的中高层。你可以说因为印度人英语比较好,虽然他们说英语普遍有口音..

程序员联盟 576

数据结构和算法 | 第一部分第五课:算法复杂度实践

作者 谢恩铭,公众号「程序员联盟」。转载请注明出处。原文:https://www.jianshu.com/p/060ef52580af内容简介前言寻找最大和最小的元素寻找不重复的元素寻找不重复的元素:另一种方法第一部分第六课预告1. 前言经过 数据结构和算法 | 第一部分第三课:算法复杂度(上) 和 数据结构和算法 | 第一部分第四课:算法复杂度(下) ,我们讲完了算法复杂度,是时候来做点实践的练习,巩固一下所学知识点了。算法的复杂度是个不错的知识点,但是它与我们这门算..

程序员联盟 589

数据结构和算法 | 第一部分第四课:算法复杂度(下)

作者 谢恩铭,公众号「程序员联盟」。转载请注明出处。原文:https://www.jianshu.com/p/3e5e987c7e05内容简介大 O 符号时间复杂度和空间复杂度最坏情况下的复杂度第一部分第五课预告1. 大 O 符号上一课 数据结构和算法 | 第一部分第三课:算法复杂度(上) 我们开始了算法复杂度的学习,这一课我们继续学习后半段。我们已经看到,复杂度只考虑操作数目的一个数量级(忽略了其他的组分),这是一种近似。为了表示这种近似,我们使用一个特定的符号,就是著..

程序员联盟 600

数据结构和算法 | 第一部分第三课:算法复杂度(上)

作者 谢恩铭,公众号「程序员联盟」。转载请注明出处。原文:https://www.jianshu.com/p/14982c42b2d8内容简介算法的正确性算法的复杂度“渐近”度量第一部分第四课预告1. 算法的正确性上一课 数据结构和算法 | 第一部分第二课:小鸭子们去旅行 中,我们讲了一个有趣的小故事,就是为了引出算法复杂度。算法复杂度非常重要,要讲的内容也很多,所以我们分为上下两课。当程序员需要解决计算机科学相关的问题时,他们(通常)会编写一个程序。这个程序包含一..

程序员联盟 667

数据结构和算法 | 第一部分第二课:小鸭子们去旅行

作者 谢恩铭,公众号「程序员联盟」。转载请注明出处。原文:https://www.jianshu.com/p/31d14bd080d4内容简介引出算法复杂度的故事两种算法两种算法的对比第一部分第三课预告1. 引出算法复杂度的故事上一课 数据结构和算法 | 第一部分第一课:什么是数据结构和算法 中,我们初步认识了数据结构和算法。既然我们要开始学习算法,就不能不提一下算法复杂度。但在我们开始谈论算法的复杂度(Complexity)之前,我希望先给大家讲个小故事。这个轻松的小..

程序员联盟 504

数据结构和算法 | 第一部分第一课:什么是数据结构和算法

作者 谢恩铭,公众号「程序员联盟」。转载请注明出处。原文:https://www.jianshu.com/p/b2f23799a5bb内容简介前言什么是算法算法无处不在计算机的“特权”角色什么是数据结构第一部分第二课预告1. 前言程序员应该知道:程序 = 数据结构 + 算法(Program = Data Structure + Algorithm )。作为一个程序员,如果不了解数据结构和算法,应该会不太好意思出门跟人家打招呼。在这个课程里,我会带大家以循序渐进、轻松幽..

程序员联盟 606

微信公众号排版 | 汇总和实战

1. 排版重要性2. 公众号排版资源3. 公众号排版须知4. 图文排版实战

程序员联盟 3003

如何消除苹果Mac电脑开机声音

-- 简书作者 谢恩铭 转载请注明出处内容简介前言实现1. 前言苹果的 Mac OS X 操作系统,我个人认为非常之赞。用了 Mac 系统,真的回不去 Windows 了。我之前用过2014年出品的 MacBook Pro 15 寸,可惜来巴黎第一个月末被偷了。现在我用的是 2015 年出品的 MacBook Pro 13 寸。作为一个有 5 年工作经验的程序员,我觉得:对于

程序员联盟 1万+

Linux安装搜狗拼音和谷歌拼音输入法

-- 简书作者 谢恩铭 转载请注明出处内容简介前言安装前准备安装搜狗拼音输入法安装谷歌拼音输入法总结1. 前言作为每天使用 Linux 的程序员,我很喜欢 Linux 系统。在公司里,我的台式电脑上只装了 Ubuntu 16.04。每天就是 :命令行,各种爽;谈笑间,键盘“灰飞烟灭”。在家里我有两台电脑,一台 2015 年 13 寸 MacBook Pro ,一

程序员联盟 2505

苹果Mac自带词典完美扩充

-- 简书作者 谢恩铭 转载请注明出处内容简介前言准备工作实作后记1. 前言作为一个使用苹果Mac电脑的程序员,非常喜欢Mac OS系统的便捷和高效。基本上我可以说,用过Mac OS,就不再想要用Windows系统了,除非你要玩高端游戏。Mac系统自带的词典(Dictionary,英语“词典”的意思)软件也非常好用,只需要把光标置于你想释义的词上面,再用三个指头同时按下触摸

程序员联盟 4883

【Android信息安防】三星KNOX容器(2)

-- 简书作者 谢恩铭 转载请注明出处内容简介前言三星的KNOX容器例子app我改动后的源码主要的改动后记1. 前言上一篇【Android信息安防】三星KNOX容器(1)中, 我们简介了Android的容器概念和三星的KNOX容器, 这次我们要来看一下创建KNOX容器的例子app, 以及我的实现。下文中Container和容器可以互换。因为容器的英语就是Container

程序员联盟 1316

【Android信息安防】三星KNOX容器(1)

--简书作者 谢恩铭 转载请注明出处内容简介前言Android容器三星的容器次回预告1. 前言在这个飞速发展的IT时代,信息安全越来越成为人们关注的话题。旧版的Android系统总是被人们吐槽说安全系数低,不如乔帮主的苹果iOS系统那么安全。但是,Android早已今非昔比。虽然iOS还是比较精致,但是最近的几个版本都不是那么完美,很多低级的Bug,唉,也是醉了(小编

程序员联盟 2740

Android探索之旅 | AIDL原理和实例讲解

-- 简书作者 谢恩铭 转载请注明出处前言为使应用程序之间能够彼此通信,Android提供了IPC (Inter Process Communication,进程间通信)的一种独特实现: AIDL (Android Interface Definition Language, Android接口定义语言)。网上有不少关于AIDL的文章,写得都很不错。不过例子构造大多略微复杂: 建立两个An

程序员联盟 804

ubuntu-make | Ubuntu Linux一键安装开发环境

-- 简书作者 谢恩铭 转载请注明出处内容简介什么是ubuntu-make安装最新版ubuntu-make用ubuntu-make一键安装所需开发环境在Github上为开源项目ubuntu-make做贡献1. 什么是ubuntu-make我之前的文章 Linux探索之旅 | 第二部分第七课:软件安装,如虎添翼 中, 已经写了如何在Linux下安装软件。相比于Windows,

程序员联盟 1002

Android探索之旅 | 为应用添加角标(Badge)

-- 简书作者 谢恩铭 转载请注明出处内容简介需求简介Android角标起源不错的Github项目清除角标小问题纠错总结1.需求简介角标是什么意思呢?看下图即可明了:可以看到图中的乐购这个app右上角的红色的圆圈,里面有10这个数字的,就是一种角标。角标,英语是badge,也就是“徽章,像章,奖章; 象征,标记”的意思。一般来说,应用的角标是用来标记有多少条

程序员联盟 971

为什么程序员一定要会用Google和Stack Overflow?

-- 简书作者 谢恩铭 转载请注明出处内容简介前言为什么用Google不用百度为什么用Stack Overflow小结前言下文中,谷歌统一用Google表示。作为程序员,用Google比用百度更节省时间,此话不假。 在法国工作也有4年了,加上之前的两个6个月的实习,勉强算“5年”工作经历吧...虽说我离编程大牛还相距甚远,但是:这些年编程的一个很深的感触就是:95%的

程序员联盟 623

Android开发小技巧 | 一句命令搞定截屏

-- 简书作者 谢恩铭 转载请注明出处一句命令搞定截屏在安卓开发中, 我们很多时候都要用到截屏这个功能。 有时是为了演示, 有时是为了报告问题(比如在Bugzilla, Jira, Redmine等Bug跟踪系统中上传截图), 有时是为了发布应用时要用的截图。今天就来聊聊如何快速只用一句简单的命令就搞定截图。由繁到简的演进:三种方法这篇主要讲Linux系统下如何Android手机截

程序员联盟 915

程序员小助手 | Emacs,最强编辑器,没有之一

Emacs的Logo-- 简书作者 谢恩铭 转载请注明出处【程序员小助手】系列在这个系列文章(不定期更新)中,小编会把这些年的编程学习和工作中使用到的个人感觉非常好的软件推荐给大家,希望能够共享美好资源,使大家提高编程和办事效率。Emacs,最强编辑器,没有之一小编知道,此标题一出,肯定会遭受广大群众“诟病”,说不好还会被其他编辑器的粉丝暗地里“干掉”。比如,Vim,Subli

程序员联盟 4138

Android探索之旅 | 用AsyncTask实现多线程+实例

-- 简书作者 谢恩铭 转载请注明出处用AsyncTask实现多线程在Android应用开发中,有时我们需要实现任务的同步。Android里的AsyncTask类可以帮我们更好地管理线程同步(异步方式),就像Thread类能做的,不过用法比Thread更简单。AsyncTask算是帮我们做了一层封装吧,使我们可以不用操心那么多,如果阅读AsyncTask的源码就可以了解。具体Async

程序员联盟 359

Android探索之旅 | 国际化你的App+网站推荐

-- 简书作者 谢恩铭 转载请注明出处国际化你的App+网站推荐说到Android应用的国际化, 作为Android开发者来说应该不会不懂。今天主要来推荐几个不错的免费的在线管理国际化的网站。Android中要国际化你的App, 使之能在不同语言配置下都能准确显示字符串, 是比较简单的事情。默认的字符串的资源文件是以英语为语言的, 是 res/values/strings.xml如果要

程序员联盟 409

程序员的未来

-- 简书作者 谢恩铭 转载请注明出处那是...有朋友在程序员联盟微信和QQ群里问:"程序员的未来如何?"写一篇文章回答一下。我自然不想把这篇文章写成有“煽动”性的,但是现实就是这么"残酷":程序员的未来,那是... 相当滴(注意此处要有宋丹丹那种东北腔)... 光明!唉, 说好的做人要谨慎, 低调 ,谦虚呢... 容我先写几行代码压压惊。可以从以下几方面来分析从我的亲身经历来看

程序员联盟 527

C语言探索之旅 | 第二部分第十一课:练习题和习作

-- 简书作者 谢恩铭 转载请注明出处第二部分第十一课:练习题和习作上一课和上上一课我们完成了一个游戏:C语言探索之旅 | 第二部分第九课: 实战"悬挂小人"游戏C语言探索之旅 | 第二部分第十课: 实战"悬挂小人"游戏 答案这些练习题是帮助大家巩固知识的,其实不难,特别对于有编程经验的人来说。不看答案来完成这15道题目吧,都是单选题。练习题1.什么是全局变量?

程序员联盟 357

C语言探索之旅 | 第二部分第十课: 实战"悬挂小人"游戏 答案

-- 简书作者 谢恩铭 转载请注明出处第二部分第十课: 实战"悬挂小人"游戏 答案经过上一课C语言探索之旅 | 第二部分第九课: 实战"悬挂小人"游戏之后,相信大家都或多或少有写自己的“悬挂小人”的游戏代码吧。这一课我们就来"终结"这个游戏吧 (听着怎么有点吓人...)。Yes, you are terminated.解方(1. 游戏的代码)如果你开始阅读这里,说明:或者你写

程序员联盟 759
上一篇: 最近迫切应学的编程语言
下一篇: 为什么程序员应该写博客?用什么博客系统?
frogoscar
frogoscar 企业官方账号 企业官方账号
博客等级 码龄16年 386粉丝 168原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值