*Note: This blog was migrated from a previous blog. They also rescinded the internship since I couldn’t get housing.
After 40 applications, I finally got an internship! While I’m still waiting for other replies, I’ relieved to get a yes after so many nos. Regardless of what happens, I should prepare for the internship and in this post, I’ll go over how I plan to do that.
My learning strategy will be to find a really good book based on Amazon ratings and recommendations from people online. Once I’ve found a book, I can check it out for free with an interlibrary loan. While I might use online resources for a few things such as testing my knowledge, I’m skeptical of online resources2 because of the really low signal to noise ratio of the internet.
If I get stuck, I’ll cross-check to make sure I’m following instructions as well as consult the man pages/help guides before I google it. I want to make sure I’ve exhausted all my options before I seek help. I want to learn how to program, not how to Google3.
To test my knowledge, I’ll try to use a skill in my personal projects or better yet, make an entire project centered around using that particular skill.
What To Learn
- git version control- Help me create checkpoints in my projects to track changes. I’m choosing git in particular because of how popular it is.
- Linux- Linux runs the world. It’s designed for programmers because of all the powerful tools it has, such as the bash shell for scripting and apt-get the package manager. Plus it’s super secure. You can also get it in Windows if you need to through a virtual machine5.
- Bash Shell- The bash shell is a programming language and command line found in Linux and MacOS. It’s also possible to get it to work in Windows if you need it.
- Regular Expressions- Regular expressions allow you to search a string given a certain pattern, like a low level
Ctrl-f. While it’s really hard to use, it’s an incredibly powerful tool to learn once you understand regular expressions6.
- Design Patterns- Design patterns are standard solutions to certain programming problems, allowing for faster development and more maintainable code. Since I’ll be working on real stuff as opposed to basic single page applications, it’ll be beneficial to learn how to solve bigger problems through design patterns.
- Databases- Databases allows one to structure and query data. Databases come in many types, such as relational databases which store data in tables and document-oriented ones which rely on key-value stores, like a hashmap.
- Agile Development/Scrum/Lean/Kaban/HoweverSoftwareIsCreated- Right now, I make software, however, I made it. In the industry, development is more structured due to what’s at stake. I might as well learn how to do it now and get familiar with Test Driven Development (as they did in the interview) and software development as a whole.
- Office Communication/Soft Skills/ Just a Devs Life- As much as I would like to hide from everyone, programming is a collaborative effort, so I need to learn how to communicate effectively, especially in an office environment.
So there you have it! 8 things to learn in 8 weeks before my internship comes around. I’ll probably make a blog tracking my progress, so I’ll keep you guys posted
So, after revising this post, I feel like the point of the internship is to learn all this stuff as opposed to going in knowing everything. Although without an internship, I’m not sure how I’ll get a job since I’ll seem inexperienced.
- My learning strategy now consists of either following a great tutorial or by shouting at my computer screen in frustration while I frantically try to figure out how to do something. ↩
- As of revising the post in July 2017, I’ve come to realize that my skepticism at online resources is unfounded. After all, if a resource is bad, I can just go onto the next result Google Search result. Books are still great, but the internet covers the edge cases. ↩
- This paragraph sounds intellectually responsible, but in all honesty, I do none of this. I just google “x not working”, scream for half an hour only to realize that I can’t read and I can’t spell. Also, learning how to google is a very valuable skill since it teaches you how to accurately describe a problem. Besides, the pros do it. ↩
- The software is still useful, it just needs to be used with intentionality rather than just satisfying some resume checklist. ↩
- As of July 2017, Bash on Windows exists which allows you to run a Linux subsystem from the comfort of Windows. It isn’t perfect, but it integrates very well with Windows. ↩
- I don’t think it’s possible to fully understand regular expressions, but it’s worth a shot. ↩