走上It之路
- 1. ⾛走向IT之路
谢凌(David Xie)
david.scriptfan@gmail.com
Saturday, 27 October, 12
- 2. 何为IT之路?
• 无休止的编程?
• 开发人员都是屌丝?
• 永远没有出路?
Saturday, 27 October, 12
- 3. 如何学习编程?
• 英语. 第一步永远是英语
• 基础. 计算机组成原理, 编译原理
• 工具. 语言, 数据库, 服务器
• 协议. 食物链的顶层
Saturday, 27 October, 12
- 5. • 会写代码就可以了吗?
• 能写出工作的代码就可以了吗?
• 能完成任务就可以了吗?
Saturday, 27 October, 12
- 8. 操作系统
• Windows
• Linux
• Mac OS X
Saturday, 27 October, 12
- 10. 有很多选择
• Ubuntu/Debian
• Fedora/CentOS
• OpenSUSE
• ArchLinux
• Gentoo
• FreeBSD
Saturday, 27 October, 12
- 11. kernel
• 什么是kernel
• kernel能干什么
• 如何编译kernel
Saturday, 27 October, 12
- 13. • 内存管理
• 进程管理
• I/O管理
• 设备管理
• 文件系统管理
Saturday, 27 October, 12
- 14. 最好的选择 FreeBSD
• 学院派
• 质量高
• 代码严谨
• 性能好
Saturday, 27 October, 12
- 17. 写在选择之前
• 不要参与语言之争
• 了解语言的特性
• 了解语言的应用场景
• 不是有了锤子后, 眼里都是钉子
Saturday, 27 October, 12
- 18. 语⾔言
• C
• C++
• Java
• Python
• Ruby
• PHP
• ......
Saturday, 27 October, 12
- 19. 数据结构
• 数组
• 队列
• 树
• 链表
• 图
Saturday, 27 October, 12
- 20. 算法
• 排序
• 寻址
• 最优解
• ...
Saturday, 27 October, 12
- 21. ⾯面向对象
• 封装
• 继承
• 复用
Saturday, 27 October, 12
- 22. 设计模式
• KISS (Keep It Simple, Stupid)
• DRY (Don’t Repeat Yourself)
• 23个设计模式
• 工厂, 单例, 适配器, 观察者....
Saturday, 27 October, 12
- 25. 有哪些数据库
• Oracle
• MS SQL Server
• MySQL
• PostgreSQL
• SQLite
• Redis
• MongoDB
Saturday, 27 October, 12
- 26. 数据库设计
• 1NF
• 2NF
• 3NF
• BCNF
Saturday, 27 October, 12
- 27. 数据库事务
• 什么是数据库事务
• 数据库事务的准则
• ACID
• 原子性, 一致性, 独立性, 持久性
Saturday, 27 October, 12
- 28. SQL
• 标准化查询语言
• select, insert, delete, update...
• left join, right join, inner join, union...
Saturday, 27 October, 12
- 30. ORM
• 对象关系映射
• 用对象来操作表
• 表与表之间的关联
• 更直观
• 屏蔽数据库间的差异
Saturday, 27 October, 12
- 31. DAO
• Data Access Objects
• 继续封装数据操作
• 一个DAO的方法涵盖一系列的数据操作
Saturday, 27 October, 12
- 33. 编辑器
• Vim
• Emacs
• Notepad++
• EditPlus
Saturday, 27 October, 12
- 34. IDE
• Eclipse
• NetBeans
• Intellij IDEA
Saturday, 27 October, 12
- 35. 如何选择?
• 初学以编辑器为主, 加强自己的coding能
力
• 以用着顺手为前提, 工具只是为了提高生
产力
• 写Java这样的语言, 建议用IDE
Saturday, 27 October, 12
- 36. 不要做
• 参与编辑器/IDE之争
• 不停的更换编辑器/IDE
• 做编辑器/IDE的奴隶, 离开了不会写程
序
Saturday, 27 October, 12
- 38. 关于版本控制软件
• 什么是版本控制软件
• 为什么要使用版本控制软件
Saturday, 27 October, 12
- 39. 有哪些版本控制软件
• ClearCase
• CVS
• SVN
• GIT
• Mercurial(HG)
Saturday, 27 October, 12
- 42. 为什么流⾏行?
• 分布式版本控制
• 速度快
• 功能强大
Saturday, 27 October, 12
- 46. 前/后 端的区别
• 何为前端?
• 何为后端?
Saturday, 27 October, 12
- 48. 前端需要掌握哪些技能?
• HTML
• CSS
• JavaScript
• HTML5/CSS3
Saturday, 27 October, 12
- 49. 后端需要掌握那些技能?
• 后端语言(Java, PHP, Python, Ruby)
• 数据库
• 服务器优化(Apache, Nginx)
Saturday, 27 October, 12
- 51. MVC模型
• Model 模型
• View 模型
• Controller 控制器
Saturday, 27 October, 12
- 53. 开发过程
• 文档先行
• 架构在后
• 测试优先
• 编码保证
Saturday, 27 October, 12
- 54. 优秀的⽂文档
• 格式化语言
• wiki语法
• 可以导成HTML格式
• 清晰的说明程序的作用和想法
Saturday, 27 October, 12
- 55. 优秀的架构
• 优秀的数据结构是程序优良与否的关键
• 优秀的架构是程序优良的保证
Saturday, 27 October, 12
- 57. “git的设计其实非常的简单, 它的数据结构很
稳定, 并且有丰富的文档描述. 事实上, 我非常
的赞同应该围绕我们的数据结构来设计代码,
而不是依据其它的, 我认为这也是git之所以成
功的原因之一[...]依我的观点, 好程序员和烂程
序员之间的差别就在于他们认为是代码更重要
还是数据结构更重要.”- Linus
Saturday, 27 October, 12
- 58. 测试的重要性
• 代码质量的关口
• 功能的保证
• 最不能小视, 缺最容易被小视
• 单元测试/TDD
Saturday, 27 October, 12
- 59. 编码实现
• 代码风格
• 函数/变量命名
• 注释
• 代码是写给人看的, 机器码才是给机器读
的
Saturday, 27 October, 12
- 61. 解决问题的⽅方法
• Google/Baidu
• 问答网站(StackOverflow)
• 论坛
• wiki
• mail list
• irc
Saturday, 27 October, 12
- 62. 提问的艺术
• 查询有没有相同的问题
• 在问题中把问题描述清楚
• 举例
Saturday, 27 October, 12
- 64. 提⾼高的⽅方法
• 阅读
• 实践
• 和有经验的人交流
• 阅读别人的代码
• 参与开源
Saturday, 27 October, 12
- 65. 阅读
• 计算机书籍(语言类, 协议类, 基础类)
• 编程技巧文章
• 他人经验的总结
Saturday, 27 October, 12
- 66. 推荐⼏几个开源⺴⽹网站
• http://sourceforget.net/
• http://code.google.com/
• http://github.com/
• http://bitbucket.org/
Saturday, 27 October, 12
- 67. 如何参与开源
• 写文档
• 测试
• 提交功能申请
• 修改bug
• 参与开发
Saturday, 27 October, 12
- 71. github能干什么?
• 托管开源代码
• 团队协作
• 管理项目
• 文档管理
• bug追踪
Saturday, 27 October, 12
- 73. • 善于阅读
• 善于总结
• 善于提问
• 善于抽象
• 善于动手
Saturday, 27 October, 12