Photo of a distressed-looking man in a dress shirt and blazer standing in chest-high waves in the ocean

Where I’ve Been

Since quitting the 100 Days of Code challenge, I have realized the value in adhering to such a strict schedule of not only coding daily, but writing about it. In a way, I considered that a job, and one that I wanted to keep, so I kept showing up (because my goal was to follow that path to an actual job doing what I really wanted to do). But I found the rigor of it to be in conflict with the other things going on in my life; I began focusing on my perceived future and quit living in the now, which slowly started leading me to neglect my responsibilities. I decided that I needed to slow down and readjust my focus for the sake of my mental health as well as those who I love.

I am a Dallas transplant living in Houston with my girlfriend and our baby. I work in the legal field and have absolutely no passion for what I do as a day job. My relationship is also still pretty new, all things considered, and when I landed here in a strange city I’d only visited maybe once or twice before uprooting and permanently moving here, I found myself unemployed. It took me three months to find a job, and I drained my savings in the process. When I found a job, it was a job I hated. I know that’s a first-world kind of thing to complain about, because how many of us can truly say we love what we do for a living? I know you’re out there, but I suspect you’re in the minority.

So I found myself in a new situation, in a new relationship, with a new kid, all of us crammed into an apartment that would’ve suited me alone just fine – but with another adult, a baby, and two dogs, there wasn’t a whole lot of room to breathe. Since the relationship was also pretty new, we experienced a fair share of conflict in the process of living closely with one another and figuring out how to be together harmoniously without wearing each other out. For most of my life I’ve dealt with a waxing and waning type of mild depression which I didn’t identify until my late teens, but in retrospect it was there for much longer than I could put a label on it. The totality of the situation I found myself in caused me to fall back into depression. In the midst of my struggle with coming to terms with everything, I found solace in the logical black-and-white nature of coding. I had control over everything, and if something went wrong it was entirely my fault and within my means to fix it. Even when I’m not depressed, this is something that appeals to me very much about coding. Controlling a computer to do what you want is something that has always had a magical sort of appeal to me.

Anyway, before I go too much into my woes, I’ll sum it up by saying that I became absorbed in my mission to become a professional coder. Podcasts, articles, videos, and nearly everything else I did in my free time was aimed at my end goal of being a coder for a living. The problem is that it’s not possible to be a good father and boyfriend and dog caretaker while simultaneously staring at your computer with your head wrapped around some abstract concept (I know this, because I tried). My personal life began to suffer even more in the midst of my obsession with my career goal, so I pulled back and began focusing on the people and things that matter most to me right now. This meant less time spent coding and learning new concepts, and essentially no time for me to log my progress daily (because, as you might be able to glean from this post, I am a long-winded person with a weakness for my own tangents that usually never make it back to center). And since the whole point of the 100 Days challenge is literally to do it daily, I decided that it would be disingenuous and maybe even a little insulting to those who were really pulling off 100-plus day streaks to keep taking part in it.

I told myself I’d still post about my progress for the reflective value inherent in thinking back on your day and putting into words what you learned, but without the compulsion to do it every day, I found myself lacking the momentum to even start a post. With my coding time reduced, I opted instead to use it for actual coding and learning about coding rather than sitting and writing about it. But I did continue my journey: I continued reading, listening, and doing, almost daily, though I didn’t verbalize my progress as adamantly as I’d been doing before.

At a certain point, I hit burnout status. I didn’t give up, but I had pull back from everything and give myself some breathing room lest I get so frustrated that I give up altogether. I knew that to be a distinct possibility, because I’ve been down that road on more than one occasion. The urge to be a programmer is not a new one to me. I’ve been chasing this dream since I was a kid, with varying degrees of dedication. The difference is that this time, I really mean it. It’s what I want to do. No matter how many walls I hit or how slowly it feels my progress is coming, underneath it all I know that I want to make my living working with computers and making them work for me.

I started allowing myself leisure time in my free time rather than spending it all working (because, as much as I love to learn, learning is still work). My relationship with my girlfriend slowly started to improve, I found myself climbing back out of depression, and I worked to be more present when raising my kid, to really notice the beautiful little moments in his daily progression as a human, moments that I would not be able to get back if they passed me by while I had my back turned, engrossed in some Python program or web development tutorial.

I write this now from the comfort of our new home, which my girlfriend did almost all of the work in securing for us. It’s more than double the size of our apartment. Our baby has a room of his own now, and we have a room of our own, and my girlfriend has an office of her own from which she can work her remote night shift. I even have my own little area to work in undisturbed. The process of packing up the apartment, moving everything, unloading it, finding a new place for it in our new home, and generally balancing all the responsibilities that come with home ownership has been exhausting and required almost every free moment we’ve been able to spare for the past month or two. Through it all, I haven’t given up on my dream, but I’ve had to focus even harder on the immediate now rather than a nebulous future vision of where I want to be, though who the hell knows when I’ll actually make it there?

