Tips for Software Developers Just Starting Out

Software Engineering 4491 views

I brought my 8-year old son Alex to Tampa Code Camp at Keiser University.

Now that Alex is older, I enjoy taking him to these types of events. There's always something for him to learn, and he loves the cool swag! Also, on this particular rainy Saturday, it was a good answer to the weekly question of what to do on the weekend.

In any case, sometime after lunch, we took a break from the sessions, deciding to hang out in the main auditorium. While there, I struck up a conversion with a fellow Software Developer, Jared, and a long-time recruiter friend of mine, Steve Turner. As the three of us were chatting, two nearby attendees, Tatyana and Kelvin, chimed in asking for advice on starting out in the software development industry.

I gave as much advice as I could on the spot, stream-of-consciousness style, while promising to follow-up with a more detailed email response later. As I slowly recaptured and organized my spoken words into an email, I realized this would be better suited as a long blog post.

Several months later, here it is:


Contents

Get a sense for what Code is

If you haven't done so already, do yourself a favor and read through Paul Ford's 2015 Bloomberg article What is Code?. It's a long, rambling read, but it's full of informative foundational information, and an accurate portrayal of one segment of this industry.

Do not pass Go until you read it.

Okay, now that that's out of the way, on to the rest of my article...

It helps if you are passionate

I've conducted many technical interviews over the years, and each time I've tried to gauge the applicant's passion level. Are they passionate about this vocation? Or, are they more of a 9-to-5'er; where it's just a job to them? I'm not suggesting that they need to work long hours. However, if they were passionate about this, there would be readily identifiable evidence, like: continual learning, attending meetups / user-group meetings / conferences, buying books, reading blogs, watching videos, taking courses, etc.

If you want to be successful at this, it immensely helps if you're also passionate about it. That passion, and a hunger for learning, will keep you engaged and evolving over the years.

Keep learning

Embrace the Japanese concept of Kaizen (改善), or continual self-improvement.

Learning should be a life-long process. Even as a so-called industry veteran, or Senior Software Engineer, there's always more to learn. If you run out of ideas, try learning an ancillary subject, such as: Statistics, Linear Algebra, Data Science, Artificial Intelligence, Machine Learning, Robotics, etc. The options are endless.

"Coding is hard" will discourage some people from attempting it.

"Coding is easy" will discourage some people who are attempting it and finding it challenging.

Alternative: Learning to code is a neverending journey with a set of challenges and delights unique to each person.

— April Wensel (@aprilwensel) January 16, 2018

Books

Books are an obvious good way to keep learning. I recommend starting your library of technology books, either physical or electronic. Though understand that most books, especially technology books, will eventually become outdated. This is where ebooks have the advantage since they can be updated. Even so, if you learn one or two things from a book, then the cost of it was worth it, and its obsolescence less of a negative.

Here are two publishers I tend to purchase from frequently:

Be sure to follow Manning on twitter as they will periodically tweet discount codes. PragProg is also on twitter.

My books come from other publishers and sources too though. Books are so inexpensive, that I do not hesitate to buy one if the topic interests me the slightest. I usually get some value out of it. Though there have been a few cases where I bought a dud or two.

Courses

Take full advantage of online courses from sources like: Coursera, Udacity, edX, etc. In addition to books, this is probably the best way to continue learning. Free or discounted courses found on sites like YouTube Udemy can be equally as valuable.

Here are some of the courses I've taken and recommend:

Certifications

When you are first starting out in your career, certifications are a good way to let potential employers know that you know a certain programming language or technology. I also see certifications as tie breakers. If an employer is trying to choose between two mostly similar candidates, the one with the certification will likely have the edge. In a few rare cases, certifications are required for some positions. For example, you would not really be able to get an AWS Solutions Architect position without the corresponding certification. The Networking and Security sub-fields have similar certifications for technologies which are practically required. Project Managers and Scrum Masters have their desired certifications too. Most Microsoft-centric shops look for Microsoft certifications, or at least MVPs.

If you ever take an online course (Coursera, Udacity, edX, etc.) and you are given the option between taking the course for free, or paying and receiving a certification at the end, go ahead and take the certification route. Most of those establishments have the means to display your certification on LinkedIn as well.

I personally started taking certifications early in my career when I grew wearing of taking test after test on interviews. My certifications were a message to interviewers that I knew my stuff. Whenever I take an online course, I always opt for the paid certification version. Why not have something to show for after spending all that time on the course?

Think Logically

Learn Logic and hone your analytical mind. You have to think logically and analytically to do this job.

Try solving real-world tasks

I mentioned this in another blog post. I've never felt that toy examples, like "hello world" et. al., did much to help reinforce learning something new. I recommend trying to accomplish real tasks to help expedite your learning. Maybe you have a computer-based task you perform regularly which could benefit from automation? Try using it in a way which relates to things you know. Many programmers started out by scratching their own itch, so to speak. They wrote their first code trying to avoid doing something the manual, painful way.

