Computer science 我应该知道哪些计算机科学概念?

Computer science 我应该知道哪些计算机科学概念?,computer-science,Computer Science,你认为计算机科学中的哪些概念使你成为一名更好的程序员 我的学位是机械工程,所以作为一名程序员,我有点缺乏基础知识。我最近学到的一些标准CS概念让我对自己的工作有了更深入的了解,特别是: 语言功能 指针和递归(谢谢Joel!) 数据结构 链表 哈希表 算法 气泡排序 显然,目前列表有点短,因此我希望得到以下建议: 我应该理解什么概念 任何正确理解它们的好资源(因为维基百科有时有点密集和学术性) 我发现图形和一些应用算法,如深度优先、呼吸优先搜索、最短路径等非常有用。面向对象也是一个非常

你认为计算机科学中的哪些概念使你成为一名更好的程序员

我的学位是机械工程,所以作为一名程序员,我有点缺乏基础知识。我最近学到的一些标准CS概念让我对自己的工作有了更深入的了解,特别是:

语言功能

  • 指针和递归(谢谢Joel!)
数据结构

  • 链表
  • 哈希表
算法

  • 气泡排序
显然,目前列表有点短,因此我希望得到以下建议:

  • 我应该理解什么概念
  • 任何正确理解它们的好资源(因为维基百科有时有点密集和学术性)

  • 我发现图形和一些应用算法,如深度优先、呼吸优先搜索、最短路径等非常有用。面向对象也是一个非常普遍的概念。

    看看Steve Yegge(以前是亚马逊,现在是谷歌)的这篇博文:

    它详细介绍了开发人员需要了解的五个最重要的概念:

  • 基本编程(包括递归、文件I/O、格式化输出、循环等)
  • 面向对象设计(包括设计模式等)。您应该能够生成合理的OO设计,并理解这些概念
  • 脚本和正则表达式
  • 数据结构——列表、集合、哈希表、树、图等等——以及大O表示法和算法复杂性
  • 位、字节和二进制数——数字在计算机中的表示方式以及操作方式

  • 你肯定应该理解算法的符号和Big-O估计-它是什么,它是如何使用的,为什么它很重要,你如何比较两个算法的Big-O估计,你如何为简单的算法建立Big-O估计。

    我想说,现在必须理解面向对象编程,即使你不需要每天使用它


    因此,我还要说,理解最常见的模式也会有所帮助

    一些操作系统概念

     ( memory, IO, Scheduling, process\Threads, multithreading )
    
    [一本好书”,第二版,安德鲁·S·塔南鲍姆“]

    计算机网络基础知识

    一本好书

    面向对象的概念

     ( memory, IO, Scheduling, process\Threads, multithreading )
    
    有限自元

    一种编程语言(我先学C,然后学C++)

    算法 (时间\空间复杂性、排序、搜索、树、链表、堆栈、队列)


    [一本好书]

    试着了解编程的各个层次。从最低层次(汇编)到最高层次


    以递归为例,这是一个简单的特性:)试着学习汇编并创建一个在汇编中使用递归的程序。

    对我来说,我从大学的以下课程中学到了很多

    • 项目管理
    • 人机交互(帮助我们极客制作更人性化的屏幕)
    • 数据库设计(包括数据库的工作方式、事务日志、锁定等)
    • 数据仓库
    • 图形(OpenGL)
    • 高级算法
    • 数据结构
    我希望我在大学里做过的事情

    • 编译结构
    • 设计模式
    • 自动机理论

    这显然是对面向对象编程的良好理解,以及良好的指导原则,如和遵循既定的模式和实践

    如果您看看SOA或DDD,它们最终都会回到某种形式的OOP概念

    我建议你买一些好的面向对象编程书籍,并从C#或Java这样的丰富语言开始


    (PHP,ruby伙计们请不要否决投票给我,我只是给他举了一些例子,你可以在这里提供你自己的答案和建议)

    我觉得你在寻找计算机科学科目有点可笑,但觉得维基百科太学术化了:D

    不管怎样,这里没有特别的顺序:

    • 关系模型:
    • 对象定向:
    • 复杂性和计算理论(想想图灵机和自动机):
    • 一个小小的编译器设计:,尽管这对于您的需求来说可能有点过于深入
    • 操作系统概念:
    • 人际交往技能:
    • 团队合作:
    • 用户界面设计:

    规则1:软件是知识的获取。软件具有某种意义。如果你不清楚其含义,请花更多时间与用户交谈,了解他们的工作

    算法和数据结构是同一枚硬币的两面。算法取决于数据结构,数据结构取决于算法

    尽快忘记冒泡排序。说真的。所有现代语言(Java、Python等)拥有实现比冒泡排序更好的排序的集合类。绝对没有任何情况下您应该对任何事情使用冒泡排序。您应该寻找一个包含排序方法的集合类。更好的是,您应该寻找一个完全避免排序的算法

    你必须学会几种语言

    • 编程语言(Java、Python等)

    • Shell语言

    • 数据库语言(SQL)

    • 表示语言(HTML和CSS)

    • 其他数据表示语言(XML、JSON)

    您必须学习几种数据结构

    • 序列(列表、元组、文件)

    • 分层(如XML和HTML文档以及基本文件系统)

    • 关系(如数据库,以及包含硬链接和软链接的文件系统)

    • 映射(或索引或关联数组),包括哈希映射和树映射