为何有这篇文字
- 从毕业到现在已6年有余,从事软件相关行业也差不多这个数了,算是个入了门的程序员
- 最近,做电源开发的大学室友找我要学软件开发
- 他有很强的专业水准,但软件方面只接触过一些基础的C,对操作系统、数据库、软件工程的概念几乎为零
- 我和他进行了一周的面对面的沟通,但因为没有系统性的准备,只是零散的堆些概念,因此并未达到我的预期
- 所以想写一篇Guide给像他一样想做一名业余程序员的同学
事先准备
天时
- 挤出连续的整块时间进行系统性学习和开发,如晚上8点-12点
- 碎片时间进行知识点回顾或做计划,如等电梯、排队时
地利
- 找一个清静的场地,如书房或阳台,并告诉你的家人或朋友尽可能少的打扰你
- 手机静音并远离10米以上,或干脆关机
人和
- 如果有一个可以带你入门的朋友最好,可以少走很多弯路
- 遇到问题时,应首选Google或百度,解决不了的时候才选择论坛或邮件
- 如果你选择了一个犄角旮旯的方向,光顾论坛或订阅邮件列表是优选
工欲善其事,必先利其器
- 思维图,帮助整理思路。
- 编辑器,文本是王道。EditPlus,UltraEdit(可编辑查看二进制),顺路学习下markdown语法,然后尝试下,(摒弃又大又慢的Word吧,这篇文字就是Markdown语法写的)
- 浏览器,上网必备。Chrome,Firefox,等等
- 云笔记,可以在各个设备上编辑查看你的笔记。为知笔记,有道云笔记等,放弃国外的吧,眼红可以,但同步实在太慢了
- 项目/个人管理,推荐和,两者的数据库是相通的,这点很赞
理清概念
- 编程语言
- 程序都是用编程语言编写的,如同书是由文字书写一样
- 同一个程序可能由不同语言编写,如同一本书里可能包含了中文和英文
- 常见的语言:C、Java、Objective-C、C++、C#、PHP等
- 操作系统
- 大的,有微软的windows、苹果的iOS、Linux、Android等
- 小的,有μC/OS-II等
- 看看也许能让你心潮澎湃
- 网站
- 一个网站是需要服务器的
- 你访问的某个网址,可以__近似__的认为标识了某地某个机房内的一台服务器的名称
- 你现在所看的网页是由部署在服务器上的程序‘生产’出来,并通过网线‘传输’到你的浏览器上的
- 传输的内容是一大堆有格式的字符,需要你的浏览器进行‘解释’,于是你可以看到文字、图片、视频
- app
- Application的缩写,是指智能手机或平板上运行的应用程序
- 这些应用运行在操作系统上(多数是Android和iOS),类似windows电脑上的浏览器和视频播放器
- 数据库
- 可视为电子化的文件柜
- 常见的数据库:MySQL、Oracle、SQLite、Microsoft SQL Server等
- 数据库里存放的都是数据(废话),对数据的操作主要有增删查改
- 对数据库操作同样使用语言,常用的数据库语言为SQL,增删查改操作对应着insert、delete、select、update
- 数据库并不可怕,可怕的是里面的数据
- IP | 域名 | 网址
- IP是一台计算机在网络上的身份证号,域名是为了方便人们称呼这台计算机而给它起的名字,一个域名可能对应多个网址
- 220.181.111.86是百度的IP,baidu.com是域名,mp3.baidu.com和www.baidu.com都是百度的网址
- DNS服务器可以将网址翻译成IP地址
- 直观的,windows下打开命令提示行,输入 ping baidu.com即可
- 嵌入式
- 包含硬件和软件两部分,两者兼并无较明确的界线
- 从硬到软涉及到的知识部分依次为 硬件(各类设备/总线)→ 驱动 → 操作系统 → 文件系统 → 应用程序
- 涉及到的语言,除应用程序外其他基本为C和汇编,应用程序则五花八门
选中方向
- 这点很重要
- 0和1的世界太大了,四处放炮是不行滴
- 列几个方向
- 只是好奇。你可以离开了,平时多关注下业界新闻和博客过过瘾就好,比如,,,,等
- 做一个可以放在手机或pad上运行的app
- 做一个网站
- 做一个有硬件载体的嵌入式设备,比如智能电子秤、防丢器等
- 做一个电脑上运行的程序,比如windows版的QQ
- 其他
开始一个项目
- 实践是学习的最佳途径
- 找一个感兴趣的点子,用思维图把它构想出来
- 找个行内的人帮你看下,列一下需要哪些知识点
- 最好可以和行内的人一起合作
- 如果自己单干,推荐一种方式:网上找一篇类似《从零开始做xxxx》的文章,当然,xxx和你要做的项目差不多,跟着做
- 开始前先阅读相应的知识点,简单的看,看两天,了解大概其即可,在项目中不懂了再回去翻
做笔记——积累你的素材
- 在云笔记上建几个文件夹,将你需要学习的内容分门别类
- 记录你的灵感、思路、感想、经验
- 记录你遇到的好文章和好项目,记住一定要看,没有看过的东西最终都将与你无关
写博客——积累你的经验
- 坚持
模块化——积累你的代码
- 将代码尽可能的模块化,在做多个项目的时候可以很方便的拿来用,避免重复造轮子
- 别人的代码能用的就拿过来,经历一遍别人经历过的痛苦是没必要的,当然注意保留别人的名字,攒人品也是很重要的
- 用版本控制工具管理你的代码,并上传到云端,和都是不错的选择,国内的也有类似的
分享
- 你的博客你的程序你的产品都可以分享给他人
- 当别人通过你的分享而解决了问题
- 当别人给你的分享带来反馈
- 当别人分享你的分享
- 分享的快乐和成就感是杠杠杠杠的