除了简单的编码:从哪里开始?

时间:2009-07-13 16:59:47

标签: language-agnostic

自从我十几岁的时候起,我一直在编码。我开始使用HTML,继续使用PHP / MySQL(创建我自己的论坛,社交网站等等),然后扩展到更传统的语言,如Java和C ++(也选择了一些高度的VB .NET)学校)。我现在最熟悉C ++,因为这是我们在RPI的计算机科学II(跳过Comp Sci I)中教给我们的选择语言。我现在觉得我非常了解如何从这门课程编程(家庭作业是残酷的)。

现在是夏天,我正在一家为我提供一定程度的新编程体验的公司实习,但我想要更多。每当我完成一项长期任务时,我都会感受到我从RPI的计算机课程中获得的令人难以置信的满足感(从一组单词生成所有可能的单词搜索,包括并排除在内)。

我的问题是,我从哪里开始?我尝试在线阅读教程,但它们太简单了。然后我尝试前往sourceforge并帮助完成各种项目。但是,一旦我下载了代码,我就会迷失其复杂性。我从来没有创建过实际应用规模的实际软件。我不知道从哪里开始。您如何从编程知识过渡到实际创建软件?

我也愿意学习新语言(javascript / jQuery,ASP .NET,C#,Python),或者使用带有c ++的新库和/或框架(我们只使用Comp Sci II中的STL)和其他语言。我的问题再一次是,我从哪里开始?我欢迎所有可能的答案。

非常感谢, 迈克尔

17 个答案:

答案 0 :(得分:8)

你可以加入一个大型的开源项目,你会学到很多东西,并且可以做一些很酷的事情。

评论后

编辑 :如果这对您来说太复杂,请尝试启动“真实”项目。我说“真实”,因为它应该是你想要做的事情,而不是“创建博客”或“如何做循环”。例如,去年我创建了一个功能齐全的项目管理系统,我现在用于我的一些项目。如果这是真的,你会更有动力,你会想要完成这件事。

选择您想要的技术。我推荐Ruby on Rails,因为它很棒且充满了有趣的概念,可以改善你加班的方式(DRY,RESTful,MVC ......)......但你可以选择你想要的任何东西。

尝试使用您所知道的内容和基本教程创建项目。您将陷入困境,必须学习更多才能获得您想要的功能。对我而言,这是改进编码方式和一般编程知识的最佳方式。

由于您将从头开始项目,因此您将看到从哪里开始以及这将如何发展。我将采用项目管理工具。我们从“A project have todos”开始,我们最终得到了所有其他功能,例如复杂的日历,完整的ajax界面,嵌入式聊天...

一旦你看到你是如何做到这一点,尝试与你的朋友做同样的事情,以便在开发中获得团队合作。了解如何使用SVN,basecamp ...了解software development processesAgile!),同行编程..

有很多体验!然后你可以再试一次开源。

希望有所帮助

答案 1 :(得分:7)

我建议尝试使用纯函数式语言,例如Haskell。这是一种完全不同的编程方式,我发现非常令人满意。

我推荐书籍Real World Haskell来学习它。

编辑:在回应评论时,我对这个问题的解释是他可以从这里作为程序员去哪里。功能编程是一个合理的方向。对于第一次学习函数式编程的人来说,Haskell很不错,因为它并不能真正实现命令式编程实践。此外,它基本上具有您在其他功能语言中可以找到的所有功能,这意味着可以轻松获取其他功能语言。

答案 2 :(得分:1)

您似乎经历过多种语言,但尚未创建实际应用。使用这些语言创建软件将使您达到一个新的水平。

PS:创建软件远不只是知道如何搞乱语言。

答案 3 :(得分:1)

您可以向非盈利组织或朋友或需要建立网站或程序的人提供您的能力。

告诉他们你可以免费做到这一点然后去做吧。当你开始制作它时,你将开始看到你需要学习的东西。

例如,我在我的Mac上有程序Peel www.getpeel.com。但是在我旅行的时候把我的Mac卖给了风。

看到像皮尔这样的Windows(或者我找不到任何东西)都没有。我用PHP构建了自己的程序,并且正在进行第四次重建,因为我学会了更好的方法来完成我正在学习的每一件新事物。

答案 4 :(得分:1)

查看设计模式。

我认为这不仅仅是简单的编码。

答案 5 :(得分:1)

您是否理解以下所有内容以及它们的工作原理?

  • 链接列表(单个和双重)
  • 顺序与二进制搜索
  • 二叉树
  • 红黑树
  • 算法复杂度和大O符号
  • 递归
  • 散列表和散列算法

如果您对任何这些都不熟悉,请参加数据结构和算法课程。

答案 6 :(得分:1)

我认为提高程序员技能的最佳方法是进行编程的目的:解决问题。我确定你一直在你的机器上玩,有一次想到自己“我希望有一个程序可以做到这一点......”或“我想知道是否有任何程序可以做X ......”而不是谷歌搜索,看看是否有人写了它,自己写。从小事做起,逐渐使其变得更加复杂。添加功能。让自己失败,当你这样做时,问问自己(或者我们在stackoverflow)如何克服这个障碍。一旦你掌握了编程的基础知识,其他一切都只是用更小的东西做大事,而小事通常都很容易。

当你正在制作你知道你会实际使用的东西时,你完成它会更有趣,更令人满意。

答案 7 :(得分:1)

