五年前,我在塔夫茨大学的最后一个学期修了COMP 105(编程语言),那堂课的前半段几乎把整个学期的鱼雷都弄得一团糟。 我经常在下课的时候开始这些项目,并独自进行研究。 许多关于作业的理论性问题没有得到0分。 每当我赶上105分时,我就会落后于其他班级。 通宵达旦的人都很频繁,而且效率低下。
尽管上半场表现如何,但下半场却取得了史无前例的反弹,达到了我所获得过的最骄傲的成绩。 我在105中学到的东西,例如函数式编程,理解您不经常使用的编程语言以及解决队友的问题,所有这些对于学习新语言和在工作中进行编码都是非常有用的。
即使您没有成为学者的计划,您也确实可以从课堂中学到很多东西,所以我想分享我的建议,告诉他们如何做得好,如何在塔夫茨大学和其他学校的类似课程中获得最大的105分。 提示似乎都很明显,但我亲眼看到,遵循提示对于将105个噩梦课程更改为塔夫茨大学中最酷的课程之一至关重要。
我给的第一个提示是追溯性的,但是自我同情心不仅在105中而且在整个软件行业中都非常重要。 可悲的是,倦怠和冒名顶替综合症(感觉就像您将羊毛拉过人们的眼睛,无法到达自己的目标,而无法内化自己的成功)是“ 10x工程师”化技术文化中的大问题。 我自己在105岁时就解决了很多倦怠和冒名顶替综合症,而自我同情会帮助很多人。 它使“让自己成为n00b”变得更加容易,这是一种健康的成长心态,可用于学习材料,从TA那里获得帮助,以及从一名经验丰富的工程师那里脱颖而出。
作为技术自我同伴的介绍,我强烈推荐Compassionate Coding创始人April Wensel撰写的这篇博客文章。 在那篇文章中,她建议您说出发生问题时的感受,而不是让情绪保持不定状态,像对待密友一样对自己说话,即使错误完全是您自己的,并认识到您在您正在处理的事情上并不孤单。
顺便说一句,这不仅仅是个流行词。 许多初创公司通过拥有无责备的文化而获得成功,因此当出现问题时,人们可以放心地报告可能涉及他们编写的代码的问题。 所以对我来说,自我同情就像给自己一种无怨无悔的105岁文化,带来很多相同的好处。 这包括减轻自己的压力,以减少通宵人员和深夜能量饮料等不健康的工作,强调从错误中学习,通过认识到自己并不孤单或在105岁时遇到麻烦的不良工程师来减轻冒名顶替综合症,以及在需要帮助时不会感到羞耻。
但是,就像初创企业的无责文化一样,自我同情的确需要实践才能发展,因此,一开始时不要自欺欺人。 它可以比您想象的更快地变成第二自然。 另外,每个人的自我同情方法也不同。 对我自己而言,我发现自己成为支持技术社区的一部分,这些社区鼓励成为“ 10倍”的指导者,例如Go社区以及#CodeNewbie和#NLPNewbie Twitter聊天,这对击败有利于冒名顶替者的技术毒性有巨大帮助。综合症。 selfcare.tech上还有大量自助保健资源,而burnout.io上还有处理倦怠的指南。
顺便说一句,实行自我同情并不会使您“虚弱”。 通过做您需要做的事情来保持身体,心理和情绪上的健康,无论是锻炼身体,去咨询和心理健康服务,社交,甚至只是离开工作去散步,都可以使您的工作更具可持续性 ,您将能够从课堂上获得更多的学习机会 ,这也将使自己在科技行业中变得更加正常 。 对于任何其他阅读此书的人来说,这也不是“讨厌”。 自我同情不是非礼貌,因为同情不是非礼貌!
我在105岁时尝试的#1条建议很容易与所有与班级有关的人交谈。 我在那门课程中犯的最大错误是,直到期中考试之后,我才开始在Halligan中进行结对编程或做作业。 结果,花了永远的时间来理解材料,而我却无法完成大部分的作业,留下了相当多的问题。 但是,与所有人交谈是我学期中卷土重来的皇冠上的明珠,以及使自己熟悉工作中的新代码库和业务目标。
虽然COMP 40被认为是 Tufts CS中的结对编程类,但实际上我想说105更值得这个声誉。 40的任务很长,但理论却不多,因此40 er可以花几个小时额外完成COMP 40的任何项目。 另一方面,105更具理论性,并且有更多新概念可供研究,例如操作语义和类型系统背后的理论。 因此,除了第二眼希望更快地发现错误外,结对编程还增加了第二个人来考虑这些概念。 这使您和您的合作伙伴掌握资料的速度提高了一倍以上。 您将弄清楚如何完成项目,因为您的两个大脑将错误的想法彼此抛弃,直到他们重新形成正确的想法。
除了结对编程外,“与所有人交谈”还适用于在Halligan参加TA和教授办公时间。 助教都是105名学生,与40名学生不同,他们一次回答每个人的问题,而不是一次一对编程。 结果,当我开始上班时,我不仅得到了自己的问题的答案,而且还听了全班同学对别人提出的问题的回答,而这些问题通常是我的盲点。 更不用说,到TA上班时间,您将结识更多的Tufts CS同学,因此这是另一个胜利。
⚠️ 警告 ⚠️:虽然沟通是105年出色表现的关键,但请确保您已阅读班级的学术诚信规则! 我记得最重要的是,您不能向他人展示您的代码或阅读他人的代码,并且在发送作业时必须引用与您共享想法的任何人。但是,显然,请遵循所有规则你的成绩单很干净。
如果您已经学了40岁,那么基本上所有可以帮助您成功的知识也都可以在105岁工作。正如我所提到的,结对编程和在Halligan工作始终可以节省大量时间。 除此之外,COMP 40的设计文件还有很多收获。 它们并不像40岁时那样在105年级中属于您,但是在105岁(以及在职)中,花时间明确说明您想要代码执行的工作是与花生酱相媲美的“秘密酱”来自Carmichael的Stry Fry Night。 当您考虑如何解决项目中的问题并弄清您的代码是否有效时,该计划会有所帮助。 如果您还没有学习40,您还可以通过学习测试驱动开发(TDD)来养成规范的习惯。 许多流行的语言都具有用于此目的的框架,例如JavaScript(Mocha),Go(标准测试库)和Ruby(Minitest)。 顺便说一句,了解TDD也是在工作中进行编码的一项很棒的技能!
40所教的另一个重要习惯是很好地编写代码。 无论是40还是105的编码作业,文档都是您成绩的一部分,因此,如果有的话,它可以给您更多的分数。 但是,与规范一样,尽早编写文档会迫使您在被困在找出如何使其工作的一段时间内,对正在编写的代码进行更多考虑。 此外,如果您只能解决一部分编程问题,那么文档将帮助TA理解您编写代码时的想法。
最后,40个设计文档和结对编程使得很难尽早开始。 正如诺曼(Norman)在我第一次演讲时所说的那样,在105年中,早于105年起步比在许多其他课堂上有用。 我完全同意诺曼的观点; 由于理论上有105个问题,因此您希望这些问题尽快进入您的脑海。 这将使您的大脑开始研究它们,并且还可以弄清您所坚持的特别条件,以便可以在教授和助教上班时间问一些好问题!
我在105岁时发现的另一件事是,只要我上课前读完书,就能跟上学习。 但是,如果我没有事先阅读的话,我会从讲课的一半左右掉下来,这意味着以后我必须做更多的阅读,才能把想法付诸实践。 即使您第一次阅读该材料没有意义,但如果您第二次在课堂上看到它,则在课堂上听到它会更清楚。
如果您以105作为本科生,您可能会第一次在课程中看到很多概念,例如关于编程语言如何工作的理论和数学表示法,以及解释程序如何为您提供诸如以下的功能高阶函数,类型系统,模式匹配和类型推断。 您的教授将是一位非常了解该材料的人,因此您将希望能够继续学习,以便可以向专家学习该材料。 虽然很难找到时间,但如果您愿意花时间进行阅读,那么您将已经对理论进行了一些努力,并且将其投入到演讲中。 这样,即使您没有完全在材料上放下土地,您仍然可以在上次停课的地方上课。
这是我要追溯的另一条提示。 除了在课堂上和阅读时记笔记外,对于家庭作业中的编程问题,拥有记笔记技术来捕获代码时的思维过程和问题真的很有用。 在课程的后半部分,这尤其有用,您将在向使用标准ML编写的解释器中添加功能。 您正在阅读那些作业中的其他人的代码库,因此,这意味着您将花费时间在问题上建立上下文,而笔记可能会加速收费。
符合人体工程学的笔记风格可以跟踪您的想法,有很多好处。 您将能够跟踪不同代码段之间的关系以及您当前了解的代码库中的哪些概念,从而使您的代码思维图可以不断发展。 此外,通过跟踪您目前尚不了解的问题以及您已经尝试解决的问题的想法和方法,您和您的结对编程合作伙伴将更清楚地提出您的问题,以便通过TA真正提高工作效率。
正如我提到的,您正在努力将其他人用ML编写的代码添加到代码中,而这可能不是您的主要语言,因此105中的解释器问题是开发或改进代码注释样式的好地方。 每个人的笔记技术都不同,只要能提高您的工作效率,做笔记就没有错误的方法。 不过,我发现对自己的风格真正有效的方法是使用颜色编码和分段,这样我的眼睛就可以减少工作量,以便在纸上找到我的想法或问题,并使用一小部分缩写来快速书写并仍能理解注释(我的一些符号是从该课程中获得的!)。 我在我最近写的这篇博客文章中详细介绍了我的技术,但是在下面您可以看到一页关于我的风格的摘要。


