How to prepare for an internship?
I’m in progress of a computer science bachelor degree. However, I’ve only had two coding classes: an introductory class using Visual Basic, and C++. I do not feel that I have learned much and would like to be more qualified for future internships. How may I further increase my knowledge outside of school? #computer #computer-science #stem #software #softwareengineer #softwaredeveloper #technology #womeninstem #internship #science #computer #computer-software
Preparing for an internship is a few parts:
- Recognize what companies want
- Getting that (from classes, tutorials, lessons, practice)
- Showing them you've gotten that.
Regarding #1 (What companies want). It's easy to read a job listing and to be daunted because companies WANT everything. But, realistically, they want someone "good enough". Specifically, here are some key elements that are often overlooked:
- Can you take instruction? If you're going down the wrong path, are you able to take the hint that you should back up and explore another option, or do you get stuck in what you're trying to do?
- Will you communicate when you're in trouble? Many students keep doubling down on the idea that if they try hard enough it will work out, possibly at the last minute. Workplaces love for you to work, but they also want time to deal with the inevitable issues. Mentioning when you are stuck, or even just slowed down, as soon as you can gives them a chance to adjust resources and expectations. Learning that it's not only okay, but often DESIRABLE, to admit you had/have a problem is a hard lesson to learn, and harder still to confess your willingness to during an interview - but many places will want to hear that.
- That said, most of coding is dealing with new problems, so Googling for solutions and figuring out how to extract the meaningful bits from a post where someone dealt with the problem in an unrelated tech stack is a skill that classes rarely teach. MANY interviews will focus on behavioral questions like "Tell me about a time you were stuck on a mysterious problem and how you solved it" - having experience outside of class projects (where you encounter such problems) make these questions far easier to answer well, and build the skills you'll use on the job.
- The reason for the data structures and algorithm questions so many technical interviews include is not to see if you can solve that problem - it's to see if you can break a problem down into solvable pieces. If you can understand how to look at a problem and determine the right approach. Rarely will you be told on the job "solve this with a binary search tree" - you'll have some data and need to alter/search that data, and you need to be able to recognize the difference between a good way to do it and a bad way.
- Interviewers WILL ask you questions you won't know the answer to. If you knew all the answers to their questions, they'd make harder questions on the spot. This is because seeing how you handle the unknown is part of the point.
Moving to #2: Getting these skills
- I recommend HIGHLY working on projects outside of class projects (or extend projects you have to do new things). Get a github or gitlab account and put your code there. Add new features. maintain versions with a changelog listing the changes and improvements. You'll be solving the very problems you'll need as an intern, building the skills, and getting a nice addition to your resume. The project doesn't need to be fancy - in fact, I recommend with something stupidly basic that you slowly add to. Working on open-source projects that exist is a common recommendation, but I find that usually requires too much in-depth understanding of the existing code - instead, write your own projects. Make stupid mistakes, learn from them, and improve. Don't worry about this hurting your chances - making mistakes and learning from them demonstrates WAY more that an employer will want than a single pristine but unremarkable commit.
- There are definitely algorithm and data structure interview questions out there that you should practice for, but don't neglect coming from the other side: having a problem and breaking them down into code. You don't even need to code each of these, but make a practice to think "How would I organize a program to handle this problem?" When you're in line at the movies, think about how you'd manage their displays of menu items in the concessions line. How you'd write the software to manage tickets. How you'd write a scheduling program for workers.
And now, #3, Demonstrating these skills
- Remember that github/gitlab repo I mentioned you should do for a project? Make it. Make it public. Update it regularly. Put it on your resume. Be prepared to talk about that project, in particular where it gave you problems and how you eventually overcame them (or if you didn't, what you plan to do in the future about that.) . Remember: Companies don't want to hear you're brilliant and perfect. They know you AREN'T perfect, and want to see that you can regularly improve without guidance, and will improve even more WITH guidance.
- This sounds hokey, but I recommend you practice, out-loud, saying "I don't know". You want to make it almost habitual, muscle memory. This way when it happens in an interview you don't ratchet up your nervousness and anxiety and instead can apply your thinking power to looking good. Being nervous in an interview is totally normal - if you didn't have something at risk (getting a job you want) then it'd mean you weren't trying very hard. But nervousness can tank your chances, can disguise your value. So physically practice, so your instinct can happen without thought. Skim headlines and articles from sites like Hacker News (http://news.ycombinator.com) and pretend you are being asked questions about some technical bit in an article you don't know. (no one knows ALL the tech discussed there) "Websockets with IoT? I'm not familiar with that, can you explain a bit more?". Practice adding a guess, or countering with a question. Show that not knowing means you have interest and willingness, rather than cutting things off or that you bluster and pretend. Connect to something you do know. "I've not used a separate database cache layer, is that like a web CDN?"
And lastly, the 4th part: Expect some failure. Interviewing is something we're all (humans) bad at - not just as interviewees, but also companies are still trying to figure out how to identify what they want and then how to identify which people match that. You can bomb 6 interviews in a row and be exactly what the 7th wants, even if your performance in all 7 is the same. One place will give you a massive Hackerrank interview while another has a discussion that involves no or almost-no coding.
Brett (He/Him) recommends the following next steps:
I recommend looking for free coding courses or computer clubs to practice skills and improve your abilities and languages. GitHub is a great place for an open source coding community to get feedback, practice your skills, and develop a portfolio for employers to review. For the internship, research the company, make contact to determine what is available, and if it is paid or unpaid so you know whether you have to work or not while interning.
Grant recommends the following next steps:
From your question, it sounds like you are looking for resources to broaden your knowledge to be competitive for more internship opportunities. There are many online resources to help you learn more programming languages or other technical skills you may want to learn.
https://www.udemy.com is a great place to start and they often offer discounts as low as $10 per class.
Looking for online recordings of topics you are interested in is also a great resources. The speakers often list their sources at the end of their presentation.
There are lots of resources for women in tech as well
Many local colleges offer assistance to underrepresented populations in tech in finding internships as well.
There also look to be a lot of Women in Tech meetups in your area, which would be a great resource to ask one on one questions and find internship opportunities.
Kristen recommends the following next steps:
This is a great to ask and important step towards your professional life. Please see below the items you need to pay attention to:
1-Expand your network ( Linkedin, Friends and Family, Social Circle). Although connections are not essentials for you to land your internship, however they are important
2-Don't get discouraged if your applications get rejected, stay positive and keep trying .
3-Apply for positions that you think you are interested in learning and developing skills for, not just for any positions
I hope this helps. Please let me know if I could be more of an assistant .
I am glad that you are thinking ahead about the future internships and are willing to put in efforts to learn more. From my personal experience of being a non-CS graduate to being a Software Engineer now, I would suggest focus on learning algorithms and data structures. You need to know and understand those basic concepts before applying it to the real world problems. And that is the basis of most of the interviews for fresh graduates.
Interviewers would look into how well you know a particular data structure - say HashMaps, Arrays, LinkedLists, Graphs, etc and then how well can you apply to that knowledge.
I would suggest looking at these hands on websites that help you prep for interviews and also learn the concepts -
Aditi recommends the following next steps:
This is a great question and highlights a common gap in university programs. Think of the companies you engage with everyday -- websites you visit, stores you shop with, or applications on your phone. Research information about those companies, like what technology they use or what skills they seek in their technical employees. That could set you in a good direction for self-learning.
Many employees attend conferences and present talks on their work. Looking through conference agendas also highlight trends in the industry that could shape your study.
When interviewing with specific companies for an internship, I agree with other responses that researching a specific company ahead of time is always helpful. Besides the info listed on its website, you can also learn a lot about what the company is doing and what is important by reading its blog posts. For instance, https://blog.newrelic.com/
Desiree recommends the following next steps:
For my internship, I researched about the company ahead of time and made sure I knew the company’s mission statement. Also. I would recommend researching their website before the internship. Good luck with your internship!
Doing projects outside of work! Even if it's a small application that interests you, it really stands out on a resume. Technical resume is a little different from traditional resumes and you should include technical projects that you have done in the past and what technologies you have used.
Another thing that will help with you with an internship is interviewing. Check out "Cracking the coding interview" and after you have learned Data Structures, start doing easy and medium leetcode questions on the topic that you have learned! :)
Follow these steps:
Neeraj recommends the following next steps:
Personally, I like to learn from experience, creating my own software projects. In computer programming, learn by doing is maybe the most effective way to learn.
You don't need to create big applications or something useful to the other people. Sometimes it's just enough to do small programs for fun, which allow you assimilate the concepts you are trying to learn.
Also, consider that, for an internship, we don't usually look for a person who knows a lot of languages or paradigms. It's more important, on top of a solid base, to be a person that learns fast, it's open to learn new things and it's not afraid at having its own initiative.
As a person that started as an intern, the first thing you realise quickly is that what you learn through colleges/universities is only a small portion of what you will use in the real working world.
When it comes to technical knowledge, most companies will put you through some sort of training period so that you have the basic skills to complete your day to day job. Every company does things differently, so as much as you prepare there will always be an element of feeling being outside of your depth.
Internships are about gaining industry experience in your related field, but its also a great time to start networking with people in industry and also finding out what you want to do with your career as you get to see different roles first hand.
Learning things outside of your job to increase your knowledge to help you progress or make you more employable is great, but it also has to be in things that you're interested in and are willing to invest your time and effort in. Employers can easily tell when your not interested and are only doing things just to fulfil a check box.
The main thing, I learnt, was just to have fun. Any experiences you have, no mater if its good or bad, prepare you in unexpected ways later on.
Great question, Gillian!
I wouldn't worry too much about the technology stack that you know, since by the time you graduate, you will likely have been exposed to enough major modern languages and core concepts that will enable you to pick up additional languages as needed.
I would, however, echo some of the other answers and encourage you to work on projects. Whether these are school assignments or side projects, it's both good experience, and great to have something to speak to on future interviews.
As others have mentioned, focus on your soft skills - employers value communication skills and being a team player just as
much as the technical skills.
Best of luck!
as a student majoring in computer science what you have learnt in the course is definitely not enough for doing any serious work as an intern.
as someone working in software industry we usually seek certain qualities in intern students which are:
- able to learn new things fast, full of curiosity. Sometimes even if you never tried the new language or new technology you should at least have heard of it and know something about it and able to show your understanding and intuition.
- problem solving skills, many tasks in software industry is not really about programming language or coding but more about understanding the problem, breaking it down and attacking smaller problem one by one. Hence many times your analytical skills is even more important than coding ability.
- Software Industry is a lot about programming but not always about it, language invariably is just the tool that you approach to model the problem and ultimately crack it. So other knowledge beyond programming language such as understanding the nature of computation, under standing the programming language theory itself is a bonus to help widen your horizon and able to view the world from a much higher perspective.
might be too abstract to be useful but basically the key is to "think" and "keep thinking".
when you see something you don't understand ask yourself why and once you find the answer to that question ask even more questions.
we may never know the ultimate answer of the universe (not it's not 42) but certainly we can have a reasonable understanding of the computer science.
so keep the learning and keep using your brain, practice small code projects, those are all keys to success.