Taking on Projects

Life is funny.

I was very sick all winter. I started losing a bit of weight last October then dropping rapidly in December. Each time I looked at the scale 1-2 lbs was gone. I was so tired, sleeping all the time. Christmas break doesn’t exist in my memory. I was drinking over a gallon of water per day and barely functional by the end of February. As you know if you’ve seen my recent posts, I have diabetes. Not a surprise to anyone who is remotely familiar with the symptoms.

Being out of commission for over 3 months I missed some things that happened on the farm. The biggest problem was the water main leak which has me facing a huge bill. Combine that with some new medical supplies in the thousands and I’m feeling pretty desperate.

So last week I reached out to my friends and told them I’d be interested in projects; anything I can do to provide value and earn some additional funds. They put it out to their network and I’ve had some great responses. Any of these options would be fantastic projects to work on with developers I’m excited to collaborate with.

I feel much gratitude this morning. Without these hardships I wouldn’t be in a position where I’m exploring some neat opportunities.

Welcome. This is my own personal sprint retrospective. I use the scrum questions to reflect on my week and make notes as a developer journal entry. It is one form of working in public.

What worked well?

Strength Training. I did solid workouts on Monday and Wednesday at lunch break. Calisthenics. Friday I missed because I had to run an errand downtown but I forgive myself. Saturday was a full day of stump ripping and ditch digging to do the water main repair. I more than made up for the missed workout.

Getting over shyness. This is a genuine struggle for me. Putting anything out in public is like pulling my own teeth. But I believe you have to be your own media company to make any real career progression these days. You have to show the world what you know. To this end I’m creating a presence on a few more tech communities.

What could be improved?

Mornings. I need to face facts. My mornings have changed. I need more time to check blood glucose, etc.

Reading Books. When you’re an introvert learning is a form of hiding. I need to do more sharing and less learning. However, some reading and learning is good.

What will I commit to doing in the next sprint?

Mornings. Prepare my breakfast the night before. Get up 10 minutes earlier at 06.20.

New blog template. The template for my personal site drives me nuts. I don’t like the way the text runs all the way from one side of the screen to the other. I need to find something that better reflects me.

Personal Brand Development. Who am I? Who am I not? What do I share? What don’t I share? I’ve never really thought through this.

Rewrite ‘About Me’. I’m growing from a developer who just wants to share a few things professionally to someone who is taking on projects. the writing on my personal site needs to reflect this.

Consolidate/Standardize Online Profiles. I need to decide where I am going to exist online then do better at maintaining my presence.
1st tier: (handle glenmccallumcan, small profile pic, larger action pic, short bio, long bio):
– LinkedIn
– Twitter
– github
– dev.to (I’m considering this one)

2nd tier (same handle. no profile pic or bio.):
– respond to comments only. no posting.
– reddit
– StackOverflow
– Hackernews

Article on ‘Docker Files for a React Client with a .Net API’. This one is just dying to come out of me.

Read Books. Test-driven laravel by Adam Wathan. Testing Javacript by Kent Dodds. I’ve heard good things about both of these. I want to read them and see what I can apply to c#. I realize this contradicts what I said above about using learning as a form of hiding but I believe some learning is necessary.

Leave Comments. If I read an article anywhere on the web I will leave a comment.

Bleeding Money

The good news this week is that a CGM (Continuous Glucose Monitor) is covered by my private health insurance to a maximum of $4000/year. This is extremely good news even if it doesn’t cover all of the cost for the year. It sure helps.

Other than that it has been a stressful week. First, I’m feeling the ongoing bite of diabetes-related expenses. With every purchase there is a 20% copay. 20% of expensive is still expensive. Next, I found a water main leak on my property. The water bill from the municipality this year so far is $2300. Some trees need to be removed in order to permanently fix it – another $2000. And finally, I found out an insulin pump is not covered by my insurance. I’m estimating that will cost $5000 to $6000.

It hurts.

Welcome. This is my own personal sprint retrospective. I use the scrum questions to reflect on my week and make notes as a developer journal entry. It is one form of working in public.

