Where I came from

Is “hey guys” cliché? It is? Oh, alright, then…

Hey, guys.

I haven’t started a thread in a while, and I’m well aware of that. I won’t bore you with the usual excuses. I’ve been hanging around on the #java-gaming IRC channel, chatting with the JGOers and testing IRC bots. Even if it weren’t for my mid-year examinations, I wouldn’t be posting much on the forums. I’ve been learning.

Learning what? That’s a good question, because we’re always learning, and I mean that literally. But we all had to start somewhere. The beautiful thing about learning is that it has a beginning but it doesn’t have an end, not for the rest of your life. Learning can be an involuntary thing; our brains are capable of observing and analysing patterns, without us even being fully aware of it.

Learning is…paradoxical. When we learn something, we use that something to learn something else. So that means we learn…to learn more. To ask for the purpose of learning is like asking for the point of life; we don’t know for sure. I mean, you could keep asking “why”. Why do we learn? Well, you learn so that you can help others with the knowledge that you acquire in the learning process. Why help others? Because it’s only right! I mean, helping others is a good thing! It gives a feeling of achievement and pride and…why? Why would you ever need to feel pride, or a sense of achievement? Why? Why? Just tell me why, gosh darn it!

I DON’T KNOW. None of us do. So naturally, we ignore all of that and we look straight ahead, instead of peeking beneath the ground. Please, let’s ignore the philosophy behind learning; it’s enough to boggle my mind (which is funny, because usually it’s the other way around; I boggle others’ minds).

Like I said, we all had to start somewhere. So I started this thread to learn more about you guys. Where did you start? How did you start? Who, what, where, when, why and how? Spill the beans, peeps! We may all benefit from reading your story.

Here’re a bunch of questions that I recently asked theagentd (hey, he’s awesome, and the advice that he gave was invaluable):

  1. When did you start programming?

  2. Where are you currently studying (middle school / high school / college)?

  3. Do you have any tips for aspiring game developers / programmers?

  4. What do you feel is necessary to learn in order to be considered a programmer? (data structures, multi-threading, concurrency, programming paradigms, etc.)

And a couple of extra questions for those who have the time:

  1. What motivates you to learn new things?

  2. What, in your opinion, is the “right” learning attitude?

I welcome you to go off on a tangent. You can never get away from learning, anyway, so you’ll probably never be off-topic.

P.S. In case you’re wondering, I’ve been learning lighting techniques and I intend to learn real-time rendering optimisation techniques (frustum culling, occlusion culling, chunking/batching, etc.) I’ll probably finish learning how to implement the more commonly used lighting techniques (basic lighting (diffuse, ambient, specular) [tick], shadow mapping [cross], ambient occlusion [cross], HDR+ [cross], gamma correction [tick]) by the end of June.

I started programming in 2009 with Roblox. I wouldn’t really call it programming, but it was Lua and taught me how basic programming structure worked. I left it in around 2012 for Minecraft modding. This is where my Java adventure began. I stopped modding shortly after and started trying my own games using Slick. Eventually Slick became too slow for my needs so I moved onto LibGDX around 1.5 years ago. The first game I made was a platformer, and after that I did my biggest project: a fully multiplayer sandbox game. The development time of that was too long for my needs as it was mainly networking so I quit and tried my hand at many, many different ideas. One was a Papers, Please style game, another was an attempt at a story driven game, then a spy game, another story driven game, a vague attempt at 3D, a weak attempt at a revival of an old game, and a rhythm game. The only idea that actually came to life was the rhythm one, and it died pretty quickly as I didn’t want to program in levels. Right now I’m working on a singleplayer-version of the multiplayer game and so far it’s going pretty well. But I digress.

I’m currently in high school.

Tips? Keep trying. Don’t give up. Don’t think you’re ever going to complete and master a language because you’re going to learn something new constantly. Your first games will be unimpressive, but the knowledge you gain from those prototypes is invaluable.

What’s necessary to know to be a “programmer”? This one changes between people. Personally, knowledge of how your code will run logically is the most important part. Concurrency has never been an issue for me (I’ve never figured out what wait and all those methods do). Some code theory would be good such as methods, constructors, classes, etc. Design patterns aren’t that important, but some like the singleton are really helpful.

Motivation? I feel that the next project I do will always be better than the last one because I’m constantly learning. This ties into the next one.

The right learning attitude? I’ve explained this above: keep trying. Try new things (although I’m being a bit hypocritical about this one as I’ve always put off 3D for “another day”).

