Reflections of a 30+ “Youth”

As I’m nearing my mid 30s, I’m forced to consider that I am perhaps not as young as I would like to think. Sure, I know I’m not old, but I am no longer the inexperienced, green, young upstart trying to figure out my way around life. I’ve read a lot of articles with titles like “Things you should accomplish by 30” etc, and honestly I feel that it’s worth having my own personal reflections on what it means to be in my 30s.

Generation Gap

For the first time in my career, I’m actually feeling a generation gap. I’ve always thought of myself as a newcomer to the working world, but having fresh graduates in the team and trying to relate to them has proven a bit of a challenge. I’m painfully aware of how I am in a different phase of my career and life, and they are all new and a little wet behind the ears when it comes to the working world. It actually caused me to pause and reflect as I was probably just as positive and hopeful once, and I need to occasionally curb my cynical side a little more. Naturally, I tell myself that I’m being “realistic”, but it is also possible that I am just being pessimistic about things.

Expecting a certain level or professionalism may seem like a high expectation, but I have discovered that smart, young talents are usually hungry to learn and grow, if they are given a certain amount of guidance. Most of them seem to appreciate what we are trying to accomplish, but it is also true that many of them have been fed the myth of “landing that dream job”, but don’t seem to have any idea what it is they actually enjoy or what that “dream job” looks like. In these instances, it can be an exercise in futility to motivate them, even if it is just to stay and finish the project so they can discover for themselves whether this is truly what they like or not like.

As much as I hate labels, I must admit that many of them are a little on the soft side, and calling them the strawberry generation is quite apt in my opinion. Undoubtedly, this does not apply to all of them, but when you see so many of them give up the moment things get a little bit challenging, you start to wonder how things would be so much better if they had cultivated just a little bit of grit. It might not be a fair comparison since circumstances were different back when we graduated, but if things are as challenging as claimed in this generation, with most not able to enjoy the same privileges as their parents, then they shouldn’t give up so easily. I’d like to think a lot of things can be considered learning experiences, but this is not a generation of people who will hunker down and push through. Some might, if a lot of time and effort is invested into them first, and it might be a symptom of the lack of trust they have with current establishments.

Inert Stability

Aiming to transition from “young upstart” to “mid career” has been a great motivator because it allows me to have an ever curious, ongoing desire to learn. I do not ever feel that I have arrived, and this has helped me to grow so much over the years. However, I’ve recently realized I have had to, with increasing frequency, remind myself that I have a lot of experience under my belt and to tap into that when necessary. This is especially true as I am building my team, and while there is still a lot to learn, I need to have a stronger mindset of confidence and self assurance in the work that I have done over the past 10 years.

On hindsight, I realized that my initial few years of working was a time when things were quite uncertain, and despite that, I was quite bullish on taking on new challenges as long as I had the appropriate support. This has always scared me a little because I had no experience to rely on, and pushed through with just a hunch and willpower most of the time. Now however, things are different because problems are solved strategically, based on sound advice and experience. Although there are always new challenges, the approach to tackle them seem to stem more from building on past experiences rather than pure speculation and guts.

I have yet to determine whether this is necessarily a good or bad thing, and I think the truth is that being open to both the risky, YOLO-style approach as well as the calm, collected and conservative approach gives me a depth and flexibility in facing and solving new challenges that I never had before.

Overall, it is very rewarding to mentor someone and watch them grow, and the experience, knowledge and expertise gained has been invaluable in helping groom someone else. Replicating yourself has its perks and I can see why many successful people feel the need to coach and mentor others. I’ve had the privilege to be mentored by others as well, and I can truly say it is one of the key things to help a person grow in his/her career.

Humility

I think I’m quite self effacing, but I also know that with a lot of experience comes a certain amount of pride. In the right doses, pride can be a good thing as confidence and knowing who you are and what you can accomplish builds you to face more and future challenges. However, it is also easy to fall too far, thinking that we have done so much, that we sometimes forget that humility is where we learnt and gained those that makes us so proud of. I’m happy to say that I have not done everything myself, but by standing on the shoulders of those who are older, more experienced than I.

