如何进一步推动程序员?

时间:2010-03-12 17:45:22

标签: c

最后,嗯,6个月我一直在读C编程,我得到了自己的K& Rv2,BEEJ的套接字指南,专家C编程,Linux系统编程,ISO / IEC 9899:1999规范(真实的,而不是草案)。在从亚马逊收到它们之后,我安装了Linux,然后开始使用它。

我已经完成了K& R,大约是专家C编程的一半,但作为一名程序员仍感到很虚弱,我确信需要超过6个月的阅读才能真正熟练,但我的问题是这个:

我已经完成了K& Rv2(第1章)中的所有练习以及其他章节中的一些练习,其中大多数练习一般都很无聊。我如何提升自己的技能,变得真正伟大?我为我真正想要的东西投入了金钱,时间和一般生活方式,但我不确定如何实现它。

有人可以向我解释,也许我需要连续编码,我究竟要编码什么?我很确定,编写hello world程序并不会教会我任何比我已经知道更多的东西。

我的一个朋友说“阅读”(重点是阅读)每天都有一个人工页面,但我只想读书,我想做,但我不确定是什么!我对安全性很感兴趣,但我不确定新手的编码是否足够。

啊,我希望你不要删除这个问题:)

由于

21 个答案:

答案 0 :(得分:26)

答案 1 :(得分:18)

真正帮助你学习的是开始一个项目。它可以是任何东西,实现聊天客户端/服务器,unix shell,存储购物清单的简单程序,等等。关键是选择你感兴趣的东西并努力实现它,你会惊讶地发现你在学习过程中学到了多少,并且你不会因为你正在为你做一些有意义的事情而放弃。

基本上,你只会通过阅读学到很多东西。要获得真正的知识,您需要解决真正的问题。

答案 2 :(得分:13)

  

其中大部分通常都很无聊

了解您感兴趣的内容,然后其他内容将落实到位。

答案 3 :(得分:7)

彼得诺维格有some ideas about that

答案 4 :(得分:6)

尝试实现一些非平凡的算法。我不知道书中包含哪些示例,但您可能会尝试编写

  • 一个algebratic计算器。输入“sin(2)+ 5!* 3 ^(1/2)”,输出为208.755394335。
  • 从头开始的语法高级文本编辑器。
  • 从头开始编写PNG(或任何其他图像或声音格式)编码器/解码器。
  • 编写图像编辑器(例如,填充填充并非完全无关紧要)
  • ...

答案 5 :(得分:4)

你说你对安全感兴趣。去查找一些漏洞并尝试理解它们。更好的是,尝试自己找一个漏洞利用已知的(更好的:未知的)漏洞。

编写NNTP客户端,SMTP服务器或客户端,并使用它来发送邮件。这些互联网协议中的许多都非常简单,不能非常难以实现(大多数基于文本的协议),但又有细微之处,有趣,并且它们与现实世界的连接使得它比“hello”更令人满意。世界“计划。

或者编写linux内核模块怎么样?它们并不难写,只有一点入门障碍(在你拥有“黑色三角形”之前需要学习很多东西)。创建一个返回您写入的最后一个字节的循环流的字符设备(如果您愿意,可以将其命名为/ dev / fortytwo)。然后确保当两个进程同时使用它时它将起作用。

寻找一些带有糟糕代码但友好社区的项目,并清理一些。 GCC和内核在这里是不好的选择:)

答案 6 :(得分:2)

Code Golf和Project Euler很好 - 但他们更多的是解决问题和数学而不是编程。

找到您感兴趣的Opensource项目(可能不是Linux内核),下载源代码并尝试使用它。理想情况下,它是一个库而不是一个应用程序,所以你必须学习如何阅读它以使用它与你自己的东西。

别担心 - 成为一名优秀的程序员只需要10年左右。

答案 7 :(得分:2)

去上班。 说真的,为初学者找一个工作,让知识更大的人指导你(如果你有运气)或检查代码库是否有用(如果运气较小)。

换句话说,您可以为自己创建项目,因为有些人建议并在机会出现时提高您的知识。

然而,我不会混淆这两个世界 - 不要以达成协议来开始 - 你可能会倾向于低估/高估时间成本,不会对更大的知识有所了解解决方案等等。最好有人指导你或有更多时间学习东西。