Am I learning right now? Probably, but I do feel that I’m just repeating the same project again in a way. I do have over a year’s worth of knowledge with LibGDX now and that definitely helps (especially when I look back and see that I didn’t use the API Camera class and “made” my own by manually translating coordinates). I just finished up a new AABB collision detection system that’s a lot faster than the old one, and now I’m looking at how to implement the UI and saving and loading. Going off on a bit of a tangent: I love data structures. I love figuring out a way to store my world, and then reading it back. Something in my mind clicks when I do that and I get it easily. I might just be weird, but I don’t know.

I enjoyed these questions. Thanks for the talk!

When it comes to this, we’re pretty similar! Just thinking about my next project motivates me.

Personally I had my first attempts at scripting around 2005 already (when I was still in elementary school), when I was experimenting with RPG Maker and similar software. I made dozens of small games during that time, in few last years of this period editing and writing some “real” code as well. Piece of software I remember best from that period is (sadly no longer existing) PlayCrafter.

Programming my own things using widely used languages began around 2011 (high school period) and was initially focused around creating useful tools for Wurm Online. This taught me mostly about general programming, languages and patterns and - when I thought my knowledge is sufficient already - I begun adding gamedev-related elements into my programs, with pretty good results - for example here is one large, finished project called DeedPlanner: link to topic. I didn’t released publicly even one game from this period, but did lots of various experiments, mostly with gameplay mechanics, networking and graphics.

Around one year ago I got an offer to join Wurm Online development team, which I accepted naturally. This was a very important moment - while you learn a lot while doing personal projects, working on already existing projects will teach you “how the stuff is actually done”, which you can’t learn from personal projects and is very hard to learn from just reading the code/learning programming theory. On the other hand, I think that everyone must find balance between personal projects and work/open source - both teach you important things about development.

Currently, I am on 2nd year of CS engineering studies. While I don’t think it influenced my programming ability directly, it shown me some new ways to do things and taught useful things that I would most likely never use otherwise, most notable example being LaTeX.

When it comes to tips for gamedevs and programmers in general… The most important: experiment first. Programming is all about experimenting, learning. Sometimes you will fail, in some cases even abondoning weeks or even months old project going nowhere, but you will not lose the most important thing - experience which will prevent you from doing the same mistakes twice and will make ALL your future programs even better.

What is needed to be considered a programmer? I personally think that you can consider yourself a programmer if you start thinking algorithmically in real life to the degree which influences it in many ways. For example, take most obvious example: mathematics. This is hard to describe, but - when you start looking at math in purely alghoritmic way, bringing programming concepts into your thinking - you will notice that. The same applies to lots of other areas - the more experienced you become, the more areas are getting affected by this effect. I don’t think there is any kind of knowledge needed to be considered programmer. While some concepts are used far more often than others, everyone have different needs and preferences.

Motivation is rather complex topic. Personally the thing which motivates me most is any kind of feedback, both negative and positive - without it I find it hard to stay focused on one project without starting side project or coming back to projects that are already receiving feedback. That’s why I find iterative and/or feature-driven approach to the development being the best for personal stuff and small groups. Start small, think big.

“Right” learning atlitude? Hmm… Just keep trying, experiment, learn new stuff. Everyone have different ways of learning, but - as long as you don’t stay in one place in this rapidly changing programming world - you should be fine.

First, I apologize for the large wall of text that you are going to read. You made me remember all my life, and my JGO previous posts, THANK YOU!!!

I was born in 1995, but I saw my first computer (running RedHat enterprise linux, I dunno which version it is) in 2000 in my father’s office (He is a development officer in a national insurance company). He got a computer to home in 2001 with Windows ME installed, early in January I remember. Since then I became a gamer, I spent six years playing games like the House of Death, The Hard Truck, Need For Speed etc., I should say I’m a huge fan of House of Death, I saved up ₹200 to get a copy of House of Death 2. I didn’t use my pocket money for two months for that.

It was 2007, when I was introduced to developing games by a friend. His brother gifted him a copy of Game Maker, and he showed me a game he made in it. I was simply amazed, I had never written even a line of code till then. There used to be good competition between I and him in studies, so naturally I wanted to make that game. My goal was to make a game, and I chose to make a platformer (because I played a lot of Mario in my childhood Nintendo console). I have downloaded a trial version of Game Maker 6.1, and made that game (with shitty graphics and no sounds) in two months.