What worked well?

Exercise Friday at lunch. I didn’t want to do this. It took me a full hour. And I’m a little sore today (not too bad). But I went through the basic routine on Start Bodyweight. I need to get more active again to reduce risk factors associated with diabetes. And I haven’t done much of any exercise since my diatbetes-related symptoms stopped me from going to jujitsu. In a way I’m scared to exercise. I’m still learning how to manage insulin and I get low blood sugar when work too hard. My hands start to shake and it feels like impending doom (indeed I could pass out).

.NET Core SDK 3.0 Preview. I spent some more time on the React template with authentication. There were errors switching the database from sqlite to postgresql. But I solved it in the end. It’s on the know issues list in a round about way. I should write a short article on that.

What could be improved?

Focusing in the morning. My morning time was sucked into other endeavors a couple of days this week. I was sorting out the water main leak one morning. And another morning I was on the phone with the investment company trying to sort out a transfer. Basically, I was just distracted by other things going on in life.

Income. My job is great. It covers our basic living expenses when things are going well. I have a lot of flexibility and I work with good people. I’m happy. But there isn’t much room for extra spending. For example, we almost never take vacations and only eat out a couple of times per year. Our car is 20 years old and we have no plans to replace it. So when we get hit suddenly with large, unplanned bills we don’t have much backup. I need to take some additional jobs after hours in order to cover things life is throwing at us.

What will I commit to doing in the next sprint?

Coaching Call. I need to talk to @mijustin about adding another revenue stream. I’ve been brainstorming some ideas on my own. Anything from software development to building cedar outdoor furniture to hiring out backhoe services. Whatever it takes to bring in some cash over the next two months.

Read Books. Choose Yourself by James Altucher. The Blueprint by Brennan Dunn. Earn1K from Ramit Sethi (yes, I have a problem buying books and course. But I commit to not buy any more this week.) A big challenge is that I live so rural and do most of my tech work online. So meeting up with people who need tech work in person is an impossibility. A lot of these books/programs don’t account for that.

Exercise. I will do the Start Bodyweight basic routing on Monday, Wednesday, and Friday during my lunch break.

In Search of a New Normal

The last couple of weeks have been a ride. A day or two after starting insulin my vision went all blurry. Last week was a write off. I went through my day job by increasing all the fonts and straining for hours – accomplishing almost nothing.

At the end of the week I had another appt at the clinic and the nurse suggested I go get magnifying glasses at the dollar store. I did and it’s not perfect but I’ve been much better off since then. It is due to the dramatic change in blood glucose levels. The nurse said it should come back within 8 weeks and indeed it is improving this week.

My sleep pattern is in flux as well. I used to get up 4 or 5 times in the night to pee (a big symptom of diabetes FYI). Now I’m not getting up at all but my patterns have been inconsistent. Some days I wake up at 5.00 and lay there till 6.30 not feeling particularly refreshed. Another day I will sleep till 8.30. I guess my body is finding a new normal.

Somehow this journaling has become more about learning to live with diabetes and less to do with building software and professional development.

Welcome. This is my own personal sprint retrospective. I use the scrum questions to reflect on my week and make notes as a developer journal entry. It is one form of working in public.

What worked well?

Smartphone. I bought an unlocked android phone on amazon. I got it activated and installed a ton of apps without too much difficulty. I’m tracking all my diabetes schtuff on there now. Already it has helped me better manage my condition. I was over at friends for dinner last night and had to make some decisions on the fly. So I looked at what was on the table, plugged in some numbers, and came up with a plateful of things I could enjoy and an accurate amount of insulin I needed to inject.

Theatre. We went to a live musical theatre performance as a family. I did not expect such a release of emotion and stress. It was the first time in over 2 weeks that I have not thought about diabetes constantly during waking hours. I felt so much better afterward. There is a place for the arts in my life.

