我应该怎么做才能与语言无关?


52

现在,我使用asp.net和C#。我在Java中也做得不错。我正在计划自己的职业,以至于有一天我会与语言无关。我需要学习什么?

首先,OOP范式是关于类设计的。还有其他吗?


2
您是否在尝试:避免被贴上标签,具有工作上的灵活性或追求某种视觉?
JeffO 2010年

2
@Jeff是的!为了避免被贴上标签,而不是为了争辩我的语言是最好的;)
Gopi 2010年

我更有可能聘请一个观点与我不同意的人。因为那样他可以写Java。
Erik Reppen 2013年

如果您这样做,招聘人员将跳过您的简历。
gonzobrains 2014年

Answers:


67

要与语言无关,您需要具有所有常见样式和类型的语言的经验。

  • 一种命令式语言(逐步告诉您该怎么做。例如-C)
  • 一个声明语言(你告诉它你的目标,它的数字出来做什么EG - SQL / HTML /序言)

也:

  • 一种功能语言(功能是关键,避免状态和副作用是目标。例如-Haskell / OCaml / Lisp / F#)
  • 一个面向对象的语言(架构,对象封装相关数据以及对其采取行动的方法)。例如-Java / C#)

一些打字风格:

  • 静态类型语言(数据类型的定义和在编译时检查EG - C#)
  • 一个动态类型语言(数据类型是在运行时如检查-的Python / JavaScript)的
    经验弱的类型也非常有用。

一些不同的运行时样式:

低级内容:

  • 相当低的水平(例如-C)
  • 某些汇编语言(例如,NASM)

最重要的是,我需要一些并发编程事件驱动的经验。您可能还应该确保对各种领域有所了解,例如Web编程(客户端和服务器),富客户端开发/桌面,游戏。您可能还想了解嵌入式编程或专用硬件(例如游戏机),并且移动开发正变得越来越重要。

其他人也提到,值得获得泛型编程元编程方法的一些经验。

当您学习这些范例时,请避免仅学习语法并以旧样式编写。我已经看到许多C#开发人员将JavaScript当作静态类型来编写。不要这样做,尝试学习语言范式并接受它们。

如果您完成所有这些操作,那么语言之间的差异将在很大程度上成为语法上的差异,因此切换将成为学习一些新语法的相当简单的练习。

尽管现代编程几乎总是依赖于框架,但不要忘了,因此熟悉所学每种语言的通用和流行框架也至关重要。没有.net,了解C#无关紧要。


9
在给定的意义上,HTML是如何声明的?“目标->行动”?它实际上并没有任何事情。
Felix Dombek 2010年

3
我只能推荐研究的一种出色的声明性语言是Prolog。它与其他任何事物都不同-没有函数(但是关系可以双向工作),没有显式控制流(解释器为您解决了所有问题),只有一个很好的数据结构(术语,不需要任何其他东西。)它的功能是每秒进行数百万次的统一和推断-开发某些东西所需的时间与使用C / C ++相比,在Python中要短。
Felix Dombek 2010年

3
@Felix:HTML,目标=“我想要标签和文本框”。行动=布局和图形引擎找出如何绘制它们。详细信息取决于各个浏览器。您只需要定义所需的内容,而不要定义如何执行。看这里。但是,我同意,它并不是真正的“语言”。Prolog是一个更好的示例,我将进行更新。
西蒙·史蒂文斯

1
+1对于种类繁多的类型,语言选择在某些地方与范式略有不同,但总体而言非常出色。
2010年

2
顺便说一句,您应该添加“不同的域/抽象级别”:Web,交互式Web,桌面工具,桌面游戏,持久性游戏的构建方式不同,因为约束条件和与硬件的距离不同,因此需要选择语言(甚至存在)对于想要了解不可知论者的人来说更为明显。
克莱姆(Klaim)2010年

4

我认为您不会成为真正的语言不可知论者。我发现我以当前的语言(目前为C#)“思考”。

但是,话虽如此,我认为您可以通过尝试使用伪代码而不是特定的语言来思考,并以这种格式写下来,从而将设计与代码分开。这可以帮助您专注于设计和体系结构决策,而不是当前语言的实现。正如Simon指出的那样,这样做的缺点是最终使用的语言和框架将不可避免地影响设计。因此,随着设计的发展,它将越来越与语言和框架联系在一起。


为“您不能真正做到语言不可知” +1。但是我不太同意你的第二段。我确实认为为您要使用的语言和框架进行设计很重要。
西蒙·史蒂文斯

@Simon-您对框架的设计有很好的了解。我将更新答案。
克里斯·

3

阅读您的问题和一些答案可以给人的印象是,您将“语言不可知论”等同于“了解地球上的每个范式”。

我不确定是了解每种存在的范式还是了解多种语言,跨越几种范式和语言类型使您“与语言无关”。

这就像在说所有宗教信仰使自己在宗教上不可知。

我认为与语言无关的人应该是完全不知道如何使用任何语言进行编程的人,或者根本不在乎要求他/她使用哪种语言进行编程的人。

就是说,有人说,一个真正的程序员可以使用任何一种语言进行编程,只要可以访问该语言的文档。

如果那是“不可知论的语言”的意思,那么几乎所有有经验的程序员都可以使用他/她被迫使用的任何语言进行编程,并且有权访问语言文档。

也许您想成为“语言多神论者”。

我本人能胜任几种语言范例,但我更喜欢OOP。所以我想我不是不可知论者。

如果有选择的余地,您几乎找不到不喜欢某种范例或语言的人。


0

不只是语言,Java本身还有许多不同的模式,您可能需要花费数年时间才能学习所有这些语言。您可以学习:

  • J2EE功能,例如消息传递和持久性以及各种服务器
  • jsp和面向Apache的工具包
  • ant,maven和其他构建系统(语言本身)。
  • 整个Groovy / Grails世界
  • 所有的Apache Commons API
  • 测试系统(模拟,JUnit)
  • GUI构建器,例如Swing,GWT ...

还有一百件事我想念的-仅在Java中。

如果您花费数年时间来学习广度(学习每种语言),您将很难获得有效地运用其中任何一种语言的深度。

我并不是说学习新语言永远都是问题,您应该积极地这样做!我尝试根据我能学到的东西(我还没有完成的事情)来选择我的下一份工作,但是我不经常选择一种随机的语言来学习它-上次我尝试在Scala上学习时有点谦虚...


“整个Groovy / Grails世界”中,可以添加“,整个Scala / Play!2世界,整个JRuby / Rails世界以及整个Clojure / Noir世界”。
Vorg van Geir 2013年

1
我同意,前一阵子写道,这只是想尽办法-尽管我可能只是选择其中一个Web框架并使用它。
Bill K
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.