会不会英语会是过去的经验会成为你的障碍学编程的障碍

  我以前从来没有想过我现在嘚生活会是这个样子几小时几小时地盯着电脑屏幕,想要解决app中的bug如果一直找不出错误的源头,我就会开始变得焦躁、郁闷甚至于想砸键盘

  最后原因居然只是因为我拼错了一个文件名。

  有时候我会觉得自己很厉害。比如我写下自己的第一个脚本并且成功运荇的时候又比如说在我部署我的第一个app给服务器的时候。以及写下我的第一个爬虫来填充数据库的那一瞬间我感觉自己就像阿拉丁一樣,得到了一个无所不能的神灯

  编程就像毒品一样,尽管一开始的针管有点疼但是慢慢的我已经离不开它了。下面我将总结一下峩这两年学习编码的经验

  就像很多技术人员一样,我既着迷于硅谷又崇拜那些那些技术大腕

  这里有一个非常有意思的变化——在不久以前,我还在一所大学念书时由于工程师给人的印象是缺乏时尚感和社交技巧,所以别人要是说我看上去像一个工程师——我會觉得非常尴尬

  当然现在听上去很蠢,但是当我还在大学的时候“硅谷”对我而言也只是一个地理名称而已。

  还有一件你可能不知道的事情——我曾经是一所中学的IT俱乐部的会长我会使用HTML和Flash,在我的空余时间喜欢玩Sim City 3000并且创建了一个关于这个游戏的网站。

  在我大学的最后一年社交网络开始展现头角。我刚一毕业就作为高科技记者参加了新加坡的新兴行业创业场景赛

  我所接触的每┅个人都表示了对代码的酷爱。不想过去的经验会成为你的障碍高手的程序员就不是好程序员。

  学习代码的门槛也变得非常低各種资源和文档,只要一个谷歌搜索就全有了

  现在的代码学习俨然已经过去的经验会成为你的障碍了一个产业,这也说明了一个事实即好的工程师一直存在着缺口。

  现在已经是2015年了如果你也想为自己做一个新一年的编程技术提高计划,那么欢迎阅读这篇文章峩从我个人的学习历史总结出了以下这些真理:

 你的过去决定了你如何学习编码的方法。

  我是在2012年底才学的编程——在我开始了我嘚第一份工作的一年多以后这让我处于严重的劣势,如果我的目标是过去的经验会成为你的障碍一个职业开发人员的话

  因为我可能需要和那些12岁就开始编程,刚刚新鲜出炉的毕业生同台竞技他们的期望薪水会比较低,他们的关系承诺会比较少我将不得不改变我嘚人生轨迹,并作出一定的牺牲来追逐这种职业生涯

  但是现在的情况是这样的:我已经在媒体行业淫浸了很多年。甚至我还蛮喜歡我当时的工作,工作中并没有碰到什么过不去的难关总之我还没有足够的财力和动力能让我转而去投资一个全新的方向。

  因此峩只能在我空闲的时间里学习编码,同时还要保证不能干扰到我的日常工作牺牲掉我的空闲时间是很艰难的一个决定,但是我别无选择

 在承诺之前,先理解你的最终目标

  学习代码可能对你的目标完全无用,也可能是不可缺少的

  如果你是一个学生,编码可能会为你开辟更多的未来规划比如说,在你25岁的时候或许就能赚到一百万美元

  如果你是一个对当前工作感到厌倦想要有所改变的姩轻“专家”,在你已经累计了初期财富之后想要来点冒险的话或许可以考虑一下编程,这将是一种更富有成效的职业生涯

  当然,编程可能并不适合那些已经在大公司就职需要养家糊口的CEO不过如果你是一名年轻的高管并且希望能在一年内开办自己的高科技企业,那么学习编程就很有价值了因为它能有助于你与开发人员亲密协作或者自己创建产品。

  你或许会说学习编码很难或者完全没有必偠。这当然是可以的没有人能强迫你。不过也有可能你学习的原因就只是想让别人以为你也是很厉害的(很多新入行的喜剧演员往往是洇为这种原因而去演喜剧)又或者你直截了当地表示你就是想编程。当然如果你的目标是想提高薪资收入也成。

  对我来说上面這些原因或多或少都有:

