Uncategorized

Tales From My First Technical Interview

So I got my first technical interview.  It was an interesting experience, and definitely far outside of anything I’ve done before.  As I sit here on the train home it seems like a good time to work through my experiences, in the hopes of learning from it.

It was broken into three distinct parts, each interviewer came with their own goals and interests, and clearly had their own domain of knowledge.

Person 1: went through understanding of pretty basic stuff, asked me what the computer DOES, in as much or as little detail as possible, when you type “google.com” into the address bar and hit send.  He stressed that this was a “no right answer” kind of question, and just wanted to know how we thought through a weird question,and it also gave clear hints about where we came from. For example I talked about the DNS request, and then walked through how the page info would be downloaded and parsed.  When I finished he explained that in his mind he immediately went towards the hardware, and that the NIC was looking at the hardware cache etc.

Gave me white board question:  given unsorted array of ints how would you print every duplicated item only once.

To be clear, he started out with less concrete details that I’ve outlined here.  He briefly hemmed and hawed about a linked list vs an array, further more details were outlined when I asked.  Is it sorted? did he want duplicates printed once or multiple times, and were were time or space sensitive?

I enjoyed this a lot, it felt like he was trying to see how I thought vs giving me a scripted question that he expected a singular solution from.

After a brief detour into wrong town I realized sorting it was the best way to handle this, and at that he more or less told me to call a “sort the array” function and move on.  

After my first pass and I started to move to testing, he stopped me and said he saw 3 distinct bugs and asked me to relook over the code.  As I found the issues he checked them off the verbal list “With that change we’ve fixed the first two issues I saw.”

 

After I finished the solution he asked me to test it, and was pleased when I started writing out explicit test cases.  Then we talked about WHY I chose the test cases I did, and he explained how one of them was particularly good given a bug I had (which I of course didn’t spot with that test case because I hand waved too much).

Afterwards we went on to talk time and space complexity, of my solution.  And this is when that sorting came back up. He wanted these figures in terms of the sorting and then incorporating the sorting into the overall algorithm.

Person 2: This man started out wanting to talk about interfaces, and I had no idea what that was.  So when I told him I had no idea what that was, he more or less lost all interest in the interview, devolving to sitting on his phone while I worked on the coding problem I was given.  

That being the factorial problem both recursively and iteratively.  This caused a great deal of confusion in me, because of the simplicity of the problem.  I was completely confused by this being the thing that was asked. I overthought it so thoroughly, as I couldn’t fathom that he would give me something so simple.  Eventually I got through it, to a semi positive response from him. “Yeah that looks fine, we don’t even need to step through it.”

He then asked me about projects, where had I failure and how could I attribute that failure to.  And this is really where my stomach sinks. This sis a SUPER obvious question, and I shat the bed in such a catastrophic way.  I blamed and complained. I talked about process (or lack thereof) in my current work primarily. I didn’t OWN anything. If I don’t get the job this will be what I will 100% point to as the issue.  I NEED to find better answers to this question.

Then, finally, we went back to knowledge questions, talking about classes, the parts therein, how we handle/what are static member variables, what the different access specifiers were, and what they meant.  We walked through creation and use of a class, “we’re in main, create an instance of the class … okay now access the function given in the prototype.

One major struggle we had was a difference in coding language.  I find all of these types of problems easiest in C++, and that’s what I defaulted to.  When he asked me to create an instance of the class, he expected className instanceName = new className(arg), but because I was thinking in C++ I used className instanceName(arg) which he immediately latched onto as wrong.  

This whole section felt like a basic knowledge test.  I think he was thrown by my lack of understanding of interfaces, and was at a loss as to where to go without his interview path he had clearly planned out.

Person 3: Started off talking about languages, I clearly favor javascript, in that everything I’m listing as a skill I’m comfortable using is javascript derivative, and he wanted to talk to me about why that was something that appealed to me.  He moved on to talking some of the intricacies of javascript such as hoisting and how javascript handles variable scope (read: poorly).

His pre whiteboard problem was pretty brief all in all.

