如何进一步推动程序员?

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

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

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

有人可以向我解释一下,也许我需要不断编码,我究竟要编码什么? 我很确定,编写hello world程序并不会教会我任何事情。

我的一个朋友每天说“阅读”(重点是阅读)一个人工页面,但我只想读书,我想做,但我不确定是什么! 我对安全感兴趣,但我不确定作为一个新手应该考虑的代码。

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

谢谢

学习21天的课程http://sofzh.miximages.com/c/ars_longa_vita_brevis.png 来自Abstruse Goose

此外, 十年教你自己编程

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

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

其中大部分都非常无聊

学习一些你觉得有趣的东西,其余的就会到位。

Peter Norvig对此有一些想法

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

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

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

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

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

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

“阅读” 并练习你所读到的最好的方法。

代码高尔夫和项目欧拉是好的 – 但他们更多的是解决问题和数学而不是编程。

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

别担心 – 成为一名优秀的程序员只需要大约10年的时间。

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

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

但是,我不会将这两个世界混合在一起 – 不要以达成一笔交易的方式开始 – 您可能会倾向于低估/高估时间成本,不会对更大的解决方案有更好的了解,等等有人指导你或有更多时间学习东西会更好。

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

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

你正致力于成为一名智能书籍开发者。 做一些现实世界,变得街头聪明!

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

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

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

首先,您需要在至少两个组中编写软件,以便获得反馈。 如果你是独自工作,那么找一种方法,或者使用SO或其他forms,比如程序员来获得反馈。

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

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

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

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

做吧 作为一个“伟大的”开发者没有捷径 – 就像任何其他工艺一样,它需要大量的时间,练习和耐心。 去做就对了。

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

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

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

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

一些项目构想:

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

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

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

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

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

  • 不要让史蒂夫克鲁格思考
  • 代码完成:软件构建实用手册

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

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

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