.Net Core 3 SDK Preview. One morning I fired up an ubuntu desktop environment (from docker) and installed the new preview release of .net core 3. I was checking out the new javascript SPA templates with authentication. The identity server features look nice but I’m still not sure about managing my react client app in visual studio with the backend api.

What could be improved?

Getting out of bed on time. My mornings are slow with checking my blood glucose levels, taking my needle, and getting motivated. Well, honestly I check my blood glucose in bed because it is easier to test with warm hands (circulation for the finger pricking). While I’m doing it I listen to the news then write in my notebook. I need to shuffle some things around so that it doesn’t take me 30 min to get out of bed.

What will I commit to doing in the next sprint?

Adjusted Morning Routine. Get out of bed at 06.30. Check the furnace and the house. Fill up my water bottle. Shower/Shave/Dress. 07.00 Start making breakfast. Check Blood Glucose and inject insulin while breakfast is cooking. 07.30 start personal/professional development time. 09.00 start day job.

Post a Blog Article. I want to share my docker compose file for serving a react client app, .net core backend api, and reverse proxy server each in a separate docker container.

My Diabetes Diagnosis Story

During the past 2 months I’ve lost 30lbs fat and muscle. My thirst has been insatiable – at least a gallon of water per day. Plus anything else I can get my hands on. Juice, pop, milk.

Monday of this week I had a doctor appointment to discuss these abnormalities. She instantly knew that I’m diabetic. These are pretty typical symptoms.

Tuesday morning I did fasting lab tests. That afternoon the doctor called me in a panic asking me if I was feeling okay or if I need to go to the hospital. She said I’ve been badly diabetic for at least 3 months. She kept asking me if I’m feeling okay and said my lab results are “ridiculous”.

Wednesday I spent 2 hours at the diabetes clinic getting needles and insulin.

Thursday my levels started to come down.

Friday I went to the hospital to see an internist. To get an official diagnosis on the type of diabetes I’m being referred to an endocrinologist in a nearby city. The internist said it looks more like type 1 than type 2. For now I’m informally referring to it as type 1.5 or cryptic type 1.

Today I feel so much better.

As I look back I realize some of the symptoms started much earlier – maybe even a year ago or more and have been smouldering. Like the severe headaches in the night after exercising – probably hypoglycemic. Blurred vision – I thought I needed new glasses. Other stuff I reasoned was just me getting older or not being well.

Welcome. This is my own personal sprint retrospective. I use the scrum questions to reflect on my week and make notes as a developer journal entry. It is one form of working in public.

What now?

This isn’t a typical weekly review. My life was turned upside down this week.

Since Tuesday night I’ve had interrupted sleep at night due to stress (and a sick kid). When I get out of bed in the morning I’m checking blood glucose levels and injecting insulin. Then I need to eat fairly soon afterwards.

I believe that I can get back to my usual morning routine in time. For now, I’m on a steep learning curve and I’m forgiving myself for not achieving my weekly goals.

What will I commit to doing in the next sprint?

Adjusted Morning Routine. Get out of bed at 06.30. Go downstairs. Check the furnace and the house. Fill up my water bottle. Come back upstairs. Check Blood Glucose and inject insulin. Shower/Shave/Dress. 07.15 Make a quality breakfast. (2 eggs fried in 1 tsp of olive oil). 07.30 start personal/professional development time. 08.30 go for a brief walk. 09.00 start day job.

Buy a smartphone. As some of you know I’m a digital minimalist. I haven’t owned a mobile phone for 5 years. It has been wonderful. When people ask how I manage I tell them “it is like camping all the time.” However, I think the benefits for a diabetic having an internet connected device on your person are tangible. It seems like an insulin pump is in my near future. A continuous glucose monitor(CGM) will accompany that. When paired with a smartphone a CGM can send alerts to others when my blood sugar drops to a dangerous level (for example, if I have an episode while cutting firewood alone at the back of the property). In the meantime, I’m fielding a few calls from specialist offices for appointments and check-ins with the diabetes nurse. It is very important to me that these calls reach me (previously, I think it is fair to say that not a single phone call I received was terribly important to me).