Necessity is the mother of invention.

Get comfortable using the Terminal

On macOS and Linux it's called the Terminal, on Windows it's the Command Line window. Sometimes it's referred to as the Console.

Try customizing your PS1.

Learn Git and GitHub or GitLab

Git is a distributed, version control system for your source code. GitHub and GitLab are 3rd-party web product around git. These days most technical employers will want to see your public GitHub or GitLab repos. It acts to supplement your resume, and in some cases it is your resume. You should learn these tools and become familiar with their related functions.

If you are being paid to write software for a company, your code needs to be checked into some sort of company version control repository. No excuses. Source code should be treated as a corporate asset. Many companies cannot operate successfully without their custom software. It needs to be saved and protected.

Here are some resources to get you started:

Try Git

Learn SQL

Google and StackOverflow are your friends

Part of being a Software Engineer or Developer is Googling error messages and scouring StackOverflow for solutions to your problems. Get comfortable with these tools and familiarize yourself with their ins-and-outs.

pic.twitter.com/M5AxBrLlhz

— Joseph Woodward (@joe_mighty) May 3, 2018

Sometimes you will run into a dead-end though, where nothing comes up.

The other day I attempted to install a new library I read about, TileDB. During the install, it failed with an error. Sometimes the error message is generic enough that you can Google it and find the solution. Maybe the error is bubbling up from a popular 3rd-party library dependency? Or, maybe the project is so new, or the error message so specific, that nothing comes up via Google or StackOverflow. In that case, I found the project's public GitHub repository and entered an issue. The author later responded, made some change, and closed out the issue. Now I can successfully install it!

Reddit is your friend too

Here are some other sources from reddit:

And useful subject-specific subreddits:

Every popular language or technology should have a corresponding subreddit, just search or browse for it.

Learn how to test your code

Start out by printing variable values to STDOUT) from within your programs. Try using a REPL for the same effect. This is sometimes known as console-based developing or testing.

Later, learn how to use a debugger if your language has one. You can set breakpoints, run your code and inspect the state while paused.

Lastly, learn how to do unit testing at a minimum, and continue on by learning about test-driven development (TDD), Behavior-driven development (BDD), code coverage, test automation.

Each language / framework / sub-domain will likely have their community's preferred tools and techniques for testing.

When traveling down your path of learning how to test software, it's a good idea to keep these points in mind:

Testing can show the presence of errors, but not their absence.

Learn how to write resilient, quality code

Many, many years ago, I stumbled upon Bertrand Meyer's Eiffel) programming language, and his Design by Contract concept of preconditions / postconditions. The idea that each method or function should validate the inputs it requires (preconditions), and the output it returns (postconditions). That concept really stuck with me, and I've strived to use it in every language I write code in. Sometimes a language has built-in support for this, and sometimes you can use a library, or you can write your own code to do this.

Developer: "Here's some water."

QA: pic.twitter.com/nj7pyNVgTJ

— Product Hunt (@ProductHunt) May 7, 2018

Learn Object-Oriented Programming

I mentioned this in my previous article. Here are a list of terms and patterns I would encourage looking into:

But then learn Functional Programming too

Learn about different software design principles

S.O.L.I.D.

Learn about software design patterns

Design Patterns

Learn the terms and concepts

There's a lot of terms, concepts, and abbreviations in this industry. Try learning some of them, or look up any you hear but are unfamiliar with. Here's a few to start with:

Become a Polyglot

This industry is known for moving fast and continually evolving. There's plenty of tired jokes about the language du jour, or the JavaScript framework du jour. Continually learning is a must for survival. Along those lines, you should embrace learning more that one programming language and/or framework. You don't want to risk becoming obsolete, or a dinosaur.

I've mentioned this in a previous article, over the years I've utilized several programming languages in my software solutions, systems, and deliverables. Here's a snap-shot:

ActionScript, Assembly, Awk, BASIC, BBx, C, C++, C#, Clojure, COBOL, CoffeeScript, CSS, Delphi, Eiffel, Elixir, Elm, Erlang, F#, Go, Haskell, HTML, IronPython, IronRuby, J#, Java, JavaScript, JRuby, Julia, Jython, Logo, Lua, M, Objective-C, Octave, Pascal, Perl, PowerBuilder, Python, QuickBASIC, R, Rexx, Ruby, Rust, Scala, Shell, SQL, Swift, Visual Basic, Visual C++, VRML, WML, XSLT.

That list grew for several reasons:

I consider myself a programming language aficionado, and love learning new programming languages. Whatever your reasons end up being, learning more than one language/technology is good for your brain. You'll find that learning a technique in one language will improve your skills with another language. It will round-out your knowledge and make you more desirable to potential employers.

But use what works for you