Seeing many who are young, energetic, hungry and hopeful, helps me realize that I cannot rest on my laurels and become a cynical old man (as many “more experienced colleagues” I’ve had are wont to be). I was once like them, and while I might not be in the same position as them now, I remind myself to always retain that drive and persistence. I have never looked down on those who are young, but I do pity those who seem to waste those youthful times. It is a time of opportunities and unlimited potential, and what I wouldn’t give to retain what I know now, turn back time, and do it all over again.

So I have to stay humble, as it is with having these young ones around that I can learn those lessons again, be reminded again, and keep that youthful enthusiasm going. The moment I find myself looking down at a whole generation for being young is when I know I have lost my own edge.

Conclusion

I know I’m not as young anymore, but that is just relative. I am naturally still much younger than many others, with a long journey still ahead of me in my career and in life. Growing and maturing is one of my key tenets in life, and I never want to stop doing that. It’s definitely the easiest to keep it up by framing your thoughts and identity as being “young”, because then you will never feel the need to stop learning.

In the meantime, I’ll just enjoy the fact that I’m doing decently in my career, while still young enough to be gaming, and thoroughly loving it.

Now, if only my wife could see it the same way…

Python with Django pointers – Part 2: Apps, MVC(T) and Models

Django Apps

A Django project is typically formed from several Apps, each pertaining to a certain function within a website. Usually, I would expect to create one App for say, site updates and announcements, another App for commercial transactions with a shopping cart and checkout functions, yet another App for a forum etc.

Django comes with a built in Admin Site App, allowing trusted site administrators to quickly create, edit, delete and otherwise manage content. This is considered a common function that is required for just about ANY website, and covers things like management and authentication of users, display and management of forms, input validation, and translating all that into SQL statements for updates into the database. Having this by default really saves a lot of hassle when building a website and is a key feature available in the Django Framework.

Overall, since Apps can be made up of other Apps, it is easy to take a top down approach in designing the overall website functions, as breaking them down into Apps (or smaller Apps within an App) would make it much easier to architect the entire system. The team can then focus on individual Apps which will generate the functionalities required.

Key things for Apps:

  1. Use “python manage.py startapp name_of_app”
  2. Edit “settings.py” at the INSTALLED_APPS line with name_of_app.apps.Name_of_appConfig

Every App typically embodies the MVC structure which is what makes Apps so powerful because it is “self-sufficient” and can thus be replicated and utilized in different projects, with some minor tweaks done to the settings.

The MVC Structure

One of the coolest things about frameworks, is the ability to manage data separately from the logical layer, as well as the presentation layer. The MVC structure really makes things easier as you can split the management of all three layers making it cleaner and faster to make changes.

Edit: I previously stopped at describing Django as using the MVC concept above, but would like to correct it by saying that in there is a difference from a typical MVC structure as opposed to Django’s MVT structure. I think this explains the concept a lot better!

Models

Models are the foundation for data that drives your website. Every piece of dynamic data has to be defined in a model and stored in the database. Being able to manage how data is structured is quite typical in a framework, and Django does this very well by providing migration functions. Changes to the database level structure can be affected by using the “check”, “makemigrations” and “migrate” commands. This ensures consistency while developing where you can choose to update a column of a table for example by simply running these commands.

Of course, Django’s models can also have additional attributes which is on top of the database layer, making them extremely flexible.

Recap

So just a few key things for me:

  1. In models.py of an app, use following syntax
    class Name(models.Model):
    field = models.TypeField()
  2. Add this to Model Class to display human readable objects in models
    def __str__(self):
    return self.field
  3. To add a model to Django Admin, in admin.py, use following syntax
    from .models import Modelname
    admin.site.register(Modelname)
  4. For date, time and numbers data types (non-string), to allow blank fields, use
    field = models.TypeField(blank=True, null=True)

Having a growth mindset

I've been thinking recently about how I haven't been progressing as much as I would have liked to these past few years. Part of it could simply be attributed to the fact that I've had a pretty eventful few years getting hitched, getting my own place etc. However, a conversation today triggered my memory of how I told myself I would keep growing and keep improving, and I need to make sure I get all the help I can get to do that.

