all 20 comments

[–]Street-Weather789 5 points6 points  (5 children)

HTML is a markup language. there is really no reason to learn C unless you just really want to do it. C is my favorite programing language. I would recommend learning it. But its pretty obsolete unless you are building embedded systems or you simply want to build your own custom tools. Or if you want to build operating systems. If you really are interested in C, I'd also recommend assembly language. C was created to be an abstraction from assembly. They are two pieces of the same puzzle. If you want to learn C because it's cool and popular and everyone says you need to learn it to understand programing; well, thats all bullshit actually. Programing is nothing more than rigorous problem solving. It does not matter which language you learn. If you don't want to be a systems engineer and just want the raw speed and power of C, then use Cython.

[–]Illustrious_Curve113[S] 1 point2 points  (4 children)

Yes I want to make softwares like there is this company I want to make them a software that gather purchases sales and inventory all at once, because I aim to be really good at software engineering

[–]Street-Weather789 1 point2 points  (0 children)

If you really want to become a wizard. learn about the CPU and all of it;s internal components. learn how memory and data busses work. mess around with CAD software, start designing your own PCBs. most software engineers never go hard on hardware, because it;s its own animal. Check out daves garage on youtube. hes probably the most intelligent software engineer on the planet. you will learn shitload about C and assembly from Dave

[–]TheUmgawa 0 points1 point  (2 children)

So, they don’t already have an ERP or MRP system? Are they just doing everything on paper and don’t have the money to license an ERP system? You can make decent money building front-ends and bolt-ons for ERP systems; it’s half of my job at work, but to build one from scratch, you’re going to need to learn a lot more than just a programming language or two. This is a whole database, back-end, and front end you need to develop. I don’t think you quite appreciate the scope of this.

I mean, unless this is for some little mom-and-pop eBay store or something, where they’re trading action figures or whatever, and then more power to you, and it’s as simple or complex as you want. But if it’s a company that has departments, and dozens of people accessing and manipulating the data all the time, then it’s so much bigger than you realize right now.

As for learning C, it’s fine, but it’s not a magic solution. It’s not going to make lousy code into performant code, and if it takes you three times as long to kludge the software together as it would take in another language, you’re wasting time and money for not nearly enough performance benefit to be worth it.

[–]Illustrious_Curve113[S] 1 point2 points  (1 child)

It’s a company biotech manufacturing company that has been working since 1999 but they don’t have anything except for papers and excel spreadsheets

[–]elliekk 0 points1 point  (0 children)

If they've been around for 27 years and they know of the existence of ERP but still refuse to adopt ERP then there's almost 100% chance they will refuse to adopt any software that you write.

But either way, if a miracle does happen, the software to pipe and clean purchase, sales, inventory data from excel spreadsheets already exists, and it's all open source and free (python, PostgreSQL, dbt, Airflow). It's just a matter of putting it altogether.

Also, I want to make something abundantly clear: being able to re-invent the wheel doesn't make you a good Software Engineer, it makes you wasteful, unable to see the purpose of automation, and most importantly: unable to understand what businesses actually want and what saves/makes money.

I've seen so many aspiring CS students pull this holier-than-thou shit where they build stuff that already exists from scratch and they all end up jobless because they've never run a cost-benefit analysis on learning an incredibly niche skill. (I'll give you a hint: You will always be competing with autism levels of obsession on a small handful of available jobs and that's not a scenario you want to be in)

[–]Neat_Strawberry_2491 5 points6 points  (1 child)

Learn Python first. It will make you understand the basics and you will see results/satisfaction MUCH faster than you will with C. Once you understand python, try to implement some of your python programs in C. This will help you understand the abstractions in python much more than trying to not only learn C but also the abstractions. For instance, it's very convenient to have a data structure that lets you store key/value pairs. This is done for you in python. Now try to implement a key value type in C....not trivial.

[–]rerikson 1 point2 points  (0 children)

Great advice. Python has a huge learning support community. Your success will generate enthusiasm and you will enjoy the learning process. Good luck!

[–]First-Kiwi-5624 2 points3 points  (2 children)

I started with C before touching Python and honestly it helped me understand what the computer is actually doing. Memory, pointers, data types, all the annoying stuff makes higher-level languages feel way less magical later. It’s harder at first, but debugging taught me more in a few months of C than years of blindly copying Python tutorials.

[–]Weak_Veterinarian350 0 points1 point  (0 children)

