I've Trained Programming Interns For 6+ Years, Ask Me Anything!

Jason C. McDonald on August 03, 2019

I've had the marvelous privilege of running an internship program in my area through my software company. I've worked with the computer science and... [Read Full]
markdown guide
 

I have a ton of side projects I want to start working more on, but when I get home after 8 hours of work I'm exhausted and I feel like I don't want to do anything nevermind more coding. I'm also in a sort of long distance relationship and the only time I see my significant other is on the weekends so I don't want to spend all weekend coding. How do I manage working full time and still make progress on my side projects?

 

This definitely comes up a lot, as most of our interns are full-time students as well. Truth is, everyone gets the same 24 hours a day, and many people balance full time jobs and hobbies or side projects.

Here's a few tips:

1: Scale your expectations.

Even accomplishing four hours of work in a week on your project is progress. You don't need to put it all in at once either. An hour here, 30 minutes there, and you're still making progress.

2: Schedule your time.

I tell many interns, "time left unscheduled is time that will fill itself." You should deliberately schedule times to work on your side-project, time for family, time for housework, time for gaming or catching up on DuckTales. It is important to actually SCHEDULE both productive and relaxation times, or one will take over the other!

You can (and should) still be flexible, but having a regular framework for your schedule helps you "gear up" for the next task, and makes it possible for you to guard that time proactively: "I'm sorry, I can't do X right now, I promised myself I'd spend half an hour on my side-project. I have an opening tomorrow at 6, though!"

You can also swap things around this way. If your best friend wants to meet with you for coffee at 1 pm on a Saturday, but that's when you work on your side project, find what you'd be okay giving up that day ("DuckTales can wait"), move your side-project into that slot, and go for coffee.

That reminds me, you should never answer "when can you do (...)" with "uh, iono". Have your scheduler handy. Pencil something in. It's better to reschedule or cancel (in advance) than to leave something hanging indefinitely.

3. Maximize your productivity.

Give yourself a few minutes to transition from one task to the next. Establish a dedicated workspace if you can, like a favorite nook in your living room, or the corner coffee shop. Figure out your ideal environment for working on your side-project. Use Mynoise.net or your favorite music to help you focus. Block out distractions. Shut off social media. And then just work.

4. Rethink your approach.

All that might seem pointless if you're already exhausted, but there are still things you can do:

  • Consider becoming an early bird (YES, you can do that!) and setting aside some side-project time before work! Then you can get to the office still riding the high of doing something you love.

  • Part of your lunch hour may give you time to work on your side-project. I know many developers who do this, and they find it's a great way to refresh halfway through the day.

  • Look for other ways to reduce stress at work. Do you need to set better boundaries? (Read Boundaries by Henry Cloud) Should you rethink how you structure your workday?

  • Consider whether your side-project itself is contributing stress. If it is, you may need to restructure that as well. (See The Cranky Developer Manifesto and Why Is It Taking So Long??!?).

In short, it is possible to do this, but it may require you to rethink how your life is structured...and that's okay! Side-projects can be a good opportunity to improve your time management and life boundaries.

