The Entrepreneur Forum | Startups | Entrepreneurship | Starting a Business | Motivation | Success

EXECUTION Learning C (Game Programming) Progress Thread

SputnicK

Contributor
I've Read UNSCRIPTED
Dec 23, 2017
18
24
25
Introduction:
Hello Fastlane Forum! I am a 19 year who is pursuing a CS degree in college with a particularly interest in game development. As I am a terrible procrastinator, and have read that accountability systems increase the odds of success by 95%, I thought I would start this progress thread. It will outline, in clear terms, what exactly I will be doing, how I will be held accountable for it, and what I plan to achieve from it.

Background:
I have been interested in game design since I was a young child. I created this thread because I have gained enough self-awareness to realize I am never going to get serious about it without radical commitment. This thread is my attempt to finally do what I've been too scared to do: actually program games instead of just dream and make pretend about it.

Requirements:

As all good challenges require rules, I will define what exactly I plan to do in this thread. In succinct terms, I must write a progress update every Wednesday describing exactly what I have learned and accomplished in game development over the last 168 hour period. In more specific language, I have a written list of requirements that must be followed:
  • I must write a weekly update on Wednesday describing what I have learned and accomplished. If I miss that window, it is evidence I am not serious about this goal and am falling behind on it. I hope if others notice this they will call me out on it.
  • I will focus primarily on game programming in low-level languages such as assembly, C, C++, and C#. As my primary objective is to become adept at programming, much of what I do will be focused around improving adeptness and proficiency in the language. I will also aim to release increasingly complex games and programs however. Look out for these as I will link them in the update thread!
  • The update must be reasonably polished. It should be grammatically correct and include images, links, and formatting so that is easy and entertaining to read. It should be personal enough so that I am honest about the struggle and how I can improve.
  • I will showcase my projects on r/gamedevexpo and itch.io when I deem them completed. The links to these updates will be linked in the appropriate update in the thread.
  • I want constructive criticism and honest feedback! How am I doing? What could I be doing different? Are the updates valuable and insightful? If I fall behind and don't post here, do me a favor and get after me on it. The whole reason this thread exists is to expose myself to rejection and actually act on my word. Not just talk more BS.

Goals:
In succinct terms, I want GROWTH. I have been stuck in a rut for a long time and by writing regular updates and gaining momentum I pray to transcend it. I know if I follow the requirements in this thread, I will improve dramatically at programming and will fill the void of uncertainty that has been a constant in my life for years now. This is the first step I am taking on a long journey. The road ahead with be treacherous and dangerous with many pitfalls along the way. But I am OK with that. The struggle is the reward. But that's enough grandiloquence, I will be back with my first update next week!
 

Don't like ads? Remove them while supporting the forum. Subscribe.

Last edited:

splok

Gold Contributor
FASTLANE INSIDER
Read Millionaire Fastlane
Summit Attendee
Speedway Pass
Jul 20, 2012
644
1,078
388
I am a 19 year who is pursuing a CS degree in college with a particularly interest in game development.
  • I will focus primarily on game programming in the Java language using its native Swing framework.
  • I know if I follow the requirements in this thread, I will improve dramatically at Java programming
Do you want to make games or do you want to get better at Java?

If you want to make games, go download Unity or Unreal and build/release something this weekend.
 
OP
OP
SputnicK

SputnicK

Contributor
I've Read UNSCRIPTED
Dec 23, 2017
18
24
25
Do you want to make games or do you want to get better at Java?

If you want to make games, go download Unity or Unreal and build/release something this weekend.
Both? I know that is a cop-out answer. I actually took a college course on creating interactive levels in Unity 3D and it is definitely a powerful engine, I assume likewise for 2D.

I suppose the primary reason I favor a programming language over an engine is that I like to have complete control over the project. I enjoy the process of programming and really understanding how everything works at the fundamental level. Perhaps this is a mistake. I know that a result-oriented approach would favor using an engine that already does most of the legwork, such as Unity 2D.

In the end, however, my primary objective is to grow my ability to program at a higher level. I believe that in this light using a language is the superior method. I don't want to delude myself into thinking that struggling for the sake of it is a prosperous ideal however so I still might download and work on Unity 2D on the side to learn and experiment from it. If I find it to be superior in every way to programming in Java than I am more than willing to pivot and transition completely into it.

I hope this makes sense! I definitely have a conflict of interest on this matter and I am completely open to changing my mind.

404profound said:
Looking forward to this thread! As a noob full stack dev I'm curious how your process will unfold.
Thanks man! I don't have everything figured out now but I hope that these weekly updates will provide some insight into the process of learning programming and game development.
 
Last edited:

lowtek

Platinum Contributor
FASTLANE INSIDER
Read Millionaire Fastlane
Summit Attendee
Speedway Pass
Oct 3, 2015
1,574
4,994
1,130
37
Phoenix, AZ
OK so you want to know how an engine works, I think that's awesome... but why would you choose Java?

This is not at all the right tool for the job. For game engines it's C++ or bust. You could even go straight C if you don't want to deal with all the garbage modern C++ introduces.
 
