|
Slacker007 wrote: also, the definition of engineer does not include "software".
There are many, many more types of engineers. I studied computer engineering in college. A 5 year graduation program which is a mix of software, electric and physics.
But there are many more... Environmental, Hydraulics, Materials, Production, etc...
To alcohol! The cause of, and solution to, all of life's problems - Homer Simpson
Our heads are round so our thoughts can change direction - Francis Picabia
|
|
|
|
|
Interesting.
So the guy that designs the hardware for a flight simulator is an engineer, but the guy that designs the software that makes it work is not.
1. An Architect focus on aesthetics, including appearance and function.
2. An Engineer oversees the implementation of the architect's plans.
3. A Programmer is someone who can write code. How well depends on experience.
So which of the above are you?
In my experience, most people implementing the code fall into category 3. To ensure quality, they should be overseen by someone who falls into category 2. As for category 1; many people that fall into category 2, also fall into category 1.
You be the judge.
INTP
"Program testing can be used to show the presence of bugs, but never to show their absence." - Edsger Dijkstra
"I have never been lost, but I will admit to being confused for several weeks. " - Daniel Boone
|
|
|
|
|
Coding is something of a black art.
And any engineer would scoff at our lack of rigor.
Compared to the hardware guys, our QA is stodgy, at best.
TDD improves this some. And I say that as someone who doesn't do TDD unless forced.
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
There are very very few situations in which software must be engineered. Flight control systems, medical monitoring systems, etc.
I laugh whenever someone calls himself a Software Engineer.
|
|
|
|
|
Manifacturing, automotive... I work only on these kinds of software and I don't laugh when I get free ranging coders with no respect for structure.
Besides, software must be maintained. Leave it in the hands of "those who code" and it becomes impossible in the long run, with constant costs for substitution or worse, legacy maintaining.
Coders are slowly dying in the industry, software engineers are much more requested. Being capable of analyzing, detailing and following a process is conductive to realeasing workable software on time and with profit. Software engineering is made of measures, models, previsions, traceability and documentation.
Algorithm developement is not, but it's sadly a niche activity.
GCS d--(d+) s-/++ a C++++ U+++ P- L+@ E-- W++ N+ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- r+++ y+++* Weapons extension: ma- k++ F+2 X
|
|
|
|
|
I agree with that, generally, but at least C# gives you the capability to create solid code.
As much as python is great, languages like that, and like BASIC whose grammars are Broken As Designed teach bad habits.
Now, C and C++ are so flexible it's easy to code with bad habits. Very easy.
C# is a nice happy medium. It's flexible enough to be powerful, and to support "real" coding.
It's simple enough to make it easy to have good practices.
I think C# does a better job of fostering good dev habits than C
I think with C you better already have a handle on your habits. And it takes time to get them right.
An example is putting constants before vars in comparisons like
if(0==i) ;// do stuff there
instead of if(i==0)
This kind of thing is important in C to avoid accidental assignment
in C# it's not as big a deal.
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
codewitch honey crisis wrote: An example is putting constants before vars in comparisons like
if(0==i) ;// do stuff there
instead of if(i==0)
True, but when you use warning level 4, like I always do, the compiler catches that for you. It didn't always do that though, that's for certain. Not until the concept of lvalues and rvalues came.
"They have a consciousness, they have a life, they have a soul! Damn you! Let the rabbits wear glasses! Save our brothers! Can I get an amen?"
|
|
|
|
|
Having to learn pointers in C teaches you how "references" work in C# and Java.
Better and quicker than learning assembly.
Most modern languages run on top of libraries that are coded in C.
I think C is a great learning language to understand memory, variables, call stack, etc.
I would not do any large scale projects in it though.
Knowing C function pointers and the like makes the concept of a class v-table something that you should be able to visualize quite easily. No magic!
|
|
|
|
|
I liked C because it can teach so many fundamentals. When students learn higher-order languages, they should have an appreciation for the magic going on underneath.
Software Zen: delete this;
|
|
|
|
|
The answer entirely depends on whether the purpose of learning is for the academic reasons; or for understanding how computer works, or whether you are looking for a job.
I have a personal choice of going toward C# for professional stuff, this language has really proven to be a game changer in every way. You can use the same language to write simple console programs, web applications, microservices, machine learning, games, mobile apps, cloud-native apps, what not. This was the first language I learnt, and it really gives a lot of power and support for the programmer, while abstracting away the unnecessary stuff—*coughs* InputStreamReader *coughs*.
For academic reasons, I might recommend JavaScript—hold on, hold on—as most of the times, the concepts are recursive. For example, a hello world in C is,
#include <stdio.h>
int main() {
printf("Hello world!\n");
} What does that include do? What does it mean to have an int with main. Now this point leads to a very serious problem with today's educational system, and that is, most of the times teachers would leave the int out and write it with void. Woah, hold on. That causes the students to think that it is okay to ignore the standards and write the code that compiles.
There are several issues with JavaScript, but at least it is better than Python, in terms of familiarity with other languages like C, C++ or JavaScript. If not JavaScript, then go for C++ or C.
But hey, either them C or C++. Do not involve pointer to structure, that uses a reference type based on a macro. Just don't do that!
Feel free to disagree, and enlighten me, please.
The sh*t I complain about
It's like there ain't a cloud in the sky and it's raining out - Eminem
~! Firewall !~
modified 1-Apr-19 1:40am.
|
|
|
|
|
Afzaal Ahmad Zeeshan wrote: The answer entirely depends on whether the purpose of learning is for the academic reasons; or for understanding how computer works, or whether you are looking for a job.
The first thing to determine is whether or not the student has the aptitude for the kind of critical thinking which is required.
That's why you start with an easy language and then work up to the more useful languages.
Just as a pilot will learn on something like a Cessna even if he dreams of flying 747s.
|
|
|
|
|
C is at least a third language. You need to learn an easy (safe) language first.
When I learned, it was: BASIC, Pascal, (COBOL, FORTRAN)*, C...
I think Python is currently the language best suited to be a first language, but even it is too modern. (Then move on to better languages.)
* Didn't really learn these, but I was able to complete the homework unassisted and with no Internet.
|
|
|
|
|
C is the first choice when coding for some embedded hardware or high perfomance computing.
I love the power of C to pick one's nose in memory
Press F1 for help or google it.
Greetings from Germany
|
|
|
|
|
Yes, but not to learn first.
|
|
|
|
|
I started with C and I'm glad that I did, I think that it gives you a real feel of what's going on inside the box.
Whenever you find yourself on the side of the majority, it is time to pause and reflect. - Mark Twain
|
|
|
|
|