Reading02: My Interview Experience

Reading02: My Interview Experience

Going into the fall of my Junior year, I was completely overwhelmed.  Not only did I have zero technical (and almost no behavioral) interview experience, but I had essentially no idea what I wanted to do.  All I knew is I wanted a job where I would be coding.  This combination led me to essentially go rogue in my application process and apply to no less than 116 companies in industries from consulting to tech to finance and cities across the country from San Fransisco to Chicago to Washington DC.  After going through this somewhat ridiculous wide-net search, I feel quite acquainted with the ins and outs of the technical interview process and feel am in a decent position to speak on its merits and shortcomings.  Throughout the process last year, I experienced my fair share of behavioral and other non-technical interviews, but for the purposes of this blog, I will focus mostly on technical interviews.

At most firms I applied to, the process went somewhat like the following.  First, I would submit my resume into the black hole that was an online application.  If I was lucky, I did some sort of networking with that company through Notre Dame, but for the most part, this was completely random.  Due to the disconnected nature of this slingshot approach, I knew my response rate would be pretty low, but that was okay with me.  When I actually did receive a response that wasn’t just a standard rejection, most companies would ask me to complete a coding test (or some other type of technical assessment) on HackerRank or some similar online provider.  These tests would typically consist of about three coding questions of varying difficulty, usually structured so that time is not a horrible issue.  Though questions here or there were sometimes difficult, I usually felt that these tests were mostly manageable.  I completely understand the need for companies to screen their applicants with something like this before actually talking to them, so I was totally fine with them.

If I passed the coding test, the next step was usually a phone interview that could either be technical, behavioral, or a mixture, and often involved using a shared screen for coding.  In my experience, these interviews varied wildly in quality.  The worst phone screen I had felt more like a grilling on obscure data structures questions than a test for whether I would be a good fit at the firm.  I simply do not understand why being able to answer unrelated brain teasers like the data structures questions I received is even a somewhat good indicator of whether I’d be a good fit.  On the other hand, the best (and one of the most difficult) phone interview I had entailed me debugging an error I had made in the coding test I took in my application while talking to the interviewer.  I found this to be a much better assessment of my technical abilities than your standard algorithm/data structure coding interview question (which are a pain to prepare for and I don’t think are great predictors of actual job performance).

After these phone screens, the process diverged substantially (and I didn’t get to see it through completely due to thankfully finishing up relatively quickly), but most companies’ final round interviews involved an actual visit to the office for in-person interviews.  I won’t discuss those in this post, but before concluding, I would like to mention one other innovative interview tactic I found useful.  One company asked me to complete a small coding project to fulfill a prompt very relevant to its actual business and gave me a week to do so.  This allowed me to tackle a programming project in the way that I normally would with a timeline that wasn’t too much of a burden for me while going through other interviews and normal schoolwork.  And on the company’s end, it gave them a clear view into my coding style and problem solving ability.  Though candidates could certainly cut corners with this interview approach, I think it is a much better screening tactic than your typical coding interview.

In conclusion, I believe that while traditional coding interviews aren’t necessarily useless, they are best used when supplemented with some of the more innovative approaches I have discussed in this blog.

Reading01: What is Computer Science

Reading01: What is Computer Science

The precise role of computer science is open to much debate. As the domain of software development has progressed over the last three quarters of a century, the most appropriate way to categorize the discipline has not always been obvious.  Is it an art, a science, or an engineering discipline?  Does it matter?  Compelling arguments can be given for each, so throughout this post I will detail why I think computer science is an engineering discipline – just one of a different sort than we are used to.  However, I will ultimately explain why I think the distinction is essentially irrelevant.

The relevant entry for the word “engineering” in the Webster dictionary gives a two part definition: engineering is (a) “the application of science and mathematics by which the properties of matter and the sources of energy in nature are made useful to people” and (b) “the design and manufacture of complex product.”  Using the dictionary definition as the standard of proof for whether software development is an engineering discipline leaves a relatively simple task.  For part (a) of the definition, I think it is quite difficult to argue that software engineers do not “make the properties of matter and sources of energy in nature useful to people.”  Sure, if it weren’t for the electrical engineers who build and design the necessary circuitry and chips, cell phones would not exist.  But neither would they exist without the computer programmers who developed the operating systems and software to allow average humans to interact with these machines at ease.  Thus, computer scientists qualify as engineers according to part (a).  Part (b) is even easier to deal with.  Software developers design and release complex products on a daily basis.  Just look at the code required to run Facebook or power a self-driving car if you don’t believe me.