Try a Daily Afternoon Nap

How much of my life is influenced by the weather? A lot.

We’ve had a few sunny days. The snow is melting. For a few minutes each day it is a hint of spring. I feel hope well up inside me.

Recovering from a cold has kept me down a bit. Or maybe I’m just living life at a reasonable pace. After the kids are in bed at 20.00 I’ve spent time reading by the fireplace. It feels so good.

Secretly, I desire to use that time to work on a software project or a blog article. But my eyes are sore from a full day staring at the screen. They need a break.

Welcome. This is my own personal sprint retrospective. I use the scrum questions to reflect on my week and make notes as a developer journal entry. It is one form of working in public.

What worked well?

Exercise. There is still snow on the ground and it is cold. so I didn’t do much farm work outside during exercise time. However, I found an cool resource. It’s simple and free. Nick Janvier, the site owner, has impressive progress pics. The hardest part of working out is doing it. And then keeping doing it. Other than that I don’t think it matters as much what you are doing for exercise unless you’re trying to get professional results. Working out is the hardest goal that I’m building in my life. I’m not taking it fast – moving gradually.

Consistency. I’m still getting up at 0630 and doing my daily practice in the morning before work.

What could be improved?

Code Challenges (aka HackerRank Interview Problems). As these get more difficult they take more time. I’ve spent way too much time on them this week. It was suppose to take 10-20 minutes but I’ve been spending over an hour on one problem some days (including solution evaluation afterwards). I only have 90 minutes total (from 0700 to 0830). It is not sustainable for me to do this every day.

Blog Article. I haven’t written anything substantially technical in months. I have something stirring in my mind. About how I deploy a React app with .NET API using docker. It’s coming. I find the javascript support in visual studio not to my preferences, at least when it is an integrated project javascript/C#. Same thing with jetbrains rider. Anyway, I’ll save it for the article.

What will I commit to doing in the next sprint?

Daily Code Challenges. I would still like to solve one problem per day. I plan to move this activity into my working hours, 0900 before morning meetings. I believe that is fair since it results in sharpening my skills for my employer. Frequently I’ll do something like grab an algorithm book and brush up on sorting while working out a problem. I will solve 5 problems this coming week.

Incidentally, I stole idea from Ali Spittel. She talks about it on the egghead podcast

Daily Afternoon Nap. This is something new I want to try for a week. I read about it in Tim Ferriss’s book, Tools of Titans. There is a bodybuilder in there who takes a nap every afternoon. It got me thinking about how I have some days where I get fatigued during the day. I spend 8 hours in bed every night (22.30 – 06.30) but, according to my fitbit, I only get about 7 hours of sleep sometimes less. I will nap from 14.00 – 14.30. My wife goes to pick up the kids from school at this time so the house is always quiet.

Blog Article. Moving my daily code challenges to 0900 will free up my 0700 time to start working on a new article.

Multidimensional Arrays in C#

Yesterday I was working with arrays and got hung up on a basic error message, a couple of them.

Object of type 'System.Int32[,]' cannot be converted to type 'System.Int32[][]
Cannot convert from an int[,] to an int[][]

There was not much on the internet that direct hit on these error strings (maybe it is too easy). Because of my java background it tripped me up for a few minutes.

Declaring a multidimensional array is not the same in C# as it is in Java.

//valid java, not valid in c#
int[][] array = new int[6][6];

In c# there are multidimensional arrays (think “matrix”) and jagged arrays (think “array of arrays”).

Multidimensional Array. Key points: simpler syntax but slower (more overhead). 2nd dimension the same length for all.

new int[6,6] {{-1, -1, 0, -9, -2, -2 },
{ -2, -1, -6, -8, -2, -5 },
{ -1, -1, -1, -2, -3, -4 },
{ -1, -9, -2, -4, -4, -5 },
{ -7, -3, -3, -2, -9, -9 },
{ -1, -3, -1, -2, -4, -5 } }

Jagged Array. 2nd dimension length can vary.

new int[6][] {new int[6] {-1, -1, 0, -9, -2, -2 },
new int[6] { -2, -1, -6, -8, -2, -5 },
new int[6] { -1, -1, -1, -2, -3, -4 },
new int[6] { -1, -9, -2, -4, -4, -5 },
new int[6] { -7, -3, -3, -2, -9, -9 },
new int[6] { -1, -3, -1, -2, -4, -5 } }

Once you realize this not-so-subtle difference there are lots of resources on the web available.

Resources

https://stackoverflow.com/questions/4648914/why-we-have-both-jagged-array-and-multidimensional-array

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/arrays/multidimensional-arrays

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/arrays/jagged-arrays

Practicing More Interview Problems

It started last Saturday afternoon with the wind. Terrible, terrifying wind. I have to get some trees topped this summer so that nothing is within range of falling on the house.

On Sunday came the snow storm. The snow kept falling and falling – probably 15″ in total that day. Snow doesn’t really bother me on the farm. The tractor makes short work of it. It is kind of fun the first day but it became a distraction from my morning practice. I used that time getting the cars dug out and the driveway cleared before school (then cancelled).

Two more snow storms came during the course of the week – another 10″ of snow. And I caught a cold mid-week. The hardest part was driving over to clear my parents driveway. They live on a dead-end street that was barely ploughed. No place to put that much snow really. And I had to hand dig them out with a shovel 3 times.

Welcome. This is my own personal sprint retrospective. I use the scrum questions to reflect on my week and make notes as a developer journal entry. It is one form of working in public.

What worked well?

Practicing HackerRank Interview Questions. I’m going to put this in my needs improvement section as well. But I did complete 4 HackerRank problems and post the solutions to my GitHub account. Missed Monday due to snow.

Exercise. I had a goal to go swimming for exercise this week. It didn’t happen. The pool was even closed for a few days due to the snow storms. However, I got a quite a workout shovelling snow several times this week.

I had an epiphone with regards to exercise this week. People go to gyms to simulate hard work (lifting heavy things, getting your heart rate up). I have all the hard work I can handle on the farm. I just need to break it up into 1h – 1.5h chunks so I can do it during the lunch time slot MWF that I’ve allocated for exercise. So that is when I plan to do all my firewood cutting and storm cleanup this spring.

Crush It Audiobook. I listened to Gary V’s entire audiobook while shoveling snow this week. Good time. Good reminders to invest effort in personal branding.

What could be improved?

HackerRank Interview Problems. I did a HackerRank test this week for a job opportunity. There were 3 problems to solve in 1 hour. My solutions are good. I always take a simple, understandable approach. Nothing fancy like squeezing it all into a one line python solution that no one can decipher. The problem is that I’m painfully slow. From reading/understanding the problem to coding it up. I feel like a turtle. Anyway, on the test I didn’t finish the 3rd problem. I submitted a solution but it didn’t pass all the tests. There was a bug. Consequently, no job offer at this time.

What will I commit to doing in the next sprint?

Practice Hackerrank Problems. I will solve one problem per day on HackerRank. Specifically from the 69 Interview Preparation problem set. I will post the solution to Github.

Working in public. I’m going to put my pet project on Github (if I can find an appropriate license).

Excercise. 3 Times this week. MWF. Inside at the pool or a gym only if the weather isn’t good enough to work outside on the farm.

Practicing For Technical Interviews

Life on the farm isn’t always easy. I had a backhoe break down this week in freezing temperatures (-10C/14F). I really wanted it running so that I could clear snow. Plus it is in a location where it blocks me from getting another tractor out for the task.

I spent hours outside in the cold working on it. 2 hours in the morning before work. 3 hours in the evening after the kids are in bed. A few days of that is draining. Touching freezing cold metal outdoors is not fun.

It obliterated my daily practice and my evening reading/thinking time.

Finally after I exhausted myself I called a heavy duty mechanic. He came on Wednesday afternoon.

Thursday morning I got back on the path.

Today is Saturday and the machine still isn’t fixed.

