If I could go back 6 years ago, there are definitely some things I would tell my undergrad self to pay attention to now that I fully understand their importance. But it’s never too late to learn. Here are some things that I know now but I wish I knew while I was in school.
1. Source Control
Most developers have heard of Git or any other source control software. Source control is the practice of keeping track of changes to your code. I did know of Github but I did not really use it. Not as often as I should have anyway, therefore I didn’t really learn how it worked. A misconception I believed was that my projects were not “Github worthy” so I stayed away from it and sometimes forgot it existed. Basically, I felt that they were too simple to be anywhere else other than on my laptop. That wasn’t true. Even a simple algorithm that prints out “Hello World” is good enough. Besides, if you don’t want people to see your projects you can always make them private. It makes it easy to see the progress you make over your project’s iterations and basically over time.
Git has a large learning curve and I realized that once I began working only because git was a necessity. To this date I believe that it would have been better to have taken the time to slowly learn it and be proficient while at school without all the pressures that come with being in a work environment.
2. Object Oriented Programming
I took this class in school, but I did not put it into practice. Object Oriented programming is a sought after skill in the software engineering industry and many employers expect their developers to have somewhat good-enough knowledge in the subject. There are a couple of object oriented languages that you can use to learn the concept; Java, Python and C# are what I have worked with and in all honesty I learnt these while working. Not that learning on the job is frowned upon, but considering I had the time and more flexibility while a student, I should have used that time to increase my knowledge on OOP.
OOP is also a good way to learn code design. Yes, there is good code design and bad code design. Your code may work but it is very poorly designed. Well designed code is easy to read and change.
3. Data Structures and Algorithms
Again, this was a class and after the semester I took it, I forgot all about the subject. Data Structures and Algorithms has a lot of content; more than can be covered in just 3 or 4 months. It requires a lot of frequent practice if you’re going to be able to use them as solutions to problems. I learnt this the hard way when I was prepping for Microsoft interviews.
Algorithm techniques and data structures concepts are the foundation to solving problems in programming and taking the time to be well versed in the various algorithms and data structures will take you two steps further into advancing in your career.
4. Visual Studio
I always opted for the easiest to use and lightest code editor. Visual Studio is not just a code editor but an integrated development environment. This means it can develop all types of application; web and mobile, desktop etc.. as well as has good debugging capabilities which we all need. And that brings me to the next point….
5. Debugging
Debugging is identifying problems in the way a program works and fixing said problem. Every developer has to do it and if you don’t then you’re definitely not doing something right. Not all code always do what they’re expected to do on the first few tries. Some engineers love doing it while some hate it; but it will always have to be done and it only gets easier the more frequently you do it. This means build more projects, write more programs; break more code and fix it. It’s the most important skill to have as a software engineer.
6. PRACTICE!
I cannot stress how important this is and at this point I probably sound like a broken record but I’ll keep on saying it. Some really good practice sites for programming are LeetCode and Hackerrank. Another effect way of practicing you’re programming skills is working on personal programming projects. I think building an entire system from scratch is a good way to learn the entire software development process. It does not only include coding; but there’s design as well, prototyping, documentation, debugging. There’s a lot you can learn from just building a simple calculator.
Watch/ read tutorials and code along side them, build personal project, take programming exercises.
7. Learn both backend and frontend
When I was a student, I didn’t really know what side of software engineering I wanted to focus on; and that’s okay. That’s the best time to learn more than one field and eventually grow your and proficiency in one or many and the best way to learn this is by working on projects alongside watching tutorials. Frontend is the part of an application the user interacts with; commonly referred to as client-side. Backend on the other hand is what ensures everything on the front-end works fine, the server-side.
Common front-end languages are: Javascript, HTML and CSS.
Common backend languages are: Python, Javascript, Java, C# Node.js, PHP
My advice would be to start with a language on its own and learn its foundations before jumping into using frameworks. For instance learn JavaScript before getting into React and Angular. Not only will it make the learning curve of the frameworks easier, but you also understand how and why the framework does what it does.
8. Writing testable code
Writing code that works is good, writing code with tests is even better and also impressive. You may ask “I know my code works, I run it and everything works as expected, why do I need tests?” Remember, when you test your code by just running it, you only test for one or two scenarios that are more or less finding out if what is expected is happening. There are so many other scenarios that your interface may not be able to test but can easily happen behind the scenes. How are you going to test those? By adding tests to your code. Yes, more coding even if your application is running fine.
There are a couple of ways to test code but I’ll mention just one that I find is a good place to start especially of you’re new to programming.
- Unit tests
These tests focus on one functionality; like a method. If you have a method that add users to a database, then your unittest will only focus on that. It will have dummy data based on what your method takes and test as many scenarios as you can think of but only in that method.
Lastly, it’s okay to fail and learning will definitely be frustrating. Remember to continually be kind and patient with yourself and that you’re already doing the most important thing; growing out of your comfort zone.