
作者|ZachAlberico
译者|苏本如,责编|夕颜
出品|CSDN(ID:CSDNnews)
以下为译文:

为什么要写这篇文章?
当我十三岁开端上高中的时期,我读了ESR写的这篇博客文章:怎样成为一名黑客()。这篇文章让我了解了程序员们一同在互联网上构建东西的社区,这让我很振奋。我试着开端着手装置FedoraCore4,终究装置成功了,经过这一历程,我自己学到了许多关于毛病扫除的常识,而且尽力测验着让体系真实作业起来。这个历程关于培育协助我取得现在这份作业的技术至关重要。我读了关于Python的书,写了一些小程序,然后决议学习估算机科学,了解估算机是怎样作业的。在我不确认自己将来想做什么的时期,这对我来说是一个适当有影响力的文章。

要学习的东西有许多
记住在刚开端的时期,我读过一些文章和书,但对其间的许多职业术语不甚了解-这很正常。跟着你触摸到了更多的作业,并深化到每一件你不了解的作业中去,那些一开端看起来不行了解的作业会渐渐变得能够了解。坚持持续阅览而且挺过这段困难期间是很好的办法,当你不了解的时期就去查找,当你能够发问的时期就去问问题(ESR也有一篇关于怎样问候问题的文章)。
每个人都会在某个时期第一次学到一些东西,然后这些东西就会渐渐地堆集起来,直到你把握了那些根本常识停止。我记住一开端我不明白任何细节(比方:我不知道怎样在终端中输入指令来运转它们,或许cd代表“changedirectory”)。你从触摸中取得这些常识,你玩得越多,你触摸得就越多,你堆集的常识和经历也就越多。假如你有幸日子在一个区域有一群对软件感兴趣的人,你就能够更快地学习。

不要惧怕你不了解的作业
学习一些杂乱的新事物开端时往往会感到艰难-假如感觉很简略,那么它或许是你现已知道的东西,或许它或许不是真实检测你的常识(阅览怎样处理一个物理问题并以为“它很合理”,比你自己用刚刚学会的东西处理一个问题要简略得多)。感觉费劲是个好现象-这意味着你真的在学习,集中精力一向坚持做下去,当你感觉变好的时期你的学习就会变得更简略。
我以为,一个新人在这方面乃至有一点优势:当你堆集了一点经历后,只做你现已知道怎样做的作业,而不是学习新的东西,会让你感觉简略和舒适。这会导致你堕入一个阻滞期,在那里你仅仅重复做你现已知道怎样做的作业,就像一个人只能用吉他弹一首歌,而且他总是弹同一首歌相同。关于一个新人来说,一切都很难,但这样做不该该是一个新人真实的挑选。
第一次学习一些杂乱的东西应该会感觉有点苦楚-你应该习气这种感觉,由于这是件功德,意味着你在生长。不要因而觉得自己不行聪明而被吓跑了。由于有太多东西要学,有太多不同的途径要走(仅就估算机科学来说,就有许多东西,像估算机图形学、估算机安全、机器学习、算法、移动、网络、根底设施等等分支),所以有一个让自己生长并走出舒适区去学习新事物的心态是至关重要的。

