我的问题不仅仅是扩展语言特定技能。我想知道任何人可能会向渴望知识的人提供什么样的建议,但缺乏方向。随意跳过这个问题。
背景:我在我的大学读了一门java计算机科学课程,但我计划主修计算机科学和电子计算机工程(ECE)。我的java课程非常简陋。我们获得了一个框架,只是编辑/创建了一些方法和类来执行一个简单的任务。我们制作了一个Breakout版本,并为一个简单的连接四游戏创建了一个AI。虽然我对大O符号有点熟悉,但实际上我没有在课堂上学过它(我的下一个CS课程涵盖了这一点)。在我的ECE课程中,我们还在PBASIC中编写了BOE-Bots,以便在各种障碍课程中进行竞争。作为一名工科学生,我也被介绍到matlab,虽然我只用它来做线性代数作业。总而言之,我没有太多的编程背景,但我很喜欢到目前为止所做的一切,而且我正在寻找建立更有价值技能的方法。
采取的措施:在更加关注reddit的编程部分后,我找到了Project Euler的链接。今年夏天,我一直在抨击这些问题(昨天完成了我的第42个解决方案),但我正在寻找更多方向。我一直在阅读博客文章和SO。我想学习一些关于php的东西,也许还要创建一个动态的网页,但从根本上说,我想做一些有力的事情来提高自己,为工作世界做好准备。
问题: 您会为我推荐什么方向?我应该学习一门新语言吗?继续攻击Project Euler?阅读一些有关编程的书籍?开始一个编码项目(我甚至不知道从哪里开始)?等到上学?了解更基本的编程原则?
我想有了所有可用的路径,我只是有点不知所措,我不想陷入可能对我的职业机会有害的道路。我也很难做出决定。非常感谢您的建议!
答案 0 :(得分:10)
这个词很快让我担心......我建议你阅读Teach Yourself Programming in Ten Years - Why is everyone in such a rush? ~~ Peter Norvig
原谅自己,如果你坐在键盘上三周后没有让世界着火......也许你注定要成为一个大器晚成的人?
- )
答案 1 :(得分:7)
大多数人都建议做更多的编程。虽然这显然很重要,但我认为了解您的程序所处的环境非常重要。
我会研究操作系统如何工作(如何为您分配资源,如何安排程序和线程),网络如何工作(路由,TCP / UDP行为和限制等)以及一些数据库理论。
我看到很多初级程序员具有丰富的语言知识,但除了他们程序的沙箱之外,他们还不知道计算机/网络如何使他们的东西能够运行。
了解上述内容将使您在编写程序方面成为更好的程序员,以及您如何理解它们的工作方式(实际上,如何调试它们或分析它们的失败)
答案 2 :(得分:5)
作为程序员,只有一件事可以提高你的技能:计划。
阅读有关编程的书籍类似于阅读有关骑自行车的书籍。它不会让你变成一个骑自行车的人。
编写一些您将使用并具有既得利益的东西。然后只需低头做一下 - 随时阅读任何支持信息。
答案 3 :(得分:3)
编程技巧只是成功程序员的一小部分,恕我直言。能够阅读规范,提出问题并与其他人交互以提取您需要编程的信息也非常重要。注意你的“软”技能,它们将帮助你在商业环境中成为一名成功的程序员。
答案 4 :(得分:3)
我建议你采取多管齐下的方法。阅读书籍只能带你到目前为止,因为他们没有为您提供从头开始开发应用程序的实践经验。编程现在更多的是编写代码;您必须能够设计应用程序,阅读文档,并知道如何解决不知道如何告诉您写入内容的客户的需求。
如果你还在上大学,试着找一家开发公司实习。您将可以访问已经拥有此经验的人员和资源。如果由于某种原因你不能做实习,找到并结交一个开发人员的朋友。让某人知道他们正在做些什么来反弹想法的影响是无法估量的。
除了围绕着知识的人,你还应该自己编写一个应用程序。选择一些你感兴趣的东西,但同时尽量不要让它变得太复杂,你不想通过编写一个无聊的应用程序或选择一个学习曲线过于陡峭的东西来挫败自己。请记住,应用程序是它的核心,一个帮助你学习的工具,所以如果结果比你想象的要简单,或者你所练习的代码不适用于你的范围内,那就没关系。我正试图写作。
答案 5 :(得分:3)
你肯定需要编写代码才能成为更好的程序员。如果您对编写程序没有特别的想法,请选择一个开源程序(最好是您使用的程序),联系他们并找出他们需要做什么;做出贡献。修复一个错误,实现一个功能......从小处着手,继续前进。这将帮助您了解如何在团队中工作,编写可维护的代码,防止出现问题以及处理有用的任务。人们在学习编程时所写的大部分内容只是练习代码,而不是实际有用或代表任何现实的东西。这就是为什么一个真实有用的程序是最好的事情。
答案 6 :(得分:2)
听起来你正在快乐地编写程序,并且是一个不错的java程序员。因此,写更多内容可能不是学习新事物的最有效方式。
因此,我会说学习一门新语言 - 了解超过1的语言总会让你接触到新的概念。作为一名java程序员,我建议使用C / C ++,因为它们非常受欢迎,但它们填补了“托管高级”语言所不具备的领域,即低级别的高性能,金属应用程序。如果你学习C#(例如),你会发现你只是在做一个不同的java方言(大致),你不会学到太多东西。
如果您不喜欢C / C ++的想法,请使用脚本语言--bash,VBScript / WMI或perl或python。他们会有足够的不同来教你一些好东西。
或两者都做!
答案 7 :(得分:2)
你已经知道如何编程;为了让自己为现实生活做好准备,最重要的可能不是如何更好地编程,而是要学习那些不需要编程的事情。
在您的工作场所,您很可能不会被要求编写“火灾和遗忘”计划,而是在大型应用程序的团队中工作。为了有效地做到这一点,你需要学习:
通过实际项目的实践经验,也可以最有效地学习这一点。对我来说,大开眼界的人们正在一个由大学组织的实验项目中的大约10名学生组成的工作,并获得一些行业支持。也许你可以在你的大学找到或组织类似的东西?如果它有一个处理软件工程的主席,他们应该乐意做这样的事情,如果他们还没有。如果做不到这一点,加入一个开源项目也很好。
答案 8 :(得分:2)
除了选择一个有趣的项目并从头开始实施之外,阅读他人的代码对提高技能也很有价值。 Scott Hanselman有一个关于阅读代码的好系列:Weekly Source Code
答案 9 :(得分:2)
既然您已经了解了编程的基础知识,并且显然有学习的愿望,我将启动宠物项目。
没有什么能让我学习关于技术,语言或想法的大笔交易,而不是让我有一个相当具有挑战性的宠物项目。
我会建议,就像提到的那样,选择一个你真正感兴趣的项目。其他明智的是,它会变得很无聊,你也不知道为什么要这么做。我认为让这个项目变得非常重要是明智的。我总是发现我正在研究的项目不那么琐碎,我学到的东西越多,就越远离它。
此外,如果你住在学院/大学附近,校园内的研究实验室几乎总是寻找暑期实习生来处理一种形状或形式的代码。有些人甚至会付钱给你。我通过高中和一些大学这样做了4到5年,这是一次很棒的学习经历。
显然,参与开源项目是获得与其他开发人员合作的经验的好方法。查看github,sourceforge,bitbucket上的内容。
我只是提醒你寻求帮助并打扰你非常感兴趣的项目的核心开发人员,你会坚持下去。一般来说,致力于该项目的开源开发人员很少。他们的时间对社区来说真的很有价值,而且浪费在那些只是晚上飞行而永远不会再被人看到的人身上,这是一种耻辱。
答案 10 :(得分:2)
我看到一个名为CodeKata的网站的有趣链接可能会对您有所帮助。让你的技能快速发展的重要一点是实际编码你可能在任何实际工作中遇到的实际问题。
答案 11 :(得分:1)
编写程序以自动执行您每天手动执行的操作。
就像,todo列表,保持帐户,检查RSS提要......列表可能是无止境的。如果您在旁边做生意,请写一些简单的代码来帮助您。
本质是:
答案 12 :(得分:1)
与编写代码的能力相比,对开源项目的贡献对开发软件的能力产生了惊人的高影响:
引用一些。一些好看的地方:
答案 13 :(得分:0)
了解最佳做法(例如,在windowsclient.net上培训视频)。获取任何问题并使用数据库作为输入和数据库作为输出来解决它。重新开始几次。这就像你可以进入现实世界的场景一样接近。阅读乔尔推荐的书籍。
答案 14 :(得分:0)
这是我多方面的建议:
1)全局工作 - 查看各种软件开发方法,了解您在编程时如何遵循其中一种方法。你做过一些Java工作,那是web,windows应用程序,控制台应用程序还是别的什么?了解其他类型也可能有用
2)中画工作 - 你看过重构和设计模式吗?这些可能非常有用,但可能需要更多编码经验才能看到它们如何有用。
3)小图片工作 - 研究各种算法并理解在选择数据结构的各种实现时可以做出的各种权衡,例如,链表与数组。有一本关于算法的大白皮书,有些人在研究它们时会使用它们。
答案 15 :(得分:0)
我的多重建议:
答案 16 :(得分:0)
来自99 ways to become a better developer: