欢迎来到千里码话题版块。

我们会定期挑选程序员息息相关的话题让大家讨论:

1. 每个话题持续一周,话题结束后仍然可以继续讨论。点击查看所有话题

2. 用户投票的权重为自己当前的分数,权重会随着你的分数变化而变化。不能给自己的回复投票。

3. 关于话题的吐槽和建议,请移步话题吐槽专用讨论

4. 如果你有话题想拿出来给大家讨论,话题投稿请移步话题投稿专用讨论

5. 仅支持Markdown,不会Markdown请参考题目Markdown

更多请阅读帮助中心

奖励规则:

话题结束时发表得分最高的回复会以"优胜"的标记标出。发表该回复的用户会获得ikbc Poker3以及意见领袖徽章。

是什么原因促使你去主动深入学习一门编程语言? 已经结束

每个程序员的编程之路都是从学习一门语言开始的。在最开始的时候,我们往往都是被动地去接受了一门语言——比如大学里面教授那门语言或者第一份工作需要用到的那门语言。
随着经历的增长,对整个技术领域有了更深入的认识之后,我们往往会发现,还有更好的编程语言值得我们付出时间去深入学习。
这个时候,你学习这门编程语言的动力不是来自于考试或者工作,而是自己对这门语言通过全面客观的考察之后做出的理性决定。
所以本期话题的主题是"主动深入学习一门编程语言背后的原因",希望大家分享自己的故事。

奥利奥   2016-08-17 15:15:26 提问 topic
14 个回答
优胜
Bishop
15 人赞同, 0 人反对

一个程序员的命运,当然要靠自我奋斗,但是也要考虑到技术发展的进程。哪门语言代表了先进生产力的发展方向呢?

JavaScript,没有之一。

首先,JavaScript作为浏览器的唯一脚本语言,已经没有回头路了。所有浏览器厂商重新搞一套语言然后全世界所有网站都重写一遍么?显然不可能。

而且HTML天生是跨平台的,带来的开发成本降低是不可估量的。

也就是说,以后开发App,根本不需要考虑Android还是iOS,只需要写一套网页,让浏览器来帮你跨平台就好了。

那么,光Web开发这一项,就足够支撑这一门语言存活下去了。

而JavaScript作为后端语言同样优越。在techempower的Web框架性能测评中,JavaScript已经稳坐动态语言性能头把交椅。在不远的将来,Node.js将逐渐压制PHP,世界最好的语言没有几天好日子过了。

并且以后性能差距还会越来越大。为什么?

因为JavaScript背后是浏览器,浏览器的背后是各大浏览器厂商金主,而Ruby、Python、PHP等语言,就没有这么财大气粗的靠山了。

JavaScript也可以搞桌面应用。比如我现在正在用的Atom编辑器。

JavaScript已经是最流行的语言,有最活跃的社区,也是StackOverflow上问题最多的语言。

并且借助asm.js,已经可以把其他平台上的应用直接编译成JS并且放在浏览器中运行,比如这个3D游戏

由于asm.js的大获成功,各大公司牵头搞出了WebAssembly技术,让asm.js的性能更进一步。

也就是说,把其他平台上的应用移植到浏览器,有可能效率比原生的还要高。

有个很著名的视频,叫做JavaScript的诞生和死亡

这个视频先是回顾了JavaScript的历史,然后大胆预言了JavaScript的发展趋势。

JavaScript以后会一直存在,但是会成为底层的语言,成为新时代的汇编语言,也就是说,没有程序员会编写JavaScript。就像今天极少有人会去写汇编一样。

但是,一门语言成为了别的语言的基石,也就意味着每个想理解底层原理的程序员都需要在上面花时间理解。就像CSAPP里面不厌其烦地让你写汇编一样。

并且,当JavaScript变成别的语言的基石的时候,你之前积累的底层JavaScript坚实基础,就是你比其他使用基于JavaScript高级语言的开发者的不可逾越的优势。

这就好像,现在新手们都喜欢玩Python,或者写Java,而你呢,学这些也花不了多少时间,但你是可以写C、汇编,懂操作系统和网络的。

历史的经验表明,当一个人会一门很重要但其他人不懂并且艰深晦涩的技术的时候,就会催生膜拜和信仰。有个最好的例子,就是王垠。

当你积累几十年JavaScript经验,成为了众多新手的偶像,接下来要做什么,就取决你的道德水准了。