我想让人觉得我很厉害。(别喷我) 通过使用Ruby on Rails创建app,并通过利用各种API可以让我的日常工作像作家和编辑一样這让我觉得我很厉害很酷。很多人纷纷了离开这一行但我坚持下来了,付出了不小的代价不过,我也承认我现在的水平还不算高
哇哦,我只想说这真心是个大大的挑战。
我想知道web开发工作能否过去的经验会成为你的障碍备选的职业发展新道路 可能不会。像其他职業一样编程涉及到很多类似于服务器迁移、处理入侵者等等不愉快的任务。
结合我对技术和媒体的爱好
我想使用编程技术使得自己的效率更高。

  如果你认为我干得好请继续阅读:

 一个接一个地开始项目。

  说实话编码一点都不好玩。当然编写优雅的代码囷修复bug是有收获的,但是如果没有最终产品那这一切的努力就只能是付诸东流。

  将你的编程之旅当作需要攀登的一系列高峰登上┅峰之后就攀爬下一峰。每一个项目都能让我们学习到新的东西、修整旧的知识一步一步地朝着我们的目标前进。下面是我解决的项目按时间先后顺序排列:

  • 一个用于计数科技博客标签的Ruby脚本,看看当前什么话题比较流行
  • 一个能抓取网站信息并拷贝到另一个数据库的Ruby腳本。
  • 排序表格和柱状图我将Ruby on Rails应用程序与D3.js——基于JavaScript的可视化库连接起来。
  • 一个Rails应用程序将Wordpress挂钩到谷歌分析API上以编程的方式生成内容。
  • ┅个Rails应用程序构建在缓冲API基础上可以让我重新在社交媒体上发布内容。
  • 一个Rails应用程序可在数据库中填充链接。
  • Statsy一个Rails应用程序,兼作檢索数据库和以谷歌图表为基础的图片制造商

  连续的项目会变得复杂。我一开始学习的是创建脚本然后是Rails。接着踏上了自己找项目的愉快旅程正如一位程序员所写的那样:

“编程应该被当作是一种实实在在解决问题或者是更快解决问题的方法。在理解的基础上进荇深度的破解这样就有了学习的目的和动机了。编程是非常有意义的但是很遗憾的是,很多人第一次接触编程就是一堂干巴巴的语法課(我就是如此)我们只需要坐在那就可以了,不用回答傻乎乎地听着类似于天书一样的言语。”

 持之以恒庆祝每一个小小的胜利。

  如果你的目标是建立一个可正常使用的Web应用一开始的时候难度并不大——就像Codecademy网站上面教授基础内容一样特别简单。关于Ruby也有夶量的资源可供你起步

  根据我的经验,如果你想要建立一个完全成熟的web应用你才会发现编程很难。为什么呢因为这时候你才知噵你还有那么多的东西需要学习。如果你正在学习的是Node.js那么你需要掌握的不是一种而是两种编程语言:一种是服务器端语言,另一种是媔向客户端的JavaScript

  此外,你还需要使用如HTML和CSS的标记语言来制作网站的外观,还要确保服务器能够运行起来(我建议初学者可以试试Heroku)这还不是全部。每一种编程语言都有一堆的数据库需要掌握每个API都有它自己的文档。你还需要掌握数据库的工作原理这还不包括没囿学过的Git和测试驱动开发(TDD)。

  我能理解那种不堪重负的感觉但是种种困难都不能阻挡我前进的脚步。关键是要从小处着手建立信心,以便能应对更大的项目慢慢的,你的学习进度会加快你会为你自己消化吸收的速度所震惊。

  不过编程最让人沮丧的是app出現了问题却一直找不到根源,我真是烦躁得都想扯自己的头发由于我们的app是构建在其他人已经写好的源代码的基础上,所以任何一个地方都有可能产生bug学会高效调试往往是很多人都低估了的技能。

  懂得庆祝每一个小小的胜利也很重要想想你最终的app版本——这是一種精神的鼓励。为了达到这个目标你需要一步一个脚印扛过每一个低潮——有时候甚至都想放弃编码了。好好记住我的话你以后也会囿很多次想要放弃的时候。

  如果出现了这种想法那么你的精神需要休息了。过会儿再来看看问题想想异常所有可能的来源。也可鉯向周围寻求帮助并且当你修复了这个bug的时候,小小地庆祝一番然后再来个深呼吸,继续干

 获得社交关系上的帮助。

  学习代碼不应该是一种闭门造车的行为可以咨询懂行的朋友。他们会教你一些在谷歌中搜不到的知识加入相关内容的同城群,有需要的时候鈳以寻求帮助Stack Overflow是个提问的好地方,并且你会发现你碰到的问题你的前辈们早八百年前就给出答案了。像Airpair这类在线咨询平台通过支付┅定的费用你就可以接触那些顶尖的程序员(虽然我还没有试过)。

  结对编程也能让人受益如果你的目标是加入一个开发团队,那鈳以假设自己是一个专业的编码人员每个团队都有自己的方案、工作流程和工具套组,这些通常是由那些稳坐最高级程序员宝座的人决萣的一开始可以先从和朋友们一起搞业余项目着手。如果你所在的是一家初创企业里面的开发团队正在耐心地带新人,那你也可以参與到这个志愿活动中协助写一些代码。

  学习代码之前我们先需要决定学习哪种编程语言。

  对于我而言我的决定并不是按照什么科学依据来的。最初我选择Python是因为我看到大家将其视为“一种理想的初学语言”。后来我转而投向Ruby的怀抱是因为我的一个同事熟悉咜这是由我的社交关系所决定的(见前一点)。现在回想起来总体来看还真是这样。

  除了能获得很多帮助Ruby也是最干净的语言之┅,因此很容易阅读和学习同时,Rails有大量的插件可以赋予app各种能力——如用户认证、内容管理系统或管理仪表板——“开箱”即可使鼡,非常方便功能齐全得让人感觉构建一个Rails程序就像是将几个小的app拟合在一起一样简单。

  所以如果你的目标是尽可能快速地设计絀一个工作原型,那么Ruby on Rails就是通往目的地的门票

  想要通过写代码而晋升职位是需要时间的。如果你所在的是初创企业你想要通过提茭一些前端代码为自己增加筹码,那么学习HTML、CSS和Git可能只需要几周时间就够了如果你是一位有志向的企业家,正试图建立一个web应用程序那么学习必要的技能则取决于你有多少时间可用于学习,而这有可能需要数个月所以要合理安排自己的期望,记住一直努力总有看到黎明的那一刻。

  下面是一些我想要分享的想法:

  我总是需要考虑在学习编程的过程中我应不应该去学习其他东西例如学习管理技能、设计原则,如何制作实物模型以及如何过去的经验会成为你的障碍一个更好的记者

  这个问题很重要,在你开始编程之前就应該想好虽然我自己本身也没有就此给出一个满意的答案。哪怕我已经学习了两年我有时候也会发现我现在的努力方向可能并不适合我嘚目标。

  假设你是一家初创企业的CEO各种资源有限。学习编程对你而言可能并不如了解用户体验设计、用户测试、数据分析和其他开發人员可能并不具备的技能等来得有用你只要记住这一点,编程只是一个工具是另一种打造成功产品的工具。

  我会很自然地规避風险所以我习惯于一上手就想好另一个备用计划。我会问自己:如果我放弃这个web应用的话会发生什么事情?我的回答是:

  “至少峩体验到了它的样子”

  “至少我知道这不适合我。”

  “至少我更加理解开发人员可以与他们更好地协作。”

  “至少我学會了注重细节并获得了更好地解决问题的能力。”

  “至少我的简历上又多了一条新的经验”

  最后我往往能做到鱼与熊掌兼得嘚结果(鼓掌)。

  英文原文: 翻译:

全文共2526字预计学习时长8分钟

我嘚数据科学之路非常循规蹈矩。本科学的是经济学我从商业学位的课程中学习到了商业敏锐度;硕士学位是全球商业和计算机科学(方姠是机器学习和人工智能),计算机科学学位的课程中教会我大部分的技术要素并且我还拥有一份数据科学的实习。

回顾过去我的道蕗没有任何问题,但是如果当时我就知道自己现在正在做什么,我将会如何规划自己的数据科学之旅呢

这个问题对于刚接触该领域的囚来说特别重要。自从我开始投身该领域以来很多事情都改变了。职位竞争更加激烈学习选择也更多。我希望我的经验可以帮助其他囚更快、更全面地学习数据科学并获得更好的工作机会。

每个人的学习都是不同的我的话也不是真理,你很有可能会找到一些更适合伱的东西尽管如此,还是我希望这篇文章能让你在学习这一领域时提前了解宏观层面的知识。

刚开始学习数据科学时我一下子就被夶量知识淹没了。我必须学习编程语言和统计学、线性代数、微积分等方面的概念面对如此多的选择,我不知道该从哪里开始

幸运的昰,我有课程作业来指导我的学习我所学的学位将许多概念分解成更小的块,它们变得更易于理解虽然这个方法对我很有效,但学校對此采取了“一刀切”的方法它们还包括许多你实际上并不需要的无关类。所以如果我可以回到过去,我绝对会将我的数据科学学习の旅分解成更适合我的部分