OP
OP
SputnicK

SputnicK

Contributor
I've Read UNSCRIPTED
Dec 23, 2017
18
24
25
OK so you want to know how an engine works, I think that's awesome... but why would you choose Java?

This is not at all the right tool for the job. For game engines it's C++ or bust. You could even go straight C if you don't want to deal with all the garbage modern C++ introduces.
I agree with you 100%. In no way is Java ideal for game engines, as prior experiences has confirmed this to me firsthand. The only reason I picked the language is because I am the most familiar with it and have a sort of emotional attachment to it. It helps that I have numerous projects I can use for inspiration so I already have a "proof of concept" when developing my engine framework.

Those are not great reasons to stick with the language however. I have known I need to branch at some point but I thought it would suffice during these early stages of development. Perhaps it is best for me to move directly to C, although I have almost no experience in it. It also intimidates me that it is not intrinsically OOP. I will think this over and might very well take your advice and transition directly to C or C++ instead of Java now. I am sure in the long-term it offers the superior advantage and that must certainly be factored.

It is worth noting that "Minecraft" was written completely in Java which gave me some hope, although it gave Microsoft such a headache that they wrote it entirely in C++ for Windows 10. I think that is perhaps a warning sign of what developers think of the language in 2019.
 
Last edited:

404profound

Platinum Contributor
I've Read UNSCRIPTED
Speedway Pass
Aug 27, 2017
1,325
2,709
662
Desert of Desertion
I agree with you 100%. In no way is Java ideal for game engines, as prior experiences has confirmed this to me firsthand. The only reason I picked the language is because I am the most familiar with it and have a sort of emotional attachment to it. It helps that I have numerous projects I can use for inspiration so I already have a "proof of concept" when developing my engine framework.

Those are not great reasons to stick with the language however. I have known I need to branch at some point but I thought it would suffice during these early stages of development. Perhaps it is best for me to move directly to C, although I have almost no experience in it. It also intimidates me that it is not intrinsically OOP. I will think this over and might very well take your advice and transition directly to C or C++ instead of Java now. I am sure in the long-term it offers the superior advantage and that must certainly be factored.

It is worth noting that "Minecraft" was written completely in Java which gave me some hope, although it gave Microsoft such a headache that they wrote it entirely in C++ for Windows 10. I think that is perhaps a warning sign for what modern developers think of the language in 2019.
Or you could go Rust, which I hear is a happy medium. Although Unreal runs C++ and Unity runs C#
 

lowtek

Platinum Contributor
FASTLANE INSIDER
Read Millionaire Fastlane
Summit Attendee
Speedway Pass
Oct 3, 2015
1,574
4,994
1,130
37
Phoenix, AZ
I agree with you 100%. In no way is Java ideal for game engines, as prior experiences has confirmed this to me firsthand. The only reason I picked the language is because I am the most familiar with it and have a sort of emotional attachment to it. It helps that I have numerous projects I can use for inspiration so I already have a "proof of concept" when developing my engine framework.

Those are not great reasons to stick with the language however. I have known I need to branch at some point but I thought it would suffice during these early stages of development. Perhaps it is best for me to move directly to C, although I have almost no experience in it. It also intimidates me that it is not intrinsically OOP. I will think this over and might very well take your advice and transition directly to C or C++ instead of Java now. I am sure in the long-term it offers the superior advantage and that must certainly be factored.

It is worth noting that "Minecraft" was written completely in Java which gave me some hope, although it gave Microsoft such a headache that they wrote it entirely in C++ for Windows 10. I think that is perhaps a warning sign for what modern developers think of the language in 2019.
Every programmer should learn C. You will learn an enormous amount about how computers work, how to write efficient code, and how to think about algorithms clearly.

OOP most often leads to spaghetti code, and is little better than the goto messes you would see in the BASIC era. You're unfortunate to have grown up in the era where OOP is the paradigm du jour, so you can't really think outside of that box, yet.

If you want to be a badass programmer, you're gonna have to learn about procedural as well as functional programming. The different paradigms have their applications in different arenas, and there's no better place to start than procedural programming and C.

Please note that this advice only really applies because you're really young. You have plenty of time to develop this skillset, and it will pay massive dividends in the future. At least, until AI replaces programmers ;)

If you were mid thirties, and just getting started with programming, the advice would be totally different.
 

Smuggo

Bronze Contributor
Read Millionaire Fastlane
I've Read UNSCRIPTED
Apr 13, 2018
86
132
126
Every programmer should learn C. You will learn an enormous amount about how computers work, how to write efficient code, and how to think about algorithms clearly.
I can't agree with that. It might be true that you can learn some basics how computer works, but you could also read some books. And how to write efficient code? Tons of people who started with C are making horrible code to read. And if they are trying to move to OOP it's getting even worse. I don't know. It might be just me but I think that "You have to learn C to code" is outdated.
 

loop101

