SlideShare a Scribd company logo
1 of 76
Download to read offline
⾛走向IT之路
                                 谢凌(David Xie)
                            david.scriptfan@gmail.com




Saturday, 27 October, 12
何为IT之路?


                     • 无休止的编程?
                     • 开发人员都是屌丝?
                     • 永远没有出路?




Saturday, 27 October, 12
如何学习编程?

                     • 英语. 第一步永远是英语
                     • 基础. 计算机组成原理, 编译原理
                     • 工具. 语言, 数据库, 服务器
                     • 协议. 食物链的顶层



Saturday, 27 October, 12
如何编程?



Saturday, 27 October, 12
• 会写代码就可以了吗?

                     • 能写出工作的代码就可以了吗?

                     • 能完成任务就可以了吗?




Saturday, 27 October, 12
远远不够!



Saturday, 27 October, 12
1. 选择⼀一个操作系统



Saturday, 27 October, 12
操作系统


                     • Windows
                     • Linux
                     • Mac OS X




Saturday, 27 October, 12
选个⼀一个Linux/Unix吧!



Saturday, 27 October, 12
有很多选择
                     • Ubuntu/Debian
                     • Fedora/CentOS
                     • OpenSUSE
                     • ArchLinux
                     • Gentoo
                     • FreeBSD

Saturday, 27 October, 12
kernel


                     • 什么是kernel
                     • kernel能干什么
                     • 如何编译kernel




Saturday, 27 October, 12
操作系统原理



Saturday, 27 October, 12
• 内存管理

                     • 进程管理

                     • I/O管理

                     • 设备管理

                     • 文件系统管理



Saturday, 27 October, 12
最好的选择 FreeBSD

                     • 学院派
                     • 质量高
                     • 代码严谨
                     • 性能好



Saturday, 27 October, 12
2. 选择⼯工具



Saturday, 27 October, 12
编程语⾔言



Saturday, 27 October, 12
写在选择之前

                     • 不要参与语言之争
                     • 了解语言的特性
                     • 了解语言的应用场景
                     • 不是有了锤子后, 眼里都是钉子



Saturday, 27 October, 12
语⾔言
                     • C
                     • C++
                     • Java
                     • Python
                     • Ruby
                     • PHP
                     • ......

Saturday, 27 October, 12
数据结构

                     • 数组
                     • 队列
                     • 树
                     • 链表
                     • 图


Saturday, 27 October, 12
算法

                     • 排序
                     • 寻址
                     • 最优解
                     • ...



Saturday, 27 October, 12
⾯面向对象


                     • 封装
                     • 继承
                     • 复用




Saturday, 27 October, 12
设计模式

                     • KISS (Keep It Simple, Stupid)
                     • DRY (Don’t Repeat Yourself)
                     • 23个设计模式
                     • 工厂, 单例, 适配器, 观察者....



Saturday, 27 October, 12
推荐⼀一本书




Saturday, 27 October, 12
数据库



Saturday, 27 October, 12
有哪些数据库
                     • Oracle
                     • MS SQL Server
                     • MySQL
                     • PostgreSQL
                     • SQLite
                     • Redis
                     • MongoDB

Saturday, 27 October, 12
数据库设计

                     • 1NF
                     • 2NF
                     • 3NF
                     • BCNF



Saturday, 27 October, 12
数据库事务

                     • 什么是数据库事务
                     • 数据库事务的准则
                     • ACID
                     • 原子性, 一致性, 独立性, 持久性



Saturday, 27 October, 12
SQL


                     • 标准化查询语言
                     • select, insert, delete, update...
                     • left join, right join, inner join, union...




Saturday, 27 October, 12
SQL Injection


                     • SQL注入
                     • 原因?
                     • 如何解决?




Saturday, 27 October, 12
ORM

                     • 对象关系映射
                     • 用对象来操作表
                     • 表与表之间的关联
                     • 更直观
                     • 屏蔽数据库间的差异


Saturday, 27 October, 12
DAO


                     • Data Access Objects
                     • 继续封装数据操作
                     • 一个DAO的方法涵盖一系列的数据操作




Saturday, 27 October, 12
编辑器/IDE



Saturday, 27 October, 12
编辑器

                     • Vim
                     • Emacs
                     • Notepad++
                     • EditPlus



Saturday, 27 October, 12
IDE


                     • Eclipse
                     • NetBeans
                     • Intellij IDEA




Saturday, 27 October, 12
如何选择?

                     • 初学以编辑器为主, 加强自己的coding能
                       力
                     • 以用着顺手为前提, 工具只是为了提高生
                       产力
                     • 写Java这样的语言, 建议用IDE



