You’ve got it backwards—people go to university to study computer science because the industry is always changing.
University computer science programs don’t (just) teach the latest tools and technologies; we primarily teach the core principles that those tools and technologies are built on. And despite rapid changes in technology over the last fifty years, surprisingly few of those core principles have changed.
Strong university computer science programs help their students develop the core skills, intellectual maturity, and study habits to learn—or better yet, create—whatever new tools are necessary for their career as it evolves over the next several decades.
Originally Answered: What is the biggest fuck up caused by an intern at a tech company?
Edit: Since this was published in Forbes there's been a lot of questions about whether this is a "screw up" and a few other things. I've added comments addressing this at the end of the story. ---
When I was 21 I almost lost several hundred million dollars by threatening to mutilate one of our customers.
In my senior year in college I worked full time as an intern PM at NetApp. I spent most of that time at work being groomed and prepared to be a full product manager, and given that my background was in cryptography I got pulled into a lot of customer meetings related to security.
One of our customers at the time was undergoing a big change with their security architecture, and I tagged along with one of the directors to the meeting. I was one of ten PMs giving talks on roadmap and our plans, and I had 30 minutes to convince their CIO and CEO that we could integrate our new systems well with the new security infrastructure they were rolling out.
It turned out though that the CIO and CEO weren't the only ones in the room. Joining them was the company's Chief Security Officer (CSO). Like me he was a young, rising star in their company with a lot to prove in a short period of time. He also didn't like me much from the get-go; when I walked in the room he sneered, and when I went to plug in my laptop to the projector he openly asked, "Is he really going to present alone?"
Most of my 5 slide presentation was instantly ripped apart. I had a good command of the tech involved, so the criticism wasn't on our findings. Instead, he nitpicked the design - the colors were off, the fonts weren't like the other presenters' (admittedly I did disregard the style designs, my bad), etc.
When I finished my slides and hit the time for questions, he laughed and shooed me away. "Good effort, but you clearly don't abide by our security practices." I stared at him with tired, dagger-piercing eyes across the podium. Not only did we abide by what they needed, but I'd spent all night working on this presentation (which combined with going to school full time meant that I was on very little sleep). I was pissed off, and I decided to push back.
Me: "Well what specifications are you referring to?" Customer: "You don't understand. We are subject to a vast amount of compliance requirements inclu-" Me: "-ding FIPS 140-2, PCI-DSS, FISMA..." (I did my homework on the account)
Their CEO took notice at me pushing back and seemed to wake up from his "I don't care, when's lunch" stupor. As the CSO and I nerd battled like we were Sith and Jedi LARPers at Gen Con, a bunch of the account reps in the back of the room tried to get me to come off stage. My director let me stay.
Finally once I had proven that we fit the spec, the CSO changed tone to something ridiculous.
Customer: "Well what about biometric scanners? We need biometric scanners."
I blinked. Biometric fucking scanners? We're a storage company, not the Goddamn NSA. I responded that our authentication schemes supported most of the protocols that are used by bio-scanners, but he retorted that it needed to be first-party only.
I sighed, clearly exasperated, and responded bluntly. "We don't make biometric scanners. You don't need biometric scanners. They're expensive and none of your compliance requirements need them. It's complete overkill." The CSO immediately (and vehemently) shot back angrily, citing his military experience and how he was going to make an infrastructure that was "unhackable."
So I decided to turn the tables on him. "Okay, biometric scanners - what kind of biometric scanners do you need?" He gave me a basic list of specs, but having recently completed a homework assignment in my information security class (a class taught by a ex-NSA cryptanalyst who liked to talk about now-public faults in old security systems) on the topic I hit him back with the various faults in modern bio scanners - including the gory details on how you fraud them.
Me: "So you want bio scanners with feedback right? That's cool. Well what's to stop me from cutting off your thumb and swiping it like in the movies? Nothing. Unless of course you want to integrate temperature and humidity monitors, and even then I'll defeat it by running tubes into your cut-off thumb with warm water or soak it salt water in the microwave-"
At this point the CSO sat back horrified. The CEO of the company was dumbstruck, the account team in the back of the room was mortified, and my director was dying of laughter.
I proceeded to then go into detail about the faults of various retina scanners ("well I could pull out your eye and put a layer of Visine over the retina..") until finally the CSO sat back in his chair - both defeated in his designs and horrified at the glasses-wearing Asian kid in front of him that looked less like a brainy engineer and more like the Unabomber.
At this point the team decided to call it. I was quickly hurried out of the room - only after thanking the customers for their time of course - to where I met with the rest of the PMs in attendance who were literally doubled over with laughter. The account rep on the team later joined us and blasted me with a series of insults, noting that my insubordination might cost them the account and that I "clearly wasn't mature enough for my job."
I spent the next few days calling myself an idiot and getting ready to change my LinkedIn status. But when the email feedback report on my presentation came back I got the highest rating from the account's exec team. They noted that the CSO can "be difficult sometimes" and they appreciated that I "had a strong command and understanding of the security requirements of our space."
I spent the next few years at NetApp running product security. This event definitely came up during my year end review though, and since then I've become much better at presentation etiquette.
------ This is a screw up (note: original title was "fuck up") for a few reasons:
1.) You should never, NEVER, talk to customers like that. It doesn't matter if they're wrong - you can still challenge someone while being courteous (and not graphically detailing their mutilation). A huge part of your job as a PM is to be social, and this goes against every aspect of your gig.
Good PMs should be more Cicero, less Amy from Amy's Baking Company. Doing that requires a careful command of communication and responsibility, and I displayed none of these traits when I decided to go wild on this dude.
2.) There's a lot I didn't know about the account and the sales team's strategy such that my outburst could have ruined their plans a few months to a year or so out. Storage is a sector with a notoriously long sales cycle time, so the strategies often play out over a long period of time. It was extremely short sighted of me to do something like this.
3.) That meeting established a reputation that followed me for the rest of my days at NetApp. Because of my outburst, our execs (rightfully) sent me everywhere with senior staff and/or members of corporate counsel. I had to work hard to prove that an early twenty-something could be in charge of something as sensitive as security, and because of this incident I had to work doubly hard to prove that I wasn't a loose cannon.
Basically, I just got really lucky that I didn't get fired and cost the company a big customer.
Also, for the record, defeating industry-standard biometric scanners not as easy as dipping someone's thumb in warm water. It's obviously a lot more complicated than that, and the oversimplification was rhetorical in nature.
Originally Answered: How much do interns contribute to the growth of a company?
Negatively. It's pretty well understood at tech companies that interns are a net negative (in the short term) for a company.
Interns are, with few exceptions, very inexperienced. They don't have the skills yet to contribute much, so they just won't get a lot done. They need training, close oversight, and management. This means that they distract the [more impactful] full time developers from their jobs. They're also fairly well paid within tech companies.
The work that they accomplish is insufficient to compensate for all those costs. They work slowly and are more likely to make mistakes, as mentioned earlier. Moreover, because their skills are low and less certain, companies will tend to prefer to assign any really valuable work to a full time employee.
Then, of course realize all the expense that goes into an intern program: recruiter time, interviews, etc.
All of this could also be said for new grad hires, but they stick around for longer after they've ramped up on a project.
It's pretty well acknowledged in tech companies that you don't hire interns as "cheap labor." You hire them as a recruiting strategy. It's a way of doing an extended, in-depth interview, and thus reducing the odds that you hire the wrong person. It also gets your name out there on college campuses and hopefully makes graduating students more likely to consider your company.
There are probably ways of making interns a bit more productive. You could design an interview process that selects (more) for those with skills to make an immediate impact. But then those people would be less likely to be effective full time employees (if it weren't believed to have such a trade off, the company would be using this for their full time employees already). It doesn't really make sense to design a new interview process to increase productivity for three months and sacrifice the full time potential a bit.
Internships are essentially extended interviews -- a drain on productivity in the short term in an effort to hire more effectively in the long term.
Originally Answered: Internships: What is the most catastrophic mistake made by an intern at a company?
An intern was told to reboot "the computer" by the help desk. Unfortunately, the intern was studying computer science and knew it was a networked system, so he rebooted the master server and took everyone off line.
Unfortunately, all of the nationwide financial transactions being processed at the time were lost and needed to be recreated from a failsafe, redundant mechanism.
That one mistake in the middle of a workday was estimated to have cost the company over $500,000 in direct costs and the per diem interest on the large sums being documented and transferred in a mortgage system. Unfortunately, the next day's rates were slightly different and any increase over the life of a particular loan was the company's responsibility if the borrower did not sign a correction notification statement. Some borrowers simply abandoned their loans and used the excuse to walk away from the settlement. The settlement costs were reimbursed by the company. Nothing happened to the intern, but the help desk advisor was terminated for not fully explaining what needed to be done.
I was in the first semester of my sophomore year at UCBerkeley. I had just switched my major to Electrical Engineering and Computer Science and previously had no CS experience whatsoever. One of my friends from high school got me Starcraft 2, and I decided to try it out.
Fast forward a couple of months, and I was in the top percentile of 1v1 players at the time. I was queuing up against random opponents on the ladder, when I got matched up against a Protoss player with the tag "anxman". He decided to cannon rush me, which was a strategy I was pretty used to seeing. However, the way he did so was very odd. For those unfamiliar with the game, a "cannon rush" is a strategy that you want to keep hidden from your opponent for as long as possible, until you are ready. This guy just executed it in my face (he built his first pylon and forge, his first two buildings, next to my command center). Since the strategy depends a lot on the element of surprise, and I was used to dealing with it with much less preparation, I was able to beat him.
Since the game was still pretty young at this time, I was honestly curious if this was something he could pull off at this level of play. It turns out he was just having a bit of fun seeing how far he could take these types of strategies. We chatted a bit, and then ended up teaming up and playing a series of extremely silly 2v2s together where all our games consisted of these similarly terrible rushes bound to fail. These games ended up being really fun, and we continued to chat while playing them. This was where it got a little weird...
(some hazy memory of a snippet of our conversation follows)
anxman: so... where are you at? me: in cali right now anxman: cool, me too anxman: where at? me: bay area anxman: cool, me too anxman: where at? me: ... east bay anxman: where? me: berkeley (uhhh... creepy...) anxman: that's awesome man, you going to school there? me: yeah anxman: you a cs major? me: yeah, why? anxman: cool, do you want a job at facebook?
Uhhh... what?! At this point, I had been a CS major for about a year, and had completed maybe only 2 classes actually related to CS. I let him know this. He said it was cool, and told me to add him as a contact and hit him up when I had some more classes under my belt. Later in my sophomore year, I throw out my resume everywhere (including Facebook), but I have no experience still. I decide not to contact anxman since I don't think I'm going to have a shot at anything. I'm promptly rejected from every company, and fail to get an internship for the summer of my sophomore year. No biggie.
Junior year rolls around, and now I *really* want to secure an internship that summer so I have something decent to show when I graduate. I was still playing Starcraft 2, but anxman and I had not really talked at all since our initial encounter. My resume was still pretty weak and anything was worth a shot at this point, so I made the decision to message anxman the next time I saw him online. After a few days, I happen to catch him online and message him.
me: hey man, do you remember me? (weak) anxman: not really, give me a refresher me: you met me last year on ladder, tried to cannon rush me, then we played a bunch of 2s together anxman: OH YEAH! what's up man? me: i'm in my 3rd year now at berkeley, looking for an internship this summer. me: do you know what facebook recruiters look for on resumes? anxman: well, what have you done? me: well, not a whole lot, really anxman: hmm... no worries. i'm sure there's something. why don't you send me your resume and i'll take a look. anxman: here's my email [firstname.lastname@example.org] (not his real email, obviously)
At this point, I still don't know this guy except for some limited interactions where he creepily asked for my location during those games. I quickly Google this email as a sanity check, and I see that at the very least, it's a legitimate email of someone who works at Facebook. This is actually the first time I learn his real name, too. I really have nothing to lose at this point, right? Well, except that my resume contains my phone number and mailing address... but...whatever! I send my resume over to that email and let him know.
anxman: cool, let me check anxman: got it anxman: well... anxman: you're right, this is pretty weak. there's not a lot on here. me: yeah... anxman: tell you what, i'll forward this to the recruiters anyway, but theres no promises on whether you'll even be contacted or not me: cool, that's probably the best i can hope for. thanks! anxman: no worries, want to play a few games?
Phew! Got that over with. 90% confident that this "anxman" guy truly is a Facebook employee...
A few days pass, and sure enough, I get an email from a recruiter at Facebook! She sets me up with a short phone screen, which leads to a few 45 minute interviews over the phone, which leads to an internship offer. I accepted this offer and interned at Facebook in 2011. Almost all of the people who played Starcraft at Facebook knew me as "that intern who anxman recruited through Starcraft." I have now worked at Facebook for over a year and a half full time. Thanks, anxman, for taking a shot with me and changing my life!
First, it is impossible to tell how rigorous a degree program is based on the two letters it adds to your resume. Degree programs in computer science vary widely, both in topical coverage and quality, between different universities, orthogonally to the name of the degrees they offer.
Second, employers do not hire employees because of their degrees. They hire employees with strong evidence of potential for success; they look for particular skills and experience and interest, not at the letters after your name.
Similarly, graduate schools do not admit students because of their degrees. We admit students with strong evidence of potential for success; we look for particular skills and experience and interest, not at the letters after your name. I literally do not know which of my former graduate students, or which of my faculty colleagues, had what kind of undergraduate degree. I’ve never known. I’ve never cared. It’s never mattered.
Assuming you have a choice, you should go for the major/degree/university that best fits your skills and your interests and your career goals, no matter what letters it uses to describe itself.
An Update: Looking at the comments, there was puzzlement about what I included and what I left out. I hope to clarify my decisions in why what was included and what was left out.
I do agree with the comments that Linguistics should be dropped and have.
My list is based on “What is essential for all Computer Scientist.” Some times are included because they are necessary for multiple specialization.
Discrete Math. (Number theory, set theory, graph theory, probability, combinatorics). This is essential math for all programming.
Algorithms and data structures. Data structures and algorithms are two sides of the same coin. Algorithms and Data Structures are an essential study for all programming.
Automata Theory. This seem to an esoteric study. But my experience is that understanding and using state machines in programming is an effort multiplier. But few programmers take advanced of “state machine programming.” State machine is a bases for software architecture.
The Programming Languages Course. This exposes you to the 1. The power and limitations of high level programming languages, 2. What are the current “languages of the day”, and 3. The runtime data structures intrinsic to that programming language. The upper bound in performance of computer languages, is the run time data structures and algorithms.
The Networking course. This course did not exist when I was in college. Today it is essential in programming. The math necessary to master networking is queuing theory. No one question in its inclusion.
The database course. This another one that got no comment. Database is based on set theory, algorithms and data structures, and automata theory. The math in database is covered in Discrete Math.
Linear Algebra. This is a foundational math for: 1. Computer Graphics, 2. Computation Physics (and GPU programming), 3. Machine Learning, 4. Kalman Filters (used in GPS, inertial navigation (think rockets), and 5. target tracking (think radar and smart weapons)), 6. Orbital mechanics, 6-DOF (degrees of freedom) simulation, 7. solving differential equations, and 8. Statistics . Sometimes it is folded into Discrete Math, but mastery of Linear Algebra is a foundation for the above list.
Experimental Psychology. Most people worry about “computer performance”. This is measuring and programming for “human performance.” There is a big mismatch between computer computation and human computation. This explores how to measure if our user interface and UX (User Experience) is working correctly. We can design better UX by understanding the power and limits of human computation and perception. (How fast do people compute? What is size of short term memory? What is the decay time for short term memory? How to “keep alive” recently displayed information? What is minimum time to perceive an informational landscape? How deep should undo/redo be?)
Items left out:
Operating Systems: Today’s programming is far removed from the operating system. Applications live on top of an API. That API is typically several layers above the actual operating system, aka kernel. Take for example Sockets. It is an API that is (some what) portable among different OS and programming languages. Java is such the JVM isolates the programmer from which kind of OS the program is running on. Even the C, a low level language, has a run time library that isolates the programmer from the OS details. Operating Systems are now a specialization niche. Also there are far fewer operating systems now than when I was in college in the 70’s.
Linguistics: It was thinking that this was a foundation understanding. I didn’t realize most people just use libraries to create or accept speech.
Computer Graphics: This is a specialization area. Most people don’t dive into this. Yet linear algebra is needed for this study.
AI. Another specialization area.
Specific Computer Langagues. The “language of the day” is covered in “Programming Languages.” You need to know how learn new programming languages. For what you program tomorrow may have not been invented, yet. That was true for me.
Object Oriented Programming: This only one Programming paradigms. The computer hardware is imperative aka procedural. It is a layer of software that implements specific paradigms such as: O-O (like Smalltalk, C++, etc..), Functional programming (like LISP), and Logical programming (SQL and Prolog). This is covered in the “Programming Languages” course.
Take a look at the ACM Computer Science curriculum.
Originally Answered: What is the most catastrophic error made by an intern at a tech company?
Ok I give in because I got an A2A -- I don't really consider this catastrophic, but it's a funny story and I had people messaging me from all around the company telling me what a great laugh they had encountering this bug (including the team that had to fix it!):
I joined at the beginning of my internship under the username www (they are my initials), and all the engineers' sandboxes started to redirect to mine because of the url address.
So yes, I managed to break things without even writing a single line of code.
I’ve been a working programmer for close to 40 years - and video games are by far the hardest thing I’ve ever done. (And the most rewarding - both mentally and financially!)
A modern, “AAA” video game title is likely to be one of the most complicated pieces of software written anywhere in the world.
Grand Theft Auto V is claimed to contain over 100 million lines of code.
The Linux Kernel is “only” 15 million lines.
There is a claim that the 5ESS Switching System (an AT&T system for controlling telephone networks) is also about 100 million lines…and it has long been claimed to be the largest piece of software in the world. However, it emerges that this isn’t really a SINGLE piece of software - it’s a bunch of separate programs, including test suites and so forth. Also a big chunk of that was automatically generated - which is definitely cheating.
GTA-V is a SINGLE application.
Furthermore - programs like GTA-V are written in C++ (which is probably the most complex programming language in existence) - and it was written over a relatively short period of time compared to the AT&T switching system.
These games are complex in other ways too - the physics and graphics systems are truly insane in their degree of complexity and in the way that all of the sub-parts have to interact together. Just the simulation of sunlight in the GTA-V ‘world’ is an astoundingly complex thing.
And that’s just the SOFTWARE complexity.
Add in all of the crazy number of 3D models that have to be built, the number of sound effects, voice acting sessions, music!
I read somewhere that getting all of the music used in the game licensed was so hard that there were more Intellectual Property lawyers employed in the making of the game than there were programmers!
So I think it’s safe to say that video games are by far the most complex, most difficult software in existence.
I once interviewed a very bright, recent graduate of USC. Pretty well-known school in the US. Computer Science degree, 3.6 GPA. Sharply dressed and well-spoken. I had doubts because she never did any programming outside of what she was given in class, but she was hired anyway. We let her go after a few months because she couldn’t code her way out of a wet paper bag. Without a professor to ask for help, she was lost. I felt sorry for her, and was not involved in the decision to terminate, but that’s how business is. If you can’t do the job, they let you go.
If you are fresh out of college, your employer might care what your GPA is. The vast majority will never ask or care what it is. If you graduated more than a couple years ago, they’ll be much more interested in your work experience. They just want to see that you toughed it out and got a degree, at whatever GPA, and that you hopefully absorbed a critical mass of knowledge so that you aren’t in over your head.
Most CS students go into software development. If you are going into some other field, your employer might care about your grades in classes specific to that. For example, if you’re going to be working with FPGAs, and you took a class in that, they might want to see your classwork, or anything you’ve done on your own. Whatever your situation is, work you do on your own is likely to matter far more than your school work.
Take the case of programming. College does not mint good programmers. There are simply not enough instructional hours after all the other stuff you have to take (math, humanities, English, blah blah blah). Your portfolio needs to be full of work you do on your own time.
Employers need to see that you like programming (or whatever your goal is) enough to work on it in your own time. This is why most of them could not possibly care less about your GPA. They want to see your portfolio. They want to see proof that you have the chops to do your job. High GPA proves that you’re good at regurgitation and sticking to tough things, but it doesn’t prove that you can work without someone constantly there to answer your questions.
I am a 65-year-old software engineer who has worked for Apple, Adobe, eBay, Microsoft, VMware, Cisco, FileMaker, XO Communications, 2Wire, Egnyte, Nexsan, and two other start-ups. I have been laid off five times in my career. I always find another job within 3 to 4 weeks — even during a recession. I have had my job outsourced to India or China four times: especially in the last eight years. Nonetheless, there is always another employment opportunity waiting afterwards.
I love what I do. I’m still doing it; and, I have no immediate plans to stop doing it. Moreover, I am good at it. That’s not so much because I am a genius but rather because I have been doing software development for a really long time and I learned from my mistakes. In fact, there is no wide-spread computer language I can’t program in. Nor is there any OS platform I am not comfortable working on. And, besides the U.S., I have also worked overseas in Apple’s factories in China and Ireland. Besides English, I’ve learned to speak (poorly) Spanish and Italian, and I can manage about a ten phrases in Mandarin.
I have managed to do all this while successfully being married for 40 years, raised two adult children (one who is a Netflix software engineer), and I now have five grandchildren. According to the last Social Security report I receive annually from the government, my total lifetime income to date is: $3,042,040; and, I’m not done yet.
Having said all this, it is very much true that age discrimination and outsourcing is rampant in the Silicon Valley. Before age 45, I had a better than average chance of getting a job after a single interview. Now, at age 64, it takes me about ten interviews before I get the next job. Even then I sometimes have to work as a contractor without benefits. And, I have even learned to tolerate being interviewed by arrogant and entitled young preppies, most whom think they are somehow better than me even though they haven’t accomplished one tenth of what I have, nor have my superb academic credentials. (I have a B.S. in Civil Engineering and a M.S. in Computer Science from Texas A&M University — the latter at the top of my class.)
So, the answer to your question is: NO, software development is most certainly not a dead end job! It is a great job. Does it get tougher to get your next job as you get older? Oh hell yes. But, so what! If you love it as I do nothing but death or poor health can stop you. All it takes is a determination.
Never give up!
Follow up edit: Wow! Thanks for all of the great comments and positive feedback! After much thought and consideration, I have decided to move into part-time consulting and full-time retirement on September 1, 2019. However, I will still be programming and possibly teaching at the nearby Texas State University - San Marcos. I’m not giving up. I’m just moving on to a new phase.
Originally Answered: How did Quora Interns get their internship at Quora?
Here’s my Quora story over a span of 5 years.
I made a Quora account in 2013. Within a few days of making an account, I was hooked. The quality of questions and answers, the community, the knowledge people were sharing—it was all very engaging to me. Quora soon became a product I would use almost daily. To me, Quora was the only social media site on which I was actually learning something.
In 2014, when I was applying to colleges, I was so into Quora that I even mentioned it in my application essays! (That’s a story for another time)
In 2015, I started studying Computer Science at UCLA. As a freshman, I was looking for internships for summer. Quora was definitely one of my dream companies. However, I knew that Quora was a very small company and their hiring bar was extremely high. At that time, I didn’t feel qualified enough to even apply to Quora. I applied to hundreds of other companies and got a wonderful internship at Thomson Reuters.
In 2016, I completed my first internship (I’ve written about it here). At that point, I thought I had enough experience in Front-end Engineering that I took a shot and applied to Quora online. Just to be safe, I also cold emailed one of the recruiters about my interest in Quora as a product and why I wanted to work there. I don’t know which method worked, but I got back a response the very next day! An initial phone screen was scheduled with the UI Engineering manager, Scott Young. I remember discussing my personal website and side projects with Scott during the call. The call went well, and I moved on to to the next round: technical phone interview. The technical phone interview was with a Quora engineer and after the interview I thought I did well. I got an email within a few days. I wasrejected.
In 2017, I was lucky enough to get a great internship at another incredible company—Houzz. I got a lot of experience in Software Engineering and absolutely loved interning at Houzz and spending a summer in Silicon Valley (I’ve written more about it here). After my internship, I mustered enough courage to email Scott at Quora for an internship for the next summer. He remembered me and offered to schedule another interview! I had a great chat with him again and moved to the technical phone screen. This time, I was able to actually do well in that round since I was much better prepared and the questions were sort of similar as before. So I moved to the next round: Quora onsite. During the onsite, there were about 4–5 back to back interviews. That day was grueling. The interviews were hard, but the format was one of the best interview formats I’ve experienced at any tech company. After the onsite, I had mixed feelings about how I did—I thought I nailed a couple of interviews, but messed up completely on the others. Exactly one week later, I got an email from Quora: I was offered an internship. I got many emails from Quora employees encouraging me to accept the offer, and that’s what I did.
In 2018, I finally started working at Quora in June! I'm working as a UI Engineering intern and I'm the only intern in this role this year.
Its just been three weeks at Quora and I'm very happy that I've already started contributing to the codebase that runs Quora. I'm working on a very cool upcoming Quora product and I'm excited for the rest of the summer!
Computer science in general is about the theory of computation, so it doesn’t get more or less complex. It just is.
What gets more or less complex is the application of computer science — call it applied computer science — and what has become unnecessarily more complex over the years is…
When I started in the field many years ago, once I understood enough about programming to be able to create simple games and whatnot, I had the insight that the languages I was using then — Pascal and 6502 assembly language and C and APL; a little later dBase II and C++ — were all just beginnings, and inevitably they would be used to create more and more powerful abstractions by which we would compose higher order systems from recombinant components, and use them to define ever more powerful abstractions and thus ever more powerful systems.
By way of analogy, I thought we were then using toothpicks to build houses, but soon we would use toothpicks to build walls, and use walls to build apartments, and use apartments to build skyscrapers, and use skyscrapers to build cities, and use cities to build worlds.
I was wrong.
Instead, we now use slightly different syntax to do essentially the same things we’ve always done, which — again by way of analogy — is build houses, buildings, cities and worlds from myriads of oddly-shaped, intricate, complicated, interlocking toothpicks.
Then we create bridges between houses, buildings, cities and worlds with differently coloured bunches of oddly-shaped, intricate, complicated, interlocking toothpicks, and we make people live and work in a fragile, intricate mess of complicated interlocking toothpicks; and constantly create slightly different shapes of interlocking toothpicks without ever getting above the toothpick level of construction that we started over fifty years ago.
It was amazing being a CS major in 1978–1981. Nobody knew anything about what we did. Hollywood hadn’t yet made up its lies about our profession. It was a private club for nerds. Computers were just getting powerful enough to do all the things we take for granted today. It was really exciting all the time we were in school.
Work was just as good. Every software project in the world was a blank screen and a blinking cursor, a whole new thing to be designed and coded, not a point change to somebody else’s creaky ten year old code base. Compiling a small project of 20 files took 45 minutes, if no one else was doing a compile on the VAX that we all shared. Bigger projects were left to compile overnight. I’ll say one thing though, a half dozen geeky people sitting in a conference room solving a hard problem was exactly the same then as it is today. Grinding your teeth when management did something incomprehensible is still the same too.
As a new graduate, I was the most employable person I knew. It bred a bit of arrogance that took years to destroy. Employers were just looking for smart people, not 10x unicorns. Interview questions centered around thought puzzles like “Why are manhole covers round?” rather than on coding tests. There was no FAANG, no Amazon or Google. Microsoft was a little company with 200 developers. When you were looking for work, you clipped job ads out of newspapers, and went to interview at companies whose main line of business was something other than computer software.
A third of the developers were women. The brogrammers hadn’t chased them away yet. I miss women. Housing was cheap in Seattle. No coffee. No diet Coke. No energy drinks. No dogs in the office. But we did have cigarette smokers in the office. Yuck!
I sound like an old fart waxing loquacious about the past. I miss the ‘80’s.
Originally Answered: What's it like to intern at Microsoft?
Three words: One Big Party.
I was an SDE (Software Development Engineer) Intern at Microsoft India Development Center (MSIDC), Hyderabad, for 9 weeks during the summer of 2013. I had the summer of my life.
As excited as I was to begin my internship at Microsoft, what awaited me exceeded expectations. An intern is provided with a mentor (a team lead he/she is likely to meet everyday) and a manager (if you are lucky, you'll get to talk to your manager once in two weeks, while some may not even see them after the initial introduction). If you think you will be bogged down with a ton of work for the bundle of cash they are paying you and the 3-star suite that they put you up at, get ready to be surprised.
The first week itself gave me a taste of the MSIDC Intern experience. None of got much work other than familiarizing ourselves with the software- mostly, Visual Studio- and the team (and for me, the pantry!)
By the end of the first week, I had tried out everything I wanted to from the pantry:
Cafe Coffee Day Coffee/Latte/Cappuccino
CCD Hot Chocolate (a personal favourite)
Peach/lemon/cardamom/earl grey tea
Interns also get free lunch, unlike the FTEs (Full Time Employees) which causes much jealousy and whining :P And the food is gooood <3 You get your choice of veg, non-veg and egg curry with dal, rice and chapatis. You can also go for Chinese or thali.
Upon entering the MSIDC campus, you feel the air shift. It is a world within the world. The people are courteous, polite and in no hurry to push you out of the way and get somewhere. I have had the pleasure to witness top managers holding doors open for an intern such as myself, who is at the bottom of the food chain. You can, or rather, are supposed to address all employees by name. This builds an excellent rapport and makes us feel like equals. You can walk into anyone's chamber/cubicle to ask something as silly as directions to the washroom.
I knew my entire team by name as well as cubicle. My mentor, Harshvardhan, was very forthcoming and encouraged me to ask questions like a 5-year-old. There was never any pressure from him or my manager, Mayank. I was given ample time for the projects and was able to complete them at a comfortable pace. I did pester Shreyansh and Shashank, two other senior developers in the team, with the details of implementation. But I never felt that even the silliest doubts were unwelcome.
At the Intern Get-together, I had the pleasure to sit with Rajiv, who has been with Microsoft for 21 years and was the head of MS-Office Division India then. He gave us many pointers on work, education, and life. He also shared with us his "awww" inducing love story with his wife. At a later date, Rajiv passed by me in office and wished me luck for my interview, while I failed to recognize him because of his new haircut.
My fellow interns are worth a mention. We would go out every weekend and hardly any of them were the nerds you would expect them to be! We even had a stayover at the office which we spent, admittedly unproductively, playing Dumb Charades and Mafia.
No need to roll your eyes. There are many FTEs who use the perfect projector+sound system in the conference rooms to watch movies to take a break from work after hours.
Once I slept off on my desk. To my embarrassment, my mentor and manager walk into my cubicle to check on my completed work. It took both of them and my cubicle-mate to wake me up. I was still dazed but I expected Harsh and Mayank to be angry or worse- disappointed but I was greeted with concern. Don't worry! All was well when I showed them my work :) But I learnt my lesson. Next time, I was gonna use the nap room.
The MSIDC Hyderabad campus is a 54-acre sprawl out of a Redmond postcard. Built on a hill, it winds through rocks that look sculpted and paved paths optimally designed to afford the user the best views. There is a beautiful quadrangular spot with 3 steps overlooking the entire Building 3 (where most IDC interns worked) and having a cup of Coffee+Chocolate (my own recipe) on these steps, looking at the horizon, will give you the exact amount of calm you were looking for.
There are three buildings in total. Building 3 has wing A and wing B connected on some floors by walkways, strewn with comfortable chairs and tables topped with newspapers. Each building has a cafeteria and Building 2 has the best food. They also have fully functional gyms and yoga rooms, complete with hot/cold showers, lockers, changing rooms and instructors. I went for yoga in the evenings with many of the FTEs and the instructor was highly energetic, and his energy was contagious. The campus also has Baristas where you can chill with overpriced Frappes or get your colleagues to shell out for treats.
The buildings also have Multi-Purpose Rooms where meets take place. They are also used for Jam sessions by drummers and guitarists. There are pool tables, chess boards, fooseball carrom boards and fields+equipment for any sport There is the X-Box room where I would often drag people to play Dance Central or Tennis. All you need is your ID. Entry into the campus is monitored very closely and you can only enter if you swipe your ID at the gates, hence making the campus safe.
We were taken to an IPL Cricket match in the very first week of our internship. We were just a few feet away from Rahul Dravid and we yelled "Jammy" till he was compelled to turn and wave!
We also regularly went out with the team as part of morale and team building. My team went for bowling, laser tag and dinner. Many interns were taken to buffets, movies and other outings as well. The Bing party was held at Novotel where many employees, interns and FTEs alike, got royally sloshed and partied hard for the work they had put in.
We also had the "Bring Your Child To Work" (BYCTW) day where all employees would bring their children to work. I volunteered for a spot at the registration desk, handing out goodie bags to the cutest and most polite kids I had seen. There were also flash mobs that we had been practicing for, which took place in the quadrangle for everyone to see.
For the first time in MSIDC, "Intern Day of Caring" was organized. We were taken to some of the eye-care hospitals, schools, institution for mentally challenged children and other NGOs to interact with them and play our part in giving back to the society. It was a wonderful experience bringing fun and frolic into the mundane daily routine and trying to make the kids realize the importance of studying further, despite the communication barrier.
There was also an "Intern weekend" organized where interns were given an opportunity to participate and win in a contraption contest, and three movies were screened.
So amidst all of this, you'd say that I didn't learn much coding? Well despite all the fun I had, I was able to complete two projects under the able guidance of Harsh and Shreyansh, and I even presented both of them in front of my team as well as the entire MS-Office Division (MOD). I learnt not just good design practices, coding, algorithms, and software testing, I also learnt how to work with an amazing team, communicate with higher-ups as well as colleges, organization culture and how to have a let myself go and fun.
P.S: I'm not in the video :P Also, I have not detailed the Pre-placement interview at the end of the internship, the reviews/appraisals, feedback and other procedures.
EDIT: In my hurry to write my first answer on Quora, I mixed up "Jumbo" and "Jammy". I love both Dravid and Kumble to pieces, and my apologies to the cricket enthusiasts here.
Originally Answered: What happens to people with average GPA's and no internship experience in engineering?
With an average GPA and no internships, they’re screwed forever. They have no chance to get a job ever. They might as well file for bankruptcy now and start robbing gas stations.
It just means that person has to create a career strategy to make up for the missing pieces.
At the end of my 4th year, I had a 3.2 GPA and no internship experience. I knew I wanted my career focus to involve controls, but I had no experience with this specifically. What I did have was some experience in an on-campus engineering club (but not much, and it wasn’t in my desired specialty). I took on some more responsibility within the club, and went to every career fair.
Finally, after tons of applications, Aerojet accepted me to an internship. This was pretty lucky considering my lack of experience at the time. Despite the job description being undesirable toward my future in aerospace controls, I worked hard and learned everything I could.
I took a fifth year in undergrad to finish my Music minor. My resume still did not reflect what was needed to get a controls job, so I focused my senior project on control (the paper was pretty weak, tbh). I continued hitting every career fair and got another internship, this time at Northrop, which again was not my ideal controls job. I accepted anyway, and did my best.
Since I still had no industry controls experience, I applied to grad school. I applied to four schools and only got accepted into one. That made the decision easy.
I selected classes in all the areas I wanted to be competent. I joined the Google Lunar XPrize Team (Lunar Lion) and worked/networked my way into a leadership role regarding controls. My adviser had connections for a graduate summer internship at Aerospace Corp, which I utilized.
The next year I doubled up on classes to leave my Spring semester open. I had friends who had interned at SpaceX, and said Spring internships were easier to get. I applied and got accepted.
With leadership experience, 4 internships (esp. ones at the big names), a startup found me on LinkedIn for the perfect position. I still work there, and it’s great.
I’m not explaining my story to brag (although I’m very proud of where I’m at), and I do realize I had a fair amount of luck. However, it’s important to see that strategic hard/smart work can get you to where you want to be in a relatively short time. You can set yourself up to be lucky from meager beginnings.
Do you like programming? Do you suck at mathematics? You never made that clear. Indeed, there seem to be four Boolean variables here:
ML (like mathematics)
MS (suck at mathematics)
PL (like programming), and
PS (suck at programming)
each of which can be independently true or false.
That gives 2^4 = 16 possible combinations, and each one requires a distinct answer as to whether you should study computer science. Now I will assume that you meant you like but do not suck at math, and that you like but suck at programming.
TFTT - This is a very interesting option of the 16 combinations, because in 35 years of teaching mathematics and computer science I have almost never seen this combination. The reason is that mathematics is much more difficult than programming. Programming does have a certain set of skills that a mathematician may not have, and I have seen excellent programmers who are mediocre mathematicians, but never someone who is an excellent mathematician and who sucked at programming. Any mathematician would get an A in an Intro programming course, independent of whether he/she would enjoy it.
The people who really suck at programming cannot do the following simple tasks that any decent mathematician would find trivial:
a. Quickly writing a loop and relating various complex expressions inside the loop to the variables in the loop header. This includes creating linear functions from two given points as well as much more difficult things. Poor students mess up endpoints on loops all the time, which is a special case of this skill.
b. Break up a complex algorithm or task into clearly defined smaller pieces, organize the pieces in the right order, and arrange various outputs of one as inputs to another. Mathematicians can think clearly and can write proofs, a task much harder than organizing an algorithm.
c. Generally take a formal specification (a description of an algorithm) and express it formally in some “language” - i.e., program the algorithm. Mathematicians do this when they prove things — the formal specification is the proof and the “language” is explaining to oneself or someone else in English over lunch.
So… I find it very hard to believe that the TFTT case is possible. I have much much much much more often seen TTTF - someone who likes mathematics but sucks at it, and likes programming but does not suck at it. This is more common because it does not take so much to be a decent programmer. A decent programmer (one who does not suck) is someone who can accurately and quickly take a description of an algorithm and implement in the programming language of his/her choice. A good programmer can design the algorithm from scratch. Good programmers are usually good at math; decent programmers not necessarily so.
And, I have never seen a great programmer who sucks at mathematics … never.
Nonetheless, this answer will no doubt be unsatisfying for you, since all I did was deny the premise I assumed you were claiming… so here are 15 other shorter answers for the 15 premises that you may have meant:
TTTT - You like math and programming but you suck at both. Study CS and work hard. You will improve at both subjects. Even you do not improve greatly, there are jobs at every level of software engineering - plenty of websites to maintain.
TTTF - You like math and programming but suck only at math. Study CS. You will be in good company. There are lots of decent programmers who like but suck at mathematics. There are plenty of jobs for these folks — but not doing algorithm design, or other heavy lifting. The important thing is that you like programming — something you will be doing a lot.
TTFT - You like math, suck at it, do not like programming and suck at that too. Do not study CS. If you do not like programming and you suck at it, you will hate the major and you will hate the career. There are too many times you will need to program something no matter how theoretical/mathematical the material is.
TTFF - You like math, suck at it, do not like programming, but you can program fine. Do not study CS. Study something you like — not something you can do that happens to pay well. In the long run, trading passion for money will kill your soul. There are exception — if you are neutral to programming and have a hobby outlet for your passion - whatever it may be - then studying CS is a great way to make a living and have time for your hobby.
TFTT - We discussed this at the start.
TFTF - You like math, don’t suck at it, like programming and don’t suck at it. Study CS, unless you really love math — then study math — It is a deeper subject.
TFFT - You like math, don’t suck at it, don’t like programming and suck at it. Do not study CS. Study math.
TFFF - You like math, don’t suck at it, don’t like programming and don’t suck at it. Do not study CS. Study math.
FTTT - You don’t like math and you suck at it. You like programming and you suck at that too. Do not study CS. It will be too hard and frustrating. You will likely drop out. You need to like abstract thinking to succeed as a programmer, and if you do not like mathematics, that is a terrible sign. Wanting to be a programmer is not enough of a reason alone to study CS. These FTTT kinds of students are the most common to give up.
FTTF - No interest in math, no good at it, interest in programming and good at that. Study CS. These students are common. They won’t likely be great programmers but they will be adequate and they will find jobs they enjoy that challenge them. These are not the Google, Amazon, Apple, Facebook types, but there are lots of companies out there.
FTFT - No interest or talent at math, no interest or talent in programming. Do not study CS. Study something in the liberal arts.
FTFF - You do not like math and you suck at it. You do not like programming but you can do it. See TTFF. Do not study CS. Try to avoid trading passion for money and stability. You only live once.
FFTT - You do not like math but you are capable, you like programming but suck at it. Study CS. You will eventually get better at programming if you are capable at math and you like programming.
FFTF - You have no passion for math but can do it, and you like programming and can program. This is the classic CS major who is really into programming, but finds math too abstract and dull - even though he/she can do mathematics. Study CS.
FFFT - No interest in math but capable, no interest in programming and you suck at it. Do not study CS. Consider subjects you are passionate about - and stay away from subjects where you need to be handy with a computer.
FFFF - No interest in math but capable, no interest in programming but capable. Do not study CS. Consider subjects you are passionate that use mathematics and programming - sciences and engineering. Maybe you love the environment, building bridges, or studying chemistry.
Here is the K-map for this function:
PL/PS … along the top
and ML/MS … along the side
….. 00 01 11 10
00 …0 ..0 .1 ..1
01 …0 ..0 ..0 ..1
11 …0 ..0 ..1 ..1
10 …0 ..0 ..x ..1
where x is the impossible premise. So we can set it to 0 or 1 as we like.
Setting x to 1, the resulting simplified formula is: (PL)(PS)’ + (PL)(ML) + (PL)(MS)’ = (PL)( (PS)’ + (ML) + (MS)’ ) = (PL) ( (PS) (ML)’ (MS) )’
Interestingly, this simplifies in English to:
Study CS if you like programming, unless… you suck at programming, do not like math, and suck at math.
Or …. study CS if you like programming, don’t suck at it, and either understood or enjoyed this reply.
Originally Answered: What is the most catastrophic error made by an intern at a tech company?
I'm pretty sure my answer will win this one.
This happened a long time ago (I'm old) when I was an intern at Microsoft. The story is about my officemate - yes Microsoft has offices even for interns. We were both working on Microsoft Exchange.
One day on week 3 into the internship our manager came in asking where my officemate was. I said I didn't know - probably at lunch. He said there was something going on with my officemate's PC... "security had alerted him". He didn't know anything else.
He walked over to my officemate's desk and hit a key, fully expecting the PC would be locked and he would have to wait for the guy to return. The computer was not locked. Right there on the desktop was the old-school Windows "flying folders" UI of files being copied from one drive to another.
The from drive: unreleased version of Outlook on Microsoft's internal beta fileshare. The to drive: some random external ftp server.
Needless to say the guy never came back from lunch.