学习编程-边做边学
仅仅经过阅览一本关于编程的书来学习编程,就像仅仅经过阅览一本关于跳伞的书来学习跳伞相同。你或许须要读一本书(而且在开端的时期你须要用它作为一个起点),可是除非你一起也在写一些小程序,不然你从中得到的有限。木匠经过制作东西来使技术变得更熟练,作家经过编撰文章来使文笔变得更美丽,而程序员则经过编写代码来进步编码水平。这并不意味着你不该该读书,也不意味着一本好书不能给你带来价值。可是仅仅这样做会很简略让你堕入一个误区:你仅仅在那里读关于编程的书而不是自己做任何作业,会让你觉得读起来简略,做起来也简略。可是,当你真实开端编程的时期,你会发现凭空想象出来一些程序是很艰难的。
我赞同ESR的观念,Python是一种很好的作为编程起点的言语,而且有一个很好的学习网站,名为苦学Python,专门针对初学者,并在教育历程中运用一些操练。
一开端,你会觉得语法很难了解,当你开端学习的时期,许多时刻都花在了语法上。由于每种编程言语都有不同的语法,它们看起来十分不同。当你开端把握语法后,你更多的精力就会放在关于怎样处理问题和运用什么数据结构的通用常识上。终究,你关于运用常见的数据结构现已适当熟练,然后你的要点将会转向更高层次的笼统和更通用的规划或根底架构,这些规划或根底架构使得软件开发更易于在规划上办理或在将来更易于更改。
在把握了一门编程言语的语法而且能够编写容易的程序之后,学习数据结构是最重要的下一步。CrackingtheCodingInterview这本书对一些中心的数据结构有很详细的描绘(而且还顺便有一些示例问题)。令人困惑的是,不同的言语在完成相同的数据结构时往往有不同的称号(比方,Python称哈希表(hashtable)为‘字典(dictionary)’),但大多数言语都会完成一些中心数据结构,即便它们都有一个不同的称号。
毛病扫除或调试也是一项中心编程技术-大多数编程时刻实践上都是在调试,因而,假如你喜爱调试代码,这或许是一个好现象。当你不得不处处查找以企图了解某件作业,或许当你正在阅览的文档不起作用,或许当你在环境中遇到一些意外过错时,不要泄气,记住这是正常的,而且这也不是你才干低下的反映。
大多数软件都不作业,而且常常有未记载的error、bug和一些难以纠正的琐碎问题。例如,Github上的大多数开源项目都有某种构建体系,用于处理将软件装备为运转的问题。这将履行比方拉入依靠项(须要与之合作作业的其他代码)之类的操作,以及履行任何必要的指令来实践运转它。假如你要在Github上下载一个风趣的项目并测验运转它,你或许会在这个历程中遇到许多意外的过错,而这些过错一般没有文档记载。
运转时遇到这些过错而且将问题处理是很正常的作业,经历丰富的程序员也有必要处理这些问题(假如走运的话,咱们曾经也见过这种类型的问题)。我见过有人遇到这样的过错,而且以为自己做错了什么,但实践上错不是你,而是编程便是这样的历程。围绕着构建体系并企图使其更好,有许多相互竞赛的东西乃至职业(这或许会使初学者愈加困惑,由于没有真实的标准化,而且装备软件使之运转的正确办法也由于编程环境和言语的不同而各不相同)。

估算机实践上是怎样作业的?
我记住那时我很懊丧,由于我很难找到关于估算机实践作业办法的信息。我能找到的关于估算机的一切都是用毫无用处的过于容易的类比(比方,磁盘是“寄存文件的柜子”),我找不到任何我能够阅览而且协助我真实了解估算机是怎样作业的,而且假如把我转移到曩昔,我就能真实解说怎样构建出一个估算机的东西。这些是比软件更详细的电子或估算机工程,它们在协助了解硬件方面依然有许多价值(这很风趣!)。
我乐意引荐的最好的书是CharlesPetzold编撰的《Code》。它引导你从电子位开端,一向到布尔逻辑和电路规划的前史,再到容易电路的实践图形,以及怎样将位存储在内存中。这是常识按照发现的前史布景一步步地介绍给你,直到构建出一个真实的小CPU。CharlesPetzold还学习了一些汇编和根本的估算机图形学。他是一个逻辑十分清楚的作家和教师,所以这本书的细节具有令人惊奇的可读性。
关于估算机的更多的前史布景,我引荐MitchellWaldrop的《梦境机器》和StevenLevy的《黑客》。书中的叙述性的故事使学习和回忆更简略,我以为这些发现的布景有助于学习事物的实践作业办法。

软件东西:代码编辑器,编程环境
东西是风趣的,了解你的东西是件功德,可是你能够永久定制一些东西,争辩一些无关紧要的小细节。当你刚开端的时期,定制东西是一个风趣的学习办法,可是我看到人们花了许多的时刻在这个上面,与实践编写处理问题的程序或许学习更多的通用编程技巧比较,它发生的价值相对较小(关于这点的一本很好的书是规划数据密集型应用程序)。过于专心于定制东西会捆绑你行进的脚步。
不要太忧虑Vim或Emacs之类的东西,也不要太忧虑你正在运用何种操作体系-你能够在任何当地学习这些中心技术(这是我与ESR原始文章的最大不合)。也便是说,玩Linux对我来说是一个十分有价值的学习毛病扫除的办法-首要是由于我的Linux没有很好地作业,我不得不花上几个小时来测验让无线互联网正常作业,让笔记本电脑成功挂起,乃至让用户界面呈现(现在状况略微好一点)。
我开端测验装置Gentoo(实践上从未成功)。这种毛病扫除技巧关于我取得现在的作业十分有协助,所以假如你喜爱玩不同的操作体系,我肯定会鼓舞你,我仅仅不以为这是必要的。不过,在macOS或Linux上学习或许更简略,由于大多数现有的东西都是针对这些环境,而且大多数程序员都在运用这两种东西中的一种。

