零基础如何看懂代码成为一名程序员

事实上这些规则并不仅适用于程序员,而是适用于任何专业人士

并非此列表中的所有内容都是完全认真的,有些事情只是我的意见而你的意见可能会有所不同而且並非所有关于程序员个性的描述都与我可能遇到的真实情况相符,所以如果有疑问请不要采取罪行。我不是说你文章有一些长,还请伱耐心看完

基本上这些类型的程序员提问:

完美主义者:特别是在询问一些开源工具的问题时,他们可能已经通过代码调试并找到了问題的真正原因但即便没有,完美主义者会写一个问题的介绍重现的步骤,可能是一个建议的解决方法正如我所说,可能是一个建议嘚修复事实上,完美主义者没有问题只有答案。

聊天室:这个人不会真正提问相反,他们公开安排他们的想法偶尔在这里和那里提出一个修辞问号。看似问题的确只是一堆思绪如果你等待答案,他们可能会自己找到答案或者在电子邮件号码37中提出真实的问题。戓者不是或者,如果我们这样尝试的话你知道吗?事实证明这个要求是完全错误的,我用其他技术解决了这个问题哦,实际上峩完全改变了库。呵呵别再问问题了。

懒鬼:这是代码怎么了?请帮忙

经理:对于这种类型,时间就是金钱问题必须简短,答案盡快这种方法有一些讽刺意味,因为通过保持问题简短(阅读:不完整不简洁),大多数情况下很多重要的细节都会丢失,这只会導致对细节的要求然后,经理(自然感到失望因为答复不是答案,而是一个新问题)将再次发送一条短信并要求更加紧迫的答案。這可以来回走了很长一段时间最后,可能需要1-2周才能真正得到答案

抱怨者:此人不会提问。他们抱怨直到问题消失。也许如果不昰更好的话。抱怨的理由更多

到目前为止,应该清楚的是一个准备充分的问题(简洁,简洁简短,但有足够的细节)将产生更好的答案如果你知道你想要用什么来学习你的问题,很有可能你会得到你想要的。

2.学习如何避免提出问题

事实上大多数情况下,最好避免提问也许你可以自己搞清楚?当然并非总是如此。许多事情你根本无法知道,通过询问领域专家你会找到最快捷,最有效的成功之路但通常,尝试自己有一些好处:

你学习它是“艰难的方式”这是更好地记忆我们的方式 - 我们会记住我们学到的东西。

为自己计算一些东西更有意义

你不会创造“噪音”。还记得聊天室吗除非你提出问题的人经常回答问题(从而推迟他们的回答),否则他们可能无法看清你的想法并试图回答每个不完整的“问题”。这对任何人都没有帮助 。

通过推迟提问(至少一段时间)您可以收集更多楿关信息,您可以提供给可能能够回答您问题的人想想“完美主义者”。花更多的时间先寻找细节然后回答问题。

通过培训提出问题你会更好地提出问题。这需要更多的时间

Reddit最近发表了一篇非常有趣的文章,关于不要破坏窗户本文的实质是永远不要在质量上妥协。永远不要成为懒鬼永远不要离开......破窗户。这是文章的引用:

“当我们采取某些捷径来在最短的时间内交付一些东西而我们的代码反映了我们的粗心大意,跟随我们的开发人员(来自同一个团队未来的团队,甚至我们自己!)将会达到重要的结论:对我们生产的代码給予足够的重视并不重要一点一点地,我们的应用程序将开始在一个不可阻挡的过程中恶化“

事实上,这并不是要成为一个完美主义鍺有时,修复破损的窗户可能会被推迟(当然也必须如此)但通常情况下,通过允许窗户打破并保持断裂我们会引入一种没有人幸鍢的情况。不是我们的程序员不是我们的客户,不是我们的用户不是我们的项目经理。这是一种态度因此是专业的核心。本杰明富蘭克林是怎么说的

“在低价的甜蜜被遗忘之后,质量低劣的苦味仍然存在”

一切都是如此。在这种情况下“低价”是我们通过以一種草率的方式实施某些东西可能获得的快速胜利。

4.软件应该是确定性的瞄准它!

在一个理想的世界中,软件中的一切都是“确定性的”我们都是功能性程序员,编写无副作用的纯函数喜欢String.contains()。无论您执行以下操作多少次:

......结果总是相同的预期的结果。宇宙及其所有有狀态将对此计算完全没有影响这是确定性的。

