从编程小白到自由职业者,如何在一个月之内做到?

首先,你得知道神州邦邦这家公司,这家公司在国内有大量的自由职业者有兴趣的工作,主要是针对技术自由职业者,IT 工程师需求较多,值得大家一试。也有邦学院给大家学习支持。先打这个广告。

2011 年的时候,我本科刚刚毕业,对未来充满迷茫。现在看来,我 18 岁所选择的专业似乎并非明智之选。在我们这里,即便拿到的是工学学位,或许还是要在为数不多的几家电子通信公司中选择一家做办公室工作。这与我高中毕业时所憧憬的未来大相径庭。

不过,现在我很幸运,接触了编程这项工作,我决定利用突然拥有的大把闲余时间来创建网站。从建网站到找到我自由职业道路上的第一个客户历时一个月,对很多人来说,这个速度似乎快到不可思议。在本文中,我将讲述我的故事。

学习内容

这是一个在知名科技公司中饱受争议的问题,有的公司重视特定框架模式的学习,有的则注重专业书籍的阅读,大多数公司会要求你购买他们的产品,包括无论是网课、在线辅导还是电子书,并且给出的建议种类多到离谱。

简单来说,要把自己看作一名新手全栈工程师,你需要掌握的基础如下:

  • HTML
  • CSS
  • Javascript
  • 后端语言
  • 数据库

就是这样,按照这个顺序。每个领域都可以学习很多年,却依然难以达到真正精通的水平。那么到底如何能够通过一个月的初步学习找到工作呢? 答案便是,你需要恰到好处地学习每一种技能。

学到什么程度?

接下来我要讲讲,在找到工作之前,每个技能具体需要花多长时间,以及每个领域需要侧重的内容有哪些。请牢记两件事:

  • 当时我没有工作,每天至少可以拿出 5 到 6 个小时学习。
  • 找到工作后不但依然要坚持学习,还要加大学习强度。

HTML

研究 HTML,我只花了一整天,原因有两点:

  • HTML 简单易学。
  • 我发现在后期的学习中无论如何都会用到 HTML。

CSS

我花了 3 天时间试用了 CSS,体会其如何应用于不同的 HTML 元素。其中关键环节是理解不同的定位和对齐方式。像色彩和字体等纯审美问题很好理解,如果需要,还可以学习更复杂的内容。

Javascript

我花了差不多一周时间学习和练习 Javascript 的基础知识,关键在于理解其循环、条件、功能、基本语法、浏览器控制台使用方法、客户机和服务器的分工,以及把请求发至服务器 (AJAX) 的方法等。

后端语言

我学的第一门后端语言是 PHP,后端语言的选择因人而异,但我的建议是从一门主流语言入手,因为很多工作都可以用到,网上资料也有很多。PHP、Python 和 Ruby 都是比较热门的选择,Node.js 后来也有很多用户,但是我不建议用作后端语言的入门之选,原因有两点:

  • Node.js 使用 Javascript 语法,所以无法体会到学习第二门语言的好处。
  • Node.js 使用异步比较多,对于初学者来说非常不友好。

在学习新语言的时候,又要从基础的语法、循环、最佳实践开始。现在,你可以花几天的时间读一读通用软件开发最佳实践和面向对象的程序设计,然后尝试用你选择的后端语言实践你所学到的概念。

之后,通过开发应用来建立前端与后端的联系,在该应用中,由 Javascript 把要求发给后端,后端给予回应后,Javascript 通过操作网页和展示发回的数据等处理回应。

我大概用了两周的时间学习这部分内容。

数据库

数据储存和数据恢复都需要数据库,我选择的是现在最常用的数据库 MySQL,数据库的选择也因人而异,但我建议选择关系型数据库。

你需要了解一些基础知识:可以存在数据库里的数据类型有哪些,如何进行数据读写、更新和删除等。接下来,需要了解如何使用数据表索引以及数据表之间的关系,一定要理解联合查询的概念,但目前还不需要过分纠结。这些基础知识在任何新手教程中都可以找到。

