学习编程时面向未来的自我[关闭]


10

如果您愿意,我想以“面向未来”的方式学习编程。尽管Windows主导了台式机操作系统市场(目前而言),但显然在学习其语言/框架/ API方面还是有很多价值的,依此类推-随着新设备的出现或Windows自身的发展,这种情况可能会发生变化。友好的Windows 8预览看起来不太吸引人...)。

我是否正确地认为,对于后端逻辑/低级编程等具有扎实的C / C ++知识,再结合用于Java的Java等极易移植的语言,将是软件开发的良好基础在大多数系统上将证明有用吗?-我说的是台式PC,平板电脑,电话。


11
没有这样的事情
Job

建立一个书房,并装满书籍。
Edward Strange

4
建造一个巢穴,并装满罐头食品。最有前途的程序员就是那些在启示录之后还活着的程序员。
Tom Anderson

1
不学习编程语言或编码,但主要学习编程,这需要很多年,将近十年,您应该继续学习一生
Basile Starynkevitch

Answers:


31

如果您想成为未来的证明,那么我能给您的最好建议就是不要将自己融入技术之中。

因此,不要盲目学习API。了解如何构思它们。幕后的哲学是什么?它们的优点和缺点是什么?总体上考虑软件,而不是特定技术。

您也可以进行良好的程序设计,进入OOP,AOP是IMO的不错选择。但是,不仅要了解机制,还要真正研究机制背后的哲学。

不要忽略通用计算机科学,例如数据结构和算法,因为它们是跨技术知识,总是有用的。

也请参考良好做法。您通常有十二种方法来做某事,但其中大多数都是胡扯:容易发生错误,难以维护,以后难以理解或难以被另一个程序员理解,等等。。。通常,代码难于编写。因此,请学习如何花更多的精力在编写上以使阅读更容易(因为您阅读的代码会比编写的更多)。

学习有效的调试技术(智能使用日志和调试器)和测试(如何编写可以轻松进行单元测试的代码以及如何使这些测试自动化)。

然后,您需要一般的技术背景。我说的是非常广泛的知识,例如处理器如何工作(高速缓存未命中或分支预测是一个好的开始),UNIX系统,网络协议(如IP,TCP和以太网等)。。。

最后,学习如何学习。如果您知道如何学习,则可以适应。

您将需要一些特定技术方面的丰富知识才能找到工作,但是这些技术确实过时了(例如,请考虑一下COBOL,或者在IE / Netscape战争期间进行Web编程)。因此,不要依靠它们来适应未来。他们将是被聘用的关键,但绝对不是什么才是优秀的程序员和什么才能使您的技能随着时间的流逝而持久。

编辑:如果您只是开始,那么您应该明确地做一些事情。真的。俄罗斯方块或蛇之类的游戏是一个好的开始,而且很有趣。如果您没有把事情做好,那么您将花费大量的时间进行学习,而实际上并没有获得充分理解所学知识所需的经验。

让我们以设计模式为例。设计模式很棒,您应该明确地使用它们。但是,如果使用过度,它们会使您的代码变得复杂且难以理解。您将不得不面对设计模式可以解决的问题,并且要花一些时间来解决它或其副作用,以完全了解设计模式的含义。随着代码的增长,随着时间的推移,设计模式必须用作较小的重构。而且,您会知道何时需要一种设计模式,而当它的好处大于使用它所引起的代码复杂性时。这需要经验。

因此,一定要做好事,他们会从您的错误中吸取教训。我不能再坚持:做点事情


很好...很好的答案,我知道一些-我理解需要整体上理解“编程”主题,而不是您提到的每个主题。我不太担心在该领域找到工作,因为我有一份高薪的职位来管理一个电子商务站点,在可预见的情况下,我肯定对此感到满意。我对编程的兴趣我会归类为一种认真的爱好,尽管我想用它来增强我的和其他人的工作流程。
匿名

添加了一个编辑,使从初学者的角度看更清楚。
deadalnix11年

4

优秀程序员与劣质程序员的区别在于他们使用任何语言进行编程的能力。正如其他张贴者所指出的那样,了解任何重要的面向对象语言都会为您提供创建出色程序和需求的工具。

另外,如果您还在上学,请确保您参加一些写作课。最好的工程师和程序员也可以很好地传达他们的想法。

一旦开始工作,防止被淘汰的最好办法就是跟上当前趋势。如果他们不使用当前技术或流程糟糕等,别担心会另谋高就。对于您的职业而言,最糟糕的事情是从事一项工作,要求您使用旧技术或较弱的流程。