I myself run two companies, write both fiction and non-fiction books, and am a frequent fixture here on DEV.to and Freenode IRC. I also play music, volunteer with my church, and take care of the house (yep, I'm fully domesticated). Yet my life is typically in pretty good balance. I use these tactics myself.

 

As someone who is in a similar situation currently, that was really solid advice! Thanks

 

Well I was in the same situation as you are but I have figured a way for myself.

Here is the thing, I always keep my work in a container and never let it flow outside it. Like when I am at the office, my focus is completely there not on the side projects and vice versa.
This helps me to keep my mind clear and focused.

Secondly I sleep early and gets up early to work on my side projects before going to work. By early I mean 4am ☺

Also keep in mind: never to get scared by the workload, because if you do you will loose focus in everything.

Good luck! 👍

 

It's either one of the two .. well, unless you have energy for both right?

So it's about taking risk and following your dream. If that's what you want, then save some money to the side and quit your job.

 

Oh, sure, and I'd put part of the blame on colleges for perpetuating Shiny Object Syndrome.

C++ is still a major player in the programming world! Yet most developers with only a passing familiarity with C++ are afraid of it. This is mostly a combination of the popular misconceptions about the language, paired with classic Hating On Languages You Don't Use, all poured over a serious case of suppressed imposter syndrome. In fact, nearly all of my interns started out afraid of C++, and wound up being avid fans of the language, just through reguarly working in it.

Of course, not everyone is going to like C++, and that's fine. It's still an important language to know, as so much important code is written in it. A lot of the skills can be carried over into other ALGOL-like languages, but more importantly, the habits developed in it of thinking about data type suitability, memory allocation and ownership, reliability, and algorithmic efficiency, are some of the foundational concepts for becoming an expert in ANY language.

In the end, I think my interns walk away with an appreciation for the concept that suitability, not popularity, is all that matters in a language. That understanding alone is the best safeguard against Shiny Object Syndrome.

 

Thanks for AMA! (hope I'm not too late) I am a sophomore studying computer science and I present two questions:

  1. How competitive is it for prospective interns?

  2. What specifically do you look for in an intern?

Thank you for your time!

 

Hi Tyler,

It's hard for me to speak to internships overall in terms of competition for positions, but I do know that there are a limited number of spots in any given internship program.

The main thing I look for in an intern is someone I believe will make a good programmer. An internship is a major investment on the part of the employer, and we want to know that we'll get a return on that investment, both in the intern's participation in our own development efforts, and their likelihood of succeeding in the industry as a whole. (When you succeed, it looks good for us too.) Hiring for an internship is like the speculative investing of recruiting...potentially huge returns, but major risks too.

The main things I look for are:

  • Teachability,
  • Humility,
  • The ability to learn independently,
  • Honesty,
  • Communication skills,
  • Respect for others.
 

Thank you for the thoughtful reply!

As a follow-up,

Is a portfolio a must-have or will it allow one to place ahead of the pack?

Again, thank you for your time.

Portfolios are excellent! They definitely put you at the front of the pack.

Might depend on what we mean under portfolio.

  • University projects mostly don't count.
  • Github projects with a single commit named "First", without any documentation and comments neither.
  • Projects you contributed to very shallowly are on the edge.

I suggest including a portfolio if it is truly relevant. Otherwise it is just noise, or worse, generates false expectations.

I disagree with the first point. University projects might not count in a portfolio when applying for a regular development position, but they do most certainly count when applying to an internship.

It's all about reasonable expectations. Full time college students may not always have a bunch of personal projects. I've hired many interns whose portfolios contained only a selection of their best university assignments, and they turned out to be some of my best programmers. (And anyway, if an internship hiring manager is expecting a bunch of polished personal projects in a student's portfolio, the internship is not likely to have reasonable expectations about experience anyway.)

That said, interns, help us help you! Pin your best projects to the top of your GitHub profile. Include READMEs. Make it easy for us to find what you're proud of.

 

Sir please give me suggestions regarding how can I think like programmer and please suggest me some Android development books for my career and also suggest me some programming related books and what should be my roadmap for good programer who can think differently and work like some good programmer.

 

I don't know anything about Android development, unfortunately, but I did post a list of recommended books in reply to @justaguy on this article, so I'd recommend checking those out.

You may especially be interested in "Think Like A Programmer" and "Dreaming In Code".

There's no cut-and-dry "roadmap" for becoming a good programmer, other than to say Just Start Writing Code! Read books, take courses, talk to other developers, and apply all that knowledge to the code you write. Lather, rinse, repeat. If you keep doing that long enough, someday you'll look back and realize with some astonishment that you're not a newbie anymore.

 

Sir please suggest some books about design patterns, data structures and algorithms.

 

Can you talk a bit more about the internship? I'm interested in what kinds of projects interns have worked on and how experienced the students are when you take them on. Also, do you take on folks that aren't part of the universities in your local area?

 

Interns have worked on various components of our open source game engine project and its supporting libraries. They've developed data structures that beat C++'s standard library on performance, and created the C++ string class that fully supports both UTF-8 while remaining compatible with std::string. They've laid the groundwork for a programming language, an educational content engine, and a vector animation engine.

Our only prerequisite knowledge for the internship program is working proficiency in at least one programming language. Most come in with a background in Java basics, although we've had a couple of Javascripters, a MATLABer, some Pythonistas, even an Air Force IT. The one thing they have in common is that they're relatively new to the field of programming.

The most amazing part of this for me is watching first- and second-year CS majors come in with minimal knowledge of, say, Java, and become skilled C++ developers as time goes on.

We typically bring on interns from the local area because, although we're remote, I believe in the value of the team being able to meet in person from time-to-time. However, we do have a few completely remote workers. We're also an open source company, so even if someone doesn't join as a formal intern, they can still get some experience by being a regular contributor.

Also, we don't require students to come from the universities. We have good working relationships with the faculty at two of the biggest, which means we can offer college credit to their students for the internship, so most of our interns come from there. However, we've been known to bring on folks from elsewhere.

 

can I apply for an internship with your company, but I don't have a CS background, but i build fairly complex web apps with javascript and python.

You're certainly welcome to! You'll find the name/link to my company on my DEV profile. There's a section dedicated to internships, with all the information and instructions you need to apply.

 

I am taking a side job with a local bootcamp that does courses for teens and adults to learn programming. Ive only taught other programmers different tools.

What tips would you have for being newer to teaching teens/adults these new skills?

 

I have a few guidelines I follow in training interns:

1: Learn to put yourself in the mind of a beginner. Put effort into recalling those feelings of confusion, fear, and bewilderment you first experienced. Go over those memories often, and draw from them to help you empathize with your students. You can also build on this by actively answering questions in an online community where beginners frequent (such as DEV.to.) Learn to spot patterns in questions beginners ask.

2: Be patient. Expect to explain things multiple times, and in multiple ways. Asking the person to explain a concept back to you is a great way to check their understanding. Never belittle anyone for not knowing something, especially something that seems "obvious."

3: Learn to say "I don't know, but let's find out together." You'd be amazed how often you'll be asked questions that you've never thought to answer! A major part of teaching is in demonstrating to your students how to learn. Help them find the resources, "grok" the material yourself, and then walk them through it if necessary. (This makes for a great opportunity to teach a student how to read the documentation or use StackOverflow.)

4: Don't be afraid to say "I was wrong." I've stuck my foot in it more than once, and it always hurts my pride to admit I misunderstood something. I always have that lurking fear that my credibility will be harmed, but in fact, admitting I made a mistake builds credibility, rather than destroying it! It tells the student "you're safe with me."

5: Don't stop your students from making mistakes! Be available to answer questions and to help if asked. Make it clear from the start (and remind often) that the student needs only ask, but resist the urge to rescue them if they don't. It is better to let your student dig themselves out of their own hole, rather than one you dug for them.

 

Great tips! That will help a lot thanks. One thing I realized I need to do is setup a notebook (I use notion.so) for tracking students (non identifiable), the course, and any other notes.

That could work, although real notebooks are worth considering too. (I'm drooling over the TUL discbound notebook system.)

As you teach, you'll notice some topics come up a lot. When I notice these patterns, I like to write down the essentials of a difficult topic in an article and publish it here on DEV.to. Then, I can refer the intern right to the article, and I've saved myself 30-45 minutes per student. (They can always ask additional questions after reading the article.)

Oh writing is great too. I do bullet a journal too.

 

How did you get into the role of a mentor?

How do you build enough knowledge to be confident enough to mentor or teach?

I find that I have a good amount of knowledge to share with other developers but not enough to take on a leadership role.

 

I wound up in the role of a mentor somewhat unintentionally. I'd been planning to start an internship program through my company, but I was originally afraid I'd have nothing to offer. It was my computer science professor who assured me that I already knew plenty enough to mentor, and I'd learn the rest on the way.

I've learned that there are really only two rules about whether you're ready to be a mentor:

  1. You can only take people as far as you yourself have gone.

  2. If you keep learning more, you'll always be at least one step ahead.

Starting out, I knew how to write production-quality code and complete a project by a deadline, but that was about it. I learned a lot through mentoring...at least as much as my interns did!...and I made a lot of mistakes along the way. The trick was, I was willing to admit to my interns when I made a mistake, to listen to feedback, and to continually grow as a leader. As long as you learn from your mistakes, you can only grow in your leadership and mentoring skills.

I think Doctor Who (11th, if you're keeping track) unintentionally sums up the primary secret to leadership when he says to his companions...

Hang on tight and pretend there's a plan!

It works out surprisingly well.

 

Have you recorded what you have learned in some type of ASK system or ExTRA (Experts Telling Relevant Advice) system that junior programmers and developers could consult when they need help after office hours?
I'm looking for something better than YouTube subscriptions to numerous videos I am not interested in at the moment. socraticarts.com/solutions/technol...

I share most of my insights in my articles here on DEV, so I'd recommend through my profile.

In-house, we use Phabricator Ponder (which functions like a mini-StackOverflow) for asking and answering questions. I try to encourage interns to use that instead of email when they have a question, so the answers are available to other (and future) interns. There's not as much information on there as I'd like, but we're working on it.

We also maintain extensive documentation of our processes and workflows, including detailed setup and debugging instructions.

 

Pointers are definitely high on the list, along with references, addresses, memory management, and segmentation faults. At this point, I plan to write a "Memory Management For Mere Mortals" series here on DEV.to soon, and then point (pun intended) interns to it.

Templates are also quite high on the list of things that confuse newcomers, especially those coming from Java and its ill-conceived generics system. Yet, once they're understood, templates are one of the biggest reasons why C++ devs love this language!

Surprisingly, OOP is usually only confusing to interns coming from Java, and that's mainly because many of the bad habits that language allows, and even encourages at times, become more clearly bad as soon as they're implemented in C++ (with all warnings enabled).

And then there's my personal pet peeve I have to break almost every intern of: don't use double where a float will do! (That wastes sooooo much memory.)

 

Hi! Right now I'm looking for a starting point in cybersecurity. I've bought some online courses but I feel like there's so much theory and nothing practical, for me it seems like I don't learn anything useful from them. Can you recommend me some trusted sources like a 'hackers playground' or useful books to start with? I know cybersecurity is a very large domain and there are many paths to take but I want to experience all of them so I can eventually focus on one. TIA!

 

If you want a practical Cyber Securitycourse check out Dr. Roger Schank and Schank Academy.
schankacademy.com/information-secu...

 

I'll have to defer to @laserblue on this one. Cybersecurity is outside of my domain of expertise.

 

I've been working with some WordPress and HTML development in the past 6 years. Since I am working freelance (homebased jobs) usually the job that are being passed to me were simple jobs such as updating an existing CSS code for a WP site, building links for SEO companies according to their instruction.

Then suddenly, I lost my job. When I applied to other companies I realize that my current skillset for a developer job is not a great fit. I took several test skill for the company I applied to but failed.

Moving forward, I pity myself for not seeing any improvement as a so called developer or atleast that's what I know.

Any tips for me to really become a developer? (Sorry for the stupid question)

 

There was a stupid question? I didn't see one! :)

It's always hard when your existing skill set comes up insufficient. The best thing to do is take this opportunity to dive into some independent study. Since you've been applying for jobs, you clearly have some ideas of what you want to do, so look at which languages and concepts you keep "coming up short" on and go learn those things.

I posted a big 'ol list of books and courses in response to ^,^ (@justaguy ) on this comment thread, so take a look at those. I especially recommend learning Python, and reading "Computational Fairy Tales," "Game Programming Patterns," and "Dreaming in Code." That will help get you well on your way to where you want to go.

And of course, read lots of articles here on DEV.

And then, go write real code! Don't worry about it being good, brilliant, or polished, just write code. See my responses to James (@jliby ) and to Angel Young (@angelyoung24 ).

All the best!

P.S. If you've ever written any meaningful code, and HTML certainly counts, you're a "real developer". Don't ever let anyone tell you otherwise. You just need some more/different experience now, that's all.

 

Oh man, im so excited that found that article, that even wont be using google translate for that massage. Just because im so afraid to lost a time.

Look, im really a new guy in programming. Know nothing about it. But always wanted!

So i started using Khan Academy, Brilliant.org and tutor to gain some knowledge in math, in order to have much better comprehension about programming later.

But now, when time is coming, i still cant find any really good starting point. You know, just like Khan Academy for my math.

So please, if you can, share with me and maybe other guys who are also interested links on the sites where we could find complete programming courses or at least something that will help us to start.

Thank you a lot:3

 

There are hundreds of great books and courses available for learning how to program. Here's a few I recommend:

 

Hi there. Totally psyched to read this post and the responses. <3

I'm an older college student going back to school for my BS in IT with a software development focus.

Is there any additional advice you'd like to give me as an older student just getting into the field? I do have a background with Front-End technologies and have been coding on and off my whole life. Right now, I'm mostly doing Python and Java/Android projects and reading a lot of programming books off of the lists I see recommended.

 

Congrats on returning to school! "Non-traditional students" are the coolest people going! (I tutored a lot of older students back in my college days.)

There aren't many significant differences between a younger intern/student and an older one. One of my interns is a retired veteran with a background in binary programming with punchcards!

I've really only noticed two issues that are somewhat unique to older students:

  1. Some have difficulty having someone younger as their teacher or supervisor. It's important to remember that you can learn from anyone, and we all have more we can learn as long as we live.

  2. You will almost certainly have experiences that your supervisors, teachers, and fellow students/interns don't. Hold onto these, and don't be afraid to share them. At the same time, remember that computer science evolves continually - what was true ten years ago might have been superseded. It's a balancing act.

In the end, age doesn't mean much. I've learned things from my own interns, even those several years younger than me.

 

Hi. I am currently a college sophomore pursuing computer science. I've attended computer science classes but couldn't understand anything. So i recently started doing online courses. Currently im doing Automate boring stuff with python. Its a great course so far. Do you have any recommendations on other courses that I should take after im done with this? Thanks.

 

Hi Sam,

That's a good one. I listed several other books and courses in response to @justaguy 's comment here on this article. I'd check those out.

 

Hello Jason, I am Prabhjot from India. I love programming very much but I am suffering from a genetic diseases named Spinal Muscular Distrophy. So I am 100% physically handicapped can't do anything, can't go anywhere. Just a room is my life. I am studying doing my graduation final year in BCA. I just want too practice more and more but couldn't decided what and where to start. If you hire me a freelancer intern or suggest me how to make my career I will be very thankful to yours. It will help me to made my skills.My parents done lot of things for me now I want to pay back off. Thank you.

 

Hi Prabhjot,

Glad to hear you're grabbing life by the horns! Good for you.

In terms of my own company, we don't have the framework necessary to hire internationally yet. However, we do have an "informal internship" through our open source collaboration program, which you are welcome to take part in. It is very similar to the internship program.

If you're interested, go to my DEV profile and click on the company I work for (under "Work" towards the upper right). Check out the Internships and Developers sections of the website. You can also message me if you have questions.

In a more general sense, open source projects are an EXCELLENT way to gain more experience and build your portfolio (which is your key to getting hired at a software company). Look for open source projects you find interesting or personally use, and see if you can fix bugs, contribute small features, help with documentation or testing, and the like.

All the best!

 

I am a beginner in the coding world. I have some prior experience in Java . I am currently pursuing engineering and i am in the beginning of my second year. I am not able to actually know in which direction should I follow. I had a dream about gsoc and going abroad to pursue higher courses. I live in India so it's pretty difficult for me to find some proper guidance. I would love everyone's input in this ..and lastly what should I do so that I can follow my dream and can land a job in Google.

 

Hi Nilesh,

Surprisingly, it isn't as important as you'd expect to find your direction right now! Many developers work in multiple branches of computer science until they find the one that best suits them. Be flexible and give it time. It may not be until years after graduation that you find where you fit best, but that's okay!

One of the best ways you can try out different branches of computer science is to become involved in open source development. Find projects you think are interesting, or which you use, and try your hand at fixing bugs or making small improvements. Help with documentation and testing. This not only builds that all-important portfolio, but it gives you an opportunity to try out many different areas of programming.

With a solid portfolio of open source contributions, you'll find it will be much easier to land an internship at a company like Google!

P.S. From what I've heard, Google is overrated, especially with the ethical controversies they're embroiled in. I am not saying you should give up on your dream of working for them, but keep your eyes open for other companies you might be interested in interning with as well. There are thousands of small and mid-size programming firms doing stuff even cooler than Google!

 

Hi I just found your ama. I got motivated to make an account to ask as a student trying to find a internship for my next semester. I wanted to ask what do you look for in an application like a cover letter for when you are hiring an intern?

 

There are a few things I look for from an applicant:

  • A resume, of course. This doesn't need to be long or impressive — in fact, I assume most applicants won't know how to design a good resume — but it should include your work history and existing skills.

Most important point with a resume: write like a real person would talk! Using 'magic' HR phrases like "motivated self-starter" usually get the application rejected. I want to hire a human being, not just a good actor.

  • A cover letter written specifically for our company! This should show that you know something about our company and internship program, and where you'd like to fit into it.

  • The internship application. You'd be amazed how often this gets ignored. Read the instructions for applying for any internship thoroughly, and follow them to the letter. If they want you to fill out an application, fill it out.

On that note, if there's a field that says "signature", print the form off, SIGN IT, and scan it in (or else use a tablet to sign). Typing one's name in a script font is not legally binding, and yes, we'll know. (That happened.)

  • References from former employers, supervisors, or professors (just have these on hand.) Family and personal friends don't usually count for this.

  • A portfolio of code you've written — GitHub is fine for this — just to show that you know some basics of coding. Don't worry if it isn't technically advanced or overly impressive. I'm mainly concerned with a personal dedication to quality, a consistent style, and the ability to problem solve.

  • Politeness. Just because we're moving towards a more informal society doesn't it's okay for an applicant to get chummy with me right off the bat. In emails back-and-forth with applicants, I should be addressed as "Mr. McDonald" until I give the cue to switch to first-name basis.

I usually let applicants off the hook for a "Hi Jason" in the first email, but if they don't pick up the social cue from my responses always starting with "Dear Mr./Ms. So-And-So," and ending with my full name, they're out of the running.

That last point may sound pedantic and overly fussy, but I've learned that if someone cannot use polite formality with a potential superior when applying for an internship, he or she is not likely to have respect for said superior in a work relationship.

 

As a university CS junior with no idea what direction to take for a career, what steps should I be taking to gain experience and make connections before I graduate? Also what are some ways to see what the industry in a particular field is like that will help me narrow down what I want to do for a career?

 

Actually, one of the main purposes of an internship is exactly that - to get an idea of what the industry is like in a particular field! You can also consider job shadowing to get a "lighter" taste. Your university's career services department can connect you with opportunities for both.

As to networking, I've found that DEV and Freenode IRC both provide excellent opportunities. One seldom sets out with the goal of "making connections" - that happens naturally over time as you meet people, ask questions, and interact. You should also see if there are any programming meetups in your area; in-person networking events like this are one of the best ways to meet people in your chosen field!

If you know you want to work in computer science, don't stress about necessarily finding the "right direction" before you graduate. Sometimes it takes time, but you'll eventually discover what you enjoy...and it may be quite different from what you anticipate!

Graduation from college is not the end of your entry phase - in fact, it is just the beginning.

P.S. If you someday discover that something interests you more than C.S., don't be ashamed. I know programmers with music degrees, musicians with CS degrees, and many, many other people that went into a field different from the one they went to school for. There's nothing really wrong with it.

 

Hi there,

I've just started running multiple internship programmes (ranging from 2 to 6 month cycles) at the beginning of this year, I have 3 - 5 permanent devs who do most of the teaching. My biggest challenge that I have no clue how to solve is this:

As the programme grows, I am struggling to find people who can effectively teach the interns. Have you had this issue and if so could you shed any light on how you found the right people?

 

First of all, one can only take someone as far as they've gone themselves. Second, one must have an empathy for the beginner. Third, one has to know how to be available to answer questions without volunteering unrequested advice. Allow them to make mistakes!

It is easier for someone to dig themselves out of a hole they dug, rather than one the supervisor dug for them.

Mainly, internship supervisors should be available to answer questions, conduct code reviews, and help interns find tasks suited to them. I also recommend meeting with the intern periodically to ask them how they're doing.

The best support for my interns has come from former interns. In fact, I actually require anyone who wants to be involved in management to go through the same tasks as interns have to do.

I also formalized the internship with...

  • A checklist of goals and expectations,
  • A formal handbook outlining policies for internship supervisors,
  • Documentation for all workflows.

All that to say, usually the trick to finding internship supervisors is in making sure the expectations for the role are clear.

I hope that helps! (If not, feel free to follow up w/ additional questions.)

 

Hi,

I have an Assessment coming right up, it is for an "Developer internship" position. What preparations can you recommend?

 

Different internship programs have different expectations, so it's hard to really say what they'd be looking for.

My best recommendation is to brush up on what you already know, especially as it concerns the language(s) the internship focuses on.

It may be tempting to try cramming more knowledge before the assessment, but I wouldn't actually recommend that; assessments are meant to ensure you have the minimum prerequisite knowledge to thrive in the internship, and if you don't have that, a few days of cramming won't make up the difference. If you turn out not to be ready, take heart and try again in a few months, once you have some more knowledge. Internships aren't like normal jobs in that, if you aren't ready the first time, you're usually welcome to try again later.

Skills aside, the main thing internships look for is someone who is teachable and able to learn. As long as you present that attitude, and can write some code, I suspect you'll have a good chance.

 

Wow thanks 😁 this will surely calm my nerves

 

How old should I be and what kind of experience should I try to get while I'm in college to get an internship? (I'm going into my senior year of highschool.)

Thanks in advance

 

It really depends on the internship. As for us, we've had interns as young as 19, and we only require some basic working proficiency in a programming language, along with essential familiarity with either the object-oriented, functional, or generic programming paradigms.

In other words, if you're (1) 18 years of age or older and (2) have written at least some tiny project in any language, you're probably eligible for an internship.

A good programming internship should be all about learning how to develop software in the real world, and is intended as an "on-ramp" to the industry. It shouldn't require prior programming employment history.

 

Thanks for your response

I have a few more questions:
How do I go about getting a internship? Are there websites that I look on? Should I reach out to the company that I want to get an internship at, or will they reach out to me? Or should I talk to people I know who work at companies that I want to get an internship at? I live in Seattle, so I am friends with lots of people who work at Google, Microsoft, and Amazon.

Sorry for bombarding you with all these questions 😁

Thanks again

From what I know, it never hurts to reach out to companies you're interested in interning at, either directly or through contacts (although you're likely to have the best chances with the latter.) Companies will virtually never reach out to you first.

You can also check job boards for internships. If you're a student or alumni of a college or university, their career services department would be able to point you in the right direction.

However, whatever you do, you should make sure the internship you take is legitimate:

  • According to US Labor Law, internships should almost always be paid at least minimum wage. (The same is true in other countries.) There are very specific regulations for unpaid internships, so you should look up your country's laws regarding this. (P.S. Ours can legally be unpaid because our company has no income yet, and even I'm not getting paid; we're just building FOSS.)

  • Whether paid or unpaid, an internship should never cost you money, either up front or "if you don't finish." There are a number of (legal) scams that claim to offer internships, but require you to pay them back if you don't fit some criteria. These are never okay.

  • Any internship should have you working on a real project alongside actual developers! There should also be training involved. An internship should be the same as a junior development position, but with more on-the-job training.

  • ...it should not involve you fetching coffee, sweeping floors, or doing any other menial jobs shuffled off on you by more senior devs. Contrary to popular belief, interns are NOT gofers. Any internship that treats you like one should be shunned.

In short, programming internships are real development jobs, and should be treated as such, both by you and your employer. You should ask questions about internship you're thinking about applying for. Find out what you'll be working on, who you'll be working with, what the training is like, who you'll report to, what the expectations are, and yes, if it's paid (and how much) or unpaid.

 

Another question, this one via email.

I'm getting ready to finish my masters degree. On the other hand im trying to find a way to get a remote job. According to your experience in the field, what skills do I need? Where should I search?

The exact skills you need depend on the remote job you're applying for, but in general...

  • You'll need to be reasonably proficient with whatever language(s) the job uses.
  • You should be familiar with the common algorithms, data structures, and design patterns in programming.
  • You MUST be able to communicate clearly and effectively with others.

Take a look at dev.to/codemouse92/how-to-become-a... (as well as Part 3).

In terms of searching for a job, there are a number of job listing sites for tech, including:

You can also look for a Jobs or Careers page on the website for any tech company you think you might want to work for.

Besides applying to jobs, you should definitely look for opportunities to contribute code to open source projects. This will help you build your all-important portfolio, which any company will want to see as part of considering you for a job.

Third, you should build your professional network through DEV, Freenode IRC, GitHub, LinkedIn, and the like. One of the benefits to have strong working relationships with other coders is that they can recommend you to jobs at companies they work at or have contacts at, and they can vouch for your skills. It takes time to build this network; the main point of any such a relationship should be mutual support, not just "what can I get out of this". Over my years in coding, I've built an extensive network of professional friends across many countries, and touching dozens of major organizations. I never set out to make friends with people who "knew people." These friendships just happened naturally over time, and now are a major help to my career.

 

I received a great question through PM worth sharing.

I am student of computer science...I am confused which field to select as my specialisation. Can you help me which programming language should I go for. If I pick Java what is important to know in this field as a Java developer?

It actually isn't that important to "select" a specialization right away. It isn't uncommon for developers to select one later in their career, after they've had the opportunity to try different things.

The same is true of languages...it doesn't matter that much which one you start with. Find one you like and learn it! If you learn you need to know another language, learn that one as well. Many developers know multiple languages.

Right now, you should focus your attention on mastering the general skills you'll need: programming basics, paradigms (object-oriented, functional, and generic programming especially), debugging skills, algorithms, data structures, design patterns, math skills, communication. You'll need these skills regardless of your specialty.

Some day, you'll find some specific thing (or even multiple things) that you deeply enjoy in programming, and that will probably become your specialty. It may even wind up being something you'd never thought of!

For now, just enjoy the ride.

 

I received a question on Twitter from a computer science professor, asking how to help his students, who all understand theory, how to apply that to logic. I wanted to share my answer here as well:


As you probably know, all the theory goes out the window as soon as one is working on actual code. There are two things you can do to help your students with this:

1) One of the best things you can do for your students is to "drop them in the deep end of the pool," so to speak. Instead of assigning only small, well-defined projects, have them work on larger, more real-world-style projects, especially in pairs. (Grade them individually, not as a pair, to help ensure they BOTH do the work.) Allow them to hit the difficulties of writing real software. Through the struggle, they'll start to learn through trial-and-error how to apply theory to logic.

2) Study ACTUAL code in your classes. Take examples from production code. Have the students read sections of code from major open source projects, wherein the theory you've discussed is applied.

Teaching programming is not unlike teaching English or any other spoken language — you must read and write the language to learn how it really works.

 

Hi. I was looking for a 6 month internship starting from Jan 2020. I just wanted to know whether your internship work also contains AI.
Thanks
Regards
Aman Goyal

 

Hi Aman,

It doesn't, I'm afraid. Thanks for asking, though!

 

So what kind of projects your interns do?
Can you give few examples.

Three different interns worked on our string class, which is the first in C++ to be both fully UTF-8 compatible with all operators and functions, while being completely compatible with std::string and C-strings.

Interns have also worked on implementing the data structures we optimized for our game engine; the performance of these data structures actually beats the C++ standard library.

One team designed the foundations for a vector animation engine. We'll be building it again from scratch, not because that team did anything wrong, but because, as usual in coding, "you always throw the first one away." It needs a refactor, but all of the early work now informs future coding.

Several other interns have worked on prototyping components of the scripting language for our game engine, and designing pieces of our educational content engine. One of them wrote a content leveling algorithm we're going to reimplement in the finished engine; another created a critical content development tool.

Granted, that will probably sound like a lot of "planning," but 2015-2018 was focused primarily on figuring out how to solve a lot of hard problems. Now that those are solved, the next round of interns will be implementing these things into reality.

When you're designing a game engine, there's a wide variety of tasks to be done. :)

 

