How I Learned to Develop

I first programmed in 2009.  I needed some elective credits and I enjoy computers so computer science 121 looked fun.  It was great.  The professor was good, but not great.  what was great was how quickly he got us into doing stuff.  We started not with java, python or any of these languages, but with Scratch.  Scratch is a MIT visual click and drag programming engine.  If you know nothing about programming, I would advise starting there.  It will allow you to focus on the important part of programming, the logic. It also allows you to in minutes get something graphically out there.  That short concept to reality timeframe helps you understand the logic you’re messing with.  It also takes away all sorts of worries like, semicolons.  

We had to create a project using Scratch, yeah I made a space ship which blasted out asteroids.  I maxing out Scratch’s capabilities quite quickly.  For one, it couldn't pragmatically generate objects, and two the graphical power wasn't there to handle all the objects I wanted to display.  This was my first taste of needing to cut back my scope.  It was in an environment where I had the time and resources, but my environment couldn't handle it. This is opposite to pretty much all my other experiences with scope.  Thankful we moved onto java.  We had projects and I started to build my library of useful tools, mostly dealing with random generation and string functions.  It took me another 18 months before I was able to recreate the asteroid game in Java. But in order recreate that Scratch game I had to learn about multithreading, and sterilization.  Multi-threading is how you can have parallel path doing logic at the "same" time (parallel processing is where they trade off using the processor, but still only use one processor). Sterilizations is needed to save and retrieve data.  JFrames and such for the UI, if you were wondering.  I've since lost the files to that game, and I recently opened my library of java classes and half of them won't compile because of deprecations in Java.  I’ve switch over to focusing on iOS for a while now.  Even as I am writing about this I am suddenly remembering more and more applets and projects I did with java.  I had completely forgot I even started a 2D turn based game.  I didn't get it to work, but I was attempting and made a good deal of progress on my own 2D node based animation game engine.  I was trying to create a program to dynamically change the positions of limbs on a 2D character.  I didn't even realize until this very moment that I was attempting to make a game engine.  I've recently been watching GDC conference videos on YouTube and thinking I could never make a game engine.  I was doing it 5 years ago, and I didn't even realize I was doing it. I just knew I needed to solve this problem for my idea. I didn't have to tools or resources to buy the tools. But I had 3-4 hours a day to have fun with this and create my own solutions.  Wow, I just realized another one of my projects was making game engine for a top down point and click game.  I look on what I know compared to other people know and what I "should" know, and feel like a total NOOB.  Also, not having had a "job" as a developer, I think I must not be able to do anything. But it turns out I've done some pretty cool stuff when I stop focusing on where I want to be and looking only at "published" products.  I was pursuing completely different career then, so I just did fun stuff. I am not denying that on a lot of topics I am a NOOB, but just maybe I’m not as much of a programming NOOB as I think I am.

     That brings me to fall 2012, well I had taken a HTML/CSS class and another java programming class. But honestly 90% of what I know in programming, I taught myself by needing to learn it to do something fun.  The classes were just a great starting point.  That fall took an iOS mobile development class.  As I did in all my other programming classes, by week 4, I was two weeks ahead and accelerating faster than the class was proceeding.  I finished the topics the class covered by midterms.   Math Quizer was essential my final project for this course.  I refined it and made an Ads version the next summer.

     Christmas break of 2012 I spent making HexagonApp.  HexagonApp was built from the circle game.  The circle game was a java app that I built to teach my 2-year-old niece her shapes.  I have 10-12 shapes and she learned to drop them into the right boxes with a mouse.  Little kids using a mouse is adorable.  They can be better than some adults.  But instead of calling it the very reasonable circle game that I came up with she called it the hexagon game.  Hexagon was one of the shapes.  When I went to make my first iOS approach publish, I iterated on that idea and made HexagonApp.  The shining feature of the app is my 4-year-old niece who will tell you "Great", Fantastic" *giggle*, or "Try Again".  Also you can listen to her struggle through "parallelogram" (I had to use an audio editor, Audacity, to get the final version).   My sister created the art work for the app and I submitted it early January.  Late January it was approved, and I had officially published an app on Apple App Store.  I should mention I didn’t have mac to do development on.   I wrote up a business plan based on what I had learned in school and submitted it to my father.  He bought the computer and wrote it off as an expense for his side business.  So, my elopement until January 2017 was been done on a 2012 MacBook air base specs.  That summer I polished Math Quizer and learned to add in iAds, even if iAds has been canceled now.

     I often look between then and now and forget all the stuff I have done, simply because I haven't published it.  I did try to submit a tap to set off virtual firework app, but this was about the time the Apple App Store was starting to get some standards, so they rejected it.  I had another app that was getting closer to being production ready, but my artist got super busy as her work, a startup, took off. And I got busy getting a degree as I was pivoting in my academic career.  This confluence of factors killed it off, and by the time I got around to revive it, it was built on out of date ideas and technologies.

      I had to transfer colleges for my last year and to get my minor in information systems; I would need these 5 classes.  But with my major BioChem that was one too many.  I reduced it to 4, as I got my mobile app development class to substitute for advanced programming only because I showed the IS professor my app.  Sure, the class only covered 10% of what that published app did, but I obviously had advanced skills if was able to develop and publish an app... class substituted.

     That was a great year, I learned to make databases.  Something is sorely needed to learn. I was trying to do data basing with java objects for a custom language editor and dictionary.  SQL is way better, I look at that and one part of me wants to cringe at how clumsy it was, but another part of me is kind of impressed with how close I was coming to a database. Oh, don't get me wrong from an efficiency standpoint it was a colossal difference, but from a functional standpoint I was actually getting there.  Besides data basing the most important lessons I took from that year was on the development process.  We had a class where all 8 of us were given a Raspberry Pi and we had to make a product.  I should mention that the reason I didn't even attempt to major in IS was it was part of the business school. I kind of needed a degree in one year and BioChem was what my 180 credits dictated.  I worked on a low cast spectrophotometer. A device that measures what frequencies of light a sample absorbs.  I did market research, learned for the second time how to increase a business time, this time focused on the tech field with very specific project.  Presenting my business plan at the school’s competition.  Of course, I determined that my prototype couldn’t reach the quality to compete with the competition.  And while I used Java to build the app to run the hardware the important part of that was the business side of the equation.

      I entered a nanoscience program, the science behind making computer chips.  First day there we learn the college is divorcing the university.  Yeah, so apparently, that can happen.  So, my PhD program collapsing around me, I updated my apps to meet apples new UI standards.   I prototyped so many ideas in those next few months.  It taught me swift.  It’s a funny thing why certain projects won’t work.  My best idea was a app to learn mandarin by breaking it down and build up from the simplest characters and building up.   But well, I don’t know mandarin.  I was trying to learn and figured out I needed a speech therapist in mandarin.  I had needed a speech therapist to speak English, my native language. 

     I am now getting serious about making app development my career.  I am learning Unity.  There are other blog posts about that, but I can tell just how much better I am at development than when I started Xcode.  In one month, I am as comfortable in Unity as four months in Xcode. 

