- Algorithm
- Incremental Method
- Simulation
- Backtracking
- Dynamic Programming
- Largest Empty Interval
- Location Allocation Problem
- Knapsack Problem
- Algorithm Analysis
- Data
- Sort
- Set
- 排序资料结构: Search Tree 系列
- Sequence 资料结构: Array / List
- 大量 Point 资料结构: k-Dimensional Tree
- Region 资料结构: Uniform Grid
- Graph
- Tree 资料结构: Heavy-Light Decomposition
- Graph Spectrum(Under Construction!)
- Tree
- Binary Tree
- Directed Acyclic Graph
- Articulation Vertex / Bridge
- Reachability
- Bipartite Graph
- Clique(Under Construction!)
- Planar Graph
- Path
- Single Source Shortest Paths: Label Correcting Algorithm
- Shortest Walk
- Cycle
- Spanning Tree
- s-t Flow
- Feasible s-t Flow
- Cut
- Matching
- T-Join
- Hamilton Circuit
- Domination
- Coloring
- Labeling
- Vector Product
- Sweep Line
- Rectangle
- Rectangle
- Polygon
- Convex Hull
- 3D Convex Hull(Under Construction!)
- Half-plane Intersection
- Voronoi Diagram
- Triangulation
- Metric
- Number
- Sequence
- Function (ℝ)
- Matrix
- Root Finding
- Linear Equations
- Functional Equation
- Optimization
- Interpolation
- Curve
- Regression
- Estimation
- Clustering
- Transformation(Under Construction!)
- Wave (ℝ)
- Representation
- Signal
- State(Under Construction!)
- Markov Chain
- System(Under Construction!)
- Markov Model
- Function
- Gray Code
- Base
- Divisor
- Prime
- Residue
- Lattice
- Series(Under Construction!)
- Average Number
- Nim
- String
- Longest Increasing Subsequence
- Longest Common Subsequence
- Approximate String Matching
- String Matching
- String Matching
- String Matching: Inverted Index
- Count Substrings
- Palindrome
- Language
- Code
- Compression
- Correction
- Encryption
- Transmission
- Data
- Text
- 2D Graphics
- Audio
- Audition(Under Construction!)
- Image
- Vision(Under Construction!)
- Model
- Motion(Under Construction!)
- Camera(Under Construction!)
- Glass(Under Construction!)
- Computer
- Physics
- Biology
- Medicine
- Finance
- Education
- Standard Library
Computer
Computer
计算机。台湾译作电脑。一台可以实施数学运算的机器。
制作电脑属于电子系、电机系的专长。台湾的电脑工业,产业结构相当成熟,产品行销全球。你想的到的电脑零件、电脑成品,例如硬碟、光碟机、记忆体、主机板、萤幕、桌机、笔电、滑鼠等等,都有专门公司在研发。即便是电脑回收商,也堪称一流。
Program
程式。控制电脑运作的指令。
操控电脑属于资工系的专长。可以分为程式语言、程式设计。
程式语言。人工产物,有严谨的规格书,以便精准地控制电脑运作。常用的程式语言,坊间已经充斥大量书籍,网路上已经充斥大量互动式学习资源,学习难度极低,甚至可以无师自通。
程式设计。编写程式,达成任务。程式语言的学习资料非常多,但是程式设计的学习资料非常少。有些书教你如何把程式写漂亮,例如 code complete;有些书教你如何规划程式码,例如 head first ooad;但是目前还没有一本书是谈论如何编写程式解决问题。对于程式设计,现今世界上还没有一套明确的见解,也没有一条明确的学习路径。大家现在多半把程式设计当作是一种具有灵性的艺术创作,特别强调天资这回事。
程式设计最近获得重视。美国业界以及政府正在倡导 人人都要有程式思维 ,规划学习进度、培育相关师资,进一步推动 计算机科学教育 。也有研究单位正在探索 程式设计的本质 ,设计适合中小学生学习的程式语言,发掘程式设计如何影响孩童的思考与行为。
想要浅尝一下程式语言是什麽,可以从 HOUR of CODE 开始。顺带一提台湾也有相关活动 一小时玩程式 。
想要学习经典的程式语言,例如 C++,可以参考 《C++ How to Program》 等著作以及各种网路资源。
想要通盘概观程式设计,可以参考 Princeton cos333 、 Harvard cs50 课程。
想要了解程式语言的流行用途,例如手机 APP、网页设计,可以参考 Udacity 与 Google 合作的课程 、 韩国的软体开发网站 。
程式语言的粗糙分类
根据程式语言的用途,可以分为以下这几大类:
组合语言:控制中央处理器,例如 x86。
程式语言:控制电脑运作,例如 C、C++、Java、Python。
脚本语言:控制软体运作,例如 Unix shell、JavaScript。
资料语言:描述与操作资料,例如 HTML、SQL、VHDL。
专业工具语言:例如绘图计算 GLSL、数学计算 MATLAB。
新型态的语言:拥有庞大资料库、函式库,例如 Mathmetica。
程式设计的粗糙分类
根据程式设计的用途,可以分为以下这几大类:
embedded system programming:将电脑零件安装在机械设备、电子设备裡面,然后写程式控制设备。例如洗衣机、电子錶、捷运火车飞机、医疗器材、工厂设备。嵌入式系统是规模浩大的产业,中央处理器有 98%安装在各式设备,只有 2%用于桌机。但是台湾几乎没人做这门生意,只专注在桌机与手机。
system programming:充分运用电脑零件、执行特定任务。例如作业系统、程式语言编译器、驱动程式、档案传输、即时通讯、浏览器、游戏引擎、防毒软体。台湾工程师的擅长项目。
application programming:手机与桌机的应用程式(软体)。例如文书编辑器、绘图软体、游戏软体。应用程式也是规模浩大的产业,但是台湾几乎没人做这门生意,只专注手机 APP。
需要的技能:一、各个作业系统厂商,发明了专属的程式语言,用来撰写自家作业系统的应用程式。例如苹果的 Objective-C。微软的 C#。二、藉由作业系统的 API,操控作业系统。例如 COCOA、WinAPI、Android SDK。也有厂商进一步将 API 包装成工具、建立体系(框架),例如微软的.NET。
web programming :编辑网页、制作网站。工具时时刻刻都在改变,易学难精。职称三不五时就会改变,炒作话题。由于学习资源十分普及、免费工具俯拾即是,因而凭空蹦出许多网路名人。
在用户的电脑执行(前端) HTML:语言。网页的资料内容。 CSS:语言。网页的排版样式。 JavaScript:语言。控制浏览器的行为。通常用于控制网页内容。 Bootstrap:人家写好的程式码,可以快速建构上述东西,特别针对手机的版面。 jQuery:人家写好的 JavaScript 函式库。 Angular、React:人家写好的 JavaScript 工具。 在伺服器执行(后端) PHP、JSP、ASP:语言。生成 HTML。 Django、Ruby on Rail:语言与函式库。生成 HTML、管理档案、存取资料库。 SQL:语言。从资料库存取资料。 知名软体 Oracle SQL、Microsoft SQL Server、MySQL。 Web Server:软体。让大家可以连线到伺服器,存取网页。 知名软体 Microsoft IIS、Apache HTTP Server、Tomcat。
system integration:同时涉及多种程式设计类型。例如购物网站、影音平台、行政资讯系统、悠游卡系统、停车场管理系统。台湾有许多专业公司,自产自销、提供个性化服务。
knowledge-based programming :新世代程式设计,目前尚未流行。运用庞大资料库与函式库,编写程式处理触目所及的资讯。
Database
Database
资料库 。简单来说,就是硬碟,存放大量资料的东西。
资料库可以分成硬体层面和软体层面。硬体层面的经典主题,例如 备份与还原 、 镜像与同步 、 容错 等等。通常学校课程不会教到,相关技术已被商业垄断。
软体层面的经典主题,例如 资料库架构 :资料的格式以及存取资料的模式, 资料库正规化 :归类资料的方式, 资料库查询语言 :查询资料的指令。学校课程就会教到。
除了存储资料以外,通常我们还想灵活运用资料,例如 资讯检索 、 资料探勘 、 资料视觉化 ,从资料库当中挖掘讯息、产生报表,为己所用。最近媒体吹捧的口号 大数据 就是活用资料库的意思。
资料库是相当务实的学问。国民的户政财政资料、线上文章音乐影片、打卡订票、字典图书等等,资料库无所不在。稍具规模的公司行号,就需要资料库储存资料。理所当然地,当今世上规模最大的软体公司,就是资料库公司 Oracle。资料库是资工系必修学科,就连公务员考试也要考资料库,重要程度可见一斑。
Search Engine
搜寻引擎。从资料库当中寻找资料的工具,已经变成现代人不可或缺的工具。遇到不明白的事情,马上用手机上网搜寻一下资料。
我们往往希望找到最精准、最重要、最完善的资料。因此搜寻引擎的排名结果,变成大家最关注的事情。搜寻引擎制作者致力于提供好的排名,好的排名使得大家更容易汲取知识。然而排名有时候也是一种变相的资讯钳制。搜寻引擎公司可以藉由调整排名,控制你对世界的看法。
大家重视排名,进而发展出“ 搜寻引擎最佳化 ”的概念:如何调整自家网站的内容,以提高排名?提高排名有益于提高公司曝光度、增加生意。大公司甚至花钱请搜寻引擎公司帮忙提高排名。搜寻引擎公司为了在道德和利益之中取得平衡,转而提供了广告机制,在搜寻结果当中,把大公司的网站放在第一名的上面,皆大欢喜。
Network
Network
网路 。简单来说,就是多地之间的讯息传送机制。
网路分为硬体层面和软体层面。硬体层面属于电子电机电信通讯科系的专长,台湾业界的技术相当杰出,新知多半不在学界、而在业界。经典主题如下:
一、通讯媒介:电流(网路线、电话线)、电波(无线网路、RFID)、光波(光纤)。
二、电路设计:协定、封包、编码、串流、多工、分流。
三、网路佈署:卫星、基地台、AP、电缆。
软体层面属于资管资工科系的专长,已有 丰富的教材 ,但是只有观念、没有实务,大家都是自己乱搞。经典主题如下:
一、 网路管理 。细分为 网路环境 (IP、DNS、区域网路、设备维护)、 网路服务 (帐户权限、流量监控、资源整合)、 网路安全 (firewall/VPN/proxy)。顺带一提,台湾人把 网路管理 、 系统管理 通通当作同一件事情,叫做 资讯系统管理 。
二、 网路程式设计 。编写程式控制讯息传输,诸如 广播 、 路由 。已有 经典著作 、 中文翻译 、 程式范例 。知名函式库如 Asio 。知名应用如即时通讯软体、社群网站、影音网站、自动线上更新、即时转播、P2P 软体。
三、 网路攻防 。鑽研网路与作业系统的运作细节,是“资讯安全”领域之中的重要环节。台湾现况是 由台大交大台科大在学学生主导 ,而台湾业界的技术似乎还停留在十五年前的水平:网路封包分析、弱点扫描(从档案裡搜寻关键字)。
四、 网路理论 。研究网路结构的数学性质。例如 Link Analysis 。知名应用如 社交网路分析 、 学术搜寻 。
Distributed System
分散式系统。有了网路之后,资料不必齐聚一地,而是分散各处,再利用网路互通有无。
http://research.google.com/people/jeff/
分散式系统有一个极重要的特色是“分散式计算”:运用多台电脑,分工合作处理资料,又快又好。相关工具有 Apache Spark、Apache Flink,是当前的研究热点。
将来甚至可以实现:资料不必储存在自己的电脑,而是储存在别处的资料库。以后的电脑和手机,只要具备输入、输出、连线、充电的功能就足够了,至于储存、计算的功能通通交给大型伺服器丛集。藉由分散式系统迅速取得资料,藉由分散式计算迅速得到计算结果。
Operating System
Operating System
作业系统 。整合所有电脑功能,方便人类操控的系统。有名的作业系统如 Microsoft Windows、Mac OS、Linux、Android。使用作业系统,应该不必介绍,熟能生巧。开发作业系统,有如工程建设,细节繁複。
想要学习如何使用作业系统,Microsoft Windows 大家都是自己摸索、科普书籍、社会大学、电脑才艺班、 胖卡 ;Linux 可以参考 鸟哥的 Linux 私房菜 。
想要学习如何开发作业系统,把 Unix Programming、Linux Kernel 摸个精通就差不多了。儘管这是资工系必修课程,但是台湾学校清一色只教观念、不教实务,有教等于没教。所幸坊间已有大量书籍与课程,可以自学。
UVa 10435 10966 142 ICPC 4392 7588 UVa 1682
Embedded System
嵌入式系统 。把电脑安装在电子设备裡面之后,尝试用电脑控制设备。
台湾的电子产业不同凡响,产品行销全球(先进国家不想碰的吃力不讨好的高污染工作,台湾捡来做)。受到电子产业庇荫,嵌入式系统获得发展契机。有了嵌入式系统的学问,就能用电脑控制电子设备;接著配合演算法的学问,就能完成各式各样的神奇任务。
学习嵌入式系统,可从单板机、单片机(单晶片)(微控制器)、微处理器下手。 单板机 ,例如 Arduino 和 Raspberry Pi,坊间已有书籍和课程。 单片机 ,例如 MCS-51(8051)、PIC,是高职电子科的课程内容。 微处理器 ,例如 ARM 架构, 民间人士 比起学者还出名。
电子产业链
我也不明白。下面是草稿。也许可以参考 这个网站 。
硅/半导体 http://zhe09.pixnet.net/blog/post/51558978 IC (在上面画电路,这领域叫做 EDA,软体叫 CAD) http://www.yzuda.org/Useful_Links/recruit/2011/ http://icdc.ee.ccu.edu.tw/2015/index2.php?page=OldExams http://www.csie.ntu.edu.tw/~hungsh/CA/IC_design_industry.ppt SoC (很多不同功能 IC 设计在一起,制程一样) http://people.cs.nctu.edu.tw/~tfchen/TW-SoC.pdf SiP (很多不同功能 IC 拼在一起) http://technews.tw/2015/11/29/apple-sip/ PCB (很多上面的东西一起钉在这板子上) http://programmermagazine.github.io/y201410/htm/video1.html http://wwwsixman.blogspot.tw/2012/08/iicpcb.html http://www.researchmfg.com/2015/10/pcb-production-process/ CPU (微处理器,一种 IC) https://www.youtube.com/watch?v=qm67wbB5GmI https://www.youtube.com/watch?v=wOuYLq6vfLE ARM (微处理器规格书,32 位元 RISC 处理器市占 90%) http://www.esdesigner.com.tw/esd/article/arm-1.pdf ARM 处理器出货量,占有 95%的智慧型手机、90%的硬碟机、40%的数位电视和机上盒、15% 的微控制器、和 20%的移动电脑 树梅派用的还是很旧的 ARM 架构 嵌入式系统 http://www.barrgroup.com/Embedded-Systems/Books http://shop.oreilly.com/product/0636920017776.do ARM http://www.davespace.co.uk/arm/introduction-to-arm/books.html WinCE 和 Linux BSP (驱动程式) https://lwn.net/Kernel/LDD3/ http://elinux.org/a/a3/Elce2013-petazzoni-devicetree-for-dummies.pdf programmable SoC
1. MTK 设计晶片 (1) 以 verilog 语言,去设计电路图。 (2) 绕线。 2. MTK 用一堆晶片兜出 SoC,最后叫别人做。 (1) 台积电做出硅圆,然后把晶片重複地印在硅圆上。 (2) 测封厂把硅圆切成晶片,然后包装成晶片。 (3) 某个厂把晶片堆叠起来,弄成一个 SoC/SiP。 (4) PCB 厂把晶片/SoC 黏上去,弄成开发板, 并且设计 compiler 和 linker,让人家可以用 C 语言开发。 3. 该 SoC 甚至可以做成 ARM/x86 架构,符合计算机架构,并且在上面安装作业系统。 (Broadcom 生产的 http://www.farnell.com/datasheets/1521578.pdf) 3-1. 某公司去买开发板回来,上面附带 (1) 各脚位功能规格书,告诉你喂什麽讯号会得什麽结果。 (2) 组合语言/C 语言的组译器。 (a) 用 C 语言的 pointer 去得到脚位,用 assign operator 去喂讯号。 (b) 用组合语言的指令去执行一些比较厉害的功能。 (通常已有现成的 C 的范例程式码,包成 function,直接呼叫就行。) (c) 写好中断表,让硬体 reset 就执行自订程式。 (d) 组译之后烧在开发板上的 ROM 裡面,硬体插电后,电压正确就会执行程式。 (3) 偶尔要用示波器去量脚位,看看波形是否符合规格书。判断硬体是否为瑕疵品。 可以做出 (1) 简单的控制程式:例如 LED 灯亮起来。 (2) 甚至写成 RTOS 即时作业系统(考虑元件反应时间、中断)。 不过这跟个人电脑的“作业系统”完全没关係,只是名字很像而已。 3-2. 某公司去买比较厉害的开发板回来 (1) 可以装在计算机上(通常是 USB),并且提供 BSP,让 Linux 和 WinCE 可以写 driver。 (2) 写 driver,符合某种心照不宣的规格,让写应用程式/写函式库的人可以呼叫。 通常要自己控制记忆体、记录硬体资料等等。 3-3. 某公司去买超级厉害的开发板回来 (例如 Arduino) (1) 裡面有作业系统,并且提供 IDE,可以直接用电脑写程式。
User Interface
User Interface
使用者介面 。电脑与人类沟通的介面。发展历程是读卡机、 文字介面 、 图形介面 、 实体介面 。
台湾完全没有相关课程。即便是经典的文字介面、图形介面,台湾也没人谈论设计原理。光是使用别人已经设计好的、完善俱全的函式库,大多数人就已经油尽灯枯了。
Human-Computer Interaction
人机互动 。研究人与机器如何互动,然后设计机器、设计互动模式。稍微脱离了计算机科学的范畴。
台湾完全没有相关课程。虽然资工系有名称类似的实验室,事实上却把重心放在手机 APP、触控萤幕、电子书等等,你懂的。所幸台湾的电子界和设计界相当杰出,仍有人努力研究。
http://mmdays.com/2013/10/23/ http://code.arc.cmu.edu/ http://designhash.com/best-mobile-ui-design-patterns-sites/ http://www.designinterface.jp/en/projects/ ✔7 Things you didn't know existed
Software
Software
软体 。达成特定任务的程式。民间最近流行手机 APP,就是在手机上面执行的软体。“ 软体工程 ”旨在研究如何开发软体。
开发软体,需要学习程式设计,学习现成工具,学习经验观念。诸如软体开发框架 Struts/Spring/Hibernate,程式设计观念 coding convention/defensive programming/OOAD/refactoring,专案管理观念 UML/SVN/testing/code review/PMP 等等。族繁不及备载。
想要开发软体,一种方式是活用这些东西,另一种方式是开发这些东西。前者较容易,坊间书籍不可胜数,网路资源唾手可得,学习难度非常低。后者较困难,必须深入理解计算机科学。台湾的现实情况是:几乎所有软体工作都属于前者,门外汉稍作训练就赶鸭子上架,学徒都靠自己摸索,讲师通常也是学徒。台湾人把工具叫做技术,把使用工具的人通通叫做工程师,一群工程师常常相邀参加技术研讨大会互相取暖,最后依然培养不出专家。
这种情况就好比造车和改车。造车门槛高,门外汉碰不得;改车门槛低,一堆人爱玩。一群人改了车之后就相邀出来见面讨论技术,最后还是没有一个懂车的人。
软体工程,很少人以科学方式进行研究,多半是经验谈,是个嘴砲成分很高的领域。现时流行的事物,常常是媒体炒作出来的,而不是受到严谨考验后的适存者。反正出错了也不会死人、也不会被告,只要发布更新就好,导致大家随兴乱搞一通。
台湾的硬体业方兴未艾,台湾的软体业则是完全相反,烂泥扶不上牆。主要是因为软体业有一些特别的地方:
一、开发软体只仰赖人力(脑力),不仰赖其他资源。即便投入各种资源,诸如金钱、时间、设备、能源等等,仍旧无法控制生产成果。唯一成功的方法,就是广纳奇才。而台湾显然没有那麽多奇才。
二、複制软体不需要成本,发行软体不需要太多成本。即便掌握各种资源,仍旧无法控制市场走向。软体品质决定一切。
三、开发软体只仰赖人力(脑力),更精确来说是数学──毕竟计算机是计算数学的机器。想要掌控软体研发进度,源自自身对于数学的敏感程度。而台湾显然没有那麽多数学又棒、胆识又大、喜欢做软体的人。
大家退而求其次,抱朴守拙,鑽研有规格书的、可以按表操课的东西,如程式语言、作业系统、函式库。于是台湾软体业就变成现在这样,ERP、资讯服务 APP,剩下的惦惦吃三碗公,没了。
最后大家只好开始提倡开源软体。
Game
游戏 。经典主题诸如 游戏控制器 、 游戏物理 、 游戏人工智慧 、 游戏引擎 。知名函式库如 DirectX、SFML、SDL。知名游戏引擎如 Unity 、 Unreal 。知名商业平台如 Steam。
http://bbs.gamer.com.tw/#MITpcgame:a:6293 http://home.gamer.com.tw/creationDetail.php?sn=2249441 http://chenglap-blog.logdown.com/posts/161716 http://blog.monkeypotion.net/gamedev/career/why-you-shall-not-enter-game-industry-2011 http://www.u-acg.com/archives/3922 http://simonsays-tw.com/web/lodeRunner/lodeRunner.html http://phoenotopia.com/
大师谈 Java 游戏设计 大师谈游戏设计: 核心技术与演算法
Automation
Automation
自动化技术 。跨领域学科,结合了电机、资工。让机械设备自强不息的学问。维持人类日常生活运作的重要学问。
Robotics
机器人学 。跨领域学科,结合了许多领域,例如电机、资工、材料、生物等等。困难到了极点、进展十分缓慢的一门学问。
跟计算机科学有关的主题,例如 SLAM 、 Inverse Kinematics 、 Motion Planning 。
台湾的现况是,就连前面章节所列的主题都搞不定了。大家不如直接看钢弹动画、玩洛克人过过乾瘾吧。
http://www.vccoo.com/a/9prkz http://cirs.udg.edu/ http://robotik.dfki-bremen.de/en/media/video-archive/
Arm
Wheel
Drone
Modular Robotics
http://biorob.epfl.ch/roombots
Biorobotics
Humanoid Robotics
Extroskeleton
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论