Things to Learn - xerocrypt/Misc GitHub Wiki

  • SOLID principles of software engineering
  • Agile development and the application lifecycle
  • Base classes and inheritance
  • Interfaces and implementations
  • Loosely-coupled vs. tightly-coupled code
  • ASP.NET MVC 5
  • SQL Server
  • Unit Testing

Notes

SOLID Principles of Software Design: You don't really need to memorise the acronym or individual definitions. The important thing to know is that they're principles of well-designed software, and principles to determine how code is structured for maintainability and testability of software modules. My page on this is here...

Agile Development: Ideally we start with a Software Requirements Specification, from which we establish an iteration with a set of required features. For each feature we should have user stories, with associated development tasks to be assigned to team members. Every user story and task should be traceable to the relvant feature. I strongly recommend looking at TFS or Team Services to see this in action.

Unit Testing: If SOLID principles were followed, each method/module within the software should perform a single, well-defined, function. Some developers argue that one should define the specific purpose of a method and create the appropriate unit tests for it before coding the method itself. In my humble opinion this is very inefficient, as you'd be producing at least twice the amount of code, and the complexity of a unit test would be greater than the complexity of the module being tested.

Other Testing and Debugging: Could you troubleshoot and test performance of your software? Personally I use SoapUI, the Developer feature of browsers, Telerik Fiddler and SQL Server Profiler to nail errors in successfully compiled applications.

Additional Languages: Depending on your area of development, you'd need to be familiar with several other languages. For example, if you're creating a dashboard application on ASP.NET, you'd likely be working with SQL, JavaScript and HTML/CSS in addition to C#.