On top of all that, I quit the job I was miserable (and frankly, pretty bad) at and began working at a new law firm. It’s more in line with my experience, but I still don’t really enjoy it. I get by well enough, and the pay is good enough, and health care is actually provided, but the first month was unbelievably stressful. I’m not exaggerating when I say that they expected me to do the work of two people when I started; I did my very best, thinking that if I just put my mind to it and worked hard enough that I could find a way to succeed, but I quickly had to put my foot down and tell them that no matter how much experience I have, no matter how fast I type or how good I am with technology, there was no way I could get the work done short of pulling 70-hour weeks (on salary, with no overtime). So they gave half of my work to another employee, which helped greatly, and installed a piece of software on my computer which made generating batches of documents unbelievably faster than the previous process I had to follow (saving me hours of work a week), and I find myself starting to level out again.

I don’t hate my job, but I know I am in the wrong line of work. I don’t have any real interest in or passion for the law, but it’s a path I’ve been following for over half a decade since I landed my first legal assistant gig simply because it’s something I can do and it’s what I know. But this is not what I want to do until I retire, and I think about that almost every day (when I have the luxury of finding time to think about such extraneous things).

So things were bad, then they got worse, and now they’re steadily improving and approaching what I’d consider to be pretty great. I know without a doubt where I want to end up in my future career, even if I’m not currently there (or on a direct track with my present line of employment). I see the way forward. It’s going to take a lot of work and, most likely, a lot of time. But if it takes another year or two for me to secure the skills necessary to build up a portfolio, line up a job interview, and land the gig, so be it. That’s just the price of admission, and I’m willing to pay it to end up where I truly want to be.

But I’ve got to be a dad and a boyfriend first. The coding and dream career aren’t going anywhere. I have the desire and the will to make it happen, but maybe it’s better after all not to rush it.

I’ll check back in in a week or ten. 😉

Advertisements
Vue.js logo

100 Days of Code, Day 2: Vue, me, and PHP

Day 2: December 25, 2017, Monday

Today’s Progress

I’m part of a Discord group of developers where people talk about coding things and collaborate on one another’s projects. I messaged asking if anyone needed help with JavaScript stuff, and one of the members responded with a project in PHP that he needs to convert to JS, using the Vue framework. I admittedly have almost no experience with that framework, but I decided I’d give it a shot anyway.

In the process of trying out Vue, I decided to also give JSFiddle (rather than CodePen) a try. I’ve seen it mentioned quite a bit, but never really used it. As it turns out, I much prefer it. Simpler, better interface, more responsive. As of now, it’ll be my default web-based editor when I’m working on little ideas that don’t warrant a full repo or directory on my local machine. I thought Emmet was one of CodePen’s killer features, but JSF features it, too. For how I use it, I just think CodePen is a bit much.

The PHP to JS conversion project is not the most complex thing I’ve ever seen, but it’s a solid intermediate level of coding. I’m familiar with PHP, but not intimately so, especially when it comes to PHP authentication. In order to work on this project, I cloned a Git repo to my machine and started digging through the code. I’ve cloned my own projects before, and a few repos owned by others, but those were usually for the purpose of having my own copy rather than modifying the code to check back in via pull request.

The experience of working with Vue has, so far, been a pleasure for me. I’ve had a minimal amount of experience working with React and Angular; it seems most comparable to Angular upon initial evaluation, and I just enjoy the process of writing with it better than React. That said, the extent of what I’ve written so far has strictly been limited to their demo examples (with some modifications for experimentation purposes). I’m especially interested in the Vue v-model attribute, which allows for two-way data binding similar to Angular. For example, you could have a text input field which is echoed elsewhere on the page as you type rather than upon pressing submit. Very cool.

When thinking about potentially having multiple clients with multiple WordPress installations to periodically update, I started thinking about how to unify them all on one page. This led me to the ManageWP product, which in turn led me to the WordPress CLI (Command Line Interface) utility. I haven’t spent much time with it, but I can envision incorporating it into my workflow in the near future.

Thoughts

I like Vue, so far, but I’ve got a lot of reading and practice to do before I incorporate it into a legit app. One step at a time. PS: Merry Christmas, if you’re into that!

Link(s) to Work

Still none yet, but soon.

Close-up photo of Nintendo Gamecube reset button

