Author’s Note: I know you were expecting a book review this week, but this week has been really rough because I was sick and I also had lots of stuff to do. I assure you that the review will be written next week. In the meantime, here’s an article on some practical skills that I think will be useful once my internship comes around. Enjoy!
Hey guys, so after 40 odd applications, I was finally able to get my first internship offer :). While I’m still waiting for other offers in a sea of replies, I’m really happy to finally get a yes after so many nos. Whatever happens, I should be prepared to do real work once the time comes.
How will I learn all this stuff?
My approach to learning will be to read a really good book on each topic as determined by Amazon ratings or just by what other people recommend online. While I might use some online resources, especially interactive environments such as RegXR (for regular expressions) to test what I know, I’m a bit sceptical of using online resources because of the really low signal/noise ratio that comes with the internet. Not saying that I won’t use them, but I think books will be a bit more trustworthy. Plus, since I’m a college student, i can basically get any book I want for free using WorldCat.
If I happen to get stuck, I’ll look really carefully to make sure I was following instructions or consult man pages/ help guides before I go onto Google the answer or even ask a question on StackOverflow. I want to make sure that I know I’ve tried the best I could before seeking help, lest I fall into learning to Google as opposed to what I’m supposed to learn.
To test my knowledge, I’ll try to incorporate the skill into one of my personal projects and even make an entire personal project centered around that particular skill.
What am I going to learn?
I’m glad to ask. Due to my inexperience, I’ll be working off buzzwords. So, here’s what I as an inexperienced sophomore will learn as I think it will help me in my internship.
- Git Version Control- Version control is a like a checkpoint system for code. It lets monitor your code and manage changes/versions, making it easier to manage. Plus, since git is a form of distributed version control, I can work with others. This can be done either internally or online through places such as GitHub. Bringing git will help me manage my projects better instead of trying to remember what happened before I removed a huge chunk of code.
- Linux- Linux practically runs the world. Plus, it’s basically the best choice for programmers (along with OS X in some sense). It’s free, lightweight and it comes with powerful tools such as the bash shell for scripting, apt-get for packages that extend Linux’s features as well as it being very secure. By learning how to use Linux, I’ll understand what all the hype is all about.
- Bash Shell- The Bash Shell (The Bourne Again Shell) is a programming language and command line environment (Teminal) commonly found in Linux and Mac OS. You can get it in Windows too if you need. Bash can execute scripts and perform various tasks on your host operating system.
- Regular Expressions- Regular Expressions let you type characters to create a search pattern, a low-level Ctrl+F so to speak. Using the search pattern, you can search through loads of text and perform additional operations on it, like replacing it or retrieving the given value. These expressions can be a pain to work with at times with all the .?=>\d+ all over the place, but it’s a powerful thing to have once you understand it.
- Design Patterns- Design Patterns are ways in which recurring problems in software development are solved. They create a template which can them be implemented in code. This makes code more maintainable in addition to speeding up the development process. Since I’ll be working on real stuff as oppose to basic SPA’s, it would be beneficial to learn how to solve bigger problems through design patterns.
- Databases- Databases is highly organized data that form the basis of nearly everything we do with computers and the internet. From account information to geographical data, databases have created an easy way to query, store and organize data. While there are many types of databases, like relational databases and document based databases, it’s important to understand when to use each type of database as well as how to store data.
- Agile Development/Scrum/Lean/Kaban/HoweverSoftwareIsCreated- Right now, I make software…rather liberally. I only work on stuff when I really feel like it and I go into each project without a clear plan. In the real world, I assume that software is made in a really formal way with set schedules, sprints and the like. Might as well learn how to do it now. I guess this also includes Test Driven Development and software development as a whole.
- Office Communication/Soft Skills/ Just a Devs Life- I don’t think I will be on a computer all day long. There will be meetings, reports, documentation, emails around software development that are equally or even more valuable than the software itself. Communication is probably the biggest this on this list since I do that every single day.
So here you have it! 8 things I want to learn over the next 8 weeks before my internship comes around. I’ll probably make a blog or web page tracking my progress, so I’ll keep you guys in the loop as to how I’m doing.
Thanks for reading! Next week, I might do two articles :). One on the book review and another on a project I’m working on which is trying to find the best editor out there by using an editor a week.