背景知识
我今年28岁,我从未接受过软件开发方面的正式培训,但是我确实有两个高等教育学历,相当于公共关系学士学位和专注于项目管理的高级MBA。我已经在这些领域工作了大约6年,而在2.5年前,我辞掉了工作/辞掉工作并决定转移方向。
经过一个多月的思考,我决定开始自由招募以WordPress开发小型网站。我是通过自我学习的方式学习的,今天我可以说我从事着谦虚但成功的职业生涯,从零开始为我的客户开发主题和插件-大多数是代理商将他们的部分开发工作外包给中型/大型网站。
但是有时候我会觉得,如果我必须与更有经验的开发人员竞争或合作,那么对数学的了解不够,或者对事情没有一个正式的了解确实使我落后。我一直在寻找更多学习的方法,但我似乎缺乏基础知识。
不幸的是,现在不能再花4年的时间来学习计算机科学,所以我正在尝试学习所有我可以从书籍和在线资源中获取。这种方法永远不会让NASA雇用我,但我现在真的不在乎。我的目标是首先通过认证,并能够称自己为真正的程序员。
我目前正在业余时间学习Java for Programmers(掌握每个人都说的困难/要求的语言),阅读Code Complete的摘录(掌握最佳实践)和也是代码:计算机硬件和软件的隐藏语言(以掌握计算机的内部工作原理)。
所以,我目前的情况是: m基本能够用PHP编写任何完整的系统(借助于Google和几本书),集成了Ajax,SQL和诸如此类的东西,并且由于涉及到所有研究工作,因此可能比有经验的开发人员期望的要慢一些。
但是昨天我被困在试图为FizzBuzz测试找到一个解决方案(不是Google),因为我没有记住
if($n1 % $n2 == 0)
方法的模数运算符。解决这一难题的好方法?我应该学习哪些主题/书,这可以使我更快地解决问题,甚至可以“以程序员的方式”解决问题?
EDIT-似乎对于解决FizzBuzz我不知道的东西有些困惑。
也许我没有表达自己的意思:我知道解决问题所需的步骤。我没有记住的是模运算符。问题在于将基本数学转换为程序,而不是因为不了解基本数学。
在阅读有关《编码恐怖》的内容后,我参加了该测试,很有趣。我只是认为这是我和受过正式训练的开发人员之间良好的基础比较。
我只是以此为例说明了如何在计算机环境中不处理数学,然后才让我浪费时间查找诸如模运算符之类的基本事物,以能够解决简单的问题。
#1 楼
在您的情况下,由于您是自学成才,并且已经拥有一种似乎是一种良好,健康且无BS的学习方法。仍然有一些建议...实践使之完美
我认为您应该参与编程练习,例如:
欧拉计画,
经典的99种Prolog Puzzles(对任何一种语言都一样好),
TopCoder,
Google Code Jam,
等等。
甚至可以抓住您周围知名大学或本地(或远程)编程竞赛的过去考试题。例如,我们在法国有一个很好的软件供有抱负的高中程序员使用,称为Prologin,它确实每年为您提供一系列令人头疼的难题(虽然可能只是法语,对不起,但这就是我的意思。 )。
更多信息:在哪里可以找到编程难题和挑战?
经典书籍和参考文献
我们还可以推荐很长的清单众多出色的书籍,但我想说的是,禅宗的答案是没有唯一正确的方法来启蒙。
很难告诉您哪些是最重要的。因此,请像往常一样正确阅读大量内容,以学习避免的一般陷阱以及可以遵循的最佳做法。
有关更多信息:
列表免费提供的编程书籍
每个程序员应该阅读的最具影响力的书是什么?
每个人都应该阅读哪些书?
每个人都应该阅读哪些论文?
每个人都应该观看哪些视频?
甚至对计算机科学和编程感兴趣时从哪里开始?
成为程序员Motherf * cker(请原谅他的法语;)他的教程和资源清单值得它)
推动极限
此外,还要寻找可挠头的材料,例如:
亨利·沃伦(Henry S. Warren)的《哈克的喜悦》,
约尔格·阿恩特(JörgArndt)进行的物质计算。
不一定要作为当今要做的事的一个例子,但是值得尝试弄清楚那里到底发生了什么。
Peer Systems是动机性的
您可以还想潜伏(并参与)以下社区来与他人面对面,从而逐步提高您的技能。
P.SE,自然而然,
StackOverflow,
CodeGolf.SE,
CodeReview.SE,
甚至是CS.SE上的疯子(或像Crypto这样的专门人员) .SE),
或许多其他SE或非SE社区站点。
兼职教育
如果您没有时间或如果您打算再参加四年制课程或类似的课程(可能甚至没有必要,也不一定要获得奖励,而且费用昂贵),可以考虑在线寻找教材。当然,这些不限于计算机科学。
由于最初的MIT OpenCourseWare努力,现在有成千上万的大学紧随其后,并且您可以找到许多大学水平的课程资料自由。自己导航和阅读并不总是那么容易,但是有些做得很好。要从头开始并进一步提高,请考虑同时考虑可汗学院。
更进一步一些,免费提供真正的在线课程,您同样可以访问课程的材料,但他们还提供有节奏的讲座和定期的自我评估。例如,访问Coursera或Udacity。
上面的大多数内容经常在YouTube或iTunesU上发布他们的讲座,因此,如果您对知识的渴求还没有被所有知识所阻止,那么您会发现很多材料。以前的链接。
如果您想提供与“真实”大学更近的体验的东西,可以考虑使用远程大学,这也使您可以兼职工作,但需要跟上步伐,并进行自我评估和结业。年度考试(有时是现场考试),例如OpenUniversity及其国际版本。
激情使您如愿以偿
寻找宠物项目:创建自己的软件或加入一个或多个现有软件项目并做出贡献。
代码,代码,代码。然后编写更多代码。
(并引起足够多的关注,以批评您和不同观点的代码)
法语说:
努力造就杰出的伪造者。
继续做自己正在做的事情,最终您将成为专家。需要时间和工作。
另请参阅“我正在学习”以获取更多建议。
PS:尽管这是用于采访的非常有争议的工具,但是为了确定好候选人,我经常使用FizzBuzz至少清除掉令人难以置信的“坏人”。因此,请在这个练习的东西上加油! :)
评论
超级超级! :)感谢您的清单。欧拉计划和难题似乎非常好。而且我已经使用了其他一些SE网站。将深入其中。
– moraleida
2012年6月13日17:09
@moraleida:很高兴您喜欢这个答案。别客气。
– Haylem
2012年6月13日17:15
关于您的PS:我现在并不真的担心面试,因为我真的不想回到公司当雇员。在阅读有关“编码恐怖”的内容后,我参加了该测试的乐趣。我只是认为这是我和经过正式培训的开发人员之间的良好基础比较。 :)
– moraleida
2012年6月13日17:22
+1就是为什么在最后使用FizzBuzz的原因……我经常在这里或博客上看到有关人们批评它的评论,因为他们认为公司正在使用它来识别超级编码器。 (对那些公司:您做错了!)
–伊兹卡塔
2012年6月13日在18:06
这在某些链接上列出,但我认为它值得一呼:我还会环视rosettacode.org。它有许多用各种编程语言解决的不同问题。阅读代码和编写代码一样重要,这是一种很好的做法,也是查看许多解决同一问题的不同方法的好方法。而且,如果您发现的问题尚未以您所知道或想学习的语言解决,那对您来说就是编程上的挑战。
–马克·里德(Mark Reed)
2012年6月13日在22:28
#2 楼
I didn't have the if($n1 % $n2 == 0) method memorized.
我已经很长时间没有编码了(大约在27个月前开始自学SQL,大约20个月前开始在Perl中进行编码),但是上面的引用听起来像是我做过的一些事情听说过以前的学生:
我应该如何记住用于每种问题的集成技术?
我没有记住我应该加或乘概率,或者
使用“ n select k”或使用阶乘。
等一下!您说昨天x等于2!现在等于
零吗?!
好吧,最后一个可能有点苛刻...但是我要说明的要点是解决问题并不是记忆。如果是这样的话,那么一些天才可以对计算机编程,以解决所有问题,而我们每个人都无需再考虑(那将是一个多么地狱的世界……)。
现在,它的确,任何智力上的努力至少都需要一点记忆。特别是,如果要使用PHP编写代码,则应该了解基本数据类型(数字,字符串,数组),可以使用它们的基本内容(对于数字:加,减,乘,除和模数;用于字符串:串联,子字符串,替换和至少对正则表达式的一些了解;对于数组:串联,固定元素,拼接元素,循环,计数元素等)以及可以使用的基本逻辑结构(if / then / else语句,foreach循环,while循环等)。
然后,当您遇到问题时,请使用该问题来提供所需工具的上下文。对于FizzBuzz,您需要确定一个数字何时可以被3、5或15整除。好吧,所以我们正在处理数字....什么基本工具可以让我们知道一个整数何时可以被另一个整数整除?好,模运算符。因此,使用它。 (当然,如果您的电话号码是
$n
,您可能会看中$n
的最后一位数字是0还是5,和/或$n
的位数加起来等于3的整数,但是我离题了……)您需要对1到100之间的每个数字执行此操作,因此为了避免进入心形隧道,请使用foreach
循环。这个故事的士气是,如果您一方面说“我是基本上能够用PHP编写任何完整的系统”,另一方面,您无法编写FizzBuzz,那么第一个断言是不正确的。我的一些以前的微积分学生发誓要理解这些概念,但是他们只是无法解决考试中的问题……或作业问题……或测验问题。他们的理解也是错误的。
停止找借口,学习基础知识。
评论
我不背诵,而是代谢这些东西并将其作为直觉的一部分。始终寻求扩大这一范围。
– ncmathsadist
2012年6月14日下午0:28
@ncmathsadist-是的,扩大直觉是关键,但是即使直觉也必须依靠少量非常基本的概念和事实的记忆。
–user11946
2012年6月14日下午0:42
对于记录,您不必将数字乘以3,然后再添加数字以查看其是否可以被3整除,您只需添加数字即可。例如864,8 + 6 + 4 = 18可被3整除,864也是如此
– Oztaco-恢复莫妮卡C.
2012年6月14日22:14
@ leaf68-h! [拍打额头]你是绝对正确的... lemme编辑!
–user11946
2012年6月14日22:20
#3 楼
您可能会认为FizzBuzz是一个玩具问题。什么时候需要在实际程序中使用模运算符。但实际上您一直在使用它。三个常见的示例:您正在显示表格,并且希望不同行的背景色交替出现。您检查一行是否为偶数(
row_number % 2 == 0
),并为偶数行显示一种颜色,为奇数行显示一种颜色。您有一组要循环遍历的对象,并且要打印出一个表,每个表包含N个对象行;那么何时添加换行符的标准是(item_number%N == 0)。我实际上对这个确切的行为有一个SO问题,尽管在该模板语言中,条件
if item_number % N == 0
被写为等效条件(if item_number|divisbleby: N
)。您正在执行多个操作,希望将它们分组为一个事务,该操作仅在出于效率考虑,小组人数达到一定规模。也许您使用的是Google数据API,并且您不希望为每个操作创建一个新的交易而产生HTTP标头/身份验证开销,所以将它们分为50个操作组。或者,您正在将记录保存到数据库中,并希望在其大小合理时提交事务。诸如
if cur_item_number % 50 == 0 then commit_data
之类的东西。 当然,还有其他方法可以完成所有这些事情。但是,您无需使用模数运算符或将浮点除法与整数除法进行比较即可发出嘶嘶声。例如,对于FizzBuzz,您可以执行以下伪代码。
div_by_3_rem = 0
div_by_5_rem = 0
for(i = 0; i< 50; i++) {
if(div_by_3_rem == 0 && div_by_5_rem == 0) {
print "FizzBuzz"
} elif(div_by_3_rem == 0) {
print "Fizz"
} elif(div_by_5_rem == 0) {
print "Buzz"
} else {
print i
}
div_by_3_rem += 1
div_by_5_rem += 1
if(div_by_3_rem == 3) {
div_by_3_rem = 0
}
if(div_by_5_rem == 5) {
div_by_5_rem = 0
}
}
总而言之,如果有一天想成为一名优秀的程序员,请不要跳学习一本语言书籍。是的,一本PHP / Java书将使您从google / stackoverflow和半工作程序中获得答案的速度比其他任何东西都快。但是要真正能够知道如何编写质量最佳的程序并像程序员一样思考,您需要对真实的CS书籍有所了解。
从一本介绍编程语言和CS背景的CS书籍开始,以著名的《计算机程序的结构和解释》示例(将教Scheme – Lisp方言)或其他类似Think Python How to like a computer的例子进行介绍科学家(我没有读过)。这两个都是免费的在线。
您最终需要阅读一本好的算法书籍,最好的是CLRS的算法(不是免费的),尽管这本免费的在线算法书籍可能是低成本的替代品(尽管如果您可以购买CLRS) 。算法书将教您如何思考解决计算机问题,并向您介绍各种数据结构(数组/链接列表/堆/二叉树/ B树/哈希表)以及需要了解如何最佳使用的重要算法。您不需要记住每个证明,也不需要知道如何完美地编写每个算法(曾经使用斐波那契堆的算法);但是您应该直观地知道两个嵌套的for循环是O(N ^ 2);比较排序最多为O(N Ng N),二进制搜索为O(Ng N),可以找到O(N)的中位数,为什么硬盘数据库使用B树等。至少,对算法书籍的深入了解将帮助您获得google / facebook种类的技术编程访谈。在阅读编程书籍时,不要只是浏览/阅读。如果您通过示例和问题进行工作/编写代码,并通过逻辑进行积极思考,您将学到更好的东西。
读完CS和算法书后,我还会推荐一本有关软件工程的书(“代码完成”或“实用程序员”),该书将教授如何编写可维护的良好代码的最佳实践。 (清晰的名称;仅在必要时进行注释;将代码放在一起;在必要时进行重构;使用版本控制等)。
评论
最好的评论;虽然我看到很多人说练习,练习,练习,但这不是走的路。他们说,实践可以使事情变得完美,但这只会加剧不良行为。致OP:将您自己暴露于其他概念,了解为什么比起泡排序更喜欢快速排序。只有完美的实践才能完美。获得该CS课程。
– Pieter B
2012年6月14日下午6:37
感谢您发布示例代码,我已经以为自己必须这样做。 –我们可以仅使用“与非”门构建任何复杂的逻辑电路;我们的语言几乎没有图灵完成的简单操作;我们不需要那些花哨的操作员来解决问题。解决问题不仅仅在于了解合适的工具,能够解决问题,找出适合您自己的知识的解决方案,也是程序员的才能。
–戳
2012年6月14日上午8:21
#4 楼
但是昨天我被困在试图为FizzBuzz测试找出一个解决方案(不是Google),因为我没有if($ n1%$ n2
== 0)方法记住。
没有人记住那件事。您应该自己提出。如果您知道模数运算符并且知道它的作用,那么它就非常适合FizzBuzz问题。
我将在这里闲逛,一般建议问题出在PHP。我想说Java是有史以来最糟糕的语言,而PHP是有史以来最糟糕的语言,因为即使它的创建者也承认从未设计过它。当您的环境实际上是不这样做的定义时,很难学习良好的软件工程实践。而且依靠框架来完成所有工作并不能说太多。
我目前正在业余时间学习Java For Programmers(以掌握一种语言)。每个人都说困难/苛刻)
Java是现有的最简单和最糟糕的语言之一。它只有一件事:垃圾收集的手动继承。如果您的朋友或顾问说Java很难,那就找到新朋友。 C ++是一门难懂的语言,其中包含许多概念,没有人会提出异议。您还可以执行C#,至少包含一些泛型和lambda。
当您的语言是由无法编码的人设计和实现的,而您依赖它时,您将如何学习编码关于您所做的一切的框架?
评论
@moraleida:查找您没有理由使用的运算符的语法没有什么可耻的。
– DeadMG
2012年6月13日在17:57
@moraleida:在那种情况下,我同意没有任何实际问题。我认为没有任何专业人士,面试官或其他人应该介意,如果您能清楚地表达自己的意图,那么您是否无法完全掌握另一种语言的确切语法。
– Haylem
2012年6月13日18:11
同意大多数观点,但是为什么您认为Java是“有史以来最糟糕的语言”?我不是Java的忠实拥护者,但这听起来很自以为是。
–Casey Kuball
2012年6月13日19:26
-1表示当问题与所询问的内容之间的关系为零时,以问题为借口来抨击PHP。
– StasM
2012年6月14日下午0:29
@Darthfett:我可以写一篇文章。参加SO C ++聊天,您可以阅读它:P
– DeadMG
2012年6月14日上午10:55
#5 楼
我认为您必须认真研究为什么您被困在试图弄清楚FizzBuzz的原因。因此,假设您还记得有一个运算符,给出的$n
告诉您它是否可以被数字整除。而且您很不幸忘记了这是什么。很好,您为什么不继续尝试其他方式呢?如果您对代码有所了解,则应该能够找到其他十二种方法。它们中的一些可能看起来很奇怪-例如,将5的每个倍数放在一个数组中,然后检查$n
是否在其中-这是一个不好的解决方案,但仍然是一个解决方案。但是,您是说没有任何东西,只是被卡住了。这可能是更大问题的征兆。 编程中需要学习两件事。
技巧包。如何在PHP中读取文件,如何在Java中解析XML,如何在Python中连接数据库。有些人会记住它,但实际上只有每天使用它们,这些事情才值得记住。否则,您只需转到文档并进行查找。这些东西除了它们的字面形式外没有任何实质内容,您只需要知道特定魔咒的发音和结果即可。
心态。这是最重要的。这就是您编程的方式,与记忆无关。您需要了解如何向计算机解释您想要做的事情,执行该操作的方法以及在任何特定情况下使用哪种方法。现在,有了现代工具和现代文档,似乎可以使用“技巧包”方法在PHP中编写整个CMS,但是一旦遇到没有现成解决方案的任务,您就会“陷入困境”。
从您的描述看来,您似乎是从第一部分开始的,而在第二部分中却有所欠缺。良好的CS课程通常可以提供很多帮助,但这不是唯一的方法。尝试解决不同的问题并了解如何解决这些问题,请阅读此处引用的基本书籍-所有这些都将有所帮助。一旦掌握了程序员的思想,您就会发现使用新手法将不会有太大问题。当然,您必须在这里和那里搜索Google,但是您永远不会被束缚。
评论
“并阅读有关如何解决这些问题的信息” –实际上,针对同一问题寻找不同的解决方案。尝试了解它们中的每个,比较它们的共同点和不同之处。理解这些事情,您将自动选择针对同一问题的不同思考方式。
–戳
2012年6月14日在8:27
我会完全同意心态。一旦掌握了思维定势和概念,学习基础语言结构就变得容易多了,并且您将自然而然地想到其他做事的方式。 (例如,对于fizzbuzz,所有可被5整除的数字都将以5或0结尾,因此不需要该部分的模数操作数)
–JohnP
2012年7月5日在15:51
#6 楼
您善于发展,而您擅长于其他任何事情:练习。在编程世界中有一个很好的概念称为代码kata。从本质上讲,这是一个练习,您在此中编写一个相对较小的问题的解决方案,分析优缺点,将其全部废弃,然后再次进行。 FizBuzz本身就是一个kata。因此,做到这一点,并做更多的事情。当您发现看起来不太好或不起作用的事情时,请进行研究并彻底检查它。在问答网站上提问,阅读文章和博客,看看其他人如何处理此问题,然后实践所学到的知识。,在实践过程中,您将学到多少其他数学知识? /您可能需要的理论背景。如果您遇到一些无法解决的问题,请阅读这些概念及其先决知识,然后逐案决定是否要学习课程或具备什么才能扩展自己的知识理论背景。
评论
这个代码kata看起来也很棒!
– moraleida
2012年6月13日17:40
#7 楼
...因为我没有记住if($ n1%$ n2 == 0)方法。
我的意思是说,你没有不知道和/或不记得模运算符。在这种情况下,首先要检查您使用的语言的语言结构。复习您不“知道冷”的任何东西,并学习您不知道的任何东西。
评论
+1。当其他答案都在谈论如何成为一个更好的工匠时,了解实际存在的工具可能更为重要。是否曾经尝试过轻易地卸下损坏的螺丝?还有其他解决方法,但是当您最终了解针对它的工具时,这是一个额头。我想说OP应该很早以前就仔细研究过任何PHP运算符列表,然后与不熟悉的运算符一起玩。
–蒂姆·莱纳(Tim Lehner)
2012年6月13日20:48
#8 楼
保持编码,保持学习。最终,您将以足够的奉献精神看着FizzBuzz,想知道为什么还要考虑它。许多公司在面试的早期就提出了FizzBuzz风格的问题,因此一次失败就意味着您至少了解了有关招聘过程的知识。只要继续编写代码,就可以了提出项目构想并进行研究。
#9 楼
我可以建议在Java,C ++之前学习JavaScript吗?您的理由:用于前端设计(jQuery,一些WordPress插件,Twitter提要,通过JSON将数据库加载到浏览器中而几乎没有后端工作,进行表单验证等) )
可通过Node.js在服务器端使用
可用于为iOS,Android,Win8等构建混合应用程序
学习JS可帮助您了解不同浏览器上的网页性能,更好的设备
JS被设计为对新手更友好
您已经了解HTML和CSS(我希望;),因此有助于JS
免费的新手资源
http://www.codecademy.com/tracks/code-year https://stackoverflow.com/tags/javascript/info
我还有大约10个链接,但SE直到我允许我才发布它们达到10名。
学习C ++,Java等也很有帮助,但是IMHO不能像JS那样对Web编程产生整体影响,因为您可以在前端和后端都使用它。
玩得开心!
评论
tutsplus.com/course/30-days-learn-jquery ###高级和免费深度学习thinkvitamin.com/code/tips-on-learning-javascript netmagazine.com/tag/javascript?ct=tutorial blog.boyet .com / blog / javascriptlessons nczonline.net/blog/tag/javascript javascriptweekly.com jsperf.com/popular我确定您了解SitePoint等###付费学习shop.oreilly.com/product/0636920023982.do“适用于PHP开发人员的JavaScript”;)teamtreehouse.com/library/search?q=javascript
–tomByrer
2012年6月14日5:09
以及当您准备工作时:jobety.com
– imns
2013年12月15日23:33
#10 楼
您可以找到并帮助其他人,例如Give.code(披露:我的网站)或Code for America或其他内容。这是一种很好的途径,可以使您更深入地了解非PHP网页制作问题,并且感觉也很好。当您要解决(或帮助解决或只是理解)问题时,拿起代码自然是一路走来。有目标是学习知识的最好方法。
评论
太棒了!这确实是学习的好方法!
– moraleida
2012年6月13日19:43
#11 楼
因此,您无法解决FizzBuzz问题。没关系现在您可以了,我敢打赌,您将永远不会忘记各种方式。不要仅仅因为您无法解决一个愚蠢的问题而就急于将自己打造成一个不好的程序员。那是一个问题。另一个是您似乎对编程学习曲线感到有些落伍。正如其他人所说,请保持编码并继续阅读。您做得越多,就会越好。就这么简单。从您认为背景上最大的漏洞开始,然后从那里开始。
评论
(这听起来真令人振奋。不确定我在那里是否成功。大声笑。)
– Nick Spreitzer
2012年6月16日下午5:38
#12 楼
我不认为我会拒绝推荐某人,因为他们不知道这是模运算符,但前提是:他们知道这是某种运算符。
我提示他们时,他们可以告诉我什么是“模数”。
并非总是(虽然通常)%,有些语言很奇怪。地狱,十年后,我不能诚实地说我知道所有的perl运算符(又是一艘太空飞船又做什么?),也永远无法完美地记住按位运算符。自从我做了甚至需要这些东西的事情已经过去了几年。
让我犹豫的是向某人推荐的原因是,如果这导致他们因错过该问题/测试而感到恐慌。那可能给我的印象是它们有点太绿了(除非这是入门级别的职位)。没有人需要做到(或觉得有必要)记住这些事情的人。您需要了解更广泛概念的人。如果您在Google上查询,就不会有人在意,但是您必须对面试充满信心,知道知道%没什么大不了的,而且您知道在执行快速google时会使用“运算符”作为关键字搜索。
这也是一个主意...但是,如果您当地的社区大学有compsci计划,您的其他学分将全部转移,您可能只需要大约20个学分。 2年制学位。一个学期几乎可以完成。他们会让您学习数据结构课程,并希望算法能使您变得更强壮。
#13 楼
这是示例课程:http://www.ox.ac.uk/admissions/undergraduate_courses/courses/computer_science/computer_science_.html
我建议先阅读以下内容:
面向对象的程序设计(非常普遍,在任何地方都可以使用,这是Java出现的地方)。
并发性(编写在现实世界中不会神秘崩溃的Java程序,了解死锁)
数据库概念(大多数应用程序需要保存数据,理论在这里很重要)
编程范例(了解至少一种非oops语言,最好是功能性语言,以扩展您的思维范围并学习新知识)
当我看完四年的比较科学教育时,说实话,我认为您只需要认真学习几门课程。
数据结构和算法(这里您需要数学才能变得非常好并受到其他程序员的重视),计算机网络和操作系统被认为是最重要的。可以处理汇编代码的其他主题对于您而言并不那么重要。软件工程和测试向您展示了有用的概念,您可以随时了解。
只需下载一个pdf文件,以直观的方式解释这些概念,就可以继续使用。
在某些计算机科学课程中,至少在我的课程中,第一个一年是对工程学所有领域的介绍,例如机械,电气,土木等。请注意,有很多复杂的数学,对于今天的大多数应用程序员而言,这可能还是不重要。因此,当今许多工程师实际上只接受了3年的计算机科学专业知识培训(希望这会使您感觉更好:)
答案的关键:您每天可能需要一些时间来学习,例如一个小时左右,并在一段时间内成为一个不错的程序员。只是继续学习。并记得每天编写一些代码。
#14 楼
对我来说,我的策略是仅攻击与我所从事的工作有关的问题,所以我的建议是您不必全部学习,只需阅读与您所从事的工作有关的那些事情,因为如果您尝试一次学习所有内容,那么有一种倾向,就是您容易陷入困境并最终讨厌编程。和平
评论
当我读到以下内容时:我基本上能够用PHP编写任何完整的系统(借助于Google和几本书),并将其与不知道if($ n1%$ n2 == 0)的用户结合起来,您曾经接触过用PHP编写的东西。我认为您所做的大多数事情都超出了简单的模运算。您能否对自己认为的能力有更多的了解?我也是一个自学成才的程序员..十年来一直在使用它,所有时间都在网络上..那时没有网络开发课程...我认为自己学习会有一些好处。您确实会想了解基本的OO原理和设计模式。在解决问题时,它们可以帮助您将它们放在脑后。.通常,我发现我并不总是拥有别人所拥有的词汇,但是如果您喜欢编码,并且喜欢编写优雅的解决方案,那么最终您就能按照自己的方式编写代码
关于卡住的b / c我没有记住%问题,值得注意的是还有其他方法可以做到这一点:(假设$ n2!= 0)if(is_int($ n1 / $ n2))或if(( $ n1 / $ n2)==(int)($ n1 / $ n2))知道关键字是一回事,而知道如何在没有内置解决方案的情况下表达基本思想又是另一回事。
@grossvogel就是这样!人们喜欢Fizzbuzz的原因之一是有很多解决方法。了解您是否知道模运算符不只是一个技巧。编程的一项关键技能是能够将问题从陈述的形式转化为最适合您的知识/工具/资源/等的形式。
不知道模运算符不是导致FizzBuzz失败的原因。当您发现缺少的东西时,您必须能够解决它。