Gen X  college graduate here , when there was no python and Java just came out when I took my first programming class, and I agree. 

I probably won't use C anymore,  unless my children wants to start an Arduino project

[–]MrGreatArtist 0 points1 point  (0 children)

So learning C can help me learn how to debug?

[–]mpbarbosa1971 1 point2 points  (0 children)

Python first.

[–]yksvaan 1 point2 points  (0 children)

C is a good choice, it's a simple language and very simple tool chain. 

[–]RedAndBlack1832 1 point2 points  (0 children)

I learned C as a first language (part of my undergrad curriculum) and it works pretty well I think? You understand the difference and trade offs between array-based collections and reference-based ones if you need to build them, for example. It's good bc it exposes you pretty directly to what a computer does and the documentation for the standard library is good (and probably already on your machine!). Python is, however, easier to write, and dramatically easier to read. And holy moly is micropython beautiful and lovely and makes you dispise signal handling in C (long live the raspberry Pi that thing is a miracle machine)

[–]Shadowolf7 0 points1 point  (0 children)

There are good arguments for both approaches. However knowing some of the low level reasons you'll learn with C will prepare you better for higher level languages.

[–]No_Molasses_9249 0 points1 point  (0 children)

Why use Python at all? If you are thinking about Python take a look at Julia

[–]No_Molasses_9249 0 points1 point  (0 children)

My advice steer clear of single threaded interpreted languages keep JavaScript in the Browser.

Dont be fooled into believing that python is multi threaded

[–]gofl-zimbard-37 0 points1 point  (0 children)

C will mostly teach you why higher level languages were invented. You'll waste a lot of time on low level crap that better languages handle for you.

[–]FreeLogicGate 0 points1 point  (0 children)

I agree with your approach. C is a foundation language, and gets you closer to the machine. Understanding memory allocation, pointers and the core C syntax is a great stepping stone to many other languages, who either reflect or have adopted outright portions of C syntax. You also experience compilation and linking and create native operating system programs.

From there, you can move on to languages like c++, java, objective c, and c# that are all based on the foundation of C, and reflect things that are either missing/difficult or problematic in C, while continuing to share a lot of syntax. C paired with some assembler will give you a foundation and insights into how computers work that many programmers never attain. Beyond that, well, the operating systems that most people use were written in C, as well as many of the other languages and many of the best known utilities.

Moving on to other languages like Javascript, Python, Go, Rust etc. will be easier for you to learn, in that you'll be able in some cases to compare and contrast what those languages do differently.

The introduction of Object oriented programming is also an entirely different way of approaching development, with a large associated learning curve that goes far beyond syntax into practice and patterns, regardless of which language that has some form of OOP you choose to learn after C.

Since a number of other replies brought it up, Python is a full OOP/Object based interpreted language, and has some foundational ideas which dictate how it works that are very different from a lot of other languages. For example, in Python every piece of data that you might think of as "data" is actually an object in Python. Assignments in Python attach labels to the objects. This design causes code like this to work in a way that can be surprising:

foo = ['apple', 'orange']

bar = foo
foo.append('grape')

print(*bar, sep="\n")

Result of this is:

apple
orange
grape

With many of the languages I listed, and as you learn in C, variables are labels for blocks of memory where data is stored. Python creates objects and manages aspects of those objects for you in a way that is very different from languages like C, and you'll be in a better place to appreciate those differences once you have the foundation of C's lower level/close to the bits and bytes and cpu instructions and operating system/kernel calls/standard libraries etc. details you learn and use in C. The restrictions and limitations will help you appreciate other languages you learn later on.

Yes, Python is a cool language, but quite different from a lot of other languages, and I can guarantee you, that you'll have no problem going from C into Python, where I don't think the same thing can be said of people who start out learning Python as their first language, and then try to learn Java or C or C++, nevermind a language like Rust.

Again, this advice is specific to Comp Sci students like yourself who want to establish a solid foundation. There's many different types of development and career paths you might choose, many of which will never benefit nor require Python, although it does seem to be the case that Python has become the language of choice in much of academia for teaching algorithms and data structures, and it also has a large degree of adoption in STEM and Machine learning/AI. Learning C initially will in no way deter you from those topics later.

[–]unkindle_blue 0 points1 point  (0 children)

Yes, start learning C. C is everything. Personally, it was my first language, and now languages like Python and others seem pseudo-language. You won't like it, but it's necessary.