有没有适用于Web的高级语言?

23

序言

要构建动态网站,我们至少需要掌握四门语言:

  • HTML 用于网页结构
  • CSS 用于布局和设计
  • JavaScript 用于互动
  • 业务规则语言或动态数据驱动的语言

此外,还有SQL用于持久存储,Memcache用于会话和缓存,API用于许多不同的内容管理系统。在构建Web应用程序时,我们还应该考虑与OpenID、Facebook、Twitter、OpenSocial等进行交互,以使其更有趣。

总之,这是一片混乱!

如果考虑两个目标:

  • 向孩子教授Web开发
  • 保持团队生产力

问题

有哪些高级系统可以将HTML + CSS + JavaScript + (插入首选的高级语言,PHP)统一起来?


背景

  1. 我是一名软件工程师,拥有15年以上的项目领导和开发经验,擅长使用Broadvision、Autonomy、Enterprise Java和Oracle等技术。

近年来,我专注于开发社区网站,使用Drupal或PHP框架如CakePHP。我喜欢Web开发,并享受所涉及技术之间的阻抗匹配。但不可避免的结论是必须有更好的方法

  1. 我是两个儿子(13岁和9岁)的父亲,虽然我不希望他们成为程序员,但我希望他们理解计算机不仅仅是游戏机。我想鼓励他们尝试一点Web开发来表达自己。

每当我向他们展示一些东西时,我希望他们有一套工具集,可以让他们在一个周日下午花费一两个小时即可创建“有趣”的结果。


14
你真的想要与网络运作的方式进行斗争吗?ASP.NET曾经尝试过这样做,但结果并不好。请注意,此处只是翻译,没有其他额外的内容返回。 - Andy Gaskell
3
我不想反对这种方式。我只是认为当前的网站开发方式非常低级,而且怀疑它是否仍然适用。我希望找到更高级别的方法指导,就像Python比C更高级别,再比汇编语言更高级别一样。 - Olav
1
更重要的是 - 为什么你不希望你的孩子成为程序员呢?如果一个人有健康的生活方式,那么成为程序员是一份很棒的工作 - 薪水通常很好,它是一份创造性的工作,可以让你思考和解决问题。这有什么不对吗? - Jamie Rumbelow
2014年更新 - NodeJS正好做到了这一点。 - Benjamin Gruenbaum
另一个选择:Imba - undefined
显示剩余5条评论
19个回答

12

GWT在一定程度上是一个高级工具包,允许您编写Java代码以生成Javascript。


2
我不太确定Java比JavaScript更高级,但谁知道呢。反正我是主观的。 - Ionuț G. Stan
2
Java并不比JavaScript更高级,但GWT是因为它完全抽象了JavaScript的编写。更高级别的语言/工具包/库的目的是将您从某些东西中抽象出来,而GWT做得非常好。 - lubos hasko
我认为JavaScript肯定是更高级的。我还要语义化地指出,任何语言都可以让你生成JavaScript :) - jscharf
2
一个有趣的方法可能是在客户端和服务器端都使用JavaScript,就像Helma(http://dev.helma.org/)所做的那样。 - Olav

9
"Links 是一种新的编程语言,旨在使web编程更加容易。Links通过提供一个单一的语言来解决阻抗不匹配问题。该系统为每个层级生成代码;例如将一些代码转换为浏览器的Javascript,一些代码转换为服务器的字节码,一些代码转换为数据库的SQL。

起初我并不想发布这篇文章,因为它只是一个研究项目,而不是一个生产系统;但所有这些回答都说“那就是它的样子,接受它吧”都需要一个反例。"


它甚至来自爱丁堡;-) 谢谢Darius,这正是我想要的东西。 - Olav

8
如何向孩子们教授网站开发?许多孩子涌入了网站开发领域,这降低了我们这个行业的职业水准,现在几乎任何人都可以称自己为程序员,而我们却越来越难以与他们区分并获得体面的薪酬。需要掌握的语言和技术很多?这是好事。让加入开发者行列有一些入门门槛。补充一下:根据评论,我意识到自己没有表述清楚。我并没有提到年龄,无论是10岁、30岁、50岁还是80岁。重要的是态度。一个人是否理解并接受这样一个事实,即这个职业远不止于在设计师或CMS中使用鼠标移动控件。有很多知识需要掌握,包括计算机科学基础、算法、数据结构、数据库、架构、可扩展性、维护、性能、可伸缩性、可用性、营销等等,这些都属于专业软件开发人员的工作范畴。如果一个人对这些一无所知,并且不努力学习和提高自己的技能,那么他们就不属于这个行业。让这个观点有所偏见。

