我作为开发人员已经工作了大约两年,我做了一点狡猾的IT学位,我希望我已经完成了“适当的”计算机科学学位,因为我已经意识到我在我的知识。
我完全使用c#进行一些前端Web开发。有些事情真的很想学,我想知道人们是否能指出一些好的资源。我基本上一直试图找出一个我不知道的清单并按优先级排序。任何人都可以建议我可以为列出的每个项目和要使用的资源尝试的示例项目(欢迎网络和书籍建议)。
我想我在问,“每个开发人员应该知道什么?他们应该在自己的时间尝试哪些项目,以确保他们能够很好地理解这个主题”。我知道我的名单在方法上相当分散,但我猜这就是为什么我要求我的方向帮助。
提前感谢任何花时间回应此事的人。
.. BRI
答案 0 :(得分:3)
我投了你的问题,因为你似乎没有进行搜索。
What should every programmer know?
What algorithms should every developer know?
asp.net frameworks and libraries every developer should know…and use
CSS tips which every beginning developer should know about?
Questions every good .NET developer should be able to answer?
What skills should a programmer have nowadays?
我不是想要粗鲁。至少我指出为什么我被投票。
答案 1 :(得分:2)
你读过Code Complete吗?这是一个很好的起点,因为它突出了各种主题的大量额外阅读。
答案 2 :(得分:2)
好的,要攻击你给出的列表(BTW,它们听起来根本没有声音 - 你听起来像是对计算机系统感兴趣,这是一个成熟而活跃的研究领域)。
我将为您提供每个区域的资源和示例项目:
数据结构和算法。
联网。
资源:要了解它们如何融合在一起,有几本好书。我喜欢Tanenbaum的'计算机网络',但另一个不错的选择(虽然我自己没有仔细阅读过,但我自己并没有仔细阅读过)可能更适合你的是Kurose和Ross'Computer Networks: A Top Down Approach Using The Internet。这本书可能会很好用,因为你更有可能触及你早期熟悉的概念。
要全部付诸实践,请阅读Linux或FreeBSD内核源代码,了解网络堆栈的组合方式。有很好的资源,无论是在印刷品还是在网上,都可以帮助您完成这一过程。 顺便说一下,我真的不会太担心HTTP。这是一个重要的协议,但并不是一个非常有趣的协议。在我看来,TCP,IP,UDP,BGP和朋友更有意思!
多线程编程:
操作系统:
资源:存在几本优秀的入门书籍。再一次,我是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)
我必须具备的知识是: