Working with a new company presents a million subjects which would be great material for a blog post. From the trivial (when to go for a coffee, and how often) through the important (differing implementations of agile development) to the absolutely vital (what’s the least ironing I can get away with without seeming scruffy?).
Our new project gave us the opportunity to start a fresh code base; using C# was an obvious and clever move. Despite being much younger than C++ it’s more of a “grown-up” language; still providing flexibility whilst removing some of the painful tedium.
It’s been barely a week since I hit the coal face. Here are just some of the things I’m getting to grips with:
- “internal” keyword. It smells nasty … but it sounds so useful! I’ve used it, but it makes me feel dirty. Sure, it’s better than “friend”, but does that make it OK? Rabbit poo is better than cow poo, but they’re both still poo. When is it acceptable, and when does it just break patterns?
- Unassigned objects are still null. OK, the compiler will catch it, but “MyObject object;” will not be useable without either assignment or a null check. Why? Do I really have to type “MyObject object = new MyObject()” every time? Isn’t this the common case?
- … although the whole concept of null in C# is pretty handy. Gets you 90% of the useful functionality of having a null pointer in C++ with a fraction of the pain.
- System.CollectionsGeneric, and specifically List<>. For better or worse I’ve been in the habit of habitually using std::vector for everything under the sun in C++. Is List<> better? I guess so, but I don’t yet understand the differences with any real subtlety.
- “using”. Namespaces bring back bad memories of Python. I suppose they have a purpose, but I’m not yet familiar with them. What do I need to be “using”? It’s never clear; with “include”, you can be confident that if you want to use the Starbuck class you just need “#include starbuck.h”.
None of these things are criticisms of the language – more an expression of exasperation. I think I’m coping well though – I’m pleased to finally be making the transition, and it shouldn’t be hard to get up to speed.
Ask me in a year’s time and I’m sure I’ll understand more – and also some of the many Rumsfeldian “Unknown Unknowns”. I lack the knowledge to even ask some of the questions.
But that’s good. Like a scarred, leather-clad Carthaginian warlord, turning up to the first ever Atlantean Annual, I’ve got a lot to learn – but half the fun is in finding out just what it all actually is.
There’s things I can do to be more confident in my learning. An emphasis on unit testing, for example, or encouraging more functional and automated testing in all aspects of our new project. I could go on to talk about the advantages of comprehensive code tests & reviews for a new starter, or for fluid development roles within a team more generally … but maybe that argument can wait for a week or two.