简答
(我推荐这个答案而不是我的长答案,因为它不太可能过时并将你指向那些比我更有知识的人)
阅读: http: //www.codinghorror.com/blog/2004/02/recommended-reading-for-developers.html
做:https ://stackoverflow.com/questions/1503239/good-c-sharp-open-source-projects-to-participate-in
问:https ://stackoverflow.com/
长答案
(基于修改后的问题)
根据你想去的地方,不同的答案是适用的。例如,编程电脑游戏与编程网站需要非常不同的技能,并且在与他人合作、兑现承诺、建立客户信心等方面需要考虑非技术技能。
考虑到这一点,确保你自己定义你的目标是什么,朝着那个方向努力,但要定期回顾事情以确保你在实现目标的轨道上,并且你最初设定的目标是你希望达到的目标.
测试驱动开发 (TDD) - 通过在编写解决方案之前编写测试,您的代码以更加模块化的方式构建。这使得它更容易测试和维护。提供这些测试还可以降低与未来更改相关的风险,因为您的大部分回归测试将在您修改代码时自动化。
解耦设计——即编写缺乏相互依赖关系的代码。控制反转 (IoC) 和依赖注入是如何在应用程序中实现这一目标的好例子,面向服务的架构 (SOA) 在多系统规模上实现这一目标。不过,首先,简单地将代码分解为类和过程以避免单一方法将使您处于有利地位。
模式 - 这些是针对一般问题的精心设计的解决方案。了解它们既有助于教您解决方案本身,也有助于为您提供识别代码部分的词汇表,还可以让您了解其他人解决这些原始问题的思维过程/方法。
http://www.martinfowler.com/eaaCatalog/
避免使用框架——对于经验丰富的开发人员来说,可以选择你认为有益的框架,但我认为如果你正在学习,你想在尝试添加其他任何东西之前了解技术的核心。一旦您了解了仅使用该语言的可能性,您就可以更好地评估每个框架的好处和问题,并可以决定您认为哪种语言最适合用于任何特定项目。刚开始学习框架可能会导致您错过核心语言中的重要内容,并将时间投入到几年后就会过期的技术上。了解核心将帮助您以后更轻松地选择新框架,但不会将您束缚在任何特定框架中。注意:有些框架是不可避免的——i。e. 如果使用 C#,您将使用 .Net 框架 - 与所有规则一样,也有例外。
了解黑匣子——在编写代码时知道发生了什么;什么与其他什么交互,数据来自哪里,数据离处理器有多远,创建一条信息需要做多少工作,可以缓存(记住)什么数据与需要什么数据从源读取或每次重新计算以确保它不会被更改。
除了在 Jeff Atwood 的 Coding Horror 博客上推荐的书籍之外,我还会添加这本书:ASP.NET MVC 4 and the Web API,尤其是在您进行任何形式的 Web 开发时。这本书只有 130 页,但与大多数仅关注其主题并提供理论示例的编程书籍不同,这本书将引导您完成一个项目,其中包括日志记录、安全性、域模型等,以及它设置的 REST 服务出去解决。