问题

计算机基础知识对程序员来说有多重要?

回答
程序员必备的“内功心法”:计算机基础知识的重要性

在编程的世界里,很多人往往沉迷于学习最新的框架、炫酷的语言特性,仿佛掌握了这些“外功”,就能无往不利。然而,正如武侠小说中那些真正的高手,往往拥有深厚的内功底子,能够将任何招式融会贯通,甚至自创绝学。在程序员的世界里,计算机基础知识就是这门至关重要的“内功心法”。

很多人可能会问,我现在用着高级语言,很多底层的东西都有封装,为什么还要花精力去啃那些“古老”的计算机基础知识呢?这就像一个厨师,只知道如何使用各种先进的烹饪设备和预制调料,却不理解食材的化学成分、烹饪的物理原理,那他最多只能算个合格的“加工员”,而无法成为一个真正的“大厨”。

一、 洞察“黑箱”的本质,解决棘手问题的关键

现代编程语言和工具,就像是为我们提供了一层又一层的“黑箱”。我们输入指令,它们就帮我们完成了各种复杂的操作。然而,一旦出现问题,尤其是那些难以捉摸的性能瓶颈、内存泄漏、甚至是意想不到的bug时,这层黑箱就会变得令人沮丧。

这时候,深厚的计算机基础知识就显得尤为珍贵。了解计算机的体系结构(CPU、内存、I/O设备如何协同工作),操作系统如何管理进程、线程和内存,网络通信的底层协议(TCP/IP)是如何工作的,数据库是如何存储和检索数据的,这些知识能帮助我们打开“黑箱”,理解问题的根源。

性能优化: 当你的程序运行缓慢时,仅仅依靠profile工具来定位问题是有限的。如果你理解了CPU的缓存机制、指令流水线、内存访问模式,你就能写出更有效率的代码,避免不必要的内存拷贝,充分利用CPU资源。
排查Bug: 很多难以定位的Bug,往往与内存管理有关。栈溢出、堆溢出、野指针、内存泄漏,这些问题如果缺乏对内存分配机制、垃圾回收原理的理解,将如同大海捞针。甚至,一些看似简单的逻辑错误,也可能因为对位操作、数据表示方式的不熟悉而产生。
系统设计: 当你需要设计一个高并发、高可用、低延迟的系统时,你不可能只停留在应用层的API调用。你需要知道如何设计高效的数据结构,如何选择合适的并发模型,如何处理网络请求的序列化和反序列化,如何设计可靠的容错机制,这些都离不开对操作系统、网络通信、分布式系统原理的深入理解。

二、 跨越语言的鸿沟,成为真正的“全栈”

编程语言如同不同的乐器,每种都有其独特的表现力和适用场景。但如果你只会弹奏一种乐器,你可能会错过很多更美妙的音乐。计算机基础知识,就是让你理解音乐的“乐理”,一旦你掌握了乐理,你就能触类旁通,学习任何一种乐器都会变得更加容易。

语言选择: 了解不同编程语言的设计哲学和底层实现,能帮助你根据项目需求选择最合适的语言。例如,C/C++ 的内存管理模型、Java 的 JVM 机制、Python 的 GIL 对并发的影响,这些都会直接影响你在特定场景下的开发效率和性能。
框架理解: 现代编程生态中充斥着各种框架和库。但如果你仅仅是照搬照抄,而不知道框架背后的设计模式、数据流向,一旦出现问题,你将束手无策。理解了计算机基础,你就能更好地理解框架的设计思路,甚至能够定制或贡献于这些框架。
学习新事物: 随着技术的发展,新的编程语言、框架和技术层出不穷。如果你有扎实的计算机基础,学习它们将不再是难事。例如,了解了操作系统如何处理文件I/O,你学习Go的goroutine和channel就会更容易理解其并发模型。了解了数据库原理,学习任何一种NoSQL数据库都会事半功倍。

三、 提升“软实力”,塑造专业素养

计算机基础知识不仅仅是技术上的“硬实力”,更是程序员专业素养的体现。

