Friday, 23 May 2014

Post 4: Rethinking the purpose of this blog

Or why this blog would be better served for technical purposes related to my GitHub account

I haven't blogged in quite some time. I don't know if it even classifies as blogging if I'm getting very few visitors (it seems like mostly bots dropping by).

I've decided that using this blog as a way to share my journey through different technologies will be helpful to any other person that faces this same issue with such technologies.

You can expect to read mostly technical stuff (from now on) with a focus on Ubuntu, Python, HTML5(does JavaScript count here?), NoSQL/SQL, server-software and everything in between.

I'll try to blog about other cool things I discover, but the focus will remain on technical stuff, with much less philosophy.

My next blog post will discuss my journey with the Gauteng Python User Group (GPUG), so you can expect to learn some cool things about Pelican (the software I used to build the static site).

Thursday, 2 January 2014

Post 3: Feeling enlightened and gaining confidence

Or learning a variety of new things that go hand-in-hand with programming

It has been approximately 2 months since my last blog post. I haven't written much because I was occupied with a lot of things simultaneously. Included among those was writing my year-end exams (in the Southern hemisphere our academic year-end is in November - although I strongly disagree with the 2-month holiday that tertiary institutions give students after the year-end exams, as we could probably complete 3-year bachelor degrees in 2.5 years and wouldn't be as unproductive as the notion of a 'holiday' allows us to be).

In my journey with Django, I have moved on to Ch10 of the Tango with Django lessons. I would firstly like to thank the 2 authors (if I haven't done so already) as their efforts have really created an understanding of the Django framework that I don't think I would've gained this quickly (there are other good resources out there, but I'm going to declare that the "Tango with Django" tutorial is one of the best out there - from an MVC, Python and 'webapp' perspective).

Coming up to Ch10, I have not only learned an extensive amount of using the framework, but I have also managed to spot trends or patterns in the code itself (maybe because of a statistics background or maybe because the patterns just stand out).

The tutorial itself doesn't deal with more complex issues like webservers or full-on databases (like Postgres), but I would assume that those aspects fall into one of the end-quantiles of the learning curve, after you have already learned so much. Coming from a linux background and working with webservers and databases (PHP and Joomla) I assume it won't be as complex to me as to someone who hasn't dealt with them at all (I'm being a bit over-confident in my abilities there, so I sure hope I don't end up with 'foot in mouth' regret).

Concerning those trends or patterns I mentioned in the previous paragraph, I am beginning to realize that:

Unless you are a pioneer of some coding aspects/language/system or need some really (I mean really) custom setup, a lot of code you write can and should be used elsewhere. Although the DRY principle applies to projects individually, I am pretty sure it applies to multiple projects too, where a lot of pieces of code can be used repeatedly.
Although I am stating that rather boldly, I should also mention that after a certain amount of time or certain level of scale (or both), the efforts for improving the project then move to custom matters and other parts of the project that are tied to your framework and project but may not even be written in the framework language (examples being your Apache/Nginx webserver, your Postgres/MySQL database, etc.).

As the sub-topic above (the underlined line) states, I have had to learn a lot of other things that go hand-in-hand with Django. I actually went so far as to research what this "dealing with other matters" means, and I can help you understand it too with these 2 links:

http://en.wiktionary.org/wiki/yak_shaving

http://programmers.stackexchange.com/questions/34775/correct-definition-of-the-term-yak-shaving

The christened term used in the 2 links above is "yak shaving". Although I could rewrite the explanations above, I think you should read those links instead, as they are really interesting and don't require me to yak shave for you to understand their definitions better.

So if you are yak shaving on your journey to being a better programmer or you are worried that you aren't being productive if you copy/paste code that you've written previously, you shouldn't feel any anxiety or concern as the worry is unfounded and yak shaving is beneficial (you may also realize on your webserver yak shave that you prefer SysAdmin work instead of programming). I state this last paragraph partly as a personal reference, as I too had concerns on my journey (mostly the productive part) but the more I dwell on it, the more I realize that even if you get deeper into the code, you should still always try to see the bigger picture or realize that coding is a means and not the end.

Coding is a means and not the end.

I hold the statement above very highly, as I consider myself as much a programmer as an entrepreneur. This is what I plan for my next blog post, as I would like to explain some of the experiences I've encountered between what I call "career coders" and entrepreneurs.

Other updates:

Apart from working with Django, I've recently setup a project management system to help other coders go from the:

var x = 1;
x *2;
print x;

Type of coders to professional programmers that can apply their skills as a trade (either by finding jobs or building their own apps as entrepreneurs). It didn't take that long to setup (again, probably because I am familiar with linux and the Console/Terminal doesn't scare me, so a linux server wasn't as daunting as I initially feared) the project management system and it also has allowed me to explore an alternative option to the git workflow- although the alternative is built on top of version control systems.If you would like more info, take a look here: Phabricator

I would also recommend anyone wanting to run some production code to use a VPS in your first couple of months (especially if money is tight and you don't expect your product to captivate 25 million people in 3 days - which would be a miracle and you'd be hailed a 'genius' on tech-news websites).

Apart from this, I am also planning my next couple of programming journeys, which include: learning test-driven development, adding a frontend JS framework (I was thinking EmberJS) to my skillset and lastly, building a few prototypes.

Maybe 1 or 2 might catch on, and this blog will become insanely popular thereafter (although I do hope Google have built-in some scaling tool if that event does materialize).

Onwards to coding!