我理解对编程概念的扎实了解对于在“本场比赛”中表现出色至关重要,但要了解实际的语言语法/标准库,并且仍然不知道要充分利用语言的所有功能(在适当的情况下)。不幸的是,我还没有上学,我还在工作-尽管正如我在上一条评论中所说,我的薪水相当高,所以我不太担心这方面。感谢您的回答。=)
匿名

4

@deadalnix的答案很好。我将添加三件事:

  1. 可重用信息来自中间,而不是极端。明斯基在他的著作《心灵学会》中详细介绍了这一点,因此我将其总结为:顶层太接近于特定的解决方案,因此大部分都无法应用于下一个问题,而底层太接近于特定的解决方案。特定平台,其中的大部分将适用于下一个问题。中间层是找到可重用信息的地方-算法,模式,分类法,策略,策略,技术,组织,协议等,对于解决类似问题,无论域(顶层)还是平台(底层),通常都是有用的)。注意:这些层与3层架构无关,我们在这里讨论问题空间/解决方案空间的语义。
  2. 在您至少看到了两个实例之后,您才知道什么是通用/通用/可重用的。因此,研究Windows内部如何工作,然后研究linux / unix内部如何工作,并进行比较。常见的事物是可重用的。不同的事情是设计决策,这也可能导致可重用的见解。
  3. 对于任何给定的情况或问题,请考虑如何实施解决方案,然后将扶手椅解决方案与实际解决方案进行比较,并尝试了解差异背后的可能原因。

很棒的补充!
deadalnix11年

2

既然您刚开始,我会说只是学习一门语言,哪门语言都没关系。困难不在于语言(语法)本身,而在于理解概念。并且这些通用的编程概念适用于所有编程语言,因此学习第二,第三和第四(...)语言容易得多。

因此,一开始不要过多考虑“面向未来”。但是,随着您的进步,请尝试精通彼此截然不同的语言。基本上,(如您所说),您应该使用C / C ++这样的低级(-ish)语言,Java等高级编程语言以及脚本语言(Python,Ruby等)。如果您想了解真正的高级知识,那么您还必须了解汇编语言。

但是,现在不要对此太强调。学习编程需要几年时间。目前,只需选择Java或C#之类的语言,然后继续使用即可。:)


我喜欢“接一个”,并采取这种态度……我可能会采纳它。是或否选择一种低级语言(C),一种高级(Java)和一种脚本语言(Python)并同时学习全部三种语言?
匿名

您刚刚开始编程吗?然后不要一次学习多种语言,这只会让您感到困惑。一开始您需要学习的是概念,而不是语言。仅在需要时才应使用新语言。例如,我直到最近才感觉需要使用脚本语言,这是因为我决定使我的游戏可以使用Python编写脚本。
保罗

我不会说只是开始-我已经知道html / css多年了(尽管它们实际上并不合格/无关紧要),并且已经建立了几个月的PHP / MySQL网站。我可以进行的Web开发,这是我要解决的软件开发。我会注意你在说什么。
匿名

If you want to go into the really advanced stuff you must also know Assembly-您可以在任何层次上做到这一点,挑战只是不同。
sixtyfootersdude

1

我是否正确地认为,对于后端逻辑/低级编程等具有扎实的C / C ++知识,再结合用于Java的Java等极易移植的语言,将是软件开发的良好基础在大多数系统上将证明有用吗?

我说的是台式PC,平板电脑,电话。

不,这些都无济于事。

扎实的数据结构和算法知识-独立于任何特定的编程语言-比“低级编程等”更有价值。

“像Java这样的极其可移植的语言”与C一样可移植,无济于事。“ 下一件大事”将与这些语言有很大不同,以至于您的超便携式Java将是一种责任,而不是一种资产。

Mac OS(台式机,平板电脑和手机)都是在Objective C中完成的。这可能是一个起点。

Windows(台式机,台式机和电话)均使用C#完成。那可能是一个起点。


我把Java和C都当作可移植语言进行了比较-Java分别是低级和高级,这是真的。正如您自己说的,Mac OS = Obj-C,Windows = C#,这是如果您不适应我的想法,那么我不想只专注于其中一项而放弃我的选择,或者不想两者兼而有之,并成为“无主”。我很欣赏您的意思,但是对数据结构和算法的扎实了解,对编程语言一无所知,就像对没有编程语言的一无所知一样。
匿名

@克里斯·布里奇特(Chris Bridgett):您完全误解了这一点。有通用的基础知识,而编程语言都不是。首先,学习基础知识。然后,一种语言(或一种操作系统)简直就是锦上添花。基本面是蛋糕,并且是面向未来的。
S.Lott
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.