如果所有语言都一样,为什么这么多的天才们还在创造新的语言呢?早期不同语言可以通过 link 把目标文件连起来,现在语言大部分都是产生Virtual Machine上的assembly. 所以不同语言运行的速度,安全性等等都是完全千差万别的。
3)汇编语言要不要学?
几乎没有汇编语言的工作,即使操作系统,从windows到linux, 97%以上都是用C来写的。所以学汇编语言肯定不能帮你找到工作,但是如果你想成为比其他编程员更厉害的人,你就得精通汇编语言。汇编语言也有高级汇编语言,和低级(或者说基础)汇编语言。现代语言(除了C/C++)基本上不容许Goto语句,而低级汇编语言只有Goto,没有子程序,没有for loop,没有 if else,所以要理解高级语言是如何通过低级语言来实现的。
React is better for a full stack developer, Angular is more for multiple teams working on a large project, some people only have access to Service, some have the access on database, others are for UI only.
Angular is using TypeScript, another layer out of JavaScript. also have to dealing with slowness and steep learning curve.
Whereas React is on top of Javascript, using it like second nature for long-time developer
我几次分享学习计算机语言的经验,都会受到挤兑,比如:
纠结电脑语言,都是马工的命。州大LS的CS混混就好了 语言是载体,思想才是精华 学一门语言就够了 掌握汇编语言和任何其他一门语言就够了 所有语言最后都形成机器语言,所以一样快 等等其实我都已经分别回答过了这些迷思,不过觉得意犹未尽,所以再唠叨几句,供刚刚有小孩想学计算机的参考.
1)作为计算机专业,是不是就学一门语言就够了?
我的答案是否定的。如果找一个编程的工作,也许一门语言就够了。我九十年代进入一家银行,里面大多数都是没上过大学的程序员,只会Cobol,照样在银行工作了2、30年没问题。
但是一个年轻人主修计算机,显然是不够的。好比说,你一辈子只吃饭,也饿不死,但天底下这么多好吃的东西,为什么不去吃吃呢?再说,天底下那么多帅哥美女,如果你只交往过一个,你有可能成为情场高手吗?
不同的语言有不同的优势,不同的功能,新的语言不断的在创造出来,起码有了几千门计算机语言了。年轻人,你不希望自己被禁锢在一个语言里吧
80年代初,我在理论物理所跟郝柏林学计算机,他同时教我们C和LISP,还有用于数学推导的 Reduce语言。他说他是中国第一个懂C和Lisp的人,而且也是中国第一个懂Fortran的人,1972年经周总理批准,理论物理所进口了中国第一台小型机,他成了中国第一个在小型机上用FORTRAN编程的人,70年代他在中国推广了FORTRAN,80年代他在中国推广C,我们算是中国第一批学C的人,当时我已经有了在alpha小型机上编程Fortran的经验,我写Fortran的时候,程序是写在纸上,然后把程序给机房的小姐姐工作人员,由她打孔,然后再由机器读打孔卡片如下:
FORTRAN编程给我的感觉就是计算机编个程,太难了,经常要看小姐姐的脸色,她如果发脾气,不给你打孔,你的code就只是纸上谈兵。
而郝柏林给我们使用的Reduce语言,居然可以人机交互,给他一个多项式a^2-b^2要求因式分解,它能马上输出(a+b)(a-b). 给它一个5次方程,它马上给你给解了。太神奇了。
40年前就知道,作为年轻人,只学一门语言不行啊。想想看,一辈子只吃一道菜,睡一个人,可行吗?
2)是不是所有语言都一样?
如果所有语言都一样,为什么这么多的天才们还在创造新的语言呢?早期不同语言可以通过 link 把目标文件连起来,现在语言大部分都是产生Virtual Machine上的assembly. 所以不同语言运行的速度,安全性等等都是完全千差万别的。
3)汇编语言要不要学?
几乎没有汇编语言的工作,即使操作系统,从windows到linux, 97%以上都是用C来写的。所以学汇编语言肯定不能帮你找到工作,但是如果你想成为比其他编程员更厉害的人,你就得精通汇编语言。汇编语言也有高级汇编语言,和低级(或者说基础)汇编语言。现代语言(除了C/C++)基本上不容许Goto语句,而低级汇编语言只有Goto,没有子程序,没有for loop,没有 if else,所以要理解高级语言是如何通过低级语言来实现的。
绝大多数程序员,都会碰到一些bug后,束手无策。为什么?因为不了解底层语言,如果你懂了底层汇编语言,你就能帮他解决问题。另外,很多Code,都有安全漏洞、安全隐患,如果深入到汇编语言,你就比较容易的发现这些安全漏洞和安全隐患。
当年高校的汇编语言是非常重视的,从单板机的汇编语言,到Motorola 68000 汇编语言,到 RISC-V ASM, 到当年被瞧不起的x86, 到逐渐重视的 x64, 以前汇编语言是重中之重的必修课,现在好像很多计算机专业也就草草的浏览一下皮毛。
4)到底应该学哪些语言呢?
Java曾经如日中天,2004年之前,Java势不可挡,不仅横扫各种语言,甚至横扫所有操作系统。连微软都在搞Visual J++,而且从 VJ++1.0,直接跳到 VJ++6.0 不然就跟不上趟了。2003年圣诞节前的微软年会上,J++组粉墨登场,兴致勃勃的展示微软的JVM,完胜Sun Microsystems的JVM,计算机世界将真正进入 write once, run anywhere. 什么计算机语言,什么操作系统,都不重要了。Java将一统江湖,一统天下。 报告人没有等待到同事们的掌声,相反的是比尔盖茨上了讲台,问道:是谁给你发的工资?是Java吗?不是!而是 Windows!是Microsoft Office! 盖茨宣布,解散J++团队,下岗一半,分流一半,成立C#,搞 .NET,微软的口号是:write whatever you want, run Windows
今天的Java,已经行将就木,被批的无一是处。遥想1995年,Java因为推出Hotjava web browser 而一举大红大紫。Hotjava 是第一个动态浏览器,为了推广Java,很多java coding大赛,我当年也参加了,没得到千元大奖,但得到了厚厚Java书。Netscape受到严重威胁,不得不屈尊和Java达成协约,共同开发新的JavaScript作为浏览器客户端,再由Java,PHP,C#包装成OO给程序员用。时至今日,Java,PHP,越来越衰,C#转入游戏业,而JavaScript成了Full stack的不二选择。
所以现在学Java,不是与时俱进的选择,但无奈AP考试只考它,所以还是得学。
如果想参加USACO等等竞赛,C++是不二选择,不仅速度快,而且有强大的算法库 STL
数据的处理,你可以不必用SQL写,你可以用C,C++甚至任何一个语言写,通过产生的bytecode injection 到数据库产生 stored procedures 或者 user functions,但是这需要更高的权限,也需要一样对于数据库的理解,为什么不把SQL也学了呢。 而且SQL是NoSQL的基础,不需要Join而已,有了SQL,对写 key-value, Graph database 等等的 query,也是基本基础。
再者是functional programming language. 虽然业界用到的纯fp不多,但functional programming是完全不同的理念,图灵的state machine的理念是万物皆数,万物皆state。state可以是数,是table(SQL),是矩阵(量子力学),是各种数、array等等的组合(Object Oriented Languages), 而图灵的博士导师Alonzo Church 却认为 计算皆函数,计算机应该是 stateless machine,即没有State。只有你給它一个自变量,它给你一个返回函数值,计算机本身是干净的,没有痕迹的。很明显,functional programming有很多好处, 因为没有state, 所以没有 side effects, 不容许mutation,可以同时运行进行并行计算,debug非常简单,而且几乎没有什么隐藏的bug。
所以和汇编语言一样,学习functional programming,不是为了找相关的工作,而是写出更好的code。现在Java, Python, C#, C++,,,,等等都支持functional programming
同理,学习C语言,其目的之一是使你成为一名更好的程序员,即使不用C。所以也是值得学的,因为它帮助你理解计算机是如何运作的。
总结一下,学习计算机语言,要带着热情去学,带着探险的激情去学,而不是带着畏惧的心情去学。多多益善的学。学习各种语言的特点,特别是要注意学习各种不同类型的语言。比如在学 distributed system时,是否用Go语言去做作业,学操作系统的时候,用 Rust语言去练习,学游戏编程的时候,用一下C#,图像处理时用用Julia。。。。不仅Open your eyes开了眼界, 而且了解到很多你以为不能做,或者很难做的事情,其实其他语言易如反掌。
最后一点,尽量避免dying language, 比如 PHP,VB,LISP,甚至 Java
楼主80年代的经验很古董了
但目前这些都没革命性的东西,局部改善而已、不足一提
Java是许多公司系统的后台使用的语言。
HRT 的 OA,只接受 C++和Python,其他语言根本不看。
如果写网页,必须Javascript
如果做游戏,必须 C++或者 C#
。。。。。。
当然,如果你的工作只是很普通的general purpose, 比如算法,那么什么语言,甚至语法也不重要。
是目前各家公司IT系统的主要后台语言。 也是C++以后的“最新”通用语言。
很不公平。
Javascript写后台的?
我写过汇编,java,C/C++, python, scala。现在我娃学编程,我就让他学C/C++和python
几点感想啊
,我认为
1. Java 在微软的消失是因为输了官司,只好另起炉灶,C#实际上和Java很类似。
2. javascript和Java在技术上没啥关系,也就是用Java的公告效应。
3.用C/C++写的stored procedure不能代替SQL,做数据处理是不行的,C/C++的SP是为了有效利用OS API, 而不是取代SQL
4. 同意要学汇编,但汇编有子程序啊,你当年用的汇编难道是DJS130吗
(just kidding)?
5, LISP用的不多,特别讨厌辣莫多的()
6. 个人认为functional programming language就是一个噱头没啥用。根本上你用有限自动机来执行,能没有state?你要用到register 和memory吧?
我认为大学学好汇编,C,一门OO就可以了,至于FP,了解一下概念即可
> 根本上你用有限自动机来执行,能没有state
文章写得好。太过专业,点评谈不上,只能说说按世俗角度的理解:
Q1. 是不是学一门语言就够了?
A1. 一辈子只睡一个人,不行。
Q2. 是不是所有语言都一样?
A2. 每个人都是千差万别的。
Q3. 汇编语言要不要学?
人要学会机器的思考方式。人最好成为机器。
Q4. 到底应该学哪些语言呢?
天底下那么多帅哥美女,多多交往才能成为情场高手。但要避免交往那些行将就木之人。
那就是杀鸡用牛刀。
javascript一般用于写GUI, mobile APP, frontend。 它跟Java毫无关系。
几点感想啊
,我认为
1. Java 在微软的消失是因为输了官司,只好另起炉灶,C#实际上和Java很类似。
==> 微软只是不被容许 extend java。开发J++不受法律限制。转C#的目的是保护windows操作系统。C#总体而言,是类似Java,甚至比Java更好些。而后来发展到 .Net core, 其实就是 extend Java了。不过Sun早死了,JVM也不重要了。
2. javascript和Java在技术上没啥关系,也就是用Java的公告效应。
==> 不清楚你有没有经历过那段历史,javascript是Netscape妥协的结果,发展来在Netscape navigator上面实现 Hotjava 上面的功能的。不觉得是公告效应,而觉得是对Java的臣服,完全不一样的语言,套用Java也是得到 Sun的容许的,而且当时的感觉,应该是Sun要求Netscape使用Javascript这个名字的
3.用C/C++写的stored procedure不能代替SQL,做数据处理是不行的,C/C++的SP是为了有效利用OS API, 而不是取代SQL
==> 当然C/C++,或者C#写的SP和UF,可以用到C/C++,C#的所有资源,和SQL各有对方不能替代的地方。即使都可以做,performance也不一样。比如SET process,SQL就快的多,而loop,SQL非常慢,如果用C来写,就快很多
4. 同意要学汇编,但汇编有子程序啊,你当年用的汇编难道是DJS130吗
(just kidding)?
==> 底层汇编子程序,也是通过 GoTo实现的吧
5, LISP用的不多,特别讨厌辣莫多的()
==> 是的,好在IDE帮你Match
6. 个人认为functional programming language就是一个噱头没啥用。根本上你用有限自动机来执行,能没有state?你要用到register 和memory吧?
==> 当调用结束的时候,都release了,所以没有 side effects
我认为大学学好汇编,C,一门OO就可以了,至于FP,了解一下概念即可
==> 参加编程竞赛,用什么语言呢? 是否 加 C/C++ ? 汇编了解一下也可以了。OO其实没多少真货。我觉得最重要的是 C/C++, SQL,Javascript
确实很难预言。作为WrapUp Javascript的ASP, ASP.Net, PHP, Swing, JavaFX, Perl都不行了。而Javascript越活越好。
我学的第一个 programming language 是Algo-60。穿孔纸带,检错就靠眼睛看。纠错就是剪刀胶水
719机。每天只有一次机会,compile 成功就打一堆结果,不成功明天再来。许多同学连一次 compile 都没成功。
Work together, not compete with each other.
现在用惯了IntelliJ,觉得写Java 和scala不错,但是它好像不支持C。另外不喜欢Eclipse。
Java, .Net, PHP都phase out.基于Javascript的Node.js Angular React 直接连SQL
React is better for a full stack developer, Angular is more for multiple teams working on a large project, some people only have access to Service, some have the access on database, others are for UI only.
Angular is using TypeScript, another layer out of JavaScript. also have to dealing with slowness and steep learning curve.
Whereas React is on top of Javascript, using it like second nature for long-time developer
is for Back End, any OO programmer knows it is far away from dying, it is a benchmark
multithreading, security...
Microsoft: c++, C#
Amazon: Java, C++, Python, and Perl