Congratulations If you read that. I thank you for your time in letting me get it all out there. 

Unity3D Getting Started

Now that am comfortable in Unity3D, I thought I would talk about getting started.  I won't be detailing each and every step.  There are many great tutorials out there and which ones you chose will be based on what you want to do.

Getting started:

  1. Get Unity3D duh!  When you download it will ask you what platforms you want to get the modules for. You can download them later, but just FYI you might want to know basically what you are developing for to begin with. I chose iOS, Android, PC, and Xbox.
  2. Get started with some of the great Unity Tutorials.  There are a variety, so choose it based on what pieces you want to learn about.  I would focus on the pieces not the whole presented when choosing.  Follow along and don't just copy their code, really type it in and follow the tutorial. Do all the work yourself.  When it comes time to build your stuff, I'll tell you the exact opposite, don't re-invent the wheel, especially free wheels.  Do add spinners and fix their connectors ie. modify and adapt the code as needed.
  3. Design a very, like stupidly, simple scene.  I won't even call it an app because that would be overselling it.  
    1. One of my early scenes was the Ethan 3rd person controller prefab from Unity's standard assets running around collecting cube collectables I built in the roll-a-ball tutorial.  In a plane and cube pen.
  4. Add frills to your design, things you are interested in and can learnt to do.
    1. I added a moving wall
    2. I also made a timing system till I collected X collectables
    3. Added in a cube that added 1 min to time if I hit the collider. I had to add a second collider to get a trigger and still have it be a solid object. But the trigger collider was a sphere that was bigger than the cube.
  5. Design a project with a bit more substance and keep repeating until your are comfortable with Unity3D as a program.
  6. Take a look at the Unity Asset Store.  Play around with the free ones first so you have a better idea of how to use assets.
    1. Assets, as a rule, are developer tools and thus are not plug and play, even the ones that tell you they are plug and play.  I have had to spend an hour on every asset getting all the error codes to resolve and getting to operate as intended.  Even in their preview scenes.
    2. If you find an asset your really interested in, check to see if they have a free demo.  If they don't have a demo, watch the tutorials, look into the documentation and review the support.  Assets without good tutorials, documentation or support will not be as valuable to you as assets that knock those aspects out of the water.
    3. It will take time to learn the assets that truly aid you.
      1. I got Playmaker and spent some time going through tutorials.  While playmaker is great, it is learning a whole new subprogram, so budget that time.
      2. Go through the demos and see how the work.  Break them, or if they come broken, like my InventoryPro ones, fix them.  Doing so will teach you a lot.  
    4. Look up the tutorials and Documentation before you begin. And know that the assets will take a lot more work than they look like they will.
  7. Start to iteratively design of you first project.  You don't have to intend to publish, so get to that 80-90% done mark.
    1. Do NOT try to make it perfect.
    2. Do NOT plan out an epic.  This is just one step further than your last.  It is about putting together the pieces you have been learning, you are building for your learning and fun.  
    3. Do NOT be afraid to completely scrap your project and start from a fresh slate.
    4. Do SAVE all the time. BEFORE each PLAY.  I have found Unity will crash mostly when you hit PLAY.
  8. Most importantly have fun, if your ready to hit your pretty computer, take a break and come back to it later.

That's how I learned.  You know you best and what is good for me may not be good for you.

I have made a demo of my first Big project.  I was making an RPG.  I just focused on getting the mechanics done.  At current point I am transitioning to what I really want to do, make non-gaming software.  Thus the RPG is my side project for the fun of it.  

RPG001 Demo

Thank you for you time and I hope this has enriched your life.