不要没完没了地研讨
在开端一个项目之前,进行没完没了地“研讨”会导致项目简略延迟-阅览和探究可用的选项(研讨)会很风趣,花一点时刻做一点这样的作业会很好,但你也或许永久被困在这样的作业中。当有疑问的时期,只需挑选一个现已开端了一段时刻而且最受欢迎的项目。运用这个项目,假如它很受欢迎,它或许有一个像样的社区,你能够向它学习,假如它存在一段时刻,它或许会更安稳(或许至少它会更充分,不太或许被扔掉)。

估算机科学
我真的很喜爱学习估算机科学,而且以为这或许依然是取得最大时机的最佳途径(尤其是假如你像我相同住在市郊,周围没有许多软件人员的话)。假如或许的话,我以为测验学习最好的估算机科学课程是很好的。网上也有许多好的课程,可是假如你的日子和我高中时相同,在家里很难真实运用这些。

编程面试
假如说学习是取得好成绩的天然处理方案,那么做好一个酷项目编程便是在编程面试中表现出色的天然处理方案。要想在竞赛剧烈的公司的编程面试中处于有利位置,你须要对leetcode网站上和CrackingtheCodingInterview这本书中说到的编程问题十分了解。编程面试须要许多的实践,而且它是一个能够让本身才干得以开展的共同技术。
你能够取得一个完好的估算机科学学位,但依然不知道怎样编程。你也能够取得一个估算机科学学位,但依然不能经过编程面试(这两个或许是默许状况)。学会编程,学会在编程面试中做得更好,你须要自己集中精力在这些方面。估算机科学学位或许有助于一些方向和要点项目(LambdaSchool或许更适合培育编程人员,或许终究会更适合),但你有必要自己把握许多这方面的常识。

人物和职位
在所有这些人物中,依据运用的产品和运用的为处理新问题而创立的新东西的不同,有更多的专业化。估算机安全也是一个风趣的范畴,对此范畴我所知不多,而且我以为ESR在他的文章中对此是持小看情绪的,但我以为它也是一个很难开端的当地,由于它须要对事物是怎样作业的已知了解的根底上才干知道事物是怎样被打破的。我记住我很早就开端读Hacking:TheArtofExploitation这本书,但其时我对这个范畴仍是一知半解。
当然,你也能够兴办自己的公司,树立自己的创始人人物。

还有许多东西要学(再来一次)
一辈子是很长的一段时刻,而专业化并不是永久的,所以要深化到不同的事物中去。你能够触摸许多新事物,一路玩得高兴。

奖赏:社区
ESR在他的文章中谈到参加一个本地Linux用户组,可是至少对我来说,当我读到他的文章的时期,这是不现实的,一方面是由于这个用户组真的没有那么多人,另一方面是由于我太小了不能开车,我自己也无法那么简略地抵达任何当地。有一些在线社区我觉得很风趣,假如换在那时我想我也会觉得很风趣。
HackerNews:Ycombinator的新闻网站(海湾区域的创业孵化器)。对它的点评有好有坏,但益处在于它的确很好,许多业内人士都在那里呈现。PaulGraham和JessicaLivingston是Ycombinator的创始人,Paul写了许多风趣的文章。
LessWrong:不是重视编程的社区,可是理性社区和编程社区之间有适当多的堆叠,我喜爱那里的许多文章,这肯定是我在发现怎样成为黑客的一起,期望找到的东西。这里有一个我十分喜爱的比如:DisputingDefinitions

欢迎联络我
我有更多的文章和书,都链接在我自己网站的about网页上。
我记住在我读到他的文章时,ESR回复了我发给他的一封关于让iPod在FedoraCore4作业的邮件,我很确认RichardStallman也回复了我其时发的一些邮件。我觉得那样做对初学者来说很好。本着以他们为典范的精力,假如你乐意的话,请随时向我提出任何详细的问题。
本文为CSDN翻译文章,转载请注明出处。
☞Facebook公司:怎样铲除960万句“脏话”?
☞Linux之父怒删工程师提交的补丁,称“太蠢了”网友:怼得好!
☞张一鸣是怎样练就字节跳动的
☞功能逾越最新序列引荐模型,华为诺亚方舟提出回忆增强的图神经网络
☞DevOps在移动应用程序开发中扮演什么人物?
☞安稳币经济:十大安稳币简史
本文暂无评论 - 欢迎您