Silver Contributor
Read Millionaire Fastlane
I've Read UNSCRIPTED
Speedway Pass
Mar 3, 2013
639
984
363
If you like working on games engines, work on game engines. Whatever engine you work on, use it to make games. Godot is a pretty good FOSS game engine. After you graduate, you could work for a company that makes commercial game engines, or work on your own games.
 

lowtek

Platinum Contributor
FASTLANE INSIDER
Read Millionaire Fastlane
Summit Attendee
Speedway Pass
Oct 3, 2015
1,574
4,994
1,130
37
Phoenix, AZ
I can't agree with that. It might be true that you can learn some basics how computer works, but you could also read some books. And how to write efficient code? Tons of people who started with C are making horrible code to read. And if they are trying to move to OOP it's getting even worse. I don't know. It might be just me but I think that "You have to learn C to code" is outdated.
Reading books doesn't mean you understand how computers work any more than it means you understand how businesses work. Some things can only be learned with experience... that includes (especially) programming.

Efficiency doesn't mean readable, efficiency means... efficiency. As in, does the job with the least amount of resources in the fastest time possible. Besides that, most programmers write really unreadable code. This is independent of language choice.

As far as the OOP comment, I don't know what you're trying to say. For most people, OOP inherently leads to spaghetti code, so arguing that going from C to OOP languages makes readability harder... well no kidding. It's a facet of how most people misinterpret OOP. Not everything needs to be a class, and sometimes it's OK to repeat yourself.

You don't "have to learn C", and nowhere did I say that.

If you want to be a code monkey, you can just stick with Javascript and call it a day. Nothing really wrong with that, and you can make a good career out of taking advantage of what other people create.

If you want to push the boundaries of software and create tools to build the next generation of stuff, you're gonna need low level languages. In that realm, C is king. There's a reason pretty much every other (modern) language, and operating system, is built on top of it.

The OP said he wanted to understand things at a deeper level, and actually program things himself. The entire point of high level languages is to keep that deeper understanding obscured from the programmer. He would be far far better off just using Unity and making a game, rather than trying to "learn how games work" by using a language that is found in a minute fraction of games.
 

Don't like ads? Remove them while supporting the forum. Subscribe.

Smuggo

Bronze Contributor
Read Millionaire Fastlane
I've Read UNSCRIPTED
Apr 13, 2018
86
132
126
Reading books doesn't mean you understand how computers work any more than it means you understand how businesses work. Some things can only be learned with experience... that includes (especially) programming.

Efficiency doesn't mean readable, efficiency means... efficiency. As in, does the job with the least amount of resources in the fastest time possible. Besides that, most programmers write really unreadable code. This is independent of language choice.

As far as the OOP comment, I don't know what you're trying to say. For most people, OOP inherently leads to spaghetti code, so arguing that going from C to OOP languages makes readability harder... well no kidding. It's a facet of how most people misinterpret OOP. Not everything needs to be a class, and sometimes it's OK to repeat yourself.

You don't "have to learn C", and nowhere did I say that.

If you want to be a code monkey, you can just stick with Javascript and call it a day. Nothing really wrong with that, and you can make a good career out of taking advantage of what other people create.

If you want to push the boundaries of software and create tools to build the next generation of stuff, you're gonna need low level languages. In that realm, C is king. There's a reason pretty much every other (modern) language, and operating system, is built on top of it.

The OP said he wanted to understand things at a deeper level, and actually program things himself. The entire point of high level languages is to keep that deeper understanding obscured from the programmer. He would be far far better off just using Unity and making a game, rather than trying to "learn how games work" by using a language that is found in a minute fraction of games.
Yup, I've misunderstood 'efficienty'. I guess I have to remind myself some of the english words, because I took it as granted. Sorry for that.

Also with "have to learn C". You said every programmer should learn C. I've heard a lot from old guys "You are no a real dev if you don't know C". It's just something that I don't agree with. To speak in some languages do I have to learn latin? No. Although it makes you easier to learn new. C language is showing all gut of programming and if you want to get deep into computer knowledge, maybe it's the right course, but if you want to make awesome websites, SaaS, microservices or w/e it's useless since you have to learn tons of stuff around that (frameworks ect.) and it's enough to make awesome things.

About GameDev, at least on PCs, I would go with C++ since it's still the most common used language to code games. Of course there are more things that need to be included but you can check some jobs offers and see what they require.
Anyway mastering one language doesn't make you code monkey :smile2:.

If you want to master coding, going with C is a good idea and I agree with Lowtek. I've understood it like you want to focus on creating games in Java that's why I said learing C is useless.
 
OP
OP
SputnicK

SputnicK

Contributor
I've Read UNSCRIPTED
Dec 23, 2017
18
24
25
Every programmer should learn C. You will learn an enormous amount about how computers work, how to write efficient code, and how to think about algorithms clearly.

OOP most often leads to spaghetti code, and is little better than the goto messes you would see in the BASIC era. You're unfortunate to have grown up in the era where OOP is the paradigm du jour, so you can't really think outside of that box, yet.

If you want to be a badass programmer, you're gonna have to learn about procedural as well as functional programming. The different paradigms have their applications in different arenas, and there's no better place to start than procedural programming and C.
If you want to push the boundaries of software and create tools to build the next generation of stuff, you're gonna need low level languages. In that realm, C is king. There's a reason pretty much every other (modern) language, and operating system, is built on top of it.

The OP said he wanted to understand things at a deeper level, and actually program things himself. The entire point of high level languages is to keep that deeper understanding obscured from the programmer. He would be far far better off just using Unity and making a game, rather than trying to "learn how games work" by using a language that is found in a minute fraction of games.
I have decided to follow your advice here since I believe the reasoning is solid. I just watched a 45-minute video explaining why in most instances Object-Oriented Programming is bad and I came away pretty damn convinced. It is obvious to me now that programming in higher-level languages such as Java is not a long-term solution and if I ever want to fundamentally understand programming I need to learn a lower-level languages in the C family such as C, C++, or C#.

It is worth noting that I will struggle for a length of time as I am moving into entirely foreign territory with procedural programming. I have lived my entire life programming in OOP. I have read numerous books and programmed all my projects using roughly its orthodoxy of classes, objects, encapsulation, ect. so it will be the definition of a paradigm shift for me to transition to a lower-level where most of that mostly taken away and I have to deal with problems such as pointers and memory management. I am willing to risk it however because I can't stand the thought of not understanding it. I feel like otherwise I am remaining ignorant and in the dark about the intricacies of programming, and that is where the real magic happens after all.

If I may ask, do you have recommended tutorials for learning C? Any books you recommend, knowing that programming cannot be taught but only experienced? I have found a few solid resources such as w3schools and Tutorials Point (which I use for almost everything programming related). I would like to thank you for all the sage advice by the way I sincerely appreciate it.
 
Last edited:

splok

Gold Contributor
FASTLANE INSIDER
Read Millionaire Fastlane
Summit Attendee
Speedway Pass
Jul 20, 2012
644
1,078
388
In the end, however, my primary objective is to grow my ability to program at a higher level. I believe that in this light using a language is the superior method. I don't want to delude myself into thinking that struggling for the sake of it is a prosperous ideal however so I still might download and work on Unity 2D on the side to learn and experiment from it. If I find it to be superior in every way to programming in Java than I am more than willing to pivot and transition completely into it.

I hope this makes sense! I definitely have a conflict of interest on this matter and I am completely open to changing my mind.
Just wanted to say that I wasn't implying that this path was bad. I just meant that if you get really clear about what you're going for, you'll have a much easier time getting there. Making games and making game engines might be related, but they're not really the same. Similarly, being a better programmer and being a better game-engine programmer aren't necessarily the same either.

Another line of though: Is your end goal to just work on your own projects? For fun, or do you want to make a living doing it? Or do you want to work for a game company? Doing what? All of those would would likely put you on pretty different paths. (Also, programmers can bicker about languages forever. Solve it pragmatically. Find people who do what you want to do, and see what they use. Or find job listings doing what you want to do, and see what they require.)
 

lowtek

Platinum Contributor
FASTLANE INSIDER
Read Millionaire Fastlane
Summit Attendee
Speedway Pass
Oct 3, 2015
1,574
4,994
1,130
37
Phoenix, AZ
I have decided to follow your advice here since I believe the reasoning is solid. I just watched a 45-minute video explaining why in most instances Object-Oriented Programming is bad and I came away pretty damn convinced. It is obvious to me now that programming in higher-level languages such as Java is not a long-term solution and if I ever want to fundamentally understand programming I need to learn a lower-level languages in the C family such as C, C++, or C#.

It is worth noting that I will struggle for a length of time as I am moving into entirely foreign territory with procedural programming. I have lived my entire life programming in OOP. I have read numerous books and programmed all my projects using roughly its orthodoxy of classes, objects, encapsulation, ect. so it will be the definition of a paradigm shift for me to transition to a lower-level where most of that mostly taken away and I have to deal with problems such as pointers and memory management. I am willing to risk it however because I can't stand the thought of not understanding it. I feel like otherwise I am remaining ignorant and in the dark about the intricacies of programming, and that is where the real magic happens after all.

If I may ask, do you have recommended tutorials for learning C? Any books you recommend, knowing that programming cannot be taught but only experienced? I have found a few solid resources such as w3schools and Tutorials Point (which I use for almost everything programming related). I would like to thank you for all the sage advice by the way I sincerely appreciate it.
A good introduction is "The C Programming Language" by K&R. It's a bit dated, but it's the seminal work on the topic. These are the guys that developed Unix. You can always go from that to the more modern standards and topics.

Alternatively, I've heard good things about 21st Century C. It conforms to the more modern standards and includes material on databases and web servers, etc.

Just so I'm clear, C isn't the end all be all of programming languages (every programmer should know several, anyway). It's the stepping stone to learn the fundamentals (data structures, pointers, memory management) of computer science and engineering, without worrying about all the complexity and overhead of C++.

