Joe Bulfer
Joe Bulfer
  • 23
  • 148 699
I switched from Python to C
REUPLOAD - audio was messed up the first time, apologies for that.
Github Repo for Python Space Invaders game
github.com/Joe-Bulfer/Orc-Blaster-V2
Github Repo for Raylib Game
github.com/Joe-Bulfer/raylib
My website for articles/notes, which some have an accompanying video to.
joebulfer.com/
I did not actually draw the cat (which is the player). I found that on a tutorial thanks credit to Karl Zylinksi.
www.youtube.com/@karl_zylinski
#gamedevelopment #gamedev #python #raylib #programming #software #cprogramming #cpp #computerscience #softwaredevelopment #coding
Переглядів: 12 070

Відео

Vim/Neovim Tutorial in 3 Minutes
Переглядів 1,3 тис.День тому
See my previous article/tutorial to learn more about Vim. joebulfer.com/Why Learn Vim/ Here is a great cheatsheet. vim.rtorr.com/ Getting Started with Neovim I recommend Kickstart github.com/nvim-lua/kickstart.nvim Tutorial for kickstart.nvim ua-cam.com/video/m8C0Cq9Uv9o/v-deo.html #neovim #programmer #softwaredevelopment #coding #cprogramming #softwareengineer #software #computerscience #cpp
Why I Prefer C Over C++
Переглядів 6 тис.14 днів тому
If you liked this one, here is another spicy take of me criticizing Rust. joebulfer.com/Criticism of Rust/ #programming #software #cprogramming #cpp #computerscience #softwaredevelopment #coding
Easily Build Websites with Mkdocs and Other Static Site Generators
Переглядів 3124 місяці тому
My Personal Website joebulfer.com/Welcome Material For Mkdocs squidfunk.github.io/mkdocs-material/ Giscus Comment System github.com/giscus/giscus Standard Markdown Guide www.markdownguide.org/basic-syntax/ #javascript #webdevelopment #webdesign #programming #programmer #softwaredeveloper #website #softwareengineer
How to Encrypt Your Drives
Переглядів 8995 місяців тому
00:00 Overview 00:28 Sudo/Root Warning 02:06 Backups 03:32- Loop Devices Explained 05:34 Luks Formats 07:05 Tutorial Accompanying Article/Tutorial For This Video joebulfer.com/Linux/Encrypting Hard Drives Underlying Linux Kernel Framework for Cryptsetup en.wikipedia.org/wiki/Device_mapper #linux #security #programming #softwareengineer #privacy #cia #fbi #softwaredeveloper #programmer #programm...
Reviewing The Most Popular Linux Distros
Переглядів 2,8 тис.6 місяців тому
My Personal Website joebulfer.com/Welcome #linux #linuxforbeginners #gamingonlinux #softwareengineer #programming #technology #tech #ubuntu #linuxmint #fedora #archlinux
Every Programming Language Explained
Переглядів 9 тис.6 місяців тому
0:00 Intro 0:19 Java 3:33 Python (yeah it's supposed to be 2 my bad) 5:01 Javascript (should be 3 my bad guys) 6:41 Go 9:08 C# and .NET 12:48 Employment 13:25 Usage Statistics My Personal Website joebulfer.com/Welcome Java - James Gosling and Lex Friedman Interview ua-cam.com/video/IT Nrr3PNI/v-deo.html Python - Jet Brains Survey www.jetbrains.com/lp/devecosystem-2023/python/ Go - The Why of Go...
From Apache to NodeJS, and What Comes Next
Переглядів 1126 місяців тому
0:00 Intro 0:24 Apache 1:51 NGINX 3:18 NodeJS 6:14 Criticism of NodeJS 8:04 Javascript/NodeJS Improvements 8:40 Go - Sorry next video guess you'll have to subscribe 🤷 My Personal Website joebulfer.com/Welcome Ryan Dahl's NodeJS Talk from 2010 ua-cam.com/video/M-sc73Y-zQA/v-deo.html Igor Sysoev's NGINX Talk from 2019 ua-cam.com/video/5m11ofIKFIA/v-deo.html Animated Satire Video From 2012 ua-cam....
I learned how Linux boots, let me show you
Переглядів 2377 місяців тому
0:00 Boot Directory 0:36 Explanation 1:29 Steps Listed 1:55 Steps Visualized 2:31 Process Tree (pstree) 2:51 Outro My Personal Website joebulfer.com/Welcome #linux #linuxadministration #softwareengineer #programming #programmer #cybersecurity #softwaredevelopment #softwaredeveloper
I Found a Game Written in Rust
Переглядів 4,7 тис.7 місяців тому
My Personal Website joebulfer.com/Welcome Veloren Website veloren.net/ Veloren Gtihub Repo github.com/veloren/veloren Veloren ECS Design book.veloren.net/contributors/developers/ecs.html #gamedev #rustlang #veloren #programming #softwareengineer #gamedevelopment #gamedesign #softwaredeveloper #softwaredevelopment #bevy
Why and How to Learn Vim/Neovim
Переглядів 7 тис.7 місяців тому
My personal website joebulfer.com/Welcome Vim and Neovim Usage Survey 2023 survey.stackoverflow.co/2023/#most-popular-technologies-new-collab-tools #programming #programmer #vscode #softwareengineer #softwaredeveloper #linux #vim #neovim #computerengineering
Linux Terminal Tips, Favorite Commands, and Advice
Переглядів 1,6 тис.7 місяців тому
My personal Website joebulfer.com/Welcome Study Linux Website (Mostly the same notes as my personal website above) joe-bulfer.github.io/studylinux/ Join my Linux Discord discord.com/invite/MZsatzxa
Why I Use Inkscape, And You Should Too
Переглядів 1,6 тис.7 місяців тому
My personal Website joebulfer.com/Welcome #inkscape #graphicdesign #photoshop #opensource #linux #graphicdesigner #logodesign #logo #adobe #adobeillustrator #adobephotoshop #adobeillustrator
The Rise of Linux
Переглядів 61 тис.7 місяців тому
Personal Website joebulfer.com/Welcome Script of Video with Links to Sources joebulfer.com/Linux/The Rise of Linux Stat Counter gs.statcounter.com/os-market-share Steam Statistics www.gamingonlinux.com/steam-tracker/ #linux #linuxgaming #software#softwareengineer #computerscience #computers #programming #programmer #computerknowledge
How to Learn Assembly Language (And Why)
Переглядів 2,9 тис.7 місяців тому
Accompanying Article On My Website joebulfer.com/How to Learn Assembly Language (And Why) Web Based LC-3 Assembler and Floating Point Practice lc3tutor.org/ Github Repo for LC3 Tutor github.com/wchargin/lc3web LC-3 Desktop Assembler Github Repo github.com/chiragsakhuja/lc3tools #computerscience #softwareengineer #hardware #cpu #assemblylanguage #x86 #riscv #programming #programmer #software #go...
I Found The Best Note Taking App (And Why It Doesn't Matter)
Переглядів 2,7 тис.7 місяців тому
I Found The Best Note Taking App (And Why It Doesn't Matter)
The Forgotten Way of Programming
Переглядів 3,4 тис.9 місяців тому
The Forgotten Way of Programming
Why You Should Learn Go
Переглядів 13 тис.9 місяців тому
Why You Should Learn Go
Stop Writing Javascript
Переглядів 1,4 тис.10 місяців тому
Stop Writing Javascript
I Found an Operating System Written in Go
Переглядів 3,8 тис.10 місяців тому
I Found an Operating System Written in Go
Lessons From TempleOS
Переглядів 1,6 тис.Рік тому
Lessons From TempleOS
What All Keyboards are Missing
Переглядів 950Рік тому
What All Keyboards are Missing
Which is Better? ErgoDox EZ and Kinesis Advantage 2 Comparison
Переглядів 11 тис.Рік тому
Which is Better? ErgoDox EZ and Kinesis Advantage 2 Comparison

КОМЕНТАРІ

  • @joebulfer
    @joebulfer 47 хвилин тому

    i might not have gotten to all comments ( didn't) but thank you guys for watching and if you have questions comment here directly. actually doesnt matter i see it anywhere

  • @madduckling4436
    @madduckling4436 3 години тому

    Listen guys I'm stupid I'm new to all this crap I just come from your average game engines... I wanna ask in terms of sprite switching... why not just make a file for each frame of the sprite put in them in an array and iterate between them... yes this might be a logical error on my end I want you to correct and tell me why its wrong, thanks in advance.

    • @joebulfer
      @joebulfer Годину тому

      tldr - ur good bro thats a good question. idk First off, I don't really know much myself, probably no more than you. I'm just some guy on the internet who is too young to act as experienced as he is. Now you are asking about putting each frame in a file, creating a pointer to each file, and having an array of pointers to files. Nothing wrong with that from my perspective. It may even be more intuitive depending how you implement it. I personally do not like my current method of having a single png which is aligned with either rows or colums which you have to be aware of, for example, if a 5x5 table or an explosion in a image file, you would have to pass in these values into a function, so col and row would be parameters. This is possible, as the other form, a single row, basically one dimensional (1x999...) is possible, well then just pass in 1 for row and 999... for col. Why not have each frame of an animation in a file? Who knows. By convention it seems, programs such as Libresprite/Aseprite use the single file approach, and make it quite easy to do so with practice. Then it is up to the programmer to implement his function. here is an example in raylib ```c void animate(Image **a_explosion, int col, int row) ``` Image is defined in raylib..h or c or somewhere and **a_explosion is supposed to be an array of something. I forget. I'm done now.

  • @rnayabed
    @rnayabed 2 дні тому

    when i was writing c++ for a project, it felt the same. there are a bunch of different ways to do the same thing and it made me waste time trying to find out "what is the best way". eventually i gave up, just used the one which looked most intuitive to me, and then wait for others to criticize/fix it.

  • @h44k4
    @h44k4 3 дні тому

    try C3 :)

  • @SportProgramming
    @SportProgramming 3 дні тому

    Bro u went from baby toys to what even companies are scared to use lol. Should had used monogame with c sharp. Performative snd scaleable.

    • @joebulfer
      @joebulfer 2 дні тому

      C sharp is cringe imo

  • @rusi6219
    @rusi6219 3 дні тому

    Rewrite it in C

  • @pete-i7p
    @pete-i7p 3 дні тому

    Assembly and C are all you really need.

  • @scottjackson4558
    @scottjackson4558 3 дні тому

    thank you, very good video, but please get a better mic or make sure you have the mic's volume down. it's peaking a lot

    • @joebulfer
      @joebulfer 2 дні тому

      Once i monetize the channel and get some dough, sure thing

    • @scottjackson4558
      @scottjackson4558 День тому

      @@joebulfer you make good content btw i subscribed :)

  • @lazyh0rse
    @lazyh0rse 3 дні тому

    Not to be that guy, but I see no point in going C if you are building an indie game, no matter how much effort you put, you won't hit a performance ceiling that easy. I would worry about getting productive to ship fast rather than worrying about the edge cases where you can't get around performance issues with python.

    • @SportProgramming
      @SportProgramming 3 дні тому

      Just go with monogame and c#. But i think he want to learn, which this is much better.

    • @joebulfer
      @joebulfer 2 дні тому

      The other comment is right, it's about learning and always will be. I'd like to become proficient enough where I can atleast get a handle on anything a 2d game engine can do. 3d I won't worry about.

    • @lazyh0rse
      @lazyh0rse 2 дні тому

      @@joebulfer You are right, I was just looking at the issue from a practical standpoint, I think C is a great language, but it quickly gets messy the more you add code. Which eventually will make it really hard to make changes and not fun to code in. I know this is just me being inexperienced, hopefully you get something out of it. thanks

    • @joebulfer
      @joebulfer Годину тому

      @@lazyh0rse Are you considering's C lack of polymorphism, encaplulation, or inheritance? These are just the "three pillars of OOP" and perhaps 2 of them are general design patterns that naturally emerge anywhere. Just my opinion but inheritance is not one of them.

    • @joebulfer
      @joebulfer Годину тому

      @@lazyh0rse Or inheritance does become necessary after a certain size of codebase. I woulnd't know.

  • @sajeucettefoistunevaspasme
    @sajeucettefoistunevaspasme 4 дні тому

    "I switched from a blimp to a car"

    • @joebulfer
      @joebulfer Годину тому

      yeah Hindenburg happened I'm good

  • @Copmi-vq6kz
    @Copmi-vq6kz 5 днів тому

    I switched to lua to C++

    • @joebulfer
      @joebulfer Годину тому

      I switched from lua to awk

  • @awesomedavid2012
    @awesomedavid2012 5 днів тому

    Respect

  • @broadestsmiler
    @broadestsmiler 5 днів тому

    Now that you've switched to C, can you call yourself Joe Buffer?

  • @dk4kja8
    @dk4kja8 6 днів тому

    btw C uses automatic memory management in the way of the stack, if you want to actually do low level programming make a full game in assembly :D

    • @joebulfer
      @joebulfer Годину тому

      I've considered. I would opt for RISC-V. Even drawing a pixel on the screen would be cool.

  • @wizaaeed
    @wizaaeed 7 днів тому

    flame bait: Going back from Python to C or C++ is like going back from AR-15 to 1880s single shot rifles, "just cause they're easier/faster to manufacture". C developers should really get out & admit they're just copying their neighbor's code & acting like they understand it 😂

    • @bitlong4669
      @bitlong4669 3 дні тому

      lol , I like that. Still will stick with C. It just works.

    • @rusi6219
      @rusi6219 3 дні тому

      Write some C first then you'll change your mind

    • @joebulfer
      @joebulfer Годину тому

      easier/faster to manufacture? that's good right? idk i missed the analogy

  • @xXaymanXxBG
    @xXaymanXxBG 8 днів тому

    flutter >>>>>

  • @dyslexicsteak897
    @dyslexicsteak897 8 днів тому

    TL;DR at the bottom. C being close to "the hardware" is a misconception. C has no idea what "the hardware" is supposed to be, and it comes with its own set of assumptions and it has its own rules and set of operations, collectively known as the C abstract machine. The C abstract machine is what is specified and standardised in the ISO or ANSI C standards. Verbatim, the C standard states "The semantic descriptions in this International Standard describe the behavior of an abstract machine in which issues of optimization are irrelevant." Your C compiler's job is to take a valid standard C program, determine what abstract machine operations it performs, and then translate that to the given compilation target. Compilers make the assumption that your program is valid, i.e. all operations it performs exist in the C abstract machine, otherwise known as not containing undefined behaviour, and optimise them based on this assumption. C inherited much of its worldview/memory model from B or BCPL, ultimately, most types are thin wrappers over "int" which is the everything-type, essentially (used t. If you look at old pre-standard C (otherwise known as K&R C) you'll find types are completely optional, just like B and BCPL. The automatically assumed type as always "int" because that was almost certainly what you wanted. You'd only really want "char" for strings otherwise. As long as your program is valid and the compiler doesn't contain any bugs, it is free to "mutilate" your program in any-which-way it pleases to get you the best runtime performance, as long as (observably) the outcome is the same. Assembly also is not safe here; the CPU itself actually does the same to help you out even further. Modern CPUs turn your code into something completely unrecognisable before actually executing anything, for example: For compilers: 1. Redundant operations are removed 2. Load/store pairs are removed 3: Compilers are capable of somewhat primitive malloc elision and optimisations around dynamic memory allocation 4. Compilers can inline functions into each other, outline common code snippets into functions, roll or unroll loops, autovectorise loops 5. Functions can be prevented or allowed to cross page boundaries depending on how often they are called 6. Compilers can use profiling information to derive hot/cold or likely/unlikely functions or branches 7. Cold branches can be tossed to the bottom of functions to keep hot branches in instruction cache near the branch instruction 8. The "strength" of operations can be reduced by a compiler, transforming a more expensive operation to a cheaper one, such as expressing multiplication or division through bit-shifts with immediate values 9. Compilers can move code out of a loop if it results in the same value each time 10. Compilers can use constant folding and eliminate redundant calculations 11. Compilers can replace expressions with the result evaluated at compile-time 12. Compilers with target CPU information can reorder instructions to tailor to how the pipeline of said CPU is designed 13. Compilers can swap or eliminate nested loops to reduce branching for the CPU to keep track of and result in a more predictable memory access pattern For CPUs: 1. Handling of instructions is pipelined, fetching, decoding, and executing are interleaved. 2. Instructions are actually macro-operations, and certain macro-operations that fit a pattern can be fused or transformed to something more efficient. 3. Macro operations are converted to micro operations, which actually direct the CPU to perform things. 4. Certain micro-op patterns are also detected and converted to more efficient ones. 5. Micro-ops are reordered and scheduled to better utilise hardware and expose inherent parallelism, modern CPUs can have reorder buffers as big as 512 micro-ops. There is duplication of hardware such as ALUs, often with different capabilities to save on silicon (not all ALUs are created equal and support the same operations) and micro-ops are dispatched to execution ports. 6. Small and tight loops are detected and stored in a special cache buffer so that the micro ops for said loop are always quickly in reach. 7. Data dependencies and hazards are identified and the CPU maps architectural registers to actually physical registers which vastly outnumber the architectural ones to better parallelise the workload. This is called register renaming and the mapping is kept in a register alias table. 8. Branch history allows the CPU to detect branch patterns and make predictions to execute a branch speculatively before it is actually reached and to prefetch all the data it requires. IF that branch is taken then the instructions executed are "retired" (committed), else, results are discarded, and through the branch order buffer the CPU state is rolled back. Branches that still have not been retired are known as "in-flight" and modern CPUs can support tens of them. 9. Accesses go through load buffers and store buffers to merge them and use less bus. 10. Load/store pairs can just be directly forwarded, so a datum that is stored to memory or a register that another visibly loads later can be directly transfered in-CPU without touching any registers or memory at all. 11. Data dependencies can be resolved in-pipeline to bypass what would normally be a pipeline hazard, for example an add instruction's result can be forwarded directly to a conditional jump that follows it that has just been decoded, essentially passing the data forward in time. 12. Although Intel is phasing this out because it's somewhat stall (wait) dependent, CPUs can perform simultaneous multi threading, issuing (allocating) instructions from more than 1 thread in 1 cycle where the 2 threads execute on the same engine (ports, ALUs, etc) but hold entirely independent state (register file, etc). 13. Data is prefeteched for predictable memory access patterns to make sure data are available Note: The mentioned techniques are actually really old, and the list is not comprehensive. IBM has been using these since the 60s in their large machines (giant mainframe rack, probably liquid cooled, if you add the punchcard reader, numerous tape drives, teletypewriters, etc it is truly a room-scale setup), and they began coming to microprocessors in the 90s. TL;DR: Nobody is really close to the hardware on modern high-performance CPUs since the early 90s, not even assembly. The compiler (if any) and the CPU are mutilating your code beyond recognition no matter what you use. The final "program" that is executing is not necessarily performing the same operations, at the same time, in the same order, on the same data, as what you wrote, it only has to appear that way, and when it doesn't appear that way and is observable you get things like Spectre and Meltdown.

    • @joebulfer
      @joebulfer 3 дні тому

      You are probably right and thank you for the very detailed comment. Though I still believe a person will learn slightly more and be more inclined to continue to lower levels if they learn C. To clarify, though I'm unsure how much the stack and heap memory literally translates to locations in physical hardware, but I just have a feeling that allocating memory with C will incline a person to head to "lower levels". This was definitely a quicker video I wrote the script for and editied in a single day, nearly a single morning, so I didn't consider many of the things I said. This just has me thinking of posting on places like Stack Overflow and the quickest way to get the most detailed and correct answer, it is posting a blatantly wrong answer! Not to say I am "blatantly wrong" but not exactly correct to say a person even well versed in writing C will have knowledge of the many hardware concepts you have mentioned.

    • @MrDavibu
      @MrDavibu 2 дні тому

      While your points are true(except for mixing up concurrency with parallism). C is still a low level language and close to hardware. The CPU is seen as one unit the inner workings is not relevant for being low level. The CPU is meant as a unit accepting instructions and executing them. What you describe on the CPU are rather execution side effects, the CPU is optimized to execute the instruction it gets efficiently, but the execution stays semantically the same. For compilers: you as a programer decide what optimization the compiler uses if you want these kind of optimization go for it, but they are not enforced like you claim. It is highly recommendable to activate compiler optimizations, but activly understanding code runtime for non-optimized builds is much more important in practice. But also for optimized code, it stays semantically the same(the logic stays the same, not the exact execution). You could add scheduling (context switches), virtual memory (MMU,TLB, Cache-lines) and cache invalidations on top. But it still wouldn't change that C is a low level language, just the execution enviroment changed. C is used in many examples how computer work, from virtual memory, scheduling, compiler optimization, assembly programming and even CPU instruction execution. These things are mainly explained in correlation to C.mmendable to activate compiler optimizations, but activly understanding code runtime for non-optimized builds is much more important in practice. But also for optimized code, it stays semantically the same(the logic stays the same, not the exact execution). In addition C is often taught in a performance minded fashion, from stack vs heap, to memory sharing through pointers, to call by value vs call by reference(pointer). And except for structs, unions and arrays you are up to yourself defining data-structures. You learn how arrays, structs and unions would look like in memory. It's also easier to write cache-aware algorithm whereas higher level language not having memory layout promises or alot of data being wrapped with meta-data. The same reasoning arises for batching in I/O task, where knowing the exact memory layout is beneficial. In alot of higher level languages you have to use quirky language features or domain specific concept that the language designer found suitable. But I also wanna add, while I like C alot more than C++, I think C++ has a lot of nice features, from STL,Templates, RAII to namespaces, constexpr, smartpointers and alot more. But alot of C++ codebases are simply written in an awful C++ style.

  • @nomannian
    @nomannian 8 днів тому

    my story is the same as urs, I also started to create games using pygame but found the reality. So I switched to c++ and now making games with OpenGL in C++

  • @UnrealCatDev
    @UnrealCatDev 8 днів тому

    You have died but reborn

  • @mjpthetrucker9485
    @mjpthetrucker9485 8 днів тому

    If C and C++ ever get a modern easy to use package manager they'd rule the day I swear.

    • @slappy_chimp
      @slappy_chimp 8 днів тому

      agreed I long ago troed C++ was ok but installing or getting libraries hurt my head.. coming from a humble JS background Python, Go, Rust were nicer to around because of ease of extension

    • @HermesSilva-xt6dt
      @HermesSilva-xt6dt 7 днів тому

      @@slappy_chimp right?? What got me into GO at first was the easy package manager, just "go mod tidy" and everything was ready... But then I understood that if I could master the C++ linking, then I would master them all... To this day I haven't mastered it yet.

    • @combinesoldier14_real
      @combinesoldier14_real 7 днів тому

      Vcpkg exists, though it's definitely not as high quality as pip or cargo

    • @keks137
      @keks137 7 днів тому

      there are ways to get the zig package manager working with c, but that's about it

    • @HakanEngin-o9l
      @HakanEngin-o9l 6 днів тому

      Looks like it’s time for you to meet Rust, my friend! :)

  • @vidal9747
    @vidal9747 8 днів тому

    Sincerely, knowing a lot of languages is better than only knowing one. I think learning one or two really well is the best. But being able to at least read various programming languages is better.

    • @joebulfer
      @joebulfer Годину тому

      Yes I agree, I'm just biased towards C at the moment.

  • @aodfr
    @aodfr 8 днів тому

    As a primarly a C++ programmer if I were forced to learn a new lanuage it would problaly be GO because it straight forward and its comunity doesnt suck like the Rust comunity.

  • @VaibhavSharma-zj4gk
    @VaibhavSharma-zj4gk 8 днів тому

    Python is a toy scripting language for writing small programs??? Bro, the place you have put this video is written in Python.

    • @James-e4q3c
      @James-e4q3c 8 днів тому

      It was a joke

    • @elrit6
      @elrit6 8 днів тому

      python is decent for backends but sucks ass for system apps. those are two different things

    • @ChiangKai-Shrek
      @ChiangKai-Shrek 7 днів тому

      The guy literally put a warning about the joke and it still managed to fly over your head

    • @pete-i7p
      @pete-i7p 3 дні тому

      This is not a desktop application buddy.

    • @joebulfer
      @joebulfer Годину тому

      Python is actually great lol but i'm opinionated. If Mojo ever becomes a thing Python basically becomes 10x so I got my eye out.

  • @Cinarbayramic
    @Cinarbayramic 9 днів тому

    1:02 i recommend Sdl2 as it is faster

  • @Foxerski
    @Foxerski 9 днів тому

    "I switched from a mountain bike to a race car"

    • @HakanEngin-o9l
      @HakanEngin-o9l 6 днів тому

      Yes, that’s a good way to put it, but I’d go for a Tesla Model S Plaid. Let’s get rusty :)

    • @Foxerski
      @Foxerski 6 днів тому

      @@HakanEngin-o9l What does it even mean?

    • @joebulfer
      @joebulfer Годину тому

      Yes, and the bike needs re-inventing.

    • @joebulfer
      @joebulfer Годину тому

      @@HakanEngin-o9l Rust is C++ with extra steps. But hey, it beats Javascript

  • @HakanEngin-o9l
    @HakanEngin-o9l 9 днів тому

    now rust is waiting for you

    • @joebulfer
      @joebulfer 6 днів тому

      I'm going to try to build big enough projects in C until I personally experience it's pitfalls.

    • @HakanEngin-o9l
      @HakanEngin-o9l 6 днів тому

      @@joebulfer I've been working with C/C++ for many years-it's been around 8 years now, with 4 of those professionally. I’ve only been using Rust for about 3 months, and yes, to truly understand just how much of a blessing Rust is, you need to experience some of the challenges with C firsthand. 😅

    • @rusi6219
      @rusi6219 3 дні тому

      He's not LGBTQ+

  • @alwayslg
    @alwayslg 9 днів тому

    i feel you setting up raylib on linux 💀I was using macOS with XCode and the setup is so cooked 💀if not worse than doing it in linux

    • @alwayslg
      @alwayslg 9 днів тому

      and why dont you write it in C++? you are doing OOP in C?

    • @joebulfer
      @joebulfer 9 днів тому

      No C++ yet, just structs and functions.

    • @ozu7779
      @ozu7779 8 днів тому

      actually, setting a project environment is easier than any other os

  • @georgiosdoumas2446
    @georgiosdoumas2446 9 днів тому

    The book he shows is "C++ Programming: Program Design Including Data Structures , 4th edition , 2008". Maybe not a good book for C++.

  • @drunkleen
    @drunkleen 10 днів тому

    NICE ONE LOVED IT

  • @anon_y_mousse
    @anon_y_mousse 10 днів тому

    Just so no one watching this gets the wrong idea, you can write OO code with C, it's just that the language has nothing built-in to facilitate doing so as easily as you can with a language like C++. That's not necessarily a negative unless you really want OO for everything, which you really shouldn't anyway. Also, if anyone is thinking of getting into programming with C based on this video, heed his lesson about understanding how the build tools work, how to specify libraries and include and library paths. Also also, learn the basic technique of C-style namespacing by prepending what you want to call your library or module to the front of all the functions you write for it, like mylibrary_myfunction. Don't pollute the global namespace like RayLib does..

    • @joebulfer
      @joebulfer Годину тому

      OO is a made up word, prove me wrong.

    • @anon_y_mousse
      @anon_y_mousse Годину тому

      @@joebulfer All words are made up. Some of them even apply to physical things. Some only apply to theoretical concepts. The terms object oriented/orientated/orientation, all encompassed in OO, just mean that the focus is on the object first. Say you write an array handling library in C, each function would take the form of array_XYZ and accept the array "object" as the first argument. C++ merely makes it less cumbersome by allowing the functions to be namespaced within the definition of the class or struct so you can refer to methodologies without prepending the class or struct name and without passing the object itself manually.

  • @williamcase426
    @williamcase426 10 днів тому

    Traitor. Stick with Python.

    • @joebulfer
      @joebulfer 10 днів тому

      Python = cringe; c = based

    • @Foxerski
      @Foxerski 9 днів тому

      @@joebulfer both are amazing

    • @PixelThorn
      @PixelThorn 9 днів тому

      ​@@FoxerskiI agree, I dabble with Python, C/C++ and am very happy jumping between each

    • @stolenlaptop
      @stolenlaptop 8 днів тому

      Python is written in c .. so you're using c one way or another.

    • @PixelThorn
      @PixelThorn 8 днів тому

      @@stolenlaptop and C was written in assembler, so, it's all assembler in the end

  • @etherweb6796
    @etherweb6796 10 днів тому

    I recently setup a project using flecs (ECS) raylib, nuklear (UI), box2d (physics). I was initially going to use SDL3 GPU instead of raylib, but I find that raylib is the abstraction level I was looking for (I may dig deeper later) - many people will knock it (and I prefer Meson myself) but dependencies are so much easier using CMake and git submodules - well worth spending the time to get setup.

  • @RJ-or8bw
    @RJ-or8bw 10 днів тому

    Now you speak the language of the gods

    • @Juyuein
      @Juyuein 9 днів тому

      How funny and weak your religion is, to the point that you say such things. Your religion lowers the value of God so much that some even say Jesus is gay, and you have no problem with this. This has nothing to do with freedom of expression. Truly pathetic

    • @VOgaming51official
      @VOgaming51official 8 днів тому

      not yet, it's not assembly

    • @RJ-or8bw
      @RJ-or8bw 8 днів тому

      @ If you are like the guy that made Roller coaster tycoon then that just makes you a god. 😂

    • @alst4817
      @alst4817 4 дні тому

      That’s called Lisp, young’n

    • @reda29100
      @reda29100 4 дні тому

      You mean Vim, right? * I'm highly insecure dude substituting a fucking editor for his whole personality *

  • @joebulfer
    @joebulfer 10 днів тому

    This is a reupload from a video 5 days ago because I messed up the audio.

  • @Dyamonic
    @Dyamonic 10 днів тому

    Amazing Video, keep it up.

  • @codyhartman3358
    @codyhartman3358 11 днів тому

    Sweet tutorial, never knew about the embedded terminal. May need to rethink my Tmux setup.

    • @joebulfer
      @joebulfer 11 днів тому

      I mean whatever works. I actually have never used Tmux so I don't really know what it's capable of. Though most of the time I personally just use the default terminal of my Fedora machine, Gnome terminal, and can easily switch between tabs with ALT 1 , 2 etc. No configuration necessary.

    • @stanislavmilchev3054
      @stanislavmilchev3054 11 днів тому

      dont. tmux is way more valuable and functional than the annoying terminal.

    • @codyhartman3358
      @codyhartman3358 10 днів тому

      @@stanislavmilchev3054 One annoying thing is copying between tmux and vim

  • @iarde3422
    @iarde3422 11 днів тому

    But, if you are an expert in C++, you are also an expert in the computer.

  • @iarde3422
    @iarde3422 11 днів тому

    But doing it in C and not learning what C++ provides, makes you reinvent the wheel all over again.

  • @friedrichmyers
    @friedrichmyers 12 днів тому

    "You know how the computer works if you know C" No. You know how PROGRAMS work when you know C. If you want to get low into the hardware, it is best to know ASM.

    • @poutineausyropderable7108
      @poutineausyropderable7108 11 днів тому

      C is ASM with lots of sugar. You can 100% write in your head a very horribly inneficient compilers. If you just say fuck register and keep every variable change as load r1 change r1 Store r1 And only use as many registers as you need for the next function call or assembly instruction.

  • @NoOneIsHeree
    @NoOneIsHeree 12 днів тому

    i very much agree, when i have to code in usermode i usually use C++ because it is faster to write programs that do not require a direct almost 1:1 translation from code to asm, but there's no way i would use c++ for a kernel mode driver... C is way better than C++

  • @rudranathmistry6957
    @rudranathmistry6957 12 днів тому

    Same for me😢

  • @8BitInsekt
    @8BitInsekt 12 днів тому

    Great video and a valuable testimony to C's simplicity! Maybe another point to consider: If you stretch yourself a little bit as a more or less average (meaning: non-super-genius) programmer, you can come up with your own C-compiler. This is not true for C++ (or any other more "advanced" language), where you have to be a genius to even understand the language, much less write a compiler for it. Nowadays, many people don't care about how compilers are written, but this creates a dependency on what is given to you upstream that I find uncomfortable.

  • @exmachina3840
    @exmachina3840 12 днів тому

    Ok but how can i create all the object oriented stuff without java keywords like class and new? The legendary C programming book does not teach us game dev through C 😢

    • @llamatronian101
      @llamatronian101 5 днів тому

      Lots of ways. My preferred one is the "glib" and "gobject" libraries. They're what's behind GTK. Still ends up as a bit of a mess though, and there's so much boilerplate. I use Rust these days.

    • @exmachina3840
      @exmachina3840 4 дні тому

      @llamatronian101 Thanks i'll look that up.

  • @UliTroyo
    @UliTroyo 12 днів тому

    Nand to Tetris is a lot of fun!

  • @imkow
    @imkow 13 днів тому

    how do you handle exceptions in pure C?

    • @zhulikkulik
      @zhulikkulik 12 днів тому

      I don't even understand what it is, tbh. I tried to understand, but if( !Function(a,b,c) ) { //try to handle or f* it and return } is much more understandable for me.

    • @hjkl-hf2ud
      @hjkl-hf2ud 11 днів тому

      Errors as values, as God intended.

    • @osaka_phong
      @osaka_phong 11 днів тому

      You don't. You are careful and try to prevent them with things like guard conditionals checking if pointers are null before dereferencing them or making sure you free() unused dynamically allocated memory

  • @naranyala_dev
    @naranyala_dev 13 днів тому

    try to compile c with zig cc

  • @henrycgs
    @henrycgs 13 днів тому

    just a heads up. while that song likely is public domain, its performance/recording might not be. and, a general advice. I recommend stop criticizing things you clearly have very little experience with. it's a sign of arrogance. while I agree that C is better than C++, your arguments aren't great, and your code is has several beginner mistakes.

  • @TertiumComparationis
    @TertiumComparationis 13 днів тому

    "There's not too much to C" - ooft, I have the first ed of K&R book on C, and it's even less pages than your copy: but as you dive in there's most definitely a lot more than meets the eye.

    • @llamatronian101
      @llamatronian101 5 днів тому

      There's not much to C can also become a burden. Often around the point when you should be using a hash map to solve a problem. That said, I've found the "glib" library to be a nice addition to C, as it modernizes the standard library and provides easy to use data structures that are still simple enough to understand for beginners.

  • @halladba101
    @halladba101 13 днів тому

    Hey there! You have a perfectly 32 comments sorry for ruining it :( (you can delete when you read this or keep it when you reach 64 so it evens out!)

  • @etherweb6796
    @etherweb6796 13 днів тому

    As an aside I recently discovered that you can do memory management in C without needing malloc (or an OS function like mmap) at all - all you need to do is in your main.c create a global char array for the number of bytes you need, and then pass this as a void* to your own custom allocator (I'd suggest either an Arena/Linear allocator, or a free list allocator - google "Ginger Bill Memory allocation strategies" to see how to create them. The advantage to the global char array approach is there is no limit from the C language on size, and it is automatically cleaned up when your program ends - the only disadvantage is you need to know the upper maximum amount of memory your program will need.