100 Days of Code, Day 1: Hitting the Reset Button

Sometimes you need to unwind and hit reset.

I’ve been feeling the creeping sensation of burnout lately. For months, I’ve been spending the majority of my waking hours listening to podcasts, reading articles and tutorials, watching videos, taking courses, talking about, and thinking about coding – when I wasn’t actually coding. I’ve learned an immense amount and feel pretty confident in my abilities, but I haven’t allowed myself much breathing room. I felt the burnout coming, and I knew I needed to give my mind a rest.

This was a little bit of a bummer because I missed over a week of 100 Days of Code logs, but I’ve been sporadically missing logs and generally playing by my own rules rather than Alex Kallaway’s official version. I kept the count going because the challenge often really pushed me to sit down and code even on days when I just wanted to be lazy and mindless. I figured, once I’d unwound a little and rebooted my mind, I’d come back and resume the 100 Days challenge where I’d left off (over 80 days in).

But I felt disconnected from my last update (because I’d done quite a bit worth writing about in the meantime, whether I’d been logging it or not), and the time gap was so large that I decided to do what I’d been thinking about doing anyway – switch back to my WordPress blog for logging my progress – and restart the challenge on this platform rather than a Markdown file on Github.

So without further ado, here’s my log for the 100 Days of Code, try number two, day number one.

Day 1: December 21, 2017, Thursday

Today’s Progress

There’s a lot I’ve done that I haven’t logged about, and I don’t particularly feel like backtracking to catalog it all (which demonstrates the value in logging daily/more regularly), so I’ll just start with my most recent updates.

I’m currently focusing on learning MySQL. I tweeted about this and received a response from a couple of followers suggesting that I should opt for another database, namely PostgreSQL. I definitely want to learn it, especially after reading a comparison of the two databases’ features, but I’m currently working in WordPress, which is based on MySQL. Even if I end up relying on another database in the future, I do believe that having MySQL skills in my tool kit will benefit me.

On a related note: after much deliberation on the matter, I’ve decided to base my portfolio in WordPress. I feel kind of like a traitor, since I’m currently learning how to code in scratch HTML/CSS/JS, but past experience with the platform leads me to believe it’ll be faster and easier to get running and maintain, even if I intend on hand-coding websites for clients otherwise. Shouldn’t I  be showing off the kind of work I’ll actually be doing? Well, maybe. But in the real world, most clients won’t be inspecting my source code to detect whether my content is WordPress-based. The most important things, I believe, are presentation and results. Furthermore, there will likely be many clients for whom WordPress is a more suitable option than a hand-coded site which I’ll have to update for them whenever a change needs to be made (though I’ll still need to check in periodically to update WordPress and fix any issues caused by potentially breaking changes, one of the clear downsides of the platform).

I may, at some point, decide to overhaul my site by hand. For right now, I just need something that’s live. I want to have some business cards printed, but I first need to have a website I can put on ’em. WordPress is going to help me achieve that goal much more quickly, even if it makes me feel like a phony.

Those who have been following my logs may remember me talking about my first potential client in half a decade (a friend who saw me cursorily post on Facebook that I’m back in the development game). I consulted with her via phone, sent a quote for a redesign, and then she notified me that her company had decided to put the project on hold. I was a bit dismayed, and I wondered if my pricing had something to do with it. I quoted a much higher price than I ever have before, but I was previously quoting such a low rate that I was lucky to scrape by at minimum wage after taxes and other expenses were taken into account. I felt that the price I presented was both fair and lower than most other developers/agencies (outside of Upwork) would offer. She actually admitted to me that the quotes they’d received were in the tens of thousands of dollars, which gave me confidence when I presented my own.

Earlier this week, she emailed me again to get a quote on building a new site for another branch of her organization. We had a brief phone call yesterday to talk about some of the details, and I’m waiting on her to get back to me with information she promised to provide to aid in generating my estimate. She also said that one of her coworkers may be contacting me separately for a personal website. I don’t want to get my hopes up, but this is a very promising lead (two, actually). I’ll keep you guys posted.

Thoughts

It’s good to be back logging, especially on WordPress. The process is still a pain in my ass, because it’s time taken away from doing actual coding/research stuff. But I do believe in the value of reflecting on what I’ve done for my personal benefit, and I’m hopeful that the people who read my logs will be able to take something away from them (assuming said readers are on the same journey into developerhood that I’m on). Soon I’ll return my focus to freeCodeCamp to finish styling my weather app for submission. I can’t wait to finish up that curriculum, close the chapter, and get my front end certification.

Link(s) to Work

None yet, but soon.

Breaking Linux and returning to Windows

