Think 100 Days of Code is the Ultimate Challenge? Think Again.

A popular challenge that beginner programmers participate in is called 100 Days of Code. Although I never participated in it myself, I see countless tweets with screenshots and progress reports of people sharing bits of apps they made. 100 Days of Code is a great way to keep people in the programmer mindset. It gets them familiar with what it is like to code every day. Still, I wonder if it is the best approach for everyone.  For them, One Game a Month could be a great alternative.

I’m here to propose another approach, one that is gaining popularity in some game development communities. It’s called the One Game a Month challenge. Unlike the 100 Days of Code challenge, its designed to be undertaken for an entire year. Unlike the 100 Days of Code Challenge, One Game a Month allows you to take your time. Not necessarily write code every single day. 

I know what some of you might be thinking. Well, there are a lot of other components that go into a game — you have to make art, and audio, and design decisions. That is naturally all true. Although, I would argue that adding this creative element to your coding adventures actually makes the whole thing a lot more fun. Especially if you’re a creative coder like me. But I don’t want to land a job as a game developer. I want to work at a hip startup disrupting [insert industry here]. I get that too.. but here is the kicker. I am a self taught programmer, and the majority of my portfolio consisted of – you guessed it- games. 

There’s something that gets skipped over a lot when people talk about breaking into the software industry. It’s not necessarily about what type of product you show off. It’s about the coding language you use to make the product. And whether that language is one used by the startup you are applying to. It is very much possible to develop games with Javascript, and Javascript is also one of the most in demand languages. 

Although the original one game a month challenge ended, more people have picked up the mantle to continue the hashtag on Twitter.

So back to my earlier point. One Game a Month gives you a challenge that you can work on more steadily. It also conjures (hopefully) more excitement than making another Reddit or Craiglist clone. There are even communities built around specific game platforms such as Pico-8, which are very generous with sharing their code and resources. Although Pico-8 runs on Lua, it bears a lot of similiarities to Python. Lua still teaches you the important data structures and logic that you need to know to become a programmer. 

I can imagine some of you might still be skeptical. Maybe you want to see some real examples of games that were made with Javascript. I can understand if you’re not yet willing to buy into this “one game a month” thing. Here’s some different games that you can check out, starting from the easiest to the hardest to code:

Alien Attack: This game is good for getting your feet wet with Javascript, and isn’t too complicated. You have to guess the X and Y coordinates of an alien in order to shoot them. The blog post shows all the code involved in making the game.

https://stuyhsdesign.wordpress.com/2019/04/02/alien-attack-game-complete__trashed/

Sliding Tile Game: This game has a lot more Javascript, but is still fairly straightforward in terms of the logic. It’s a game where you have to get 8 tiles that are are scrambled back in the right order. But there is only one empty slot where you can move the tiles at any time. This blog post is extremely thorough in walking you through the game mechanics and how to figure out the winning state.

https://solathecoder.hashnode.dev/build-an-8-puzzle-game-with-pure-javascript-ck0s0k2bs000phjs1relpwc2l

Bunny Defender: Unlike the previous two games, Bunny Defender requires using a Javascript game engine called Phaser. Getting comfortable with a Javascript game engine will make it easier to learn Jframeworks like React or Angular. So, it is a great step forward. It is a mobile game where you have to destroy asteroids trying to destroy a planet of bunny rabbits. You can find some examples of code for this game on Github, but the original tutorial to make the game was on Lynda.com.

https://www.lynda.com/Phaser-tutorials/HTML5-Game-Development-Phaser/163641-2.html

2048 : 2048 is another puzzle game where you use the arrow keys to move all of the pieces on the board in that direction. There are many examples of this game coded with different frameworks like Vue and React. Here are a variety of links below:

Vue: https://github.com/es-repo/vue-exps/tree/master/game2048

React: https://codepen.io/jeffleu/pen/JRzyPZ

Multiplayer Battleship: This is a really advanced game that uses Angular and Typescript. I haven’t used this tutorial myself, but it seems comprehensive and a great fun way to get comfortable with a modern Javascript framework.

https://pusher.com/tutorials/game-angular

If you enjoyed this article, consider following me on Twitter @nadyaprimak or if you need more tips on breaking into the tech industry, you can read my book “Foot in the Door”.

Making Games to Learn Programming with Pico-8

There are a lot of reasons to start making games to learn programming. Games are fun. They are the epitome of creative coding. Unlike to-do apps, games are something you are excited to show to your friend because it is something they will engage with. There is a misconception among some developers that games are difficult to code, and unapproachable to beginner developers. It’s also a great first language in coding for gamers.