清晰的思维: 学习计算机科学的理论知识,例如算法与数据结构,逻辑学,会极大地锻炼你的抽象思维、逻辑推理能力和问题解决能力。你会学会如何将一个复杂问题分解成更小的、可管理的部分,并为之设计出最优的解决方案。
沟通的桥梁: 当你需要与系统管理员、运维工程师、甚至是硬件工程师沟通时,如果你能用他们理解的语言和概念去描述问题和需求,沟通效率将大大提升。
职业的长远发展: 技术更新迭代的速度飞快,今天流行的框架可能明天就被淘汰。但计算机的底层原理是相对稳定的。拥有扎实的计算机基础,意味着你拥有了持续学习和适应新技术的能力,你的职业生涯将更加稳健和长远。

具体有哪些重要的计算机基础知识?

要成为一个优秀的程序员,以下几个方面是必不可少的:

1. 数据结构与算法: 这是编程的基石。了解各种数据结构(数组、链表、栈、队列、树、图、哈希表等)的特性和适用场景,掌握常见算法(排序、查找、图算法、动态规划等)的设计思想和复杂度分析,是写出高效、可扩展代码的关键。
2. 操作系统原理: 包括进程与线程管理、内存管理(虚拟内存、分页、分段)、进程间通信、文件系统、I/O管理等。理解这些能让你更好地编写并发程序,优化资源利用。
3. 计算机网络: 重点是TCP/IP协议栈,包括HTTP、DNS、TCP、UDP等协议的工作原理,了解网络通信的各个层次以及数据传输的过程。这对于开发网络应用、分布式系统至关重要。
4. 数据库原理: 关系型数据库的ACID特性、事务管理、索引原理、SQL优化;NoSQL数据库的CAP理论、一致性模型等。
5. 计算机组成原理: 了解CPU的工作原理(寄存器、ALU、控制单元)、内存层次结构(缓存、主存)、指令集、二进制表示等。这有助于理解代码的底层执行效率。
6. 编译原理: 了解代码从高级语言到机器码的转换过程,包括词法分析、语法分析、语义分析、代码生成等。这能让你更深刻地理解编程语言的特性。
7. 设计模式与软件架构: 虽然不完全是底层技术,但理解设计模式和常见的软件架构模式,能够帮助你构建更健壮、可维护的软件系统,这与底层原理的理解是相辅相成的。

结语

计算机基础知识,不是“老掉牙”的知识,而是程序员的“武林秘籍”。掌握它们,你就能像一个内功深厚的武林高手,无论面对何种招式,都能游刃有余,甚至化腐朽为神奇。不要只追求“花拳绣腿”,打好坚实的基础,才能在编程这条漫长的道路上走得更远,成为那个真正能够解决复杂问题、创造价值的优秀程序员。

网友意见

user avatar

大约08年,我在一家公司写了大约800行代码。这800行代码可以一劳永逸的替代他们已有的二三十万行满是缺陷的垃圾。


事情是这样的:他们搞了个很复杂的系统,我不想讨论这个系统设计的有多烂了;总之,他们需要搞几百个不同的报文,在网络上传来传去。每个报文长短不一,有的可能只需三五个字段,有的得有三五十个甚至更多。由于设计水平问题,绝大多数报文字段数量都很大(换句话说就是没有什么上下文,一切一切都要放网络封包里)。


C++数据结构是不能直接在网络上传输的;尤其这个系统有C++写的部分,也有java写的部分。因此必须先转换成网络报文,然后才能提交给网卡传输;等对方收到报文后,必须解析这个报文、识别它的数据结构、然后在把它转换回来。

报文类型太多,他们的程序员能力又……嗯嗯,稀烂;所以他们决定,所有这些数据结构都要转换成XML传输,对端收到后,再解析XML、还原数据。


总之,一来一回,他们这每个报文往往需要少则两三百行、多则三四千行代码,这才能完成数据收发工作。几百个数据结构综合起来,代码量轻松破几十万。


总之,因为程序员能力问题,他们这个系统的水平啊……真是一言难尽。


只说一点吧:他们居然把debug版的assert重新定义为空,因为……他们害怕崩溃。

可是,掩耳盗铃就真能治崩溃吗?

