_Bata_ :
I'm finishing my secondary educations soon and i have to think about what i want to do for the rest of my life. Computer hardware passionates me, it's my hobby. I just love to open pc's and just see what's in them, fix stuff, investigate about new new technologies, new brands, components specifications, architechtures, how things work and everything. On the other side, i see software engineering as my dream career that will guarantee me a succesful future, i just love the idea of creating code and telling a computer what to do and using it for utility. I would like having such a flexible and well paying job, i really want to learn coding soon and get into it because i think it brings you so many opportunities and if you are a programmer you can work at big companies like Valve, Google or microsoft, and later on i can start developing my own software and make a small company. The problem is that i don't know any programming language, not even a little, but i'm completely motivated to do so and i was thinking about starting with C.
So reading all of this, what do you think would be a better career for me?
Hi,
Computer Engineer here. Hopefully I can answer some of your questions.
Software Engineering is in a bit of a funny space right now. In theory, it's an engineering discipline which involves the application of scientific principles to problem solving. In practice, it's often treated as a tradecraft which involves the application of hard skills as a means to an end. There's nothing wrong with this at all, but there is a live debate as to whether Software Engineering is truly Engineering or whether it is a glorification of the "Programming" trade.
In my opinion, the classical definition of Engineering is a bit too rigid. Software Engineering may be at odds with classical Engineering fields in the same sense that many structural engineers know absolutely squat about welding or carpentry while welders and carpenters know squat about hydraulic pressure, and dynamic and static loading. Many schools have proper Software Engineering programs which attempt to adapt scientific principles to a purely algorithmic world while others have Software Engineering programs which are just dressed up "Programming" courses. A proper Software Engineering program should focus very little on programming languages, and heavily on principles of design. By comparison, a proper Computer Science program should focus very little on programming languages, and heavily on the study of algorithms.
All of the above naturally go hand in hand to a high degree. An individual with a computer science degree that can't actually implement a solution to any problem due to a lack of hard skills (knowledge of programming languages) is completely worthless. However, a self-taught individual, or an individual with a technical-college diploma is equally worthless if he or she is unable to adapt to a specific scenario that he or she has not seen before or apply the appropriate principles to solve a unique problem.
"Hardware Engineering" is not a field of study. There are a wide array of "Information Technology" careers, which span from cleaning cockroaches out of power supplies at Best Buy through managing enterprise-level datacenters that are running mission critical applications. Then, there's "Computer Engineering" which is my own field of expertise.
Computer Engineering is a particularization of Electrical Engineering which specializes in digital systems. There's a tremendous amount of overlap between the two disciplines. There's also quite a bit of overlap between Computer Engineering and Computer Science, but this is limited primarily to the fundamentals of numeric computation and baslic algorithms. There is also some overlap between Computer Engineering and Software Engineering, especially with respect to safety systems, control systems, and operating systems.
Computer Engineering involves a ton of programming, almost entirely in architecture-specific Assembly and C. C++ is basically verboten, leave that application-level crap to the Softies
😛 If you're looking to get your feet wet with programming, C is definitely the place to start.
C is interesting in that it is essentially an abstract, portable assembler. The language grammar is completely divorced from the language's standard library; this is not true for C++. This is why C is extremely popular for "bare metal programming", or writing programs that run directly on the microprocessor without an operating system in the middle. In fact, most operating system kernels are written in C; Windows is the notable exception, that kernel being written in C++ with some serious hackery involved. C is a great language, and is always my "goto" language when I want to make sure that something gets done properly.