Getting into Software Part 3: How can you tell if you have the right talents for a Software Programming Career?

If you have never programmed before, how can you tell if you have the talent needed at the professional level?

Even if you did badly in school there is a chance that as an adult you could be successful as a software engineer. The demand for software engineers is high enough that people without degrees in Software Engineering or Computer Science can get into the field. The real question is whether you can solve programming problems and demonstrate it to prospective employers.

The way I got started in programming was an online C class, and C is not a bad place to start. Although, today I recommend “learning Python the hard way” which is available at https://learnpythonthehardway.org/book/intro.html. The book can be accessed for free online but is also available in other formats that you can pay for.

Once you have gotten introduced to the language and can write simple programs with the book guiding you, take a look at Project Euler.

Go to https://projecteuler.net/archives and do 10 of the problems in python. If you can knock out a few problems in a day or two without any programming experience other than the course you are probably capable of professional software engineering. If it takes you a week to get your first problem and only a day per problem after that it might still be worthwhile for you to push forward with Software Engineering.

The Project Euler problems vary in difficulty from easy to rather complicated. Don’t think that you need to be able to do the hardest ones to get a job working as a Software Engineer. But you will find yourself dealing with similar problems on a daily basis so you need to consider if you can handle that being a significant of your daily life and the skill that you get paid for.

Getting into Software Part 2: What Skills are Important in Software Programming?

The way I see it there are 3 core skills that are important in corporate software engineering environments, understanding logical trees, finding solutions to obscure problems on the internet, and making sure you write the right solution to the problem.
These can be split into:
* Logic
* Reading Comprehension + Persistence
* Communication
**Understanding and Writing logical trees**
Understanding and writing logical trees is the primary filter in programing jobs. If you cannot comprehend and create complicated logical trees you will not be able to do the job. It is less difficult than logical proofs in an introductory discrete math class in university. The difficulty is that logical constructs are what we work with and there are very many of them.
The most popular logic problem used in software engineering interviews is called FizzBuzz. This is a pretty simple problem that is comparable in complexity to problems you will encounter as a software professional.
***FizzBuzz***
*Write a program that prints the numbers 1 to 100.
For each multiple of 3 print Fizz instead of the number and for each multiple of 5 print Buzz instead of the number. If a number is a multiple of both 3 and 5 print FizzBuzz.*
While the problem is pretty simple if you cannot work your way through it in half an hour interviewers will confidently assume that you are not capable of doing the job.
**Finding solutions to obscure problems on the internet.**
The second big skill is, “finding solutions to obscure problems”, luckily for the modern day programmer 95% of all problems have a solution on the internet. Whether that problem is accessible via google or hidden on github and stackoverflow.com is something you will have to figure out.
Sometimes finding that solution may take hours of trawling the internet and reading through the source code of dozens of dependencies. A software engineer needs to be able to persist through the search despite there being no apparent progress and the high probability that the actual issue is a small oversight that you thought was irrelevant and then forgot about.
These problems tend to be either compiler errors or figuring out how to get a library to do what you want.
**Making sure you write the right solution to the problem.**
The last big skill is making sure you write the right solution to the problem. Typically, software is used to automate internal business processes or to sell products to customers. The people who currently perform these processes manually or sell to customers are not software experts. They are business process or sales experts. Its our job as the Software Engineers to interpret the requirements of the business and turn them into explicit logical steps that fulfill the business need. This is a difficult problem and people who can do it well are rewarded.
One of the big problems in corporate software development is that the people who can deal with logical trees and have the persistence to struggle with a compiler all day are not abundant in the skills required to understand what the business wants or needs. And since extracting the business requirements in sufficient detail can be an arduous process companies will often hire Project Managers and Product Owners to deal with it.
We have gone over the most important skills for a corporate software engineer, dealing with logical puzzles and trees, searching for obscure answers to problems and building the right solution to the business problem. Hopefully, this gives you an idea of what is needed to be a successful Software Engineer.

Getting into Software Part 1: Why would you want to get into Software Programming?

In an age where Software is gradually taking over everything starting from your computer and spreading to your fridge or your car it might seem late to get into software, but it is not. Companies are going to need more and more software developers and engineers to write the code needed to run everything. What are some good reasons to work in software?

Hours

An excellent reason to get into software is because of the hours. The expected hours vary greatly between software companies. You could work for a small boutique firm that is constantly pushing 80 hour weeks or for a megacorp where you work for 10 of the 40 hours you are in the office each week. It really depends on what you want and how good you are at interviewing. You might find that mid-sized companies are a good fit for you or that you prefer aggressively growing startups. The important things to consider are how many hours are you working and what are you trading in return for those hours. For example you might be working double the hours for double the salary, thats great if you are prioritizing money, but your hourly pay might be same as someone making half your salary.

Working Conditions

The working conditions in software engineering are usually good. We work indoors at desks and the heaviest thing you are likely to lift is a 3 lb macbook. In my workplace every desk is a standing desk and I try to take advantage of standing a little each day. Constantly leaning forward is the biggest issue I face with occasional hand issues taking second place.

Programming can be enjoyable

Some people enjoy programming, it can be a cerebral experience. There is little chance to it, just man against machine in a cathedral to the inner working of men’s minds.

Good compensation

Salaries in the Software engineering field may fall into a binomial distribution, but the lower end is still high compared to other fields that require a bachelor’s degree or less.

What are your top reasons to get into Software Engineering?

Remote Work Revisited

About a week ago on a particularly cold morning with fresh snow and ice on the streets, I decided to try working from home again. While I don’t hesitate to bike or walk to work in 20 or 30 degree weather, 3 degrees is too cold.

After making the decision I opened slack and typed “WFH” into our office channel. Then about 30min later, after getting coffee, I hopped back online to address my first intern request for clarity. I played some music and connected my external monitor to my laptop while debugging some docker networking issues. For some reason, nearly all of my issues with docker involve the network.

For lunch I walked over to Safeway and picked up some sandwich materials. Then I took a quick nap. At work despite having an hour for lunch, I don’t have any where to nap even if I have time.

Then it was back to debugging docker and answering questions from the team. Overall, this working from home experience was much better than last time when I stayed at home due to the cold. This time was more peaceful and I did not miss the office.

Certified Kubernetes Administrator!

I had the opportunity to take the [CKA](https://www.cncf.io/announcement/2016/11/08/cloud-native-computing-foundation-launches-certification-training-managed-service-provider-program-kubernetes),
‘Certified Kubernetes Administrator’ exam because my employer is trying to get ‘Certified Kubernetes Service Provider’ status, which requires 3 certified administrators. Now, why would Certified Kubernetes Administrators or service providers be valuable for your company? The CKA is good because it certifies a base level of knowledge and ability in kubernetes administrators. Things you would expect from CKAs are the ability to debug clusters, perform upgrades, bootstrap clusters and application deployment tasks.

What and how does the exam test administrators? The exam tests your ability to perform operations against the kubernetes api. The entire exam period is spent in the command line with kubectl on a standard linux shell. The test validates your ability to ‘get things done’ in the kubernetes environment.

Overall, I have a very positive outlook on the exam. I spent about a week preparing. I read a lot of the kubernetes.io documentation, ran through ‘kubernetes the hard way’ three times and had worked with kubernetes on the application side previously. I passed on the first try, but I did need all of the exam time and had to skip a few of the hard problems.

I don’t think that the CKA is essential for devops or kubernetes admins, but it is a good exam and great for filling some of the gaps you might have in your knowledge.