Hi I have recently started a bootcamp based on angular, as I am noob in coding and what can u advice me to be better programmer.

 

Really, the only answer to that is "just code!" I'd recommend the same advice I gave to James (@jliby ) in this comment thread. :)

 
 

What’s the best way to learn. I’ve read a ton of books and I still feel like I know nothing. Any advice?

 

Books and courses are awesome, but ultimately the only way to truly learn to code is to just start programming. It's just like swimming: you can read a hundred books on the topic, but it won't mean a thing until you actually jump in the water.

Don't worry about writing good code right away...just write code!

  • Start building something small, especially something you personally would like to use.

  • Find an open source project you are interested in and just dive in. Read the code, even if you have to struggle through and research what every single line does. Download a copy and try to build it. See if you can fix a bug or add a small feature.

When it comes to programming, it's always bewildering when you first start, but if you just jump in and try to do what you can, soon you'll find you're not just keeping your head above water, you're actually swimming!

 

Thank you. I have a changed perspective now :)

 

This is more of a learning question. I study and study but I just can't grasp programming concepts, I still program but it feels like I'm a blind person who will never see is this normal ?

 

There are two possibilities I see here:

Option One is that you might not have had things explained in a way that makes sense to you. I posted big list of books and courses in response to @justaguy , and one of those is an excellent book called "Computational Fairy Tales" that explains things in a different way. It might help you get unstuck. If it does, also check out "Game Programming Patterns".

Option Two is that programming may not be right for you. Not everyone will be a great programmer. Some people just don't have the same natural talent for logical-analytical as others...and that's FINE! Everyone has their own genius, and I know you'll find yours.

If you really want to work in programming, but find that you just don't have the mind for it, you may look into one of these career paths instead:

  • Developer Advocate
  • Project Manager
  • Technical Writer
  • User Advocate

There are many more options besides. You don't have to be a skilled programmer to be involved in software development. There are plenty of other roles to be filled, which most programmers really don't want to have to do because it takes them away from writing code!

 

Thanks a lot i will defo give those books a read :), also thanks again for the advice much appriciated also a new outlook on my career :) !

 

How do I apply to good internships? What do I need as a beginner to get started?

 

Eligibility varies from one internship to the next, but in general, you should be at least 18 years of age and have basic working proficiency in at least one programming language.

However, you should always research the eligibility requirements and prerequisite knowledge for any internship you want to apply to.

 

How many, in your imagination, have you thrown out the window?

 

Only about half of the interns we hire actually complete the program, which is apparently a pretty good completion rate all things considered. A lot of people like the idea of coding, but don't want to really put in the hard work necessary in practice.

We also only hire about half of those we interview, and only interview about half those who apply.

All that math to say, only about one-eighth of people who apply for our internship program actually make through to completion, but those who do are well-prepared for the industry!