理解了数据库基础知识之后,要将其融会贯通:用数据库建立一个小网站,用户可以注册,与服务器沟通,把数据存在数据库里,之后将其恢复。这个软件功能是什么不重要,重要的是把目前积累的所有知识点都应用起来。

最后这个阶段我花了大约一周时间。

前车之鉴,后车之师

在开始讲我是如何找到工作之前,我想要花点时间告诉大家,如果重新来过,我会做出哪些改变。对初学者而言,抓住重点并非易事,下面就列举一些当时我误认为没有那么重要的事情。

好用的代码编辑器乃得力助手

我第一次写代码用的是 Notepad,当时我觉得,使用一个看起来高大上的编辑器除了美观以外并没有太大用处,这个想法大错特错。

好用的编辑器可以实现适当的自动缩进格式,在学习循环、条件和语法时很有帮助。此外,还可以给不同语言下的代码设置不同颜色,并发出语法错误的警告。对于难免会犯一些简单错误的初学者来说,这两个特点非常关键。这会帮助你找到错误,了解不同的数据类型和变量范围等。

一个好用的编辑器还有许多其他优点,但是上述优点足够让初学者动心了。目前有很多免费编辑器,Sublime 就是不错之选。

设置一个域名

在大多数机器上建立基础的开发环境并非难事,但是,你也应该立即建立可以上传个人作品的公共域名。其重要性不容忽视,原因有三点:

  • 可以学到关于托管公司和域名注册工作的基本知识。
  • 可以学到如何使用 FTP 和 SSH 与远程服务器通信。
  • 有了客户之后,你需要以某种方式向他们展示作品,如果你有公共域名,就可以给项目创建一个测试环境,并将其连接到客户。

理解 git 系统

在初学阶段,我完全跳过了对于 git 的学习。在之后的一个项目中,git 的出现让我猝不及防,我不得不花上几个晚上弄懂它。

这里有些基本步骤避免大家重蹈覆辙:给测试项目创建一个 git repo,学习各个分支的工作原理,了解拉取请求、合并和获取的相关知识。一开始,弄清楚这些应该就足够了。

不要忽视移动性能

在我还是计算机小白的时候,移动浏览器虽然还不像现在一样普及,但是其发展已成定势,如果当时更重视 CSS 响应式,将会是明智的选择。在今天看来,移动性能无疑至关重要。现在,大部分网站流量都是移动流量,无论创建什么都需考虑到屏幕大小。

找到工作

开始找工作时,我在一些自由职业平台上注册了账户,在这个阶段我尝试了不同的方法。过了大概一年,我发现了 Upwork 网站,很长一段时间都在使用这个网站。

我申请了一些只需要工作几个小时的零工,主要负责在现有网站上做一些小改动以及解决一些小问题。我完全理解有些知识需要深入学习,同时也让客户对这一点充分知情——在申请每一份工作的时候,我都会写我会需要几天来熟悉功课。

几天过去,在给客户发了十多条信息之后,我终于接到了第一个有酬项目。我花了三天时间完成这一项目,其间也收获良多。

不过,我最大的教训是在项目结束之后:一切运行良好,然而客户放弃了该项目,随后在我的主页上标注了项目未完成。为什么会这样? 因为我当时没有办法展示我的作品。所以,我必须重申这一点:提前创建公共域名。

往前看

首次失败并没有让我丧失信心,我继续前进,很快就又找到了几个小项目。在工作约 20 天后,我找到了第一个大一些的项目:如果没记错的话,当时我要利用每个区域的房地产中介可搜索到的数据库建一个网站。

在接下来的九年里,我创建了很多东西,在每次更新中不断优化。我构建了自己编程语言的知识体系,开始将其中框架和库运用到我的工作中。我没有一次后悔我最初的选择——学习全栈开发的各个领域的基础知识。

有太多网站开发员还没学会站稳就想跑,不要学他们,鼓起勇气,勇往直前吧。你可以惊艳众生,包括你自己。