DEV Community

Jason C. McDonald
Jason C. McDonald

Posted on • Edited on

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

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 career service departments of our local universities to continually improve this internship, and am proud to say that we've had a dozen graduates of the program to date, most of whom went on to full-time development and IT positions.

Interns work 6 hours a week (almost always remote) on actual projects in C++ and Python. They have opportunities to participate in team leadership, hiring, and standards authoring. Although remote, we're fully collaborative, and offer the same level of administrative structure you'd find in any full-time industry job (remote or otherwise). Ours is definitely an unusual program, but it works.

Since our company has between 3-10 active employees at any given time, I wear many hats. In running this internship, I've simultaneously served as lead developer, hiring manager, trainer, mentor, technical writer, code reviewer, IT, DevOps, you name it! I've helped interns learn to manage time, handle conflicts, solve problems, ask questions, review code, write documentation...and much, much more.

I've made a lot of mistakes over the years of running this program, but it's been an adventure I've loved every minute of. I've been taking the time to look back as I get things in place for (hopefully) the next round of interns next year.

Ask me anything!


Read the article based on this AMA...

Latest comments (133)

Collapse
 
monali_yenchalwar_be385c4 profile image
Monali Yenchalwar

sir i am in 2nd year of computer,i have no idea what to choose and what to not,what is right for me now...?

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

It isn't actually important which language you choose at this stage. There's no wrong answer. The important thing is to pick a language and learn to use it well. Through that, you'll become proficient with the more universal concepts of software development.

If you're at a complete loss, here's a few possibilities. If you choose from this list, just pick the ONE that feels the most interesting, exciting, or attractive to you. Again, it really doesn't matter where you start!

  • Python -- good for automation, data science, machine learning, scientific computing, APIs, rapid application development. This is a good multi-purpose language that introduces you to many patterns and paradigms.
  • Typescript -- this is the language to learn if you want to get into web development. It's better to learn for that than Javascript, as it will help train you to think about data types (something that doesn't actually go away in Javascript.) Some books (I haven't read these, but I've seen them recommended:)
  • Rust -- good for desktop application and systems development. Mastering Rust will also prepare you to later learn C, C++, Fortran, and COBOL, which enables you to work with legacy applications. (There's a massive need for people who know COBOL.)
  • C# -- good for desktop applications, and also popular for game development. It also gets you comfortable with the .NET ecosystem, which is very widely used.

Once you've selected a language, start building something. If you have an idea for something, start building it yourself. Otherwise, try to find an active open source project to contribute to.

Most importantly, however: READ lots of code! It isn't enough to just write code. Reading open source code, especially in whatever language you're learning, is not only a potent way to learn, but it develops the all-important ability to understand other people's code. Check out the book "The Programmer's Brain" by Felienne Hermans to learn more. (manning.com/books/the-programmers-...)

It's also worth reading the Write Great Code series by Randall Hyde (nostarch.com/writegreatcode1_2e)

Collapse
 
haken_oliver profile image
Oliver Haken

How do you learn about modules using help(), dir() ect

Collapse
 
musawakiliml profile image
Musa Adamu Wakili

Hello, i have started an internship program in my academy this yea, basically i am teaching them only python programming. Pls what will be the best way for me to mentor them into becoming good at programming in 8 months.

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

Here's a few things:

  1. Give them real tasks to do in a real project, where the outcome depends on them. Encourage them to make and learn from mistakes.

  2. Give them space to do the task, and encourage them to seek help when they need it, but otherwise stay out from underfoot until they ask. Save your feedback for code review, and then...

  3. Give them thorough code reviews. Keep positive feedback and constructive criticism in balance therein.

  4. Teach them how to find their own answers. Research and using documentation is a skill that takes practice.

  5. Create opportunities for them to collaborate with one another, and with the rest of the team. As one of my interns regularly reminds his peers, "the internship is us."

  6. Focus on training soft skills and general programming skills: task and time management, communication, code review (they should review others too!), writing documentation, testing, debugging, effective repository usage, and so on. These are the skills that are so hard to pick up on in a career. You can always learn another technology.

Be advised, an internship isn't really a good model to teach programming for the first time. Once they have basic programming skills, an internship allows them to use those skills on a real team. They'll do a lot of on-the-job learning, and possibly even some training, but the purpose is to gain real world development experience.

Collapse
 
eezzell profile image
eezzell

Hello,

I am starting a paid internship program at my organization, and will be working with interns who are going through the same grad program that I did. I was considering starting a book study as professional development for the interns, but am not sure if I will be able to ask the interns to count all of the hours they may take reading the book towards their paid hours. I was considering asking them to read an excerpt that would count towards their hours and to allow their book presentation work to count towards their hours, but to make the reading of the complete book optional. Do you have any suggestions?

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

Hi @eezzell ,

There are actually two books that we require all interns to read here at my company, and they are allowed to count all the time. There are a couple of books that I may recommend or assign, depending on their task. That may sound like it would take a large chunk out of the 240 hours, but the return on that reading is actually worthwhile.

Usually, the best way to keep this balanced is to have a clear checklist of expectations for the internship. If they know up front what all they will need to do with their time, and how long they have to do it, that will help them to prioritize. At my company, we require 240 hours, 6 hours a week, and we have confirmed that all the tasks can be completed comfortably within that timeframe.

As to your particular situation, you could have them just read an excerpt, but understand that they are not likely to want to read the rest of their book on their own time. Paying interns for training time is just one of the investments a company makes. If you can't justify paying them to read the book, chances are it's not that important.

Collapse
 
dah00 profile image
Obed

(I hope it is not to late to ask a question)
I am a sophomore college student, I would like to get an internship but at the same time, I am still worried that I don’t have a decent knowledge for an internship yet. I am about to finish my Data Structure class now. My question is, what is the minimum knowledge required to get an internship? What else should I do to be confident enough in coding.
Thank you.

Collapse
 
codemouse92 profile image
Jason C. McDonald

It depends on the internship, really. Some (like the one I run) only require basic proficiency with at least one programming language, and familiarity with either object-oriented or functional programming; all of that you'd get from your typical CS-101/102. Others may want you to know a particular language, or have other knowledge; look at the posted requirements for any internship you're interested in.

As far as gaining coding confidence, you only gain that by working on real projects. In lieu of an internship, start a side-project of your own. Make it about something you personally care about, something you would actually use. Then, build it, learning as you go. This is the single best way to gain confidence in programming, and it makes an excellent addition to your coding portfolio, especially if you put it on GitHub or the like.

Collapse
 
dah00 profile image
Obed

Thank you for your respond, it is very helpful.

Collapse
 
codemouse92 profile image
Jason C. McDonald

My morning devotional is my reset button. :)