2016-08-22 14:53:53 4条评论
Cinque Terre

lwb

全宇宙最好的语言、没有之一!
2016-08-22 15:12:41
Cinque Terre

Bishop

JavaScript不是最好的语言,事实上,它是一门有很多坑的语言。毕竟是一个只花了10天就创造出来的语言。但是机缘巧合,JS走到了风口浪尖……
2016-08-22 15:24:15
Cinque Terre

Sayalic

WebAssembly不仅仅是支持JS,也可以支持任何一门语言……
2016-08-23 11:22:24
Cinque Terre

Sayalic

不过Guido表示自己不想让Python掺和WebAssembly这趟浑水,参考:http://www.infoworld.com/article/3078633/application-development/qa-guido-van-rossum-on-pythons-next-steps.html
2016-08-24 11:59:45
请先 登录 后评论
goat , 笨蛋
13 人赞同, 0 人反对

“你们要进窄门。因为引到灭亡,那门是宽的,路是大的,进去的人也多;引到永生,那门是窄的,路是小的,找着的人也少。” ———《圣经:新约马太福音》7章13-14节。

今年三月份我还在做电力线载波方面的工作,在和朋友闲聊的时候抱怨日常生活乏味,感觉自己过上了退休老干部的生活。“去学编程吧!”,他扔了一个网址给我,说适合入门并且有Mac拿,于是我开始学习Python并刷起了题。

现在我如愿成为了一名后端,写代码的时候还是时常会疑惑为什么当初那么狂热地投入到编程中,甚至辞职离开一个即将上市的公司。高薪?好奇心?创造欲?这些答案都只能解答一部分原因,它们因为过于具体而不完整。

“为什么活着?”(背景音乐起) 这并不是一个仅仅供少年强说愁的问题,因为我从小生活在乡间,工作也经常会去一些偏远尚未通电的地方,田间老妪和抽旱烟的糙汉时常会在聊天中无意地说出:“活着有什么意思。”我觉得根本上是因为没有足够巨大的未知来让他们感受“活着”这件事情了。我也常常如此,明确地认识到仅有有限的生命,但是无法从无意义中脱身。

加缪说,一个真正的人是在明白了世界的荒谬之后仍然敢于生存下去的人,他是始终高于他“自身”的。站在这个角度上讲,编程也是那许多窄门中的一个,在这里切个题:

主动深入学习一门编程语言背后的原因

在我看来,都是在有意或无意间为试图接近那个“更高”的自身所作出的一种努力。

一本正经扯了个犊子,谢谢大家。

2016-08-22 22:38:07 1条评论
Cinque Terre

Sayalic

屌屌屌,哲学大手
2016-08-23 00:17:25
请先 登录 后评论
mickeyandkaka
5 人赞同, 0 人反对

买的服务器没到位,在不优化线上就要挂了。立马3天用go重构上线。

2016-08-22 10:40:09 3条评论
Cinque Terre

Sayalic

想起了我当年面试,“会不会做网页”,“不会”,“我要你明天就会,做一个XXXX网页出来给你我看看”,然后明天就交付拿了offer。
2016-08-22 10:49:56
Cinque Terre

goat

orz
2016-08-22 11:18:47
Cinque Terre

Sayalic 回复了 goat

最后还是没要那家公司的offer
2016-08-22 11:53:48
请先 登录 后评论
桃李春风
8 人赞同, 0 人反对

我大学时候只教了C,其实我也没有学懂。快毕业的时候感觉找不到工作,然后我看了下市场上有大量工作机会的语言就Java和PHP。根据100offer的统计数据,现在依然是这个趋势:

学习Java就是最好找工作的,于是就这么入坑了。随着对Java的深入学习和对其他语言的涉猎,我发现Java是最适合入门的语言。你可以说Java不灵活,写代码冗长,但是论快速上手,Java肯定完爆其他语言:

  • Java的类型很简单,只有原始类型和对象,所有对象都是引用,非常好理解。

  • Java让内存对开发者透明。也就是说,开发者不需要关心这些对象在内存中是怎么存储的。在Java中,创建对象,使用它们来完成任务,这就是全部。

  • Java的类型系统使得Java的IDE非常的强大。你可以直接跳转到定义,然后查看一个变量的类型,然后再看这个类型的定义。然而动态语言如Python或者PHP,由于无法在编译期获知一个变量的类型,你根本不知道这个变量里面到底保存的是个什么东西。这种问题带来的重构和维护的成本是非常巨大的。并且最近流行起来的语言比如GO和Swift,都是静态类型。这也从一个侧面上说明了动态类型语言已经不再流行。

  • Java所有的异常信息都有Exception Stack,也就是说,即使你程序崩溃了,你也知道是什么原因崩溃的以及在哪一行崩溃的。然而C和C++,只会告诉你Segmentation fault。