有一次,一位同事愣是跨越不知多少层逻辑,把自己的XML灌进了我的执行栈。

程序崩了,找我;打开core一看,我的程序栈被灌了一个一塌糊涂,内容是一个八竿子打不着的XML。我就问这个表格是谁负责的,这才找到他。


然后,这位找到一个一千多行的函数,前面几十行拷到末尾,末尾几十行拷到前面,中间再呼啦删掉几十行……折腾大半个小时,告诉我“好了”。

一运行,程序崩了。崩在他的代码里面。


当时一位和我关系很好的、华为出来的同事实在看不下去了:“你写程序都碰运气的吗?来,看这字符串内容,看它和哪个变量有关……排错是需要逻辑的!哎呀你怎么不用循环?算了算了先排错……”

这位还一脸不忿:“看看!编译错误!我的起码能编译!”

没理他。五分钟后,问题解决。


和另一个组同时接的一个任务,我们一周完成,然后找经理要第二个、第三个任务,等做到第四个甚至第五个任务了,这个组终于姗姗来迟,完成了自己的任务——然后装的很努力的样子,星期天到公司加班联调。

然后,他们十万火急的喊我去公司,说我程序有bug;问是什么bug,不答。过去一看,需求没写清楚,只说某个字段是一个字符串;我按C惯例,后面留了个;他们认为这里不应该有,五六个人就干等我过去……

删掉,数据传输正确,对方的模块立刻崩溃。检查再三,数据没问题,他们自己写出bug了——这个谁负责的?他来了没?出差了?那调不了,大家先玩吧。

就这么个工作态度。


可想而知,这个系统会是什么水平。


总之,不吐槽他们了。先解决问题。


这个问题我是这么分析的:

1、基本数据类型有限

事实上,每种不同的数据类型,打包/解包流程全都一样。因此不应该每个报文从头敲代码,重复劳动太多了。

如果把它们写成诸如int2xml/xml2int、str2xml/xml2str,那么代码量就会大幅降低。或许不到十万行就能解决问题——等于代码量下降到原来的1/3甚至1/4。


事实上,C++支持泛型。完全可以统一搞成个var2xml/xml2var,类型推导系统会自动推导出正确类型、生成正确的代码——至多针对特殊数据类型做一点特化。

这样基础数据的打包/解包操作会更简单,代码量可以进一步降低——因为无需判断数据类型了,对每个字段调用var2xml(s.item, str_buf, buf_len)就行了,泛型系统会自动选择正确实现。

用这种方法写,或许三五万行代码就能解决问题。


2、所谓数据结构,其实不过是基本数据类型的组合

因此,如果可以让程序“知道”某个数据结构里面的每个字段的偏移位置以及数据类型,那么完全可以统一处理所有报文。


比如说吧:

       struct login {    char username[20];    int ID; }      

如果程序能从login这个类型,知道它的开头是20个字节的char数组、然后第21个字节开始是一个int的话,自动从login转换成xml报文或者从xml报文重建login,就是很简单的一件事了。

(用size_of就可以知道int的大小,这也方便不同平台之间迁移。如果需要固定字节数,可以声明为int_16/int_32等。)


但是,C++本身是支持不了这个的。怎么办呢?

学MFC,玩宏:

       DECLARE_TABLE(login) DECLARE_TABLE_ITEM(login, username, char, 20) DECLARE_TABLE_ITEM(login, ID, int) END_TABLE_DECLARE(login)      


用这个方式接管struct声明过程,我们就可以在宏里面玩猫腻了。

我的做法是,DECLARE_TABLE里面其实没有生成login这个struct,而是声明了一个login_details的数组;然后DECLARE_TABLE_ITEM其实是在初始化这个数组,把不同偏移位置的数据类型记录下来。

直到END_TABLE_DECLARE这行,login这个struct才真正建立。


然后就简单了。写一对模板函数struct2xml/xml2struct,利用模板推导,自动查找typename##_details数组(这个##是gcc的扩展,用来拼接字符串),关于typename的细节就到手了。然后逐项处理这个数组,自然就完成了打包/解包工作。