顺便说一句,为您的编码注释建立一致的样式不仅对COMP 40和105有用。 无论是当我从事这项工作的起步工作还是在家中进行副项目时,我都会定期记下手写笔记。 这样,我便知道应该阅读哪些内容,需要与谁进行交流以解决问题,需要跟踪哪些未确认或已知的错误,以及上次我正在研究的功能在哪里?我回来完成。 这在有机会的软件工程工作中特别有用,您将一起使用多种编程语言,例如,如果我必须跟踪后端的Go代码如何与前端的JavaScript对话,或者必须了解Makefile或Shell脚本。
就像我在本文开头所说的那样,关于105的我最喜欢的事情之一是,它使您可以快速学习所需的任何新编程语言,并且出现了如此多的语言,这是一个很好的时机。 我强烈建议您使用105的知识来学习更多的函数式编程,因为即使在命令式语言中它也变得越来越流行。 例如,在Go中,通常将一个函数作为参数传递给另一个函数,例如在Web中间件中。 功能性功能也在Java和C ++的较大型命令式语言的较新版本中,因此功能性编程将保留下来。
Haskell是我建议从105中直接学习的主要语言,因为除了是我的姓氏之外,它还具有标准ML的所有最佳功能,例如模式匹配和类型推断! 同样,虽然Haskell被定型为仅学者使用的东西,但这种情况正在迅速改变。 像物联网初创公司Helium这样的初创公司在生产中使用Haskell,因此,如果您认为ML的类型系统很酷,但又想在行业中编码,请不要因Haskell的声誉而气our。 您可以查看下面的视频,了解氦气如何在生产中使用Haskell。
如果您不熟悉105之前的函数式编程,那么本课程还将教您如何应对新的编程范例 。 您可以用来学习并发编程,并在其中编写代码以同时执行操作。 诸如Erlang和Elixir之类的功能语言非常适合于并发,因为它们提供了处理不可变数据的安全性以及用于电信的历史。 但是如今,命令式语言的并发也变得越来越容易。 尽管pthread.h是在C语言中使用的噩梦,但Go使用“通过通信共享内存”样式实现直观的并发,Rust的所有权系统保证了在处理并发代码时的安全性,以及类似Haskell的甜美推断型泛型类型系统。
顺便说一句,如果您在105岁之后要去塔夫茨(Tufts)或靠近波士顿,那您将身处一个拥有AWESOME编程社区的城市。 您可以在Meetup上找到您想学习的几乎所有语言的波士顿小组,这样您就可以与您喜欢的语言的专业人士会面,像专家一样学习如何在其中进行编码,找到自己项目的参与者,甚至进行技术演讲。 如果您正在学习某种语言,参加这些聚会是真正使该语言栩栩如生的好方法! 我恰好是波士顿Golang的组织者,如果您对Go感兴趣,欢迎在我们的聚会中体验所有Go经验!
如果您年满105岁,虽然这将是一门艰苦的课程,但您可以在那里学到很多东西,您可以将其用作通晓多种语言的程序员和一般的工程师。 如果您在办公时间定期做些事情,安排课程,提前阅读,做40年来成功的事情,有同情心并记笔记,那么上课会变得容易很多,您会得到更多。 祝你好运,Jumbos,并保持懒惰!