But how many interns have I imagined throwing out the window? None, really.

 

Hey Jason. Can you give me some guidance as where to start?? I have always wanted to learn computer programming but no idea where to start. Thanks

 

Pick a language that looks interesting to you, find a book or course on it, and just start writing code! I personally recommend starting with Python.

I posted a long list of books and courses on this comment thread, in response to @justaguy . Check out some of those, especially "Automate The Boring Stuff with Python", "Python Crash Course", and/or "The Complete Python Course".

I'd also recommend signing onto Freenode IRC and joining the #python chatroom. It's a great place to get help and learn more about the language.

Welcome to programming, and good luck!

 

What are the main problems your interns usually face in their work? I guess theoretical knowledge is not a problem, so what bothers them the most in a practical sense?

 

One of the roughest parts of the transition from the classroom to the workforce is the realization of how elusive good code can be. In a learning environment, all the examples are well-defined and neatly contained; very little of the natural weirdness of real-world software projects leaks into that safe little sandbox.

This is one of the reasons I have all new hires read Dreaming in Code by Scott Rosenberg.

The second difficulty they encounter is in moving from the essentially micro-managed environment of the classroom to the somewhat self-managed environment of the workplace. While interns have access to myself and the rest of the staff if they have any questions, and while I meet with them 1-on-1 regularly, the responsibility for asking for help rests solely on them. They are assigned a task in a real project, and must figure out how to complete it. Having that much autonomy is often a shock to the system if all you've ever known of coding was the undergrad college environment.