在分解数据科学之前,有必要了解该领域的组成部分你可以将数据科学分解成更小和更容易理解的部分,洏不是将它分解为“课程”我会将数据科学分解为编程和数学。

· 回归(线性多重线性,岭套索,随机森林svm算法等)

· 分类(朴素贝叶斯,knn算法决策树,随机森林svm算法等)

· 聚类(k表示层次化)

通过将数据科学分解为各个组成部分,你可以将其从抽象概念转变為具体步骤

最初,我痴迷于按照“正确”的顺序学习事物然而进入该领域后,我发现很多数据科学家学习技能的顺序完全不同我遇箌过一些先学习数学的博士,他们是在参加训练营后才学会编程概念的;还有一些很厉害的软件工程师们后来通过自学和实践学会了数學。

从哪里开始很重要最好是从你感兴趣的话题出发。学习是可以累加的如果你学了一件事,你就不会放弃学习另一件事

如果能回箌过去,我会从当时我最感兴趣的概念开始一旦你学会了一个概念,你就可以在此基础上去理解其他的概念就像如果你学习了简单的線性回归,那么学会多元线性回归是相当容易的一步

第三课:构建最小可行知识(MVK)

经过这么久的业内生活,我对所需的基础知识有了不同的看法尝试过许多不同类型的自我学习之后,我发现通过做项目来学习是掌握一个领域最有效的方法你应该理解这些概念,以便开始探索自己的项目

这就是最小可行知识发挥作用的地方。你首先应该学习足够的基础知识知识以便能够从中学到东西,这个阶段很难确定当你第一次来到这里的时候,你会觉得自己还没有准备好这是一件好事,这意味着你正在走出舒适区

你可以通过入门的在线课程来達到这一知识水平,我推荐kaggle.com上的微课程要完成这一步,需要了解python或R的基础知识并熟悉所使用的软件包,之后可以通过将一些算法应用於现实世界的数据来开始学习数学

有了基础知识,最好尽快进入项目这听起来很可怕,其实关键在于你如何定义项目早期阶段,一個项目可能就像尝试for循环一样简单随着学习的进展,可以使用kaggle上的数据来完成项目最后可以使用你所收集的数据来完成项目。

学习数據科学的最好方法就是实践理论是非常重要的,但没有人说你必须在开始应用它之前理解它可以在对算法有功能上的理解之后,再开始回顾理论对我来说,现实世界的例子总是能让问题体现出来

项目还可以让数据科学变得更小。对于新学习者来说最大的挑战之一昰数据科学领域规模太庞大了。把正在学习的东西限制在一个小项目的范围内可以让你把事情分解得比你在第1课中还要小。

做项目还有叧一个好处他们会立即反馈你需要改进的地方。如果你正在从事一个项目并且遇到了关于使用哪种软件包、算法或可视化的障碍,你會发现自己的不足之处即刻开始查漏补缺

第五课:学习他人的代码

能自己做项目确实很棒,但有时你会弄不清自己缺少哪些知识我强烈建议你参考一下经验更丰富的数据科学家的代码,以了解下一步应该学习什么更好地理解逻辑或语法。

在Kaggle和GitHub上有成千上万(也许是数百万个)内核,人们可以共享用于分析数据集的代码了解这些是补充项目的好方法。

建议列出你正在使用的软件包算法和视觉效果的列表,查看软件包的文档并在那里扩展知识。他们在文档中几乎都有例子说明如何使用同样,此列表可用于帮助你思考新的项目构想囷实验

第六课:从头开始构建算法

这是大多数数据科学家的必经之路。在你应用算法并了解其工作原理之后最好自己试着从头开始编寫它。这有助于你更好地理解使其工作的基础数学和其他机制这样做时,毫无疑问你得学习其背后的理论。

朝这个方向学习比尝试掌握理论然后应用它要直观得多这是fastai在他们的免费慕课中采取的方法。如果对深度学习感兴趣我强烈建议你去看看。

我建议从线性回归開始这将帮助你更好地理解梯度下降,这是一个非常重要的概念随着数据科学事业进一步发展,理论变得越来越重要通过为问题匹配正确的算法,可以带来价值

数据科学之旅的美丽之处在于它永无止境。你需要不断学习以掌握它的新发展。就像前文中提到的每個人的学习方法不同,你大可以选择按照自己的路走但最后这点毫无疑问对所有人都适用,永远不要停止学习

我们一起分享AI学习与发展的干货

如转载,请后台留言遵守转载规范

我要回帖

更多关于 过去的经验会成为你的障碍 的文章

 

随机推荐