For your day job, you should strive to work with what makes you the most happy. Life is short. Why waste it working with a language or technology which makes you miserable, or causes you stress. The effects of cortisol are too damaging to your wellbeing and health. Move on to something which gives you satisfaction and less grief.

Checkout the Awesome lists

These are curated lists for various programming languages or technologies, usually found on GitHub. Very useful if you're trying to find out if there's a particular library for the language you're using. You can try starting with GitHub's "awesome" topic, or use this search site AwesomeSearch, or try this site too, Awesome Repos. Here are some I like:


Attend Local Community Meetups

Try attending as many local meetups and events as you can.

The local technology and programming community is thriving here in Tampa. You just have to look around. The Tampa Bay Technology Forum (@TheTBTF) is a big one.

Most communities have a corresponding group on Meetup.com. Meetups are a great way to find user groups and meet new people. Check out the technology meetups here in the Tampa Bay area. Below are the ones I sometimes attend:

Meetups can come and go over time, so remember to occasionally check the website for new ones. Here are some other good ones:

Tampa is also trying to cultivate a Startup culture. I used to attend a few of the Startup-related meetups.

If you're not from Tampa, check out the meetups and events in your city.

Attend Local Conferences and Events

Lanyrd used to be a great resource for conferences, though I am not sure of it these days. Eventbrite is another good source to find tech events in Tampa. Here are some future events to look out for:

I am always on the look-out for local or nearby conferences and events. Sometimes your favorite programming language may have a nice one-day event nearby. Ruby used to have MagicRuby in Orlando and Ancient City Ruby in St. Augustine. Elixir also hosted ElixirDaze in St. Augustine last year, and ElixirConf in Orlando last year.

Local Job Market

Tampa has many .Net and Java shops. There is also quite a bit of mobile here (iOS / Android). I find it interesting to observe how the local trends change over time. Before Microsoft's .Net hit the scene, Delphi) was very popular in the Bay area. I used to keep track of all of the Delphi shops. Now, they either do not exist, or have transitioned to a different technology.

Sometimes you may feel at odds with the local job market. Especially when you want to get a job in a technology or subfield which is not popular here. Machine Learning for example. You would have to work 100% remote, or move. In any case, that is something to think about when you are deciding what you want to work with.

I recommend you connect with a veteran recruiter or headhunter who knows the local market very well. I have 800+ connections on LinkedIn, and I would wager that 80% of those connections are recruiters or headhunters. Out of that pool, I would say Steve Turner fits the bill; Fritz Eichelberger is another. Send Steve and Fritz a connection invitation and ask them about the local job market. You probably remember Steve from Tampa Code Camp. I frequently see him at other local events all the time.

In the past, I would occasionally meet a recruiter or headhunter for lunch just to hear them talk about the local market and what opportunities were hot at that moment. It is always good to keep in touch.

Networking

On a related note, networking is probably one of the most important things you can do for your career. Do not be afraid to introduce yourself, or ask for a business card, or send a LinkedIn connection invitation. Connecting with people is important. In the beginning of my career, I had to force myself out of my comfort zone to do these things. In retrospect though, I recognized that most of my job offers came from people I already knew who I connected with previously. Either they contacted me directly about a job, or they worked at the company I wanted to get a job at.

Treat every technical conference or meetup as an opportunity to expand your network and make new connections. There has been plenty of times I have attended an event where the subject or content was not as valuable to me as the connections I made there. If you make a few connections, then the event was probably worth it!

Here are a few to consider:

Social Media

Twitter is a fantastic source for developer-centric people or technologies to follow.

Websites / Podcasts / Blogs / Newsletters / Email Lists

Promote Yourself

Start a blog on WordPress, Medium, Tumblr, or GitHub. I really enjoy following Julia Evan's feed as she learns new things and illustrates her findings. Document your journey as you learn new things. Someone else can learn from you too.

It is also good for potential employers to see. Use social media (twitter, Facebook, LinkedIn) to promote your blog posts.

I started blogging back in 1998. There were a few years where I did not blog at all, and now I regret it. These days, video blogging is very effective too.

Another way to promote yourself, is to submit your blog post to a newsletter. Did you just write an awesome blog post about Javascript? Submit it to the Javascript Weekly Newsletter; post it on HackerNews and the corresponding reddit forum. Some languages even have a hashtag you can use on twitter which they will retweet to get you more exposure. For example #myelixirstatus.

Ignore or minimize Imposter Syndrome

Impostor Syndrome
xkcd - Impostor Syndrome

I think almost everyone is affected by self-doubt at certain points in their career. This ever fluid industry can seem overwhelming at times.

Try to ignore impostor syndrome, or minimize it as much as possible. Avoid negative people in your life, ignore the online trolls, the "Well, actually..." people. Believe in yourself. Remind yourself that no one knows everything, and everyone had to start from the beginning at some point.

Here are articles which talk about the subject:

Also, check out Rob Conery's new book, The Imposter's Handbook.


I hope this helps, good luck!

See also