技术精通的高级软件开发人员可以研究什么以保持改进[关闭]


15

假设您已经编程超过10年了。您知道许多语言,但很少有非常详细的语言。您一直在设计解决方案的体系结构,从事并交付了较大的项目。您一直在研究模式,最佳实践,有效的编码准则,单元测试,多线程等。

然后,您逐渐感到一种感觉,即您阅读的大多数书籍每100页文字提供的信息越来越少。因此,他们开始提供递减的回报。您仍在学习,但不再进步。

与以前相比,为什么学习的生产力下降?

那时,它曾经改变您的思维方式,教给您新事物,拓宽了视野,后来改善了您当前的职业,或者允许发明/管理/建造新事物。为什么不再是这种情况?


9
按照常见问题,关于下一步应该做什么(项目,书籍,技术或语言)的问题不在讨论范围之内。我可以理解您的观点,但是您可能不知道与软件开发有关的所有知识。您的问题是您感到无聊,或者陷入了智力上的衰退。促使您摆脱困境的事情在很大程度上取决于,对于其他人而言可能完全不同。但这就是答案:走出舒适区。了解嵌入式系统,数学,图形或您感兴趣的任何内容。
Caleb 2013年

2
我不认为这个问题仅限于OP下一步应该做什么。它是关于专业人员可以用来进一步研究的一般方法。也许可以用更好的措辞来表达,但是对我来说,它的读法不像“下一步该做什么”。
弗兰克(Frank)

3
好吧,老实说,我不知道这些天哪些问题不是题外话。最近在这里很难找到有趣的讨论。好吧,W / E,只是锁定的话题...
编码器

2
我相信可以重新编辑该问题。至于我可以告诉大家,这个问题提出:“报酬递减...学习模式,最佳实践,有效编码准则,单元测试,多线程...”是相当切合主题的程序员
蚊蚋

2
尝试将其教给他人时,您将获得对主题的更全面的了解。
JeffO

Answers:


23

首先,尽管提出了问题的方式,但任何学习都没有止境,尤其是在我们领域,因为新事物的产生比您阅读有关它们的速度快。就是说,当您要改进时,我将考虑以下类别。为了获得最大的利益/投资回报,您应该从最薄弱的领域中选择一些东西。

基础知识

尽管知道编程语言并具有实践经验,但人们经常(尤其是自学)在其中一些基本的基础知识还不完善的领域。考虑一下诸如数据结构,算法,缓存策略,哈希函数等...

请注意,这还包括编程语言的基础-从编译器,优化技术和类型系统到类别理论,单子语法等等。

如果您受过良好的教育,例如已经获得了大学学位,那么您在这一类别中可能已经很强(当然还远远不够,但基础很强)。否则,请尝试阅读这些区域中的几本书,以查明您的曲目中是否有您根本不知道的东西。此类别是最容易高估自己的类别。

范式知识

当程序员出现时以为他们是万能的,而对主流范式却一无所知时,我总是感到惊讶。如果您认为面向对象是终结,那么这就是您需要改进的类别。如果您认为函数式编程也存在,甚至可能听说过逻辑编程,那么它仍然是一个不错的选择。还有更多的范式,对它们的了解对您产生类似于编程世界新视野的深刻影响。

只是不要忘记:关于什么可以被视为范式的论点经常(本质上是哲学)。不要被这些所困扰。您的目标应该是拓宽视野,这意味着了解这些东西,无论是否有人将X视为自己的范例,都不会对此产生任何影响。

专业知识

所有这些中最简单的-同时最不有用。当然,您可以致力于一种技术并了解其所有来龙去脉,但是您应该准备为此付出代价。随着技术的日新月异,它们的发展速度越来越快,这几乎可以保证,在这里投入的时间将在未来几年毫无价值。

收益递减的问题也在这里闪耀。从本质上讲,成为某事的专家意味着您必须在狭窄的主题上花费无数的时间,因此,根据定义,学习新知识将花费您很长的时间,而新事物将是一个很小的小难题,不会改变任何人对任何事物的看法。

领域知识

是因为这是您的工作领域,还是仅基于您的个人兴趣,但是成为计算机科学某个领域的专家是非常有价值和有益的。我在这里不是在谈论CS的其他领域,例如计算机图形学或AI。相反,请注意计算机已经占据了每个人的生活,这使得其他每个领域都受到计算机和您可以进入的领域的约束。

这显然属于“您的领域之外”类别,但它不是一个尖锐的数学“外部”,而是一个应用领域。考虑药物:我不建议您成为医生。但是,学习医学基础以将您现有的计算机科学知识应用于该领域的问题确实值得。范围从可视化技术到机器人技术,再到专家系统和仅用于会计/管理的数据管理。尽管您已经完成了所有这些操作,但是在另一个领域中进行操作最终可能会带来全新的体验。

不过请记住,与其他类别相比,这是您方向发生更大变化的一种方式。您在日常工作中可能没有与该领域的任何联系,因此很难实现。它甚至可能意味着切换工作。另外,您将需要有关新领域的某种认证-毕竟您是该领域的完全新手,并且您必须与跨学科研究的毕业生竞争,这些学科已经开始了他们成为该领域专家的旅程。

补充知识