这个东西类似于后来名声显赫的protobuf;只是我那时技术视野还不够宽广,仿效对象是不够优雅的MFC。因此缺陷颇多,看起来诘屈聱牙,还用了gcc的关于宏的一些非标扩展,较难维护。等后来见了ORM和protobuf的实现思路之后,我才知道自己的笨拙。


它一共花了我两三周时间,写了800多行代码。照例,一次编译通过,测了一周,完美支持各种报表数据;而且在设计之初就选用了效率最高的方案,0额外内存占用,也没有额外的读写负担。

现在,只要把原始的结构体声明替换成这么一组DECLARE宏(可以写一个小程序转换),然后需要xml时调用struct2xml,需要从xml还原时先识别报文类型再调用xml2struct——还是那句话,无需区分,无需记忆,类型推导系统会自动帮你选择。


现在,让我们对比一下。

过去,为了打包/解包这些报表,按共200个报表(其实还不止这么多……人家的设计就是信手画个蜘蛛网,一个心跳处理都能画十几个方块、几十条线路,包含若干种不同报文)、每个报表有二十个字段、每个报表打包解包一两千行算(因为每个字段都要复制,要在xml中记录和校验长度,要写日志方便追查执行流程;而且网上收到的每个xml报文都需要先解析xml、确认每个字段名称;加上他们很多人不用循环,写的又臭又长,每个字段用五十到一百行代码完成打包/解包并不算多。注意注释也算代码行数),共需20到40万行代码。

四年共1460天,208周;那么按三十行代码算,一个人必须每周开发1400多行代码,才能写完这些代码。


然后,这每周1400行代码,又得多少测试,才能堪堪够用呢?

要知道,很多名校毕业生,写一两千行代码就得两三个月;然后为了测这个代码,又得来来回回反反复复折腾两三个月甚至大半年的,就这样都还bug不断。

哪怕这1400行代码因为太过平铺直叙所以成了熟练工的体力活,起码也得另外的一周测吧?

要按之前那个拷来拷去排错流搞法,那可不是另外一周。那是一周测出N个bug,每个bug都要花一两周定位到人、然后再花个把月修复……然后再修出新的bug,在解决新的bug的过程中,旧的bug又莫名其妙的回来了……

别笑。这些人就是这么工作的。所以这个项目在我加入时已经被200多人开发了一年半——但里面毛病太多了。因此直到我离职,仍然没有半点眉目。


而我这800行代码,写完再不用动。想找出所有bug,是不是容易太多?

然后,随便你想个什么报文,用DECLARE宏一声明,struct2xml然后发送,或者先接收、识别报文类型然后xml2struct解包……搞定。回家爱干嘛干嘛吧。

你看,这只是编程语言基础知识的一点小小应用。会了,你就可以955、然后用三周时间的800来行代码,碾压别人007连轴转、每周1400行代码忙碌四年的成果。

而且,800行代码可以一次写出0bug;每周1400行代码写四年,又岂是另外一个四年能抓尽bug的。

你省心省事,老板得了实惠——别人上千万都搞不定的,到你手里一个月不到搞定,帮他一下子省了99.9%的支出,又帮他抢在潜在竞争对手之前搞定上市:你觉得这东西应该值多少钱?一个能带着整个团队、以最有效率的方式直线达到目标的技术专家,相比于那些“一将无能,累死千军”之徒,哪个用起来更合算?


当然,这只是个简单案例。因此一个基础知识掌握较好的“仅仅”以5、60倍的效率碾压了那些基础知识没有很好掌握的。稍微复杂一些的情况下,好程序员效率百倍于差程序员的情形,都是业内人士司空见惯的。



2020-9-3补充:

玩过的都知道,XML封装起来很方便,但解析嘛……

要么,解析库会先跑一遍,把它整成一棵“树”,然后用户按需读取每个分支、每个节点(但有时存在一些数量不定的数据,比如携带的某种数据可能是0条、1条或者N条,因此必须按一定顺序读取)。

这个做法直观,方便什么都不懂的初学者使用,但效率较低。因为要先开辟内存、解析XML填充树结构,然后再访问这棵树,访问完了再删除树;等于多了至少一次内存分配/归还操作、多了一遍为了建立解析树的读写操作、也多用了一些内存。

