#or really have a handle on object oriented programming really
Explore tagged Tumblr posts
arbtbeads · 2 years ago
Text
Organizing stuff this week and making penguins to manifest cooler weather.
2 notes · View notes
teaboot · 11 months ago
Note
if ur a murderbot nerd now do u have any fun opinions abt it yet?
Oh my goddd you have no idea
I really, really, really like Murderbot because it comes at life with this perspective we don't often see that is very real among people who have already been through traumatic experiences, who developed skills and abilities to suvive that were once useful but no longer have context- that search that traumatized people go through to recalibrate and reorient ourselves in a world where we no longer really need those things to survive.
A bit personal here, but my own issues personally involved a lot of psychological abuse that made it difficult to trust my own perceptions of reality, and as a result I found I was very easy to lie to and manipulate.
To handle this, I became obsessive over writing things down, cataloging details and making notes of things as they happened- I'd carry recording devices and make audio recordings and stay up late at night to transcribe what they'd picked up, read those over and over again to reassure myself of things I wasn't certain about.
While doing this, there were others close to me that I felt responsible for, who I had to protect from others and protect myself from at the same time. Life was about two things: Evidence, and defusing threats
Over time, I learned to trust myself as my memories matched what had been recorded where their narrative didn't, but I never really kicked the habit. Like Murderbot, I had added something to my own programming that reassured me I was safe, that I was in control of myself, that I couldn't be mistaken or crazy or broken or used.
I'm only on book two, but already I see myself in Murderbot again. No spoilers here, but when I left home- left that dangerous context- I didn't need to repeat these patterns to survive anymore, but I still did, because I didn't know anything else anymore. It felt safe, comfortable, knowing knowing that the past couldn't repeat itself, because I'd written that flaw- blind trust in myself-  out of my programming and replaced it with something else.
Still, though, I'd become something specially suited to thrive in a very specific environment. Nothing else felt right like followinghigh-risk situations, like witnessing and watching and recording and knowing I had proof of the truth where others might not.
People took notice. I wound up in security by accident, but's an environment that I thrive in due to the same patterns and behaviours I originally developed when I had no other choice. I climbed the ladder pretty quickly, once supervisors caught on that my reports were the most accurate, most objective, most factual, detail-oriented and timely. I keep others and myself safe and prioritize public safety above all else, and I perform well under pressure
Now I'm in a position where I often wonder, do I enjoy this job, or is it just what I'm good at? I have a set of skills now, but do I have the option of choosing not to use them? What would I be, if not this? Could I be anything else? Can Murderbot be anything else?
It has a set of skills that set it apart, make it different, special. It does what it knows best. But is it free? Does it want to be? What does it want? Does it have to do what it was built to do? What if it didn't?
I know what I'm good for. The idea of deliberately leaving what I'm good for for something uncertain, that I might hate, that I might be useless at- the choice to give up what was so important to me for so long and become deliberately obsolete?
Let go of my entire purpose? The only thing I know, that I fit so well into but don't actually know if I enjoy? Now that I can choose? Now that enjoyment is a luxury I can afford to consider?
Yeah, that resonates.
I like the Murderbot series so far because it feels the way I feel: Like the most significant and formative part of my story, the part where I became what I am, has already happened
And now I have to just. Keep going
Into... what?
It feels absurd. Like a microwave giving up on reheating food and deciding to start a life around abstract dance.
So, uh. Yeah. It's really very wild to see this same philosophical-ish dilemma I've been digging over in the back of my mind and in therapy for the last forever laid out so plainly in a genuinely exciting and enjoyable story like this. I feel much less alone, and I... kind of really need to see how it resolves, I think.
So, uh. Yeah. Read Murderbot, I guess
561 notes · View notes
moose-mousse · 7 months ago
Note
Question since you mentioned small functions good in your last post? how do you handle really specific functions that depend on a bunch of state? i often try to split up functions and I end up with even more confusing code, with functions that can only be used in a very specific context and either have way too many arguments or take in some abstract (conceptually abstract, not the programming keyword) structure that holds all that state. This ends up being less readable than just one big dumb function.
Hmmmmmmm… TLDR: Layer the software. Instead of the 1 big function, call 5 small ones. If they can simply pipe into each-other, then do that. If they manipulate some state that they all share? Then make it an object. That way your function does not take 5 arguments. It takes 2 argument and one of them is an object that will have its functions called inside the function. The long version: depends on a lot but the answer in general is abstraction layers. Basically, the analogies you come up with to describe the system and what parts belong to what. This is often confused with object oriented design but they are 2 very very separate things. And it is important to think of them as separate things. Object oriented is about inheritance. That objects is software that can be a sub-set of other software. Objects in object oriented design does not have private data or functions. Everything is public. Abstraction layers is what we are doing when we make some data private and only allow access to it via specific functions. In other words, it is an interface to a hidden functionality. By using the interface, you do not have to care about how it works. And so you do not care if the implementation changes. You just keep using the same old interface. Ok. So you just pick good analogies and you describe what the tiny parts of your system does so it becomes obvious how to encapsulate certain parts and only access it via the interface. … Ok but… how do you do that? And… the answer is annoying. You do it by building it. As you work on it, you gain a better and better understanding of the system. And when it works like it is supposed to. Then you are at your height as a domain expert in that system. Meaning the cost of refactoring is the cheapest it will ever be. And the benefits of refactoring are the best they will ever be. You are a domain expert with fresh knowledge of the entire system! With experience you can write better and better code directly. But that should always only be a speed advantage. Because if the code is not good enough yet. Then refactor it. The bitch is defining “good enough”. But when you have the chance, then struggle! Attack it again! My first task at my first job fresh out of Unit was writing a driver for a sensor that would be placed in 150,000 devices during the next 12 months. It was a panic replacement for a component that had massive supply issues. And the entire production was waiting for me. And it was clear that they wanted it as fast as possible
The code was basically a state machine, which is good for asynchronous communication. Which in C means switch case. I refactored that… 4 times I think. Even with the entire production waiting for me, I took the time to refactor after the software worked. And it became SUPER easy to read. And I have refactored that 2 more times since. Writing is rewriting
( A lot of the ideas here is taken from Kevlin Henney. If you do not know him, then watch his talks on youtube. )
Hope that was a decent read, and will help you :3
5 notes · View notes
watchmorecinema · 2 years ago
Text
Normally I just post about movies but I'm a software engineer by trade so I've got opinions on programming too.
Apparently it's a month of code or something because my dash is filled with people trying to learn Python. And that's great, because Python is a good language with a lot of support and job opportunities. I've just got some scattered thoughts that I thought I'd write down.
Python abstracts a number of useful concepts. It makes it easier to use, but it also means that if you don't understand the concepts then things might go wrong in ways you didn't expect. Memory management and pointer logic is so damn annoying, but you need to understand them. I learned these concepts by learning C++, hopefully there's an easier way these days.
Data structures and algorithms are the bread and butter of any real work (and they're pretty much all that come up in interviews) and they're language agnostic. If you don't know how to traverse a linked list, how to use recursion, what a hash map is for, etc. then you don't really know how to program. You'll pretty much never need to implement any of them from scratch, but you should know when to use them; think of them like building blocks in a Lego set.
Learning a new language is a hell of a lot easier after your first one. Going from Python to Java is mostly just syntax differences. Even "harder" languages like C++ mostly just mean more boilerplate while doing the same things. Learning a new spoken language in is hard, but learning a new programming language is generally closer to learning some new slang or a new accent. Lists in Python are called Vectors in C++, just like how french fries are called chips in London. If you know all the underlying concepts that are common to most programming languages then it's not a huge jump to a new one, at least if you're only doing all the most common stuff. (You will get tripped up by some of the minor differences though. Popping an item off of a stack in Python returns the element, but in Java it returns nothing. You have to read it with Top first. Definitely had a program fail due to that issue).
The above is not true for new paradigms. Python, C++ and Java are all iterative languages. You move to something functional like Haskell and you need a completely different way of thinking. Javascript (not in any way related to Java) has callbacks and I still don't quite have a good handle on them. Hardware languages like VHDL are all synchronous; every line of code in a program runs at the same time! That's a new way of thinking.
Python is stereotyped as a scripting language good only for glue programming or prototypes. It's excellent at those, but I've worked at a number of (successful) startups that all were Python on the backend. Python is robust enough and fast enough to be used for basically anything at this point, except maybe for embedded programming. If you do need the fastest speed possible then you can still drop in some raw C++ for the places you need it (one place I worked at had one very important piece of code in C++ because even milliseconds mattered there, but everything else was Python). The speed differences between Python and C++ are so much smaller these days that you only need them at the scale of the really big companies. It makes sense for Google to use C++ (and they use their own version of it to boot), but any company with less than 100 engineers is probably better off with Python in almost all cases. Honestly thought the best programming language is the one you like, and the one that you're good at.
Design patterns mostly don't matter. They really were only created to make up for language failures of C++; in the original design patterns book 17 of the 23 patterns were just core features of other contemporary languages like LISP. C++ was just really popular while also being kinda bad, so they were necessary. I don't think I've ever once thought about consciously using a design pattern since even before I graduated. Object oriented design is mostly in the same place. You'll use classes because it's a useful way to structure things but multiple inheritance and polymorphism and all the other terms you've learned really don't come into play too often and when they do you use the simplest possible form of them. Code should be simple and easy to understand so make it as simple as possible. As far as inheritance the most I'm willing to do is to have a class with abstract functions (i.e. classes where some functions are empty but are expected to be filled out by the child class) but even then there are usually good alternatives to this.
Related to the above: simple is best. Simple is elegant. If you solve a problem with 4000 lines of code using a bunch of esoteric data structures and language quirks, but someone else did it in 10 then I'll pick the 10. On the other hand a one liner function that requires a lot of unpacking, like a Python function with a bunch of nested lambdas, might be easier to read if you split it up a bit more. Time to read and understand the code is the most important metric, more important than runtime or memory use. You can optimize for the other two later if you have to, but simple has to prevail for the first pass otherwise it's going to be hard for other people to understand. In fact, it'll be hard for you to understand too when you come back to it 3 months later without any context.
Note that I've cut a few things for simplicity. For example: VHDL doesn't quite require every line to run at the same time, but it's still a major paradigm of the language that isn't present in most other languages.
Ok that was a lot to read. I guess I have more to say about programming than I thought. But the core ideas are: Python is pretty good, other languages don't need to be scary, learn your data structures and algorithms and above all keep your code simple and clean.
20 notes · View notes
guzsdaily · 8 months ago
Text
Good Code is Boring
Daily Blogs 358 - Oct 28th, 12.024
Something I started to notice and think about, is how much most good code is kinda boring.
Clever Code
Go (or "Golang" for SEO friendliness) is my third or fourth programming language that I learned, and it is somewhat a new paradigm for me.
My first language was Java, famous for its Object-Oriented Programming (OOP) paradigms and features. I learned it for game development, which is somewhat okay with Java, and to be honest, I hardly remember how it was. However, I learned from others how much OOP can get out of control and be a nightmare with inheritance inside inheritance inside inheritance.
And then I learned JavaScript after some years... fucking god. But being honest, in the start JS was a blast, and I still think it is a good language... for the browser. If you start to go outside from the standard vanilla JavaScript, things start to be clever. In an engineering view, the ecosystem is really powerful, things such as JSX and all the frameworks that use it, the compilers for Vue and Svelte, and the whole bundling, and splitting, and transpiling of Rollup, ESBuild, Vite and using TypeScript, to compile a language to another, that will have a build process, all of this, for an interpreted language... it is a marvel of engineering, but it is just too much.
Finally, I learned Rust... which I kinda like it. I didn't really make a big project with it, just a small CLI for manipulating markdown, which was nice and when I found a good solution for converting Markdown AST to NPF it was a big hit of dopamine because it was really elegant. However, nowadays, I do feel like it is having the same problems of JavaScript. Macros are a good feature, but end up being the go-to solution when you simply can't make the code "look pretty"; or having to use a library to anything a little more complex; or having to deal with lifetimes. And if you want to do anything a little more complex "the Rust way", you will easily do head to head with a wall of skill-issues. I still love it and its complexity, and for things like compiler and transpilers it feels like a good shot.
Going Go
This year I started to learn Go (or "Golang" for SEO friendliness), and it has being kinda awesome.
Go is kinda like Python in its learning curve, and it is somewhat like C but without all the needing of handling memory and needing to create complex data structured from scratch. And I have never really loved it, but never really hated it, since it is mostly just boring and simple.
There are no macros or magic syntax. No pattern matching on types, since you can just use a switch statement. You don't have to worry a lot about packages, since the standard library will cover you up to 80% of features. If you need a package, you don't need to worry about a centralized registry to upload and the security vulnerability of a single failure point, all packages are just Git repositories that you import and that's it. And no file management, since it just uses the file system for packages and imports.
And it feels like Go pretty much made all the obvious decisions that make sense, and you mostly never question or care about them, because they don't annoy you. The syntax doesn't get into your way. And in the end you just end up comparing to other languages' features, saying to yourself "man... we could save some lines here" knowing damn well it's not worth it. It's boring.
You write code, make your feature be completed in some hours, and compile it with go build. And run the binary, and it's fast.
Going Simple
And writing Go kinda opened a new passion in programming for me.
Coming from JavaScript and Rust really made me be costumed with complexity, and going now to Go really is making me value simplicity and having the less moving parts are possible.
I am becoming more aware from installing dependencies, checking to see their dependencies, to be sure that I'm not putting 100 projects under my own. And when I need something more complex but specific, just copy-and-paste it and put the proper license and notice of it, no need to install a whole project. All other necessities I just write my own version, since most of the time it can be simpler, a learning opportunity, and a better solution for your specific problem. With Go I just need go build to build my project, and when I need JavaScript, I just fucking write it and that's it, no TypeScript (JSDoc covers 99% of the use cases for TS), just write JS for the browser, check if what you're using is supported by modern browsers, and serve them as-is.
Doing this is really opening some opportunities to learn how to implement solutions, instead of just using libraries or cumbersome language features to implement it, since I mostly read from source-code of said libraries and implement the concept myself. Not only this, but this is really making me appreciate more standards and tooling, both from languages and from ecosystem (such as web standards), since I can just follow them and have things work easily with the outside world.
The evolution
And I kinda already feel like this is making me a better developer overhaul. I knew that with an interesting experiment I made.
One of my first actual projects was, of course, a to-do app. I wrote it in Vue using Nuxt, and it was great not-gonna-lie, Nuxt and Vue are awesome frameworks and still one of my favorites, but damn well it was overkill for a to-do app. Looking back... more than 30k lines of code for this app is just too much.
And that's what I thought around the start of this year, which is why I made an experiment, creating a to-do app in just one HTML file, using AlpineJS and PicoCSS.
The file ended up having just 350 files.
Today's artists & creative things Music: Torna a casa - by Måneskin
© 2024 Gustavo "Guz" L. de Mello. Licensed under CC BY-SA 4.0
4 notes · View notes
shemsuji432 · 2 years ago
Text
Exploring Python: Unveiling Its Features and Advantages
To begin learning Python, it's like starting an adventure. Imagine finding a special course that teaches you all about Python. This course should cover the basics like how to write the language, how to work with different types of information, and how to make your programs do things like repeat actions and remember stuff. But that's not all! It's like finding a treasure chest if the course also shows you more advanced ideas like building special kinds of programs, handling files, and using helpful tools that others have created.
From my own experience, it's like joining a team of ACTE that really know their stuff. They'll guide you through all the important things you need to know. They're so good that they even offer different ways of learning: you can learn with them in a classroom or even on the internet. And guess what? They even help you find a good job after you've learned a lot!
When you learn with them, it's like becoming a superhero who understands Python really well. You'll be able to use Python to create things in the real world, like games, apps, and more. I started my own adventure at ACTE Training Institute, and now I'm really skilled at using Python.
My own Python journey commenced at ACTE, enabling me to progress to an expert level. Here are key points to consider before commencing your Python learning experience:
Tumblr media
Course Content and Curriculum: A course that covers Python fundamentals comprehensively, encompassing topics from syntax and data types to loops, functions, and beyond. Advanced subjects like object-oriented programming and working with libraries should also be included.
Hands-on Practice: Practical exercises and coding assignments are crucial for reinforcing learning. Confirm that the course provides ample hands-on practice and projects to apply acquired knowledge.
Instructor Expertise: Evaluate the instructors' qualifications and experience in both Python programming and teaching to ensure high-quality guidance.
Student Reviews and Testimonials: Look for feedback from former students, accessible through searches for "student reviews" or "student testimonials."
Flexible Learning Options: Choose a course that offers flexibility, whether through self-paced learning, live online classes, or a blend of both, to suit your preferences and schedule.
Project-Based Learning: Emphasizing project-based learning is highly advantageous, as it enables the application of knowledge in practical scenarios and the creation of a portfolio.
Support and Community: A supportive learning environment is vital, providing access to instructors and a community forum or chat for interaction among learners.
Additional Resources: Access to supplementary materials like lecture notes, code samples, and top MNC questions is valuable for future reference.
Price and Value: Prioritize course quality over cost. A well-structured course with comprehensive content and robust support may be worth a higher investment.
Course Duration: Consider your learning style—some prefer intensive shorter courses, while others benefit from longer durations with more practice time.
Certification: If certification holds importance for you, choose a course that offers certificates to enhance your resume or portfolio.
Tumblr media
If you want to learn more about Python, feel free to contact ACTE Institution because they offer certifications and job opportunities. Experienced teachers can help you learn better. You can find these services both online and offline. Take things step by step and consider enrolling in a course if you’re interested.
9 notes · View notes
xploreitcorp5 · 7 days ago
Text
Java Projects for Your Resume: Why They Matter
Tumblr media
Java Projects for Your Resume: Why They Matter
Adding Java projects to your resume can really help you land a job. Employers want to see real experience, and showcasing projects shows that you know how to apply your skills. A solid portfolio stands out more than just having certifications. These projects reflect your problem-solving skills, creativity, and understanding of Java basics and advanced concepts. Whether you’re just graduating or changing careers, having practical projects is important. Students taking Java course in Coimbatore are often encouraged to create live applications to boost their resumes and improve their chances in job interviews.
Simple Java Projects for Beginners
If you're just starting out, try adding basic Java projects like a calculator, to-do list, or temperature converter to your resume. These projects are great for grasping object-oriented programming and basic GUI design. They’re usually part of beginner exercises in Java training programs in Coimbatore, helping you learn coding logic efficiently. Working on simple applications also enhances your debugging and problem-solving skills, which are key for coding interviews. It’s a good idea for beginners to focus on these smaller projects before tackling more advanced systems.
Intermediate Java Projects That Impress
Once you’ve got the basics down, you can move on to intermediate-level Java projects for your resume, like library management systems, quiz apps, or student record management tools. These projects show that you have a better grasp of file handling, user authentication, and data structures. Many Java course in Coimbatore make sure students work on these types of projects to build real-world problem-solving skills. These applications don’t just show off your technical skills; they also demonstrate that you can create user-friendly programs.
Advanced Java Projects That Stand Out
For those with more experience, advanced projects could include chat applications, e-commerce websites, or banking systems using JavaFX or Spring Boot. These projects show that you’re skilled in frameworks, APIs, and databases. Many top Java training programs in Coimbatore include this type of work in their syllabus. Having these projects on your resume proves to employers that you’re ready for the job and can manage larger systems. Using GitHub to share your source code, along with documentation and screenshots, can give you an edge.
Importance of Full-Stack Java Projects
A full-stack Java project covers both the frontend and backend, often using HTML, CSS, JavaScript, Java, and MySQL. These projects help show that you’re not just focused on the backend but can also manage UI and databases. Joining a Java course in Coimbatore that includes full-stack content will give you an advantage in today’s job market. Such projects mimic real work environments and prove you can handle end-to-end application development.
Using Java Projects to Show Teamwork
Employers often look for teamwork skills. Including team-based Java projects on your resume, where you collaborated with others, demonstrates your ability to communicate, manage tasks, and work with version control systems like Git. Group projects in Java training programs in Coimbatore teach students how to build scalable applications with effective task management. Showcasing these projects on your resume emphasizes both your technical abilities and your teamwork qualities.
How to Present Java Projects on a Resume
When listing Java projects on your resume, make sure to include the project title, a brief description, the technologies you used, and your role in the project. Focus on the impact of your work—did it solve a real problem or improve performance? Students in Java course in Coimbatore learn how to document and present their projects for interviews. Adding links to demos or GitHub repositories is a nice touch. How you present your projects can help you stand out to potential employers.
Mistakes to Avoid While Showcasing Java Projects
Avoid listing too many projects that aren’t complete or too similar. Don’t just focus on frontend work; employers want to see sound coding and backend integration too. Students in Java training programs in Coimbatore are advised to keep their code clean, well-documented, and free of bugs. Steer clear of copying projects from the internet; instead, focus on customizing and innovating based on your learning. This shows creativity and confidence, and you'll be better prepared for questions about your projects in interviews.
How Projects Improve Your Job Readiness
Including Java projects on your resume is vital for showing you’re ready to work. It shows you can create practical applications with your skills. Employers want candidates who can contribute from day one. A strong portfolio, supported by a solid Java course in Coimbatore or good Java training program, can greatly improve your hiring chances. Recruiters appreciate real-world experience over just theoretical knowledge or course certificates.
Conclusion: Learn, Build, and Stand Out with Xplore IT Corp
If you want to get good at Java and build impressive projects for your resume, then a structured Java course in Coimbatore is a great place to start. At Xplore IT Corp, we provide relevant Java training that includes hands-on project development, resume-building workshops, and full placement support. With real experience and guidance, you can create a portfolio that impresses employers. Let your Java projects show your skills learn, build, and grow with us at Xplore IT Corp.
FAQs
1. What types of Java projects should I include in my resume?
   Include a mix of simple, intermediate, and advanced projects to showcase various Java skills like OOPs, file handling, APIs, and databases.
2. How many Java projects should I list on my resume?
   List 2 to 4 well-documented projects. Focus on quality rather than quantity, ensuring each project highlights a unique skill set.
3. Do Java projects really help in getting a job?
   Yes, they provide evidence of your coding skills and can help you make a strong impression in interviews, especially for roles needing practical programming.
4. Where can I get help for building Java projects?
   Enrolling in a Java course in Coimbatore, like the one offered by Xplore IT Corp, can provide expert guidance, resources, and structured projects.
5. Can I use GitHub to showcase my Java projects?
   Definitely! GitHub is a great platform to display your work to potential employers. Include links to your GitHub projects in your resume for easy access.
0 notes
iide-learningplatform · 1 month ago
Text
Find the Best C++ Course Online with Certification and Easy to Follow Lessons
Tumblr media
If you want to learn computer programming from the very beginning, then doing a C++ programming course can be a really good step. C++ is one of those programming languages that has been around for a long time and is still used in many areas like making computer software, designing games, and even building robots.
In this blog, you will get to know everything in detail about the C++ course — why it is useful, what topics you will study in it, what job options are available after learning it, and how you can begin learning it using the right tools and support.
What is a C++ Programming Course?
A C++ programming course is a learning program that helps you understand how to create computer programs using the C++ language. It is specially made for those who are new to programming or those who already know a little and want to learn more.
In this course, you will be taught how to write simple codes, find solutions to programming problems, and understand the basic ideas of how object-based programming works — which is a way of building programs by using small blocks called “objects.”
Why should you learn C++ in 2025?
Choosing to learn C++ in 2025 is a really good idea for several simple reasons. C++ is still used a lot by many companies. Big companies pick C++ when they want to make software that works quickly and does not break easily. If you want a job in IT, making software, or even working with artificial intelligence, knowing C++ will help you stand out. Also, C++ is the starting point for many other programming languages. After you learn C++, it becomes much simpler to pick up other languages like Java or Python.
Who can join a C++ Programming Course?
If you like computers or want to learn about technology, you can join a C++ programming course. You do not need to be a computer expert or have any special background. Many students take a C++ course after finishing class 12 because it helps them start learning programming early. People who already have jobs but want to learn new things or change their career can also join a C++ course.
If you are a student, you can find C++ courses made just for students, so learning is easy for you. There are also many good C++ courses online in 2025 for all levels, whether you are just starting or already know some programming.
What Will You Learn in a C++ Course? (Syllabus Overview)
When you join a C++ course made for beginners, you will learn all the main things that help you start coding easily. Here’s what is usually taught in such a course:
A simple explanation of what C++ is and where it came from
How to install and start using the C++ software on your computer
Writing your first basic program in C++
Learning about variables, data types, and math symbols (operators)
How to use loops and “if-else” conditions to make decisions in code
What functions are, and how to use them in different programs
Understanding arrays, how to use strings, and what pointers do
Learning the basics of object oriented programming in C++, like how classes and objects work, and things like inheritance and polymorphism
How to work with files, and how to handle errors in programs
Doing small projects and exercises to check what you’ve learned
Most C++ courses also come with a C++ programming tutorial step by step, which means you don’t just read — you also practice. This kind of hands-on method helps you remember and understand better.
Career Opportunities After Learning C++
When you finish a C++ programming course, you will have many job options. C++ is used in lots of different fields, so you can find work in many kinds of jobs. Some common jobs you can get are:
Software Developer
Game Developer
System Programmer
Embedded Systems Engineer
Data Analyst
Robotics Programmer
Having a job in C++ programming is safe and can help you grow in your career. Many companies want people who know C++. You can also choose to work for yourself as a freelancer or even start your own software business.
C++ Course Duration and Fees
How long a C++ course takes and how much it costs depends on where you study and which course you pick. Most beginner courses are between 1 and 3 months long. If you go for a bigger or more advanced course, it might take more time. The fees are different for each course. Some websites let you learn the full C++ course in English for free, but some may ask for a small payment for a C++ certification course.
It is smart to look at different courses and see which one is best for your budget and the way you like to learn. Many places also give discounts or scholarships to students.
Best Tools and Software for Practicing C++
If you want to practice C++, you should use some good tools. Here are some well-known choices:
Code::Blocks: This tool is friendly for people who are just starting. It is not hard to use.
Dev C++: This one is simple and does not use much space on your computer.
Visual Studio: This software is strong and many experts use it for their work.
Online compilers: There are websites like Online GDB and Repl.it where you can write and check your C++ code online. You do not have to put any software on your computer to use these sites.
With these tools, you can easily learn from a C++ programming tutorial step by step and practice everything you study.
Expected Salary After Completing a C++ Course
A big reason many people pick a C++ programming course is because they can get a good salary. After you finish your course, your starting pay is often more than many other jobs. In India, if you are new, you can earn about ₹3 to ₹6 lakhs each year. If you have more experience, you can get paid even more.
If you get a job in another country, your salary can be much higher. As you keep working and learning, your pay will go up when you get bigger and better jobs. After a C++ course, you can find jobs in both private companies and government offices.
Tips and Resources to Learn C++ Easily
If you want to learn C++ in a simple way, try these tips:
- Try to write code every day, even if you only have 30 minutes. - Watch simple video lessons and do the steps shown in the videos. - Join online groups or forums where you can ask questions and talk about what you are learning. - Work on small, easy projects to use what you have learned. - Do quizzes and small tests to see how much you understand.
There are lots of helpful things online, like a C++ full course in English, video lessons, and e-books. You can also learn C++ online for free and get a certificate from good websites.
How to Join a C++ Programming Course with IID
If you want to start learning C++ and are searching for a good place, the Institute for Industrial Development (IID) is a very good option. IID has a C++ certification course that is made for beginners and teaches you all the important things you need to know. You can sign up for the course online, join live classes, and get help from expert teachers. IID gives you study materials, assignments to practice, and a certificate that is recognized when you finish the course. You can learn at your own speed with IID, and if you ever have questions or need help, support is always available. This makes learning C++ with IID easy and comfortable.
Conclusion
In 2025, taking a C++ programming course is still a great way to begin a career in technology. C++ is not hard to learn, many companies need people who know it, and it can help you get many different jobs. It does not matter if you are a student, someone working, or just interested in programming-learning C++ will give you a strong base for your future. There are lots of resources and online courses you can use, so now is the perfect time to start learning C++. Take the first step, join a course, and open up many new opportunities for yourself with C++.
0 notes
jeremy-ken-anderson · 3 months ago
Text
What's Going On, and What Does it Do?
Let's start with What It Does:
It's Asteroids. You know Asteroids. You've got a ship, there are asteroids appearing, you shoot 'em, shooting them breaks them up (at first into smaller pieces, then nothing once they're small enough), and if your ship gets hit by an asteroid that's Game Over. Bit of a cool tension where in the short term your blasts are creating more asteroids on screen, making for a little bit of a risk/reward thing.
What's Going On?
The main point of the exercise is a study in object-oriented class structure. So we've got
Main: Where the objects are classified, and where the basic gameplay loop...loops. In this case literally: It's running an infinite while True loop to update the screen frame-by-frame, with the two exits to the loop being a command to turn off the program if the player clicks the "close" button on the image window, or to exit if the player loses the game. The classification section is really valuable. It makes groups - an asteroids group to deal with physics for all the asteroids on screen at once, a drawable group so you can iterate over all the things happening on screen and draw each new frame, an updatable group to make all the stuff that updates update together, stuff like that. Then each of the objects can be a member of the groups that apply. The player is updatable and drawable. The asteroid is updatable and drawable and asteroids. But an interesting object is the asteroid field - the spawner for the asteroid objects - which is updatable so that it can spawn the asteroids over time but is not drawable. You aren't drawing the field; You're drawing the individual asteroids.
Player: Handles the stuff the player does, and the drawing of the player (the ship) on the screen. This is where the player's update function listens for keyboard inputs to turn the ship or fire its shots. Firing the shots in turn is a spawner for another object:
Shot: Moves in a straight line from where it was fired. I added the function of self-deletion after a couple seconds so that the player can't tax the system's resources by spawning in more and more irrelevant blasts.
Constants: This is a repository of all the stuff that's supposed to be static throughout the game: how fast the shots fire. How fast the player moves. The radius of small, medium, and large asteroids. That kind of thing. This makes it easy to go to one central location to fiddle with those game-feel numbers. Is the player able to move too fast? Are they so fast they have trouble with control? Are they able to fly faster than their own shots, leaving shots in their wake? Are the asteroids too fast to respond to? Note that this doesn't have to be "physics" constants. If you're doing a board game you might have a Constants file that says "WINNING_VP" and declare that the number of points needed to win the game is 10. And later if you realize that's no good you'll know to go into Constants to find it and change it to 15 or whatever.
There are a few others but that's the gist. The point is that the game's divided up by objects, and those objects are calling one another to get info. One thing you do have to be aware of is the prospect of circular imports; Objects don't declare themselves "complete" until they have imported all necessary info from other objects. So if two objects are importing parts of each other that import from each other, the system can't resolve them and won't run the program. On Asteroids it's simple enough to keep every object doing its own thing, but it's important to keep in mind. For instance, if you try to have the asteroids destroying the shots as the shots impact them, you'll get a situation where shot has to call asteroid and asteroid has to call shot. Better for the shot to recognize it's made contact and impact the asteroid, then destroy itself.
1 note · View note
fromdevcom · 4 months ago
Text
For almost three decades or so, the world of Database Management was ruled by the relational database model or RDBMS. But in today’s times, a major chunk of the mindshare has been gained by an alternative database management model called NoSQL or the non-relational cloud. This new NoSQL approach is fast proving to be extremely advantageous over its earlier counterpart by allowing the user new levels of application scalability. It is designed in a manner so that it can derive benefits from the new nodes through transparent expansion. Also, commodity hardware is quite reasonably priced. Owing to the massive increase in data volumes as well as transaction costs, NoSQL has come up as a boon for the developers as it can easily handle extremely large data volumes. Another relief that NoSQL allows you to have is to bid goodbye to your DBAs. This is because the new DBMS is associated with benefits like simpler data models and automatic repair which brings down the tuning and administrative requirements. The NoSQL Databases listed in a post primarily come under the following categories. Document-oriented databases Key-value store databases Graph databases Object databases Here is a list of some of the most popular and widely used NoSQL databases: MongoDB This highly scalable and agile NoSQL database is an amazing performing system. This open source database written in C++ comes with a storage that is document oriented. Also, you will be provided with benefits like full index support, high availability across WANs and LANs along with easy replication, horizontal scaling, rich queries that are document based, flexibility in data processing and aggregation along with proper training, support, and consultation. Redis This is an open source, key-value store of an advanced level. Owing to the presence of hashes, sets, strings, sorted sets and lists in a key; Redis is also called as a data structure server. This system will help you in running atomic operations like incrementing value present in a hash, set intersection computation, string appending, difference and union. Redis makes use of in-memory dataset to achieve high performance. Also, this system is compatible with most of the programming languages. Couch DB Couch DB is an Apache project and a really powerful database for JSON based web applications. This database provides a really powerful API to store JSON objects as documents in the database. You can use JavaScript to run MapReduce Queries on CouchDB. It also provides a very convenient web-based administration console. This database could be really handy for web applications. REVENDB RAVENDB is a second generation open source DB. This DB is document oriented and schema-free such as you simply have to dump in your objects into it. It provides extremely flexible and fast queries. This application makes scaling extremely easy by providing out-of-the-box support for replication, multi-tenancy, and sharding. There is full support for ACID transactions along with the safety of your data. Easy extensibility via bundles is provided along with high performance. MemcacheDB This is a distributed storage system of key value. It should not be confused with a cache solution; rather, it is a persistent storage engine which is meant for data storage and retrieval in a fast and reliable manner. Confirmation to Memcache protocol is provided for. The storing backend that is used is the Berkeley DB which supports features like replication and transaction. Riak This is one of the most powerful, distributed databases ever to be introduced. It provides for easy and predictable scaling and equips users with the ability for quick testing, prototyping and application deployment so as to simplify development. Neo4j This is a NoSQL graph database which exhibits a high level of performance. It comes well equipped with all the features of a robust and mature system. It provides the programmers with a flexible and
object-oriented network structure and allows them to enjoy all the benefits of a database that is fully transactional. Compared to RDBMS, Neo4j will also provide you with performance improvements on some of the applications. HBASE HBase can be easily considered as a scalable, distributed and a big data store. This database can be used when you are looking for real-time and random access to your data. It comes with modular and linear scalability along with reads and writes that are strictly consistent. Other features include Java API that has easy client access, table sharding that is configurable and automatic, Bloom filters and block caches and much more. Perst This is an object-oriented DBMS that is open source and has a dual license. With this, you will be able to store, sort and retrieve data in your applications with low overhead storage and memory and very high speed. HyperGraphDB This is an open source data storage system that is extensible, distributed, general purpose, portable and embeddable. Basically, this is a graph database which is mostly meant for AI, Semantic web projects and knowledge representation; it can also handle Java projects of different sizes. Cassandra In case you are looking for high availability and scalability without compromising on performance, then Cassandra database is the thing for you. It is a perfect data platform characterized by fault tolerance and linear scalability along with best in class replication support. Voldemort This is an automatically replicating distributed storage system. It provides for automatic partitioning of data, transparent handling of server failure, pluggable serialization, independence of nodes and versioning of data items along with support for data distribution across various centers. Terrastore This is a modern document store that facilitates elasticity features and high scalability without compromising on consistency. This system is based on a fast, clustering technology that is industry proven. It can support deployments that are single or multi clustered and can be accessed through HTTP protocol. NeoDatis NeoDatis is an object database that is simple to use and can run with Google Android, .Net, Groovy, Java, and Scala. It will help you do away with the impedance mismatch between Relational worlds and objects. Integrating NeoDatis ODB with your business will allow you to focus on logic along with single line code storage and retrieval of data. MyOODB If you are serious about web development and application, you cannot do without MyOODB. This is an application and database framework which gives you the power to bring back object-oriented design to web development. OrientDB This is a NoSQL DBMS that is open source and having the features of both Graph DBMSs and Document. It is an amazingly fast system that can store more than a hundred thousand records on common hardware, every second. It is highly secure with pretty straightforward usage. InfoGrid This is a web graph database having a lot of additional software components. This is an open source system which helps in easy development of full web applications that are based on a graph foundation. Db4objects This is an object database that is open source and can be used with .Net and Java. It helps the developers in storing and retrieving an object using a single line of code. This also helps in the elimination of predefining or maintaining a separate data model. The NoSQL databases are really highly scalable and good for large data storage and processing. However, these may not be always the best choice for you. Most of the common applications can still be developed using traditional relational databases. NoSQL databases are still not the best option for mission-critical transaction needs. Hope you found this list useful, let us know what database are you using for your applications? and why do you think its best for your needs?
0 notes
capyquest-logs · 4 months ago
Text
Update: Change in plans
So! I have to cut down the scope of this project a bit.
TL;DR: Combat and enemy design would eat up way too much of my time. I can't learn C++ fast enough to keep up with the game mechanics, and it takes an insane amount of time for VS files to update in Live Coding.
The two things I'm cutting are combat with enemies and... using C++. I'm really upset I can't use C++ for this particular project, but allow me to explain.
First, combat was sort of tacked onto my plans, so when I started to get a feeling of just how much work the rest of the game was going to be, I just decided it'd be best to just leave it out. Maybe in the future I can add enemies, but the grappling hook mechanic is more important and, probably, more work, so I'm setting combat to the side for now.
Now what I'm personally really bummed about is that I'm switching back to normal blueprints instead of coding in C++. There are a few reasons. First, learning the C++ syntax initially was easy and gave me a false sense of confidence. This is because I already had a really strong grasp on object-oriented programming, so just learning the new syntax was easy.
What's not so easy is the fact that Unreal Engine has hundreds of UE5-specific coding classes (by classes I mean the object-oriented coding term, not literal educational classes). And in order to use them, it would take me tons of time to do research and go digging in the documentation for every single new operation I wanted to use. I simply don't have that much time. If CapyQuest was my only responsibility, I would absolutely be okay with doing the research, but I am a full-time student and have other classes that need my attention as well.
The main reason I can't use C++ directly, though, is because my computer can't handle it. Compiling and saving within the blueprint editor takes mere seconds. When I was doing this Udemy course and started using Live Coding (basically the equivalent of blueprint compiling, for these purposes), it took a few seconds to a minute or so for the instructor's project to update. It took mine anywhere from 10 to 20 minutes for every single change I made. Even something as simple as adding a new variable would take ages to update. I just can't work with this happening.
From a little bit of research, I found that many UE users with 32gb of RAM took a few minutes to update, and the UE docs says that Epic employees use 64gb for their own development computers. I have 16gb on my PC, which is simply not enough.
If you've read to this point, thank you! I will refocus and use my time more effectively, and maybe look into upgrading my computer's RAM.
1 note · View note
iconpsychologies123 · 7 months ago
Text
How Mental Health Clinics Support Family and Loved Ones
Depression and anxiety are not diseases that just affect the patient but their relatives play an important role in the patient’s therapy. Mental health clinics include various services that serve not only the patient but also help his/her family or friends to achieve the overall objective of whole health for human beings. To help you decide if our Southland mental health clinic is conveniently located to serve the Tinley Park community, you should know how our facilities are designed to help families and friends of patients.
Tumblr media
Understanding the Role of Mental Health Clinics
Mental health clinics are centers focused on providing different treatment services for conditions such as anxiety, depression PTSD, and other mental disorders. They are outpatient clinics catering to mental health service consumers offering services from psychiatrists, therapists, and counselors developing individual client care programs that focus on both the mental and emotional state of the patients. Moreover, besides helping the patient, mental health clinics know that family and friends have a place in the patient's life too.
Family Involvement in Mental Health Treatment
Another advantage of mental health clinics is that friends as well as family members can attend the treatment. Regardless of the seminars, family therapy sessions, or support groups that are held, it is the knowledge that is given to the relatives to enable them to comprehend what it is the family member is going through.
For instance, a psychiatrist can enlighten families on the mental health condition, as well as the medications given and expected outcomes. This communication proves critical in eradicating a communication gap and overcoming the stigma related to mental health. Further, the families can be assisted on how to express themselves, how to set up a good tone in the house, and how to encourage the loved one and main patient in the process of rehabilitation.
Counseling for Families and Loved Ones
Mental health clinics understand that other family members may also have their own E&MH issues from the care of a person who is mentally ill. Some clinics provide counseling services that are developed especially for families. Such counseling sessions aid the family members to go through their emotions and learn how to handle their family members with this kind of illness.
During these counseling sessions, excellent communication strategies, regulation of expressions of emotion, and proper support for the affected person is explained to family members. They could also research how they might take care of themselves or avoid stresses related to caregiving and handling it independently.
Support Groups for Families and Loved Ones
The other service offerings of mental health clinics include support groups. These groups involve several leaders mostly therapists or counselors and empower the family members to meet other persons with similar experiences. Here, the person can find people who will listen and support and with whom they can share advice and feelings or share their everyday life.
Families can come together into one large support group to reduce this sense of loneliness as nobody is alone in dealing with these conditions. They also give a feeling that one is not alone, and that feeling is really important for people’s mental health.
Specialized Services for Families Near Tinley Park
If you are looking for a mental health clinic in Tinley Park, Illinois then you can get the best one which provides special service to the patient and his family also. A vast majority of the local clinics for mental health disorders offer integrated psychiatric treatment, therapy sessions, as well as family-oriented counseling. These clinics are based on the fact that everyone’s mental health does not only matter but is important to the individual but the whole family.
If you need a psychiatrist who can evaluate your family member’s state, a therapist who can offer family or individual counseling, or counseling services for caregivers, it can be helpful for you to know that mental health clinics in and around Tinley Park have what is needed to ease the process of healing for the entire family.
Conclusion
Counseling facilities play a major role in extending assistance not only to the patient but also to their relatives. These clinics offered therapy, counseling, education, and support groups to help all endowed initiations concerned in the care procedure to equip a good strategy to overcome the entire cruciality that happened throughout. When searching for assistance, locating a mental health clinic close to Tinley Park is sometimes the initial step in getting the care and assistance your loved one, and your family, require.
0 notes
crowes-nest · 8 months ago
Text
The "Object Inheritance" Post
I've been on a big game dev kick these past couple weeks. Remember a few years ago where I was posting about this area?
I want to finally sit down and make a post about object-oriented programming. It's something you hear about and nominally learn at college but really it's something you have to do before you "get it". Or, at least, that was the case for me. I want to document what I've learned about OOP and hopefully teach you something about it in the process. Sounds like fun?
Great. Let's get started.
First, you should understand that object-oriented programming isn't really a "thing" in the same way that functions or taco bell bean burritos are "things" in that it's more about the APPROACH you take to writing code than it is the actual code itself. You can't write some lines that declare your code is object-oriented the same way you can write some lines that declare a function that returns an int, for example. Object-oriented-ness is more describing how your code is structured than it is what it does.*
To take an object-oriented approach to programming means to break down problems into "objects" -- self contained bundles of code -- which can then interface with each other to solve the problem. You might already be thinking that some problems lend themselves better to an object-oriented approach than others, and, uh, yeah! OOP is just one approach you can take, it just happens that a LOT of difficult problems can benefit from OOP. Problems like, for example, game development!
So let's start thinking about game design in terms of objects. The first object we'll want is, unsurprisingly, a Player object. That Player object can contain lots of data for us, like its position, its sprite, and its state (alive, attacking, or dead, for example). All that information will be bundled together into our Player object, so if we ever want to know what the player's position is, for example, we can just "ask" it.
Tumblr media
The above code snippet comes from a function that moves an eye's pupil to follow the player's current position (it's a square eyeball). To get the player's current position, we call the Player object's "GetPos()" function. This is how objects "talk" to each other, and it's a really neat way to handle this type of problem. The most obvious point is that it makes the connection between the data and its owner explicit. There's no ambiguity here as to whose position vector we want to access, which makes it easier to read and write code.
But you might be thinking that this sounds overly complicated. Because, sure, we COULD make a Player object and make a function under that Player object that returns the player's position vector when called and then always call that function when we want to use the player's current position for something, but wouldn't it be simpler to just make the player's position some sort of global variable that any object can read and write to? This is how my old GameMaker projects worked and, uh, yeah, that's doable. But it's not ideal, and here's why:
Tumblr media
That GetPos function? It doesn't *just* return the player's position, it's a little more complicated than that:
When the player dies in my game, the game plays a small animation of them sliding off to the side and disintegrating. This technically changes their position, but not in a way that is helpful for some objects. The camera object, for example, doesn't want to follow the player after they've died -- especially if the death animation takes them out of bounds.
Tumblr media
Focus is on the tempX and tempY variables. The camera wants to get the player's current position so it can follow them, but also wants to stay in place during the death animation. This would require a lot of annoying extra logic and checks in the case where the player's position is stored in a global variable, but thanks to developing with an object-oriented mindset we can tackle this at the source, and just change how the player object tells other objects its current position.
So that's a basic use case of OOP. By implementing systems as objects that have to interface with each other through specific functions to access data, you make it easier to handle complex control logic while keeping code clean and readable.
But we're only getting started, because an OOP mindset is useful for soooo much more than just that.
Specifically, let's talk about inheritance.
Most games feature lots of enemies. Mario has to fight Goombas, Koopas, Piranha Plants, Boos, Bomb-ombs, Bullet Bills, Cheep Cheep, Bloopers, Thwomps, and many, many more. Under OOP as I've described it so far, this creates a huge problem -- if each of these enemies gets its own object, how will you check for collisions between Mario and these enemies? Will you have to do a check for if Mario is touching a Goomba, and then a check for if Mario is touching a Koopa, and then a check for if Mario is touching a Piranha Plant, and then a check for if...
I'll stop you there. Because if you've done it correctly, the answer is no, of course not.
Tumblr media
This is a section of the Enemy abstract class from my game. An abstract class is a special type of object that you can't directly create or interact with, instead you have to create "child" classes that "override" it.
Let me explain.
You know how in school on the first day of class they had those "getting to know you" worksheets? They usually asked you to input things like your name, your age, your favorite color, how many siblings you have, and what you want to be when you grow up. Your teacher made one worksheet, and had each student fill out their copy of it with their own personal details. The answers change from person-to-person, but the questions are al the same.
Making an abstract class is like making one of those worksheets. It's a contract that says "whenever I make a new enemy, I will answer these questions about how that enemy works."
So, for example, this Enemy abstract class has a "Damage" function on its worksheet that describes what happens when the enemy gets damaged. What's in those Damage functions is allowed to be different from enemy to enemy. The Damage function for Lukas, the final boss of the tutorial zone, is pretty simple. It just changes his state to a "hurt" state, causes a "flash" VFX to play, sets a couple timers to zero for bookkeeping and, most importantly, subtracts health and tracks if Lukas has run out of health and should die.
Tumblr media
Other enemies are more complicated. The Slime enemy, for example, also enters a "Damaged" state, sets some timers to 0, and keeps track of health. But unlike Lukas, the Slime also has to adjust its movement patterns for a little while in response to getting hit. It changes its hdir variable, a variable that controls what x direction it's moving in, and sets its vertical speed to -1. This creates a small "bounce" away from you after being hit.
Tumblr media
Other enemies don't even have to keep track of HP. The Switch enemy can't die and doesn't have any HP; instead, whenever it gets hit, it changes the layout of the room you're currently in. Its damage function looks like this:
Tumblr media
No HP, no dying. Just change the room and set a flag that it's been recently damaged for animation purposes.
So this is three different answers to the "what happens when you get Damaged" question I put on the enemy form. Does that mean I have to call three different functions whenever the player attacks one of these enemies?
Nope!
Tumblr media
This snippet of code comes from my Ranged object, which represents the player's ranged attacks (and also itself extends the Attack abstract class). First, the Ranged object asks the level to check its collision with enemies, and if the level returns a list with at least one enemy in it, the attack asks that enemy to take some damage, and then destroys itself. This is possible because, even though every enemy will have a different Damage function, the worksheet they all filled out required them to have a Damage function. Even though the Ranged object has no idea what this enemy's Damage function will do, it can still call it because every enemy has filled out the same worksheet and has a Damage function.
But, wait a second, the Ranged object "asks" the level to check its collision with enemies? Is the level also an object?
Of course it is! And it's pretty beefy too, it's got a LOT of variables and a LOT of functions that allow all the other objects -- players, enemies, etc. -- to ask it questions and interface with its data. Here's a few of those function definitions:
Tumblr media
Oh hey, there's that CheckEnemyCollision function I brought up earlier. Now we can see that it's a "public" function, meaning that anyone can call it, it returns a List of Enemy objects, and takes a Rectangle as input. Neato!
And this brings up the final use case I want to give for object-oriented programming.
You see, there's going to be lots of "area specific" code that not every section of the game will need. Cut-scenes, for example, typically only play once. If every area of the game has the code to handle every cut-scene in the game, that's going to result in a really bloated and difficult to navigate code base. This would probably inspire us to create different level objects for each area of the game, i.e. create a WorldOneLevel object, a WorldTwoLevel object, a WorldThreeLevel object, etc.
But the screenshot above shows a TON of really helpful functions that we would want all (or at least most) of our levels to have access to. Are we really going to copy and paste tens of functions into each of our Level objects? That's going to make things really hard to maintain, like if one of those functions has a bug in it we'd have to remember to patch the fix into every copy of that function across all the Level objects... there's gotta be a better way.
And, indeed, there is. To me, abstract classes are the use case of inheritance that is easiest to understand, but they are not the only use case of inheritance. As it turns out, you can inherit properties from any class you want -- including ones that aren't marked as abstract!
Tumblr media
That colon there means the TutorialLevel class inherits from the Level class. Inheritance outside of abstract classes is a lot more like real-life inheritance. If your parents have brown eyes, you will inherit that property and have brown eyes yourself. If your parent object has a CheckEnemyCollision function, you will inherit that property and also have the very same CheckEnemyCollision function yourself. As a programmer, this makes it easy to reuse code across different objects, saving you the headaches I described earlier.
This way we get to have our cake and eat it too. The base Level class contains definitions for a bunch of super helpful functions, which frees up the child classes to focus on code that only pertains to their specific area's needs.
The cherry on top is that if we ever decide that we DO want to re-define any of these functions in the child class, it's super easy. World two, for example, introduces these blocks that collapse when the player touches them. To implement this, I had that Level's class (and ONLY that Level's class) override the implementation of FullCheckCollision inherited from the Level class to include an extra check for collapsible walls:
Tumblr media
You'll notice that this function still calls base.FullCheckCollision, so we're still doing code reuse here, we just threw an extra check on top of it. This check is only needed for levels that use these "crumble" blocks, and as such the TutorialLevel object does not override this function because it does not need to.
And all this without ever having to touch the Player object's code. It just calls FullCheckCollision and does what it does with the results.
I'm not sure how much sense this made to you if you aren't a programmer -- It probably wouldn't have made much sense to ME like three years ago. Understanding how this stuff works and the implications for it is really difficult, but the more I play with it the more convinced I am of its power. A few weeks ago I hadn't even touched this code base in six months and yet I was able to pick game dev back up because my code was so organized. I was able to tell what every part of it did and what I need to do to create more content. What does a new enemy need to function, how do I ask the player to enter a cutscene, how do I load sprites... all of these questions had their answers organized into objects. It would have taken me a lot longer to get my sea legs back under me without them.
*Note: this is half-true. You've probably heard statements like "C++ is object-oriented while base C isn't", and that's because doing object-oriented programming well generally requires the programming language to build in features that enable you to use it. Once those features are in, however, there's nothing forcing you to use them. You can write programs in C++ without ever having to declare a class, and you can do a surprisingly close approximation of OOP in base C via structs, for example. This is basically what I'm talking about when I say that OOP is more of a mindset than something concrete.
0 notes
theo-the-ghost · 8 months ago
Text
Last song: 1985 by Bo Burnham
Favorite color: my favorites are royal blue and lime green
Last book: I'm not sure, but it was either "Tress of the emerald sea" by Brandon Sanderson or (I kid you not) "The subtle art of not giving a F" by Mark Manson
Last movie: MOXiE! (very good movie with a powerful feminist message, definitely recommend it)
Last TV show: I haven't watched open TV in such a long time, does watching One Piece on Netflix count?
Sweet/Savory/Spicy:
I really like sweets, but not when they have so much sugar I can feel my teeth rotting away as I bite yk?
Absolutely love savory food too and definitely get the chance to eat it more often, but I tend to eat savory food more as part of full meals than as snacks
And lastly, I have a low tolerance for spicy food, I can't handle strong pepper sauce, but I have this one very specific green pepper sauce (autism moment) that I absolutely love and eat so much it's sometimes a problem
Relationship Status: Despite my best efforts, I never had any sort of romantic relationship before.
Last Google search: if we're talking before this post, "Annie wilchmen", my current last search is "savory food" cuz I forgot what savory meant
Looking forward to: my next class tomorrow, it's about Object Oriented Programming, but really I just like learning Java
I'll make a second post just to tag people
ten people i'd like to get to know better
tagged by: @megkuna thanks <333
last song: the phantom of the opera
favorite color: muted green
last book: uhhhhhh oh man i really need to start reading books
last movie: phantom of the opera which i watched with a friend
last tv show: the original star trek which i also watched with a friend
sweet/spicy/savory: sweet, i love sugar too much
relationship status: single and not looking, i'd rather just have more friends
last thing i googled: "how to know if skincare routine is too harsh" my pimples hurt in a Different way now :(
current obsession: probably still mob psycho 100 but it's not what it used to be. yay depression
looking forward to: when my family finally moves into the new house
tagging: @scarecloud69 @disorganised-thoughtss @daneonrainbow @lawful-goof @officialkarinuzumaki @leo-probably @vychodocech @umkayonninay @mocha-blossom @spageddy29 no pressure though <3
3K notes · View notes
asquaretechnologies · 2 years ago
Text
Business Analytics Course In Kochi
Who is a Business Analyst?
A Business Analyst is responsible for acquiring and documenting business requirements, analyzing data and processes, and enabling communication among stakeholders to ensure that projects and initiatives fulfill business objectives and function successfully.
Opportunity for a business analyst
Business analysts have good job possibilities in a variety of industries, where they may use their abilities to promote data-driven decision-making, process improvement, and organizational strategic success.
Industries looking for business analysts
Finance and Banking
Healthcare
Information Technology
Retail
Manufacturing
Consulting
Telecommunications
Government
Energy and Utilities
Insurance
Transportation and Logistics
E-commerce
Pharmaceuticals
Hospitality
Education
Media and Entertainment
Aerospace and Defense
Automotive
Real Estate
Non-Profit
How to Become a Business Analyst
Educational Background: Bachelor’s Degree
Join a job-oriented Business Analytics Course
Asquare Job-oriented Business Analytics Course
Asquare Technologies course structure helps all the candidates to understand Business Analytics in an easy manner with lots of practical expertise a candidate will gain at the end of our Course.
The course module starts with the below topics,
MICROSOFT EXCEL FUNDAMENTALS
We are starting the course with Fundamental Excel Concepts for a 1-week program to make sure that all the candidates get hands-on  Excel basics, to begin with the analytics skills.
Microsoft Excel is a versatile and powerful tool that offers a wide range of benefits for data management, analysis, and decision-making, making it essential software for professionals in various fields.
ORACLE SQL BASICS
Once the candidates are fine with Excel Fundamentals, we will be starting with 2 weeks of Oracle SQL Fundamentals with DBMS (Database Management system) concepts to understand all the DDL, DML, and TCL Commands a developer should know.
This module will give a candidate a basic idea about a database, fundamentals on why SQL Language is important and when it should be used, and so on. If a candidate is really interested in learning more about Oracle SQL, we will be sharing some more references and finally, a small assignment will be completed by each candidate at the end of the SQL Course.
BUSINESS INTELLIGENCE WITH MICROSOFT POWER BI
Now starts the real game of Analytics with good visualization skills each candidate can showcase with a knowledge-sharing session on Business Intelligence Concepts / Data warehouse concepts. Every person willing to switch their career to Analytics should be aware of all the Warehouse concepts before starting with Microsoft Power BI or Tableau Data visualization sessions. Once the DWH Concepts are clear we will start with the basics of Power BI sessions with Excel as the data source and go ahead with more advanced Excel data, Different types of visuals, and covering all the other concepts a Power BI Developer should be clear about. DAX knowledge is important for a developer to create new measures based on the business requirements. Going forward use AI visuals, Bookmarks, slicers, security, Data refresh Dashboard creation, and so on. The Power BI Training will give a candidate a thorough hands-on experience, and interactive sessions from our experts. Once the training is over all the candidates are supposed to submit an individual project presentation on the respective business domain each candidate is interested in.
SALESFORCE TABLEAU 
Once the candidate is done with the Power BI Project, we are stepping into another interesting Visualization tool Tableau which has more visualization capabilities and can handle more volume of data compared to Power BI. It is better to have more than one BI Tools knowledge for a job seeker to get a job in a quicker manner either as a Power BI developer or as a Tableau Developer. Once a candidate is good in Power BI can easily adapt to Tableau. The way a candidate completes a Power BI project a similar approach is followed at the end Tableau course to do an individual project in Tableau and a review session is conducted by our experts with a rating to evaluate each candidate.
Why Asquare Technologies?
✅ISO 9001:2015 Certified ✅Affiliated To SKILL INDIA (NSDC) ✅Training By Experienced Professionals ✅Live Interactive Sessions ✅Mentorship for soft skills improvement ✅100% Placement Assistance ✅Project work and Review from Experts ✅Mock Interview program from Industry Experts ✅Internship Program for Live Project Experience
Certifications : 1. NSDC Certificate after Successful completion of Training 2. Completion Certificate from Asquare Technologies. 3. Internship Completion Certificate.
0 notes
grabhanem · 2 years ago
Text
I promised there would be computer engineering content on this blog and so far I have lied. That changes today - time for an infodump about my favorite dumpster fire!
The year is 1975, and the star of our show is a little-known semiconductor company by the name of Intel. A few years ago they released the highly successful 8080 processor, which would go on to inspire the Z80 that would power generations of students' graphing calculators. However, the 8080 would start to be outpaced by its competitors before too long (not to mention the Z80 undercutting it on price) and Intel needed their next big product.
Now Intel has a bad habit. (Stay tuned around the early 2000s to see this habit show itself again.) Intel knows that businesses and big datacenters have a lot of money to throw around, and it wants a piece of that pie, so it decides to build a big, complicated, fancy processor that it can sell to high bidders who must have the best of the best. At the same time it will develop a cheaper, hackier architecture in parallel that it can sell to the hobbyists looking for a direct upgrade from their aging 8080s. This smaller CPU will come to be known as the 8086 or x86, and will be used in a brand-new product called the IBM PC - don't worry about it, it doesn't turn out to be important. The big bucks are in this new high-end arcitecture, the iAPX 432.
So what makes this new architecture special? Well, we have this cool new idea of "high-level" programming languages, started by Fortran and Lisp in the '50s. The modern programmer doesn't need to know the exact details of their computer architecture to write programs; they write programs in a way that humans can understand, and then the compiler turns that into machine code that will run fast on the CPU. There's also a hot new educational language called Smalltalk that's introducing a whole new programming paradigm called "object-oriented design," where the programmer can define whole new types of data with their own behaviors. The problem with this is that current processors aren't really built for this kind of programming - they have simple instruction sets, and need a lot of instructions to do "easy" things like calling a function on a complex object. So, Intel reasons, this new generation of processors needs to be able to handle these operations in hardware so that programs can stay simple and fast.
Sounds great, right? Well the problem with all this is that iAPX 432 is obnoxiously object-oriented. On most architectures you call a new procedure by expanding the stack; think putting another piece of paper on top of the pile of unfinished work on your desk. On the 432, you create a "context object", with its own assorted metadata, which takes up 16 bytes of memory on its own before you've even started using it. On most architectures you allocate memory by making a system call, which tells your operating system to give you back some amount of memory. On the 432, you create a "physical storage object" that's associated in a hardware-dependent way with some number of other objects that actually use that space. It's a sort of interesting concept, but with the benefit of hindsight it just feels really bloated and complex for something that wasn't all that hard to handle in software.
That's not where it gets really cursed, though. You see, in the 70s and 80s memory was expensive, so it wasn't uncommon to see architectures use the fewest number of bytes necessary for each instruction. This meant that different instructions could have different lengths, which made predicting where the next instruction would start tricky; around this time there were some rumblings that an architecture where all instructions were the same length (like today's ARM) might be enough of an improvement to negate the cost of memory. But no, Intel said. We don't need your newfangled architectures. You know what? Just because you suggested that, your instructions are now bit-length variable. iAPX 432 instructions could vary in length from 10 to 300 bits (!!!). Now computer memory doesn't really work like that; in general you load things from memory in blocks of 32 or 64 or some other constant value, which hopefully lines up closely with the size of your instructions. So the decoder had to, on the fly, realign the instructions to whatever bit they happened to start on and keep loading memory up to 10 more times in a worst-case scenario until the entire instruction had been loaded into the decoder, and then it had to figure out what the instruction was actually trying to do, and then it had to actually do it.
When Intel went to implement this into hardware, things really started to catch up with them. All these hardware features they'd designed had to be implemented by actual hardware, to the tune of around 100,000 transistors - not too bad by modern standards, but a significant problem when the state of the art of the time was around 50,000 transistors per chip. This meant the CPU had to be implemented as two separate chips: one for decode and one for execution. This added the complication that the high-speed CPU data lines had to be run across two different sockets rather than being on a single piece of silicon, severely limiting speed and adding cost for high-speed data lines.
The pain didn't stop there. A lot of weird architectural issues can be swept under the rug if you have a compiler that knows how to deal with them. The issue is, the iAPX 432 didn't have that. A very important part of optimizing code is function calling; you do it a lot, and it's very expensive if you do it wrong. The iAPX 432's Ada compiler would do just about everything the most expensive possible way; it would call functions using the universal function-calling operations even when it would be faster to call them locally, and it would pass all the function arguments by copying the entire object rather than just providing a link. Some benchmarks found that the CPU was spending more than 90% of its time just copying arguments to and from functions.
With all of these issues, the CPU was quickly eclipsed by the much more successfull 8086 and its derivatives, and was taken off the market shortly afterward, and Intel learned their lesson about releasing overcomplicated architectures trying to catch new trends on the hardware side that would completely underdeliver in actual applications. (Well, for a little while, at least.)
(ammunition for this unhinged rant sourced mostly from the Wikipedia page as well as this book chapter with a smattering of other articles)
1 note · View note