我如何学习算法?

时间:2010-06-11 23:10:37

标签: python algorithm

简史:刚刚高中毕业,学到了一点python和C ++,没有任何有用的计算机知识的朋友。在我上学期间遇到的任何人中,我可能是最大的书呆子,但没有人真正知道。我认为自己拥有大量的计算机和技术知识,而不是普通人。建造/固定吨计算机,并能够解决我遇到的任何问题。

现在高中已经结束了,我一直在考虑自己的职业生涯。在我生命中的过去13年里,我一直热爱生活的电脑,我决定学习计算机编程,为什么我没有早点开始,我不知道,这似乎是我的大错... / p>

做一些研究我得出结论,Python是我应该学习的第一种编程语言,因为它是高级的,比C ++和Java更容易理解。我也知道要善于完成我所做的事情,我需要了解更多只有2或3种语言,考虑到一旦我学会了Python的工作方式,主要是语法改变,剩下的就会出现,这似乎不是一个大问题自然。我观看了几个youtube视频,下载了一些书籍pdf,并从这里和那里的一些教程中窥探,以了解该怎么做。

试图理解语法,创建使用基本功能的小程序并理解它是如何工作的两个星期过去了,我想我已经掌握了它。它分解成我一直在处理的事情(尽管我知道)是输入,输出,循环,函数和其他来自0和1的存储数据和召回数据等等(非常基本的)理念)。我已经能够创建小程序,Hangman,文件存储,温度转换,Caeser Cipher解码/编码,Fibonacci序列等等,我可以创建并理解每个工作的方式。

在这两周后,我学到了很多东西。如果我抓住我正在做的事情,那么与未来几年我应该学习的东西相比,什么都没有。在做这些课程的时候,我不会停止,直到我在一本书上做了一个练习问题,这个尴尬会让我花费几个小时,这取决于它的复杂程度。我绝对不会把挑战放在一边,直到它完成,可能非常糟糕,我已经尝试了大多数问题而没有作弊并取得了成功,这使我在经过多次试验和错误后完成某些事情后感到非常自豪。

毕竟我遇到了恶魔,算法似乎是高效代码的关键。我似乎无法绕过人们使用数字输出的一些计算机代码,有时甚至是基本功能,我已经能够在一段时间后理解它们但我知道有更复杂的事情要来考虑到我的自我智能,需要复杂代码的功能,实际上伤害了我的大脑。生活中没有任何事情伤害了我的大脑......甚至连高中数学课都没有,试图了解人们在那里放的一些东西让我觉得我有一种心理上的劣势lol ...我仍然向前走我的手指交叉,理解会随着时间而来。

对不起,如果这很长,我只是希望有人在回答我的问题时考虑所有这些事情。即使通过所有这些缺点,我仍然在努力并继续尝试并擅长这一点,我知道阅读这些教程不会让我有任何好处,除非我能够创造并创造我自己的,了解其他人的程序,所以这这让我想到了一开始我可以提出的一个简单的问题......

我在世界的哪个地方开始? 我一直在努力寻找如何理解一些开源项目,如何与经验丰富的程序员合作,向他们学习并帮助他们,但我认为甚至可以通过人们知识的方式来实现这一点。与我相比,我没有可以向我学习的朋友,有人可以帮助我并引导我走向正确的方向。我有很大的动力去擅长编码,任何信息都会非常有用。

8 个答案:

答案 0 :(得分:9)

首先......我想你应该给自己一些时间。 学习编程可能是一个漫长的过程。 作为第一步,我建议学习编程语言(就像你已经在python中做的那样),并尽可能地学习编程(oo,递归,循环,函数,变量等)的概念。

作为第二步,你应该尝试回答“我究竟想做什么编程?”这当然是最重要的,当你做图形,当你做DSP应用程序和进行网络开发时,它确实是不同的。所以一般学习算法没有特定的目标可能真的很令人沮丧。

因此,最重要的因素可以是耐心和专注,毕竟罗马不是一天建成的...... 祝你好运

答案 1 :(得分:6)

  

我从哪里开始学习算法?

我真的很喜欢Udi Manber's Introduction to Algorithms。与Cormen Leiserson和Rivest等更受欢迎的书不同,Manber的书侧重于创造性解决问题以及算法产生的过程。因此,不是阅读其他人发明的算法百科全书,而是对他们来自地球的地方感到困惑,而是学会自己创造算法 - 并且一路上你将重新发明一些你在百科全书中找到的标准算法。