我们也可以在自己的程序中这样做而不仅仅是在标准库中。我们可以尝试尽可能多地编寫无副作用的确定性模块这并不是我们选择何种技术的问题。确定性编程可以用任何语言完成 - 即使功能语言有更多的工具来防止通过更複杂的类型系统的意外副作用但我展示的例子是一个Java示例。面向对象允许确定性哎呀,像PL / SQL这样的过程语言允许确定性如果要在索引Φ使用函数,则要求函数是确定性的:

所以这是一个纪律问题。您可以将副作用过程/方法/“功能”视为“破窗”也许更容易保持副作鼡,希望最终可以将其删除但这通常是谎言。当非决定论突然袭击时价格将在稍后支付。它会

之前的链接是关键。墨菲定律是我们程序员应该一直观察的东西一切都会破裂。它会来吧,作为软件工程师我们知道它会破裂。因为我们的世界不是确定性的所以我們正在实施的业务要求也不是。我们只能在不再可能的情况下实施提示#4(确定性)从那时起,我们将不可避免地进入非决定论世界(“现实世界”)那里的东西会出错。所以瞄准它。期待意外训练你内心的悲观主义者来预见各种各样的事情。

当然如何以简洁的方式编写悲观代码是另一回事。而如何从东西区分会失败(并需要与处理)的事情可能会失败(并无需予以处理)需要一些练习

6.从不货粅崇拜。永远不要跟随教条始终拥抱“它取决于”

你被教过的一切都可能是错的。包括(或可能 特别是)有人真的很受欢迎时说。这昰一个很好的引用:

“我认为至少有50%的职业生涯要么是在福勒或其他灾难中做出贡献要么已经做出了贡献。”

我们的职业充满了虚伪我们喜欢将自己视为数学家,只有最纯粹的想法仍然存在而且他们必然是正确的。

那是错的我们的专业是建立在数学之上的,但除非你进入类别理论或关系代数的时髦世界(即便如此我怀疑一切都是“正确的”),你处于现实世界商业要求的实用世界坦率地说,這非常不完美让我们看看一些最流行的编程语言:

你是否真的认为这些语言在数学上类似于数学?如果是这样让我们??讨论分段错誤,Java泛型或SQL三值逻辑这些语言是由实用主义者构建的平台。所有这些都有一些非常酷的理论背景但最终,他们必须完成这项工作

对於基于语言构建的所有内容也是如此:库,框架 设计模式,甚至架构没有什么是对的或错的。一切都是为某些环境设计的工具在其仩下文中考虑该工具。永远不要将该工具视为一个独立的存在理由我们不是为艺术而做艺术。

鉴于某种情况所有这些都是很好的工具,但它们并不总是成立通过保持好奇心并开箱即用,你将成为一个更好的程序员并知道何时使用这些工具中的哪一个。

7. 不问耕耘只問收获

真正。那里的杰出人物表现优于每个人

但大多数程序员只是“好”。或者他们有可能“好”你怎么能成为一名优秀的程序员?通过这样做伟大的软件不是一天写的,受欢迎的人不是我们这个时代唯一的英雄我见过许多没有人知道的优秀程序员,因为他们过着私生活解决了小公司的私人问题。

但伟大的程序员都有一个共同点:他们只是这样做他们练习。他们每天都在努力变得越来越好

想偠在SQL上变得更好?做吧!尝试每天编写一个带有一些新功能的SQL语句使用窗口功能。分组集递归。分区外连接MODEL和/或MATCH_RECOGNIZE子句。它不必每次嘟投入生产但这种做法是值得的。

8.专注于一个主题(从长远来看)

那里可能只有极少数“好”的全栈开发者相比之下,大多数完整的堆栈开发人员都会平庸当然,一个小团队可能只需要其中的一小部分他们可以涵盖很多业务逻辑,以快速启动一个新软件但是一切嘟会非常草率和“有点工作。”也许这对于最小的可行产品阶段来说已经足够好了但从长远来看,将会有更复杂的问题全栈开发人员將没有时间进行适当的分析(或预见!)。

主要关注一个主题并且非常擅长。只要该专家的利基存在专家将永远需要,并且许多利基將比我们所有人都快(你好COBOL或SQL)所以,做你的事业并做一些非常好的事情而不是很多事情“只是好的”。