Don't get too drawn in by books. Just learn the basics and then start trying to grok a real code base. You can check out the Quake or Doom source code on github to see what real games (cutting edge for their time) looked like.

Once you have a foundation, switch to something like C++, which is the language du jour for modern engines. You'll be able to pick and choose which features you need, because you'll understand why they were implemented.

As @Smuggo alluded to, always be sure to write high quality code. Publish it to a public form like github, and be sure to build a portfolio and a name for yourself within some programming community. Network with other great programmers, and seek out opportunities. Maybe game development works out, maybe it doesn't. But if you follow this approach, you'll be 22 with a really solid jump start on creating a business with other kick a$$ devs, or getting a solid job to spring board your entrepreneurial aspirations down the line.
 

Everyman

Get To The Choppa!
FASTLANE INSIDER
Read Millionaire Fastlane
I've Read UNSCRIPTED
Speedway Pass
Dec 31, 2015
234
414
215
Ireland
Goals:
In succinct terms, I want GROWTH. I have been stuck in a rut for a long time and by writing regular updates and gaining momentum I pray to transcend it. This is going to be hard and it will a juggling act between college, my job, and everything else in my life. But I must do it. I will do it. If I have to bleed out my eyeballs, so be it. I know if I follow the requirements in this thread, I will improve dramatically at Java programming and will fill the void of uncertainty that has been a constant in my life for years now. This is the first step I am taking on a long journey. The road ahead with be treacherous and dangerous with many pitfalls along the way. But I am OK with that. The struggle is the reward. But that's enough grandiloquence, I will be back with my first update next week!
Hey SputnicK

there is a lot of interesting 'tricks' under the requirements heading. Put in the effort and you should learn a lot.

What would be your goals in terms of 'the fastlane' here, if you can share it with us?
 

srodrigo

Bronze Contributor
Read Millionaire Fastlane
I've Read UNSCRIPTED
Speedway Pass
Sep 11, 2018
340
427
199
Hi @SputnicK , happy to hear that we've got another game dev on board. It's amazing that you are taking action at 19.

Learning how to make (and design) games is different to learning game programming. Make sure you are sure about what you want to learn. I would advice to use Unity or Game Maker for the former, and something lower level for the later, although if you are a relatively new programmer, I'm not sure I would go for C/C++ for now. There are also different areas of game programming, mainly engines and gameplay, and they require different skills.