For the past couple of months, I’ve been using Ubuntu Linux. I love it. I’ve been using Windows almost exclusively since 3.1, but I’ve found that Ubuntu 16.04 LTS is amazingly good for development purposes, and so good that I’ve been using it for everything else, too (even though I have my machine set up to dual boot with Windows 10).

I decided I’d try switching from the default Unity GUI to GNOME, which is older and preferred by quite a few longtime Linux users. I used it for a few days and just didn’t get a good feeling from it, so I tried switching back…but I did something wrong and am currently unable to access my Linux installation via GUI (and when I use recovery mode to login as root, it keeps automatically running and returning to the recovery menu). I’m sure I can fix it with enough time and energy, but for the time being I am back on Windows. Oh well. It’s not as fast or convenient, but it works well enough. I already find myself missing Linux’s terminal.

I haven’t been blogging as frequently lately, but I haven’t fallen off on programming. Save for about a week where I was temporarily dealing with Hurricane Harvey (which, thankfully, I made it out of without loss of life or property), I’ve still been working on something code-related every day. I’m about 26 days into the 100 Days of Code challenge as of writing this post, and that’s the primary reason why I haven’t updated here more.

Between logging my progress for that project (which you can read here), actual coding, reading, raising a baby, applying for jobs, interviewing for jobs (not code-related, at least not yet), and doing everything else required of me in the Real World™, it’s hard for me to get around to posting here as often. Speaking of which, I’ve got a third interview today with a law firm (following a positive phone interview and in-person with the firm’s owner and associate attorney). After three months of unemployment and a diligent effort to get a job in an unfamiliar city, I’m hopeful that this will be my way back into the work force. The good part about it is I’ll no longer be stressed out about having no income; the bad is that I’ll have less time overall to devote to advancing my skills, but I’ll still try to squeeze in at least an hour a day. I’ve developed a pretty good habit of near-daily learning and I wish to keep that going so I can achieve my ultimate goal of breaking into development as a professional.

I’ll write a post in the near future detailing what I’ve done on my first game, Chicken vs. Egg!, but in the meantime you can catch up via my 100 Days log or try it out yourself via Github. It’s bare bones, but as it stands it’s an actual playable game. I’m pretty proud of my progress so far, but there’s still quite a lot of stuff I’d like to improve upon.

I’ve got to go get ready for my interview now, but I’ll be back with more updates soon!

P.S. Fun fact: WordPress just informed me that this is my 10th post!

Chicken vs. Egg! v0.1: Now with MORE movement!

It’s been several days since my last post, and I’ve been up to quite a bit – I don’t think I can cover it all in this post, but I’ll hit on the main points.

I took a little break from Chicken vs. Egg! to return to a website I first discovered probably a decade back when I was first learning Python – it’s called Python Challenge, and it ate up a lot of my coding time since I last posted. It’s a very basic-looking website with levels you can only clear by implementing a programming solution – for example, one level has a picture which links to another page when you click it. That page contains a picture which links to yet another page, and so on a couple hundred pages deep until you finally reach the solution. Sure, you could spend a decent chunk of time clicking through manually – but the idea here is to learn how to load up the pages via a script and click through automatically so the program does all the work for you. It truly is challenging, and I enjoy it quite a bit. That’s only one example; it gets steadily more challenging as you progress. I highly recommend it if you’re looking to increase your working knowledge of Python when applied to semi-real problems.

chicken-movement-demo-3

I ended up falling asleep early a few nights ago and broke my 100 Days of Code streak, but I got right back to it (here’s a link to day 15). Well, I’ll clarify – I’ve still been working on code every day, but I forgot to log and upload yesterday and didn’t feel like backtracking, so I just decided to write it off as a free day. Today I made some good progress on CvE! – I started refactoring the code into much-needed OOP format, starting with creating a class for the Chicken. I still need to handle the Egg, but now that I’ve got the Chicken class working, I think it’ll be a piece of cake.

Once I merged the branch I’d made for writing the chicken OOP code, I moved on to adding vertical movement for the chicken, which I was able to implement in no time (I’ve added a new GIF for your viewing pleasure). The program is still a baby, but it’s really starting to take shape. I decided to go ahead and call it v0.1 – the first program I’ve ever tagged with a version number! It’s something I want to get in the habit of doing.

In addition to learning how to tag the version on git, I also learned how to reset to a previous commit, how to compare code at various points (rather than the currently staged version vs. the previous commit), I’ve been getting better at branching regularly, I learned how to push a branch to Github (which I didn’t realize hadn’t been happening automatically), and I learned how to correct a prior commit message. I’m pretty amazed at the depth of this tool, and equally amazed that it’s available for free. It’s becoming less scary to me as it becomes less and less of an unknown quantity.