I didn’t really get excited about learning to code until I started making games. As a creative coder, games have always been by far the most interesting to me. It’s quite possible I never would have become a software engineer if game development wasn’t one of the applications. As a kid games like Rayman, Zelda, and Donkey Kong filled me with excitement. I remember a feeling of joy when I finished a level or beat a boss that I wanted to shout it from the rooftops. With Pico-8, you will programming simple games, but some of them might remind you of those games from your childhood.

The fact that I have the skills to build games like that myself as an adult fills me with pride. That is because I know the kid I was before would have looked at the adult me with awe. Of course some days I forget about that when I am struggling with a frustrating bug. But at the end of the day it is the main reason I do what I do. We all have an inner child who we want to satisfy, after all.

It is possible today to learn all of the major programming concepts through making games. Although I did not do that myself, I think it would have made my experience much more engaging. My first real foray into programming was in college where I took a few programming classes, and some days it was a real drag.

Pico-8: The Perfect Platform

A year ago a friend showed me a game engine called Pico-8 for making minimalist pixel art games. I initially rolled my eyes at it, because I thought myself sophisticated making games in Unity. I thought that making games with Pico-8 was like advertising to the world that you don’t know what you are doing. Now I couldn’t disagree more.

Every Game is a Pico-8 Tutorial

The first thing that is amazing about Pico-8 is the community. Every one is passionate about learning and sharing, and many members of the community make their own Pico-8 tutorial (s). There is such an incredibly giving and supportive network of folks who participate in the forums. They are also active on Twitter and Discord and beyond. In fact, some users even post Pico-8 code snippets as tweets!

The pico-8 forums are a goldmine

Many software developers believe in open source and sharing their code on GitHub. But in the game development world it’s not so easy to get access to raw code. The AAA world obviously has every line of code concealed behind 10 page NDA agreements. Indie game developers tend to be cautious and perhaps paranoid about people stealing their game.

Thankfully, on Pico-8 that could not be farther from the truth. Every game uploaded to the website allows you to view the code right in the browser, right below the game window. You can copy and paste it right into your own game, no strings attached. That is another reason that makes Pico-8 an exceptionally good option for making games to learn programming.

Simple Coding Language

Pico-8 runs on an easy to understand programming language called Lua. If you’re looking for a Pico-8 tutorial, there are plenty to choose from. In many ways it resembles Python and doesn’t require and pesky semicolons or parentheses all over the place. It reads a lot more like English than a lot of other programming languages do.

Pico-8 also has limitations on the complexity of the logic in the game, which it counts with “tokens.” This forces people to simplify their games and keep the scope reasonable. That is great for beginning programmers. It helps to avoid temptation to code something the long way instead of looking for a solution with fewer lines of code.

Documentation and Tutorials

Programming languages, frameworks, and API’s live and die by their documentation. The quality of the documentation often goes hand in hand with the quality of the community. Since I already wrote about the community, you can probably guess what I will say next.

Just one of the many fanzines you can get on itch.io

I bought a zine on itch.io which breaks down Pico-8 into its different parts. From explaining the user interface walking you through steps to build basic games, it covers a lot of ground. It’s the type of documentation which is not only thorough, but very beginner friendly.

Great Games

You might have similar thoughts to mine when you glance at your first few games on the Pico-8 platform. Certainly they aren’t going to blow you away with their graphics the way that some Unreal Engine games do. But believe it or not, there are some real gems and even best seller games that were made with Pico-8.

The most notable example is Celeste, a critically acclaimed platformer where the original prototype was built with Pico-8 in just four days. Beginning programmers should not expect to make a bestselling game. But it is encouraging to know Pico-8 is a platform where that is possible.

If you enjoyed this article, consider following me on Twitter @nadyaprimak or if you need more tips on breaking into the tech industry, you can read my book “Foot in the Door”.

My Indie Hacker Year In Review

This past year was a big one for me. I got motivated about starting my own business, and making a name for myself as a creative woman coder and indie hacker. This blog was one of the accomplishments from this year. I had to take a few months off to write my book. This year was in many ways the most productive one I’ve had in my career. So let me summarize my indie hacker year in review:

  • Published a book about my journey getting into software development
  • Got that book to #1 most downloaded spot in 3 categories during KDP Select free promotions
  • Started an email list and grew it to 300 subscribers
  • Switched from front end to full stack developer
  • Showed my game at a public event in my city
  • Was waitlisted to show my game at a much larger public event (Super MAGfest)
  • Learned about React, Redux, NodeJS, MySQL, Microservices, Typescript, ES6, and Cypress
  • Grew my Twitter following by 300 users (in the last 2 months!) after letting my account stagnate for several years
  • Had three blog posts featured on the front page of Hackernoon