I have a saying for myself: It is better to let someone dig themselves out of their own hole, than for them to have to dig themselves out of a hole I dug for them. Typically, it's easier to recover from, and learn from, a disaster of one's own making, rather than the results of bad management advice.

Incidentally, the difference between a successful intern and one who doesn't complete the program often comes down to whether they can ask for help. That approach is necessary if they're going to learn to make it in the industry, and it's one of the reasons why our internship graduates have made such a smooth transition into full-time development jobs elsewhere.

The third difficulty is ironically in understanding the concept of a "need-to-know" basis. In college, you can usually see the purpose of an assignment right off the bat, but in the workplace, you may not fully understand the depths of a project, or why your piece is needed.

I answer some of those questions, but I don't spell out all the logic behind my decisions, partly because the individual wouldn't be able to handle it all, and partly because one has to learn how to let go of understanding many things "above their paygrade" (often just for purposes one's own personal sanity!)

Going hand-in-hand with that is in learning to respect the autonomy of other coworkers as well. Collaborating and providing feedback without micromanaging or meddling can be a difficult balance, especially when "group projects" are one's only exposure to teams.

And then there's the good old-fashioned "learning how to take directions." No further comment necessary on that.

 

Do you have any any advice for remote collaboration and leadership for Jr Engineers? I’m interested in how you provide the “administrative structure” and guidance needed.

 

I've figured a lot of this out by trial and error, but our current system is surprisingly polished and effective!

  1. I put a lot of work into the collaborative development platform. We use Phabricator, Jenkins, and Nextcloud (plus a few other pieces) all fine-tuned to work smoothly and effectively.

  2. We have extensive, clear, well-organized written documentation for the setup process and workflows.

  3. Teams meet over video chat at least once a week. Text-based chat is no replacement for human interaction! The agenda is simple: the leader gives announcements, each person shares what they did over the past week (with opportunities for feedback), and then each person describes what they'll be doing over the next week. Meetings can be as short as 15 minutes, or as long as an hour (we moderate to keep it below that), depending on the needs of the team that week. Everyone looks forward to the weekly meetings!

  4. Interns are assigned an Internship Supervisor (so far, always me) whom they meet with 1-on-1 regularly over video chat. As they move along through the program, they need to meet less and less.

  5. The programming workflow includes mandatory code reviews, CI/testing, and documentation requirements.

  6. We have a complete Employee Handbook and proper forms for all administrative functions. We require these for things like leaves of absence, promotions, and disciplinary reports.

  7. Time must be reported using the dedicated hours tracking tool. Because everything on Phabricator has a code (tasks, PRs, commits, events, etc.), all reported time must include the codes for the work completed. (This has allowed us to catch deceptive over-reporting.)

  8. We have regular performance reviews; however, these are structured in a way that requires the supervisor (me) to hand-write a statement about each point. Then, I meet with each intern to discuss the review.

  9. Interns in the second half of the year-long program, and graduates of the internship program, can serve on the Standards Board, or be appointed as an Assistant Lead Developer or Team Lead. These are designed not to be considered "promotions," but rather a voluntary peer leadership position. It provides valuable management experience to interns, and makes my job a lot easier. (These roles typically cycle each year as graduates get jobs, or just want to give other interns a turn. It's a beautifully peaceful hand-off.)

Point 9 is especially interesting because, when interns know they have leadership opportunities, they become more invested in the maintaining and upholding the structure.

 

THIS IS SATIRE :
What is (Pi / "r/Entitledparents") + " YOU ARE AMAZING, JASON! "?

 

I've seen sooooooo much entitlement in interviewing candidates for the internship program.

One 19-yr-old, who bragged he had built half an app in C# (the whole extent of his coding career thus far), actually sat and lectured my most senior developers on everything he thought they were doing wrong in our project...much to everyone's amusement.

I burst his bubble when I described the rather auspicious achievements of said devs.

In our hiring annals, we refer to him only as "wonder boy".

 

Calin: Is satire
Jason C. McDonald: You used the wrong formula but got the write answer

 

Just curious, witch courses would you recommend for coding?(Udemy maybe)
Lets say like a path that would prepare me for a junior role.(Besides making side projects of course 😊)

 

Hi Deni,

I posted a lovely list of books and courses on this comment thread, in response to @justaguy . I'd start there.

In your case, I'd especially read "Dreaming in Code", "Game Programming Patterns", and "Computational Fairy Tales", in addition to one or more of the Python or C++ books/courses I recommended.

 

And my second question is that how can I learn some good algorithms and concepts about data structures?.please suggest some content about those

 

"Game Programming Patterns" and "Computational Fairy Tales" on that list I posted to @justaguy are both quite good.

However, I think the best explanations I've ever seen are right here on DEV.to!! The BaseCS video series by @vaidehijoshi is absolutely incredible:

 

How to keep balance between projects and competitive coding ?

 

It's all about scheduling. Read my reply to Jimmy Mona (@jmona789 ) for more on that.

In short, every person has 24 hours in a day. The only way to make the most of that is to create a scheduling framework. Set aside times for everything: projects, competitive coding, study, time w/ friends and family, housework, relaxing.

You can swap and shuffle your schedule around as you need to, but the point is to not leave unscheduled times, as those will almost always either fill themselves with busywork or time-wasting. Protect your relaxation and social time as much as you would protect your work time. "Pencil in" potential events instead of responding with "I don't know". Take charge of your time!

I know you can do it. :)

 

What is your favourite colour?

No but seriously, how do I finish a side project before starting a new one?

 

Wait, I'm supposed to finish one first?

Honestly, I don't know that there's a rule that says you can only have one open project at a time. For me, I usually have about a dozen projects going at a time (just my personality), and I work on whichever I have the necessary resources and interest to work on that day. (Actual deadlines may shift priorities of course.)

And yes, I've finished multiple projects that way.

Don't be afraid to set aside a project that you're stuck on or bored with and start another. Often, something you learn in one project will get you unstuck in another.

The only time you should really be concerned is if you never actually make progress on anything, at which point you should take a hard look at your own work habits and expectations for what happens when things get difficult.

P.S. I like them all, but blue is especially nice.

 

I have problem with implementation my logic into code. How to solve that?

 

The art of programming is indeed found in that canyon between "human logic" and "code". One of the books that may help you is "Think Like A Programmer", which I included in my big list of books and resources I posted in response to @justaguy on this thread.

 

What advice would you give to somebody going into the tech industry on a nontraditional path?

 

Hi Angel,

My advice would actually be the same for any path. I myself do not have a computer science degree; I'm self-training through a combination of books, courses, experimentation, trial-and-error, and a whole lot of time on Freenode IRC.

  1. Read! There are so many good books and articles out there. (The list I posted in response to @justaguy on this article is a great place to start.)

  2. Write code. It doesn't have to be good code, it just needs to be code. Apply what you read. Work on a real project if you can, either of your own creation or an open source project already out there. Find something you care about and code for it. Learn what you need to learn as you go.

  3. Read code. When you encounter something unfamiliar, look it up. Open source is, again, a great place to start. And when you find what you think is an error or an inefficiency, figure out how to fix it! Don't be shy about this. If your PR gets rejected, you still learned something and proved yourself willing to help with the project.

  4. Talk to other programmers. DEV and Freenode IRC are two great places to connect with other developers. Also, find out if there are any meetups in your area, and attend those.

  5. Share what you know with others! Answer questions on IRC. Write articles on DEV. If you make a mistake, learn from it and keep going.

Someday you'll look back and realize that you're no longer a beginner.

 

Hi Jason, I recently started my first remote job!, what advice can you give us to avoid common mistakes newbies make? (and what are those mistakes?) i don't want to screw this up.

 

Hi Luis,

Congrats on your job! Here's a few survival tips:

1) Schedule strict work hours, and guard them fiercely. Your employer may set hours for you, or they may give you some autonomy here. In any case, you should have just as much of a well-defined schedule as if you worked in an office.