1
真的。我无法告诉你有多少次我听到过:“哦,我的表弟说他可以免费为我们制作一个网站。” - Sampson
3
我很讨厌自己在这方面有如此极端的偏见。我今年16岁并且会编程。 - Tyler Carter
5
@Jonathan Sampson,我认为任何人都不应被称为“软件工程师”。我们离软件“工程”就像离到达另一个星系一样遥远。像“stackoverflow”这样的网站存在,表明我们作为专业人士注定要失败。给我看一个电气工程师坐在那里向网上的人寻求解决问题的例子,而他正在设计电路。如果他泄露了任何细节,他的雇主可能会因此解雇他,这一点也不令人惊讶。是否有建筑师在网上寻求帮助设计平面图?我怀疑,即使有,他们的价值是什么? - Sergey
3
SO没有任何问题。如果我们都在这里询问如何执行条件逻辑,那就有问题了。框架不是为了帮助木匠做他们的工作而出现的。每年都会创造新的工具,他们必须熟悉。在这方面,我们的工作完全不同。你提问并不意味着你的价值更低。 - Sampson
3
@Chacha102 嗯,我也是这种情况。但让我感到震惊的是,当我这个十几岁的人看着一个成年人的代码,感觉他的错误和马虎状况时,我就想掐死他。我尽力遵守标准,但我看到比我年长得多的人(甚至是“专业人士”)把他们的代码搞得一团糟,让我们所有人难看...尽管我理解像我这样的程序员有时很少。最令人沮丧的是,当人们太无知、懒惰或固执,不愿意学习如何清理东西并正确做事时。SO进入了! :D - Samuel Jaeschke
显示剩余8条评论

8

Web编程是一门本质上跨学科的工艺。

主要原因是因为关注点分离...HTML、CSS、JavaScript、SQL等不被混在一个语言中的原因是它们各自有不同的目标、注意事项、陷阱和优势。

你能想象试图调试一个将SQL、CSS、JavaScript和PHP代码混合在同一源文件中的站点吗?你可能已经有过这样的不幸经历。可悲的是,有成千上万个网站都是这样编写的,尝试调试或添加到这样混乱的展示、数据和结构的混合物中是一场完全的噩梦。

总而言之,一团糟!怎么教孩子们Web开发呢?

我认为最重要的是教授编程基础并让它们牢记。变量、逻辑、指针、内存管理、算法、数据结构等。

当你掌握了编程的基础,就很容易在多种语言中工作,学习新语言,并随时跟上时代的变化。对于像Web编程这样不断演进和趋势导向的东西来说,这是一项无价的技能。

我认为新手应该从低级语言开始学习,比如C语言。人们应该学习编程的内在、基本概念,并在展示更高级别的语言(如PHP或Python)之前了解背后发生的事情。

我认为这种教授编程的态度将产生培养更好的Web开发人员的效果,并提供一个入门障碍,筛选出没有兴趣或智力的人。我认为这种态度的结果将是更好的开发人员、更好的软件,以及更强大的语言和工具。


2
我认为 ANSI C 是理想的第一编程语言 - 它可以让你相对容易地取得进展,同时迫使初学者程序员理解计算机的内部工作原理,特别是基础的内存管理。 - Tamás Szelei
我同意。即使在整个网络开发生涯中你从未担心过内存管理,了解幕后实际发生的事情并欣赏高级别的奢侈感,从不必担心明确删除每一个创建的东西中受益匪浅。 - jscharf
3
啊,没错,没有什么比在调试器中花费16个小时来查找内存泄漏更能让新手真正体会到编程所提供的创造和探索的乐趣了;-) - Steven A. Lowe
@[Steven]:在我看来,那应该被视为一种成长的仪式 :-)我有一个隐隐的感觉,很多网络开发人员甚至从未接触过调试器。 - jscharf
不同的编程语言之所以存在,是因为巧合而非有意为之。关注点分离(例如MVC)与技术混杂完全不同。人们可以使用纯粹的100%可移植Java-Swing开发良好结构的MVC应用程序。事实上,许多来自Sun MS的工程师更喜欢这种方法,但现在Swing已经不那么流行了。 - Andrew not the Saint
显示剩余2条评论

6
我认为最接近你要求的是.NET。虽然有许多针对不同语言的框架,但没有我所知道的能够完全处理所有内容的框架。此外,你不应该试图说服孩子编程很容易。这是一个困难的职业,需要大量的学习和维持。我们使用的技术今天就在这里,明天就可能消失。
如果你想一想,编程并没有什么不同于木工或航空技术。几乎任何你选择的职业都需要你学习很多不同的东西才能更好地做好自己的工作。