One of my proudest accomplishments of the year

I didn’t start 2019 with a concrete list of goals. All I knew was that I wanted to do something that involved both being creative and coding. But I can say for sure I did not expect to accomplish this much a year ago. I was feeling the entrepreneurial itch and I knew I wanted to create and sell something. That was pretty much it. I knew that in order for something to sell successfully, I would need some kind of platform.

Blog

That was where my blog came into play. The thing is, I blogged before and always ran into the same problem. My blog wasn’t niche enough, at least that was what other people kept telling me.

It wasn’t until I read a book about multi-passionate people and how they can be true to themselves. I decided launching a blog might be a possibility after all. I realized that I was interested in game development, web development, creative expression, and indie hacking. I thought I could merge all of those interests into a creative coding blog.

Originally the blog was called “Multimedia Minds” and it wasn’t connected to my personal website. Over time I became dissatisfied with the title and thought that merging it with my website made more sense. I already branded myself as a combination of UI and game development, though I think creative coder is much easier to understand and doesn’t involve having to explain to myriad of skills involved in being a UI developer.

Later on I realized could use my blog as a funnel to interest people in my book. Thus far I had written a wide range of posts I thought I ought to focus more for a while on the tech industry. Then my blog would rank higher for programming related content. So for a few months now I’ve been blogging about different cultural aspects about working as a programmer. From attitudes about work-life balance to how engineers get promoted and what kind of problems programmers can face in the workplace.

Book

I wish I had created more hype and setup a preorder page for my book before I released my book. Despite some of my mistakes I’m still satisfied with the progress I made. I’ve learned a lot about Amazon ranking and keywords, as well as how to run giveaways to drum up more interest. I posted my book to a lot of directories that share free books. I was running promotions where I would give my book away for a limited time. That helped with getting downloads. Now I’m very happy to see my book on the first page of results for my focus keyword.

I started growing my e-mail list as part of my planning ahead for when I was going to sell a product. For the first few weeks I actually grew it the most by giving my book away for free. That was, before I enrolled it in the KDP Select program. It helped to get my e-mail list started but after a few weeks interest seemed to dwindle. I wondered if it made more sense to try to sell my book. It’s pretty funny to think that if I hadn’t made that jump I would never have know how successful my book could be. Looking back on that decision really puts things in perspective for me.

Expanding Reach

Twitter was a good place that I knew could work as a funnel for my book as well as a way to extend my reach. I had a Twitter account for years, but it never really took off and I decided to reinvestigate why that might be. I decided to try out two services that I discovered through Product Hunt. They help to schedule tweets in advance by creating content libraries that can cycle through different types of content that you want to share. This has been a lifesaver for me, because its hard to be constantly active on a platform that updates so quickly. The other tool focuses on following people. It chooses people to follow based on the hashtags that they use and the type of content they write about. I don’t expect to use that tool forever, but it’s connected me with a lot of cool new people. It has broken me out of the rut that my Twitter account was in for so long.

My post about UI Developers on Hackernoon’s homepage

I realized that I could get also more reach on my posts if I shared them on other coding related websites. Initially I contributed to Code like a Girl, but later I got ambitious and decided to submit some articles to Hackernoon. Not only did they accept my posts, but they actually featured several of them on the home page. This was really a big boost for me. I no longer doubt my writing skills or that I have something worthwhile to say. So that’s probably one of the biggest wins I had in 2019.

Game Development

That was a lot of talk about my book and my blog. Obviously writing is a big part of my life, but as a multi-passionate person it is far from the only part. The year in game development was not as productive as some of my past years in terms of actually making games. But it was by far the most productive in terms of finding my game developer community. Actually showing my games to real people and getting connected. After years of fear I take the risk and submit my game to some local events. The first one was at a library in my city. It filled me with so much energy and joy. I showed a game that I had worked on by myself, that had very little exposure. People really responded to it and were impressed that I made it by myself, which meant the world to me.

Super Magfest is a huge convention that I love to attend

The next step was to submit my game to bigger events. The biggest event in my area is called Super MAGfest (Music and Games Festival). I figured if my game was accepted to the indie showcase there, I could really feel like a professional. Unfortunately, it was not accepted BUT it was waitlisted which was still a big motivator for me. Especially because the games I submitted were not ones I had toiled over for years. In fact, the one that was waitlisted had taken me less time than the other one I submitted (which was rejected outright).