Saturday, 27 October, 12
不要做

                     • 参与编辑器/IDE之争
                     • 不停的更换编辑器/IDE
                     • 做编辑器/IDE的奴隶, 离开了不会写程
                       序




Saturday, 27 October, 12
版本控制软件



Saturday, 27 October, 12
关于版本控制软件


                     • 什么是版本控制软件
                     • 为什么要使用版本控制软件




Saturday, 27 October, 12
有哪些版本控制软件

                     • ClearCase
                     • CVS
                     • SVN
                     • GIT
                     • Mercurial(HG)


Saturday, 27 October, 12
现在最流⾏行的是什么呢?



Saturday, 27 October, 12
GIT!!!



Saturday, 27 October, 12
为什么流⾏行?


                     • 分布式版本控制
                     • 速度快
                     • 功能强大




Saturday, 27 October, 12
3. 选择⽅方向



Saturday, 27 October, 12
web开发



Saturday, 27 October, 12
前端/后端



Saturday, 27 October, 12
前/后 端的区别


                     • 何为前端?
                     • 何为后端?




Saturday, 27 October, 12
WEB开发中, Java算哪端?



Saturday, 27 October, 12
前端需要掌握哪些技能?

                     • HTML
                     • CSS
                     • JavaScript
                     • HTML5/CSS3



Saturday, 27 October, 12
后端需要掌握那些技能?


                     • 后端语言(Java, PHP, Python, Ruby)
                     • 数据库
                     • 服务器优化(Apache, Nginx)




Saturday, 27 October, 12
WEB开发中最推崇的MVC



Saturday, 27 October, 12
MVC模型


                     • Model 模型
                     • View 模型
                     • Controller 控制器




Saturday, 27 October, 12
4. 开始开发



Saturday, 27 October, 12
开发过程

                     • 文档先行
                     • 架构在后
                     • 测试优先
                     • 编码保证



Saturday, 27 October, 12
优秀的⽂文档

                     • 格式化语言
                     • wiki语法
                     • 可以导成HTML格式
                     • 清晰的说明程序的作用和想法



Saturday, 27 October, 12
优秀的架构


                     • 优秀的数据结构是程序优良与否的关键
                     • 优秀的架构是程序优良的保证




Saturday, 27 October, 12
“烂程序员关心的是代码. 好程序员关心的
                    是数据结构和它们之间的关系.” - Linus




Saturday, 27 October, 12
“git的设计其实非常的简单, 它的数据结构很
              稳定, 并且有丰富的文档描述. 事实上, 我非常
              的赞同应该围绕我们的数据结构来设计代码,
              而不是依据其它的, 我认为这也是git之所以成
              功的原因之一[...]依我的观点, 好程序员和烂程
              序员之间的差别就在于他们认为是代码更重要
              还是数据结构更重要.”- Linus




Saturday, 27 October, 12
测试的重要性

                     • 代码质量的关口
                     • 功能的保证
                     • 最不能小视, 缺最容易被小视
                     • 单元测试/TDD



Saturday, 27 October, 12
编码实现

                     • 代码风格
                     • 函数/变量命名
                     • 注释
                     • 代码是写给人看的, 机器码才是给机器读
                       的



Saturday, 27 October, 12
5. 解决问题



Saturday, 27 October, 12
解决问题的⽅方法
                     • Google/Baidu
                     • 问答网站(StackOverflow)
                     • 论坛
                     • wiki
                     • mail list
                     • irc

Saturday, 27 October, 12
提问的艺术


                     • 查询有没有相同的问题
                     • 在问题中把问题描述清楚
                     • 举例




Saturday, 27 October, 12
6. 如何提⾼高



Saturday, 27 October, 12
提⾼高的⽅方法

                     • 阅读
                     • 实践
                     • 和有经验的人交流
                     • 阅读别人的代码
                     • 参与开源


Saturday, 27 October, 12
阅读


                     • 计算机书籍(语言类, 协议类, 基础类)
                     • 编程技巧文章
                     • 他人经验的总结




Saturday, 27 October, 12
推荐⼏几个开源⺴⽹网站

                     • http://sourceforget.net/
                     • http://code.google.com/
                     • http://github.com/
                     • http://bitbucket.org/



Saturday, 27 October, 12
如何参与开源

                     • 写文档
                     • 测试
                     • 提交功能申请
                     • 修改bug
                     • 参与开发


Saturday, 27 October, 12
以github为例



Saturday, 27 October, 12
http://github.com/



