计算机答题串无名氏No.63704741 只看PO
2024-09-08(日)13:12:19 ID:6S0Btd7 回应
po近期处于待业期,没什么固定的项目做,希望能够在答疑的过程强迫自己学习新的知识。
欢迎各位提问,也欢迎肥哥参与答疑串。
----------告示----------
答疑的效率不高,所以希望肥哥别问需要很强的及时性的问题。
例如:
>xxx题用什么算法解决。
>我这里有个报错,如何解决。
这类的问题,没有测试环境很难解答,这也是为什么本串放在了老中医而不是代码串。
本串主要用于解答相对抽象的概念,或者对计算机的“质疑”与“好奇”。
例如:
>为什么计算机使用的是二进制而不是三进制,分明三进制的单位信息存储量更大。
>如何看待AI发展对计算机行业的冲击,未来就业会更困难吗?
po会尽量去吸取相关的知识,汇总后进行分析解答。
提出问题过一段时间来收获结果就好。
----------叠甲----------
人无完人,观点与知识也不尽然,po会尽量保证结论的可信度与逻辑性,若出现疏漏欢迎肥哥指正,望海涵。
无标题无名氏No.63770573
2024-09-14(六)14:55:12 ID: X3JXDO7
好popo,请教一下学习编程语言的正确方式是什么(最终目的是掌握对应编程语言在专一应用场景下的基本常见操作),我现在的学习方式还是基于C的那一套,变量&格式→I/O→条件&循环→递归→核心特性(例如C中的指针)→文件操作→库函数→算法
但是发现这样的路径对于C++或者Python什么的不太适用,到核心特性那里基本上就学懵了,找不到什么是核心特性,特性太多了,各种定义、方法和操作符目不暇接(;´Д`)
也尝试过跟runoob一类的教程网站走,但最后总是针对一个功能一脸懵地去问AI,AI总能拿出一堆我没听说过的方法,然后进入用新方法解释旧方法,问题越来越多的循环。
也尝试借助各种网课构建框架,但是总是讲不到我想听的点上,最后发现学了一堆没什么用的,无法应用于工程中——所以求po指点迷津,如果以专一的工程应用作为目的,到底应该怎么学这些高级语言?或者我该回去补习大计基?|-` )
举个例子,我想面向win基于Python实现一个状态显示窗体,然而学了一堆元组、字典操作之后发现,这些跟能直接解决问题的tkinter库没什么直接联系( ´_ゝ`)
无标题无名氏No.63771247
2024-09-14(六)15:59:38 ID: 6S0Btd7 (PO主)
>>No.63770573
好popo听到了你的呼唤并予以回复,po门。
首先可以参考一下我前面写的这个回复中对于“面向过程”与“面向对象”的区别定义>>No.63714490
肥哥的思维还是局限在面向过程的范围中,所以当你需要搭建一个东西的时候,会首先想到需要怎样从零去搭建这样一个产品。
但是在面向对象的思维中,你的第一反应应当是我需要这样一个东西。
来举个例子,就用你说的窗口框体举例。(我没写过只是随便举例思想,实现与拆解不一定准确。)
>首先,你需要一个框体,那么我们创建一个框体类。
框体类里面需要什么东西呢?
我们要装进去十个小框框。
先定义一个小框类,然后放到框体类里面。(PS:这里可能就需要你的数组能力,因为数组让这十个框互相有了联系,而不是十个独立的框。)
那么这个框体类现在的内容就是十个小框。
>接下来我又想要小框有功能了
这样就需要对小框类进行具体的功能实现。
可以选择抽象小框的共性:比如他们都是小框。
而后对每个不一样的小框进行具体的实现,塞进去具体的功能。(PS:这里就需要你拥有字典,调用等等多方面的能力了,具体的最小逻辑的实现就是“面向过程”的,这也是为什么这些语言比面向过程语言高级,因为他们更好理解,逻辑层级更高。)
>小框都实现完成了,我需要大框
假设我们只需要一个大框,那现在对这个大框类进行调用与实现。
一个大框加十个小框框的场景我们就解决了。
要理解所谓的“高级”,并不是语言更高级了,而是你的思维角度更高了。
你不需要考虑底层实现,要考虑项目需求。(PS:这里的意思不是说不去实现,而是实现相对低级,不是一开始要考虑的。)
举个不恰当的例子:高级语言就像画图纸,是一个确定项目需求与拆分需求的过程,低级语言是实际板砖实现的人。
当了解了这一点再去学习所谓的特性等技术时,思考角度便从“这个特性有什么用”变成了“我在什么时候需要用到这个特性”,也就是你的思维更加高级了。
别人写好的库只是写好了过程等待你去调用。
这就是我理解的“面向对象的思维”,但是很多地方都没有讲清楚,我也不确定我是否讲清楚了,肥哥觉得不清楚还可以追问,我再尽量明晰一下。
编程语言只是实现功能的工具,而不是功能本身,特性亦然。
(PS:以上提到的的高级与低级无歧视意味,只是进行类别区分。)
(*´∀`)
无标题无名氏No.63771802
2024-09-14(六)16:57:33 ID: X3JXDO7
>>No.63771247
(っ˘Д˘)ノ<po门!!!
感谢好popo的指点,真是醍醐灌顶,虽然难以理解( ;´д`)
之前只是简单了解C++和Python特点是“面向对象编程”,但是不知道其根本区别是什么,以我贫弱的理解,感觉根本上都是“执行一段代码,完成一项任务”,没什么本质不同?
无标题无名氏No.63772736
2024-09-14(六)18:27:17 ID: 6S0Btd7 (PO主)
>>No.63771802
只是说最本质的东西倒也没错,但是太模糊了。
python作为解释性语言,它的设计目的是使编程易于学习与使用,所以它会尽量去减少“非必要的”编程能力的输入,希望你能够学最少的东西干最多的事情。
(关于什么是解释性语言,肥哥想深入学python可以去了解一下。)
C++如其名,它想保持C语言的高可用和高效性,希望能够更加接近硬件结构,可读性之类的就不在第一位,会发现编写的难度较高,通常追求效率的地方会用C++编写。
JAVA是追求跨平台与安全性的产物,丰富的特性决定了它有更好的复用性与安全性,企业开发用的比较多,但是江湖人称“裹脚布”,用起来是又臭又长,个人觉得写着很折磨。
总来说“高级编程语言”只是一个大类,它们生存至今还是有自己独特的受众与设计目的,了解这些有助于区分语言与实际项目中进行语言选型。
(PS:实际还区分纯面向对象设计语言与部分面向对象设计语言,这个就肥哥接触到再去了解吧。)
肥哥也不要心急一开始就搞完全懂,可以尝试写两个小型的完整项目或者下载别人的项目,参考一下代码结构,思考架构设计原因与分类原因,这样就能逐渐提高理解深度了,循序渐进(=゚ω゚)=
无标题无名氏No.63790963
2024-09-16(一)15:43:35 ID: j4cW1hV
vscode安装了extension pack for java,spring boot extension pack等插件,但List(java.util.List)类不能自动导入,却可以手动导入(╬゚д゚)
无标题无名氏No.63812648
2024-09-18(三)14:16:16 ID: 6S0Btd7 (PO主)
>>No.63790963
这种可能是检索时出现重名之类的问题,可能出现问题的地方很多,po这里也解决不了,可以直接发在相关板块问问肥哥( ;゚д゚)
无标题无名氏No.63890194
2024-09-26(四)00:44:16 ID: WLVIpvC
我是一个对社会一无所知的计算机系学生
问下肥哥,想进互联网公司赚钱钱一般需要那些技能呢?( ゚∀。)7"
无标题无名氏No.63893819
2024-09-26(四)12:54:22 ID: 38G2dZi
好popo,我本科刚毕业,还没任何工作经历,不过维护一个开源项目两年多了,获得了500star,近期遇到了很多问题,虽然说不是对“计算机”的“质疑”与“好奇”,可能更偏向于“工程”和“项目”,也想向你求教。
1. 一直以来我希望自己的代码能保持比较好的规范,让它不至于堆成屎山,但是我发现我并没有成功,以我的开源项目为例,我最开始还能对项目的每处功能了如指掌,但是随着功能越做越多,现在我发现之前很多地方有莫名其妙的耦合、不恰当的硬编码字符串,还有不好的模块组织方式。我想知道,有没有对于一个初具规模的项目,进行管理的好办法?
2. 我想通过阅读一些高水平的项目,来提升一下自己的水平,但是看了一些我常用的开源软件的源代码,感觉真的无从下手。阅读这些有必要吗?
3. 常用的一些设计架构、最佳实践这类东西,我感觉实在是太多太琐碎了。比如说我希望别人在贡献时代码格式按照一定规范,我发现得做这个开发语言常用的格式化工具的配置文件放在项目目录下;模块划分也各有个的方法;软件如何进行测试,怎样构建必要、有效的测试,我也不知道怎么做。
我越开发软件,越觉得需要顾虑的东西多,反而束手束脚了,我怕在未来这些代码成长成我不认识的怪物,有什么办法吗?