正如Mike Brown所补充的,在您当前的工作中还存在一些知识领域,但是并不是绝对必要的。您不需要成为项目经理就可以了解项目管理,但是像往常一样,更多的知识将使您对另一端的变化有更深入的了解。甚至可以将这一点推广到专注于软技能的地步。我猜每个与其他人一起从事真实项目的人都知道这些价值。


+1,尤其是对于“领域知识”而言-至少对我有用。
布朗

1
我100%同意你的意思。我对更深的基础知识非常感兴趣。效果是,我现在就参加了编译器课程。你没有触及正是我作为补充的知识分类:平面设计,项目管理等
迈克尔·布朗

范式+1 -我从事OOP /过程约10年了(并且对此感到厌倦),然后我开始学习函数式编程,并为整个世界打开了眼界。
保罗

9

我认为软件一直在发展,因此强调不断改进。我知道您来自哪里,最近感觉有点相似,现在我正在SQL Server中追求MCSM。

学习下一种新的语言或框架,或当前“热门”的东西。每年都有一种技术,框架或语言问世,或者达到极限,使其本身成为一个时髦的词。在过去的几年中,我可以想到其中的一些:node.js,Ruby,jQuery。这也可能会影响您对其他平台的思考方式,例如,了解ROR对使用Grails的Java的影响。

总有改进的余地。我认为您不可能在所有方面都成为专家,而且我读了很多书,而且我一直在学习。我确实同意您所说的关于每100页学习越来越少的说法,但是当您是主题专家时,这是可以预期的。

关于您可以做什么,这里有一些建议:

  1. 与社区变化以及人们正在“进入”的事物保持同步。至少要学习新的堆栈,以便您有足够的建议来推荐它们

  2. 参与这样的问答网站,在这里您可以将自己的知识传授给他人。如果您花时间阅读其他人的贡献,您可能会学到一些东西,至少您可能会看到其他人的观点。

  3. 选择与您的工作有关的爱好。有很多兴趣爱好,包括交叉思考,人工智能,乐高头脑风暴,RaspPi等。

  4. 在尝试增加知识的广度的同时,请注意增加深度。例如,了解EF在幕后的工作方式,因此您可以诊断那些怪异的极端情况,而不仅仅是使用框架。

  5. 追求顶级认证只是为了证明您了解您的知识

就我个人而言,我会告诉你目前有什么想法。我正在阅读每个软件架构师应该知道的97件事,尽管我只是部分了解它,但它却提出了许多明智的建议。该书可通过我提供的链接免费在线阅读。

就我最终从事的爱好而言,我进入了车辆诊断程序(显然是通过计算机),这使我得以完全维护自己的汽车。我真的很享受与我一起工作的时间。


好笑,我认识97个事物的作者之一;)
Michael Brown

这是一本好书。
2013年

别客气。很好,不是吗。
2013年

1

在确定了某点之后,您已经对某个特定主题学到了足够的知识,可以随时随地学习新知识。当您觉得没有太多要学习的基础知识时,该开始获取补充知识以补充您的基础知识的时候了。

对我而言,我将深入研究UX和图形设计,因为我认为这将使我作为开发人员更好地提供不仅优美的代码结构,而且还为最终用户提供优美的界面。

您可以采用的其他主题包括项目管理,业务分析,系统管理和软件过程改进。如果您发现自己在特定的领域工作,那么更深入地研究该领域可能是有意义的。例如,最近我一直在金融服务业中投入大量精力。我已经注册了Coursera上有关财务建模的课程,并且类似课程将帮助我与客户交流。

总会有更多的东西要学习,这需要跳出框框思考。


0

这个问题有两个部分:为什么学习起来更困难,又能做什么?

第一部分非常简单-较高级的主题更难。学习如何编程虽然很困难,但是要学习如何良好地设计程序要困难得多,甚至要学习如何设计大型应用程序也要困难得多。事实是,高级主题很难,否则就不会高级。您将需要花费更多的时间来学习它们。有更多时间练习去掌握它们。

至于您能做什么,您似乎专注于成为高级软件工程师的技术方面。与学习语言和框架相比,您可以做很多事情来帮助您的团队创建软件。软技能,例如指导其他开发人员,协商要求,项目管理,程序设计,沟通远见,实施团队规范……所有这些重要内容,对于使开发团队(而不只是您)有效地开发软件而言,都是必需的。


-3

每次我访问Lambda The Ultimate网站时,我真的不会/不会认为我知道这一切-在计算机科学领域。

LtU将为您提供范式和尚待学习的理论知识的良好起点。

“知道的越多,知道的越少。”


1
这个问题如何回答以下问题:“为什么学习的生产力比以前低?”
2013年

因为当我去那里的时候,有些文章包含了我必须学习的90%的新事物。这正是OP所抱怨的:在他的情况下,所学到的东西与所读取的行数之比变得太低了。您也不知道这个网站吗?
Stephane Rolland

@gnat,您误解了题为:“技术精通的高级软件开发人员可以研究什么以保持改进”?
Stephane Rolland

标题后您是否阅读了问题的内容?
蚊蚋

@gnat当然可以,我已经读过他的问题:如果OP只问为什么,那确实是一个陈述:10年后,一位所谓的高级软件工程师阅读了不再改变视线的书,因为高级知识很多。是的,我已经读过了。我笑了 我重复自己说:“了解的越多,知道的越少。”
Stephane Rolland
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.