OOP is not a great fit for video games, where you want to use Data Oriented Design for efficiency (look it up if you are curious, but don't worry for now), but you can still learn the basics of game programming in any language, so I wouldn't discard Java or C#.

May I suggest something simpler like Lua? There is a nice little framework called love2d, if you want to avoid the high level that an engine gives you but keep your sanity by not trying to learn both game programming and a low level language at the same time. A framework provides you with a game loop and some functions to draw, handle input, etc. You still need to code your game logic, and can even create an engine on top without getting overwhelmed by so much low-level stuff.

There are other things you your use, like Python, if you want to focus on gameplay, but I'd choose Lua, which is used in professional game programming as well. I would personally leave the lowest level stuff for later, unless you are 100% sure you want to become an engines programmer and don't really care about making actual games.

Definitely DO NOT START WITH RUST. While Rust is something to keep an eye on in the future, Rust is a very difficult language to learn. It mixes functional programming (which is a big milestone by itself) with good memory handling patterns, which sounds great in paper but once you pull your hair out by such a strict compiler that doesn't let you make (almost) any mistakes, you might get frustrated and demoralised. It will add too much friction to your game programming learning. Leave it for when you pick C++ and get tired of a messy language that also lets you shoot your own foot too much. Rust will teach you how to manage memory and safe concurrency, which is important for modern video games. But, by all means, don't start with Rust, you'll have too much on your plate.
 

Ravens_Shadow

one foot in front of the other
FASTLANE INSIDER
Read Millionaire Fastlane
I've Read UNSCRIPTED
Summit Attendee
Speedway Pass
Oct 2, 2012
868
3,671
886
Cary, NC
Do you want to make games or do you want to get better at Java?

If you want to make games, go download Unity or Unreal and build/release something this weekend.
Hopefully you aren't suggesting to release something to sell.

My suggestion, if you go UE4, learn C++. If you go Unity, learn C#. Forget the other languages for now. If you want to learn the future, look up Odin. It's what we are now using for our middleware that we sell to AAA game studios. Though it wont be mainstream for quite some time i'm guessing.
 

JScott

Legendary Contributor
EPIC CONTRIBUTOR
FASTLANE INSIDER
Speedway Pass
Aug 24, 2007
4,171
7,828
1,731
A good introduction is "The C Programming Language" by K&R. It's a bit dated, but it's the seminal work on the topic. These are the guys that developed Unix. You can always go from that to the more modern standards and topics.

Alternatively, I've heard good things about 21st Century C. It conforms to the more modern standards and includes material on databases and web servers, etc.

Just so I'm clear, C isn't the end all be all of programming languages (every programmer should know several, anyway). It's the stepping stone to learn the fundamentals (data structures, pointers, memory management) of computer science and engineering, without worrying about all the complexity and overhead of C++.

Don't get too drawn in by books. Just learn the basics and then start trying to grok a real code base. You can check out the Quake or Doom source code on github to see what real games (cutting edge for their time) looked like.

Once you have a foundation, switch to something like C++, which is the language du jour for modern engines. You'll be able to pick and choose which features you need, because you'll understand why they were implemented.

As @Smuggo alluded to, always be sure to write high quality code. Publish it to a public form like github, and be sure to build a portfolio and a name for yourself within some programming community. Network with other great programmers, and seek out opportunities. Maybe game development works out, maybe it doesn't. But if you follow this approach, you'll be 22 with a really solid jump start on creating a business with other kick a$$ devs, or getting a solid job to spring board your entrepreneurial aspirations down the line.
Just my $.02, but completely agree with this...

If you're going to go down the development path, having at least a cursory understanding of C will provide you understanding of a lot of things that programmers should, but don't, understand.

Better yet, get familiar with Assembly coding, and you'll really start to understand the basic concepts of how to code efficiently. Things like processor control, memory cycles, low level threading, race conditions, pointers, controlling the stack, etc. I don't know many good application developers who don't have a detailed understanding of these things (whether or not they actually program in C, Assembly or a higher level language).

I'm not saying you should become an Assembly or C developer, but at least understand all the features and hooks these languages expose. You can't do that without understanding how the internals of a machine work, so this will force you to gain a better understanding.

After that, learn to program a game loop in C and write a couple really basic games (don't even have be graphics related). Once you learn the basics of how the machine works and the basics of game loops, the rest of the decisions you make around programming languages really won't matter; you'll be able to move from one language (or platform) to another with relative ease.
 

Don't like ads? Remove them while supporting the forum. Subscribe.

splok

Gold Contributor
FASTLANE INSIDER
Read Millionaire Fastlane
Summit Attendee
Speedway Pass
Jul 20, 2012
644
1,078
388
Hopefully you aren't suggesting to release something to sell.
Imo, the selling isn't the important part at this stage, but there are lessons to be learned from releasing that quickly that most aspiring game developers never learn. A few examples:
  • intelligently scoping based on incredibly limited resources
  • focusing on what really matters instead of getting stuck in endless timesinks
  • the value of getting your game in the hands of users
  • actually going through the process and pushing the launch button
However, just for argument's sake, if you took two equivalent noob/aspiring game devs and had one work for one year on his first project and had the other release one game per week for a year, both starting with the full intention of releasing and monetizing their products, I would put my money on the guy with the 50 game portfolio every time. Many would clearly be micro-projects, and early on, they would likely be pretty terrible, probably interactive toys at best, but that's a lot of reps. On the other hand, the typical case of the one year project is that it never gets released at all.

This is specifically about game devs of course, but I would make the same argument for general entrepreneurship too.
 

loop101

Silver Contributor
Read Millionaire Fastlane
I've Read UNSCRIPTED
Speedway Pass
Mar 3, 2013
639
984
363
If you want to make games that you will market yourself, your greatest asset will be your *brand*, not technical wizardry. Technical wizardry is great if you have it, but a fun game does not have to have it. If you want to get a job making games, then technical wizardry will be a prerequisite.

I would suggest making a simple game with an interesting theme. Make it in HTML5, and you could be programing it within a week, and releasing it in 2 months. The technical wizardry route could take you *years* to release a game. The Game Dev Underground game makes a living making small HTML5 games, he has 0 wizardry. He did use to work in marketing, and understands it well.

I know some people in the game industry. They were always gamers first, computer people second. They are far more interested in a game's emotional beats than its frames-per-second. Constraining yourself to a simple tool will force you to focus on the game elements, rather than the technical elements. If you consider game design first, you may find whether you like programming games, or programming difficult problems.

Back in 2013, a TV show gave a pro filmmaker two Barbie Cam Girl dolls, to see how good a short he could make with them. Using one to film, and the other star in it, he made "Bad Day Barbie!". Candy Crush is a clone of the 2001 web game Bejeweled. Game engines like TWINE (text adventures) and Phaser (2D HTML5) are very simple, and allow you to start making games quickly. More creativity, less wizardry, is a viable path.

I mention this in case you primarily want to make games as soon as you can, and many of the suggestions here might require a lot of learning before you will be competent in them.

Game Dev Underground:
View: https://www.youtube.com/watch?v=RRT4XFtHbTU


Zenva Phaser 3 Course:
View: https://www.youtube.com/watch?v=eN4hr8Vum-4


Barbie Cam Short:
View: https://www.youtube.com/watch?v=HrOwLLAp6Wk


Barbie Cam Making Of:
View: https://www.youtube.com/watch?v=9VS3C183G8g
 
OP
OP
SputnicK

SputnicK

Contributor
I've Read UNSCRIPTED
Dec 23, 2017
18
24
25
Update Thread 1/23/19-1/30/19 (WK1):
Back with my first update! I am sorry I have not responded to everyone, I sincerely appreciate all the feedback. It has been very valuable to me, all of it. As I said in my earlier post, I have decided to focus on learning C as I believe that it teaches fundamentals of programming methodology in a way that will be foundational to utilizing higher-level languages later down the road. At that point I can upgrade to something better oriented for long-term development. With that said, I have my central efforts below listed:

1) I watched and took notes on lecture 1, 2, 3, and 4 of this Stanford lecture series on "Programming Paradigms" centered around the language C. This has been valuable to me as the professor explains how C operates from the smallest element of memory management. I would be lying if I said I understood all of it, but I understood enough to get the basic meaning behind most of what was covered. This has been a valuable asset and I plan on continuing it.

2) I began writing a text adventure (brilliant idea I know) in C using an online compiler called OnlineGBD. I wish I could say I finished it but I am still struggling with writing modular code and using pointers and proper memory management. I also just realized that I basically need to learn the proper algorithms around implementing decision trees as that is basically what a text adventure is as the player decisions scale exponentially and become more and more convoluted. Here is the code, look at it if you must, but I have yet to really get anywhere with it.