Collapse
 
laserblue profile image
laserblue

Do you agree with Semmy Purewal's statement regarding the existence of a gap between what is taught in Universities and the professional world?

Learning Web App Development (2014 ) by Semmy Purewal
pg. xi

β€œIt turns out that there’s a pretty large gap between practical, everyday software engineering and programming as taught by computer science departments at colleges and universities.”

β€œIn early 2008, after about six years of grad school and teaching part-time, …”
β€œ... I had been studying computer science for about nine years at that point, and had been teaching students how to develop software for about six years. Shouldn’t I have already known how to build web applications? It turns out …”

Collapse
 
codemouse92 profile image
Jason C. McDonald

Absolutely. This is the gap wherein fits the internship program I run. A couple of the university CS professors I've worked with in the past have affirmed the same, and regularly warn their students of this gap; unfortunately, their students invariably remain incredulous until they actually try to work in the industry.

Collapse
 
deevs_hari profile image
Dhivahari Vivek

Undergrad here! Have been trying forever for a cyber security internship but decided to accept a software engineering internship to at least get some experience (and because the cyber opportunities were taking too long to respond to me). I know cybersec internships really appreciate prior cybersec experience and this current internship is just software engineering. I am also leveraging the security research team of which I am leading. Will the fact that my current internship (that ISN'T cyber security-related) still add some weight to my resume when eventually looking at cyber security internships and eventually a cyber sec full-time position? Do I still have a chance at cybersec opportunities when my only professional experience in the industry is regular software engineering? (Though, I may get to do security things, but the position is an all-purpose compsci position, if you catch my drift.)

Thanks for your time!

Collapse
 
codemouse92 profile image
Jason C. McDonald

I can't say much to the cybersecurity sector per se, as I have no work experience in that specialty. That said, I know that general computer science and computer programming do play a major role nevertheless. Industry work experience, especially at this stage of your career, is always valuable.

Depending on your particular internship, however, you may be able to maximize the future applicability of your experience. Learn the security factors of the languages and technologies you're using. Every language has security holes. If you can familiarize yourself with the security flaws that may potentially affect the project your team is working on, you may be able to provide useful feedback through code reviews, bug reports, and the like.

If this sounds like something you want to do, I recommend talking with your supervisor about it. They may have specific ideas on how you, in your current assignments, could add value to the project from a security angle.

In any case, remember: any computer science position will necessitate knowledge of programming patterns, paradigms, techniques, and algorithms. Nothing you're doing is wasted, even if you can't do much security-related.

Collapse
 
jasterix profile image
Jasterix

Great post! Is this a paid internship?

Collapse
 
codemouse92 profile image
Jason C. McDonald

Unpaid, as the organization in question focuses on open source, and does not presently have income. (Even I, one of the owners, doesn't get paid.)

Collapse
 
codemouse92 profile image
Jason C. McDonald

I'm sorry, but I don't assist with cracking. I also would advise you to think better of this plan; even most white hat hackers would consider this unethical.