You have just spent the last few month going through that awesome course learning all the basics of coding. You can now write scripts that can automate almost anything your mind or your clients mind can conceive. But the desire to continue learning is strong so now what next?
All to be great developers will be at this position at one point in their life. Yearning to get in more technical knowledge but diving into advanced materials almost certainly takes you to theory or project management. Not fun things, at least not for now.
Thankfully for you at this stage there is still a lot more to learn.
Most languages and particularly the open source ones are quite laissez faire when it comes to their attitude on how you style your code. When working with a team, individual style adds complexity to the codebase rapidly degrading its quality.
Thankfully most languages do have a coding guideline. Learning the one for your language will be a good investment for your career.
See the entry Name well or go home for more details on style.
It’s all in the data
Not all the fancy syntax in the world can hide the fundamental truth that programming is just manipulating data. It will serve you well in the future to get your relationship with data right.
Learn concepts related to:
- Data types and why they matter (Integers, Floating-point, Booleans etc)
- Data structures and how they affect performance (Linked lists, Stacks, Queues etc)
- Primitive Data structures (arrays, dictionaries, lists) This are important to optimize your code in your language of choice
- Databases. There is an amazing array of database systems in the market, it is worthwhile to explore them and their unique offerings
In writing your code, your primary imperative is to reduce complexity, see Heart of software engineering.
To do this you may need to learn tools and techniques that can help you refactor your code to make it easier to read.
Some of the most popular principles relate to:
- Recursive procedures
- Functional programming
- Conditionals. Some programming languages offer a rich variety of expressing conditional flows
- Literate programming
Error detection and Exception handling
By its very nature, code is complex and not amenable to intuitive thought. As such you can expect that your code will contain errors. That by itself is not a problem, the challenge is how do you keep the system running even when such exceptions exist?
All modern languages offer some sort of run time exception handling. Make generous use of asserts in your code and your weekends will be peaceful!
Learning defensive programming is definitely an investment to consider at this point.
Writing code is easy, changing existing code is a nightmare. You can prepare for the eventual scenario in which you have to change your code by baking in automated tests.
Automated tests should be FIRST
- F – Fast. If you have to wait more than a few seconds for the tests to run, you will likely not use them very much
- I – Isolated. To ensure you can quickly narrow in on the problem
- R – Repeatable. Running your test should not change state of the application. That way you can run it many times
- S – Self validating. Tests need to only give a binary yes/no.
- T – Timely. Don’t say you will write the test code later. That never happens
Tools of the trade
A good carpenter would have no problems differentiating between a Socket, Allen or Pipe wrench. As an upcoming developer you should familiarize yourself with the various tools that you will be using on your day to day job.
- IDEs (Netbeans, IntelliJ, Pycharm)
- Text editors (Sublime, ViM, Emacs)
- Source code control (Git, Mercurial, Subversion) actually maybe you just need to know git!
- Team collaboration (Slack, Gitter, Confluence)
- Project management (Trello, Podio, Asana)
- Code repositories(Packagist, Pypi)
Coding is often associated with lonely hours in front of the screen. But it doesn’t have to be like that. Unless you are in a very remote area, there is likely a meeting of like minded individuals going on regularly near you.
Attend this events with fervour. The benefits are amazing. Apart from the chance to discuss your ideas with a human being who understands what you are saying, you grow your network which will pay off in opportunities later on.
That should provide you with some fodder for your hungry brain to chew on.
Tell me about your experience on my twitter @jchex or in the comment section below.