3) I have started to reference and read through the excellent C resource on Tutorials Point. It, along with Stack Overflow, has helped me numerous times in explaining basic concepts (such as copying char arrays and using pointers correctly, for example). There is an adage that "Google already has answered all your questions" and that holds true for me 98% of the time when debugging or problem-solving. I plan to hone in on actually applying knowledge by working on projects and using these resources when things don't go as planned (and things never go as planned).

Plan for next week 1/30/19-2/6/19:
I would like to watch four to six more lectures on the Stanford series, but focus less on understanding everything and more on getting an idea of the basic methodology being presented. I think I am trying too much to memorize how everything works, when really I should focus on learning the basic idea and refresh myself on the concept if and when I need to implement it in a project. I also aim to have my Text Adventure project roughly completed, implementing modular code, a scalable algorithm, with combat and a few addition interactive elements if possible. I think I will post it on r/reviewmycode to get feedback once it is completed. Last of all I plan to continue looking through code examples and guides on Tutorials Point. As I said it an insightful reference manual.

I hope I am making the right first steps here! I will back with another update next week on 2/6/19. As always, I am open and eager for honest feedback. : )
 
Last edited:
OP
OP
SputnicK

SputnicK

Contributor
I've Read UNSCRIPTED
Dec 23, 2017
18
24
25
Update Thread 1/30/19-2/6/19:
I have been struggling to no end. The lecture series I have been following is starting to go over my head. And I am not doing so well on my first project in C. In more detail below:

1) I watched lecture 5, and 6 of the Stanford lecture series. The professor is going into detail on topics such as linear search and the stack, which are things I probably shouldn't attempt to tackle yet. I wasted a few days trying to understand these lectures, to little success. It's hard for me to take interest, my eyes just glaze over watching this series at this point. I take the L for this one.

2) I decided the best way to learn how to create a proper text adventure was to follow a tutorial, and I found this one which I've about halfway completed. I think text tutorials suit me more than formal lecture series, to be honest. You live and learn. I am going to use what I learn from this tutorial series to actually create a finished project. (hopefully) I am tired of just consuming content instead of creating it.

Plan for next week 2/6/19-2/13/19:
I did not make the progress I desired this week. Not going to sugarcoat it. I think I got too caught up in passive consumption instead of active creation. But I have a short attention span. I like to create things more than just learn about them. I tried this week to just follow tutorial series but quickly became bored. And instead of pivoting I just tried to persevere through it.

I think next week I need to focus 100% on programming. No lecture series. No BS. Just learning and fooling with code. And hopefully I can finish something, however small or insignificant. I am embarrassed how much time I wasted this week. I had some personal issues to resolve and that was part of the problem. Expecting next week to be different, for my sanity if nothing else.
 

404profound

Platinum Contributor
I've Read UNSCRIPTED
Speedway Pass
Aug 27, 2017
1,325
2,709
662
Desert of Desertion
Update Thread 1/30/19-2/6/19:
I have been struggling to no end. The lecture series I have been following is starting to go over my head. And I am not doing so well on my first project in C. In more detail below:

1) I watched lecture 5, and 6 of the Stanford lecture series. The professor is going into detail on topics such as linear search and the stack, which are things I probably shouldn't attempt to tackle yet. I wasted a few days trying to understand these lectures, to little success. It's hard for me to take interest, my eyes just glaze over watching this series at this point. I take the L for this one.

2) I decided the best way to learn how to create a proper text adventure was to follow a tutorial, and I found this one which I've about halfway completed. I think text tutorials suit me more than formal lecture series, to be honest. You live and learn. I am going to use what I learn from this tutorial series to actually create a finished project. (hopefully) I am tired of just consuming content instead of creating it.

Plan for next week 2/6/19-2/13/19:
I did not make the progress I desired this week. Not going to sugarcoat it. I think I got too caught up in passive consumption instead of active creation. But I have a short attention span. I like to create things more than just learn about them. I tried this week to just follow tutorial series but quickly became bored. And instead of pivoting I just tried to persevere through it.