Day Job

There is still one area of my life I haven’t covered, which is my actual day job. I hope one day to be a full time indie hacker making interesting apps or games for people to enjoy. There is still a lot I’m learning from the startup where I’m currently working. This startup trains everyone as a full stack developer, so I am learning a lot about back end technologies that I did not know. It’s exciting because it fills that gap in my knowledge and means I can really become a one woman development team. It is also a little bit overwhelming considering all the other things I have been working on this year.

So that was a really long post. I wasn’t intending for my indie hacker year in review to be this long but when I started thinking about everything that happened this year, its not surprising. I was going to also write about my goals for 2020 in this post. But considering the length it is already, I think it’s best that I save it for next week. Overall I’m pretty happy with what I have accomplished, and I think I took some really important steps toward actually becoming an entrepreneur. Selling my first product, gaining traction on my blog, and building a social media following are all steps that I feel I have taken. That being said, I know there is still a long road ahead. As a quick preview: building my email list, finding my tribe, and creating a community are all goals I have.

If you enjoyed this article, consider following me on Twitter @nadyaprimak or if you need more tips on breaking into the tech industry, you can read my book “Foot in the Door”.

Working in Tech: Toxic Cultures

I have a confession to make: I was on Twitter over the winter holidays when I should have been spending time with my family. What was the trending topic that caught my eye, you might ask? Last minute Christmas gift ideas? Pictures of pets in Santa hats? No, but I wish I could say it was one of those things. Instead, it was about the toxic workaholism that some folks working in tech idolize.

It started with this:

Pretty harmless, right? Of course tech twitter wasn’t going to let this stand without controversy.

I’m not 100% sure if these were the first tweets to start off the debate about work life balance, but they were major players. The fact that this debate sprung up during the winter holidays. The only significant chunk of time off most Americans get, already says a lot about the toxic work culture we have in this country.

What makes it worse is that people working in tech elevate this capitalist propaganda, glorifying workaholic ism. I’ve encountered many people in the tech industry who share this attitude. They are the last ones to leave the office, and they judge you if you don’t work the standard 9-5 hours. I worked at one company where my coworker was asked by his boss to talk to me about arriving to work earlier. He believed that working later hours was a privilege only seasoned developers ought to have.

At another company I worked at we had an AMA with the CEO and someone asked about working from home. The CEO’s response was “sure you can work from home, but you won’t be working for this company anymore.” Its so common for developers to tout all the unorthodox benefits that working in tech can offer. Often the first benefit that is discussed is work from home, but there are many companies where that is not allowed.

Of course, the above examples are far from the worst ones. In game development working 80+ hour weeks is not uncommon, especially during crunch. It is considered such a privilege to get to work on creative coding projects that developers are expected to be thankful regardless of the crunch. It’s also not uncommon in early stage startups. Consulting is another area where workaholics runs rampant. I had a stint at a consulting company that didn’t last long because I saw my coworkers burning out. They were actually suffering physical symptoms for months on end.

There are plenty of companies who abuse their engineers like I described above. They can get away with this abuse a lot more easily when they brainwash engineers. Brainwash them to perpetuate the belief that working weekends and nights is the way to a successful career.

Some engineers believe that they have to work extra long hours because they are making more money than people in other industries. However engineers are not like lawyers. They do not charge their clients by the hour, so working those long hours does not actual equal more pay. Certainly it’s not fair that teachers and social workers make way less money than software engineers. But working longer hours out of guilt does not do anything to make the situation less fair. It also won’t make the company you are working at appreciate you more. If anything, they will just start taking your extra hard work for granted. But don’t take my word for it… here are some more tweets that say it a lot better:

I’m going to end my post with this tweet from the creator of Ruby on Rails. Here he responds to someone who agreed with Ryan Selkis about working long hours. Except he took it even farther by saying workaholic ism = changing the world. If anything exemplifies the toxicity that is seen when working in tech, it is the hot take of Auren Hoffman.

If you enjoyed this article, consider following me on Twitter @nadyaprimak or if you need more tips on breaking into the tech industry, you can read my book “Foot in the Door”.

Bad Engineers Who Think They are Geniuses

People tend to glorify confidence. In interviews, we tend to think more of the person who expresses themselves loud and bold, with their held head high. This tendency is especially true among Americans, the most obvious evidence being the current President of the United States, Donald Trump. After all, most psychologists agree he is profoundly full of himself. Despite his failures in business and real estate, he continues to believe he is the smartest man on Earth. Unfortunately people like Trump get promoted and the same thing happens with bad engineers. 