历史已经证明,Java带来了学习成本开发成本的大幅降低,让普通人也能当程序员。或者说,Java从设计之初的一个目的就是尽可能的照顾新手。

当然Java不仅仅上手容易,整个生态也是欣欣向荣。Maven主仓库里面丰富的package直接import使用,根本不用自己重复造轮子。JavaEE和Java Web已经被无数大小公司采纳(Java职位要求基本都有熟悉Spring),并且基于Java的项目,覆盖各种技术领域——大数据、搜索、存储、网络……还有很多语言运行在JVM上,比如Scala、Clojure、Groovy……这证明Java的虚拟机是非常优秀的。感觉Java再战20年应该是没有问题的……

2016-08-22 09:56:01 0条评论
请先 登录 后评论
cheyulin , Phd in CSE, HKUST
11 人赞同, 0 人反对

C++, 这是一门兼具许多特性又让人着迷的编程语言。实际上,每个人都可以写,但是要写好它却不是很容易。这是一门兼容C(C流行是因为Unix他爹就是C他爹), 并且给予程序员充分自由的语言。

要开始写出别人不喷你的代码,你至少要花几天时间看看C++Primer和Effective C++,然后查阅资料知道几种编程范式,面向过程,面向对象(封装,抽象多态)和C++对于内存管理和对象生命周期(可以看看allocator源代码),明白泛型编程,函数式编程等基本概念。学习这些东西的代码可以放在你的github仓库上,心得可以放在word press搭建的blog 上。比如,我就把学习的代码放在https://github.com/CheYulin/CPP11Studyhttps://github.com/CheYulin/STL-Study 上。

像数据结构和算法在使用STL的时候,你自然会用到。算法分析技术例如:均摊分析,随机算法分析(需要利用一些概率论知识),在使用STL时候你也会接触到。具体可以看看STL源码剖析等类似书。
  
明白这些之后,然后你要让自己熟悉modern cpp,熟悉C++11/14以及正要修订的C++17,可以看看CppCon Talk,让自己熟悉Boost,学习一些编译器支持的特性,学习模板元编程技术。具体可以看看Boost程序库完全开发指南,Boost程序库探秘等书。
  
然后找一个自己感兴趣的domain, 开始实施验证自己的想法。然后发现做了这些之后,你的C++就入门了。
  
在进一步提高时候,可以看看Inside Object Model,看面向对象的Cost和C++ Templates还有Template Meta Programming,来了解C++的运行机制和编译机制。
 
然后再学习新的知识,关注以下Cpp Standard Committe 开会和新标准的内容和思考,将C++应用到自己感兴趣的Domain Application or Research上。

推荐一个C++轮子的总结:https://github.com/fffaraz/awesome-cpp  

总之,C++是一门给程序员足够自由的语言。也是Google常用的四大语言(C++/Java/Python/Go)之一。然后其他语言Python/Ruby, Haskell/Scheme/Common Lisp,我感觉就当玩具玩玩。然后Javascript的话,其实是一个10天就被创造出来的语言,它的底蕴我不太喜欢。A Short History of JavaScript

JavaScript, not to be confused with Java, was created in 10 days in May 1995 by Brendan Eich, then working at Netscape and now of Mozilla

2016-08-24 21:32:36 8条评论
Cinque Terre

driver

写得很好,我认为对我很有帮助,可惜我的投票权重太低了..
2016-08-25 17:17:13
Cinque Terre

cheyulin 回复了 driver

写了下自己一年来来学习C++的心得,希望能帮助到大家
2016-08-25 20:20:20
Cinque Terre

Sayalic

感觉写底层或者系统相关还是用C啊,C++的定位我不是很懂……
2016-08-25 20:51:11
Cinque Terre

cheyulin

我在针对一类算法做优化,需要抽象出公共部分,这时候用C++的面向对象/泛型编程/模板元编程就可以使得做的东西,造的轮子更容易让别人接受并且通用易用(比如Boost中许多Header-Only的组件就很好用,在保证通用性的同时使用模板元编程,性能也几乎零损失)。C++可以完全兼容C,然后最新的标准对程序员也比较友好,并给予程序员足够的自由度可以根据硬件Tune程序,而不像Java。
2016-08-25 20:59:45
Cinque Terre

cheyulin 回复了 Sayalic

要写个sqlite, redis, nginx类似的高性能要求比较高的东西或者做个嵌入式开发需要用纯C(没有重载,没有面向对象语义,没有STL),其他的时间就更在乎软件工程那些东西吧,应用面向对象设计模式还有泛型编程/模板元编程来抽象问题解决一类问题。
2016-08-25 21:32:02
Cinque Terre

shinian

卧槽我点赞了,第一次发现原来我的投票权重=0...........................
2016-08-25 21:52:03
Cinque Terre

cheyulin 回复了 shinian

哈哈。。。
2016-08-25 23:14:38
Cinque Terre

Sayalic 回复了 shinian

这很合理啊,网站管理员的权重=0
2016-08-25 23:40:46
请先 登录 后评论
WeaponX , xsoftlab.net
4 人赞同, 0 人反对

99*yP5-yPPe

2016-08-22 10:56:11 0条评论
请先 登录 后评论
Rokic
4 人赞同, 0 人反对

主动深入学习一门编程语言背后的原因:

Python

妹子:我想学学Python,你能教我吗?

2016-08-22 08:49:20 2条评论
Cinque Terre

Sayalic

妹子根本不会知道有门语言叫Python,只会问学什么语言最厉害呀?
2016-08-22 10:50:39
Cinque Terre

二向箔

那学习C的版本就是---学弟:学长学长,我想学学C,你能教我吗?
2016-08-22 11:32:02
请先 登录 后评论
light3
6 人赞同, 0 人反对

做为最好的语言之一的PHP的使用者
说一下为什么我会选择这个.
1.我中专文化水平.
2.我不想去卖电脑 或者去干别的.
3.想能养活自己.

后来学校去了个培训班
某连...对于我这种迷茫的辣鸡是个不错的选择
就变成了现在混吃等死写PHP。

至于PHP的优点..
瞎写一般没事
别去追求各种框架
不如看会http://www.php.net/manual/zh/

抽空也可以看看前端 写点页面(更好的混口饭)

当然这些想过食汉三十分之一水平的生活
还是在生活业余基础 看看千里码.

自从上了千里码 知道自己不会的 都快要逼的撞墙了.

2016-08-22 12:52:45 0条评论
请先 登录 后评论
吃瓜群众 , 今天还没吃瓜呢
6 人赞同, 0 人反对

先说说非主动学习的语言吧:

C语言

  • 大学搞过一段时间的ACM竞赛,C语言算是必备吧,主要是实现一些数据结构之类的优化算法和数论图论的

R语言:

  • 大学统计课上老师有教过,但当时搞ACM唯C独尊,觉得与自己没多大关系,就期末考突击学了几天。毕业实习时主管让做一个用户评论反垃圾的分类器,网上看了分类算法,用C写了半天差点写哭了~(主要是一坨数据预处理用C写很苦逼),主管发现后让用R试试。于是网上学了R,开始了数据挖掘的不归路。

主动学习的语言:

Python:

  • 实习半年后,业务越来越复杂,简单R脚本集已经很臃肿且难以维护,有句话叫“R语言的优点在于它是统计学家发明的,缺点也在于它是统计学家发明的”。这个时候遇到了python,哇靠,惊为天人啊!世界上居然有这样的语言:数值计算有NumPy、图像处理有PIL、数据分析有Pandas、画图有Matplotlib、还有操作简单高效省事的ML党福音scikit-learn,两行代码搞定分类器,妈妈再不用担心我手写SVM了。而且写中型项目非常合适,简单上手便于维护。还有一个能提高效率的地方,python被称为万能胶水语言。在业务高速发展时,员工的效率是第一位的,实现一些小工具用python再适合不过了。目前我们团队里python已经覆盖到公司里的nlp+搜索+推荐等相关业务。