Tonight I finished refactoring my code to make the Egg class and an eggs array, where I should be able to store all of my eggs (once I have multiple flying across the screen at any given point). Next, I plan to work on collision detection, random generation of the eggs, and getting them to fly across the screen (perhaps with rotation). I also want something more than just a black background, but I’ll save that for the polish phase. I’ll check back within a few days to let you guys know how it’s going. In the meantime, you can check out the repo on Github here, if you’d like.

Chicken vs. Egg!: Now with movement!

The latest evolution of Chicken vs Egg! (yes, the exclamation point is part of the title!) sees the game’s protagonist – the humble chicken – gaining the ability to move about in two directions. (You can find CvE on Github here)[https://github.com/jaredcaraway/chicken-vs-egg].

I’m pretty excited about this development, because it works pretty well. I’ve detailed the latest changes in my 100 Days of Code log for today, which you can read here. Since I’ve got a separate branch aimed at setting it up in OOP mode, I went ahead and removed the unused classes from this branch, which I’d set up with the intent of getting the chicken to change direction according to corresponding arrow key presses). In my last blog post, I talked about a very simple text-based demo I wrote to practice some basic OOP concepts using dogs as my gimmick. My main goal at present is to just get this thing working, but I may find in the near future that I need to go ahead and refactor my code to provide for OOP functionality. For now, I think I’ll proceed procedurally.chicken-movement-demo

If I’m being honest, the main purpose of this post was to show you a GIF of my chicken in action (which I created using a nifty Linux tool I discovered tonight called Peek; couldn’t have been simpler to use). And so here you are: here’s my chicken in action, neatly constrained by the bounds of the window within which it lives.

Upcoming features I hope to implement soon include (but are not limited to):

  • Up/down movement
  • Sprite animation
  • Basic egg movement in a straight horizontal or vertical line from one offscreen side to the other
    • Make those eggs rotate, eventually
  • Collision detection
  • Background
  • Onscreen counter
  • High score functionality
  • Power-ups

As a side note, I wanted to say how much I appreciate you guys checking in to read my posts. I’d honestly be doing this anyway even without an audience, but knowing that I’ve got people out there who are actually interested in what I’m saying is a great motivator to keep doing it. It keeps me accountable. My audience is still relatively small, but it’s been growing steadily. So thanks, my dear reader friends (if you’re reading this right now, I’m talking to YOU)!

I’ll be back soon, probably with more GIF goodness.

 

Further experimentation in Python and OOP

While there are no notable updates regarding my first game, Chicken vs. Egg, I did write a new Python script today in an effort to hone some of the skills I’ll need to use as I move forward.

It’s called “Dogs,” and it serves no real purpose aside from being a teaching tool for myself. It’s a command line-based demo which works like this:

  1. It prompts you to enter a dog breed and a name
  2. It creates an object instance of the Dog class using the provided parameters and adds it to a list of dogs you’ve created during the program
  3. A menu prompts you to list all created dogs, to create another dog, or quit

You can check it out on Github if you’d like. There’s no real-world application for this program that I can tell, but it was a valuable learning experience that helped me work through a problem I encountered when thinking about the CvE source: how to create an undefined number of objects without explicitly declaring a variable in which to store each one. What I mean is, using the Dogs program as an example, I wanted to find out how to avoid doing something like dog1 = Dog(“collie”, “Sparky”) for each dog I wanted to create.

It turns out that the solution is to create a list and append a new class instance to the list each time it’s created. This will be indispensable as I develop CvE – I have no idea how many different eggs I’ll need to create for any given game, so it would be impossible for me to manually instantiate the various Egg objects. However, if I can populate them into a list as they’re created, I can easily cycle through and update their positions, check for collision, check when they’ve gone offscreen, and remove them once they are no longer needed.

I’ve been missing JavaScript these past few days, but I think it’s best for me to focus on one thing at a time. I’ve made some good progress in JavaScript in the past month or so, and now my goal is to make a game. I do want to continue my journey toward JS mastery, but I think the path of least resistance for my current goal will be Python using Pygame. If I decide to create another game after that, there’s a really cool JavaScript game framework called Phaser which I’m interested in trying out; it would allow me to make a browser-based game using HTML5’s canvas, but I think it would also require a lot more overhead to learn.

Before I wrap up the post, I’d like to add that I’m 10% of the way through my 100 Days of Code challenge (I just posted the log for day 10 here). I’ve still got a long way to go, but I’m encouraged that I’ve made it as far as I have already.