Official portrait of President Donald J. Trump, Friday, October 6, 2017. country (Official White House photo by Shealah Craighead) – Our Narcissist in Chief

I wish that the tendency didn’t extend beyond politics, but it does. Entitled, loud, and opinionated engineers get promoted faster than their more subdued peers, regardless of actual skill level. Managers without technical knowledge have no other way to evaluate the skills of these developers. So they end up judging engineers the same way they judge managers.

I’ve seen this first hand in the six different programming jobs I’ve had thus far. It was difficult for me to gain any significant respect in the companies I worked at because I was not outspoken. Being a creative coder has also led to instances where I was underestimated, because sadly some developers still look down on designers and believe that their work is less important. Over the years I’ve learned that I need to open my mouth more and advocate for myself. I’ve gotten better at it, but it still bothers me that silence and creative leanings is mistaken for a lack of competence.

Here’s something I want any manager reading this right now to consider. What if the quiet engineers are not incompetent, or shy, or lack social skills? What if they are just being careful to speak up because they want to verify accuracy? What if they feel intimidated?

When you are starting out as a developer, especially if you are underrepresented in tech, it’s difficult to speak up about things. Even if you know someone is saying something patently false, it’s easy to hesitate about correcting another developer. They might get angry and hold a grudge against you, who knows? Getting the confidence to confront another developer can take months, even years. Some developers never gain that confidence at all, even if they are competent.

Lots of developers have imposter syndrome, especially when they are starting out. They don’t always confront the senior engineers, even if they know they are wrong. (image source)

I’ve had this happen on a number of occasions. The most memorable was when I was discussing a UX issue with a backend developer who tended to dominate all of the conversations. Despite knowing nothing about UX, this developer consistently argued with me about every choice I advocated for. When I pointed to research and specific examples from my classes, this developer would fire back. He argued he saw the UX choice in interfaces that he had personally used (like JIRA – yes, JIRA). It became quite heated on several occasions.

The promotion of loud engineers is a problem because the more those loudmouths get promoted, the more people are afraid to challenge them. Since they were prone to interrupting other developers even before they were promoted, the problem gets a lot worse when their ego grows.

The other problem with promoting such engineers is that it validates a certain communication style. That is one of blurting out the first thing you believe to be correct, without proper investigation. Over confident developers are notorious for jumping to conclusions. If your team sees that the loudmouth engineers are the ones who get promoted, they are more likely to adopt this communication style themselves. Is it helpful to blurt out the first idea that comes to your head? In brainstorming situations, sure. But when you are trying to fix a difficult bug it can derail the problem solving and send the team down the wrong path.

To be clear, I don’t want to sound like I am demonizing anyone who leans toward the chattier side and likes to talk. A team of engineers that over communicate is better than the opposite. The problem lies specifically in the situation where one overzealous and egotistic engineer drowns out the other voices on the team.

Now that the new year has started, it’s the perfect time for companies to reevaluate their promotion strategies and consider fresh approaches. Sometimes quiter developers need a little bit more encouragement. They might not be sure if they can train people or be confident enough to lead a team. That doesn’t mean that they would automatically make a worse leader than the engineer who is always talking.

Is it possible the loud developer who thinks they are a genius will leave the company if they aren’t promoted? Certainly. But the rest of the developers will be grateful, and happier at work. They are more likely to go to the modest leader for questions, and learn more. It will also be easier for them to explain what they are struggling with without feeling stupid.

Maybe you believe your loud software engineer is the next Elon Musk (image source)

There’s one more thing. Maybe you are reading this and going: okay, but what if my loudest engineer really IS a genius? Maybe they have a PhD in physics, or four masters degrees, or they wrote their own game engine and sold it to Bethesda. Even if that is the case, consider deeply if their personality is really good for leadership.

Ask the following questions. Are they the kind of person who is willing to delegate tasks, or do they think they can do everything themselves? Might they become a bottleneck in the future if given too much control? Are they actually good at explaining technical concepts to juniors or do they like to overcomplicate things to make themselves sound smarter?

I know not everyone reading this is going to take my advice. Maybe it’s not practical, and there are too many other problems to deal with. My goal with this article was to highlight why these patterns in promotion are not as great as they might seem at first. Even if only a small fraction reading this actually change their promotion practices, I will feel like it was worth it to write this. As a developer myself, I know that having a positive relationships with my manager and lead engineer makes a world of difference.

If you enjoyed this article, consider following me on Twitter @nadyaprimak or if you need more tips on breaking into the tech industry, you can read my book “Foot in the Door”.