Welcome. This is my own personal sprint retrospective. I use the scrum questions to reflect on my week and make notes as a developer journal entry. It is one form of working in public.

What worked well?

Getting up at 6:30am. Even on Saturday. Most days it is tough. My alarm goes off across the room. I get up, shut it off, stand there for a few minutes and think about going back to bed. I decide to light the wood stove then go back to bed. I go downstairs and check the thermostat. It is 57F inside the house. I get the wood furnace going, go back upstairs and stop in the bathroom. My clothes are laid out. I’m cold. I decide to have a shower to warm up. When I get out of the shower I’m on the path.

Unit Testing Refresher. I went through some basics on unit testing with xunit. I set up some simple projects in Visual Studio, Jetbrains Rider, and with the command line and added unit tests. Found an cool way to structure unit tests. Working on a big code base every day I don’t often get to start something from scratch.

James Clear ebook. I listened to most of it (within 30 minutes of the end). I will finish it today. There are a lot of good strategies in there. To me it seems like a menu of things to try rather than a howto manual. I will listen to it again to improve my retention.

Exercise. I went swimming yesterday at lunch time. It was Friday and the roads were snowy. I wanted to stay in the house very badly. I went for the soul reason that I said I would in my developer journal entry last week.

What could be improved?

Job interviewing. I’ve had a few opportunities pop up in the last couple of weeks and I’m open to a new project although not actively searching. However, I haven’t done a job interview in 5 years. It has changed. There is a whole new industry out there of testing services that rank your solution and pass it to a a prospective employer as a score out of 100. In my professional life I don’t often program how many candies Alice (the teacher) is going to share with each student in her class based on merit. So although my experience is good and I present myself well I need some practice on solving these tricky little problems.

Working in public. As much as I want to share what I’m doing it isn’t natural for me. For example, I don’t think of tweets to send out every day. It is not that I don’t have something technical to share. Twitter just isn’t on my mind. Most of the time it isn’t open on my developer workstation.

What will I commit to doing in the next sprint?

Practice HackerRank Problems. I will solve one problem per day on HackerRank. Specifically from the 69 Interview Preparation problem set.

Post to Github. I will put each of my HackerRank solutions on Github for the world to see.

Go swimming again. Honestly, I would have counted it a victory just making to the swimming pool (so would James Clear). But I got changed and went in the pool. Swimming was really tiring. I did 12 lengths in poor form then went and sat in the hottub for 10 minutes. But I felt really good afterwards. Worth repeating.

My Very First Developer Journal Entry

Every morning I get up at 6:30am, light the wood furnace, shower/shave, fry two eggs, and sit down at my desk. It is still dark out. The old farmhouse is cool and quiet.

This is my daily practice.

I spend 90 minutes exploring new technologies, enhancing my skills, working through courses, building personal projects, anything I can do to improve myself as a software engineer.

I should write about it more but I don’t. Perhaps this will change in 2019.

To this end I’m using the scrum retrospective questions to reflect on my week and make notes as a developer journal entry. We’ll see if public accountability helps.

What worked well?

Coaching call. Yes I have a coach I talk to once per month. It keeps me on track with everything from time management to priorities to personal branding and marketing. I believe I originally got the desire from listening to Noah Kagan. If something is important enough to you it is worth hiring a coach. This journal entry is an outcome of my coaching call.

Progress on Market Garden Manager. One of my personal projects is a crop planning tool for serious vegetable gardeners. It is primarily to meet our needs but someday maybe someone else would like to use it as well. It has been on a shelf for a few months. This week I dusted it off and got to work on it.

Persistence on javascript type errors. Not much to explain here. Just that I slogged through several hours of javacript errors this week. By sticking with it and coming back each morning I learned a lot.

Daily review in my notebook. Also a suggestion from my coaching call. Each night I take a page in my little notebook and write down “What did I accomplish today?” and “What am I going to accomplish tomorrow?”. It is specific to my personal/professional development. If this journal entry is my sprint retrospective then I guess you could call my nightly review the scrum equivalent of my own personal daily standup meeting. Except I’m sitting down – usually on the edge of my bed.

