Tag: Software Engineering

FAQ: Starting Your Career in Software Development Pt2

Applying for Software Development Jobs

How do I stand out on an application?

I think this is largely going to depend on where you’re applying. Something to consider is that especially with large tech companies, they’re getting thousands and thousands of resumes all the time. It can be really competitive to be able to even land an interview so sometimes if the caliber of other applicants is high, it can make it difficult to stand out.

That’s okay. We don’t have control over others, but we do have control over ourselves! We can try a few different things to stand out and help you get started on your software development journey professionally. The following are things I personally would suggest and may not reflect the exact views of my employers (past, present, or future) and may not reflect those exact views of recruiters/screeners at other companies. There’s my disclaimer!

  • Understand what the minimum requirements are and exceed them when you can. It’ll be hard initially, especially when job positions ask for a minimum amount of time as a professional. If you checked out this post and you had several internships, you’re actually already on your way to listing out necessary work experience! If you couldn’t land internships, or this is your first internship you might not have that luxury (and that’s okay!). Do the job description list other skills or experiences that are required? Can you get examples of that on your resume? Remember, if there’s many other candidates, it’s easy for screeners to filter out applications that don’t seem to meet the minimum requirements (even if you’re totally awesome!) just because there’s so much volume for them to get through.
  • Side projects are your best friend. Think about it though. If 1000 people apply for a job and all have similar work and school experience, how would you stand out? Well, if you’ve been working on some cool stuff outside of work and demonstrating that you have a genuine interest in different areas of software development, that could be huge! Are you going to be working with SQL in your new role? Maybe mention that cool tinder-for-restaurants app you made. Oh, that also demonstrates you know some cross-platform development tools. Awesome! What about that fun web app you made? AND you can put a link to it for them to try out? That could be a huge win if it’s a smaller org that has time to dig a bit deeper on applicants.

    For me, side projects are one of the most important pieces to consider. I get it though. Not everyone has time or the interest to work on stuff outside of their 9-5. And I’m not suggesting this is a requirement or the only way to land a job. I just think this is one of the best and easiest ways to stand out because it shows passion for creating, learning, and interest in your field on top of your work experience (that may or may not look like a majority of other applicants).
  • Your school grades matter… Until they don’t. I don’t want to give people the wrong advice here, so I’ll try to be clear. Especially during internships and at companies that get a lot of applications, grades are likely going to be a factor. It’s just another super easy way for a company to set the bar high and filter out a large amount of applicant volume. I don’t necessarily feel it’s the best way to filter candidates, but I also don’t blame companies for doing this if there’s overwhelming volume. If two people have identical applications but one received a 5% higher average in all of their courses, if you only have time to interview one you’ll likely pick the one with the higher average. Again, I’m not suggesting this implies the other candidate is not worthy or this will always net a company the best employees, I’m just saying that they need to filter down candidates and it’s an easy way to do it.

    With that said, my personal opinion is that I don’t care about grades. Not much, anyway. For interns, I’d probably expect someone to do well in their programming courses, but if your calculus and physics marks were super low I really don’t care. Not unless I’m hiring you to do physics and calculus. But generally (and I hope this comment ages well!) I’m not. I’m hiring you to be a productive member of an awesome software development team.

    Once it comes time for full-time employment I don’t really care about grades at all. I want to know about interesting experiences that are relatable to what you’re applying for. This will give me fuel for engaging interview questions as well, which is our next question!

What types of interview questions should I expect?

I’ll just throw out another reminder here that this is fully my own opinion and not necessarily the opinion of my past, current or future employers. When I’m interviewing people for software development positions, there’s certainly a minimum expectation I have with respect to programming abilities. It might not be what is popularized on the Internet though.

First off, I need evidence that you have actually programmed before. Ideally this is done in a pre-screen (online, over the phone, etc…) before I’m sitting down with you for a lengthy hour (or more) long interview. I have sat in interviews with people that have claimed multiple years of professional programming experience but could not answer FizzBuzz. What’s not make-or-break for me is your knowledge in a specific programming language. Sure, if you’re an expert in the language(s) we’re using heavily in our stack that’s great for ramp up time. However, I feel that great programmers can learn other languages and be effective with them, and I’m seeking great programmers.

