作为一个刚毕业的计算机科学学生,在课堂上学到的东西和你在真实世界看到的东西会存在断层。各种循环操作:for, while, do while
不在话下。你可以不费吹灰之力写一个基于命令行的井字棋(Tic-Tac-Toe)游戏. 你还可以在 X86 上直接写汇编代码!
但是, 你对于 Facebook, YouTube 或者 Reddit(美国最知名的论坛) 是怎么工作的完全没有头绪. 你甚至连怎么开始都不知道. 因为你只知道一门 Python 语言, 当你 Google 哪些公司用 Python 的时候, 你发现一些人说的: “Reddit…use python for their backend.” Backend(后端)? 这他妈是什么?
这就是在用命令行写井字棋游戏和构建一个真实的应用程序中, 存在的巨大的空缺, 而且没人会告诉你该怎么填补这个空缺. 即使你已经学会了如何像计算机一样思考, 你还是不知道如何将你学会的东西, 用来构建一个你想构建的东西。
只有主动才能让你成为你想成为的人. 不会总是有老师或者教授, 将他的模板和样例给你, 而你只需要填补这些空白. 也不总是有一个课程会教你 “下一步你该学什么”
Takeaway #1:
没有人比你更能影响你自己. 你想学什么取决于你, 而不是有人拿着勺子一点一点的喂着你下一步该学什么, 应该自主学习, Dan Luu 称这个为 meta-skill, 这也是你在决定成为一个软件工程师之后最重要的技能之一.
幸运的是, Google 可以帮助我们! 当你搜索 How to build a website using python, 你找到了这个—一个精巧的小型 Web 框架, 于是你打算一探究竟. 即使你还不知道什么是框架(framework). 你尝试去阅读初学者文档, 但是不知道什么是 database abstraction layer(数据库抽象层), 于是你跳过这个直接找到了安装那一步.
最后, 你发现了那些可以自己操作的步骤 🎉! 你复制这些命令到你的终端中(terminal). 这里出现了叫做 pip
, virtualenv
的东东, 管它呢, 先复制. 你花了几分钟观察到了输入这些后会发生什么, 你也终于对你的机器是怎么工作的有了一个大概的认识.
takeaway #2
我们通过理解学习, 而不是无脑的跟着教程. 当碰到你完全不理解的东西的时候, 尝试去学习而不是放弃, 这样你将会发现这些看上去不可能完成任务是一个能让你快速成长的绝佳机会—只不过你可能要花很长时间解决它罢了 🌚
Okay, 现在看上去 pip
好像是一个用来安装 packages(包)
的工具, 这样你就可以 import
(Python 通过这条语句导入外部函数) 它们. virtualenv
看上去好像是一个关联你安装好的包和指定项目的方式. 你现在除了 cd
和 mkdir
外, 其他的命令行你一个都看不懂, 但是至少不再是一无所知. 到了去往快速指导的时间了.
你跟着教程, 运行你的程序, 感觉当你的浏览器第一次出现了 Hello, World 的时候, 你的心中会涌入一种爽到吸大麻的. 你对自己说, 这就我想要的哈哈! 滚吧, 傻逼命令行! 这确实是一小步, 但那是你第一次让浏览器听你的话, 这才是历史性的一刻.
你继续, 又出现了一大堆你不理解的概念. Routes(路由)? HTTP? GET? POST? 什么是 rendering template(渲染模板)? 这些概念听上去好像有那么一点点印象, 但是你不确定到底是什么意思, 所以你停止你手头的工作去搜一下它们是什么. 就像你刚学会 pip
和 virtualenv
一样, 渐渐的你开始对你的程序怎么运行有了一个模糊的概念.
Takeaway #3
学习不断地练习. 就像任何其他的技能, 它们是需要打磨的, 熟能生巧. 抓住每一个学习的机会. 记住: success begets success.
让学习成为一种习惯, 你的求知欲望应该和你的年龄身体一起成长
你可以用模板来显示内容, 和其他的 HTML 和 CSS 页面一样, 只不过它们是动态的. 你可以通过定义不同的路由来控制在不同的 URL 下该显示什么. 你甚至可以用你自己的程序来抓取其他网站上的内容!
译者注: 当然现在是通过前端来渲染模板了, 后端仅在要求性能的时候服务器渲染
随着你渐渐地变得更加轻松, 你开始对独立学习有一种控制感和自豪感. 这可能是你在完成课堂任务的时候从未体验过的(不敢想象国外的教育 🙂). 你开始飘起来, 谁还需要学校, ╭(╯^╰)╮?
随着你获得自信, 这个指导开始看上去有点…基础了. 确实, 毕竟, 这只是一个 quick start… “我可以做更酷 😎 的事情”, 你想着.
于是你开始自己搞定这些. 你想之前做的一样, 用 pip
和 virtualenv
设置你的项目, 因为那是你仅仅知道的方式. 你知道如何设置模板; 你知道如何设置路由, HTTP 请求, 什么是 GET 什么是 POST. 你可能开始尝试使用第三方 API, 并且开始阅读更多的文档. 你并不是什么都懂, 但是你正在学习. 一点一点的.
最后, 你终于构建了你自己的第一个独立的项目 🎉. 不是那个已经有很多年轻的开发者跟着教程走的项目, 也不是很多学生在课堂上做的项目. 而是一个, 真实的, 可以感知到的, honest-to-goodness 的程序, 在你构建之前, 它从未存在过. 这是一中超凡的感觉!
所以接下来呢? 现在你做好了一个应用, 怎样才能让每个人都能用到它? 到底什么是 back-end
, 什么是 front-end
?
这是一个很好的机会,用来培养学习的渴望: 总是有更多的东西. 有点像一个十分棒的电视节目, 你从来都觉得看都不够爽, 更重要的是: 它从来不会结束! 显然, 除了不断地学习就没有其他东西能像这样了. 软件开放的每一个分支, 都是一个需要深入的全新的世界, 而且你学的更多, 就会有更多的世界为你开放.
你应该意识到, 没有一个所谓的权威的方式来让你成为一个 “real” 开发者. 也没有足够的时间去精通每一个方面. 每个人成功的道路和方式都是不同的. 你如何修出一条到达你想到达的地方, 那完全取决于你自己.
这就是我第一次踏入软件开发世界的故事. 如果你还想看我第一次到底做了什么, 你可以查看这个.