And this whiteboard problem MESSED me up.  I felt like every choice I made was wrong, and I pretty clearly got frustrated about it.  I will say, that I’m incredibly proud of the fact tat at a certain point I stopped myself and said “okay, I’ve gone down a bad path somewhere, back up, look at my assumptions, and start again.”  I feel like this was a very good decision by me, and hope that it was appreciated.

In the end I found a solution, it took some nudging “you’re looking for a math problem that wont be particularly helpful, but this other idea you’re chasing is a good path”.  But in the end I got there. At the end I had the insight to ask him to share his assessment, and he was massively positive. He said where I landed was what he was hoping for from interviewees.  There was an idiosyncratic way he solved it that he jokingly said was worth bonus points, but what he wanted was my solution. He then gave me some minor critiques that I need to 100% take to heart for this going forward.

Takeaways/Lesson plan:  

Interfaces, how do they work???

Prefixv vs postfix increments, why

Statics in greater detail

 

Job Progress, Non-technical

Lessons From A Career Fair

So my school had a career fair, and I went.  It was a near surreal experience for me. It felt like a singles bar, but instead of drowning in the smell of axe it was the smell of semi washed bodies.  Instead of top 40’s music blasting out my ears it was the dull roar of a couple hundred really nerd conversations buzzing barely outside of intelligible.

Beyond the novelty of the whole experience, there was this underlying continuous feed of “learn x from this” playing over and over in my head.  I laughed and I cried (not really) and I learned some things about myself (that one for real).

To start, I am BAD at cold conversation.  From the opening “Hi my name is …” to selling myself and interacting with the recruiters about their product.  I very rapidly got the hang of this as I warmed up to the experience, but there were some definite bombs. Sometimes the recruiters even helped me along to avoid me falling too hard on my face, and that was definitely welcomed.

I developed a bit of a flow to the conversations.  Start with introductions, of course. Ask about their tech stack and try to ask some sort of question about what they do and how/why they do it.  At this point if it’s clearly not for me, aka that one security company building software in C for a network switch, I would politely thank them for their time and move on.  Failing that I would then move into my experience and what I was looking for. If they engaged here, and most of them did, I would try to explore a little about the employee and see what they found enjoyable about the workplace.

When typed out like that it looks so easy.  But jeeze it doesn’t capture the level of anxiety and stress I felt at, what was essentially, chatting up total strangers.  Even if there was a very clear reason for the whole interaction it’s still strangely nerve wracking.

Lesson two is simple.  RESEARCH. Look these companies up.  Generally these sorts of things will publish a list of the companies.  Go through that and give each one at least a minimal level of googling.  The few times I’ve been on the companies side of the hiring table it’s nice to know that the candidate cares enough to put some minimal effort in, as well as getting to avoid the whole nuts and bolts of what your company is about is a nice time saver.

It’s a GREAT way to practice the openings of an interview, and I’ll definitely be doing it again as soon as it’s offered.

Have resumes!  I had mine in fancy little cases, and I’m not sure if that was a positive or a negative to be honest…

It’s the career equivalent of a singles bar, so just get out there and enjoy that experience if you get the chance!

Job Progress, Non-technical

Job Gettin’ – The Plan of Attack

Welcome back!  Last week (TODO INSERT LINK TO FIRST WEEKS POST HERE) I talked about my 10,000 foot view of the plan.  Now we’re back to make that more useful and less of a nebulous dream.  So lets get right in to it.

To keep this focused we’re going to do that thing that motivational speakers are always saying. Set goals, and not just any goals, but SMART goals. There’s a whole wikipedia article here if you need the whole break down, but the idea is to make goals that you can accomplish and know when you’ve accomplished them. The short version is:

  • Specific – target a specific area for improvement.
  • Measurable – quantify or at least suggest an indicator of progress.
  • Assignable – specify who will do it.
  • Realistic – state what results can realistically be achieved, given available resources.
  • Time-related – specify when the result(s) can be achieved.

This isn’t a complicated system. It’s pretty easy to see the goals and advantages of using this as the lens through which you view the goals you set. Though assignable is pretty laughable in a one man show. The biggest struggle I see is definitely the measureable. How do I say when my resume is done? When is my portfolio project ready for prime time? When am I done with leetcode? None of these have clear cut answers, and honestly I don’t have any idea how I’m going to handle them.