2) Create a dedicated workspace. Environment has a huge impact on our psychology. You should define a space that is only for remote work, if at all possible. You should never allow yourself to use this space for playing Minecraft, watching Netflix, or hacking on personal projects. This might be a home desk, a corner of a coffee shop, a table in the local library, a spot in a collaborative workspace...just find somewhere that is for work and ONLY work.

3) Set boundaries with co-habitators. Partners, children, roommates, neighbors, and friends need to understand that when you're working, you're effectively not there. Work time is not a time to mow the lawn, wash the dishes, walk the dog, or play Borderlands. Schedule other times to do these things. Let nothing encroach on your work time, unless it would also be acceptable while at the office (such as a medical emergency.)

4) Have a dedicated computing environment. If you can acquire a dedicated work computer, do this. Otherwise, you may want to create a separate user account on your usual machine. As with the physical environment, this helps minimize distractions and improve productivity. There's no temptation to play Minecraft or check Twitter if the icons aren't even there.

5) Shut off distractions. Use browser plugins like Leechblock NG to keep yourself off of distracting websites. Close out of social media on your smartphone. Set your notifications to only be work related. (This is one more advantage for #4.) You may tell yourself "Oh, I can leave Discord open and not get distracted," but you're really just lying to yourself. ;)

6) Find opportunities to interact with your coworkers. Learn how to use all the company's collaboration tools. Take time to set up Slack (or whatever is used) so you can safely leave it open without it sucking up all your attention. Seize on opportunities to collaborate over video chat. Get to know your coworkers. Just because you're remote doesn't mean you need to be disconnected.