啊,顺便说一句。 - 阅读书籍(CC2,一些设计模式书籍,“清洁代码”是一个很好的起点和整个职业生涯的优秀参考书)和博客(你当你看到它时会知道它。

答案 8 :(得分:2)

“阅读”并练习您阅读的内容是最佳方式。

答案 9 :(得分:2)

您需要通过更大,更复杂的项目挑战自己。正如大多数书中的例子所倾向的那样,通过代码片段工作,不会让你远远超过章节练习。

您正致力于成为一名智能手册的开发人员。做一些现实世界,变得街头聪明!

答案 10 :(得分:1)

代码Hello World,然后代码Hello World通过网络或3d或使用数据库分发。在你完成它们之前,不要认为事情太微不足道了。实施算法以确保您知道如何。你觉得代码很有趣。

答案 11 :(得分:1)

我发现在学习概念方面练习比阅读它们更有用。通常我要做的是确定我想用软件解决的问题,然后通过尝试问题来解决它。我将一路上利用资源,但尝试阅读的内容确实更有用,而不是阅读有关该主题的每本书。

此外,Code Golf是寻找有趣程序的好方法。

答案 12 :(得分:1)

首先,您需要在至少两个组中编写软件,以便获得反馈。如果您是独自工作,那么可以通过使用SO或其他表单(例如Programmers)来寻找方法,以获得反馈。

接下来,找到您感兴趣的内容,项目构思将随之而来。我在市政环境中工作,但最让我感兴趣的是水的仪器。我喜欢我的其他工作,但很多有趣的编程想法来自于水计量和计费系统。当其他问题(如比较健康保险登记者)出现时,处理水编程问题会让我头脑清醒。

无论您是将更多精力放在网络或服务器后端项目上,还要保持您的语言知识最新且足够小,以便更好地了解语言。根据我的经验,如果您熟悉基于Algol的语言,比如C,您可以学习另一种类似的语言,如C ++,Java或Perl。 C是一种很棒的语言,但除非你打算编写Linux内核,专门的嵌入式或Python扩展代码,否则我建议学习Scala或Clojure,以及除了Javascript和PHP之外的Ruby。

但是,你会学到什么语言的是一个有兴趣的项目愿意雇用你并且你很好地学习他们的实施语言的人。那就是如果你喜欢语言A,但是有人愿意雇用你来完成他们在语言B中实现的项目,然后接受这个项目,因为你作为程序员的成长将来自对项目的有益贡献而不是你所知道的语言

最后,成为一名优秀的问题解决者,这些技能将超越编写软件。这些天,如果我有价值,那是因为我可以处理一系列问题,而不仅仅是编程。

答案 13 :(得分:0)

做到这一点。作为一个“伟大的”开发者没有捷径 - 就像任何其他工艺一样,它需要大量的时间,练习和耐心。就这么做。

答案 14 :(得分:0)

如果您对安全性感兴趣,请尝试编写一个考虑安全性的Web应用程序。如果您创建类似论坛的内容,您不仅会了解许多安全问题,还会了解如何使用多种技术,如数据库,Web服务器,新语言以及除C之外的新风格。然后当您完成您的项目,将代码与其他类似软件进行比较。如果您对项目感到困惑,您还可以查看类似项目以了解他们的工作。它可以像你想要的那样简单或复杂。

Web编程可能在很多方面与系统编程不同,但两者都有许多安全问题。

答案 15 :(得分:0)

学习编程就像学习说外语一样。最初它非常令人沮丧,而且经常很无聊。只有在您获得某种语言的流利程度后,才能发现您的工作效率会提高。同样,仅仅学习规则是不够的。与语言学习一样,如果你不使用它,并且经常使用它,那么很难保留并保持你的兴趣。

对一个人有用的东西并不总是适用于另一个人。代码高尔夫可能适合您,或者您可能会发现它很繁琐。我个人喜欢做一些有真正价值的东西,但那就是我。尝试一些不同类型的编码项目,可能是编码高尔夫,也许是开源项目,制作游戏等。有时候只是想弄清楚如何回答其他人的问题会有所帮助。最终你会发现什么对你有用。请记住,学习是不够的,你必须应用这些研究。

答案 16 :(得分:0)

一些项目构想:

  • 小型数据库项目:联系人列表,DVD收集等。强调文件I / O,可搜索的数据结构等。
  • 简单计算器:强调交互式I / O,解析,树状结构等。
  • 简单NNTP(Usenet)或聊天客户端:网络和协议

答案 17 :(得分:0)

您只能在使用时学习该语言。简单的示例或练习永远不会让您深入了解语言。我个人也在一个枯燥乏味的章节结尾处找到了练习,所以我没有这样做。当其他州找到您感兴趣的项目时。这可以是任何东西,从简单的棋盘游戏到视频剪辑系统。如果您发现了对您有意义的内容,请查看如何完成它。您需要使用一些帮助库,UI和后端。然后开始工作! (当然这个项目对你来说应该是可行的,所以不要像'写一个比Winword更好的文字处理器'这样的目标。)

另一种方法是挖掘您感兴趣的OSS项目以及缺少某些功能的地方。实施那些!最大的好处是,您可以从任何教师那里获得可能更难的源评论。一旦你学会了这些编码风格,你可能已经忘记了语言本身。

答案 18 :(得分:0)

启动项目并完成它。把它放到网上,开源,获得反馈。

答案 19 :(得分:0)

您可能会发现阅读代码完成2 很有帮助。这是一本关于编程实践的好书。

答案 20 :(得分:0)

考虑阅读有关编程“概念”的更多内容而不是纯语法:

为您所在专业领域的程序员加入邮件列表/简报/杂志/播客: http://www.drdobbs.com/cpp/;jsessionid=XVZEO0SKOCRRBQE1GHPCKH4ATMY32JVN

访问StackOverflow.com并尝试定期解决问题,给自己一个心理挑战并帮助他人。