I think next week I need to focus 100% on programming. No lecture series. No BS. Just learning and fooling with code. And hopefully I can finish something, however small or insignificant. I am embarrassed how much time I wasted this week. I had some personal issues to resolve and that was part of the problem. Expecting next week to be different, for my sanity if nothing else.
It sounds like you may have taken C fundamentals for granted. Following a tutorial is one thing, but you won't retain an understanding of why the code is doing what it's doing that way - especially if you don't have a firm understanding of the fundamentals. I fell into the same trap when I first got into javascript, and JS is far easier than C. Once I focused on mastering the fundamentals the rest came pretty easy.
 
OP
OP
SputnicK

SputnicK

Contributor
I've Read UNSCRIPTED
Dec 23, 2017
18
24
25
It sounds like you may have taken C fundamentals for granted. Following a tutorial is one thing, but you won't retain an understanding of why the code is doing what it's doing that way - especially if you don't have a firm understanding of the fundamentals. I fell into the same trap when I first got into javascript, and JS is far easier than C. Once I focused on mastering the fundamentals the rest came pretty easy.
I definitely am missing some of the fundamentals, at least when it comes to memory management. IDK what to do besides follow some very basic tutorials or purchase a book. Any ideas? I was thinking that messing with code might be a good idea to get a better idea of the language, but perhaps that learning should be supplemented with simple tutorials so that I really understand it.
 

404profound

Platinum Contributor
I've Read UNSCRIPTED
Speedway Pass
Aug 27, 2017
1,325
2,709
662
Desert of Desertion
I definitely am missing some of the fundamentals, at least when it comes to memory management. IDK what to do besides follow some very basic tutorials or purchase a book. Any ideas? I was thinking that messing with code might be a good idea to get a better idea of the language, but perhaps that learning should be supplemented with simple tutorials so that I really understand it.
I don't know anyone personally who works in C, but I have seen word floating around from C developers recommending these books:

Prata’s C Primer Plus 6th Edition (or whatever the latest edition is when you read this)

Kernighan & Ritchie’s The C Programming Language 2nd Edition (aka K&R2)

I think what really helped me was using new concepts to build simple things. Once I was able to apply a concept to my own idea it became clear how it worked.. or StackOverflow made it so.
 

Rabby

Gold Contributor
FASTLANE INSIDER
Read Millionaire Fastlane
I've Read UNSCRIPTED
Speedway Pass
Aug 26, 2018
753
1,867
549
Florida
For a text-based adventure I would use something simple and friendly, like Ruby or Python or Lua. I know you want to learn C, but it's worth noting that you don't need memory management and low level control for a text game.

What you may want to do, eventually, is write the things that need to be fast in C, and glue them together with one of the three above (or something quick and high level).

PS: Whatever language or project you do, try to do a little every day. If 2-3 days go by and you have to go back to it, the load on your brain is heavier. Even if it's only 15-20 minutes on a really busy day, play with code and do something. Once you've been writing code for a few years, you can walk away for a few months and your hands will still know how to code without you, but right now you need to keep it fresh in mind.
 
OP
OP
SputnicK

SputnicK

Contributor
I've Read UNSCRIPTED
Dec 23, 2017
18
24
25
For a text-based adventure I would use something simple and friendly, like Ruby or Python or Lua. I know you want to learn C, but it's worth noting that you don't need memory management and low level control for a text game.

What you may want to do, eventually, is write the things that need to be fast in C, and glue them together with one of the three above (or something quick and high level).

PS: Whatever language or project you do, try to do a little every day. If 2-3 days go by and you have to go back to it, the load on your brain is heavier. Even if it's only 15-20 minutes on a really busy day, play with code and do something. Once you've been writing code for a few years, you can walk away for a few months and your hands will still know how to code without you, but right now you need to keep it fresh in mind.
You are so right, being inconsistent is absolutely a problem for me. I go a few days at a time where I don't program and then have to make up for it on the back-end. I suppose I should make it a daily ritual, perhaps first thing in the morning. I know programming is the kind of activity that really requires dedicated time to focus and get into the rhythm and I tend to get very distracted.

As for writing the game in the C language is absolutely an obstacle but it's one I'm willing to deal with in the short term. If I face more challenging obstacles I would think about using Java instead, which I am very familiar with compared to C.
 

Create an account or login to comment

You must be a member in order to leave a comment

Create account

Create an account on our community. It's easy!

Log in

Already have an account? Log in here.


Fastlane Insiders

View the forum AD FREE.
Private, unindexed content
Detailed process/execution threads
Monthly conference calls with doers
Ideas needing execution, more!

Join Fastlane Insiders.

Sponsored Offers

Lex DeVille's - Advanced Freelance Udemy Courses!
-- HALLOWEEN SPECIAL STARTS TODAY! Get any of my courses at Udemy's current best price through Friday! Use code: HALLOWEEN Use any of the links...
Top Bottom