我认为从长远来看,你会发现这种解决问题的能力比对其他人的算法的百科知识要好得多。

答案 2 :(得分:2)

对你有好处。

你考虑过一些大学课程吗?通常你可以在那里学习一些算法类型。

我发现强大的数学背景在解决问题和基本数字操作技能方面都非常有用。您在编程中所做的许多事情都是基于数学基础。您最终将使用或创建的算法将由您希望编写的程序类型驱动。

答案 3 :(得分:2)

在算法中开设一门课程的工作 - 以及你需要知道的其他事情 - 特别是那些能够在计算机领域工作的事情,是制定大学教学大纲的工作计算机科学课程。事实上,我怀疑一些大学除了列出教学大纲和评估学生之外几乎没有什么价值 - 学生们为自己做了很多其他事情。如果可能的话,你的目标应该是准备自己进入计算机科学课程,无论是全日制还是非全日制学习。

我的书推荐是Kernighan和Pike的“编程实践”,特别是如果你打算通过实践来学习。它并没有深入到算法中,但在几页中它应该告诉你足够的设计和测试,当你练习时,你会发现,修复和学习你的许多错误,并养成编写程序的习惯其他人可以看到而不做鬼脸。

答案 4 :(得分:1)

根据我的经验:问题 - 将引导您超越您选择的路径,语言将帮助您从不同的角度来看待它。如果你只坚持一种或两种语言,你就可以继续,但是你会错过很多东西,这可能对你将来有所帮助,这可能会给你一些乐趣等。
而且......除了编程之外,你还可以做更多的事情。不要将“我想编程”作为您的主要目标。使用“我想解决问题......”和“我想用编程来做......”。 (即不要将文字作为你的目标)
我想我已经选择了这条路,因为这是最简单的事情。无需每天进行培训,无需进行可重复的工作,无需为第二天的旅行做好准备,无需预备大量的材料等。当然后来我发现有些事情甚至可以存在。

答案 5 :(得分:1)

在我的编程方法中,我认为收集的Brian Kernighan的写作是关于如何像我遇到的程序员一样思考的最有影响力的书。在“编程实践”的封面上是:

  • 简单
  • 净度
  • 概论

这引起了你对Python的浓厚兴趣,就像PEP 20的缩写形式一样。算法是一种达到目的的手段,就像烹饪中的食谱一样。虽然你不能在不了解酵母的护理和喂养的情况下制作面包,但知道你首先需要面包是目标。尽管Kernighan的书看起来似乎已经过时了,但他们的工匠的统一主题却说得很优雅,很少有技术作家甚至渴望这样做。

机器变得如此之快,以至于算法的正式研究(例如Knuth)确实可以成为一个称职的机制 - 但这实际上是一个简单的部分。今天学徒应该努力的是该领域的艺术性,因为这是人类真正处于最佳状态的地方。

答案 6 :(得分:0)

我能想到的最好的解决方案就是在codeguru.com等网站上注册并寻找实践或加入您所在地区的程序员小组。这样你就可以获得将来需要的过期和知识。

答案 7 :(得分:0)

我不会给你许多“做这个做的”建议,但有一些事情:

  1. 当你周围没有人这样做的时候,你自己学习了Python,感谢他们。所以你已经有了一些感觉良好的东西了。继续利用这些东西来发展你的知识库。

  2. 你说你是13岁.Python可能有书来迎合你的复杂程度,但绝对不是算法。算法是严肃的事情。算法领域内和周围有很好的数学水平。并且没有办法对其进行糖化。除此之外,关于算法的书籍在业界广为人知,难以破解书籍。问比尔盖茨和唐克努斯。

  3. 所以我想说,如果你想学习计算机,因为你喜欢学习和渴望知识,那么我建议,在一边,

      

    你是在正确的轨道上,坦白说我不希望13岁的孩子知道algos。你正在探索Py,有C,C ++计划,我会说,太棒了!

         

    加强你的数学。除非你想要实现不同类型的算法,而不是深入挖掘,否则你可以做到。但算法不只是关于这一点。因此,如果你想抓住它,你需要学习离散数学。   离散数学不会在1个月,2个月甚至1年内找到你。   准备好等待你的时间。与此同时,攻击数学只是在你的能力的边缘。

    与algos相同。准备在未来五年内访问该域名两到三次。每次你现有的知识库都会更好地补充你对算法的追求。

    直到那时, Soham