I got a lot of appreciations in school, along with my friend. My first achievement!!! We were heroes in school, since only two or three of my friends know computer and play games, and we made a game!! Enjoyed it a lot, and I decided to become a game programmer, and turn it into my profession. It was so strong, that I used to say that to everyone who asked me what I want to be after studies. We both started making some games using his copy, and distribute in our class. In fact, we introduced computer to many of our friends. Unfortunately, exams kicked in, and we stopped this. We just made three games, one pong clone, one tetris clone, and a mario clone.

Immediately summer came in, and that’s the time I played Resident Evil 4 on PS2 (I used to play PS2 with my friend in a local shop, we pay ₹20 and we can play for one hour). The graphics were stunning, that became my goal. Too much, I know that, so I wanted to learn how games work, I knew Game Maker hid so much from me. And game maker doesn’t support 3D, so I wanted to create a Game Maker clone that supported 3D. I know, too much for a school going kid, who knew nothing in programming, except some basic GML scripts.

It was 2009, and I started teaching Java to myself. I started with Java since I saw a lot of advertisements in TV about Java Coaching for engineering students. I was not an engineering student by then, but I wanted to learn it. So I started online, and taught myself Java. I also started learning other languages at the same time. By the end of 2010, I have taught myself Java, C#, VB.Net, C, C++ and some basic HTML/CSS/JS. I started my old website (yes, a deviation from gamedev).

It was 2011, and I wanted to come back to game development, and especially start working on my dream, creating a Game Maker clone. I ported my pre-mature Java engine to C#, used WinForms, and created a 2D version of Game Maker clone, I named it Game Forge. But I got an issue, it was able to save the projects, and read the projects (used serialization) but I didn’t know how to generate code so I can play my game. It got a break there. I wasted an entire year, but I learned designing complex user interfaces, and some P/Invoke functions in C# and native Win32. I decided to come back to Java, and found this forum. I ended 2011 by browsing this forum daily, as a guest.

In September 2012, I decided that I should post my pre-mature engine here, so I could get some push in the right direction, I didn’t know what is the right way, I’m just experimenting. I started experimenting it on different platforms (I used to dual boot Comice OS 4 (Pear Linux) and Windows XP) and I got different FPS values. That’s when I learnt about proper game loops (I was using JTimer from Swing before that) and understood how to reduce collision checks, I wrote my first QuadTree implementation and Grids!

I have registered on StackExchange that same year, and thought of remaking GM again. I have made a list of all of it’s actions, and started adding to my engine, and it got awesome as I think. I posted this in this thread on this forum, and I got not enough feedback. Of course, I wanted to learn more. Another achievement, I got my first medal for solving all the levels in a 4K game (TiltMaze 4K) and posting the solutions here.

Now that I have got some experience, I thought of sharing my engine to the public, and posted it on this forum. http://www.java-gaming.org/topics/my-game-engine/28232/view.html

I did receive a lot of constructive replies, and how I can improve, but it took me a few months to actually understand all that. But that increased my curiosity to learn them. I started with Java concurrency tutorials, and later included them into the engine.

It was 2013, and I started again on my GameForge, in fact made a video showing the interface: https://www.youtube.com/watch?v=6OM1pVDQJOM

I spent the rest of 2013 making tools, like a Jar2Exe converter, an SWF to EXE converter, an NSIS code generator, etc., and also started with OpenGL and LWJGL. I asked my father to get me a graphics card, and got ASUS GeForce 210. I started writing LWJGL tutorials on JGO, and within few months, they got upto 80K views (I used to open the tutorials section, and count the views daily) which are now moved to my own website. 2013 is also the year I got into college, I took Computer Science because I love games, and I’m the only one in class who took CS by choice.

2014 quickly went by, I was in the second year, but an unexpected thing happened, my father got operated on Retina, we had to travel more than 1000 KM to get to the specialist, and fortunately he recovered soon. Due to that I missed the minimum attendance and had to study second year of college again from mid 2015. Two more exams (within a week) and I will be promoted to third year again.

Back again in 2014, I started working with Mercury, and in 2014 November, I started SilenceEngine. I’m sad a bit that Mercury is stopped, it did a very good attempt to clone Java2D on OpenGL and I wrote the Graphics part on it. SilenceEngine is still continuing, and I’m adding more backends to it. Now, in 2016, my aim is to complete the engine’s new graphics API with built-in post processing and lighting.