In any case let’s get into the nitty-gritty of going forward, and ignore the unanswerable questions for now.  Here are the big bullet point goals as such. In more or less the intended order of intended achievement:

  • Portfolio project
  • Resume (latex?)
  • keep weekly posts on this blog
  • Improve face to face under pressure
  • grind CTCI/HackerRank/Leetcode

To paraphrase a very smart 6 year old “Oh this is easy, I only have to do 5 things”

So let’s get specific…

The portfolio project needs to be more than just one monolithic app.  Though that’s definitely part of it. I have a piece of productivity software that I’ve been working on to help me keep myself focused on the important tasks, and getting that through to a 1.0 type version is goal one.  I want to have that done by the end of April. This is about a month later than I originally planned, and I don’t love that. But here I am.

I also want to make small things.  Just small proof of concept stuff. I’ve previously seen Jennifer Dewalt’s 180 websites in 180 days project and I loved that idea.  I don’t want to get that crazy with it, but definitely something along those lines would be great.  I have a very surface level understanding of react, and I would like to expand that to have some more breadth and depth.  There’s clearly a lot going on in the library, and honestly the whole of JS for that matter, that I just haven’t had a chance to play with.  

So I have through until the end of April to get through the productivity software, which is going to be a good thing, as I’m going to need about that much time.  Then finishing up the mini projects for May.

S: Get a completed sideproject to present.
M: Get the productivity software to feature parity with Trello so that I can switch to it.
T: By end of April

At the time of writing this I have a job fair coming up in two days, so the first pass of the resume is done.  However I do want to come back to this, and possibly hire a resume writer to get me something that is all around better.  Right now it’s definitely amateur and that’s a little sad.

S: Improve the look and feel of the resume.
M: Seek feedback publically (reddit/SA) and if it’s negative hire a resume writer.
T: By the end of April

Now for the really hard part.  I want to maintain a 1/week posting here on this site.  I have a slew of topics in mind, but honestly this sort of writing is a challenge for me.  Expecting myself to burn through a post in a week is definitely ambitious. However the more I type into my little word document here, the more I find I can do this.  Though I may end up taking a page out of Hemingway’s book for this particular step of the journey. The other major challenge here is the fact that I’m categorizing this time as the same as time to spend on personal projects, or CTCI, or whatever else

Though now that I say that I’m considering splitting it up into one pomodoro of each.  Yeah actually I like that idea a lot. I will definitely be switching to that after this term is up.  

S: Create content that shows that I’m engaging mentally, and how I think.
M: Maintain 1 post every 1-2 weeks here
R: Maybe not on this one, but I want to try.
T: Indefinitely

Cracking the coding interview and then the ensuing hackerrank grind is easy to set a goal for, hard to follow through on.  The goal is simple: Work through all of the CTCI problems, by the end of May, and start working through hackerrank problems starting that same month, maintaining ~30 minutes a day indefinitely.  Doing the thing is easy, doing the thing every day, that’s the hard part.

S: Get “interview ready” with DS+A questions
M: Work through CTCI by the end of may, start working on hackerrank every day starting in may.
T: Starting in may, indefinitely.

Social goals are basically impossible to quantify the actual skills.  I can’t say
“Hit relationship level x with y difficult person” and be able to watch that gauge as it grows over time.  I can’t just give someone a turnip every day until they have a blue heart for me. Thus I think the only way to make this work with a measurable goal is to set an effort in goal.  Perform x toastmaster speeches, go to y improv classes. Something like that. And of course, as the last one, this is by FAR the most terrifying to me. I’m not even to the point where I’m seriously looking at this and it clenches my whole being with anxiety.  So obviously this is going to be one of the hardest. Which makes me want to scale the difficulty down considerably BUT then I, again, lose the ability to maintain measurability.

All of this to say, at the moment I don’t know how to set a good (smart) goal.  I need to not crack under pressure in an interview, and I need to feel more confident in my skills in this area.  But I have no IDEA to do that right now.

S:  Be comfortable under pressure in interview situations
M: ????
R: see above
T: ?????

I’m going to have to come back to this, as unsatisfying as that is for a post.  Because I really don’t have any idea how I get through that in any way.