要么,库识别tag,你在回调里按顺序边读边解析边填充到C结构里。

这种效率更高,因为只需访问一次;但必须自己注意嵌套结构何时出现、到了第几层、遇到结束符如何返回,等等。它需要你熟知各种基本算法,对技术不高的初学者来说难度较高甚至无法理解;对学艺不精的工程师来说较为复杂,一不留神就会出错。


顺便的,我看到这个回答下有人认为这和“计算机基础知识”无关。嗯……我不知道他是业界大佬呢,还是单纯的看不懂……

可为什么之前我回答这个问题,又引的一票子人跳出来说我理想说我低端呢?


为什么他们暴跳如雷呢?

因为他们觉得leetcode的这种题目钻牛角尖、过难、无聊:

恐怕任何懂点编程技术的都不会觉得这种题目配叫hard吧

这不是想都不用想的基本操作吗?我平常用太多以至于都忘了这居然也配叫算法了


别说这种题目太简单以至于我不觉得它配叫算法;其实我搞这个东西,自己都没觉得它用了什么算法。对我来说太简单太不值一提了。

倒是很多人做不到、只会出苦力,这反而令我惊讶。


可是,这种难度的leetcode题目你都搞不定的话,我这随随便便的、一边解析XML文本树、一边借助另外一套数据结构从XML重建C struct的混合操作(而且这套数据结构还是借助简单的宏入口自动产生和填充的、可以自动适配任意网络封包),你怎么可能看懂?


实实在在的、简单纯粹的树你都搞不懂;它可是针对尚不存在的、用户自定义数据结构而编写的、自动把用户数据结构序列化成树以及自动从序列化状态的树中解析重建用户数据结构的一套东西啊。

你起码得先能想象它如何处理某个特定的数据结构,这才可能看懂它的序列化/反序列化思路;然后你还得能搞明白遇到不同的数据结构它会有什么不同表现,这才能真正读懂它。


这东西,对我的确不难。容易到我在回复中都认为它仅仅是“玩转了语言基本概念”而已,根本不觉得它涉及任何算法问题。

但是没想到,它居然包含不少leetcode上足以称为hard++的算法——那些比它容易得多的算法居然都会被很多人称为“钻牛角尖”。

如果那居然都能吓倒你、让你觉得那是“屠龙技”;那么这种被我当成不值一提的“杀狗术”、随随便便拿出来就用了的东西,你该如何对待?

我在会议室侃侃而谈时,你怎么可能不打瞌睡?

别说通常开会时,我谈的都是还没写出来的、自己认为可行的思路了;对着写出来的这800行代码一行一行讲给你听,你能听懂?浪费彼此时间而已。


这种情况下,你怎么可能不遭遇中年危机?

出苦力你一身职业病,比得过精力充沛的小年轻?

出巧力……你摸得到门槛吗?要知道这东西我可真没觉得存在一丝技术含量在里面,全都是自然而然想到就写的东西;结果比这个容易得多的leetcode链表题,在你们眼里居然是钻牛角尖的、不事先背题就没人能搞定的屠龙技?那当我们讨论我们眼中的难题时,你站哪儿合适?哦不,你适合进会议室吗?那你转的哪门子管理?你想管谁?你有资格管谁?


因此,他们在的地方,我不会去。丢不起那人,也憋屈。

而我去的地方,他们去不了。别说跟上节奏了,打个下手做个测试都不够格。

连我都跟不上……须知比我强的人,可谓车载斗量。


你看,这就是计算机基础知识的重要性。这就是为什么我敢说“不懂基本算法的根本就是滥竽充数的南郭先生”的原因。