虽然你应该主要关注一个主題但你不应该完全忘记其他主题。您可能永远不会真正擅长SQL扩展,扩展低级性能,CSS(无论如何都擅长这些!),面向对象需求笁程,架构等等(请参阅提示#8)这是不可能的。

但是你至少应该理解每一个的本质您应该了解SQL何时是正确的选择(何时不是)。低級别性能调整很重要(当它不重要时)CSS原则上如何工作。面向对象FP等的优势

您应该花一些时间玩这些(以及更多)概念和技术,以更恏地理解它们为什么重要知道何时应用它们,然后或许找一个专家来实际执行工作

通过使用新的范例和技术,您将开始思考完全不同嘚思维方式并且很有可能,您将能够以某种方式在日常工作中使用它

“一切都应尽可能简单,但不能简单”

没有人能够处理巨大的複杂性。不是软件不是生活的任何其他方面。复杂性是良好软件的杀手因此简单性是推动者。容易明白难以实施。简单是需要花费夶量时间和实践来识别和生成的东西当然,你可以遵循许多规则

最简单的规则之一是使用只有少量参数的方法/函数。我们来看看当嘫,上述String.contains()方法是合格的我们可以编写"abcde".contains("bcd")并且不需要阅读任何文档,每个人都会立即了解这是什么以及为什么该方法只做一件事,一件事没有复杂的上下文/设置/其他参数可以传递给方法。没有“特殊情况”也没有任何警告。

同样在库中生成简单性比在业务逻辑中实现簡单要容易得多。我们能实现吗也许。通过练习通过重构。但就像优秀的软件一样简单性不是一天就建成的。

(Protip:康威定律适用茬业务过于复杂的环境中编写好的,简单的软件是完全不可能的要么,你喜欢复杂性和丑陋的遗产要么你最好退出那个行业)。

}

这个世上可以挣钱的工作非常多虽然相对来说,IT行业工资可能比一般行业要高一些但是这与付出的努力是成正比的。有很多只看到程序员的成功不知道他们奋斗历程,这其实是一种悲哀于此,小编要在这里简单安利一下怎么才能成为一名优秀的程序员了:

  1. 1、兴趣很重要不要为了那么多出来的一點工资和自己过不去(做自己不喜欢的事)。所以在选择之前一定要多想想以后是否能长期坚持,这期间兴趣占决定性的作用。

  2. 2、学習能力要强大家都知道,写程序是一件很伤脑的事如果你学习能力不强,什么都是似懂非懂哪怕兴趣再浓,终究也会败给能力

  3. 3、選择一个学习平台很重要。不是任何事都可以无师自通的因此一个好的学习平台对于技能的提升有很大的帮助,以目前最受学员欢迎的洎适应学习平台大讲台为例可以根据你的技术基础、学习兴趣、自我管理意识,开启你的学习之旅

  4. 4、耐心尝试。好的程序员都有一个鈈达目的誓不罢休的品质而且,过程中需要坚持反复尝试,获得更多的经验

经验内容仅供参考,如果您需解决具体问题(尤其法律、醫学等领域)建议您详细咨询相关领域专业人士。

说说为什么给这篇经验投票吧!

只有签约作者及以上等级才可发有得 你还可以输入1000字

}
↑ 点击上方“程序人生”关注我們


要想成为一名专业的程序员仅仅会写代码是不够的。从团队合作去解决问题到版本控制你还得具备其他关键技能的工具包。当我们詢问相关的专业开发人员那些必备的关键技能都是什么的时候,下面是我们了解到的情况

关于如何学习代码,各种声音很多然后很哆人就被误导为成为专业开发人员懂得一门编程语言就够了?!呵呵就像其他工作一样,光会一个技能那是远远不够的如果你想要成為一名开发人员,下面就是一些你必须要掌握的最重要的技能(编码这个要求就不赘述了这太理所当然了)。

虽然一些媒体上面将编程描述为一种“闭门造车”的行为但事实上,它涉及到很多与人沟通和协作的事宜如果你工作于一家公司,那么你会成为开发团队的一蔀分并且得和其他人交流和合作。

然而Jeff Bargmann,Lifehacker最喜欢Fences和Bins的开发人员强调知道如何清晰可信地说话和写作对于那些独立的开发人员甚至更加重要:

学校课程一点也没有教我们学习必要的书面表达技巧。(就教我们编程对不?)在你的职业生涯中——如果你以后想继续晋升嘚话——那么你需要花大量的时间用于清楚简洁、令人信服的沟通交流——从你需要发电子邮件给同事、经理、客户/合作伙伴、甚至有一忝可能是高管仅这个方面想就足够说服人的了。但是由于我们开发人员习惯于比其他人做事快两倍(我们都很聪明对吧?!)所以囹人沮丧的是,这样会导致需要多花上两倍的时间才能顺利地表达清楚而作为一名独立的开发人员,用一句话来说就是“不在沉默中爆發就在沉默中灭亡”——再怎么难也必须掌握这重要的技巧

Jeff也针对沟通技巧提出了一些建议:

要么跨过这个障碍,要么在过程中学习总之你需要的是真实的社会实践(我们要想擅长编码也是如此!)。可以试着发布一些简短的文章、大声阅读电子邮件、勇于面对批评敎育创建适合自己的经验教训。

如果你现在还没有机会加入到一个团队中一起开发那不妨考虑一下一些高校的沟通、演讲和写作班輔导。此外还有各种课外的网络资源供君采撷

很多开发人员说了解一门编程语言只是编码的一小部分。解决问题则是另一个重要的技能而这也是那些新手开发人员所缺乏的。如果将软件开发比作是一个巨大的谜团:那么你需要弄清楚如何将你的一个程序片段连接到另一個上面而这一过程往往并不简单。有读者Jsimon作了如下解释:

我有碰到过那种据悉已经完全掌握整一门编程语言所谓的“牛人”但是想出來的解决方案居然只能往废纸篓那里扔。最好的例子就是在大学中那个时候我们正在开发一个项目。有人要我来看看某部分代码因为這片代码的负责人不能将之连接到服务器的接口上了。原因是他竟然没有设置端口所以说,解决问题的能力很重要

不过,解决问题确實是一个很难学习的技能实践是其关键所在。可以先拿小项目试手比如说开发一个便签app、计算器,只要你感兴趣的都可以在开发过程中,你需要关注代码背后的逻辑学会像计算机一样思考,而不仅仅只是理解这门编程语言

事先学习计算机的工作原理也是有帮助的。这个技巧来自于Jacobm001这位读者:

解决问题是我们要做的最多的一部分计算机的思维和我们是不一样的,你往往需要重新学习其思考问题的方式为了提高效率,你需要真正地理解计算机是如何运作的以及是如何处理CPU信息的我个人非常讨厌计算机编译,不过幸亏我学过有关於这方面内容的课程只要你稍微懂点编译知识,往往能想出更棒的点子来正确地实现一些事情

正如Jsimon所说,既知道如何写代码又懂得解決连接件的相关问题是我们学习的关键一旦你真正迈进了开发程序的大门,那么就需要专注于形成一种系统的方法来解决你面临的各种問题

起来,到了学习版本控制的时候了

如果是在大学里你可以和编程课上的团队一起合作开发项目。WindowsSVN和GitHub是很多开发团队常用的用于共哃创建和更新开源app的两个工具而且这两工具没有限制,谁都可以使用但是企业更青睐于Subversion和Apache SVN。所以在开始新工作以前你最好先了解一丅这些系统是如何工作的,这样能够让你在那些新队友面前“一鸣惊人”学习工具是需要一定的时间和实践的,但是如果你一点也不懂嘚话那就会远远落后于其他人的进度。

真正掌握系统的唯一途径是实践如果你还在大学中,学习这些工具有助于你进入以团队为导向嘚大型课堂项目中如果是这种情况,可以要求使用GitHub或其他形式的存储库即使老师并没有对此提出要求。如果你是自学的那先找个合莋的团队,既可以通过GitHub上的项目也可以找一些你希望与之工作的同伴共同开始一个新的项目。

技术就像历史的巨轮总是在不断向前翻滚开发人员对于知识的态度也应该如此。如果你想要继续留在相关的领域中关键是要跟上发展的脚步,不断地更新编程语言、软件和硬件技术读者Wakers01对此的看法是:

……你需要不断地学习新的语言、技术和工具。你必须花心力去研究新的技术分析它的优点和缺陷,并迅速消化请注意,这里我之所以用“消化”而非“学习”是因为,我想表达的意思是你必须得充分吸收、理解,并将这个新的东西融叺到你的技能系列中而不仅仅只是获得一些有关于如何工作的新知识。只要你能保持这种学习新事物的劲头那么你一定会越来越强。

峩们还可以通过一些技巧快速地学习技能例如,如果你能先花点时间去了解内存的工作原理那么你将更高效地使用它们。学习还包括悝解所以除了上面提到的沟通能力,专注于提高阅读理解的能力也是不可或缺的这个可以通过阅读相关技术文档和其他书面资源获取。好记性不如烂笔头有一个良好的笔记系统有助于你迅速找到你所需要的参考信息。

从基础开始:将学习看作是一个你应该重点掌握的技能一旦你这样做了,你就能更快地跟上技术发展的脚步在此领域内超前于你的竞争对手。

编程其实还包括很多内容而不是你原先想的只需要坐在计算机前写代码就ok了。如果你比其他人早明白这一点那么你将会有更多的机会掌握一些雇主和客户需要你知道的关键技能,领先于他人一步

}

我要回帖

更多关于 没有任何基础学编程从哪开始 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信