What could be improved?

Giving a book away on twitter. I offered a book up on twitter as a giveaway. I even offered to pay shipping to anywhere in North America. Why? I’ve gone through it already and now it just gathers dust on my shelf. It is starting to get a little older and I thought someone could get some benefit from it before recycling. After all it is still $47 on amazon.com. Not a single person responded. That’s fine. My friend said he wanted it. Don’t know if I’ll try that again. The book: Dependency Injection in .NET by Mark Seeman.

Exercise. I dropped some team sports at the end of 2018 in order to have more time and energy for personal/professional development. The justification was that I would spend my lunch hour doing some sort of physical activity and get to bed earlier at night. It is only half-working. I’m going to sleep at 10:30pm but I’m still am not taking a lunch break from work unless I have an appointment to go to.

What will I commit to doing in the next Sprint?

Listen to James Clear Atomic Habits audio book. I bought it on audible this morning. I’ve heard a few people raving about it. I commit to listen to it once before the next sprint.

Go Swimming. I will go lap swimming at the pool one day this week during my lunch break (I promise to take a lunch break from work that day).

C# Is Dangerous

I was asked why C# is still relevant in 2018. What makes a language relevant to me? Someone pays me to work on it. Preferably a lot of money. With that there is this risk reward of developing rare skills. To me Cobol is relevant in 2018. A few people make a lot of money maintaining Cobol systems. However, (at least where I live) I don’t see a lot of ads for Cobol developers. I see a bunch of C# ads and a ton for Javascript developers. You need to seek the balance between valuable skills and available work.

Within a few days another friend asked me what programming language to learn as a first language in 2018. You might think I would suggest C#, but I didn’t. The truth is, as a professional software engineer I have little affinity for C#. I’ve written some articles on C# tooling because that’s what I look at day in and day out. But I would also be happy and very effective working in another language.

Building software is a bit like building houses. Take a builder who does brick houses vs one who does wood framing. Each material has strengths. Brick is fireproof. Wood withstands earthquakes. Each has regions of better pricing and availability. A superior builder knows building systems and when to use each material. Can a builder switch from building brick houses to wood-framed houses? A professional builder should be able to switch with time and study. The underlying building principles remain constant. But the materials, tooling, and techniques are different. Switching could take some trial and error.

Superior software engineers know principles over languages. GRASP Patterns. SOLID Principles. These do not change from language to language.

Now to the heart of the matter. Microsoft tries hard to reduce workload for developers. You click on new project in visual studio, select a template, and immediately you have a working web application with a database and everything. If this is your introduction to software development then you are building your software engineering base on sandy ground. For example, you will see dependency injection introduced by the template but not necessarily understand how it is working and why it is important. Without a proper foundation an IDE is a crutch as much as a tool.

This is why C# is dangerous. The Microsoft tooling makes it easy for inexperienced developers to build poor software. And this problem is not exclusive to C# but I worry that is it more prevalent with C# (and Visual Basic.NET).

C# as a relevant language in 2018 is not in question. It has any feature available that I’ve come to expect. Like a building system (think brick vs wood) some of these are better in C# and some are better in other languages. All of these are available in most languages but no language that I’ve found is perfect.

Openness / portability – Free. Cross-platform. Open source. Public design reviews. Weekly open calls. (contrast this to the new commercial licensing for java)

Modern language constructs– generics/ lambda expressions / anonymous functions / delegates. The list goes on and the specification evolves regularly. Microsoft hires some really smart people to oversee this.

Package management – NuGet. So convenient for software re-use. Integral to dotnet core.

Great libraries – well-documented, reliable, mostly open-source, and clean. Anything I need to do I can find a package and easily reference it.

Supported by cloud infrastructure – There are lots of different ways to host your application in the cloud. PAAS options on azure. Or container-based solutions using docker on pretty much any host (e.g. digital ocean droplets).