thoughts, stories and ideas

So, you think you can code?

Most of you reading this article have already asked yourself the same question at some point in your life, otherwise you wouldn’t be here reading this now.

You have taken an interest into the fine art of programming and are already considering it as a major part of your career.

Whether you’re a freshly baked college graduate currently finishing your studies, just starting them, or you have merely taken a few courses that involve programming and found it enlightening, you are pondering on the meaning of development in real life.

College programming

Let’s say you know your way around an IDE, you’ve learned your fair share of C, C++, Java or C#, and maybe a little bit of Python, even Javascript.

You’ve used these technologies in various occasions for a course, where most of the time the assignment required you to solve it by taking in a set of inputs and producing a strictly defined set of outputs.

More often than not, the assignment focuses less on the code itself, and more on the concepts and paradigms that the course was meant to teach.

So, every time you’d get one of these assignments, you'd go over the course materials, peruse all the information you can find on the web about the matter and finally produce a program that behaves exactly like the assignment requires.

You’d get the maximum amount of points from it, feel ecstatic and would probably go out for a beer (or ten) because you're a student after all.

And everybody lived happily ever after. Well, not exactly.

All of a sudden a wild error appears!

You see, in the real world things break, and so do programs.

From time to time the internet connection goes awry, or the system does not allocate enough resources. Your user could input something crazy, and sometimes the darned thing just won’t do its job and nobody knows why.

The difference between an assignment and a real-world app is that the user of the second will expect it to just work, or at least be informed of what went wrong.

When you're working on the assignment, that requires only the specific cases covered by the course.

In other words, error handling is a major part of development which is scarcely covered by most courses that involve programming.

Even though it is extremely important, developers often seem to neglect covering all edge cases of a problem before going to production.

It might not even be your code that causes the error, but a dependency instead, but it will affect the experience of your app.

Remember, you don’t want the user staring at a blank screen without explanation just because an API you are using didn’t return any data that one time.

It’s a pain to maintain

Other interesting aspect of scholastic programming is it rarely happens that the first programmer in the project maintains that same code after a longer period of time.

It is also not very common for these projects to be scalable, because they aim just to teach the concept.

In practice, new change requests come in all the time, new features are requested, and sometimes even a complete app redesign.

Of course, if the project does need to be maintained, the person working that code will probably look for the person that wrote the code and send them flowers for the terrific job they did.

But, I’m digressing. The point is, developing apps in the real world, unlike writing a program for an assignment, costs money that somebody needs to pay.

If the code quality is poor, more time will be spent on debugging and refactoring, therefore more money will be wasted, because time is money.

Think about it, by writing poor and unmaintainable code you are actually hurting the economy.

Don’t do it — let the politicians take care of that one!

Programming is…social?

Even though the title of this section sounds like an oxymoron, believe it or not, programming is actually a very social activity.

Be it in the form of repositories, blogposts, conferences, or just occasional gatherings, developers like to communicate and share their knowledge.

That way we can all become better programmers, and our apps will continue to fascinate and inspire.

One of the most important social aspects of programming is learning how to use Git properly - learn a branching model like git flow and stick to it consistently.

Use pull requests to merge code and make them short and sweet, so it can be easier to track the work.

By being a better Git citizen, your peers will respect you more, merging code won’t take 2 hours, and you will be more satisfied with your work.

Conclusion

What exactly is the point of this article, besides the obvious criticism of the way programming is taught in courses?

Well, if you feel you are ready to go out there and be an awesome game, iOS, Android or web developer with majestic skills, keep this advice in mind.

Instead of thinking about the app as just a few lines of code that do something that someone said it needs to do, think of it as a living actor in the engineering theatre.

Will it improvise if it doesn’t remember its lines? Will it play its part well with others? Will it still be fitting for another show sometime later?

These are all actions living things take, because programming is a living thing.

It will surprise you, baffle you, astound you, inspire you and sometimes even make you desperate, but in the end, it's that dynamic nature that makes it such a noble art, so keep cranking the code out!