2015 and 2016 were my big years after 2013, as I got to write more projects WebGL4J and GWT-AL which finally got a decent Java APIs (I love them) for HTML5 with GWT. Now GwtOpenType is also almost done, and the first snapshot is in Maven (OSSRH snapshots repo). I also wanted to get better at coding, and with that, I achieved 500 days of GitHub streak on these projects. Recently broke it so I can focus on my exams.

This is me till now. As you have said, everyone will have their own learning way. Some learn first by a course, and later think of applying what they learnt, and some others keep a goal, and learn to achieve it. In that case, make sure that you have a new goal once you achieved one, or else you’ll just stop there.

THANK YOU FOR MAKING ME TO LOOK INTO MYSELF!!!

Started programming in 2011 or so I think? Made some Minecraft mods and scripted in Lua with that ComputerCraft mod.

I’m still in high school, coming to the end of my junior year.

If you start feeling like you’re forcing yourself to write the code (for a hobby project) then it’s not gonna be very fun. Find an area that you’re interested in and are willing to spend hours a day just reading through documentation, other code, and writing it.

To be considered a programmer… hmm… Probably know at least 2 languages decently well, and know your way around a computer. Low level understanding of how the OS and hardware works is very helpful for some projects. Or even just know assembly, that’ll go a long ways to understanding computer magic stuff.

I’m definitely motivated to learn, and when I was in middle school and early high school it was all about learning more and more. But now I’m motivated by making myself more appealing to colleges and jobs. I still love learning about it, but the job and college stuff is always in the back of my mind.

The right attitude is probably just availability, and recognition, of your willingness to sit down and thoroughly understand the topic. If you don’t want to do it you’ll just half ass your way through it.

1) When did you start programming?
At the age of 15. Wanted to make programs when I was 8 years old, but daddy always held me back, as “only adults who went to school” can do it.
Then stumbled upon a book on Java, by accident from the library. A small stone that caused an avalanche.

2) Where are you currently studying (middle school / high school / college)?

College for IT in part time, 1 day a week. I work three days a week.

3) Do you have any tips for aspiring game developers / programmers?

Join a forum. Really, the Java book I mentioned told me to join a society with the same interests, in other words a programming forum.
That’s what brought me here, as I was interested in games, and learned Java, the obvious result for ‘java games forum’ is this one :slight_smile:

I can not explain how much good this has done me, you guys are so inspiring and there are so many things you don’t understand at first. But by looking up all of the terminology that is being used here, and reading about people’s problems/solutions/discussions you learn many new things. (and I still do).

As an example, I have always been interesting in modifying programs (read: cheating). So when I saw Slyth doing some reverse engineering (an example of terminology I didn’t even know about), I asked him about how he went at it, and so I began my journey into assembly. He had a really good tutorial for me which helped me a lot. And it teached me so much more than cheating, it told me about all devices in general (assembly = processor). By learning assembly, everything becomes possible, from writing your custom bootloaders and drivers to being able to help with the OpenRCT project.

4) What do you feel is necessary to learn in order to be considered a programmer? (data structures, multi-threading, concurrency, programming paradigms, etc.)
Designing software. I would recommend to use MVC and DIP. The SOLID rules make your code better, the process of becoming more experienced for me was learning these rules on my own.
DIP (Dependency Injection) maybe goes a little far, but the point it tries to make, is that you do not use instances of classes in your code, but interfaces. This prevents spaghetti.

The reason I and a lot of others with me couldn’t finish their games on this forum was simply because we thought that learning to design software was boring and/or costs too much time.
Guess what, inventing the wheel again is what’s really stupid.

1) When did you start programming?

Started age ~13 in Game Maker (v3 2003) making games.

Started making multiplayer games and advances UI’s.

Switched to Java due to GM limitations, then more recently into HTML5 and NodeJS - because everything I wanted to do with Java could be done easier, faster and “better” with modern web development (not the case ~4 years ago).

2) Where are you currently studying (middle school / high school / college)?

Started university in 2011. Haven’t finished my masters yet since I’ve been working simultaneously - currently working full time.

3) Do you have any tips for aspiring game developers / programmers?

Make stuff instead of frameworks/engines/libraries.

4) What do you feel is necessary to learn in order to be considered a programmer? (data structures, multi-threading, concurrency, programming paradigms, etc.)

Learn the fundamentals of unix operating systems and bash.

The fundamentals of computer science are straightforward. Write a program in assembly - understand how it works (and how simple it is).

Data can be anything - the observer decides what he wants to see.

These basic fundamentals can be applied to everything else in the realm of computer science - and it will give you an understanding of how things fit together, an overall bigger picture of it all, if you will.