1
当我添加“面向儿童的Web开发”时,我考虑了一个类似于Ruby的Shoes(http://www.rubyinside.com/whys-shoes-grows-up-1014.html)的简单工具包,但是用于Web。这真的是一件简单的事情,可以说服孩子们计算机不仅仅是游戏机器。 - Olav

5

如何向孩子们教授网页开发?哇,这是一个棘手的问题。那么如何教他们外科手术、知识产权法律、土木工程呢?或者说汽车维修、水管安装、总承包等呢?

你有没有考虑过播放一盘《芝麻街》的录像带?

埃尔莫不喜欢你将他的职业轻视。


像http://scratch.mit.edu/这样的环境为孩子们提供了一个学习编程的环境。但是,可发布的结果仅限于网页上的小矩形,而不是完整的网页。也许像Adobe Flash这样的统一商业产品确实是我问题中“针对儿童”的答案。 - Olav
约翰在这里提出了一个很好的观点。我认为我们程序员在这些事情上有点自我中心。为什么需要向孩子展示如何编程?为什么不向他们展示其他任何职业呢? - nickf
3
这种讽刺态度无益且傲慢,不必要的防御性强并且最终产生反效果。这种行为会使编程从开放平等变成一种权威主义,而这只有祭司才受益。Olav并没有轻视任何事情。他没说专业的网页开发很容易,但他明确表示他不是让孩子们成为专业人员,只是让他们了解基础知识——这些 容易的,任何人(包括我)都可以学习,这正是使网络成为民主平台的原因。 - Alex Basson
无论你觉得它是否有帮助,是否傲慢自大,或者不必要地进行辩护等等,这种回应恰恰是在论证网站开发足够简单可以教给孩子的论点背景下所需要的。事实上,在第一位就没有必要将软件开发作为一项非平凡的成人职业进行辩护,而这样做也并不会创造出一个“神秘”的行业,就像说普通承包或土木工程不能轻易地教给孩子一样,也不会创造一个“神秘”的行业。 - John Lockwood

4

软件行业正遭受着无资质的个人制造低质量产品,并同时远离成为真正的工程学科。这不是可以通过认证来解决的问题。天哪,请不要“教”任何人软件开发。向他们解释,制作优秀的软件只有在具有多年经验和对过去和当前技术的丰富知识的基础上才能实现。你最糟糕的做法就是介绍另一个半吊子的开发者,给与他们合作的其他人带来更多的工作。告诉他们去接受教育。我知道这可能不是你想听到的答案,但我希望这篇文章能被阅读。


1
我在某种程度上同意。然而,你必须想办法到达那里。“多年的经验”- 在此期间你应该做些什么?我认为,去教他们。但是,如果你正在教他们一项爱好,请明确表示编码或Web开发只是一种爱好,除非他们愿意花费大量时间,深入学习并学会如何正确地做所有这些事情。 - Samuel Jaeschke
我认为你所描述的是整个争论的根本原因。对于很多人来说,编程仍然是一种爱好。由于行业普遍不要求这样做,因此没有继续学习和深入了解的动力。因此,你最终会发现编程爱好者与专业开发人员并肩工作(个人经验)。我认为它应该像其他职业一样受到对待,比如工程(尽管它不是)。让学校来教授知识,让公司通过雇佣聪明、知识渊博、有资质的人才来改进产品。一旦你走上正确的道路,经验就会随之而来。 - Sergey

2

我认为Web开发的问题在于它最初并不是为今天的用途而设计的。我们使用HTML+CSS+JavaScript以及任何生成它们的服务器端技术在浏览器内构建富客户端应用程序。是的,它可以工作,但很痛苦,特别是那些令人恼火的浏览器不兼容性。Flash和Silverlight的存在证明了这一点。它们让你使用单一技术构建应用程序,仍然在浏览器内运行。当然,需要插件来支持您的内容也有缺点。


2

语言并不是你最担心的问题,而是与之相关的问题领域非常复杂。使用不同的语言实际上使事情更加可管理,因为 a) 它使界限变得明确,b) 这些语言可以针对特定领域进行优化。


我知道的一些Web框架尝试统一不同的语言:Ruby-on-Rails可以从Ruby代码生成Javascript。CakePHP和Ruby-on-Rails都有用于表单生成的服务器端代码。但是,这些框架都没有涉及CSS,尽管我的经验是,经过几次迭代后,CSS文件会变得难以管理。我认为这是由于该语言缺乏嵌套作用域所致。 - Olav

2

编程(PHP/JS)和文档格式(HTML/CSS)是两个不同的事情。

同时学习PHP和JS会更加困难。

在开始时,你应该专注于客户端的HTML和JS。接着可以让他们在服务器上编写JavaScript。这样只需要一种编程语言,并且首先专注于HTML而不是CSS。

一旦他们学会了JS和HTML的基本知识,你可以教他们更广泛使用的服务器端编程语言(如PHP、Ruby等)和CSS。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接