I found myself in an interesting coaching spot - I am going to teach Alt.NET to a programming infant. I’m going to create the first Alt.NET baby.
Real life sometime brings you to strange situations. I lead a development team which is building a web application and we recruited a new member a couple of weeks ago. I’ll refer to him as “the baby”, since he never wrote a single line of code.
Why is he on board, you ask? Well, he’s a fresh computer science student and knows his way around the presentation side of websites (good knowledge of HTML, CSS, Javascript and good ol’ web black magic) so this seemed like a good trade-off for both sides - the baby will join the team and help us out with his mighty presentation powers and in exchange will be part of a real project for the first time and will get on-job-training.
This is an interesting spot. Computer science has brought his knowledge to a certain level so far (basic C) and I need to catch him up with:
- Object Oriented Programming,
- What design is,
- Separation of Concerns,
- Liskov Substitution Principal,
- The .NET Framework (3.5),
- A whole bunch of BCL,
- C#,
- Relational databases & SQL,
- Active record & SubSonic,
- MVC,
- Dependency Injection & Inversion of Control,
- Test Driven Development & MbUnit,
- Mocking with Rhino Mocks,
- Design patterns,
- Scrum,
- Continuous integration,
- Source Control Management with Subversion,
- Tools.
Oh, and this needs to be done as we go on with the project.
Can you think of anything I forgot to mention?
Does the order make sense or would you suggest a different one?
* (DDD) Domain Driven Design
* (SRP) Single Responsibility Principle: A class should have one, and only one, reason to change.
* (OCP) Open Closed Principle: You should be able to extend a classes behavior, without modifying it.
* (ISP) Interface Segregation Principle: Make fine grained interfaces that are client specific.
* UML - not for BDUF, but useful for communicating conceptual code and communicating code behavior
* Layered Architecture (think N-Tier)
* Regular Expressions
* XML (possibly XSLT)
* AJAX, specifically, the basics of the JS to send XML requests async-ly, and not necessarily so much about creating the controls, but getting familiar with AJAX.Net
* NAnt (you may have implied that with CI)
* The “art of debugging” is VERY important (don’t have a specific resource to suggest).
* Agile, or some form of iterative development methodology
* Web Services/REST (possibly JSON)
Defensive Programming (chapter 8 in Code Complete 2, but I guess the baby has already read the whole book…)
Just kidding (-;
Just wanted to say hi, and (as a former “baby” of yours) tell the baby that he’s in good hands.
Troy, have you heard about the new NEHTBAA (Not Everything Has To Be An Acronym) methodology?
Just kidding again (-; (JKA)
@Shai
Without acronyms, we developers would still be writing code in the sand with sticks. Stick Driven Development (SDD) I like to call it.
Contract first development
ORM concepts, tools, frameworks
BDD
Other presentation patterns like supervising controller, passive view are important too
Refactoring
Anti-Pattern
The rest of uncle bob’s OO principles:
http://www.objectmentor.com/omSolutions/oops_what.html
Overload alert!
Trying to push all this stuff in the poor soul’s head may result in a meltdown.
I would push DP and anti-patterns upwards, while remaining him there is no silver bullet.
Moving TDD up the list may also be an idea, since he’ll probably want to ask how it’s implemented in following scenerios you teach.
Oops, Meant “reminding”, not “remaining”