Also embrace Test Driven Development. It’s the bees knees.

Hey, no problem! Your story was really interesting, and it’s awesome how games inspire people to learn programming. Also, good luck! I hope you eventually realise your dream of starting a game studio, and I hope SilenceEngine becomes a huge success!

Thanks for the reply! Minecraft was and still is my greatest inspiration.

I hope to attain a deeper & clearer understanding of the low-level aspects of a computer, and maybe I’ll try creating an OS one day!

1) When did you start programming?
Cast your mind back to 2012. I loved Minecraft and wanted to make plugins and mods for it. In order to this, I needed to learn Java. Unfortunatly, Java was way too over 10-year old me’s head. Instead, I made some “games” in Batch for a the rest of 2012 and into early 2013. They were pretty bad. Finally, in early 2014, I saw some simple tutorials on Swing and Java2D and knew I didn’t have to make Batch games anymore. Originally, I was AirTime on the forums, and I still sucked pretty badly. But then, I saw a tutorial on how to make a Maze Game in Java. It was a watershed moment in a way. After re-registering as “DarkCart” on the forums, I posted “Mazer”, my first game. And the rest is pretty much history.

2) Where are you currently studying (middle school / high school / college)?
I’m in my last year of middle school. Yes, I’m pretty young.

3) Do you have any tips for aspiring game developers / programmers?
Don’t give up. Don’t give into temptations to just copy code. Search google before asking a question.

4) What do you feel is necessary to learn in order to be considered a programmer? (data structures, multi-threading, concurrency, programming paradigms, etc.)
This one made me think for a while. In one way, you’re a programmer when you make the decision to learn how to program. But in another way, you’re not a real programmer until you can teach someone your skills.

5) What motivates you to learn new things?
What motivates me to learn new things? The fact that no matter how much I learn, there’s more out there that I’ve never heard of. The fact that I can always get better at this.

6) What, in your opinion, is the “right” learning attitude?
Don’t give up because something looks big and scary. I remember at first being scared by the humble JFrame when I started to program in Java. It was so different from what I was used to. But I didn’t give up and go back to making Batch games. And if I had, I probably wouldn’t be here answering this.

  1. When did you start programming?
    My first contact with programming was when I was 14years old - 15 years ago, though seriously I’ve started about 6 years ago.

  2. Where are you currently studying (middle school / high school / college)?
    Nowhere, I’m self-taught.

  3. Do you have any tips for aspiring game developers / programmers?
    Be original - dont make another shooter.

  4. What do you feel is necessary to learn in order to be considered a programmer? (data structures, multi-threading, concurrency, programming paradigms, etc.)
    Touring machine and how CPU and electricity work, how semiconductors function and the basic understanding of Assembly will make your knowledge not only well founded, but also will make your life lot easier - you’ll be able to comprehend and predict much more than without this knowledge.

And a couple of extra questions for those who have the time:

  1. What motivates you to learn new things?
    Curiosity - only.

  2. What, in your opinion, is the “right” learning attitude?
    Be critical and sceptic, don’t believe anybody unless you check something for yourself. Learn from mistakes not from standards.

  1. When did you start programming?
    I was about 8 years old. My dad said that if we wanted games i had to write them myself. It was on a http://www.computinghistory.org.uk/det/40165/Sord-M23-Mark-III/. We didn’t have the graphics upgrade so had to hack machine code and stuff. Even an assembler cost a lot of money back then. But dad did pony up the money (a few $100 for an 8 year old). I moved on to big iron and demos on amgias at highschool. Fave language at the time was lisp.

  2. Where are you currently studying (middle school / high school / college)?
    I just left science to start my own company. Black Robin Games. We rock.

  3. Do you have any tips for aspiring game developers / programmers?
    Pick something smaller than you think you can do. And finish it. FINISH FINISH finish. It is all about Finishing. This is not just games, but life in general. You don’t need to be smart to have a PhD (Like hell i have one), the trick is to finish. I say this as someone who has not finished a game and started a company anyway :confused:

  4. What do you feel is necessary to learn in order to be considered a programmer? (data structures, multi-threading, concurrency, programming paradigms, etc.)
    Experience. Real life boots on the ground experience. Theory only gets you so far. And in practice things tend to be far more messy than “In theory”.

  5. What motivates you to learn new things?
    I never really stopped to think about it. I am just always doing it.

  6. What, in your opinion, is the “right” learning attitude?
    One that works for you. Really we are all different. There are no right/wrong ways, if it works it works.