我是“严肃”编程的新手,也就是处理现实应用程序和超越学校作业的软件项目的应用程序。
我的兴趣包括优化、运筹学、算法,最近我发现我非常喜欢软件设计/开发/工程。
我已经为一些“著名的”问题开发了一些简单的桌面应用程序,比如使用启发式方法的TSP、VRP解决程序(正在进行中)等等。
在开发这种软件时,我实际上使用了学校教授的基本概念,比如面向对象的分析和设计。但是,我发现这些课程相当初级,也相当无聊(对我的期望而言)。
因此,我决定更进一步,开始开发“真正的”软件(这就是我意识到软件工程/设计是多么重要和有趣的地方)。
现在,我的问题是:我找不到开发这类软件的“学习指南”。
目前,有许多资源(书籍,网站,教程)在设计和开发复杂的IS,网络应用,智能手机应用程序,但我找不到一本书,例如,“优化软件开发”。确切地说,有人可以声称“设计模式一般适用于软件”,但这不是我的观点。
我的观点是,我可以简单地用我的想象力来实现“简单”的实现,但是当我的想象力不能更进一步时,会发生什么呢?
换句话说,我正在寻找一条弥合差距的指南/路径:数学-算法设计-软件工程-优化-软件开发
发布于 2011-12-22 17:47:55
你似乎想深入到软件工程的各个方面,这是很好的,但缺点是没有一个地方可以得到所有这些类型的答案:我们的领域是一个年轻和迅速发展的领域。正确的答案是“我如何学会设计算法?”讨论的主题是:“我如何学会编写复杂的程序?”另一个是,“我如何学习编写快速程序?”第三个问题是,“我如何找到最著名的方法来解决这类问题?”是另一回事。
我突然想到的是,你对那些被认为是“困难”的算法问题充满了热情。这并不是一种普通的职业热情(出于某种原因),你也不会找到范围广泛的资源,因为你会找到更多的共同重点。另一方面,对于那些具有数学、实际兴趣和天赋的人来说,这是一个可行的利基(尽管很难进入--你在Craigslist上找不到工作.)。这一领域的大多数算法资源将是专门针对学术和技术的,而低性能编程则更多地是来自制造商的模糊互联网论坛和技术文档的世界。
在函数优化的具体领域,到目前为止,您似乎已经使用了完全确定性的精确算法。这些都有各种各样的优点,但有时在很大的解决空间的问题上是不切实际的。您可能喜欢探索概率方法,如马尔可夫链、模拟退火、遗传算法和进化规划、蚂蚁算法等。
此外,您至少应该知道近似算法的领域,它放弃了精度以获得更高的性能(例如,精确的装箱是NP,但可以在多项式时间内以任意低的可接受误差进行求解)。
我知道我没有给你任何直接的链接,但希望我已经抛出了足够的主题,以填补一些时间与谷歌!
发布于 2011-12-22 20:51:03
我相信你正在经历的部分问题是,这种为企业开发的软件,而不是为大众市场开发的软件(又名“收缩包装”或“消费者”),大部分都是作为解决方案而不是作为应用程序开发和销售的。
其中一些企业有一个基本产品,并通过定制咨询出售包,这实际上是为该客户的业务开发“业务规则”或“业务逻辑”的正式编码。这是必要的,因为客户端实际上想要解决他们的问题,而不是一个复杂的系统,可以操纵符号和数字。这些公司培训和培养自己的内部顾问(例如IBM)和外部顾问(SAIC),他们专门支持自己的产品和为客户定制产品。
我怀疑大部分的知识都属于学术方面(暹罗可能是你最好的期刊和书籍的来源),或者是内部没有被广泛分享的企业知识,因为特定的市场可能被认为是很小的(几乎没有竞争对手)。
一个地方,你可能会发现一个社区的人愿意分享他们的知识是学术超级计算机中心,它甚至可能提供一个工作场所,从你的表面上的学术背景过渡到一个更注重发展的经验和作用。
我不确定,这完全超出了我的知识/经验范围,但需要考虑的一个潜在领域可能是数据挖掘领域,那里的数据集太大,更先进的提取有用信息的方法可以利用优化和OR方法。
军事和国内情报组织(如NSA、CGHQ、CSE)可能是你感兴趣的申请和/或就业场所。
我不知道像U滑铁卢的C&O这样的部门是否会有其他的建议。否则,通常被称为“科学计算”的东西可能是最接近你正在寻找的东西。
这种关注超出了我自己的背景,但我希望这能给你一些地方来考虑或研究。
发布于 2011-12-21 21:36:43
来自斯坦福大学的免费机器学习在线课程可能正是你想要的。它包括作为家庭作业的编程作业,包括:
本课程广泛介绍机器学习、数据挖掘和统计模式识别。主题包括:(i)监督学习(参数/非参数算法,支持向量机,核,神经网络)。(2)无监督学习(聚类、降维、推荐系统、深度学习)。(3)机器学习的最佳做法(偏差/方差理论;机器学习和人工智能的创新进程)。本课程还将借鉴大量案例研究和应用,以便您还将学习如何将学习算法应用于构建智能机器人(感知、控制)、文本理解(web搜索、反垃圾邮件)、计算机视觉、医学信息学、音频、数据库挖掘等领域。
https://softwareengineering.stackexchange.com/questions/126389
复制相似问题