语言无关 – 现代软件开发抽象的含义[已结束]

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

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

本文要研究的是抽象在软件开发中可能产生的正面和负面影响.至于积极的,我相信我可以找到许多可以证实这一点的来源.但是抽象的负面影响又如何呢?你有什么故事可以分享关于某些抽象失败的话题吗?

主要担心的是,今天许多程序员都在编写反抽象的编程,而不必对抽象在封面下做什么一无所知.这很可能导致错误和糟糕的设计.那么,在你看来,程序员实际上知道抽象之下的内容有多重要?

以一个简单的例子来自Joel’s Back to Basics,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页面上听到的最新关注是开始用jQuery库学习JavaScript,完全忽略原始JavaScript.

问题在于:

>了解某些技术中最微小的细节,并掌握它,但同时又无法使用其他任何技术.
>对各种技术和工具的肤浅了解,然而这些技术和工具证明足以完成日常工作,使个人能够在多个领域执行,可能涵盖某些(中等规模)项目的所有方面.

随便挑选.

有些工作需要一个,另一个需要另一个.

So, in you’re opinion, how important is it that programmers actually know what is going below the abstractions?

如果人们知道幕后发生的事情会很好.这种知识来自时间和实践,在一定程度上.取决于你有什么样的任务.你当然不应该因为不了解一切而责怪别人.如果你希望一个人能够在各种领域中表现,那么他将不可能有时间覆盖每一个领域.

重要的是基础构建模块的知识.数据结构,算法,复杂性.这应该为其他一切提供基础.

了解某些特定技术的最微小细节是好的,但不是必需的.无论如何,你无法全部学习它们.他们太多了,他们继续前进.

Finally, what do you think about the issue that schools are preferring to teach Java instead of C and Lisp ?

学校根本不应该教授编程语言.他们将教授理论和实践CS,社交技巧,沟通,团队合作的基础知识.涵盖各种各样的主题和问题,为毕业生提供广角视角.这将有助于他们找到自己的方式.无论他们需要详细了解什么,他们都会自己做.

点赞