Saturday, 27 October, 12
Saturday, 27 October, 12
github能干什么?

                     • 托管开源代码
                     • 团队协作
                     • 管理项目
                     • 文档管理
                     • bug追踪


Saturday, 27 October, 12
总结



Saturday, 27 October, 12
• 善于阅读

                     • 善于总结

                     • 善于提问

                     • 善于抽象

                     • 善于动手



Saturday, 27 October, 12
优秀的程序员都是懒惰的程序员, 因为
                           只有他们才会开发出更多让⼈人可以更懒
                           惰的程序




Saturday, 27 October, 12
愿⼤大家都能成为那个懒惰的程序员!




Saturday, 27 October, 12
Thanks!



Saturday, 27 October, 12

More Related Content

Similar to 走上It之路

垂直互联网站点的技术改造
垂直互联网站点的技术改造垂直互联网站点的技术改造
垂直互联网站点的技术改造Dahui Feng
 
Rails hello
Rails helloRails hello
Rails helloGump Law
 
Redis大数据之路 dtcc-唐福林
Redis大数据之路 dtcc-唐福林Redis大数据之路 dtcc-唐福林
Redis大数据之路 dtcc-唐福林fulin tang
 
Node.js Quick Tour
Node.js Quick TourNode.js Quick Tour
Node.js Quick Tourmyzykj
 
何时浮云散尽(在北邮北邮纪阳老师移动互联网课程上的讲义)
何时浮云散尽(在北邮北邮纪阳老师移动互联网课程上的讲义)何时浮云散尽(在北邮北邮纪阳老师移动互联网课程上的讲义)
何时浮云散尽(在北邮北邮纪阳老师移动互联网课程上的讲义)Xu Wang
 
KISSY 1.3-released
KISSY 1.3-releasedKISSY 1.3-released
KISSY 1.3-releasedyiming he
 
Introduction to big data
Introduction to big dataIntroduction to big data
Introduction to big data邦宇 叶
 
Android vs e pub
Android vs e pubAndroid vs e pub
Android vs e pub永昇 陳
 
敏捷模式下的百度研发基础环境建设 1
敏捷模式下的百度研发基础环境建设 1敏捷模式下的百度研发基础环境建设 1
敏捷模式下的百度研发基础环境建设 1drewz lin
 
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践imShining @DevCamp
 

Similar to 走上It之路 (15)

分布式开发
分布式开发分布式开发
分布式开发
 
垂直互联网站点的技术改造
垂直互联网站点的技术改造垂直互联网站点的技术改造
垂直互联网站点的技术改造
 
Rails hello
Rails helloRails hello
Rails hello
 
Redis大数据之路 dtcc-唐福林
Redis大数据之路 dtcc-唐福林Redis大数据之路 dtcc-唐福林
Redis大数据之路 dtcc-唐福林
 
WSN Project
WSN ProjectWSN Project
WSN Project
 
現代資料庫
現代資料庫現代資料庫
現代資料庫
 
Node.js Quick Tour
Node.js Quick TourNode.js Quick Tour
Node.js Quick Tour
 
何时浮云散尽(在北邮北邮纪阳老师移动互联网课程上的讲义)
何时浮云散尽(在北邮北邮纪阳老师移动互联网课程上的讲义)何时浮云散尽(在北邮北邮纪阳老师移动互联网课程上的讲义)
何时浮云散尽(在北邮北邮纪阳老师移动互联网课程上的讲义)
 
KISSY 1.3-released
KISSY 1.3-releasedKISSY 1.3-released
KISSY 1.3-released
 
Introduction to big data
Introduction to big dataIntroduction to big data
Introduction to big data
 
Operational Excellence
Operational ExcellenceOperational Excellence
Operational Excellence
 
Android vs e pub
Android vs e pubAndroid vs e pub
Android vs e pub
 
Web Engineering
Web EngineeringWeb Engineering
Web Engineering
 
敏捷模式下的百度研发基础环境建设 1
敏捷模式下的百度研发基础环境建设 1敏捷模式下的百度研发基础环境建设 1
敏捷模式下的百度研发基础环境建设 1
 
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
 

More from David Xie

More from David Xie (6)

Git version control
Git version controlGit version control
Git version control
 
云计算
云计算云计算
云计算
 
Hadoop
HadoopHadoop
Hadoop
 
沙龙升级
沙龙升级沙龙升级
沙龙升级
 
Git使用
Git使用Git使用
Git使用
 
Python Unit Test
Python Unit TestPython Unit Test
Python Unit Test
 

走上It之路