Language agnostic 现代软件开发抽象的含义

Language agnostic 现代软件开发抽象的含义,language-agnostic,abstraction,Language Agnostic,Abstraction,我目前正在写一篇论文,探讨当今软件开发实践或教学可能对编程的长期影响产生的影响或危险 我只是想说清楚:我不是在攻击编程中使用抽象。每个程序员都知道抽象是模块化的基础 我想通过这篇论文研究抽象在软件开发中的积极和消极影响。至于积极的方面,我相信我可以找到许多来源来证实这一点。但是抽象的负面影响呢?当某些抽象概念在你身上失败时,你有什么故事可以分享吗 主要的问题是,今天的许多程序员都是针对抽象进行编程的,根本不知道抽象在幕后做什么。这很可能会导致错误和糟糕的设计。那么,在您看来,程序员真正了解抽象下

我目前正在写一篇论文,探讨当今软件开发实践或教学可能对编程的长期影响产生的影响或危险

我只是想说清楚:我不是在攻击编程中使用抽象。每个程序员都知道抽象是模块化的基础

我想通过这篇论文研究抽象在软件开发中的积极和消极影响。至于积极的方面,我相信我可以找到许多来源来证实这一点。但是抽象的负面影响呢?当某些抽象概念在你身上失败时,你有什么故事可以分享吗

主要的问题是,今天的许多程序员都是针对抽象进行编程的,根本不知道抽象在幕后做什么。这很可能会导致错误和糟糕的设计。那么,在您看来,程序员真正了解抽象下面的内容有多重要

以C的strcat为例:

void strcat( char* dest, char* src )
{
     while (*dest) dest++;
     while (*dest++ = *src++);
}
上面的函数存在这样一个问题:如果要进行字符串连接,函数总是从dest指针的开头开始查找空终止符字符,而如果按如下方式编写函数,则会返回一个指向连接字符串所在位置的指针,这反过来允许您将此新指针作为*dest参数传递给连接函数:

char* mystrcat( char* dest, char* src )
{
     while (*dest) dest++;
     while (*dest++ = *src++);
     return --dest;
}
这显然是一个非常简单的抽象概念,但这和我要研究的概念是一样的

最后,对于学校更倾向于教授Java而不是C和Lisp的问题,您怎么看

你能谈谈你对这个问题的看法和看法吗


感谢您的时间,我感谢您的每一条评论。

了解算法的基本原理(例如时间复杂性)和一些关于金属的知识对于设计/编写好代码至关重要

不过,我认为,同样重要的是现代抽象和剖析方面的教育。我觉得现代抽象概念使我的工作效率比没有它们时高出很多,因此它们至少与良好的基础知识同等重要,如果不是更重要的话


我所受教育中缺少的一个重要因素是使用剖析器。当常规且正确地使用时,剖析器可以帮助缓解基础差的问题。

首先,抽象是不可避免的,因为它们帮助我们处理令人兴奋的复杂事物

抽象也是不可避免的,因为个人越来越需要承担更多的任务甚至完成项目。为了解决这个问题,可以使用封装较低级别概念并公开更复杂行为的库

当然,开发人员了解事物本质的时间越来越少。我在SO pages上听到的最新担忧是开始使用jQuery库学习JavaScript,完全忽略了原始JavaScript

问题在于以下两者之间的平衡:

  • 了解某项技术的最微小细节并精通它,但同时又无法处理其他任何事情

  • 对各种技术和工具的肤浅了解,但足以完成日常任务,允许个人在多个领域执行可能涵盖某些(中等规模)项目所有方面的任务

你挑吧

有些工作需要一个,另一个职位需要另一个

那么,在您看来,程序员真正了解抽象下面的内容有多重要

如果人们知道幕后发生了什么就好了。在一定程度上,这种知识是随着时间和实践而来的。取决于你有什么样的任务。你当然不应该责怪人们不了解一切。如果你希望一个人能够在多个领域表现出色,那么他就不可避免地没有时间把每一个领域都讲到底

最重要的是对基本构件的了解。数据结构、算法、复杂性。这应该为其他一切提供基础

了解某些特定技术的最细微细节是好的,但不是必要的。不管怎样,你不可能把它们都学会。他们太多了,而且一直来

最后,对于学校更倾向于教授Java而不是C和Lisp的问题,您怎么看


学校根本不应该教编程语言。他们将教授基本的理论和实践能力、社交技能、沟通和团队合作。涵盖广泛的主题和问题,为毕业生提供广角视角。这将帮助他们找到自己的路。无论他们需要知道什么细节,他们都会自己去做。

一个抽象失败的例子:

在这种情况下,需要一个软件来与许多不同的第三方数据处理器通信。通过各种消息传递协议进行通信;在这种情况下,传输方法/协议并不重要。假设每个人都是通过信息交流的

其想法是将这些第三方中的每一方的功能抽象为一种单一、统一的消息格式。这似乎相对简单,因为每个第三方都提供了类似的服务。问题在于,一些第三方使用不同的术语来解释类似的特征。还发现,一些第三方具有其他第三方没有的其他特征

抽象的设计者没有看透第三方术语的差异,也不认为将统一特性的范围限制为