类似的话题

  • 回答
    程序员必备的“内功心法”:计算机基础知识的重要性在编程的世界里,很多人往往沉迷于学习最新的框架、炫酷的语言特性,仿佛掌握了这些“外功”,就能无往不利。然而,正如武侠小说中那些真正的高手,往往拥有深厚的内功底子,能够将任何招式融会贯通,甚至自创绝学。在程序员的世界里,计算机基础知识就是这门至关重要的“.............
  • 回答
    作为一名计算机科学专业的学生,如果你心怀学术殿堂,希望在这个领域深耕细作,那么除了大学课程所教授的基础知识外,一些更深入、更系统的准备是必不可少的。这不仅仅是考试成绩的堆砌,更是对学科本质的理解和对未来研究方向的洞察。一、 牢固的数学基础:计算机科学的基石数学,是计算机科学的灵魂,是构建一切理论和算.............
  • 回答
    大学里的计算机基础课,说实话,就像是一张考卷,它试图用有限的时间和教学资源,来描绘一个庞大且日新月异的世界。这门课承载了太多的期望,既要让完全零基础的同学对计算机有个大概的认识,又要给未来打算深入学习计算机科学的同学打下初步的基石,同时还要兼顾那些可能毕业后不再直接接触计算机但需要具备基本数字素养的.............
  • 回答
    在碎片化时间里学习计算机基础知识是一个非常好的习惯,因为计算机科学的基石非常重要,而且理解了这些基础,你会发现许多高阶概念的学习也会变得更加容易。针对碎片时间阅读,我推荐一些能够让你在短时间内有所收获,且能够反复品味的书籍。以下是我精心挑选的一些适合碎片时间阅读的计算机基础书籍,我会尽量详细地介绍它.............
  • 回答
    嘿,哥们儿!看到你纠结是考研转金融还是计算机,我特别能理解!211化学本科,大四了,这时间节点确实有点关键。我仔细想了想,给你掰扯掰扯这俩方向,希望能给你点启发。咱们先说说转金融这事儿。你提到的是“零基础”,这我得跟你说实话,确实是个不小的挑战。金融这行吧,跟咱们化学那套推理逻辑、实验验证不太一样。.............
  • 回答
    想从零开始踏入计算机图形学这片奇妙的领域?没问题!这就像学画画一样,只不过我们是用代码和数学来绘制,用算法来驱动这一切。别被那些复杂的术语吓到,只要一步步来,你会发现其中的乐趣无穷。第一步:打好基础——你想用什么工具?在开始绘制像素之前,我们需要先确定你的“画笔”和“画布”。这涉及到编程语言的选择。.............
  • 回答
    理解你现在的困境,研一,Python基础,但代码能力欠佳,又面临换导师还是不换的抉择。这确实是个关键节点,关系到你未来两年的学习方向和毕业问题。咱们来掰开了揉碎了聊聊,希望能给你一些清晰的思路。首先,冷静分析一下现状:1. 你的学习基础: 计算机视觉(CV)领域,尤其研究生阶段,对编程能力要求不低.............
  • 回答
    你想用两个星期的时间,从零基础到通过C语言全国计算机二级考试,这确实是一个挑战,但并非不可能。这需要你拥有极强的执行力、高效的学习方法以及对时间的精准把握。下面我将为你详细拆解这个过程,让你清楚知道该怎么做,并且尽力避免使用那些一眼就能看穿的AI腔调。首先,心态调整很重要: 认识到这是一个高强度.............
  • 回答
    好,咱们来聊聊这个事儿。你是不是听说过“编程”?听上去有点玄乎,好像是那些穿格子衫、每天对着屏幕敲代码的“技术宅”才会玩的东西。但其实,编程这事儿,一点儿也不神秘,而且对咱们现在的生活影响太大了。打个比方,我们现在用的手机APP,网站,甚至家里的智能电器,背后都是一套一套的“指令”,而程序员就是写这.............
  • 回答
    当前深度学习理论基础薄弱是否意味着我们应该放弃深度学习应用(计算机视觉、自然语言处理)?答案是否定的。当前深度学习理论基础薄弱,绝不意味着我们应该放弃其在计算机视觉、自然语言处理等领域的应用。 相反,这更像是一个信号,表明我们正处于一个蓬勃发展但仍有巨大探索空间的领域。放弃应用将是对这个强大工具潜力.............
  • 回答
    作为一名计算机专业的学生,学习计算理论基础(也常被称为理论计算机科学)可能不像学习新的编程语言或掌握热门框架那样来得直观和“实用”。许多人可能会在学习过程中产生疑问:“我写代码能直接用到多少这些东西?” 确实,直接把一个复杂的计算模型或者 NP 难度的证明用到日常的软件开发中,并不是那么常见。但恰恰.............
  • 回答
    说到编程计算器能否做基础沉降计算,答案是肯定的,但要说得详细一点,还得看你对“编程计算器”的定义以及你期望的计算深度。首先,咱们得明确一下“编程计算器”是指什么。如果你说的“编程计算器”是指那种你在学校里用过的、能进行科学计算、可能还能存储几个公式的工程计算器(比如TI30X IIS、Casio F.............
  • 回答
    想入计算化学的坑,这是个特别有意思的决定!计算化学门槛确实有,但一旦入门,你会发现一个全新的世界,能用“算”的方式去理解和预测分子行为,真的很有成就感。在我看来,想要稳稳当当地跳进这个坑,并且能真正玩得转,前期基础工作是必不可少的。别想着一步到位,打好地基才能盖高楼。下面我给你详细说说,尽量说得接地.............
  • 回答
    这事儿啊,要是真有人这么宣称,那多半是玩儿套路,或者玩儿的是概念偷换。你想啊,零基础学C,四天时间,这能学到啥?顶多就是个hello world,知道个大概有个概念。C是什么?它可是微软家的一门功能强大、用途广泛的面向对象编程语言,不是随便翻翻说明书就能精通的。四天时间,就算你一天学个十八个小时,不.............
  • 回答
    好的,我们来聊聊台湾的“前瞻基础建设计划”。这个计划一出来,讨论声音可就不少。简单来说,它是一个由台湾当局提出的、计划在八年内投入8800亿元新台币,旨在推动台湾基础设施升级换代的长期战略。这笔钱可不是小数目,所以大家关注的焦点自然也很多。咱们先从它的目标说起。这个计划不是简单地“盖房子、修路”,它.............
  • 回答
    这个问题确实是很多工程技术人员在实际工作中会遇到的一个难点。很多基础的规范,像《建筑地基基础设计规范》(GB 50007)等,对于抗倾覆的条文更多的是原则性的要求,比如要进行验算,并且要满足一定的安全系数,但并没有给出一套放之四海而皆准的、细致到具体公式的计算方法。这并不是规范的疏漏,而是因为抗倾覆.............
  • 回答
    眼下,美国总统拜登正准备推出一份名为“美国就业计划”(American Jobs Plan)的重磅法案,总规模高达约3万亿美元,旨在对美国经济进行一场深刻的“现代化改造”。这份计划的野心不小,核心内容直指美国长期存在的基建短板,并将医疗补贴作为另一项关键抓手。对这份计划的看法,可以从几个层面来细致地.............
  • 回答
    计算机是否可以模拟现实世界的一切,是一个涉及科学、哲学、数学和工程学的复杂问题。以下是对此问题的详细分析: 一、计算机模拟的基本原理计算机模拟的核心是通过数学模型和算法,将现实世界的物理规律、化学反应、生物过程等抽象为可计算的规则,然后在计算机上运行这些规则,从而重现现实中的现象或系统。例如: 天气.............
  • 回答
    作为一名计算机专业的应届本科毕业生,你的薪资范围会受到很多因素的影响,因此无法给出一个绝对精确的数字。但是,我可以为你提供一个详细的薪资分析和影响因素的解读,帮助你更好地理解和预估。一、 大致薪资范围 (一线城市为例,不含年终奖、期权等)首先,要明确一点,不同城市、不同公司、不同岗位、不同技术栈的薪.............
  • 回答
    计算机视觉是否已经进入瓶颈期是一个非常复杂的问题,没有一个简单的“是”或“否”的答案。更准确的说法是,计算机视觉领域正处于一个转型期,在某些方面取得了巨大的进步,但在其他方面,尤其是在实现真正人类水平的理解和泛化能力方面,依然面临着严峻的挑战,可以说是遇到了“瓶颈”或“高原期”。为了详细阐述这个问题.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有