One of the key factors for growth (and I mean the kind of growth that includes the expansion and maturity of your mind and soul) to me, is actually what you constantly feed your mind with. This is one of the reasons I love reading. It expands your thinking and mind, and encourages new ideas, new perspectives. I love it so much, that I quite often hear complaints from the wife that I'm too engrossed in reading, and "neglecting" her (and I assure you I have absolutely no intention of doing so).

The challenge with reading, though, is that once you reach the end of the article / book / text, you are usually stuck with the "what now?" question. For example, block chain is the newest topic that's hot everywhere, and reading up about it is really interesting and insightful, but after you have read and understood it (at least a bit more than before you read it), what do you do now?

To me, I always reflect on how this can impact me. In the case of block chain, the obvious answer to "what now", is "so should I start investing in Bitcoin / Etherium?" Coming to this point is something that I can definitely do fairly consistently, but it's the next step that stumps me quite often.

You see, I have done a lot of introspection, and knowing myself, I always need to talk to someone about these new ideas, and gain further perspective on how / why we can consider pursuing them further. The problem, however, is that you can only have those levels of sharing with someone who has the same level of interests or thinking as you do, and that requires you to have a group of forward thinking, worldview challenging, and matured people around you, consistently interacting and influencing you. It's very true that you should choose who you hang out with because they will either challenge you to grow, or cause you to stagnate in your thinking.

In a way, I seek assurance in any new venture by bouncing my ideas off of others, and it is therefore crucial and essential for me, as a person, to always have people to talk to who can elevate my thinking and perspectives. I need mentors in my life to be able to help me grow in many areas. It is this understanding of myself that leads me to feel fairly frustrated at this point because I feel I don't really have many people like that in my life now, and it is not for the lack of trying.

Just to clarify, I'm not talking about getting someone to tell me step by step what to do, but in any kind of mentoring or discipleship, a lot is imparted simply in the constant interaction because the reinforcement of new ideas happens then. For me personally, I need a certain level of reinforcement to induce an action on my part – again because I understand myself not to be someone who can throw myself into something just like that. A lot of thought needs to go into it first.

So now comes the most difficult part: Actually finding the right people with the mindset and thinking who can, and more importantly, are willing, to build that relationship and connection. It might sound a little selfish, but I'd really like to be able to find someone to encourage me and help me grow. All I can say is that on my part, I think I can also help others grow and sharpen their minds and thinking as well, assuming we can find that common ground.

It would be an investment of time and effort from both sides, but I do believe it is well worth it, if growth is a priority.

Python and Django pointers – Part 1: Using Virtualenv and Context Syntax

So I’ve decided to try (again) to learn how to code a full Web Application in Python using Django as the framework.

The number of false starts in my endeavour is enough to make me discouraged, but I just can’t totally let it go and I seem to keep coming back to it. Somehow, the desire to actually build something is still there, and I’m just hoping that this time I get somewhere. I’m blogging this experience in part to keep myself in check, and to also document some of my learnings so that I can always come back to it.

I would’ve loved to be coding on a MacBook, but I don’t have one and until I reach a stage where it would be more productive for me to get one, it would make more sense for me to continue using the existing Windows based laptops I have.

First, a few things I’ve (re)learned:

  1. Use pip to install virtualenv in Windows Subsystem for Linux (WSL or Windows Bash). Using Virtual Environment to manage Python Environments and versions are essential to making sure your development environment is consistent. It should essentially be part of your workflow.
  2. Context syntax for multiple variables is as follows: { ‘var_name’: ‘value’, ‘var_name2’: var}
  3. Context syntax for dictionary is as follows: {‘dictionary_name’: {‘var_name’: ‘value’}}
  4. Use “django.shortcuts import render” and then “return render(request, ‘template.html’, {‘context’: bar})”

Ok that’s about as far as I got. Considering it’s only a few hours in, with so much more to go, I really needed to put this down so I can make sure I keep going. At least it’s a start.

Next step is Apps and Migrations within a Project.