开发人员要点 - 要尝试的资源和项目

时间:2009-02-07 18:21:56

标签: computer-science

我作为开发人员已经工作了大约两年,我做了一点狡猾的IT学位,我希望我已经完成了“适当的”计算机科学学位,因为我已经意识到我在我的知识。

我完全使用c#进行一些前端Web开发。有些事情真的很想学,我想知道人们是否能指出一些好的资源。我基本上一直试图找出一个我不知道的清单并按优先级排序。任何人都可以建议我可以为列出的每个项目和要使用的资源尝试的示例项目(欢迎网络和书籍建议)。

  • 联网,了解完整的ip栈等。
  • http协议,值得一看OReilly book吗?
  • 多线程应用程序
  • 低级编程,当前使用此programming from the ground up
  • 的程序集
  • 数据结构和算法。
  • 操作系统
  • 您认为应该在此列表中的任何其他内容!

我想我在问,“每个开发人员应该知道什么?他们应该在自己的时间尝试哪些项目,以确保他们能够很好地理解这个主题”。我知道我的名单在方法上相当分散,但我猜这就是为什么我要求我的方向帮助。

提前感谢任何花时间回应此事的人。

.. BRI

7 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

你读过Code Complete吗?这是一个很好的起点,因为它突出了各种主题的大量额外阅读。

答案 2 :(得分:2)

好的,要攻击你给出的列表(BTW,它们听起来根本没有声音 - 你听起来像是对计算机系统感兴趣,这是一个成熟而活跃的研究领域)。

我将为您提供每个区域的资源和示例项目:

数据结构和算法。

  • 资源:规范的书,我仍然认为是最好的, 是由算法导论 Cormen等。这不是很容易 去,但它非常丰富和好 解释。备份你不能做的事情 从维基百科那里得到了很好的把握 (其DS + A页面不一般 坏的)也许是NIST词典。
  • 项目:尽可能多地使用自己喜欢的算法 您选择的语言。如果你 我推荐使用如上所述的ITA Python只是因为它是最接近的 他们使用的伪代码的语言, 但不要过分担心你的问题 选择语言。我再说一遍,选择一种语言不会陷入困境;有充足的时间 全部学习:)

联网。

  • 资源:要了解它们如何融合在一起,有几本好书。我喜欢Tanenbaum的'计算机网络',但另一个不错的选择(虽然我自己没有仔细阅读过,但我自己并没有仔细阅读过)可能更适合你的是Kurose和Ross'Computer Networks: A Top Down Approach Using The Internet。这本书可能会很好用,因为你更有可能触及你早期熟悉的概念。

    要全部付诸实践,请阅读Linux或FreeBSD内核源代码,了解网络堆栈的组合方式。有很好的资源,无论是在印刷品还是在网上,都可以帮助您完成这一过程。 顺便说一下,我真的不会太担心HTTP。这是一个重要的协议,但并不是一个非常有趣的协议。在我看来,TCP,IP,UDP,BGP和朋友更有意思!

  • 项目:很难知道什么是可行的项目。回答书末章的问题。通过编写一个简单的客户端 - 服务器程序来教自己用户空间套接字编程(网上的“Hello world!”并不难做到!)。一旦你有了这个,你可能自己想出一个扩展 - 也许你想写一个非常简单的Web服务器。

多线程编程:

  • 资源:这是一个很大的话题。如果您只是想了解多线程基元如何以您选择的语言运行,请在网上找到一个教程 - 至少有Python,Java和C的加载。如果您对该理论感兴趣,请在并发编程中搜索DDJ中的Herb Sutter系列(但这对您来说可能有点先进)。 Herlihy和Shavit的Art of Multiprocessor Programming是一本关于并行编程的精彩书籍,从非常(非常)学术角度看实用,虽然第一版需要修复一堆错误。
  • 项目:从网络项目中获取服务器并在新线程中为每个客户端提供服务,以便您可以同时接受多个连接。为餐饮哲学家的问题编写解决方案:))

操作系统:

  • 资源:存在几本优秀的入门书籍。再一次,我是Tanenbaum的Modern Operating Systems的粉丝,但Silberschatz等。人。书也很好。你真的想在这里找到一本书,恕我直言,因为你想要在研究特定操作系统的工作原理之前,想要一个通用的概述,看看哪些设计选择可用。

    然而,当你确实达到这一点时,我建议你再次阅读Linux源代码。网上有很好的文章,还有一些好的书籍(我喜欢Linux Kernel Development,但它有点过时了。)

  • 项目:在虚拟机中安装Linux发行版。向内核添加系统调用,并从用户空间进行测试。然后内核就是你的牡蛎!尝试攻击调度程序 - 首先让它变得非常愚蠢,然后慢慢添加功能。

    如果您愿意,可以尝试从头开始编写操作系统,但这是一个很大且可能非常令人沮丧的体验。我建议开始使用一个现存的内核 - 至少当它打破时你就知道这是因为你刚才所做的事情:)

答案 3 :(得分:0)

一本值得关注的好书是Silberschatz,Galvin& Co.的“操作系统概念”。加涅。

它引导您思考从线程,内存管理到操作系统设计结构的各个方面。书中的例子都是用C语言写的,所以很容易掌握。它确实填补了整个操作系统的任何空白。

答案 4 :(得分:0)

您可能尝试的一件事是为计算机科学课程找到一些公共教学大纲。看看他们正在做什么样的项目并亲自尝试。当您需要帮助时,请根据需要咨询书籍,论坛和SO。

我认为我在本科课程中学到的最基础的CS课程是编程语言理论,计算机组织,操作系统和理论/离散数学课程。

尝试采用经典算法并在4种不同类型的语言中实现它。 (例如,尝试C#,LISP,Prolog和C)将一些玩具功能添加到Linux内核的本地副本中,以查看它是如何滴答的。编写分布式文件系统。这些是学校里最能教会我的项目。

答案 5 :(得分:0)

绝对要看一下计算理论。几本好书是: http://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser/dp/053494728X http://www.amazon.com/Computability-Complexity-Languages-Second-Fundamentals/dp/0122063821

我还要看看projecteuler.net并解决其中的一些问题。避免使用暴力解决问题......相反,看看数学并尝试学习将在CS理论课中讨论的常用算法和概念。

答案 6 :(得分:-2)

我必须具备的知识是:

  • 依赖注入容器
  • 单元测试
  • 模式(有点)
  • 域名模式(原型)