It could be argued that since computer scientists are dependent on the work of other engineering disciplines (especially electrical engineers) for their work to be possible, they are somehow less qualified as engineers.  Though I think this argument is shallow and ignores the fact that collaboration among engineers of different disciplines is commonplace (just think about what is required to build a skyscraper), I do think it underscores the idea that electrical engineers (and even the “computer engineers” responsible for hardware and very low level software development) are a more traditional sort of engineer than the software engineers of today.  The difference between software engineers and the more traditional engineering disciplines is that the traditional engineers work more closely with the raw elements of the earth, while software engineers work more with the products of other engineers (though all engineers today use software products, so this might be somewhat circular).  Thus, while I definitely do consider software developers true engineers, I will concede that a concrete distinction between them and members of the other classical engineering disciplines.

In the end, though, I think this argument is somewhat unimportant.  Rather than getting caught up in semantics, I believe both traditional engineers and software engineers should look at their respective shortcomings and strengths and look to the other to improve.  Collaboration between engineers makes the world a better place.

Reading00: My Ethical Framework

Reading00: My Ethical Framework

The concept of right and wrong seems relatively simple on the surface, but in reality it can be an extraordinarily complicated topic.  With so many differing opinions on what is and is not moral, it can be very difficult to decide what (if any) framework to follow.  Many people find it easier to simply slide into the relativistic stance that right and wrong depends completely on the person or culture.

Personally, I don’t know exactly what to call my stance, but the core of my position is that I am vehemently anti-relativist.  I think that relativism is one of the most dangerous ideas to emerge in recent years.  It can be used to justify almost anything, including unspeakable things from female genital mutilation to repression of speech.  I am quite disturbed that the technology industry has seemed to embrace a form of cultural relativism regarding privacy and freedom of speech.  If a company takes the stand that privacy is of the upmost importance and refuses to create a backdoor for American government investigators, then the same company should absolutely not build a system that allows the Chinese government such privileges simply due to the different culture and laws there.  I believe such behavior to be extremely hypocritical, but it can be easily justified with a relativist worldview.  Therefore, the first principle of my ethical framework is that morality is absolute.

Now that I have described what I feel to be an absolutely unacceptable approach to ethics, I will move on to a more hazy topic – how I actually judge the morality of actions.  I don’t think my personal ethics fall into one of the classical buckets, but I would describe my views as falling somewhere in between the Kantian and Utilitarian positions.  I believe first and foremost that the dignity of human life should be respected completely.  However, I will not go so far as to wholly embrace the Kantian position that whether an action is right or wrong does not depend on its consequences but on whether it fulfills our duty as humans (the categorical imperative).  I do believe that there are some things that are never acceptable.  For instance, using new technology to test genetic enhancements on humans without their consent is something I think is always evil regardless of potential positive outcomes.  However, there are some less severe cases where I think the ends can justify some otherwise questionable means.  One such case is the currently controversial topic of data privacy.  While I think it is immoral for the government to indiscriminately target all civilians and access their personal data, I think that an intelligence agency hacking into a suspected terrorist’s information to attempt to discover information about a potential attack is probably just.

In summary, I take the Kantian position that there are certain things that simply are never acceptable, but in more general and less severe cases, I take more of a utilitarian position that the intended outcome of some actions can justify methods that could otherwise be seen as immoral.

Reading00: Intro

Reading00: Intro

Hi everyone!  My name is John McGuinness and I’m a senior computer science major originally from the Washington DC area.  I first took a coding class my senior year of high school and found coding to feel less like work than any other academic endeavor I had previously undertaken, so I naturally decided to major in CS and have had no regrets.  Outside school, I love to golf, am an avid DC sports fan, and have a strong interest in the weather.  I’m also a proud member of the Fisher hall community.  In this class, I hope to continue some of the discussions surrounding privacy and consent that I had in my Philosophy of Technology class last semester.  I’m looking forward to a great semester!