Scala:

  • 说了这么多,python就没有缺点吗?呵呵,天下没有便宜的晚餐,能满足这么多功能,必然在性能上大打折扣啊,特别是本司,业务发展略快^~^,单机的python明显跑不动了,期间为了赶业务,都是先写成python上线ABtest,效果好的算法,再找人改成C语言。。。囧!

  • 但这样毕竟不是长久之计,本司后来也赶了波潮流,搭建了Spark神器,开启了分布式时代,项目效率杠杠的。不过由于Spark框架是采用Scala语言编写的,对python和R就没有那么好的支持了。而且Scala被称为跑在JVM上的C++,支持函数式编程、强大的并发性、天然适合分布式系统。可以说是天生为大数据设计的,缺点是目前机器学习包不够丰富,学习成本较高。但随着Spark的流行,Scala也将在数据挖掘中占有一席之地。

    综上:做数据分析,NLP,机器学习方面的,强烈推荐Python,公司有Spark的话,一并学习Scala。

2016-08-22 02:17:28 1条评论
Cinque Terre

RestUp

为什么Scala效率比Java好呢?
2016-08-22 02:30:44
请先 登录 后评论
isaacpei , ifelse程序猿
4 人赞同, 0 人反对

想多了各位,我才没有主动学过语言,都是老师/公司/mentor逼得

2016-08-23 22:29:31 1条评论
Cinque Terre

Sayalic

orz,人生苦短,及时dota
2016-08-23 22:50:20
请先 登录 后评论
lwb , 你这个骚猪、
4 人赞同, 0 人反对

学习一途、永无止境,首先其他楼有关于js的见解,鄙人也评论了,但是回首才发现,少了重点,重点是学习的原因,而不是语言种族之间的大战,每一种语言的诞生,肯定不是为了单纯模仿时下流行的语言,而是解决时下语言解决不了或者处理不完美的问题,每种语言都有自己的长处,首先声明最爱的语言:

Javascript

最开始只是单纯喜欢玩游戏,觉得so吊,就激起了对于编程的好奇心,大学选择了自己喜欢的专业,奈何分数与缘分有限,专业是web开发的路,目前作为一名菜鸟前端,对js亦一知半解,但不能阻挡我的喜爱,js作为流行毋庸置疑,能力鼓吹请看其他楼,无论前端后端均有了解,而且、由于入门相对简单,各路大神都了解,也就造就了一幅不和谐画面:不就js,我也会写。
javascript的独特性造就了它的存在,作为一门前端开发,这也是必学的行列,学了也不会吃亏,就学了咯、

asp(vbscript)

人生第一份工作,历时五个月面试,IT入门语言,恩师亲自授业,奈何市场原因,个人放弃转了前端。
虽然工作现在不用了,但是还是要感谢那个带领我走上IT的路的人。

node.js

在前端发展迅速的今天,不努力就等于死,技术更新迭代太快,坐吃山空不是长法,学习心得知识,才是保证自己不被淘汰的办法。因为鄙人处于学习状态,还没学会,优劣暂且不论。但是作为要上太空的语言,想来也不会差吧?

在各路大神勉强不敢造次,为了兄弟来一波,不喜勿喷。

2016-08-22 15:43:01 0条评论
请先 登录 后评论
Grayon , 程序小工
4 人赞同, 0 人反对

2016-08-22 11:04:22 2条评论
Cinque Terre

Sayalic

有没有上架的APP拜读一下?
2016-08-22 11:53:11
Cinque Terre

Grayon 回复了 Sayalic

JSPlayground
2016-08-22 14:14:38
请先 登录 后评论
wannianma
3 人赞同, 0 人反对

应该是当前掌握的语言满足不了开发的某些要求,
或者开发起来太麻烦的时候,会选择学习一门新的语言!

2016-08-22 09:03:02 0条评论
请先 登录 后评论
情菜
2 人赞同, 0 人反对

主动深入学习一门编程语言背后的原因:
C++:很单纯的想法就是不服输,征服它,然而学了好几年了,我发现我依然还只是在语言特性和简单的设计思想这条待征服的路途中。这条路还是会继续走下去。
Python:个人能力有限,又喜欢科学方面的东西,所以它的各种科学相关的库,以及使用方便等等原因,为了生活也算之一吧!
一些个人浅见,有意见向左的coder,还望各位多多包涵!

2016-08-23 12:35:10 0条评论
请先 登录 后评论

啦啦啦

回答
正在加载中

您未提交【码之初】的正确答案,暂不能回答相关问题。 如有疑问,请发起讨论