Next, I want to see you problem solve. I’m not impressed by you being able to answer an algorithm-based question immediately or jumping right to coding up a heavily optimized solution perfectly the first time around. Why? I’ve known people to memorize these sorts of things. Sure, the pool of questions to pick from feels infinitely large but it certainly does happen where someone lucks out on an interview and they see a question they know an optimized answer for. My interview directly out of university was actually exactly like this, where I was asked one single question and I knew the optimized answer for it in detail (which I disclosed to the interviewers). But as an interviewer, I have no interest in picking candidates based on their memorization abilities. I want you to explain your thought process. I like adjusting the question on the fly with different constraints and have you explain why you might change your design or approach. Why? Because in the real world of software development this kind of thing happens all the time. What doesn’t happen all the time are really contrived theoretical algorithm questions popping up regularly. And just to wrap up thoughts on this point, there are absolutely real situations where applying knowledge and understanding from these algorithm questions is critical, but I don’t feel memorized solutions to these help in the real world.

If you plan on working in big tech companies, especially ones with services running in the cloud, you’ll probably be asked system design questions. I won’t write much here because my thoughts on this are essentially the same as the previous paragraph. Don’t memorize. Understand, explain trade-offs, be able to work through different constraints in your systems! There are plenty of sites online that offer examples to go through, and great examples on YouTube, so I’d just take the time to go learn and understand (not memorize).

Finally, I love seeing how people work together on teams. This is something I’m trying to understand throughout the entire interview process. I want to make sure you’re collaborative and that you’ll work well with others. In the real world of software development, you’re almost always working with others. Being the most amazing programmer but not being collaborative doesn’t work well in any environment that I’ve worked in over the last 10+ years.

How do I stand out in an interview?

If you’ve nailed down the stuff in the previous points, you’re probably doing great. But beyond that, I want to see and hear about your cool work experiences. I want to hear how you problem solved and developed creative solutions. Tell me your favorite project. Explain how you learned from one of your failed projects and what you’d do differently going forward. Tell me more details about how you work well with others, even when there were difficulties between team members. Tell me about unique challenges you worked through with your team and how you contributed to the success.

I love seeing people get pumped up about their hobby projects they work on outside of work. It helps to demonstrate that you’re constantly learning, challenging yourself, and that you’re passionate about software. As I said towards the start of this post, I understand that not everyone has time for this kind of thing so it’s not a make-or-break item on an interview. But we’re talking about standing out, and for me, this is something that becomes memorable.

Should I reach out to (hiring) managers directly?

This can largely depend on the organization and how they approach hiring. So my suggestion here is hopefully a good-enough general approach to answer this.

First off, I think you should start by going through the normal HR/recruiting channels that a company has to offer. Get into the system. Get your application/resume in and get queued up so that the right processes can get underway. If you’re already interested in the job, I think this is your first starting point. When people reach out to me and ask about hiring, this is exactly where my mind goes.

Next, if you’re reaching out to managers, I think there’s some do’s and don’ts to consider.

  • DON’T assume that every manager on LinkedIn is currently hiring or directly involved in the hiring process. The conversation generally won’t go too much further if you’re asking person for a job and they’re not in a position to be hiring. Chances are they’ll recommend you do what I suggested above and go through normal recruitment channels.
  • DO reach out with a specific posted position if you think it’s relevant or know it’s specific to their team. Structure your conversation around expressing interest in this role and ask your clarifying questions about it.
  • DON’T ask for referrals if you’ve never worked with the person. I personally don’t know why people expect this to be successful. If I’m recommending someone, it’s my name going along with that referral. Instead of asking for a referral, consider asking if they’re aware of other roles or information about where you can find additional posted roles.
  • DO be personable and respectful. Express interest in the area this manager is hiring for (after you’ve confirmed your assumptions, right?) and ask about the best way to get visibility for applying. If they suggest the best way is truly going through the HR/recruitment pipeline, being more pressing beyond this likely won’t be beneficial. Some managers do more hiring directly and other times this is largely through these other channels.
  • DON’T reach out with expectations that by doing so you will guarantee that you’ll be considered for a role or that the manager has an obligation to set you up for this. This goes back to being respectful. Generally people will try to help if they can, but it’s unfair to set expectations that they’ll drop what they’re doing to help you get a position.

This series of FAQ posts was actually inspired by an individual reaching out with some very specific questions that I could answer. Many of these were asked by others over time, but this individual was polite, patient, and concise in what he wanted information on. There were no demands of me or expectations I’d secure him a job. I think his approach was spot on.


FAQ: Starting Your Career in Software Development Pt1

Navigating Post Secondary Education for Software Development

Do you have any advice regarding university applications?

For university, it’s been so long since I’ve had to go through applications that I’m not sure I have really specific advice. I think it’s important to know what schools have for prerequisites and really ensure you nail those down. In terms of which school to pick, that’s certainly a personal choice. You’ll have so many factors to consider including cost, what programs are offered, relocation, proximity to loved ones, etc…