我建议查看Project Euler。学习一门新语言是一种非常有趣的方式,它可以在您解决问题时提供这种满意度。它们在各种难度下提供了大量问题。

答案 8 :(得分:0)

我认为从作为课堂项目(和一些实习)的一部分的有限易处理问题转变为“现实世界”项目非常困难。听起来像语言语法,从代码中获取错误等是你可以理解的东西。

当我们来到更大的项目时,可能有很多发布周期,开发人员一起工作,会出现各种各样的问题。我记得当我看到我的第一个大项目计划时感到震惊 - 当时的一小部分资产实际上是在编写代码!

我作为一名大三学生找到了有用的东西是“坐着靠着Nelly”,我很幸运能够为那些为我提供非常有经验和乐于助人的开发人员的雇主们工作。有时与之合作,有时与之并肩工作。我认为这帮助我克服了你所描述的障碍。

所以,我认为你需要找到这种就业机会。减少对特定技术,薪水等的关注。相反,您需要考虑的文化和责任水平。

答案 9 :(得分:0)

我的建议是找到您感兴趣的问题/项目并尝试编写代码。尝试一个真正的问题是驱动你的事情。找一些不复杂但不太简单的东西。在开始新语言时要尝试的是编写一些工具。例如,您可以编写一个在C ++项目上打印指标的python脚本。您可以编写一个工具,从您使用的网站等中提取一些统计数据。当我学习编程时,游戏编程非常有趣(我很年轻:-))。您可以尝试使用像Ogre3D这样的3D引擎编写一些简单的游戏。参与一个开源项目也很棒,但正如你所说的那样,现在可能有点压倒性的; - )

找到你喜欢的东西,并为你提供真正有用的目标。您将茁壮成长以解决问题,并在此过程中学到很多东西!

答案 10 :(得分:0)

我认为你应该按照这里的建议真正开始一个“真实世界的应用程序”。你会发现一个真正的项目需要的不仅仅是了解语言。

我建议您找到一些与之相关的简单问题,并制作解决该问题的软件。

例如,如果您想要某种软件每5分钟检查一次RSS提要,并在新的提供时立即弹出一点。或者你想要一个程序,只需拖动几张图片即可让你做简单的演示。

然后无论你选择什么,首先要对问题做出简单的解决方案并从那里扩展(比如不同的设置,额外的功能等)。

答案 11 :(得分:0)

我已经找了一段时间这个问题的答案了。大多数建议通常都是帮助开源项目或构建您感兴趣的东西。我开始意识到那些答案是模糊的,因为什么是“有趣的”或“有价值的”经验,以及如何开始这样做是完全主观的。此外,只有一种方法可以获得真正的体验,即实际项目。很难找到一个项目,个人,开源或其他方式,这将增加您对您认为会引起您兴趣的技术或平台的了解。然后深入挖掘。它不一定非常重要,只是对你自己的目标有价值。

答案 12 :(得分:0)

您必须找到您感兴趣的特定类型的功能。对我来说,这是基本的套接字编程和制作我自己的协议。当我能够在我创建的服务器上创建一个与文件上传服务一起工作的功能文件上传控件时,我有这种感觉。该协议处理身份验证,分块和哈希比较。我很快就会计划整合文件恢复功能。

答案 13 :(得分:0)

从学术解谜程序到现实世界的应用程序,没有神奇的子弹过渡。最好的学习方法就是先跳进去。如果您只查看自己的代码,将需要很长时间才能了解您需要什么。您需要查看专业人员编写的代码,并努力理解为什么它会以它的方式工作,直到您理解它为止。

一开始似乎势不可挡,但如果应用程序完全合乎逻辑,您将很快开始看到模式。编写良好的代码将以逻辑方式分离,因此您应该能够一次分开一层。

例如,您可以尝试自下而上的方法,在查看使用数据库层的代码之前,您尝试了解如何处理数据库交互。你继续向上,直到你到达GUI事件处理程序。

大型企业应用程序可能更难理解,因为可能存在多个可执行文件或组件。尽量保持专注并了解组件负责的事情,然后一次分开一块。

你会发现在功能和类级别上不仅有模式,而且在更高级别也是如此。这使得在理解这些模式时更容易理解发生了什么。

答案 14 :(得分:0)

尝试寻找实习或合作社职位。在我的前几门课程之后我处于类似的情况。我在大二那年参加了一个合作社的职位,我在工作中学到的东西比在课堂上学到的要多得多。课程非常适合教你理论和基础知识。我在合作社的第一个项目中学习了C#,这让我成为了另一个雇主的第二个合作社职位(想知道它是如何在一家小公司工作的)。

今年春天,我接受了我的第一个合作社雇主的职位,重新开始了我在合作社开始的第一个重大项目。我有一份我想要完成的辅助项目清单,这将有助于完善我的技能,以及学习其他语言。

所以我的建议是找个工作,你可以有一个伟大的导师。在我的第二个合作社中,我从我的主管那里学到了很多我编码的编码标准。他是一位伟大的老师,并且确实有一些很好的投入,并解释了为什么事情应该以某种方式完成。

答案 15 :(得分:0)

除非你找到一些你感兴趣的东西,否则几乎肯定无处可去。弄清楚有趣的是什么,然后如何编写涉及它的软件。

答案 16 :(得分:0)

唯一的开始方法就是开始!真的没有其他方法……获得的最佳答案总是会告诉您这一点。您已经掌握了知识,现在就可以使用它!