7) Invest in your tools. It will be easier to work if you have good tools, so you should splurge a bit on these as your budget allows. Consider investing in a good keyword and mouse. Find comfortable headphones that allow you block out distractions. If you use an online music streaming service, buy a subscription without ads. Purchase a few relevant coding reference books, and keep them on hand. I even have a whiteboard on my home office wall!

By the way, MyNoise.net is worth every penny of its (amazingly affordable) lifetime subscription. It really helps with focus and blocking out distractions.

I hope these help! I'd also recommend looking at my other responses on this thread regarding time management.

 

Thanks for the tips, i'm currently trying to invest in my tools, i never new they were so important until i started working from home, i doesn't even thought about having a comfortable desk chair before!, i will look up for your other responses!

 

Hello i am a graphics designer and thinking of starting c++ and python as my next goal what would the best approach be?

 

I posted a bunch of excellent books and courses in response to @justaguy on this comment thread. Any of these would be a great place to start. All the best!

 

Hi Jason,
I am a newbie. Can you please mentor and coach me to become a marketable programmer?

 

Hi Israel,

Thanks for reaching out. My time is very limited, but you're welcome to check out this listing for the internship program I've been referring to. If this is what you're looking for, I'd encourage you to apply to the Informal Internship program (since you're international).

Otherwise, there are a number of other mentors here on DEV; alternatively, you can post your own listing seeking one.

All the best!

 

What should I to keep me motivated toward programming / coding. Suggest me some tips to follow to become a good coder.

 

The motivation towards programming needs to come from your own passion for programming! That's the only thing that will push you past the frustrating moments. I get through the tough moments by keeping my eyes on the inevitable satisfaction of solving the problem, and the knowledge that I'll learn something cool as a result!

The best way to keep yourself moving forward, then, is to stoke that passion.

Good programmers are also driven forward by a desire to always improve their code. New practices, techniques, algorithms, and tools are exciting for that reason!

Read lots of books and DEV articles. Form professional friendships with other programmers in your favorite language(s) (Freenode IRC is highly recommended). Study code you find impressive. Write code for the sheer joy of writing code. "Reinvent the wheel" if your curiosity desires it.

I highly recommend the book "Dreaming in Code" by Scott Rosenberg. As a young programmer, I was inspired by that story; as a more experienced coder, I still found myself challenged to question my assumptions and dig deeper.

 
 

I don't have much experience with personal finances, except to say "budgets are awesome."

 

Can I join your internship program? I have some experience and expertise in python

 

Hi Muhammad,

We're not formally set up for hiring internationally, but we have an informal internship program through our open source development which is very similar. In any case, go to the website of the company I work for (it's on my DEV profile) and check out the Internship and Developer sections.

You can also message me here on DEV if you have more questions.

code of conduct - report abuse