But overall this doesn’t look too bad.  It’s just small steps every day. Lots of small, doable, steps.  I hope you’ll join me on this journey going forward.

Job Progress, Non-technical

Lets go Job Gettin’

So I’m back on that “GET A FULLTIME JOB AT A SOFTWARE COMPANY THIS YEAR” train. It was a New Years resolution I set for myself at the start of the year, and then I traveled across the country for a gaming convention, came back and had the plague flu, and then spent weeks trying to catch up with schooling. Now that I’ve found stable ground again, and can actually see free time in front of me I’m returning to that resolution I made.

As a 26 year old Jr Software Guy™, getting a job seems like a totally reasonable goal to me. I’ve been at this coding thing for over an actual decade at this point. I got my start in web making custom pet pages and user profiles for Neopets back in the early aughts. I’ve been developing professional education software for the Center for Electron Microscopy & Nanofabrication at my school. I have the chops to get an honest to god fulltime position doing web work somewhere, and I know this.

While I’ve really enjoyed my team with the team at CEMN, and have learned a lot, it’s become clear to me that I’ve hit a block in my development of my abilities, and my career. There’s only so much a bunch of juniors green-fielding a very ambitious piece of software can teach each other about best practices, elegant code, and becoming better engineers. We can all code competently but at a certain point (aka right now) it becomes about more than just solving the problem, and turns into solving the problem well.

So this all means that it’s time to find a new job. It means I need to get out there and prove to the world that I can do the jobs I know I’m capable of doing.

So, how do I plan to accomplish this? I’m glad you asked! For starters I’m dedicating to at least one pomodoro per day of pure career development tasks. Whatever I determine as the big task on the docket will be pushed here. Optimally I spend more than 25 minutes a day on this sort of thing, but at a bare minimum one pomodoro will be done. The key thing for me is to turn it into a habit. It’s not quite the “no zero days” principal but it’s along that same line of thinking.

As far as the nitty gritty, in my head I see two big categories of goals here. Getting Interviews is part one. This encompases: resume, side projects, networking, and setting this blog up. The back end of this process is then “Beating Interviews”. For this I need to, primarily, beat my face against hackerrank for a lifetime, until I’m comfortable solving those problems. And while that’s the biggest hurdle, soft skills is it’s own way to get through interviews, as I’ve heard, so I won’t be neglecting those either. Staying calm in the pressure of an interview, talking about my projects in a way that shows my abilities, and just generally being, as cliche as it is, my best self, are all things I want to improve.

So let’s dive more into what each of those big two goals really means.
Get Interviews
I need to more firmly develop the skills needed to do more full featured work, as well as present those skills to employers. Luckily these combine pretty well to start. And by creating a portfolio type program or two, and publishing it to the web I show these skills off well. Furthermore, I’m already well on my way to having a solid work project at a stable release stage, so this isn’t even actually a far off goal.

After that the resume needs to be made. I’ve heard that the way to do this is with latex, though I’m unsure if the effort to learn it will be worth the gains from having a prettier resume. What I have in word may end up being what I end up with layout wise.

I’ve been told that keeping a blog is a good thing, as it shows how you think and reason through problems. This also is a massive boon to how I work through problems, and having my process laid out in front of me will only do wonders for helping me get to a better solution with everything I face. I also can honestly say I’m excited to do retrospectives, where I go back over old work to see how my thinking has changed.
Beat Interviews
The ability to be comfortable in a nerve wracking environment where I’m definitely being judged is something I KNOW I do poorly. I was thinking about starting toastmasters or something performative like that, maybe improv as that’s something I’ve thought about a lot.

Beyond that is the inevitable hackerrank/leetcode/ctci grind. I don’t really think there’s any way to dress this up. I just need to do some to be determined time of work at this every day until I’m comfortable. This will probably get slotted into the aforementioned minimum one pomodoro a day of career development work. I’m definitely not driven to do hackerrank, but it’s a game that has to be played to get where I want to go.

So that’s the 10,000 foot view of my plan of attack. I think it’s definitely doable, and I just need to keep stepping in the right direction every day, and I’ll get there shortly.

Thanks for reading, if you’ve ever made your own “get a job plan” let me know what you did and how it worked for you in the comments. I always love to hear how others got their start, and how I can improve my approach.