程序员1——从指令到算法
上大学之前几乎没有接触过电脑,甚至智能手机。
我自信有哲学天赋,然而我必须学习科学做些实在的事情,工科里选了SE,没敢直接上数理,毕竟大学不怎么牛逼并且没什么自信,而且枯燥,不符合我的学习理念。
大一上导论课同时学习C编程。那时候我迫切想弄清楚计算机的结构和运行原理,一个关键的概念:指令,一直萦绕在我的脑袋里。
然后学了汇编,稍微了解了一些。这学期还开了C++,没什么太大感觉。
之后上数电、计算机组成原理,伴随有离散数学、线性代数。学完计组基本上对计算机没什么大的疑问了。
接下来单片机、数据结构、操作系统、软件系统分析与设计。
……
从一开始就买了很多专业领域的经典书,自己一点一点啃。
喜欢画计算机知识的抽象序列以及待学习的领域知识。
现在从新的高度总结一下吧
搞代码和软件系统设计是有很大不同的,未来coding完全可以由开发工具完成。
1.Programming language & Development tools
2.SSAD
3.DB
4.UI/Graphics
5.OS api
6.Web
TCP/IP
HTML
7.Soc
8.Theoretical knowledge/Mathematics
such as OS、Compiler、Algorithm……
相应的课程:
C,Java/.NET
数据结构,数据库原理
操作系统
单片机原理与接口技术
计算机通信与网络
计算机图形学
嵌入式Linux操作系统开发与设计
大的来看,编程语言、数据库、操作系统、网络、嵌入式肯定是要搞明白的。
肯定不仅满足于搞代码,人工智能或者高级黑客才是目标。
从一个设计师的角度,需要考虑哪些问题?
首先是计算机体系架构的问题,比如冯诺依曼结构;
其次指令集;
芯片电路的设计;
操作系统,api;
编程语言和编译器的设计;
算法;
项目管理;
……
当要开发一个项目的时候,你便能发觉仅仅会语言是远远不够的。
为什么语法是这样的?
编译器和操作系统在做什么?
数据库、TCP/IP协议在发挥什么作用?
窗口和多彩的图形界面是如何做到的?
……
尽快离开 Console.
基本上以上的几点知识都是必要的,缺少一块便无法自信写出好的软件。
最基本的考虑数据的流向。
需求文档是对软件产品的定义,侧重需求和功能,没必要把软件设计的细节写入其中,需求分析师和架构师的职能是有所侧重的。当然一些宏观的部署应先考虑。
功能应按模块详述,代码分工的基础也在于软件的模块化。
期间不可避免会烦躁,想放弃,觉得太难看不到前途,进而怀疑自己当初的选择,觉得自己不适合干这个。
其实没那么多所谓的适合不适合,学任何东西都不可能轻而易举,除非你明白为什么做不到否则没理由放弃。
life is just like this.再没有更多有趣的难题。
你需要学习基本的科学知识,更重要的保持一种艺术地看待世界的眼光,规则的存在总是有它的合理性的,总是需要一些基本的法则,不然这世界便要消失。
除非你自甘堕落。为什么呢?
工具:
PC(intel CPU的主机+显示器+键盘)
OS:Windows,Linux
IDE:visual studio,Dev-C++,CodeBlocks,eclipse
compiler:GCC,MS,Borland,intel
编辑器:notpad++,UltraEdit ,EditPlus
汇编:Masm,RadAsm
电路、单片机:Multisim,keil+proteus
SSAD:Rational Rose,MS visio,MS project,Axure
HTML:Dreamweaver
分两步学习,底层硬件细节和上层的软件设计。
底层的东西不用钻太深,到单片机能动手就可以了;上层也不能太抽象,要有数学基础。
add at 4 15
自动计算与硬件控制
操作系统
编程语言
数据库
TCP/IP协议
图形学
算法和软件系统
一.系统结构(指令集、组成、硬件)
二.总线
三设备驱动和操作系统
四.编译器和编程语言
开发工具等核心系统软件
应用软件和网络
物联网
操作系统对编程的影响
元操作系统
可扩展性
可移植性
易交互性
易编程
两类程序员
黑客级(需要快速掌握硬件以及操作系统的细节知识)
开发型(工作于标准之上,用开发工具做软件开发)
如何摆脱用软件开发软件的奇葩状况?
我自信有哲学天赋,然而我必须学习科学做些实在的事情,工科里选了SE,没敢直接上数理,毕竟大学不怎么牛逼并且没什么自信,而且枯燥,不符合我的学习理念。
大一上导论课同时学习C编程。那时候我迫切想弄清楚计算机的结构和运行原理,一个关键的概念:指令,一直萦绕在我的脑袋里。
然后学了汇编,稍微了解了一些。这学期还开了C++,没什么太大感觉。
之后上数电、计算机组成原理,伴随有离散数学、线性代数。学完计组基本上对计算机没什么大的疑问了。
接下来单片机、数据结构、操作系统、软件系统分析与设计。
……
从一开始就买了很多专业领域的经典书,自己一点一点啃。
喜欢画计算机知识的抽象序列以及待学习的领域知识。
现在从新的高度总结一下吧
搞代码和软件系统设计是有很大不同的,未来coding完全可以由开发工具完成。
1.Programming language & Development tools
2.SSAD
3.DB
4.UI/Graphics
5.OS api
6.Web
TCP/IP
HTML
7.Soc
8.Theoretical knowledge/Mathematics
such as OS、Compiler、Algorithm……
相应的课程:
C,Java/.NET
数据结构,数据库原理
操作系统
单片机原理与接口技术
计算机通信与网络
计算机图形学
嵌入式Linux操作系统开发与设计
大的来看,编程语言、数据库、操作系统、网络、嵌入式肯定是要搞明白的。
肯定不仅满足于搞代码,人工智能或者高级黑客才是目标。
从一个设计师的角度,需要考虑哪些问题?
首先是计算机体系架构的问题,比如冯诺依曼结构;
其次指令集;
芯片电路的设计;
操作系统,api;
编程语言和编译器的设计;
算法;
项目管理;
……
当要开发一个项目的时候,你便能发觉仅仅会语言是远远不够的。
为什么语法是这样的?
编译器和操作系统在做什么?
数据库、TCP/IP协议在发挥什么作用?
窗口和多彩的图形界面是如何做到的?
……
尽快离开 Console.
基本上以上的几点知识都是必要的,缺少一块便无法自信写出好的软件。
最基本的考虑数据的流向。
需求文档是对软件产品的定义,侧重需求和功能,没必要把软件设计的细节写入其中,需求分析师和架构师的职能是有所侧重的。当然一些宏观的部署应先考虑。
功能应按模块详述,代码分工的基础也在于软件的模块化。
期间不可避免会烦躁,想放弃,觉得太难看不到前途,进而怀疑自己当初的选择,觉得自己不适合干这个。
其实没那么多所谓的适合不适合,学任何东西都不可能轻而易举,除非你明白为什么做不到否则没理由放弃。
life is just like this.再没有更多有趣的难题。
你需要学习基本的科学知识,更重要的保持一种艺术地看待世界的眼光,规则的存在总是有它的合理性的,总是需要一些基本的法则,不然这世界便要消失。
除非你自甘堕落。为什么呢?
工具:
PC(intel CPU的主机+显示器+键盘)
OS:Windows,Linux
IDE:visual studio,Dev-C++,CodeBlocks,eclipse
compiler:GCC,MS,Borland,intel
编辑器:notpad++,UltraEdit ,EditPlus
汇编:Masm,RadAsm
电路、单片机:Multisim,keil+proteus
SSAD:Rational Rose,MS visio,MS project,Axure
HTML:Dreamweaver
分两步学习,底层硬件细节和上层的软件设计。
底层的东西不用钻太深,到单片机能动手就可以了;上层也不能太抽象,要有数学基础。
add at 4 15
自动计算与硬件控制
操作系统
编程语言
数据库
TCP/IP协议
图形学
算法和软件系统
一.系统结构(指令集、组成、硬件)
二.总线
三设备驱动和操作系统
四.编译器和编程语言
开发工具等核心系统软件
应用软件和网络
物联网
操作系统对编程的影响
元操作系统
可扩展性
可移植性
易交互性
易编程
两类程序员
黑客级(需要快速掌握硬件以及操作系统的细节知识)
开发型(工作于标准之上,用开发工具做软件开发)
如何摆脱用软件开发软件的奇葩状况?