As a hiring manager, personally, I am less concerned with WHERE someone went to school versus what they could showcase about what they have learned. I’d also personally suggest checking out schools that offer internships since it’s an excellent way to get real experience! This is something that worked really well for me since I didn’t really enjoy classes but my co-op positions proved to me that I was in the right line of work.

Software engineering or computer science?

Great question! I opted for computer engineering. Couple of things to touch on here including the “computer” part meant both electrical and software as a blend. I loved to program but I wanted to learn about hardware. Once I learned about hardware, I realized I wanted nothing to do with it 🙂

The engineering vs science part… My understanding is that if you want to pursue being a licensed professional engineer, you must go to a school with an accredited engineering program. For me, this is something that I wanted personally. Funny enough, in software, it doesn’t seem to be too common that folks go for their P.Eng. As a result, it makes it harder for someone like me to work under a P.Eng to get that experience.

How do you navigate scholarships?

I’m not sure I received much of anything for scholarships/grants when I was going for school, but if I could go back in time I would kick my own butt… DO THIS. If you can get free money to fund your education, do it. Do the research. Write the essays. Invest time into this because it will pay off by subsidizing your school. You’ll be so thankful you did it later.

If someone would potentially pay me to write an essay now, I’d do it even 9+ years after graduating from university. You bet I would 🙂 I don’t think I could motivate myself at the time, but if you’re reading this then please do better at this than I did!

Any general tips for going into college/university?

Beyond what’s already been mentioned, I think that’s mostly it. Take it seriously to make sure you can meet the requirements of the schools you want to go to. It’s easier said than done, because I can remember I just wanted to be a kid, be with my friends, play video games, etc… But it’s a huge step in your life. Take it seriously.

People used to make fun of me for getting high grades in high school. It’s natural to want to fit in so it would be embarrassing to do well on tests. It would make me want to slack off. But remember, you need to put in the work to get in. And once you’re in, you need to KEEP working to stay in.

Another critical point is that you need to take the time to understand how you learn. I went from getting 95+ in all my courses to barely passing things. And a pass was more than just getting 50% for my average to be in an honors program, so it went from being a super laid back approach to feeling pretty scary. For me personally, I learned nothing in my lectures. I’d sleep half the time. So I stopped going into class (aside from tutorials and labs) and would force myself to do work at home. This doesn’t work for everyone, but it was critical for me to not be wasting my time sleeping in lecture halls. This took me a long time to realize. I also had to teach myself how to study effectively. I had to learn to take mini breaks. You learn a lot about yourself, but I think you need to have some awareness that your high school learning might look VERY different than post-secondary learning.

Once you have a good understanding of how you can learn and study, you’ll be on the right track.

What are your thoughts on internships?

Do them if you can. I can’t stress this enough. I disliked almost all aspects of my time in school (like the IN class part!) but my internships saved me. They were a constant reminder that as long as I finished I’d be doing what I loved.

If your school allows for different placements, take advantage of this. I had 6 internships at the University of Waterloo. I did a repeat of my first job, a repeat of my second job, and then tried two different companies after that. I gravitated towards startups, but I also tried working in a larger company as well. Get. Diverse. Experience. Learn about all the different fields you can get into. Software is such a cool industry because… It’s in every industry!

Another benefit to internships is potentially securing a position for right out of school. Cool huh? If you’re really liking where your internships take you, then why not take advantage of companies looking to take you on full time right out of school? Many companies are happy to invest in you, especially if you’re going to be sticking with them after you graduate!


TL;DR: Unit vs Functional Tests

Here’s a super quick peek into unit tests compared to functional tests. And full disclaimer here is that depending on your circle of influence, these might be given slightly different names. Try not to dwell on that but instead the comparison and contrast presented!

Unit Tests

Coded tests that take a white-box visibility approach to exercising and asserting that written code, generally a specific function/method, works as it was designed.

Pros:

  • Generally very programmer-focused
  • Very granular coverage (breaks can identify exact lines where an issue occurs)
  • (Should) run extremely quickly
  • Have very little test setup in ideal cases
  • Provide full control (generally via ‘mocking’ dependencies) to exercise very specific logical paths

Cons:

  • Generally more challenging to convey coverage to other stakeholders
  • By nature these are brittle and break with refactoring
  • Require sets of design patterns to help ensure tests are easy to write/maintain
  • Sometimes present false sense of confidence in large codebases (i.e. systems working together) due to mocking requiring assumptions

Functional Tests

Coded tests that take a black-box visibility approach to exercising and asserting that software performs particular functionality as expected.

Pros:

  • Generally easier for non-programmer stakeholders to understand
  • Generally covers multiple classes/systems/methods working together to demonstrate behavior
  • More resilient to refactoring since this approach ignores the internals of what’s being covered
  • Exercises REAL parts of the codebase with no mocking

