编写桌面应用程序所需的最低CompSci知识

时间:2008-12-17 17:07:41

标签: algorithm qt computer-science

作为业余爱好者3年(主要是Python和C)并且从未编写超过500行代码的应用程序,我发现自己面临两种选择:

(1)学习数据结构和算法设计的基本知识,这样我就可以成为一名339计算机科学家。

(2)学习Qt,这将帮助我构建我已经 itching 构建很长时间的项目。

对于学习(1),每个人似乎都建议阅读CLRS。不幸的是,阅读CLRS会花费我至少一年的学习时间(或者更多,我不是Peter Krumins)。我也明白要使用(2)来完成任何中等复杂的任务,我至少需要理解(1)的基本原理,这引出了我的问题:假设我使用C ++作为编程选择的语言, CLRS的哪些部分会让我对使用(2)的大型项目的算法和数据结构有足够的了解?

换句话说,我需要理论上的CompSci主题列表,这对于日常应用程序编程任务来说绝对必不可少。此外,我想使用CLRS作为一个方便的参考,所以我不想跳过任何对理解本书后面部分至关重要的材料。

这里别误会我的意思。离散数学和CompSci的理论基础已经出现在我的“TODO:URGENT”列表中大约6个月了,但由于大学工作,我没有足够的时间。很长一段时间后,我有15天休假去做我喜欢的事情,我想花这15天来构建应用程序我真的想要来构建而不是坐在我的桌子,笔和纸上在手,试图写下教科书问题的解决方案。

(顺便说一句,关于算法的数学代码资源越来越少,我将非常感激。我刚从高中毕业,而且我的数学水平还没有达到应有水平。)

谢谢:)

8 个答案:

答案 0 :(得分:7)

这可能被认为是异端,但绝大多数应用程序代码不需要太多理解算法和数据结构。大多数语言都提供了包含集合类,搜索和排序算法等的库。您通常不需要理解这些工作原理背后的理论,只需使用它们即可!

但是,如果你从未写过超过500行的东西,那么你需要学习很多东西,例如如何编写应用程序的代码以使其灵活,可维护等等。

答案 1 :(得分:2)

对于算法上比CLRS更少的数学,更多的代码资源,请查看Algorithms in a Nutshell。如果您要编写桌面应用程序,我不认为CLRS需要阅读。如果您使用的是C ++,我认为Sedgewick是更合适的选择。

答案 2 :(得分:2)

尝试一些在线comp sci课程。伯克利有一些,麻省理工学院也有。软件工程广播也很棒。

也可以看到这些问题:

What are some good computer science resources for a blind programmer? https://stackoverflow.com/questions/360542/plumber-programmers-vs-computer-scientists#360554

答案 3 :(得分:1)

听取唐的智慧,就这样做。您能定义您希望应用程序具有的功能吗?你能否将这些功能分解为更小的任务?你能否将这些任务产生的代码组织成一个连贯的结构?

当然可以。识别任何“风险”区域(您不理解的区域,例如需要比您所知更多数学的东西,或者您需要研究的特殊算法),并找到另一个解决方案,原型解决方案,或者回到SO并询问具体问题。

答案 4 :(得分:0)

从500 loc移动到真实(如果小的应用程序)应用程序并不那么容易。 正如Don指出的那样,你需要学习很多关于代码的东西(灵活性,重用等),你还需要学习一些非常基本的配置管理(visual source safe,svn?)

但主要问题是你需要一种不被你的功能/代码对淹没的方法。这不容易。我建议你做的是通过一些回归测试来“自动”测试你的代码(即使是以非常基本的方式)。否则就会很难。

正如您所看到的,我认为它与数据结构,算法或其他任何内容完全无关。

祝你好运,让我们知道

答案 5 :(得分:0)

我必须说,坐在一本干燥的旧教科书上并阅读它并不是学习如何有效地做任何事情的方法,即使你正在做笔记。使用教科书作为参考,这是学习的最佳方式。实际上,使用这样的网站作为参考。

对于数据结构 - 了解哪一个对你想象的任何情况都有好处:集合(排序和未排序),列表(ArrayList,LinkedList),映射(HashMap,TreeMap)。执行基本操作的复杂性 - 添加,删除,搜索,排序等。这将帮助您选择适合您的应用程序使用的库数据结构。

并且确保你对MVC感到温暖 - 即确保你的模型尽可能与你的视图(QT前端)分开。最好的方法是让模型和算法独立工作,然后将GUI放在首位。或者在顶部进行单元测试。等...

祝你好运!

答案 6 :(得分:0)

这就像是说你要搬到法国,所以你应该从一本书中学习法语,还有什么是基本的话 - 或者你应该去法国找出你需要从经验和复制中知道哪些词当地人。

编写代码是学习计算机科学的一部分。在我听到这个术语之前很久我就开始编写代码了,很多人在发明这个术语之前都在编写代码。

此外,你说你很想写某些应用程序。这是无法教授的,所以请继续做下去。有些事你只能通过做才能学到。

(理论基础只会让你更深入地了解你最终会做些什么,主要是复制其他人的方法。唯一需要注意的是,在某些情况下,理论上的东西会告诉你什么是徒劳的尝试 - 例如,如果你的一个痒是要解决NP完全问题,你可能不会成功: - )

答案 7 :(得分:0)

我想说编码的实际方面更重要。特别是,如果您不使用源控制,则源控制至关重要。我喜欢bzr作为一个易于设置和使用的系统,尽管GUI支持并不像它可能的那样成熟。

然后,我将继续讨论关于编码技术的一个或两个经典,即

您还可以查看list of recommended books on Stack Overflow