Cons:

  • More coarse than unit tests. Breakages might need more investigation.
  • Can potentially have more test setup given that multiple things will be interacting

Summary

So which one of these should you and your team be writing? The answer is probably both! There are benefits and drawbacks to both of these testing strategies and they overlap really nicely together. If you know you’re going to be refactoring a complex piece of your system, functional tests would be great to put in place so you can check expected behavior after. Unit tests might be great for mocking out complex dependencies or validating a variety of inputs quickly into a function. If you have an understanding of how you can leverage these, you have more tools in your programming toolbox!

Don’t like reading? Listen to me instead!


RPG Game Dev Weekly #1

As I’ve been trying to get more YouTube content put together more steadily, one of the themes I’m interested in is doing some behind-the-scenes of the role playing game (RPG) I’m making with some friends in Unity3D. I’ve found that being able to work on an RPG outside of my regular day job is a really awesome way for me to keep up on my technical skills. I love coding, and the further along I move in my career as an engineering manager, the less time I actually spend writing code myself. I pride myself in being a technical engineering manager, so for me working on this RPG is a great outlet for creativity and practice. I mentioned this in my LinkedIn post here:

Persisting Game Objects Across Maps

In this video, I focus on one of the challenges the game was facing due to how objects are materialized onto the playable map. The map that we load from disk to be shown and interacted with in the playable RPG commonly has “templates” and “spawners”. Both of these are responsible for creating objects at runtime given some criteria. As a result, uniquely placed game objects appear on the playable map for the player to interact with.

Sounds good then, right? Well the two challenges I focused on addressing were:

  1. If we leave the map and go to another one, there’s no way to persist the player across maps! That means you get a brand new character every time you transition maps. In an RPG, this is definitely not going to work out.
  2. If we return to an existing map, we expect it to be in the same state as when we were last on it. This means that the objects generated from templates or spawners must remain and NOT be respawned (which would effectively make completely new game objects).

Check out the video below:

RPG Dev Log 1 – Persist Game Objects Across Maps

Persisting Map Game Objects in a Cache

Next up was actually implementing some of the changes being discussed previously. In order to make this work in our RPG, my goal was to:

  1. Allow maps to save a lookup of the unique IDs for game objects that were generated
  2. Save the list of game objects generated into a “cache”
  3. Upon revisiting a map, tap into the “cache” to reload the existing game objects

One of my mental hurdles with this was acknowledging that we don’t yet have a solid serialization foundation for our game. I was thinking I’d want to serialize the game data to something persistent to make this work, but I was also worried writing things to disk would be overkill (and how does this mix with save game concepts?). Instead, I opted for the lightweight approach was “get something working” and I can revisit this later to extend it to persist things to disk if necessary.

Check out the video below:

RPG Dev Log 2 – Persisting Map Game Objects in a Cache

Which Domain Does This Belong To?

We’ve been trying to practice Domain Driven Design (DDD) concepts in our game. One pattern I’ve taken to an extreme is over-separating domains into very granular pieces and the result is that we have HUNDREDS of C# projects. It’s overkill, for sure. However, I feel that it’s offered some flexibility in having boundaries we can collapse later. My experience so far has told me it’s easier to collapse boundaries than it is to split.

This is all and well until we have situations where I need a class that has knowledge of two domains. That’s what this next video was about. I talk through acknowledging that I don’t know what to do and that I’ll move ahead with something best effort. I think the answer to my dilemma is that I need to translate things into a new domain for usage, but it feels like overkill. If you have thoughts on this leave a comment on this post or on the video!

Check out the video below:

RPG Dev Log 3 – Which Domain Does This Belong To?

Death Animations For All!

Finally, this last update was about something hopefully less boring… Death animations! I worked through how:

  1. I can extend our reusable sprite animation factory to create a death animation to be reused by ALL our actor sprites
  2. I can build a system that checks actor life and changes the animation as necessary to death

Unfortunately I had some hiccups the first time through recording this, but I wanted to code the whole thing live. After a Blue Screen of Death interrupted my first attempt, my second attempt I think worked pretty well! Without much code at all we could get this system fired up and it worked the first time! Well, close. I didn’t realize that our animation system already supports an animation that has an “infinite” duration final frame (in this case, the body laying on the tile). This is handled by a null value instead of a set length in seconds. I fixed it right after recording! Overall, I was incredibly happy with the result.

Check out the video below:

RPG Dev Log 4 – Death Animations For All!

  • Copyright © 1996-2010 Dev Leader. All rights reserved.
    Jarrah theme by Templates Next | Powered by WordPress